From 57f7fb788dd7c3bd9b1ca20693d4c4d1ed9ee187 Mon Sep 17 00:00:00 2001 From: Jason Date: Wed, 3 Jul 2024 12:29:49 +0200 Subject: [PATCH 1/9] feat: push notifications setup --- Bitkit.xcodeproj/project.pbxproj | 153 ++++++++++++++++++ .../UserInterfaceState.xcuserstate | Bin 50137 -> 47455 bytes .../xcschemes/xcschememanagement.plist | 5 + Bitkit/Bitkit.entitlements | 12 +- Bitkit/BitkitApp.swift | 74 +++++++++ Bitkit/Constants/Env.swift | 4 +- Bitkit/ContentView.swift | 12 +- Bitkit/Services/LightningService.swift | 17 +- BitkitNotification/Info.plist | 13 ++ BitkitNotification/NotificationService.swift | 34 ++++ 10 files changed, 315 insertions(+), 9 deletions(-) create mode 100644 BitkitNotification/Info.plist create mode 100644 BitkitNotification/NotificationService.swift diff --git a/Bitkit.xcodeproj/project.pbxproj b/Bitkit.xcodeproj/project.pbxproj index d04c6dc1..e9755d97 100644 --- a/Bitkit.xcodeproj/project.pbxproj +++ b/Bitkit.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 961058DF2C355B5500E1F1D8 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 961058DE2C355B5500E1F1D8 /* NotificationService.swift */; }; + 961058E32C355B5500E1F1D8 /* BitkitNotification.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 961058DC2C355B5500E1F1D8 /* BitkitNotification.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 9637E6D32C32CE79004A92FC /* Env.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9637E6D22C32CE79004A92FC /* Env.swift */; }; 9637E6D52C32D811004A92FC /* OnChainService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9637E6D42C32D811004A92FC /* OnChainService.swift */; }; 9637E6D82C32D8A7004A92FC /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = 9637E6D72C32D8A7004A92FC /* BitcoinDevKit */; }; @@ -26,6 +28,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 961058E12C355B5500E1F1D8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 96FE1F592C2DE6AA006D0C8B /* Project object */; + proxyType = 1; + remoteGlobalIDString = 961058DB2C355B5500E1F1D8; + remoteInfo = BitkitNotification; + }; 96FE1F732C2DE6AC006D0C8B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 96FE1F592C2DE6AA006D0C8B /* Project object */; @@ -42,7 +51,24 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 961058E72C355B5500E1F1D8 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 961058E32C355B5500E1F1D8 /* BitkitNotification.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ + 961058DC2C355B5500E1F1D8 /* BitkitNotification.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = BitkitNotification.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 961058DE2C355B5500E1F1D8 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = ""; }; + 961058E02C355B5500E1F1D8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 9637E6D22C32CE79004A92FC /* Env.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Env.swift; sourceTree = ""; }; 9637E6D42C32D811004A92FC /* OnChainService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnChainService.swift; sourceTree = ""; }; 9637E6D92C32E573004A92FC /* OnChainViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnChainViewModel.swift; sourceTree = ""; }; @@ -64,6 +90,13 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 961058D92C355B5500E1F1D8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 96FE1F5E2C2DE6AA006D0C8B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -90,6 +123,15 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 961058DD2C355B5500E1F1D8 /* BitkitNotification */ = { + isa = PBXGroup; + children = ( + 961058DE2C355B5500E1F1D8 /* NotificationService.swift */, + 961058E02C355B5500E1F1D8 /* Info.plist */, + ); + path = BitkitNotification; + sourceTree = ""; + }; 9637E6D12C32CE65004A92FC /* Constants */ = { isa = PBXGroup; children = ( @@ -131,6 +173,7 @@ 96FE1F632C2DE6AA006D0C8B /* Bitkit */, 96FE1F752C2DE6AC006D0C8B /* BitkitTests */, 96FE1F7F2C2DE6AC006D0C8B /* BitkitUITests */, + 961058DD2C355B5500E1F1D8 /* BitkitNotification */, 96FE1F622C2DE6AA006D0C8B /* Products */, ); sourceTree = ""; @@ -141,6 +184,7 @@ 96FE1F612C2DE6AA006D0C8B /* Bitkit.app */, 96FE1F722C2DE6AC006D0C8B /* BitkitTests.xctest */, 96FE1F7C2C2DE6AC006D0C8B /* BitkitUITests.xctest */, + 961058DC2C355B5500E1F1D8 /* BitkitNotification.appex */, ); name = Products; sourceTree = ""; @@ -189,6 +233,23 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 961058DB2C355B5500E1F1D8 /* BitkitNotification */ = { + isa = PBXNativeTarget; + buildConfigurationList = 961058E42C355B5500E1F1D8 /* Build configuration list for PBXNativeTarget "BitkitNotification" */; + buildPhases = ( + 961058D82C355B5500E1F1D8 /* Sources */, + 961058D92C355B5500E1F1D8 /* Frameworks */, + 961058DA2C355B5500E1F1D8 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BitkitNotification; + productName = BitkitNotification; + productReference = 961058DC2C355B5500E1F1D8 /* BitkitNotification.appex */; + productType = "com.apple.product-type.app-extension"; + }; 96FE1F602C2DE6AA006D0C8B /* Bitkit */ = { isa = PBXNativeTarget; buildConfigurationList = 96FE1F862C2DE6AC006D0C8B /* Build configuration list for PBXNativeTarget "Bitkit" */; @@ -196,10 +257,12 @@ 96FE1F5D2C2DE6AA006D0C8B /* Sources */, 96FE1F5E2C2DE6AA006D0C8B /* Frameworks */, 96FE1F5F2C2DE6AA006D0C8B /* Resources */, + 961058E72C355B5500E1F1D8 /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( + 961058E22C355B5500E1F1D8 /* PBXTargetDependency */, ); name = Bitkit; packageProductDependencies = ( @@ -256,6 +319,9 @@ LastSwiftUpdateCheck = 1540; LastUpgradeCheck = 1540; TargetAttributes = { + 961058DB2C355B5500E1F1D8 = { + CreatedOnToolsVersion = 15.4; + }; 96FE1F602C2DE6AA006D0C8B = { CreatedOnToolsVersion = 15.4; }; @@ -289,11 +355,19 @@ 96FE1F602C2DE6AA006D0C8B /* Bitkit */, 96FE1F712C2DE6AC006D0C8B /* BitkitTests */, 96FE1F7B2C2DE6AC006D0C8B /* BitkitUITests */, + 961058DB2C355B5500E1F1D8 /* BitkitNotification */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 961058DA2C355B5500E1F1D8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 96FE1F5F2C2DE6AA006D0C8B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -320,6 +394,14 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 961058D82C355B5500E1F1D8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 961058DF2C355B5500E1F1D8 /* NotificationService.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 96FE1F5D2C2DE6AA006D0C8B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -356,6 +438,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 961058E22C355B5500E1F1D8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 961058DB2C355B5500E1F1D8 /* BitkitNotification */; + targetProxy = 961058E12C355B5500E1F1D8 /* PBXContainerItemProxy */; + }; 96FE1F742C2DE6AC006D0C8B /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 96FE1F602C2DE6AA006D0C8B /* Bitkit */; @@ -369,6 +456,61 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + 961058E52C355B5500E1F1D8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = KYH47R284B; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = BitkitNotification/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = BitkitNotification; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 17.5; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = to.Bitkit.native.BitkitNotification; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 961058E62C355B5500E1F1D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = KYH47R284B; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = BitkitNotification/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = BitkitNotification; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; + IPHONEOS_DEPLOYMENT_TARGET = 17.5; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = to.Bitkit.native.BitkitNotification; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; 96FE1F842C2DE6AC006D0C8B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -486,6 +628,7 @@ 96FE1F872C2DE6AC006D0C8B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = Bitkit/Bitkit.entitlements; @@ -526,6 +669,7 @@ 96FE1F882C2DE6AC006D0C8B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = Bitkit/Bitkit.entitlements; @@ -656,6 +800,15 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 961058E42C355B5500E1F1D8 /* Build configuration list for PBXNativeTarget "BitkitNotification" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 961058E52C355B5500E1F1D8 /* Debug */, + 961058E62C355B5500E1F1D8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 96FE1F5C2C2DE6AA006D0C8B /* Build configuration list for PBXProject "Bitkit" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate b/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate index 9a82fa0fdff5a882fc440b0cdc9d612be79443b9..2e466e1dee61380cd2fdf99e7b86b3269a78a325 100644 GIT binary patch literal 47455 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 bW-ey_$lU&)du!F|f9$mO|DN*y$UOfqCPspN literal 50137 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 pclYD&r#(}9z&(NorderHint 0 + BitkitNotification.xcscheme_^#shared#^_ + + orderHint + 1 + diff --git a/Bitkit/Bitkit.entitlements b/Bitkit/Bitkit.entitlements index f2ef3ae0..6c23f6f0 100644 --- a/Bitkit/Bitkit.entitlements +++ b/Bitkit/Bitkit.entitlements @@ -2,9 +2,13 @@ - com.apple.security.app-sandbox - - com.apple.security.files.user-selected.read-only - + aps-environment + development + com.apple.developer.aps-environment + development + com.apple.security.app-sandbox + + com.apple.security.files.user-selected.read-only + diff --git a/Bitkit/BitkitApp.swift b/Bitkit/BitkitApp.swift index d427b6a4..c49949ae 100644 --- a/Bitkit/BitkitApp.swift +++ b/Bitkit/BitkitApp.swift @@ -7,11 +7,85 @@ import SwiftUI +//TODO move to util and show in onboarding +func requestPushNotificationPermision(completionHandler: @escaping (Bool, Error?) -> Void) { + let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] + UNUserNotificationCenter.current().requestAuthorization( + options: authOptions, + completionHandler: completionHandler + ) + UIApplication.shared.registerForRemoteNotifications() +} + +class AppDelegate: NSObject, UIApplicationDelegate { + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + UNUserNotificationCenter.current().delegate = self + + //Permision is requested on coach view appearance + return true + } + + func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { + print("PUSH USER INFO") + print(userInfo) + + completionHandler(UIBackgroundFetchResult.newData) + } +} + +@available(iOS 10, *) +extension AppDelegate : UNUserNotificationCenterDelegate { + // Receive displayed notifications for iOS 10 devices. + func userNotificationCenter(_ center: UNUserNotificationCenter, + willPresent notification: UNNotification, + withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { + let userInfo = notification.request.content.userInfo + + + print("PUSH USER INFO:") + print(userInfo) + + // Change this to your preferred presentation option + completionHandler([[.banner, .badge, .sound]]) + } + + func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { + let token = deviceToken.map { String(format: "%02hhx", $0) }.joined() + print("***TOKEN \(token)") + } + + func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { + print("didFailToRegisterForRemoteNotificationsWithError") + print(error.localizedDescription) + } + + func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { + let userInfo = response.notification.request.content.userInfo + + print("PUSH USER INFO:") + print(userInfo) + + completionHandler() + } +} + @main struct BitkitApp: App { + @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate + var body: some Scene { WindowGroup { ContentView() + .onAppear { + //TODO move this elsewhere + requestPushNotificationPermision { (granted, error) in + if granted { + print("PUSH NOTIFICATION GRANTED") + } else { + print("PUSH NOTIFICATION DENIED") + } + } + } } } } diff --git a/Bitkit/Constants/Env.swift b/Bitkit/Constants/Env.swift index 95b18b4c..d17f3a43 100644 --- a/Bitkit/Constants/Env.swift +++ b/Bitkit/Constants/Env.swift @@ -30,8 +30,8 @@ struct Env { switch network { case .regtest: //cargo run --release --bin electrs -- -vvv --jsonrpc-import --daemon-rpc-addr 127.0.0.1:18443 --cookie polaruser:polarpass - // return "https://jaybird-logical-sadly.ngrok-free.app" - return "http://localhost:3000" + return "https://jaybird-logical-sadly.ngrok-free.app" + // return "http://localhost:3000" case .bitcoin: fatalError("Bitcoin network not implemented") case .testnet: diff --git a/Bitkit/ContentView.swift b/Bitkit/ContentView.swift index 22b4ac04..0cc09aa5 100644 --- a/Bitkit/ContentView.swift +++ b/Bitkit/ContentView.swift @@ -32,8 +32,9 @@ struct ContentView: View { if let lnBalance = lnViewModel.balance { Text("Lightning \(lnBalance.totalLightningBalanceSats)") + Text("Lightning onchain \(lnBalance.totalOnchainBalanceSats)") } - + if let onchainBalance = onChainViewModel.balance { Text("On Chain \(onchainBalance.total)") } @@ -64,9 +65,16 @@ struct ContentView: View { Task { do { try await lnViewModel.start() + } catch { + print("LN Error: \(error)") + } + } + + Task { + do { try await onChainViewModel.start() } catch { - print("Error: \(error)") + print("OnChain Error: \(error)") } } } diff --git a/Bitkit/Services/LightningService.swift b/Bitkit/Services/LightningService.swift index 15724d67..79a2f259 100644 --- a/Bitkit/Services/LightningService.swift +++ b/Bitkit/Services/LightningService.swift @@ -47,8 +47,23 @@ class LightningService { } try node.start() + + connectToTrustedPeers() + } + + private func connectToTrustedPeers() { + guard let node else { + //TODO throw custom error + return + } + for peer in Env.trustedLnPeers { - try node.connect(nodeId: peer.nodeId, address: peer.address, persist: true) + do { + try node.connect(nodeId: peer.nodeId, address: peer.address, persist: true) + } catch { + //TODO log error + print("Error connecting to peer: \(peer.nodeId)") + } } } diff --git a/BitkitNotification/Info.plist b/BitkitNotification/Info.plist new file mode 100644 index 00000000..57421ebf --- /dev/null +++ b/BitkitNotification/Info.plist @@ -0,0 +1,13 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.usernotifications.service + NSExtensionPrincipalClass + $(PRODUCT_MODULE_NAME).NotificationService + + + diff --git a/BitkitNotification/NotificationService.swift b/BitkitNotification/NotificationService.swift new file mode 100644 index 00000000..3d879b89 --- /dev/null +++ b/BitkitNotification/NotificationService.swift @@ -0,0 +1,34 @@ +// +// NotificationService.swift +// BitkitNotification +// +// Created by Jason van den Berg on 2024/07/03. +// + +import UserNotifications + +class NotificationService: UNNotificationServiceExtension { + + var contentHandler: ((UNNotificationContent) -> Void)? + var bestAttemptContent: UNMutableNotificationContent? + + override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { + self.contentHandler = contentHandler + bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) + + if let bestAttemptContent = bestAttemptContent { + // Modify the notification content here... + bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" + + contentHandler(bestAttemptContent) + } + } + + override func serviceExtensionTimeWillExpire() { + // Called just before the extension will be terminated by the system. + // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. + if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { + contentHandler(bestAttemptContent) + } + } +} From 03462a593f59a46d24aa2760aaa51f3c014246a8 Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 4 Jul 2024 13:52:30 +0200 Subject: [PATCH 2/9] feat: move services to own queue --- Bitkit.xcodeproj/project.pbxproj | 62 ++++++ .../UserInterfaceState.xcuserstate | Bin 47455 -> 62776 bytes Bitkit/BitkitApp.swift | 5 +- Bitkit/Constants/Env.swift | 8 +- Bitkit/ContentView.swift | 23 ++- Bitkit/Services/LightningService.swift | 38 ++-- Bitkit/Services/OnChainService.swift | 7 +- Bitkit/Services/ServiceQueue.swift | 45 ++++ Bitkit/Utilities/Errors.swift | 194 ++++++++++++++++++ Bitkit/ViewModels/LightningViewModel.swift | 51 +++-- Bitkit/ViewModels/OnChainViewModel.swift | 20 +- BitkitNotification/NotificationService.swift | 36 +++- 12 files changed, 440 insertions(+), 49 deletions(-) create mode 100644 Bitkit/Services/ServiceQueue.swift create mode 100644 Bitkit/Utilities/Errors.swift diff --git a/Bitkit.xcodeproj/project.pbxproj b/Bitkit.xcodeproj/project.pbxproj index e9755d97..0396f85f 100644 --- a/Bitkit.xcodeproj/project.pbxproj +++ b/Bitkit.xcodeproj/project.pbxproj @@ -9,6 +9,12 @@ /* Begin PBXBuildFile section */ 961058DF2C355B5500E1F1D8 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 961058DE2C355B5500E1F1D8 /* NotificationService.swift */; }; 961058E32C355B5500E1F1D8 /* BitkitNotification.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 961058DC2C355B5500E1F1D8 /* BitkitNotification.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 961058E82C35791700E1F1D8 /* LightningService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96B12A022C2EC65000DD07B0 /* LightningService.swift */; }; + 961058E92C35792100E1F1D8 /* Env.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9637E6D22C32CE79004A92FC /* Env.swift */; }; + 961058EA2C35793000E1F1D8 /* LnPeer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9637E6DE2C32ED7B004A92FC /* LnPeer.swift */; }; + 961058EB2C35793000E1F1D8 /* WalletNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9637E6DC2C32EAA8004A92FC /* WalletNetwork.swift */; }; + 961058EE2C35798C00E1F1D8 /* LDKNode in Frameworks */ = {isa = PBXBuildFile; productRef = 961058ED2C35798C00E1F1D8 /* LDKNode */; }; + 961058F02C35799400E1F1D8 /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = 961058EF2C35799400E1F1D8 /* BitcoinDevKit */; }; 9637E6D32C32CE79004A92FC /* Env.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9637E6D22C32CE79004A92FC /* Env.swift */; }; 9637E6D52C32D811004A92FC /* OnChainService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9637E6D42C32D811004A92FC /* OnChainService.swift */; }; 9637E6D82C32D8A7004A92FC /* BitcoinDevKit in Frameworks */ = {isa = PBXBuildFile; productRef = 9637E6D72C32D8A7004A92FC /* BitcoinDevKit */; }; @@ -18,6 +24,10 @@ 96B129FD2C2EC05D00DD07B0 /* LDKNode in Frameworks */ = {isa = PBXBuildFile; productRef = 96B129FC2C2EC05D00DD07B0 /* LDKNode */; }; 96B12A002C2EC37B00DD07B0 /* LightningViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96B129FF2C2EC37B00DD07B0 /* LightningViewModel.swift */; }; 96B12A032C2EC65000DD07B0 /* LightningService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96B12A022C2EC65000DD07B0 /* LightningService.swift */; }; + 96F261322C369C2100167439 /* ServiceQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F261312C369C2100167439 /* ServiceQueue.swift */; }; + 96F261332C369C2100167439 /* ServiceQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F261312C369C2100167439 /* ServiceQueue.swift */; }; + 96F261362C369D2400167439 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F261352C369D2400167439 /* Errors.swift */; }; + 96F261372C369D2400167439 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96F261352C369D2400167439 /* Errors.swift */; }; 96FE1F652C2DE6AA006D0C8B /* BitkitApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FE1F642C2DE6AA006D0C8B /* BitkitApp.swift */; }; 96FE1F672C2DE6AA006D0C8B /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FE1F662C2DE6AA006D0C8B /* ContentView.swift */; }; 96FE1F692C2DE6AC006D0C8B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 96FE1F682C2DE6AC006D0C8B /* Assets.xcassets */; }; @@ -76,6 +86,8 @@ 9637E6DE2C32ED7B004A92FC /* LnPeer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LnPeer.swift; sourceTree = ""; }; 96B129FF2C2EC37B00DD07B0 /* LightningViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightningViewModel.swift; sourceTree = ""; }; 96B12A022C2EC65000DD07B0 /* LightningService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightningService.swift; sourceTree = ""; }; + 96F261312C369C2100167439 /* ServiceQueue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceQueue.swift; sourceTree = ""; }; + 96F261352C369D2400167439 /* Errors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; 96FE1F612C2DE6AA006D0C8B /* Bitkit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Bitkit.app; sourceTree = BUILT_PRODUCTS_DIR; }; 96FE1F642C2DE6AA006D0C8B /* BitkitApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitkitApp.swift; sourceTree = ""; }; 96FE1F662C2DE6AA006D0C8B /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; @@ -94,6 +106,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 961058F02C35799400E1F1D8 /* BitcoinDevKit in Frameworks */, + 961058EE2C35798C00E1F1D8 /* LDKNode in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -132,6 +146,20 @@ path = BitkitNotification; sourceTree = ""; }; + 961058EC2C35798C00E1F1D8 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; + 961058F12C35904F00E1F1D8 /* Extensions */ = { + isa = PBXGroup; + children = ( + ); + path = Extensions; + sourceTree = ""; + }; 9637E6D12C32CE65004A92FC /* Constants */ = { isa = PBXGroup; children = ( @@ -163,10 +191,19 @@ children = ( 96B12A022C2EC65000DD07B0 /* LightningService.swift */, 9637E6D42C32D811004A92FC /* OnChainService.swift */, + 96F261312C369C2100167439 /* ServiceQueue.swift */, ); path = Services; sourceTree = ""; }; + 96F261342C369D1300167439 /* Utilities */ = { + isa = PBXGroup; + children = ( + 96F261352C369D2400167439 /* Errors.swift */, + ); + path = Utilities; + sourceTree = ""; + }; 96FE1F582C2DE6AA006D0C8B = { isa = PBXGroup; children = ( @@ -175,6 +212,7 @@ 96FE1F7F2C2DE6AC006D0C8B /* BitkitUITests */, 961058DD2C355B5500E1F1D8 /* BitkitNotification */, 96FE1F622C2DE6AA006D0C8B /* Products */, + 961058EC2C35798C00E1F1D8 /* Frameworks */, ); sourceTree = ""; }; @@ -198,6 +236,8 @@ 96B12A012C2EC61500DD07B0 /* Services */, 9637E6DB2C32EA84004A92FC /* Models */, 9637E6D12C32CE65004A92FC /* Constants */, + 961058F12C35904F00E1F1D8 /* Extensions */, + 96F261342C369D1300167439 /* Utilities */, 96FE1F682C2DE6AC006D0C8B /* Assets.xcassets */, 96FE1F6A2C2DE6AC006D0C8B /* Bitkit.entitlements */, 96FE1F6B2C2DE6AC006D0C8B /* Preview Content */, @@ -246,6 +286,10 @@ dependencies = ( ); name = BitkitNotification; + packageProductDependencies = ( + 961058ED2C35798C00E1F1D8 /* LDKNode */, + 961058EF2C35799400E1F1D8 /* BitcoinDevKit */, + ); productName = BitkitNotification; productReference = 961058DC2C355B5500E1F1D8 /* BitkitNotification.appex */; productType = "com.apple.product-type.app-extension"; @@ -398,7 +442,13 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 961058E92C35792100E1F1D8 /* Env.swift in Sources */, + 961058E82C35791700E1F1D8 /* LightningService.swift in Sources */, + 961058EA2C35793000E1F1D8 /* LnPeer.swift in Sources */, + 96F261332C369C2100167439 /* ServiceQueue.swift in Sources */, + 961058EB2C35793000E1F1D8 /* WalletNetwork.swift in Sources */, 961058DF2C355B5500E1F1D8 /* NotificationService.swift in Sources */, + 96F261372C369D2400167439 /* Errors.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -409,7 +459,9 @@ 9637E6D32C32CE79004A92FC /* Env.swift in Sources */, 96B12A002C2EC37B00DD07B0 /* LightningViewModel.swift in Sources */, 9637E6DD2C32EAA8004A92FC /* WalletNetwork.swift in Sources */, + 96F261362C369D2400167439 /* Errors.swift in Sources */, 9637E6DA2C32E573004A92FC /* OnChainViewModel.swift in Sources */, + 96F261322C369C2100167439 /* ServiceQueue.swift in Sources */, 9637E6DF2C32ED7B004A92FC /* LnPeer.swift in Sources */, 96FE1F672C2DE6AA006D0C8B /* ContentView.swift in Sources */, 96B12A032C2EC65000DD07B0 /* LightningService.swift in Sources */, @@ -867,6 +919,16 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + 961058ED2C35798C00E1F1D8 /* LDKNode */ = { + isa = XCSwiftPackageProductDependency; + package = 96B129FB2C2EC05D00DD07B0 /* XCRemoteSwiftPackageReference "ldk-node" */; + productName = LDKNode; + }; + 961058EF2C35799400E1F1D8 /* BitcoinDevKit */ = { + isa = XCSwiftPackageProductDependency; + package = 9637E6D62C32D8A7004A92FC /* XCRemoteSwiftPackageReference "bdk-swift" */; + productName = BitcoinDevKit; + }; 9637E6D72C32D8A7004A92FC /* BitcoinDevKit */ = { isa = XCSwiftPackageProductDependency; package = 9637E6D62C32D8A7004A92FC /* XCRemoteSwiftPackageReference "bdk-swift" */; diff --git a/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate b/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate index 2e466e1dee61380cd2fdf99e7b86b3269a78a325..b968dd55abeaa36ac6d56f35fa23e36df98556d8 100644 GIT binary patch literal 62776 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"rPj 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 bW-ey_$lU&)du!F|f9$mO|DN*y$UOfqCPspN diff --git a/Bitkit/BitkitApp.swift b/Bitkit/BitkitApp.swift index c49949ae..38ec6afb 100644 --- a/Bitkit/BitkitApp.swift +++ b/Bitkit/BitkitApp.swift @@ -41,7 +41,6 @@ extension AppDelegate : UNUserNotificationCenterDelegate { withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { let userInfo = notification.request.content.userInfo - print("PUSH USER INFO:") print(userInfo) @@ -61,10 +60,10 @@ extension AppDelegate : UNUserNotificationCenterDelegate { func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let userInfo = response.notification.request.content.userInfo - + print("PUSH USER INFO:") print(userInfo) - + completionHandler() } } diff --git a/Bitkit/Constants/Env.swift b/Bitkit/Constants/Env.swift index d17f3a43..3d0ded15 100644 --- a/Bitkit/Constants/Env.swift +++ b/Bitkit/Constants/Env.swift @@ -30,8 +30,10 @@ struct Env { switch network { case .regtest: //cargo run --release --bin electrs -- -vvv --jsonrpc-import --daemon-rpc-addr 127.0.0.1:18443 --cookie polaruser:polarpass - return "https://jaybird-logical-sadly.ngrok-free.app" - // return "http://localhost:3000" +// return "https://jaybird-logical-sadly.ngrok-free.app" +// return "http://127.0.0.1:3000" + + return "http://192.168.0.106:3000" case .bitcoin: fatalError("Bitcoin network not implemented") case .testnet: @@ -81,7 +83,7 @@ struct Env { static var trustedLnPeers: [LnPeer] { switch network { case .regtest: - return [.init(nodeId: "021de6ad59a78caf8f376cbd022e8c6ede2a1ef0a4fa035174e8b9c25ad5866584", address: "127.0.0.1:9736")] + return [.init(nodeId: "021de6ad59a78caf8f376cbd022e8c6ede2a1ef0a4fa035174e8b9c25ad5866584", address: "127.0.0.1:9738")] case .bitcoin: return [] case .testnet: diff --git a/Bitkit/ContentView.swift b/Bitkit/ContentView.swift index 0cc09aa5..0a8e314a 100644 --- a/Bitkit/ContentView.swift +++ b/Bitkit/ContentView.swift @@ -12,10 +12,9 @@ struct ContentView: View { @StateObject var onChainViewModel = OnChainViewModel() var body: some View { - VStack { + ScrollView { Group { - Text("LDK-Node running: \(lnViewModel.status?.isRunning == true ? "✅" : "❌")") - + Text(lnViewModel.status?.debugState ?? "No LDK State") if let nodeId = lnViewModel.nodeId { Text("LN Node ID: \(nodeId)") @@ -50,10 +49,20 @@ struct ContentView: View { try! onChainViewModel.newReceiveAddress() } - Button("Sync") { - Task { - await lnViewModel.sync() - await onChainViewModel.sync() + VStack { + Button("Sync") { + Task { + try await lnViewModel.sync() + try await onChainViewModel.sync() + } + } + + if lnViewModel.isSyncing { + ProgressView("Syncing Lightning") + } + + if onChainViewModel.isSyncing { + ProgressView("Syncing On Chain") } } } diff --git a/Bitkit/Services/LightningService.swift b/Bitkit/Services/LightningService.swift index 79a2f259..908af998 100644 --- a/Bitkit/Services/LightningService.swift +++ b/Bitkit/Services/LightningService.swift @@ -24,7 +24,7 @@ class LightningService { config.network = Env.network.ldkNetwork config.logLevel = .trace config.anchorChannelsConfig = .init( - trustedPeersNoReserve: Env.trustedLnPeers.map({ $0.nodeId }), + trustedPeersNoReserve: Env.trustedLnPeers.map({ $0.nodeId }), perChannelReserveSats: 2000 //TODO set correctly ) @@ -38,41 +38,53 @@ class LightningService { nodeBuilder.setEntropyBip39Mnemonic(mnemonic: mnemonic, passphrase: nil) node = try nodeBuilder.build() + print("LDK node setup") } - func start() throws { + func start() async throws { guard let node else { //TODO throw custom error return } - try node.start() + print("Starting node...") + try await ServiceQueue.background(.ldk) { + try node.start() + } + print("Node started!") - connectToTrustedPeers() + try await self.connectToTrustedPeers() } - private func connectToTrustedPeers() { + private func connectToTrustedPeers() async throws { guard let node else { //TODO throw custom error return } - for peer in Env.trustedLnPeers { - do { - try node.connect(nodeId: peer.nodeId, address: peer.address, persist: true) - } catch { - //TODO log error - print("Error connecting to peer: \(peer.nodeId)") + try await ServiceQueue.background(.ldk) { + for peer in Env.trustedLnPeers { + do { + try node.connect(nodeId: peer.nodeId, address: peer.address, persist: true) + } catch { + //TODO log error + print("Error connecting to peer: \(peer.nodeId)") + } } } } - func sync() throws { + func sync() async throws { guard let node else { //TODO throw custom error return } - try node.syncWallets() + + print("Syncing LDK...") + try await ServiceQueue.background(.ldk) { + try node.syncWallets() + } + print("LDK synced") } } diff --git a/Bitkit/Services/OnChainService.swift b/Bitkit/Services/OnChainService.swift index 835d994b..3af2b62a 100644 --- a/Bitkit/Services/OnChainService.swift +++ b/Bitkit/Services/OnChainService.swift @@ -66,13 +66,16 @@ class OnChainService { return addressInfo.address.asString() } - func sync() throws { + func sync() async throws { guard let wallet, let blockchainConfig else { //TODO throw custom error return } let blockchain = try Blockchain(config: blockchainConfig) - try wallet.sync(blockchain: blockchain, progress: nil) + + try await ServiceQueue.background(.bdk) { + try wallet.sync(blockchain: blockchain, progress: nil) + } } } diff --git a/Bitkit/Services/ServiceQueue.swift b/Bitkit/Services/ServiceQueue.swift new file mode 100644 index 00000000..8d8025f1 --- /dev/null +++ b/Bitkit/Services/ServiceQueue.swift @@ -0,0 +1,45 @@ +// +// ServiceQueue.swift +// Bitkit +// +// Created by Jason van den Berg on 2024/07/04. +// + +import Foundation + +/// Handles app services each on it's own dedicated queue +class ServiceQueue { + private static let ldkQueue = DispatchQueue(label: "ldk-queue", qos: .utility) + private static let bdkQueue = DispatchQueue(label: "bdk-queue", qos: .utility) + + private init() {} + + enum ServiceTypes { + case ldk + case bdk + + var queue: DispatchQueue { + switch self { + case .ldk: + return ServiceQueue.ldkQueue + case .bdk: + return ServiceQueue.bdkQueue + } + } + } + + static func background(_ service: ServiceTypes, _ blocking: @escaping () throws -> T) async throws -> T { + try await withCheckedThrowingContinuation { continuation in + service.queue.async { + do { + let res = try blocking() + continuation.resume(with: .success(res)) + } catch { + let appError = AppError(error: error) + print("Service Error: \(appError.message) (\(appError.debugMessage ?? ""))") + continuation.resume(throwing: error) + } + } + } + } +} diff --git a/Bitkit/Utilities/Errors.swift b/Bitkit/Utilities/Errors.swift new file mode 100644 index 00000000..939c784e --- /dev/null +++ b/Bitkit/Utilities/Errors.swift @@ -0,0 +1,194 @@ +// +// Errors.swift +// Bitkit +// +// Created by Jason van den Berg on 2024/07/04. +// + +import Foundation +import LDKNode +import BitcoinDevKit + +/// Translates LDK and BDK error messages into translated messages that can be displayed to end users +struct AppError: LocalizedError { + let message: String + let debugMessage: String? + + var errorDescription: String? { + return NSLocalizedString(message, comment: "") + } + + init(error: Error) { + if let ldkError = error as? NodeError { + self.init(ldkError: ldkError) + return + } + + if let bdkError = error as? BdkError { + self.init(bdkError: bdkError) + return + } + + self.init(message: "Unknown error", debugMessage: error.localizedDescription) + } + + init(message: String, debugMessage: String?) { + self.message = message + self.debugMessage = debugMessage + } + + private init(bdkError: BdkError) { + message = "Bdk error" + debugMessage = bdkError.localizedDescription + //TODO support all message types in switch case +// switch bdkError as BdkError { +// case .Bip32(message: let bdkMessage): +// message = "BIP32 error" +// debugMessage = bdkMessage +// } + } + + private init(ldkError: NodeError) { + switch ldkError as NodeError { + case .AlreadyRunning(message: let ldkMessage): + message = "Node is already running" + debugMessage = ldkMessage + break; + case .NotRunning(message: let ldkMessage): + message = "Node is not running" + debugMessage = message + case .OnchainTxCreationFailed(message: let ldkMessage): + message = "Failed to create onchain transaction" + debugMessage = message + case .ConnectionFailed(message: let ldkMessage): + message = "Failed to connect to node" + debugMessage = message + case .InvoiceCreationFailed(message: let ldkMessage): + message = "Failed to create invoice" + debugMessage = message + case .InvoiceRequestCreationFailed(message: let ldkMessage): + message = "Failed to create invoice request" + debugMessage = message + case .OfferCreationFailed(message: let ldkMessage): + message = "Failed to create offer" + debugMessage = message + case .RefundCreationFailed(message: let ldkMessage): + message = "Failed to create refund" + debugMessage = message + case .PaymentSendingFailed(message: let ldkMessage): + message = "Failed to send payment" + debugMessage = message + case .ProbeSendingFailed(message: let ldkMessage): + message = "Failed to send probe" + debugMessage = message + case .ChannelCreationFailed(message: let ldkMessage): + message = "Failed to create channel" + debugMessage = message + case .ChannelClosingFailed(message: let ldkMessage): + message = "Failed to close channel" + debugMessage = message + case .ChannelConfigUpdateFailed(message: let ldkMessage): + message = "Failed to update channel config" + debugMessage = message + case .PersistenceFailed(message: let ldkMessage): + message = "Failed to persist data" + debugMessage = message + case .FeerateEstimationUpdateFailed(message: let ldkMessage): + message = "Failed to update feerate estimation" + debugMessage = message + case .FeerateEstimationUpdateTimeout(message: let ldkMessage): + message = "Failed to update feerate estimation due to timeout" + debugMessage = message + case .WalletOperationFailed(message: let ldkMessage): + message = "Failed to perform wallet operation" + debugMessage = message + case .WalletOperationTimeout(message: let ldkMessage): + message = "Failed to perform wallet operation due to timeout" + debugMessage = message + case .OnchainTxSigningFailed(message: let ldkMessage): + message = "Failed to sign onchain transaction" + debugMessage = message + case .MessageSigningFailed(message: let ldkMessage): + message = "Failed to sign message" + debugMessage = message + case .TxSyncFailed(message: let ldkMessage): + message = "Failed to sync transaction" + debugMessage = message + case .TxSyncTimeout(message: let ldkMessage): + message = "Failed to sync transaction due to timeout" + debugMessage = message + case .GossipUpdateFailed(message: let ldkMessage): + message = "Failed to update gossip" + debugMessage = message + case .GossipUpdateTimeout(message: let ldkMessage): + message = "Failed to update gossip due to timeout" + debugMessage = message + case .LiquidityRequestFailed(message: let ldkMessage): + message = "Failed to request liquidity" + debugMessage = message + case .InvalidAddress(message: let ldkMessage): + message = "Invalid address" + debugMessage = message + case .InvalidSocketAddress(message: let ldkMessage): + message = "Invalid socket address" + debugMessage = message + case .InvalidPublicKey(message: let ldkMessage): + message = "Invalid public key" + debugMessage = message + case .InvalidSecretKey(message: let ldkMessage): + message = "Invalid secret key" + debugMessage = message + case .InvalidOfferId(message: let ldkMessage): + message = "Invalid offer ID" + debugMessage = message + case .InvalidNodeId(message: let ldkMessage): + message = "Invalid node ID" + debugMessage = message + case .InvalidPaymentId(message: let ldkMessage): + message = "Invalid payment ID" + debugMessage = message + case .InvalidPaymentHash(message: let ldkMessage): + message = "Invalid payment hash" + debugMessage = message + case .InvalidPaymentPreimage(message: let ldkMessage): + message = "Invalid payment preimage" + debugMessage = message + case .InvalidPaymentSecret(message: let ldkMessage): + message = "Invalid payment secret" + debugMessage = message + case .InvalidAmount(message: let ldkMessage): + message = "Invalid amount" + debugMessage = message + case .InvalidInvoice(message: let ldkMessage): + message = "Invalid invoice" + debugMessage = message + case .InvalidOffer(message: let ldkMessage): + message = "Invalid offer" + debugMessage = message + case .InvalidRefund(message: let ldkMessage): + message = "Invalid refund" + debugMessage = message + case .InvalidChannelId(message: let ldkMessage): + message = "Invalid channel ID" + debugMessage = message + case .InvalidNetwork(message: let ldkMessage): + message = "Invalid network" + debugMessage = message + case .DuplicatePayment(message: let ldkMessage): + message = "Duplicate payment" + debugMessage = message + case .UnsupportedCurrency(message: let ldkMessage): + message = "Unsupported currency" + debugMessage = message + case .InsufficientFunds(message: let ldkMessage): + message = "Insufficient funds" + debugMessage = message + case .LiquiditySourceUnavailable(message: let ldkMessage): + message = "Liquidity source unavailable" + debugMessage = message + case .LiquidityFeeTooHigh(message: let ldkMessage): + message = "Liquidity fee too high" + debugMessage = message + } + } +} diff --git a/Bitkit/ViewModels/LightningViewModel.swift b/Bitkit/ViewModels/LightningViewModel.swift index 6e168f6c..8e27a093 100644 --- a/Bitkit/ViewModels/LightningViewModel.swift +++ b/Bitkit/ViewModels/LightningViewModel.swift @@ -10,31 +10,58 @@ import LDKNode @MainActor class LightningViewModel: ObservableObject { + @Published var isSyncing = false @Published var status: NodeStatus? @Published var nodeId: String? @Published var balance: BalanceDetails? @Published var peers: [PeerDetails]? - + func start() async throws { let mnemonic = "science fatigue phone inner pipe solve acquire nothing birth slow armor flip debate gorilla select settle talk badge uphold firm video vibrant banner casual" // = generateEntropyMnemonic() let passphrase: String? = nil + syncState() try LightningService.shared.setup(mnemonic: mnemonic, passphrase: passphrase) - try LightningService.shared.start() - await sync() + try await LightningService.shared.start() + syncState() } - func sync() async { + func sync() async throws { + isSyncing = true + syncState() + do { - try LightningService.shared.sync() - status = LightningService.shared.status - nodeId = LightningService.shared.nodeId - balance = LightningService.shared.balances - peers = LightningService.shared.peers - - //TODO sync everything else for the UI + try await LightningService.shared.sync() + isSyncing = false } catch { - print("Error: \(error)") + isSyncing = false + throw error + } + + syncState() + } + + private func syncState() { + status = LightningService.shared.status + nodeId = LightningService.shared.nodeId + balance = LightningService.shared.balances + peers = LightningService.shared.peers + } +} + +extension NodeStatus { + var debugState: String { + var debug = """ +Running: \(isRunning ? "✅" : "❌") +Current best block \(currentBestBlock.height) +""" + + if let latestWalletSyncTimestamp { + debug += "\nLast synced \(Date(timeIntervalSince1970: TimeInterval(latestWalletSyncTimestamp)).description)\n" + } else { + debug += "\nLast synced never\n" } + + return debug } } diff --git a/Bitkit/ViewModels/OnChainViewModel.swift b/Bitkit/ViewModels/OnChainViewModel.swift index f5e98573..0a57f9f0 100644 --- a/Bitkit/ViewModels/OnChainViewModel.swift +++ b/Bitkit/ViewModels/OnChainViewModel.swift @@ -10,6 +10,7 @@ import BitcoinDevKit @MainActor class OnChainViewModel: ObservableObject { + @Published var isSyncing = false @Published var balance: Balance? @Published var address: String? @@ -19,19 +20,28 @@ class OnChainViewModel: ObservableObject { try OnChainService.shared.setup() try OnChainService.shared.createWallet(mnemonic: mnemonic, passphrase: passphrase) - await sync() + syncState() } func newReceiveAddress() throws { address = try OnChainService.shared.getAddress() } - func sync() async { + func sync() async throws { + isSyncing = true + syncState() do { - try OnChainService.shared.sync() - balance = OnChainService.shared.balance + try await OnChainService.shared.sync() + isSyncing = false + syncState() } catch { - print("Error: \(error)") + isSyncing = false + syncState() + throw error } } + + private func syncState() { + balance = OnChainService.shared.balance + } } diff --git a/BitkitNotification/NotificationService.swift b/BitkitNotification/NotificationService.swift index 3d879b89..ce1a5d09 100644 --- a/BitkitNotification/NotificationService.swift +++ b/BitkitNotification/NotificationService.swift @@ -11,14 +11,42 @@ class NotificationService: UNNotificationServiceExtension { var contentHandler: ((UNNotificationContent) -> Void)? var bestAttemptContent: UNMutableNotificationContent? - + override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { self.contentHandler = contentHandler bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) - if let bestAttemptContent = bestAttemptContent { - // Modify the notification content here... - bestAttemptContent.title = "\(bestAttemptContent.title) [modified]" + Task { + do { + let mnemonic = "science fatigue phone inner pipe solve acquire nothing birth slow armor flip debate gorilla select settle talk badge uphold firm video vibrant banner casual" // = generateEntropyMnemonic() + let passphrase: String? = nil + + print("Setting up LDK") + try LightningService.shared.setup(mnemonic: mnemonic, passphrase: passphrase) + + print("Starting LDK") + + bestAttemptContent?.title = "Lightning setup" + +// try LightningService.shared.start() + + bestAttemptContent?.title = "Lightning started" + + bestAttemptContent?.body = LightningService.shared.nodeId ?? "ERROR NO NODE ID" + + print("Done") + } catch { + bestAttemptContent?.title = "Lightning error" + bestAttemptContent?.body = error.localizedDescription + } + + deliver() + } + } + + func deliver() { + if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { + //TODO: Stop LDK contentHandler(bestAttemptContent) } From 2f0965bb2fec7cc533dd94e0107f7bd64cc548fb Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 4 Jul 2024 13:52:52 +0200 Subject: [PATCH 3/9] feat: test push server --- test-push-server/.gitignore | 3 + test-push-server/helpers.js | 20 + test-push-server/index.js | 31 + test-push-server/package-lock.json | 1401 ++++++++++++++++++++++++++++ test-push-server/package.json | 25 + test-push-server/settings.js | 20 + 6 files changed, 1500 insertions(+) create mode 100644 test-push-server/.gitignore create mode 100644 test-push-server/helpers.js create mode 100644 test-push-server/index.js create mode 100644 test-push-server/package-lock.json create mode 100644 test-push-server/package.json create mode 100644 test-push-server/settings.js diff --git a/test-push-server/.gitignore b/test-push-server/.gitignore new file mode 100644 index 00000000..bf828a9d --- /dev/null +++ b/test-push-server/.gitignore @@ -0,0 +1,3 @@ +node_modules +certs +.idea diff --git a/test-push-server/helpers.js b/test-push-server/helpers.js new file mode 100644 index 00000000..b441e9d4 --- /dev/null +++ b/test-push-server/helpers.js @@ -0,0 +1,20 @@ +const { defaultPaymentAlert, appBundleID } = require('./settings'); + +const createPushData = (payload) => { + return { + topic: appBundleID, + title: defaultPaymentAlert.title, + body: defaultPaymentAlert.body, + alert: { // iOS only + ...defaultPaymentAlert, + payload + }, + priority: 'high', + contentAvailable: 1, + mutableContent: 1, + badge: 0, + sound: 'ping.aiff', + }; +}; + +module.exports = {createPushData}; diff --git a/test-push-server/index.js b/test-push-server/index.js new file mode 100644 index 00000000..73b1a5ff --- /dev/null +++ b/test-push-server/index.js @@ -0,0 +1,31 @@ +const PushNotifications = require('node-pushnotifications'); + +const { pushSettings } = require('./settings'); +const { createPushData } = require('./helpers'); + +const push = new PushNotifications(pushSettings); + +const hardcodedpushtoken = "1c3ceed3ef0eaacf9ec0dd03a4fe38c6cad60b5259d8e03efe3aa049e5e5ba89"; + +const data = createPushData({ + type: 'payment' +}); + +console.log("Sending test"); +push.send(hardcodedpushtoken, data) + .then((results) => { + if (results[0].success) { + console.log('SENT!'); + return; + } + + console.log("No success from APS."); + console.error(JSON.stringify(results)); + }) + .catch((error) => { + console.error("Error sending push notification."); + console.log(JSON.stringify(error)); +}).finally(() => { + console.log("Done."); + process.exit(0); +}); diff --git a/test-push-server/package-lock.json b/test-push-server/package-lock.json new file mode 100644 index 00000000..2a3a2aae --- /dev/null +++ b/test-push-server/package-lock.json @@ -0,0 +1,1401 @@ +{ + "name": "push-notification-server", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "push-notification-server", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dotenv": "^16.3.1", + "node-pushnotifications": "^2.0.3" + } + }, + "node_modules/@parse/node-apn": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@parse/node-apn/-/node-apn-5.1.3.tgz", + "integrity": "sha512-Bwhmbm895lEIF2772PJ8dSvBjrtOG9/q/TDMxmX40IgZxQFoXS73+JUIKTq3CA7SUB/Szu5roJINQ0L2U/1MJw==", + "dependencies": { + "debug": "4.3.3", + "jsonwebtoken": "8.5.1", + "node-forge": "1.3.0", + "verror": "1.10.1" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/http_ece": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/http_ece/-/http_ece-1.1.0.tgz", + "integrity": "sha512-bptAfCDdPJxOs5zYSe7Y3lpr772s1G346R4Td5LgRUeCwIGpCGDUTJxRrhTNcAXbx37spge0kWEIH7QAYWNTlA==", + "dependencies": { + "urlsafe-base64": "~1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jsprim/node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/node-adm": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-adm/-/node-adm-0.9.1.tgz", + "integrity": "sha512-npudU9I1l6wUEUcZme6yhe1WTi48nMSM7v2BxqGtE7hO12knzCnRj+IeUmaDdNzNMNiOU8ZYqN6PE6PXX2F/3w==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz", + "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gcm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-gcm/-/node-gcm-1.0.5.tgz", + "integrity": "sha512-yTN0q31xUxA3MwStkvT4UIgHw1khg8rrKywMdSEVjmMpK/aWIHVVZ4ia3P41+ppPH3O8+teMHs/bk3xZ8C4n1A==", + "dependencies": { + "debug": "^3.1.0", + "lodash": "^4.17.21", + "request": "^2.88.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/node-gcm/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/node-pushnotifications": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-pushnotifications/-/node-pushnotifications-2.0.3.tgz", + "integrity": "sha512-X0Ji7yNN25u0aVAxK0ovwU1j/LVw13QGOGli4sPR4pS1oxYJWiP4SpfvvwXoVO0gru8XV2RXHfXUZsVvmiTzWg==", + "dependencies": { + "@parse/node-apn": "5.1.3", + "node-adm": "0.9.1", + "node-gcm": "1.0.5", + "ramda": "0.28.0", + "web-push": "3.4.5", + "wns": "0.5.4" + }, + "engines": { + "node": ">=12.x.x" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "engines": { + "node": "*" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ramda": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", + "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urlsafe-base64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", + "integrity": "sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/web-push": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/web-push/-/web-push-3.4.5.tgz", + "integrity": "sha512-2njbTqZ6Q7ZqqK14YpK1GGmaZs3NmuGYF5b7abCXulUIWFSlSYcZ3NBJQRFcMiQDceD7vQknb8FUuvI1F7Qe/g==", + "dependencies": { + "asn1.js": "^5.3.0", + "http_ece": "1.1.0", + "https-proxy-agent": "^5.0.0", + "jws": "^4.0.0", + "minimist": "^1.2.5", + "urlsafe-base64": "^1.0.0" + }, + "bin": { + "web-push": "src/cli.js" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/web-push/node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/web-push/node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/wns": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/wns/-/wns-0.5.4.tgz", + "integrity": "sha512-WYiJ7khIwUGBD5KAm+YYmwJDDRzFRs4YGAjtbFSoRIdbn9Jcix3p9khJmpvBTXGommaKkvduAn+pc9l4d9yzVQ==", + "engines": { + "node": ">= 0.6.17" + } + } + }, + "dependencies": { + "@parse/node-apn": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/@parse/node-apn/-/node-apn-5.1.3.tgz", + "integrity": "sha512-Bwhmbm895lEIF2772PJ8dSvBjrtOG9/q/TDMxmX40IgZxQFoXS73+JUIKTq3CA7SUB/Szu5roJINQ0L2U/1MJw==", + "requires": { + "debug": "4.3.3", + "jsonwebtoken": "8.5.1", + "node-forge": "1.3.0", + "verror": "1.10.1" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "http_ece": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/http_ece/-/http_ece-1.1.0.tgz", + "integrity": "sha512-bptAfCDdPJxOs5zYSe7Y3lpr772s1G346R4Td5LgRUeCwIGpCGDUTJxRrhTNcAXbx37spge0kWEIH7QAYWNTlA==", + "requires": { + "urlsafe-base64": "~1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + } + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "dependencies": { + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node-adm": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/node-adm/-/node-adm-0.9.1.tgz", + "integrity": "sha512-npudU9I1l6wUEUcZme6yhe1WTi48nMSM7v2BxqGtE7hO12knzCnRj+IeUmaDdNzNMNiOU8ZYqN6PE6PXX2F/3w==" + }, + "node-forge": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz", + "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==" + }, + "node-gcm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-gcm/-/node-gcm-1.0.5.tgz", + "integrity": "sha512-yTN0q31xUxA3MwStkvT4UIgHw1khg8rrKywMdSEVjmMpK/aWIHVVZ4ia3P41+ppPH3O8+teMHs/bk3xZ8C4n1A==", + "requires": { + "debug": "^3.1.0", + "lodash": "^4.17.21", + "request": "^2.88.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "node-pushnotifications": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-pushnotifications/-/node-pushnotifications-2.0.3.tgz", + "integrity": "sha512-X0Ji7yNN25u0aVAxK0ovwU1j/LVw13QGOGli4sPR4pS1oxYJWiP4SpfvvwXoVO0gru8XV2RXHfXUZsVvmiTzWg==", + "requires": { + "@parse/node-apn": "5.1.3", + "node-adm": "0.9.1", + "node-gcm": "1.0.5", + "ramda": "0.28.0", + "web-push": "3.4.5", + "wns": "0.5.4" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" + }, + "ramda": { + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", + "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==" + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "urlsafe-base64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/urlsafe-base64/-/urlsafe-base64-1.0.0.tgz", + "integrity": "sha512-RtuPeMy7c1UrHwproMZN9gN6kiZ0SvJwRaEzwZY0j9MypEkFqyBaKv176jvlPtg58Zh36bOkS0NFABXMHvvGCA==" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "web-push": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/web-push/-/web-push-3.4.5.tgz", + "integrity": "sha512-2njbTqZ6Q7ZqqK14YpK1GGmaZs3NmuGYF5b7abCXulUIWFSlSYcZ3NBJQRFcMiQDceD7vQknb8FUuvI1F7Qe/g==", + "requires": { + "asn1.js": "^5.3.0", + "http_ece": "1.1.0", + "https-proxy-agent": "^5.0.0", + "jws": "^4.0.0", + "minimist": "^1.2.5", + "urlsafe-base64": "^1.0.0" + }, + "dependencies": { + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + } + } + }, + "wns": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/wns/-/wns-0.5.4.tgz", + "integrity": "sha512-WYiJ7khIwUGBD5KAm+YYmwJDDRzFRs4YGAjtbFSoRIdbn9Jcix3p9khJmpvBTXGommaKkvduAn+pc9l4d9yzVQ==" + } + } +} diff --git a/test-push-server/package.json b/test-push-server/package.json new file mode 100644 index 00000000..559aa6c1 --- /dev/null +++ b/test-push-server/package.json @@ -0,0 +1,25 @@ +{ + "name": "push-notification-server", + "version": "1.0.0", + "description": "Push notification server for lightning wallet", + "main": "index.js", + "scripts": {}, + "repository": { + "type": "git", + "url": "git+https://github.com/Jasonvdb/lightning-mobile-push-payments.git" + }, + "keywords": [ + "bitcoin", + "lightning" + ], + "author": "Jason", + "license": "ISC", + "bugs": { + "url": "https://github.com/Jasonvdb/lightning-mobile-push-payments/issues" + }, + "homepage": "https://github.com/Jasonvdb/lightning-mobile-push-payments#readme", + "dependencies": { + "dotenv": "^16.3.1", + "node-pushnotifications": "^2.0.3" + } +} diff --git a/test-push-server/settings.js b/test-push-server/settings.js new file mode 100644 index 00000000..2bf6f44b --- /dev/null +++ b/test-push-server/settings.js @@ -0,0 +1,20 @@ +const pushSettings = { + apn: { + token: { + key: './certs/AuthKey_DH6VTRG952.p8', // optionally: fs.readFileSync('./certs/key.p8') + keyId: 'DH6VTRG952', + teamId: 'KYH47R284B', + }, + production: false // true for APN production environment, false for APN sandbox environment, + }, + isAlwaysUseFCM: false, // true all messages will be sent through node-gcm (which actually uses FCM) +}; + +const defaultPaymentAlert = { + title: 'Incoming LN Payment failed', + body: 'Please open app and ask sender to try again.' +} + +const appBundleID = 'to.Bitkit.native'; + +module.exports = {pushSettings, defaultPaymentAlert, appBundleID}; From af96c71efd4826a7beb70a94fbac1d2f5abb4c3d Mon Sep 17 00:00:00 2001 From: Jason Date: Fri, 12 Jul 2024 16:28:46 +0200 Subject: [PATCH 4/9] feat: node testing ui --- .../UserInterfaceState.xcuserstate | Bin 62776 -> 64619 bytes Bitkit/Constants/Env.swift | 6 +- Bitkit/ContentView.swift | 145 ++++++++++++++---- Bitkit/Services/LightningService.swift | 119 ++++++++++++-- Bitkit/Services/OnChainService.swift | 3 + Bitkit/Utilities/Errors.swift | 102 ++++++------ Bitkit/ViewModels/LightningViewModel.swift | 6 +- Bitkit/ViewModels/OnChainViewModel.swift | 2 +- BitkitNotification/NotificationService.swift | 2 +- test-push-server/index.js | 2 +- 10 files changed, 291 insertions(+), 96 deletions(-) diff --git a/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate b/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate index b968dd55abeaa36ac6d56f35fa23e36df98556d8..191a4c38116acf7558781f415ee0e4dc9e3a1cd9 100644 GIT binary patch literal 64619 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 p-G=>!4E_;i1+DnkfV8Vp{|~*I!czbM literal 62776 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"rPj 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 Bolt11Invoice { + guard let node else { + throw AppError(serviceError: .nodeNotStarted) + } + + return try await ServiceQueue.background(.ldk) { + return try node + .bolt11Payment() + .receive( + amountMsat: amountSats * 1000, + description: description, + expirySecs: expirySecs + ) + } + } + + func send(bolt11: Bolt11Invoice) async throws -> PaymentHash { + guard let node else { + throw AppError(serviceError: .nodeNotStarted) + } + + //Check if peer is connected + + return try await ServiceQueue.background(.ldk) { + return try node.bolt11Payment().send(invoice: bolt11) + } + } + + func closeChannel(userChannelId: ChannelId, counterpartyNodeId: PublicKey) async throws { + guard let node else { + throw AppError(serviceError: .nodeNotStarted) + } + + return try await ServiceQueue.background(.ldk) { + try node.closeChannel( + userChannelId: userChannelId, + counterpartyNodeId: counterpartyNodeId + ) + } + } } //MARK: UI Helpers (Published via LightningViewModel) @@ -94,6 +142,51 @@ extension LightningService { var balances: BalanceDetails? { node?.listBalances() } var status: NodeStatus? { node?.status() } var peers: [PeerDetails]? { node?.listPeers() } - var Channels: [ChannelDetails]? { node?.listChannels() } + var channels: [ChannelDetails]? { node?.listChannels() } var payments: [PaymentDetails]? { node?.listPayments() } } + +//MARK: Events +extension LightningService { + func listenForEvents() { + Task { + while true { + guard let node = self.node else { + print("LDK node not started") + return + } + + let event = await node.nextEventAsync() + + + //TODO actual event handler + + switch event { + case .paymentSuccessful(paymentId: let paymentId, paymentHash: let paymentHash, feePaidMsat: let feePaidMsat): + print("✅ Payment successful: \(feePaidMsat)") + break + case .paymentFailed(paymentId: let paymentId, paymentHash: let paymentHash, reason: let reason): + print("❌ Payment failed: \(reason.debugDescription)") + break + case .paymentReceived(paymentId: let paymentId, paymentHash: let paymentHash, amountMsat: let amountMsat): + print("🤑 Payment received: \(amountMsat)") + break + case .paymentClaimable(paymentId: let paymentId, paymentHash: let paymentHash, claimableAmountMsat: let claimableAmountMsat, claimDeadline: let claimDeadline): + print("🫰 Payment claimable: \(claimableAmountMsat)") + break + case .channelPending(channelId: let channelId, userChannelId: let userChannelId, formerTemporaryChannelId: let formerTemporaryChannelId, counterpartyNodeId: let counterpartyNodeId, fundingTxo: let fundingTxo): + print("⏳ Channel pending: \(channelId)") + break + case .channelReady(channelId: let channelId, userChannelId: let userChannelId, counterpartyNodeId: let counterpartyNodeId): + print("👐 Channel ready: \(channelId)") + break + case .channelClosed(channelId: let channelId, userChannelId: let userChannelId, counterpartyNodeId: let counterpartyNodeId, reason: let reason): + print("⛔ Channel closed: \(channelId)") + break + } + + node.eventHandled() + } + } + } +} diff --git a/Bitkit/Services/OnChainService.swift b/Bitkit/Services/OnChainService.swift index 3af2b62a..de206f7e 100644 --- a/Bitkit/Services/OnChainService.swift +++ b/Bitkit/Services/OnChainService.swift @@ -31,16 +31,19 @@ class OnChainService { func createWallet(mnemonic: String, passphrase: String?) throws { let mnemonic = try Mnemonic.fromString(mnemonic: mnemonic) + let secretKey = DescriptorSecretKey( network: Env.network.bdkNetwork, mnemonic: mnemonic, password: passphrase ) + let descriptor = Descriptor.newBip86( secretKey: secretKey, keychain: .external, network: Env.network.bdkNetwork ) + let changeDescriptor = Descriptor.newBip86( secretKey: secretKey, keychain: .internal, diff --git a/Bitkit/Utilities/Errors.swift b/Bitkit/Utilities/Errors.swift index 939c784e..e24c2f2c 100644 --- a/Bitkit/Utilities/Errors.swift +++ b/Bitkit/Utilities/Errors.swift @@ -9,6 +9,10 @@ import Foundation import LDKNode import BitcoinDevKit +enum CustomServiceError: Error { + case nodeNotStarted +} + /// Translates LDK and BDK error messages into translated messages that can be displayed to end users struct AppError: LocalizedError { let message: String @@ -37,6 +41,14 @@ struct AppError: LocalizedError { self.debugMessage = debugMessage } + init(serviceError: CustomServiceError) { + switch serviceError { + case .nodeNotStarted: + message = "Node is not started" + debugMessage = nil + } + } + private init(bdkError: BdkError) { message = "Bdk error" debugMessage = bdkError.localizedDescription @@ -56,139 +68,139 @@ struct AppError: LocalizedError { break; case .NotRunning(message: let ldkMessage): message = "Node is not running" - debugMessage = message + debugMessage = ldkMessage case .OnchainTxCreationFailed(message: let ldkMessage): message = "Failed to create onchain transaction" - debugMessage = message + debugMessage = ldkMessage case .ConnectionFailed(message: let ldkMessage): message = "Failed to connect to node" - debugMessage = message + debugMessage = ldkMessage case .InvoiceCreationFailed(message: let ldkMessage): message = "Failed to create invoice" - debugMessage = message + debugMessage = ldkMessage case .InvoiceRequestCreationFailed(message: let ldkMessage): message = "Failed to create invoice request" - debugMessage = message + debugMessage = ldkMessage case .OfferCreationFailed(message: let ldkMessage): message = "Failed to create offer" - debugMessage = message + debugMessage = ldkMessage case .RefundCreationFailed(message: let ldkMessage): message = "Failed to create refund" - debugMessage = message + debugMessage = ldkMessage case .PaymentSendingFailed(message: let ldkMessage): message = "Failed to send payment" - debugMessage = message + debugMessage = ldkMessage case .ProbeSendingFailed(message: let ldkMessage): message = "Failed to send probe" - debugMessage = message + debugMessage = ldkMessage case .ChannelCreationFailed(message: let ldkMessage): message = "Failed to create channel" - debugMessage = message + debugMessage = ldkMessage case .ChannelClosingFailed(message: let ldkMessage): message = "Failed to close channel" - debugMessage = message + debugMessage = ldkMessage case .ChannelConfigUpdateFailed(message: let ldkMessage): message = "Failed to update channel config" - debugMessage = message + debugMessage = ldkMessage case .PersistenceFailed(message: let ldkMessage): message = "Failed to persist data" - debugMessage = message + debugMessage = ldkMessage case .FeerateEstimationUpdateFailed(message: let ldkMessage): message = "Failed to update feerate estimation" - debugMessage = message + debugMessage = ldkMessage case .FeerateEstimationUpdateTimeout(message: let ldkMessage): message = "Failed to update feerate estimation due to timeout" - debugMessage = message + debugMessage = ldkMessage case .WalletOperationFailed(message: let ldkMessage): message = "Failed to perform wallet operation" - debugMessage = message + debugMessage = ldkMessage case .WalletOperationTimeout(message: let ldkMessage): message = "Failed to perform wallet operation due to timeout" - debugMessage = message + debugMessage = ldkMessage case .OnchainTxSigningFailed(message: let ldkMessage): message = "Failed to sign onchain transaction" - debugMessage = message + debugMessage = ldkMessage case .MessageSigningFailed(message: let ldkMessage): message = "Failed to sign message" - debugMessage = message + debugMessage = ldkMessage case .TxSyncFailed(message: let ldkMessage): message = "Failed to sync transaction" - debugMessage = message + debugMessage = ldkMessage case .TxSyncTimeout(message: let ldkMessage): message = "Failed to sync transaction due to timeout" - debugMessage = message + debugMessage = ldkMessage case .GossipUpdateFailed(message: let ldkMessage): message = "Failed to update gossip" - debugMessage = message + debugMessage = ldkMessage case .GossipUpdateTimeout(message: let ldkMessage): message = "Failed to update gossip due to timeout" - debugMessage = message + debugMessage = ldkMessage case .LiquidityRequestFailed(message: let ldkMessage): message = "Failed to request liquidity" - debugMessage = message + debugMessage = ldkMessage case .InvalidAddress(message: let ldkMessage): message = "Invalid address" - debugMessage = message + debugMessage = ldkMessage case .InvalidSocketAddress(message: let ldkMessage): message = "Invalid socket address" - debugMessage = message + debugMessage = ldkMessage case .InvalidPublicKey(message: let ldkMessage): message = "Invalid public key" - debugMessage = message + debugMessage = ldkMessage case .InvalidSecretKey(message: let ldkMessage): message = "Invalid secret key" - debugMessage = message + debugMessage = ldkMessage case .InvalidOfferId(message: let ldkMessage): message = "Invalid offer ID" - debugMessage = message + debugMessage = ldkMessage case .InvalidNodeId(message: let ldkMessage): message = "Invalid node ID" - debugMessage = message + debugMessage = ldkMessage case .InvalidPaymentId(message: let ldkMessage): message = "Invalid payment ID" - debugMessage = message + debugMessage = ldkMessage case .InvalidPaymentHash(message: let ldkMessage): message = "Invalid payment hash" - debugMessage = message + debugMessage = ldkMessage case .InvalidPaymentPreimage(message: let ldkMessage): message = "Invalid payment preimage" - debugMessage = message + debugMessage = ldkMessage case .InvalidPaymentSecret(message: let ldkMessage): message = "Invalid payment secret" - debugMessage = message + debugMessage = ldkMessage case .InvalidAmount(message: let ldkMessage): message = "Invalid amount" - debugMessage = message + debugMessage = ldkMessage case .InvalidInvoice(message: let ldkMessage): message = "Invalid invoice" - debugMessage = message + debugMessage = ldkMessage case .InvalidOffer(message: let ldkMessage): message = "Invalid offer" - debugMessage = message + debugMessage = ldkMessage case .InvalidRefund(message: let ldkMessage): message = "Invalid refund" - debugMessage = message + debugMessage = ldkMessage case .InvalidChannelId(message: let ldkMessage): message = "Invalid channel ID" - debugMessage = message + debugMessage = ldkMessage case .InvalidNetwork(message: let ldkMessage): message = "Invalid network" - debugMessage = message + debugMessage = ldkMessage case .DuplicatePayment(message: let ldkMessage): message = "Duplicate payment" - debugMessage = message + debugMessage = ldkMessage case .UnsupportedCurrency(message: let ldkMessage): message = "Unsupported currency" - debugMessage = message + debugMessage = ldkMessage case .InsufficientFunds(message: let ldkMessage): message = "Insufficient funds" - debugMessage = message + debugMessage = ldkMessage case .LiquiditySourceUnavailable(message: let ldkMessage): message = "Liquidity source unavailable" - debugMessage = message + debugMessage = ldkMessage case .LiquidityFeeTooHigh(message: let ldkMessage): message = "Liquidity fee too high" - debugMessage = message + debugMessage = ldkMessage } } } diff --git a/Bitkit/ViewModels/LightningViewModel.swift b/Bitkit/ViewModels/LightningViewModel.swift index 8e27a093..4634f7f5 100644 --- a/Bitkit/ViewModels/LightningViewModel.swift +++ b/Bitkit/ViewModels/LightningViewModel.swift @@ -15,9 +15,11 @@ class LightningViewModel: ObservableObject { @Published var nodeId: String? @Published var balance: BalanceDetails? @Published var peers: [PeerDetails]? + @Published var channels: [ChannelDetails]? + @Published var payments: [PaymentDetails]? func start() async throws { - let mnemonic = "science fatigue phone inner pipe solve acquire nothing birth slow armor flip debate gorilla select settle talk badge uphold firm video vibrant banner casual" // = generateEntropyMnemonic() + let mnemonic = "always coconut smooth scatter steel web version exist broken motion damage board trap dinosaur include alone dust flag paddle give divert journey garden bench" // = generateEntropyMnemonic() let passphrase: String? = nil syncState() @@ -46,6 +48,8 @@ class LightningViewModel: ObservableObject { nodeId = LightningService.shared.nodeId balance = LightningService.shared.balances peers = LightningService.shared.peers + channels = LightningService.shared.channels + payments = LightningService.shared.payments } } diff --git a/Bitkit/ViewModels/OnChainViewModel.swift b/Bitkit/ViewModels/OnChainViewModel.swift index 0a57f9f0..eb58b164 100644 --- a/Bitkit/ViewModels/OnChainViewModel.swift +++ b/Bitkit/ViewModels/OnChainViewModel.swift @@ -15,7 +15,7 @@ class OnChainViewModel: ObservableObject { @Published var address: String? func start() async throws { - let mnemonic = "science fatigue phone inner pipe solve acquire nothing birth slow armor flip debate gorilla select settle talk badge uphold firm video vibrant banner casual" // = generateEntropyMnemonic() + let mnemonic = "always coconut smooth scatter steel web version exist broken motion damage board trap dinosaur include alone dust flag paddle give divert journey garden bench" // = generateEntropyMnemonic() let passphrase: String? = nil try OnChainService.shared.setup() diff --git a/BitkitNotification/NotificationService.swift b/BitkitNotification/NotificationService.swift index ce1a5d09..54dfc2b2 100644 --- a/BitkitNotification/NotificationService.swift +++ b/BitkitNotification/NotificationService.swift @@ -28,7 +28,7 @@ class NotificationService: UNNotificationServiceExtension { bestAttemptContent?.title = "Lightning setup" -// try LightningService.shared.start() + try await LightningService.shared.start() bestAttemptContent?.title = "Lightning started" diff --git a/test-push-server/index.js b/test-push-server/index.js index 73b1a5ff..cfd34bc0 100644 --- a/test-push-server/index.js +++ b/test-push-server/index.js @@ -5,7 +5,7 @@ const { createPushData } = require('./helpers'); const push = new PushNotifications(pushSettings); -const hardcodedpushtoken = "1c3ceed3ef0eaacf9ec0dd03a4fe38c6cad60b5259d8e03efe3aa049e5e5ba89"; +const hardcodedpushtoken = "2933593c23394bd98e9f319082ff4b4f7bcc5e553865fb02b57fbb6ca8c6ce07"; const data = createPushData({ type: 'payment' From 6fa990ecaa9de00e41e40ea1e4090be9f7253c15 Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 16 Jul 2024 10:31:15 +0200 Subject: [PATCH 5/9] feat: background receive, channel opening/closing --- Bitkit.xcodeproj/project.pbxproj | 16 +++ .../UserInterfaceState.xcuserstate | Bin 64619 -> 68343 bytes .../xcshareddata/xcschemes/Bitkit.xcscheme | 102 ++++++++++++++++++ .../xcschemes/BitkitNotification.xcscheme | 95 ++++++++++++++++ .../xcdebugger/Breakpoints_v2.xcbkptlist | 6 ++ .../xcschemes/xcschememanagement.plist | 23 ++++ Bitkit/Bitkit.entitlements | 4 + Bitkit/Constants/Env.swift | 6 +- Bitkit/ContentView.swift | 42 +++++++- Bitkit/Services/LightningService.swift | 56 ++++++++-- Bitkit/Services/ServiceQueue.swift | 2 +- Bitkit/Utilities/Errors.swift | 45 +++++++- Bitkit/ViewModels/LightningViewModel.swift | 9 +- Bitkit/Views/LogView.swift | 44 ++++++++ .../BitkitNotification.entitlements | 10 ++ BitkitNotification/Info.plist | 5 + BitkitNotification/NotificationService.swift | 87 ++++++++++++--- test-push-server/index.js | 2 +- 18 files changed, 525 insertions(+), 29 deletions(-) create mode 100644 Bitkit.xcodeproj/xcshareddata/xcschemes/Bitkit.xcscheme create mode 100644 Bitkit.xcodeproj/xcshareddata/xcschemes/BitkitNotification.xcscheme create mode 100644 Bitkit.xcodeproj/xcuserdata/jason.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 Bitkit/Views/LogView.swift create mode 100644 BitkitNotification/BitkitNotification.entitlements diff --git a/Bitkit.xcodeproj/project.pbxproj b/Bitkit.xcodeproj/project.pbxproj index 0396f85f..2f590108 100644 --- a/Bitkit.xcodeproj/project.pbxproj +++ b/Bitkit.xcodeproj/project.pbxproj @@ -35,6 +35,7 @@ 96FE1F772C2DE6AC006D0C8B /* BitkitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FE1F762C2DE6AC006D0C8B /* BitkitTests.swift */; }; 96FE1F812C2DE6AC006D0C8B /* BitkitUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FE1F802C2DE6AC006D0C8B /* BitkitUITests.swift */; }; 96FE1F832C2DE6AC006D0C8B /* BitkitUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FE1F822C2DE6AC006D0C8B /* BitkitUITestsLaunchTests.swift */; }; + 96FE5A192C46594500860ADC /* LogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FE5A182C46594500860ADC /* LogView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -86,6 +87,7 @@ 9637E6DE2C32ED7B004A92FC /* LnPeer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LnPeer.swift; sourceTree = ""; }; 96B129FF2C2EC37B00DD07B0 /* LightningViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightningViewModel.swift; sourceTree = ""; }; 96B12A022C2EC65000DD07B0 /* LightningService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightningService.swift; sourceTree = ""; }; + 96C246C32C455AF60058222C /* BitkitNotification.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = BitkitNotification.entitlements; sourceTree = ""; }; 96F261312C369C2100167439 /* ServiceQueue.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceQueue.swift; sourceTree = ""; }; 96F261352C369D2400167439 /* Errors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; 96FE1F612C2DE6AA006D0C8B /* Bitkit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Bitkit.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -99,6 +101,7 @@ 96FE1F7C2C2DE6AC006D0C8B /* BitkitUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BitkitUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 96FE1F802C2DE6AC006D0C8B /* BitkitUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitkitUITests.swift; sourceTree = ""; }; 96FE1F822C2DE6AC006D0C8B /* BitkitUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitkitUITestsLaunchTests.swift; sourceTree = ""; }; + 96FE5A182C46594500860ADC /* LogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -140,6 +143,7 @@ 961058DD2C355B5500E1F1D8 /* BitkitNotification */ = { isa = PBXGroup; children = ( + 96C246C32C455AF60058222C /* BitkitNotification.entitlements */, 961058DE2C355B5500E1F1D8 /* NotificationService.swift */, 961058E02C355B5500E1F1D8 /* Info.plist */, ); @@ -232,6 +236,7 @@ children = ( 96FE1F642C2DE6AA006D0C8B /* BitkitApp.swift */, 96FE1F662C2DE6AA006D0C8B /* ContentView.swift */, + 96FE5A172C46592800860ADC /* Views */, 96B129FE2C2EC0ED00DD07B0 /* ViewModels */, 96B12A012C2EC61500DD07B0 /* Services */, 9637E6DB2C32EA84004A92FC /* Models */, @@ -270,6 +275,14 @@ path = BitkitUITests; sourceTree = ""; }; + 96FE5A172C46592800860ADC /* Views */ = { + isa = PBXGroup; + children = ( + 96FE5A182C46594500860ADC /* LogView.swift */, + ); + path = Views; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -457,6 +470,7 @@ buildActionMask = 2147483647; files = ( 9637E6D32C32CE79004A92FC /* Env.swift in Sources */, + 96FE5A192C46594500860ADC /* LogView.swift in Sources */, 96B12A002C2EC37B00DD07B0 /* LightningViewModel.swift in Sources */, 9637E6DD2C32EAA8004A92FC /* WalletNetwork.swift in Sources */, 96F261362C369D2400167439 /* Errors.swift in Sources */, @@ -511,6 +525,7 @@ 961058E52C355B5500E1F1D8 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = BitkitNotification/BitkitNotification.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = KYH47R284B; @@ -538,6 +553,7 @@ 961058E62C355B5500E1F1D8 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_ENTITLEMENTS = BitkitNotification/BitkitNotification.entitlements; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = KYH47R284B; diff --git a/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate b/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate index 191a4c38116acf7558781f415ee0e4dc9e3a1cd9..0ebae7c5de31994a53f05064bd6ff1421767d549 100644 GIT binary patch literal 68343 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

4Gz^0_a~Ufy2CUfrHz+RdIxKI~Q7Ue{jV-jICQ ztBbvxy@$Q0y_da@y{~rqw+7y|5pBW`9CVGudu7ao(lUad{l8j#nBbVRvceZuT-s4R;5~%>Qt&%=?`zK zw}-dQTk!Vuj_{86&h&2L-PF68cMI>%-d()AdUy98=sn1Luy=vC!&~w-8UJ+uhW?HG8~Zo)&+(t@Ki}W*U*x~of2sd+|CRo$ z{fqod{MY$!@ZaRW+5bcTZT>s_clqz}-{=34|HlshL;j!mANBv$|CRsm{(t)a6@UWh z04~55AObww+W;IfZ)L3(ZN%Lrw7jro*n#s z@NdDdgZ~JAQ?*mo{Hpz`4yZb)>hY=ynhV&1CkclCaL#BpI51APtwD9HOj+No-!#@n)8UAtj>F^ujH^U!<{~Z2j1d6~BOoS~$h>#+b2(O6X zh^i6QA{s#n z5o;rkM?8%5h>VJC6*(gEgUCIRmm+UOej9l^^1H|%B7ceeHS$&D?~cenBmasbgI1Ir zRW8aaszQ`+lz&v^sGz8QvO3sL!H)jP{JKAKfClbM)Zog6J{P)1sG0uZ&(Fy)k-E^nvJu(TAgt zN1up36@4c9>*)K@zeoQW{a1{`5<|t%F>H)A#ug*QNHIY%!7(8*VKEUgQ86(waWU0m z5@V{zq{Ot185XlN=Hr-Ku}o}OY=hX|v6EtF$Igpg5W6sTW$gOcjj^S%TVl7yZjU__ zdo1?T*psoJ#h#D-BKBhJlQ=cbFD@u9I4&eEGA=qUHZDG{W?Y@P?6~%EIgYqaab4o_ z;(EvB$MuUF5cfgc>A1&n&*T1%*W$~?`^JaIXT)d5H;8W&pA+9HzDs;=d|rI-`26^h z@ss11#jl886~89FIDT#X`uL6UrSV(hx5gijKM{W_{!IL5@#o_ xm8GXCrM>+#>j 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 delta 36130 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 Void) { - print("PUSH USER INFO") - print(userInfo) + Logger.debug(userInfo, context: "push notification received") completionHandler(UIBackgroundFetchResult.newData) } @@ -41,8 +40,7 @@ extension AppDelegate : UNUserNotificationCenterDelegate { withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { let userInfo = notification.request.content.userInfo - print("PUSH USER INFO:") - print(userInfo) + Logger.debug(userInfo, context: "push notification received") // Change this to your preferred presentation option completionHandler([[.banner, .badge, .sound]]) @@ -50,19 +48,17 @@ extension AppDelegate : UNUserNotificationCenterDelegate { func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let token = deviceToken.map { String(format: "%02hhx", $0) }.joined() - print("***TOKEN \(token)") + Logger.debug(token, context: "push token") } func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { - print("didFailToRegisterForRemoteNotificationsWithError") - print(error.localizedDescription) + Logger.error(error) } func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { let userInfo = response.notification.request.content.userInfo - print("PUSH USER INFO:") - print(userInfo) + Logger.debug(userInfo, context: "push notification received") completionHandler() } @@ -79,9 +75,9 @@ struct BitkitApp: App { //TODO move this elsewhere requestPushNotificationPermision { (granted, error) in if granted { - print("PUSH NOTIFICATION GRANTED") + Logger.info("Push notification permission granted") } else { - print("PUSH NOTIFICATION DENIED") + Logger.warn("Push notification permission denied") } } } diff --git a/Bitkit/ContentView.swift b/Bitkit/ContentView.swift index cf7b7da6..ba274d41 100644 --- a/Bitkit/ContentView.swift +++ b/Bitkit/ContentView.swift @@ -12,7 +12,7 @@ struct ContentView: View { @StateObject var onChainViewModel = OnChainViewModel() @Environment(\.scenePhase) var scenePhase - + @State var showLogs = false var body: some View { @@ -58,6 +58,7 @@ struct ContentView: View { ForEach(channels, id: \.channelId) { channel in VStack { Text(channel.counterpartyNodeId).font(.caption2) + .multilineTextAlignment(.leading) HStack { Text("Out: \(channel.outboundCapacityMsat)") Spacer() @@ -71,10 +72,10 @@ struct ContentView: View { Task { do { try await LightningService.shared.closeChannel(userChannelId: channel.userChannelId, counterpartyNodeId: channel.counterpartyNodeId) - print("Channel closed") + Logger.info("Channel closed") try await lnViewModel.sync() } catch { - print("Close channel error: \(error)") + } } } @@ -82,7 +83,7 @@ struct ContentView: View { Button("Copy open channel command") { let cmd = "lncli openchannel --node_key=\(lnViewModel.nodeId ?? "") --local_amt=200000 --push_amt=10000 --private=true --zero_conf --channel_type=anchors" -// let cmd = "lncli openchannel --node_key=\(lnViewModel.nodeId ?? "") --local_amt=200000 --push_amt=10000 --min_confs=3" + // let cmd = "lncli openchannel --node_key=\(lnViewModel.nodeId ?? "") --local_amt=200000 --push_amt=10000 --min_confs=3" UIPasteboard.general.string = cmd } } @@ -96,41 +97,23 @@ struct ContentView: View { } Button("New Receive Address") { - try! onChainViewModel.newReceiveAddress() - } - - VStack { - Button("Sync") { - Task { - try await lnViewModel.sync() - try await onChainViewModel.sync() - } - } - - if lnViewModel.isSyncing { - ProgressView("Syncing Lightning") - } - - if onChainViewModel.isSyncing { - ProgressView("Syncing On Chain") + Task { + try await onChainViewModel.newReceiveAddress() } } Button("Create bolt11") { Task { let invoice = try await LightningService.shared.receive(amountSats: 123, description: "paymeplz") - print(invoice) + Logger.info(invoice, context: "Created invoice") UIPasteboard.general.string = invoice } } Button("Pay bolt11") { Task { - // let invoice = UIPasteboard.general.string - do { - let paymentHash = try await LightningService.shared.send(bolt11: "lnbcrt2u1pnf2qckpp5gzqu4fnv0l8c5x3x0yemq2wcme0ggh497mu88rqfttps7ts68e2sdqqcqzzsxqyz5vqsp5tke63vmcdm7s4f0ue9u2rf58t4j720nu7j2m7x4g4h4ty9ml3r6q9qxpqysgqdy0xjeqt5wrezqf608lxv52z8wqxthffhr28h4eena90ytl6yg9472awe43ldzwkukuh87ftekx82y2r67dqvuaz7q57ujuu4xawy6gpp4hyta") - } catch { - print("Send error: \(error)") + if let invoice = UIPasteboard.general.string { + let _ = try? await LightningService.shared.send(bolt11: invoice) } } } @@ -152,40 +135,49 @@ struct ContentView: View { } } } + .refreshable { + do { + try await withThrowingTaskGroup(of: Void.self) { group in + group.addTask { try await lnViewModel.sync() } + group.addTask { try await onChainViewModel.sync() } + try await group.waitForAll() + } + } catch { + //TODO show an error + } + } .sheet(isPresented: $showLogs) { LogView() } .onAppear { - print("APPEARED!") + Logger.debug("App appeared, spinning up services...") Task { do { - print("Starting LN...") try await lnViewModel.start() try await lnViewModel.sync() } catch { - print("LN Error: \(error)") + Logger.error(error, context: "Failed to start LN") } } Task { do { - print("Starting OnChain...") try await onChainViewModel.start() try await onChainViewModel.sync() } catch { - print("OnChain Error: \(error)") + Logger.error(error, context: "Failed to start on chain") } } } .onChange(of: scenePhase) { newPhase in if newPhase == .background { - print("Backgrounding") if lnViewModel.status?.isRunning == true { + Logger.debug("App backgrounded, stopping LN service...") Task { do { try await lnViewModel.stop() } catch { - print("LN Error: \(error)") + Logger.error(error, context: "Failed to stop LN") } } } @@ -193,14 +185,14 @@ struct ContentView: View { } if newPhase == .active { - print("Active") if lnViewModel.status?.isRunning == false { + Logger.debug("App active, starting LN service...") Task { do { try await lnViewModel.start() try await lnViewModel.sync() } catch { - print("LN Error: \(error)") + Logger.error(error, context: "Failed to start LN") } } } diff --git a/Bitkit/Services/LightningService.swift b/Bitkit/Services/LightningService.swift index df4d7c01..00de0534 100644 --- a/Bitkit/Services/LightningService.swift +++ b/Bitkit/Services/LightningService.swift @@ -41,15 +41,15 @@ class LightningService { builder.setEntropyBip39Mnemonic(mnemonic: mnemonic, passphrase: nil) - print(Env.ldkStorage.path) + Logger.debug(Env.ldkStorage.path, context: "LDK storage path") - print("Building node...") + Logger.debug("Building node...") try await ServiceQueue.background(.ldk) { self.node = try builder.build() } - print("LDK node setup") + Logger.info("LDK node setup") } /// Pass onEvent when being used in the background to listen for payments, channels, closes, etc @@ -61,12 +61,11 @@ class LightningService { listenForEvents(onEvent: onEvent) - print("Starting node...") + Logger.debug("Starting node...") try await ServiceQueue.background(.ldk) { try node.start() } - print("Node started!") - + Logger.info("Node started") try await self.connectToTrustedPeers() } @@ -76,11 +75,11 @@ class LightningService { throw AppError(serviceError: .nodeNotStarted) } - print("Stopping node...") + Logger.debug("Stopping node...") try await ServiceQueue.background(.ldk) { try node.stop() } - print("Node stopped!") + Logger.info("Node stopped") } private func connectToTrustedPeers() async throws { @@ -92,10 +91,9 @@ class LightningService { for peer in Env.trustedLnPeers { do { try node.connect(nodeId: peer.nodeId, address: peer.address, persist: true) - print("Connected to trusted peer: \(peer.nodeId)") + Logger.info("Connected to trusted peer: \(peer.nodeId)") } catch { - //TODO log error - print("Error connecting to peer: \(peer.nodeId)") + Logger.error(error, context: "Peer: \(peer.nodeId)") } } } @@ -104,7 +102,7 @@ class LightningService { /// Temp fix for regtest where nodes might not agree on current fee rates private func setMaxDustHtlcExposureForCurrentChannels() throws { guard Env.network == .regtest else { - print("Not updating channel config for non-regtest network") + Logger.debug("Not updating channel config for non-regtest network") return } @@ -116,7 +114,7 @@ class LightningService { let config = channel.config config.setMaxDustHtlcExposureFromFixedLimit(limitMsat: 999999 * 1000) try? node.updateChannelConfig(userChannelId: channel.userChannelId, counterpartyNodeId: channel.counterpartyNodeId, channelConfig: config) - print("Updated channel config for: \(channel.userChannelId)") + Logger.info("Updated channel config for: \(channel.userChannelId)") } } @@ -125,12 +123,12 @@ class LightningService { throw AppError(serviceError: .nodeNotStarted) } - print("Syncing LDK...") + Logger.debug("Syncing LDK...") try await ServiceQueue.background(.ldk) { try node.syncWallets() try? self.setMaxDustHtlcExposureForCurrentChannels() } - print("LDK synced") + Logger.info("LDK synced") } func receive(amountSats: UInt64, description: String, expirySecs: UInt32 = 3600) async throws -> Bolt11Invoice { @@ -191,7 +189,7 @@ extension LightningService { Task { while true { guard let node = self.node else { - print("LDK node not started") + Logger.error("LDK node not started") return } @@ -201,25 +199,25 @@ extension LightningService { //TODO actual event handler switch event { case .paymentSuccessful(paymentId: let paymentId, paymentHash: let paymentHash, feePaidMsat: let feePaidMsat): - print("✅ Payment successful: \(feePaidMsat)") + Logger.info("✅ Payment successful: paymentId: \(paymentId ?? "?") paymentHash: \(paymentHash) feePaidMsat: \(feePaidMsat ?? 0)") break case .paymentFailed(paymentId: let paymentId, paymentHash: let paymentHash, reason: let reason): - print("❌ Payment failed: \(reason.debugDescription)") + Logger.info("❌ Payment failed: paymentId: \(paymentId ?? "?") paymentHash: \(paymentHash) reason: \(reason.debugDescription)") break case .paymentReceived(paymentId: let paymentId, paymentHash: let paymentHash, amountMsat: let amountMsat): - print("🤑 Payment received: \(amountMsat)") + Logger.info("🤑 Payment received: paymentId: \(paymentId ?? "?") paymentHash: \(paymentHash) amountMsat: \(amountMsat)") break case .paymentClaimable(paymentId: let paymentId, paymentHash: let paymentHash, claimableAmountMsat: let claimableAmountMsat, claimDeadline: let claimDeadline): - print("🫰 Payment claimable: \(claimableAmountMsat)") + Logger.info("🫰 Payment claimable: paymentId: \(paymentId) paymentHash: \(paymentHash) claimableAmountMsat: \(claimableAmountMsat)") break case .channelPending(channelId: let channelId, userChannelId: let userChannelId, formerTemporaryChannelId: let formerTemporaryChannelId, counterpartyNodeId: let counterpartyNodeId, fundingTxo: let fundingTxo): - print("⏳ Channel pending: \(channelId)") + Logger.info("⏳ Channel pending: channelId: \(channelId) userChannelId: \(userChannelId) formerTemporaryChannelId: \(formerTemporaryChannelId) counterpartyNodeId: \(counterpartyNodeId) fundingTxo: \(fundingTxo)") break case .channelReady(channelId: let channelId, userChannelId: let userChannelId, counterpartyNodeId: let counterpartyNodeId): - print("👐 Channel ready: \(channelId)") + Logger.info("👐 Channel ready: channelId: \(channelId) userChannelId: \(userChannelId) counterpartyNodeId: \(counterpartyNodeId ?? "?")") break case .channelClosed(channelId: let channelId, userChannelId: let userChannelId, counterpartyNodeId: let counterpartyNodeId, reason: let reason): - print("⛔ Channel closed: \(channelId)") + Logger.info("⛔ Channel closed: channelId: \(channelId) userChannelId: \(userChannelId) counterpartyNodeId: \(counterpartyNodeId ?? "?") reason: \(reason.debugDescription)") break } diff --git a/Bitkit/Services/OnChainService.swift b/Bitkit/Services/OnChainService.swift index c78bb89b..f8a72e50 100644 --- a/Bitkit/Services/OnChainService.swift +++ b/Bitkit/Services/OnChainService.swift @@ -52,6 +52,8 @@ class OnChainService { //TODO save to keychain + Logger.debug("Creating onchain wallet...") + try await ServiceQueue.background(.bdk) { self.wallet = try Wallet( descriptor: descriptor, @@ -60,27 +62,35 @@ class OnChainService { databaseConfig: .memory //TODO use sqlite ) } + + Logger.info("Onchain wallet created") } - func getAddress() throws -> String { + func getAddress() async throws -> String { guard let wallet else { - //TODO throw custom error - return "error" + throw AppError(serviceError: .onchainWalletNotCreated) + } + + return try await ServiceQueue.background(.bdk) { + let addressInfo = try wallet.getAddress(addressIndex: .new) + return addressInfo.address.asString() } - let addressInfo = try wallet.getAddress(addressIndex: .new) - return addressInfo.address.asString() } func sync() async throws { guard let wallet, let blockchainConfig else { - //TODO throw custom error - return + throw AppError(serviceError: .onchainWalletNotCreated) } + + Logger.debug("Syncing BDK...") + let blockchain = try Blockchain(config: blockchainConfig) try await ServiceQueue.background(.bdk) { try wallet.sync(blockchain: blockchain, progress: nil) } + + Logger.info("BDK synced") } } diff --git a/Bitkit/Services/ServiceQueue.swift b/Bitkit/Services/ServiceQueue.swift index a809946f..cc734ff4 100644 --- a/Bitkit/Services/ServiceQueue.swift +++ b/Bitkit/Services/ServiceQueue.swift @@ -36,7 +36,7 @@ class ServiceQueue { continuation.resume(with: .success(res)) } catch { let appError = AppError(error: error) - print("Service Error: \(appError.message) (\(appError.debugMessage ?? ""))") + Logger.error("\(appError.message) [\(appError.debugMessage ?? "")]", context: "ServiceQueue: \(service)") continuation.resume(throwing: appError) } } diff --git a/Bitkit/Utilities/Errors.swift b/Bitkit/Utilities/Errors.swift index 186f1779..3effd0b6 100644 --- a/Bitkit/Utilities/Errors.swift +++ b/Bitkit/Utilities/Errors.swift @@ -11,6 +11,7 @@ import BitcoinDevKit enum CustomServiceError: Error { case nodeNotStarted + case onchainWalletNotCreated } /// Translates LDK and BDK error messages into translated messages that can be displayed to end users @@ -22,6 +23,8 @@ struct AppError: LocalizedError { return NSLocalizedString(message, comment: "") } + /// Pass any LDK or BDK error to get a translated error message + /// - Parameter error: any error init(error: Error) { if let ldkBuildError = error as? BuildError { self.init(ldkBuildError: ldkBuildError) @@ -44,6 +47,8 @@ struct AppError: LocalizedError { init(message: String, debugMessage: String?) { self.message = message self.debugMessage = debugMessage + + Logger.error("\(message) [\(debugMessage ?? "")]", context: "generic app error") } init(serviceError: CustomServiceError) { @@ -51,7 +56,12 @@ struct AppError: LocalizedError { case .nodeNotStarted: message = "Node is not started" debugMessage = nil + case .onchainWalletNotCreated: + message = "Onchain wallet not created" + debugMessage = nil } + + Logger.error("\(message) [\(debugMessage ?? "")]", context: "service error") } private init(bdkError: BdkError) { @@ -63,6 +73,8 @@ struct AppError: LocalizedError { // message = "BIP32 error" // debugMessage = bdkMessage // } + + Logger.error("\(message) [\(debugMessage ?? "")]", context: "BdkError") } private init(ldkBuildError: BuildError) { @@ -245,5 +257,7 @@ struct AppError: LocalizedError { message = "Liquidity fee too high" debugMessage = ldkMessage } + + Logger.error("\(message) [\(debugMessage ?? "")]", context: "ldk-node error") } } diff --git a/Bitkit/Utilities/Logger.swift b/Bitkit/Utilities/Logger.swift new file mode 100644 index 00000000..5b0dd57a --- /dev/null +++ b/Bitkit/Utilities/Logger.swift @@ -0,0 +1,44 @@ +// +// Logger.swift +// Bitkit +// +// Created by Jason van den Berg on 2024/07/16. +// + +import Foundation + +class Logger { + private init() {} + static let queue = DispatchQueue (label: "bitkit.log", qos: .utility) + + static func info(_ message: Any, context: String = "", file: String = #file, function: String = #function, line: Int = #line) { + handle("INFOℹ️: \(message)", context: context, file: file, function: function, line: line) + } + + static func debug(_ message: Any, context: String = "", file: String = #file, function: String = #function, line: Int = #line) { + handle("DEBUG: \(message)", context: context, file: file, function: function, line: line) + } + + static func warn(_ message: Any, context: String = "", file: String = #file, function: String = #function, line: Int = #line) { + handle("WARN⚠️: \(message)", context: context, file: file, function: function, line: line) + } + + static func error(_ message: Any, context: String = "", file: String = #file, function: String = #function, line: Int = #line) { + handle("ERROR❌: \(message)", context: context, file: file, function: function, line: line) + } + + static func test(_ message: Any, context: String = "", file: String = #file, function: String = #function, line: Int = #line) { + handle("🧪🧪🧪: \(message)", context: context, file: file, function: function, line: line) + } + + private static func handle(_ message: Any, context: String = "", file: String = #file, function: String = #function, line: Int = #line) { + let fileName = URL(fileURLWithPath: file).lastPathComponent + let line = "\(message) \(context == "" ? "" : "- \(context) ")[\(fileName): \(function) line: \(line)]" + + print(line) + + queue.async { + //TODO write to file + } + } +} diff --git a/Bitkit/ViewModels/OnChainViewModel.swift b/Bitkit/ViewModels/OnChainViewModel.swift index 03cecada..cfa6a06b 100644 --- a/Bitkit/ViewModels/OnChainViewModel.swift +++ b/Bitkit/ViewModels/OnChainViewModel.swift @@ -23,8 +23,8 @@ class OnChainViewModel: ObservableObject { syncState() } - func newReceiveAddress() throws { - address = try OnChainService.shared.getAddress() + func newReceiveAddress() async throws { + address = try await OnChainService.shared.getAddress() } func sync() async throws { diff --git a/BitkitNotification/NotificationService.swift b/BitkitNotification/NotificationService.swift index a345a41a..c703a4a9 100644 --- a/BitkitNotification/NotificationService.swift +++ b/BitkitNotification/NotificationService.swift @@ -9,30 +9,21 @@ import UserNotifications import LDKNode class NotificationService: UNNotificationServiceExtension { - + var contentHandler: ((UNNotificationContent) -> Void)? var bestAttemptContent: UNMutableNotificationContent? override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { self.contentHandler = contentHandler bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) - - bestAttemptContent?.title = "RECEIVED" Task { do { let mnemonic = "always coconut smooth scatter steel web version exist broken motion damage board trap dinosaur include alone dust flag paddle give divert journey garden bench" // = generateEntropyMnemonic() let passphrase: String? = nil - bestAttemptContent?.title = "Lightning setting up..." - - print("Setting up LDK") try await LightningService.shared.setup(mnemonic: mnemonic, passphrase: passphrase) - print("Starting LDK") - - bestAttemptContent?.title = "Lightning setup" - try await LightningService.shared.start { event in self.handleLdkEvent(event: event) } @@ -40,9 +31,8 @@ class NotificationService: UNNotificationServiceExtension { bestAttemptContent?.title = "Lightning error" bestAttemptContent?.body = error.localizedDescription - print("Failed to setup node") - print(error.localizedDescription) - dumpLogs() + Logger.error(error, context: "failed to setup node in notification service") + dumpLdkLogs() await deliver() } } @@ -50,33 +40,19 @@ class NotificationService: UNNotificationServiceExtension { func handleLdkEvent(event: Event) { switch event { - case .paymentSuccessful(paymentId: let paymentId, paymentHash: let paymentHash, feePaidMsat: let feePaidMsat): - print("✅ Payment successful: \(feePaidMsat)") - break - case .paymentFailed(paymentId: let paymentId, paymentHash: let paymentHash, reason: let reason): - print("❌ Payment failed: \(reason.debugDescription)") - break case .paymentReceived(paymentId: let paymentId, paymentHash: let paymentHash, amountMsat: let amountMsat): - print("Payment received: \(paymentId ?? ""), \(paymentHash), \(amountMsat)") self.bestAttemptContent?.title = "Payment Received" self.bestAttemptContent?.body = "⚡ \(amountMsat / 1000)" Task { await self.deliver() } break - case .paymentClaimable(paymentId: let paymentId, paymentHash: let paymentHash, claimableAmountMsat: let claimableAmountMsat, claimDeadline: let claimDeadline): - print("🫰 Payment claimable: \(claimableAmountMsat)") - break case .channelPending(channelId: let channelId, userChannelId: let userChannelId, formerTemporaryChannelId: let formerTemporaryChannelId, counterpartyNodeId: let counterpartyNodeId, fundingTxo: let fundingTxo): - print("Channel pending") self.bestAttemptContent?.title = "Channel Opened" self.bestAttemptContent?.body = "Pending" - Task { - await self.deliver() - } + //Don't deliver, give a chance for channelReady event to update the content break case .channelReady(channelId: let channelId, userChannelId: let userChannelId, counterpartyNodeId: let counterpartyNodeId): - print("👐 Channel ready: \(channelId)") self.bestAttemptContent?.title = "Channel ready" self.bestAttemptContent?.body = "Usable" Task { @@ -84,14 +60,24 @@ class NotificationService: UNNotificationServiceExtension { } break case .channelClosed(channelId: let channelId, userChannelId: let userChannelId, counterpartyNodeId: let counterpartyNodeId, reason: let reason): - print("⛔ Channel closed: \(channelId)") + self.bestAttemptContent?.title = "Channel closed" + self.bestAttemptContent?.body = reason.debugDescription //TODO: Reason string + Task { + await self.deliver() + } + break + case .paymentSuccessful(_, _, _): + break + case .paymentFailed(_, _, _): + break + case .paymentClaimable(_, _, _, _): break } } func deliver() async { try? await LightningService.shared.stop() - + if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { //TODO: Stop LDK @@ -99,7 +85,7 @@ class NotificationService: UNNotificationServiceExtension { } } - func dumpLogs() { + func dumpLdkLogs() { let dir = Env.ldkStorage let fileURL = dir.appendingPathComponent("ldk_node_latest.log") @@ -111,7 +97,7 @@ class NotificationService: UNNotificationServiceExtension { print(line) } } catch { - print("Failed to load log file") + Logger.error(error, context: "failed to load ldk log file") } } From c4fd72d420ea5f421a9143229ccb66780e3ea430 Mon Sep 17 00:00:00 2001 From: Jason Date: Wed, 17 Jul 2024 09:09:41 +0200 Subject: [PATCH 9/9] fix: switch to bip84 descriptor --- .../UserInterfaceState.xcuserstate | Bin 67932 -> 73796 bytes Bitkit/Services/OnChainService.swift | 6 +++--- Bitkit/ViewModels/LightningViewModel.swift | 6 +++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate b/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate index 6281245c1b3ea5c44d74d3450329ad32441435ae..cbdf6c87a55d863206b95d20c6e7ace8af1ad161 100644 GIT binary patch literal 73796 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 literal 67932 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

rS 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 H%hdk^A&AF2 literal 64619 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 p-G=>!4E_;i1+DnkfV8Vp{|~*I!czbM diff --git a/Bitkit.xcodeproj/xcshareddata/xcschemes/Bitkit.xcscheme b/Bitkit.xcodeproj/xcshareddata/xcschemes/Bitkit.xcscheme new file mode 100644 index 00000000..b10a30f7 --- /dev/null +++ b/Bitkit.xcodeproj/xcshareddata/xcschemes/Bitkit.xcscheme @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Bitkit.xcodeproj/xcshareddata/xcschemes/BitkitNotification.xcscheme b/Bitkit.xcodeproj/xcshareddata/xcschemes/BitkitNotification.xcscheme new file mode 100644 index 00000000..78d79169 --- /dev/null +++ b/Bitkit.xcodeproj/xcshareddata/xcschemes/BitkitNotification.xcscheme @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Bitkit.xcodeproj/xcuserdata/jason.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Bitkit.xcodeproj/xcuserdata/jason.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 00000000..264ca11a --- /dev/null +++ b/Bitkit.xcodeproj/xcuserdata/jason.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,6 @@ + + + diff --git a/Bitkit.xcodeproj/xcuserdata/jason.xcuserdatad/xcschemes/xcschememanagement.plist b/Bitkit.xcodeproj/xcuserdata/jason.xcuserdatad/xcschemes/xcschememanagement.plist index 4cdc872d..1f42bbf1 100644 --- a/Bitkit.xcodeproj/xcuserdata/jason.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Bitkit.xcodeproj/xcuserdata/jason.xcuserdatad/xcschemes/xcschememanagement.plist @@ -15,5 +15,28 @@ 1 + SuppressBuildableAutocreation + + 961058DB2C355B5500E1F1D8 + + primary + + + 96FE1F602C2DE6AA006D0C8B + + primary + + + 96FE1F712C2DE6AC006D0C8B + + primary + + + 96FE1F7B2C2DE6AC006D0C8B + + primary + + + diff --git a/Bitkit/Bitkit.entitlements b/Bitkit/Bitkit.entitlements index 6c23f6f0..76584c8e 100644 --- a/Bitkit/Bitkit.entitlements +++ b/Bitkit/Bitkit.entitlements @@ -8,6 +8,10 @@ development com.apple.security.app-sandbox + com.apple.security.application-groups + + group.bitkit + com.apple.security.files.user-selected.read-only diff --git a/Bitkit/Constants/Env.swift b/Bitkit/Constants/Env.swift index a4b9f151..4ef40052 100644 --- a/Bitkit/Constants/Env.swift +++ b/Bitkit/Constants/Env.swift @@ -44,8 +44,8 @@ struct Env { } static var appStorageUrl: URL { - //TODO move to app group so files can be shared with extensions - guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { + //App group so files can be shared with extensions + guard let documentsDirectory = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.bitkit") else { fatalError("Could not find documents directory") } @@ -84,7 +84,7 @@ struct Env { switch network { case .regtest: return [ - .init(nodeId: "03e26fdad23b9e17f6a6b1dd0a019c6fcd9e778a1c2af6ae62a0951c8352efbbc3", address: "127.0.0.1:9735") + .init(nodeId: "03e26fdad23b9e17f6a6b1dd0a019c6fcd9e778a1c2af6ae62a0951c8352efbbc3", address: "192.168.0.106:9735") // .init(nodeId: "0218ab1da83a4768e154fada54deb5d835199aad116c4212e6844d0dce0f82cab1", address: "192.168.0.106:9737"), // .init(nodeId: "021de6ad59a78caf8f376cbd022e8c6ede2a1ef0a4fa035174e8b9c25ad5866584", address: "192.168.0.106:9738") ] diff --git a/Bitkit/ContentView.swift b/Bitkit/ContentView.swift index 47a086e0..cf7b7da6 100644 --- a/Bitkit/ContentView.swift +++ b/Bitkit/ContentView.swift @@ -11,6 +11,10 @@ struct ContentView: View { @StateObject var lnViewModel = LightningViewModel() @StateObject var onChainViewModel = OnChainViewModel() + @Environment(\.scenePhase) var scenePhase + + @State var showLogs = false + var body: some View { List { Section { @@ -124,13 +128,17 @@ struct ContentView: View { Task { // let invoice = UIPasteboard.general.string do { - let paymentHash = try await LightningService.shared.send(bolt11: "lnbcrt1230n1pnfzdu8pp589sw6vgkercxszde7v4q70yu2ecd0dauhwss4sss52vgu4aemlgqdqqcqzzsxqyz5vqsp59d5228t6805syarr59qkl96kahtjehnahwphglha38qv3sagh25q9qxpqysgq5ssgsd5d8f6lx0f5rjjfnwzy9kmmcup34ppdf7ak5tpe75j3egw9g48esx4czadu84amz8wm2ghwzpu5tcz2szkklcseq86jjnw64pcqlrez5d") + let paymentHash = try await LightningService.shared.send(bolt11: "lnbcrt2u1pnf2qckpp5gzqu4fnv0l8c5x3x0yemq2wcme0ggh497mu88rqfttps7ts68e2sdqqcqzzsxqyz5vqsp5tke63vmcdm7s4f0ue9u2rf58t4j720nu7j2m7x4g4h4ty9ml3r6q9qxpqysgqdy0xjeqt5wrezqf608lxv52z8wqxthffhr28h4eena90ytl6yg9472awe43ldzwkukuh87ftekx82y2r67dqvuaz7q57ujuu4xawy6gpp4hyta") } catch { print("Send error: \(error)") } } } + Button("Show Logs") { + showLogs = true + } + Section("Transactions") { if let payments = lnViewModel.payments { ForEach(payments, id: \.id) { payment in @@ -144,6 +152,9 @@ struct ContentView: View { } } } + .sheet(isPresented: $showLogs) { + LogView() + } .onAppear { print("APPEARED!") Task { @@ -166,6 +177,35 @@ struct ContentView: View { } } } + .onChange(of: scenePhase) { newPhase in + if newPhase == .background { + print("Backgrounding") + if lnViewModel.status?.isRunning == true { + Task { + do { + try await lnViewModel.stop() + } catch { + print("LN Error: \(error)") + } + } + } + return + } + + if newPhase == .active { + print("Active") + if lnViewModel.status?.isRunning == false { + Task { + do { + try await lnViewModel.start() + try await lnViewModel.sync() + } catch { + print("LN Error: \(error)") + } + } + } + } + } } } diff --git a/Bitkit/Services/LightningService.swift b/Bitkit/Services/LightningService.swift index 2f2f6a7a..df4d7c01 100644 --- a/Bitkit/Services/LightningService.swift +++ b/Bitkit/Services/LightningService.swift @@ -17,7 +17,7 @@ class LightningService { private init() {} - func setup(mnemonic: String, passphrase: String?) throws { + func setup(mnemonic: String, passphrase: String?) async throws { var config = defaultConfig() config.storageDirPath = Env.ldkStorage.path config.logDirPath = Env.ldkStorage.path @@ -41,18 +41,25 @@ class LightningService { builder.setEntropyBip39Mnemonic(mnemonic: mnemonic, passphrase: nil) - node = try builder.build() - print("LDK node setup") - print(Env.ldkStorage.path) + + print("Building node...") + + try await ServiceQueue.background(.ldk) { + self.node = try builder.build() + } + + print("LDK node setup") } - func start() async throws { + /// Pass onEvent when being used in the background to listen for payments, channels, closes, etc + /// - Parameter onEvent: Triggered on any LDK node event + func start(onEvent: ((Event) -> Void)? = nil) async throws { guard let node else { throw AppError(serviceError: .nodeNotStarted) } - listenForEvents() + listenForEvents(onEvent: onEvent) print("Starting node...") try await ServiceQueue.background(.ldk) { @@ -64,6 +71,18 @@ class LightningService { try await self.connectToTrustedPeers() } + func stop() async throws { + guard let node else { + throw AppError(serviceError: .nodeNotStarted) + } + + print("Stopping node...") + try await ServiceQueue.background(.ldk) { + try node.stop() + } + print("Node stopped!") + } + private func connectToTrustedPeers() async throws { guard let node else { throw AppError(serviceError: .nodeNotStarted) @@ -82,6 +101,25 @@ class LightningService { } } + /// Temp fix for regtest where nodes might not agree on current fee rates + private func setMaxDustHtlcExposureForCurrentChannels() throws { + guard Env.network == .regtest else { + print("Not updating channel config for non-regtest network") + return + } + + guard let node else { + throw AppError(serviceError: .nodeNotStarted) + } + + for channel in node.listChannels() { + let config = channel.config + config.setMaxDustHtlcExposureFromFixedLimit(limitMsat: 999999 * 1000) + try? node.updateChannelConfig(userChannelId: channel.userChannelId, counterpartyNodeId: channel.counterpartyNodeId, channelConfig: config) + print("Updated channel config for: \(channel.userChannelId)") + } + } + func sync() async throws { guard let node else { throw AppError(serviceError: .nodeNotStarted) @@ -90,6 +128,7 @@ class LightningService { print("Syncing LDK...") try await ServiceQueue.background(.ldk) { try node.syncWallets() + try? self.setMaxDustHtlcExposureForCurrentChannels() } print("LDK synced") } @@ -148,7 +187,7 @@ extension LightningService { //MARK: Events extension LightningService { - func listenForEvents() { + func listenForEvents(onEvent: ((Event) -> Void)? = nil) { Task { while true { guard let node = self.node else { @@ -157,10 +196,9 @@ extension LightningService { } let event = await node.nextEventAsync() - + onEvent?(event) //TODO actual event handler - switch event { case .paymentSuccessful(paymentId: let paymentId, paymentHash: let paymentHash, feePaidMsat: let feePaidMsat): print("✅ Payment successful: \(feePaidMsat)") diff --git a/Bitkit/Services/ServiceQueue.swift b/Bitkit/Services/ServiceQueue.swift index 8d8025f1..a809946f 100644 --- a/Bitkit/Services/ServiceQueue.swift +++ b/Bitkit/Services/ServiceQueue.swift @@ -37,7 +37,7 @@ class ServiceQueue { } catch { let appError = AppError(error: error) print("Service Error: \(appError.message) (\(appError.debugMessage ?? ""))") - continuation.resume(throwing: error) + continuation.resume(throwing: appError) } } } diff --git a/Bitkit/Utilities/Errors.swift b/Bitkit/Utilities/Errors.swift index e24c2f2c..186f1779 100644 --- a/Bitkit/Utilities/Errors.swift +++ b/Bitkit/Utilities/Errors.swift @@ -23,10 +23,15 @@ struct AppError: LocalizedError { } init(error: Error) { + if let ldkBuildError = error as? BuildError { + self.init(ldkBuildError: ldkBuildError) + return + } + if let ldkError = error as? NodeError { self.init(ldkError: ldkError) return - } + } if let bdkError = error as? BdkError { self.init(bdkError: bdkError) @@ -60,6 +65,44 @@ struct AppError: LocalizedError { // } } + private init(ldkBuildError: BuildError) { + switch ldkBuildError as BuildError { + case .InvalidChannelMonitor(message: let ldkMessage): + message = "Invalid channel monitor" + debugMessage = ldkMessage + case .InvalidSeedBytes(message: let ldkMessage): + message = "Invalid seed bytes" + debugMessage = ldkMessage + case .InvalidSeedFile(message: let ldkMessage): + message = "Invalid seed file" + debugMessage = ldkMessage + case .InvalidSystemTime(message: let ldkMessage): + message = "Invalid system time" + debugMessage = ldkMessage + case .InvalidListeningAddresses(message: let ldkMessage): + message = "Invalid listening addresses" + debugMessage = ldkMessage + case .ReadFailed(message: let ldkMessage): + message = "Read failed" + debugMessage = ldkMessage + case .WriteFailed(message: let ldkMessage): + message = "Write failed" + debugMessage = ldkMessage + case .StoragePathAccessFailed(message: let ldkMessage): + message = "Storage path access failed" + debugMessage = ldkMessage + case .KvStoreSetupFailed(message: let ldkMessage): + message = "KV store setup failed" + debugMessage = ldkMessage + case .WalletSetupFailed(message: let ldkMessage): + message = "Wallet setup failed" + debugMessage = ldkMessage + case .LoggerSetupFailed(message: let ldkMessage): + message = "Logger setup failed" + debugMessage = ldkMessage + } + } + private init(ldkError: NodeError) { switch ldkError as NodeError { case .AlreadyRunning(message: let ldkMessage): diff --git a/Bitkit/ViewModels/LightningViewModel.swift b/Bitkit/ViewModels/LightningViewModel.swift index 4634f7f5..86b33a66 100644 --- a/Bitkit/ViewModels/LightningViewModel.swift +++ b/Bitkit/ViewModels/LightningViewModel.swift @@ -23,9 +23,16 @@ class LightningViewModel: ObservableObject { let passphrase: String? = nil syncState() - try LightningService.shared.setup(mnemonic: mnemonic, passphrase: passphrase) + try await LightningService.shared.setup(mnemonic: mnemonic, passphrase: passphrase) try await LightningService.shared.start() syncState() + + //TODO listen on LDK events to sync UI state + } + + func stop() async throws { + try await LightningService.shared.stop() + syncState() } func sync() async throws { diff --git a/Bitkit/Views/LogView.swift b/Bitkit/Views/LogView.swift new file mode 100644 index 00000000..25b8726d --- /dev/null +++ b/Bitkit/Views/LogView.swift @@ -0,0 +1,44 @@ +// +// LogView.swift +// Bitkit +// +// Created by Jason van den Berg on 2024/07/16. +// + +import SwiftUI + +struct LogView: View { + @State var lines: [String] = [] + + var body: some View { + ScrollView { + ForEach(lines, id: \.self) { line in + Text(line) + .font(.system(size: 8)) + .multilineTextAlignment(.leading) + .foregroundColor(.green) + .frame(maxWidth: .infinity, alignment: .leading) + } + } + .background(.black) + .onAppear { + loadLog() + } + } + + func loadLog() { + let dir = Env.ldkStorage + let fileURL = dir.appendingPathComponent("ldk_node_latest.log") + + do { + let text = try String(contentsOf: fileURL, encoding: .utf8) + lines = text.components(separatedBy: "\n").map({ $0.trimmingCharacters(in: .whitespacesAndNewlines) }) + } catch { + lines = ["Failed to load log file"] + } + } +} + +#Preview { + LogView() +} diff --git a/BitkitNotification/BitkitNotification.entitlements b/BitkitNotification/BitkitNotification.entitlements new file mode 100644 index 00000000..4fca2ce3 --- /dev/null +++ b/BitkitNotification/BitkitNotification.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.security.application-groups + + group.bitkit + + + diff --git a/BitkitNotification/Info.plist b/BitkitNotification/Info.plist index 57421ebf..9f52b5a4 100644 --- a/BitkitNotification/Info.plist +++ b/BitkitNotification/Info.plist @@ -2,6 +2,11 @@ + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSExtension NSExtensionPointIdentifier diff --git a/BitkitNotification/NotificationService.swift b/BitkitNotification/NotificationService.swift index 54dfc2b2..a345a41a 100644 --- a/BitkitNotification/NotificationService.swift +++ b/BitkitNotification/NotificationService.swift @@ -6,6 +6,7 @@ // import UserNotifications +import LDKNode class NotificationService: UNNotificationServiceExtension { @@ -15,36 +16,82 @@ class NotificationService: UNNotificationServiceExtension { override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { self.contentHandler = contentHandler bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) + + bestAttemptContent?.title = "RECEIVED" Task { do { - let mnemonic = "science fatigue phone inner pipe solve acquire nothing birth slow armor flip debate gorilla select settle talk badge uphold firm video vibrant banner casual" // = generateEntropyMnemonic() + let mnemonic = "always coconut smooth scatter steel web version exist broken motion damage board trap dinosaur include alone dust flag paddle give divert journey garden bench" // = generateEntropyMnemonic() let passphrase: String? = nil + bestAttemptContent?.title = "Lightning setting up..." + print("Setting up LDK") - try LightningService.shared.setup(mnemonic: mnemonic, passphrase: passphrase) + try await LightningService.shared.setup(mnemonic: mnemonic, passphrase: passphrase) print("Starting LDK") bestAttemptContent?.title = "Lightning setup" - try await LightningService.shared.start() - - bestAttemptContent?.title = "Lightning started" - - bestAttemptContent?.body = LightningService.shared.nodeId ?? "ERROR NO NODE ID" - - print("Done") + try await LightningService.shared.start { event in + self.handleLdkEvent(event: event) + } } catch { bestAttemptContent?.title = "Lightning error" bestAttemptContent?.body = error.localizedDescription + + print("Failed to setup node") + print(error.localizedDescription) + dumpLogs() + await deliver() } - - deliver() } } - func deliver() { + func handleLdkEvent(event: Event) { + switch event { + case .paymentSuccessful(paymentId: let paymentId, paymentHash: let paymentHash, feePaidMsat: let feePaidMsat): + print("✅ Payment successful: \(feePaidMsat)") + break + case .paymentFailed(paymentId: let paymentId, paymentHash: let paymentHash, reason: let reason): + print("❌ Payment failed: \(reason.debugDescription)") + break + case .paymentReceived(paymentId: let paymentId, paymentHash: let paymentHash, amountMsat: let amountMsat): + print("Payment received: \(paymentId ?? ""), \(paymentHash), \(amountMsat)") + self.bestAttemptContent?.title = "Payment Received" + self.bestAttemptContent?.body = "⚡ \(amountMsat / 1000)" + Task { + await self.deliver() + } + break + case .paymentClaimable(paymentId: let paymentId, paymentHash: let paymentHash, claimableAmountMsat: let claimableAmountMsat, claimDeadline: let claimDeadline): + print("🫰 Payment claimable: \(claimableAmountMsat)") + break + case .channelPending(channelId: let channelId, userChannelId: let userChannelId, formerTemporaryChannelId: let formerTemporaryChannelId, counterpartyNodeId: let counterpartyNodeId, fundingTxo: let fundingTxo): + print("Channel pending") + self.bestAttemptContent?.title = "Channel Opened" + self.bestAttemptContent?.body = "Pending" + Task { + await self.deliver() + } + break + case .channelReady(channelId: let channelId, userChannelId: let userChannelId, counterpartyNodeId: let counterpartyNodeId): + print("👐 Channel ready: \(channelId)") + self.bestAttemptContent?.title = "Channel ready" + self.bestAttemptContent?.body = "Usable" + Task { + await self.deliver() + } + break + case .channelClosed(channelId: let channelId, userChannelId: let userChannelId, counterpartyNodeId: let counterpartyNodeId, reason: let reason): + print("⛔ Channel closed: \(channelId)") + break + } + } + + func deliver() async { + try? await LightningService.shared.stop() + if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { //TODO: Stop LDK @@ -52,6 +99,22 @@ class NotificationService: UNNotificationServiceExtension { } } + func dumpLogs() { + let dir = Env.ldkStorage + let fileURL = dir.appendingPathComponent("ldk_node_latest.log") + + do { + let text = try String(contentsOf: fileURL, encoding: .utf8) + let lines = text.components(separatedBy: "\n").map({ $0.trimmingCharacters(in: .whitespacesAndNewlines) }) + print("*****LDK-NODE LOG******") + lines.suffix(20).forEach { line in + print(line) + } + } catch { + print("Failed to load log file") + } + } + override func serviceExtensionTimeWillExpire() { // Called just before the extension will be terminated by the system. // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. diff --git a/test-push-server/index.js b/test-push-server/index.js index cfd34bc0..c52eb769 100644 --- a/test-push-server/index.js +++ b/test-push-server/index.js @@ -5,7 +5,7 @@ const { createPushData } = require('./helpers'); const push = new PushNotifications(pushSettings); -const hardcodedpushtoken = "2933593c23394bd98e9f319082ff4b4f7bcc5e553865fb02b57fbb6ca8c6ce07"; +const hardcodedpushtoken = "df6a15e37fe90bd0f71e919823ea19171e30fbc5632130e5e8e68f17dc76105e"; const data = createPushData({ type: 'payment' From d60896b48dcdf3a6a586ba42facdf8f07b33862b Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 16 Jul 2024 14:26:48 +0200 Subject: [PATCH 6/9] fix: on chain wallet creation in service queue --- .../UserInterfaceState.xcuserstate | Bin 68343 -> 71734 bytes Bitkit/Services/OnChainService.swift | 16 +++++++++------- Bitkit/ViewModels/OnChainViewModel.swift | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate b/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate index 0ebae7c5de31994a53f05064bd6ff1421767d549..d667c783f7e30269f5fa885da5e77ba561d164a4 100644 GIT binary patch delta 34578 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 delta 32163 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 CWMlIH diff --git a/Bitkit/Services/OnChainService.swift b/Bitkit/Services/OnChainService.swift index de206f7e..c78bb89b 100644 --- a/Bitkit/Services/OnChainService.swift +++ b/Bitkit/Services/OnChainService.swift @@ -29,7 +29,7 @@ class OnChainService { blockchainConfig = BlockchainConfig.esplora(config: esploraConfig) } - func createWallet(mnemonic: String, passphrase: String?) throws { + func createWallet(mnemonic: String, passphrase: String?) async throws { let mnemonic = try Mnemonic.fromString(mnemonic: mnemonic) let secretKey = DescriptorSecretKey( @@ -52,12 +52,14 @@ class OnChainService { //TODO save to keychain - wallet = try Wallet( - descriptor: descriptor, - changeDescriptor: changeDescriptor, - network: Env.network.bdkNetwork, - databaseConfig: .memory //TODO use sqlite - ) + try await ServiceQueue.background(.bdk) { + self.wallet = try Wallet( + descriptor: descriptor, + changeDescriptor: changeDescriptor, + network: Env.network.bdkNetwork, + databaseConfig: .memory //TODO use sqlite + ) + } } func getAddress() throws -> String { diff --git a/Bitkit/ViewModels/OnChainViewModel.swift b/Bitkit/ViewModels/OnChainViewModel.swift index eb58b164..03cecada 100644 --- a/Bitkit/ViewModels/OnChainViewModel.swift +++ b/Bitkit/ViewModels/OnChainViewModel.swift @@ -19,7 +19,7 @@ class OnChainViewModel: ObservableObject { let passphrase: String? = nil try OnChainService.shared.setup() - try OnChainService.shared.createWallet(mnemonic: mnemonic, passphrase: passphrase) + try await OnChainService.shared.createWallet(mnemonic: mnemonic, passphrase: passphrase) syncState() } From 188535afc67c63b71a4b39ee52aad2921d8da523 Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 16 Jul 2024 14:51:31 +0200 Subject: [PATCH 7/9] fix: log viewer list errors fix --- .../UserInterfaceState.xcuserstate | Bin 71734 -> 74906 bytes Bitkit/Views/LogView.swift | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate b/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate index d667c783f7e30269f5fa885da5e77ba561d164a4..390b03befe2e71afc660957e5b48b4efd9e7f8be 100644 GIT binary patch literal 74906 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 literal 71734 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 diff --git a/Bitkit/Views/LogView.swift b/Bitkit/Views/LogView.swift index 25b8726d..def2dd35 100644 --- a/Bitkit/Views/LogView.swift +++ b/Bitkit/Views/LogView.swift @@ -11,7 +11,7 @@ struct LogView: View { @State var lines: [String] = [] var body: some View { - ScrollView { + List { ForEach(lines, id: \.self) { line in Text(line) .font(.system(size: 8)) @@ -20,7 +20,7 @@ struct LogView: View { .frame(maxWidth: .infinity, alignment: .leading) } } - .background(.black) + .listStyle(.plain) .onAppear { loadLog() } From a4bd95493fcde38a05f606b99b2f28f4ac92d473 Mon Sep 17 00:00:00 2001 From: Jason Date: Tue, 16 Jul 2024 15:42:12 +0200 Subject: [PATCH 8/9] feat: replace print with utility logger --- Bitkit.xcodeproj/project.pbxproj | 6 ++ .../UserInterfaceState.xcuserstate | Bin 74906 -> 67932 bytes Bitkit/BitkitApp.swift | 18 ++--- Bitkit/ContentView.swift | 64 ++++++++---------- Bitkit/Services/LightningService.swift | 44 ++++++------ Bitkit/Services/OnChainService.swift | 24 +++++-- Bitkit/Services/ServiceQueue.swift | 2 +- Bitkit/Utilities/Errors.swift | 14 ++++ Bitkit/Utilities/Logger.swift | 44 ++++++++++++ Bitkit/ViewModels/OnChainViewModel.swift | 4 +- BitkitNotification/NotificationService.swift | 50 +++++--------- 11 files changed, 158 insertions(+), 112 deletions(-) create mode 100644 Bitkit/Utilities/Logger.swift diff --git a/Bitkit.xcodeproj/project.pbxproj b/Bitkit.xcodeproj/project.pbxproj index 2f590108..c6d63955 100644 --- a/Bitkit.xcodeproj/project.pbxproj +++ b/Bitkit.xcodeproj/project.pbxproj @@ -36,6 +36,8 @@ 96FE1F812C2DE6AC006D0C8B /* BitkitUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FE1F802C2DE6AC006D0C8B /* BitkitUITests.swift */; }; 96FE1F832C2DE6AC006D0C8B /* BitkitUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FE1F822C2DE6AC006D0C8B /* BitkitUITestsLaunchTests.swift */; }; 96FE5A192C46594500860ADC /* LogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FE5A182C46594500860ADC /* LogView.swift */; }; + 96FE5A1B2C46A4DD00860ADC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FE5A1A2C46A4DD00860ADC /* Logger.swift */; }; + 96FE5A1C2C46A4E100860ADC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96FE5A1A2C46A4DD00860ADC /* Logger.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -102,6 +104,7 @@ 96FE1F802C2DE6AC006D0C8B /* BitkitUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitkitUITests.swift; sourceTree = ""; }; 96FE1F822C2DE6AC006D0C8B /* BitkitUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BitkitUITestsLaunchTests.swift; sourceTree = ""; }; 96FE5A182C46594500860ADC /* LogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogView.swift; sourceTree = ""; }; + 96FE5A1A2C46A4DD00860ADC /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -204,6 +207,7 @@ isa = PBXGroup; children = ( 96F261352C369D2400167439 /* Errors.swift */, + 96FE5A1A2C46A4DD00860ADC /* Logger.swift */, ); path = Utilities; sourceTree = ""; @@ -462,6 +466,7 @@ 961058EB2C35793000E1F1D8 /* WalletNetwork.swift in Sources */, 961058DF2C355B5500E1F1D8 /* NotificationService.swift in Sources */, 96F261372C369D2400167439 /* Errors.swift in Sources */, + 96FE5A1C2C46A4E100860ADC /* Logger.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -478,6 +483,7 @@ 96F261322C369C2100167439 /* ServiceQueue.swift in Sources */, 9637E6DF2C32ED7B004A92FC /* LnPeer.swift in Sources */, 96FE1F672C2DE6AA006D0C8B /* ContentView.swift in Sources */, + 96FE5A1B2C46A4DD00860ADC /* Logger.swift in Sources */, 96B12A032C2EC65000DD07B0 /* LightningService.swift in Sources */, 9637E6D52C32D811004A92FC /* OnChainService.swift in Sources */, 96FE1F652C2DE6AA006D0C8B /* BitkitApp.swift in Sources */, diff --git a/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate b/Bitkit.xcodeproj/project.xcworkspace/xcuserdata/jason.xcuserdatad/UserInterfaceState.xcuserstate index 390b03befe2e71afc660957e5b48b4efd9e7f8be..6281245c1b3ea5c44d74d3450329ad32441435ae 100644 GIT binary patch delta 31635 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