@candypoets/nipworker 0.96.3 → 0.96.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +206 -73
  2. package/crates/native-ffi/README.md +14 -151
  3. package/crates/native-ffi/ios/README.md +4 -50
  4. package/crates/native-ffi/react-native/README.md +8 -7
  5. package/crates/native-ffi/react-native/android/build.gradle +1 -0
  6. package/crates/native-ffi/react-native/android/src/main/cpp/NipworkerByteRuntime.cpp +348 -0
  7. package/crates/native-ffi/react-native/android/src/main/java/com/candypoets/nipworker/reactnative/NipworkerHooks.kt +292 -0
  8. package/crates/native-ffi/react-native/android/src/main/java/com/candypoets/nipworker/reactnative/NipworkerReactNativeModule.kt +283 -89
  9. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/AddressPointer.java +75 -0
  10. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ArticleBlock.java +102 -0
  11. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ArticleBlockType.java +23 -0
  12. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ArticleEntity.java +80 -0
  13. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ArticleInline.java +85 -0
  14. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ArticleInlineType.java +24 -0
  15. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/BadgeAwardRecipient.java +61 -0
  16. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/BufferFull.java +52 -0
  17. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CacheInput.java +16 -0
  18. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CacheInputMessage.java +57 -0
  19. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CacheRequest.java +84 -0
  20. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CacheResponse.java +67 -0
  21. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CashuData.java +55 -0
  22. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ChatLimiterPipeConfig.java +74 -0
  23. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CodeData.java +61 -0
  24. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ConnectionStatus.java +68 -0
  25. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Contact.java +70 -0
  26. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ContentBlock.java +70 -0
  27. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ContentData.java +23 -0
  28. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Coordinate.java +75 -0
  29. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CountResponse.java +60 -0
  30. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CounterPipeConfig.java +67 -0
  31. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/DLEQProof.java +69 -0
  32. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Emoji.java +62 -0
  33. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/EmojiData.java +68 -0
  34. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Eoce.java +55 -0
  35. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/EventPointer.java +74 -0
  36. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/GetPublicKey.java +43 -0
  37. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/HTLCWitness.java +64 -0
  38. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/HashtagData.java +55 -0
  39. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/HistoryTag.java +74 -0
  40. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ImageData.java +67 -0
  41. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ImetaTag.java +100 -0
  42. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind0Parsed.java +168 -0
  43. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind10002Parsed.java +59 -0
  44. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind10019Parsed.java +73 -0
  45. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind1018Parsed.java +79 -0
  46. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind1068Parsed.java +107 -0
  47. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind1111Parsed.java +159 -0
  48. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind1311Parsed.java +91 -0
  49. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind17375Parsed.java +74 -0
  50. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind17Parsed.java +81 -0
  51. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind1Parsed.java +109 -0
  52. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind20Parsed.java +107 -0
  53. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind22Parsed.java +111 -0
  54. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind30023Parsed.java +113 -0
  55. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind3Parsed.java +59 -0
  56. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind4Parsed.java +78 -0
  57. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind6Parsed.java +53 -0
  58. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind7374Parsed.java +66 -0
  59. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind7375Parsed.java +79 -0
  60. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind7376Parsed.java +100 -0
  61. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind7Parsed.java +81 -0
  62. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind8Parsed.java +78 -0
  63. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind9321Parsed.java +117 -0
  64. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind9735Parsed.java +119 -0
  65. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/KindFilterPipeConfig.java +60 -0
  66. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/LinkPreviewData.java +73 -0
  67. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ListParsed.java +123 -0
  68. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/LiveActivityRef.java +72 -0
  69. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/LiveChatParticipant.java +61 -0
  70. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/LiveChatThreadRef.java +61 -0
  71. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MainContent.java +20 -0
  72. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MainMessage.java +57 -0
  73. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MediaGroupData.java +58 -0
  74. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MediaItem.java +58 -0
  75. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Message.java +24 -0
  76. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MessageType.java +19 -0
  77. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MintInfo.java +65 -0
  78. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MintProofs.java +66 -0
  79. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MuteFilterPipeConfig.java +84 -0
  80. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Nip07.java +43 -0
  81. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Nip46Bunker.java +61 -0
  82. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Nip46QR.java +61 -0
  83. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/NostrData.java +81 -0
  84. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/NostrEvent.java +95 -0
  85. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/NpubLimiterKey.java +15 -0
  86. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/NpubLimiterPipeConfig.java +64 -0
  87. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/P2PKWitness.java +57 -0
  88. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ParsePipeConfig.java +43 -0
  89. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ParsedData.java +39 -0
  90. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ParsedDataUnion.java +35 -0
  91. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ParsedEvent.java +108 -0
  92. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Pipe.java +57 -0
  93. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PipeConfig.java +23 -0
  94. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PipelineConfig.java +59 -0
  95. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PollOption.java +62 -0
  96. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PollType.java +15 -0
  97. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PreGenericParsed.java +213 -0
  98. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PreParticipant.java +73 -0
  99. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PreRefEvent.java +67 -0
  100. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PrivateKey.java +55 -0
  101. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ProfilePointer.java +64 -0
  102. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Proof.java +90 -0
  103. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ProofVerificationPipeConfig.java +52 -0
  104. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Pubkey.java +55 -0
  105. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Publish.java +80 -0
  106. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Raw.java +55 -0
  107. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ReactionType.java +17 -0
  108. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/RelayInfo.java +63 -0
  109. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Request.java +134 -0
  110. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SaveToDbPipeConfig.java +43 -0
  111. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SerializeEventsPipeConfig.java +55 -0
  112. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SetSigner.java +57 -0
  113. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignEvent.java +54 -0
  114. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignedEvent.java +54 -0
  115. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignerOp.java +19 -0
  116. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignerRequest.java +80 -0
  117. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignerResponse.java +64 -0
  118. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignerType.java +18 -0
  119. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/StringVec.java +57 -0
  120. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Subscribe.java +72 -0
  121. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SubscribeKind.java +19 -0
  122. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SubscriptionConfig.java +95 -0
  123. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Tag.java +64 -0
  124. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Template.java +74 -0
  125. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Unsubscribe.java +55 -0
  126. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ValidProofs.java +59 -0
  127. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/VideoData.java +67 -0
  128. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/VideoVariant.java +102 -0
  129. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Witness.java +17 -0
  130. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/WitnessString.java +54 -0
  131. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/WorkerMessage.java +74 -0
  132. package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ZapRequest.java +83 -0
  133. package/crates/native-ffi/react-native/ios/NipworkerReactNativeModule.h +18 -0
  134. package/crates/native-ffi/react-native/ios/NipworkerReactNativeModule.mm +263 -8
  135. package/dist/EngineManager.d.ts +1 -0
  136. package/dist/EngineManager.d.ts.map +1 -1
  137. package/dist/EngineManager.js +143 -137
  138. package/dist/NostrManager.d.ts +1 -0
  139. package/dist/NostrManager.d.ts.map +1 -1
  140. package/dist/NostrManager.js +49 -44
  141. package/dist/connections/index.js +87 -87
  142. package/dist/engine/index.js +119 -119
  143. package/dist/engine.d.ts.map +1 -1
  144. package/dist/hooks.d.ts +1 -1
  145. package/dist/hooks.d.ts.map +1 -1
  146. package/dist/hooks.js +27 -26
  147. package/dist/index.d.ts +1 -1
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/legacy.d.ts.map +1 -1
  150. package/dist/lib/ArrayBufferReader.d.ts +2 -1
  151. package/dist/lib/ArrayBufferReader.d.ts.map +1 -1
  152. package/dist/lib/BaseBackend.d.ts +5 -3
  153. package/dist/lib/BaseBackend.d.ts.map +1 -1
  154. package/dist/manager.d.ts +2 -6
  155. package/dist/manager.d.ts.map +1 -1
  156. package/dist/manager.js +10 -28
  157. package/dist/react-native.d.ts +33 -4
  158. package/dist/react-native.d.ts.map +1 -1
  159. package/dist/react-native.js +400 -122
  160. package/dist/scheduleMicrotask.js +58 -50
  161. package/package.json +13 -11
  162. package/swift/Package.swift +36 -0
  163. package/swift/README.md +438 -0
  164. package/swift/Sources/NipworkerSwift/ArrayBufferReader.swift +136 -0
  165. package/swift/Sources/NipworkerSwift/AuthSession.swift +24 -0
  166. package/swift/Sources/NipworkerSwift/FFI.swift +94 -0
  167. package/swift/Sources/NipworkerSwift/FlatBufferHelpers.swift +273 -0
  168. package/swift/Sources/NipworkerSwift/Generated/message_generated.swift +6530 -0
  169. package/swift/Sources/NipworkerSwift/Hooks.swift +300 -0
  170. package/swift/Sources/NipworkerSwift/Models.swift +156 -0
  171. package/swift/Sources/NipworkerSwift/NostrManager.swift +594 -0
  172. package/swift/Sources/NipworkerSwift/PublishTracker.swift +40 -0
  173. package/swift/Sources/NipworkerSwift/Subscription.swift +44 -0
  174. package/swift/Sources/NipworkerSwift/WorkerMessageView.swift +145 -0
  175. package/dist/NativeBackend.d.ts +0 -53
  176. package/dist/NativeBackend.d.ts.map +0 -1
  177. package/dist/NativeBackend.js +0 -464
  178. package/dist/native.d.ts +0 -29
  179. package/dist/native.d.ts.map +0 -1
  180. package/dist/native.js +0 -273
@@ -0,0 +1,273 @@
1
+ import Foundation
2
+ import FlatBuffers
3
+
4
+ // MARK: - Subscribe
5
+
6
+ func buildSubscribeMessage(
7
+ subId: String,
8
+ requests: [RequestObject],
9
+ options: SubscriptionConfig
10
+ ) -> Data {
11
+ var builder = FlatBufferBuilder(initialSize: 2048)
12
+
13
+ let requestOffsets = requests.map { req -> Offset in
14
+ let idsOffset = req.ids?.isEmpty == false ? builder.createVector(ofStrings: req.ids!) : Offset()
15
+ let authorsOffset = req.authors?.isEmpty == false ? builder.createVector(ofStrings: req.authors!) : Offset()
16
+ let kindsOffset = req.kinds?.isEmpty == false ? builder.createVector(req.kinds!) : Offset()
17
+ let tagsOffset: Offset
18
+ if let tags = req.tags, !tags.isEmpty {
19
+ let tagVecOffsets = tags.map { (key, values) -> Offset in
20
+ let items = builder.createVector(ofStrings: [key] + values)
21
+ return nostr_fb_StringVec.createStringVec(&builder, itemsVectorOffset: items)
22
+ }
23
+ tagsOffset = builder.createVector(ofOffsets: tagVecOffsets)
24
+ } else {
25
+ tagsOffset = Offset()
26
+ }
27
+ let searchOffset = req.search.map { builder.create(string: $0) } ?? Offset()
28
+ let relaysOffset = req.relays.isEmpty ? Offset() : builder.createVector(ofStrings: req.relays)
29
+
30
+ return nostr_fb_Request.createRequest(
31
+ &builder,
32
+ idsVectorOffset: idsOffset,
33
+ authorsVectorOffset: authorsOffset,
34
+ kindsVectorOffset: kindsOffset,
35
+ tagsVectorOffset: tagsOffset,
36
+ limit: Int32(req.limit ?? 0),
37
+ since: Int32(req.since ?? 0),
38
+ until: Int32(req.until ?? 0),
39
+ searchOffset: searchOffset,
40
+ relaysVectorOffset: relaysOffset,
41
+ closeOnEose: req.closeOnEOSE ?? false,
42
+ cacheFirst: req.cacheFirst ?? true,
43
+ noCache: req.noCache ?? false,
44
+ maxRelays: req.maxRelays ?? 0,
45
+ cacheOnly: options.cacheOnly
46
+ )
47
+ }
48
+
49
+ let pipeOffsets: [Offset] = (options.pipeline?.map { pipeConfig -> Offset in
50
+ let configOffset: Offset
51
+ let configType: nostr_fb_PipeConfig
52
+ switch pipeConfig.kind {
53
+ case .muteFilter:
54
+ configType = .mutefilterpipeconfig
55
+ let start = nostr_fb_MuteFilterPipeConfig.startMuteFilterPipeConfig(&builder)
56
+ configOffset = nostr_fb_MuteFilterPipeConfig.endMuteFilterPipeConfig(&builder, start: start)
57
+ case .parse:
58
+ configType = .parsepipeconfig
59
+ let start = nostr_fb_ParsePipeConfig.startParsePipeConfig(&builder)
60
+ configOffset = nostr_fb_ParsePipeConfig.endParsePipeConfig(&builder, start: start)
61
+ case .saveToDb:
62
+ configType = .savetodbpipeconfig
63
+ let start = nostr_fb_SaveToDbPipeConfig.startSaveToDbPipeConfig(&builder)
64
+ configOffset = nostr_fb_SaveToDbPipeConfig.endSaveToDbPipeConfig(&builder, start: start)
65
+ case .serializeEvents(let sid):
66
+ configType = .serializeeventspipeconfig
67
+ let sidOffset = builder.create(string: sid)
68
+ configOffset = nostr_fb_SerializeEventsPipeConfig.createSerializeEventsPipeConfig(
69
+ &builder,
70
+ subscriptionIdOffset: sidOffset
71
+ )
72
+ case .kindFilter(let kinds):
73
+ configType = .kindfilterpipeconfig
74
+ let kindsOffset = builder.createVector(kinds)
75
+ configOffset = nostr_fb_KindFilterPipeConfig.createKindFilterPipeConfig(
76
+ &builder,
77
+ kindsVectorOffset: kindsOffset
78
+ )
79
+ case .counter(let kinds, let pubkey):
80
+ configType = .counterpipeconfig
81
+ let kindsOffset = builder.createVector(kinds)
82
+ let pubkeyOffset = builder.create(string: pubkey)
83
+ configOffset = nostr_fb_CounterPipeConfig.createCounterPipeConfig(
84
+ &builder,
85
+ kindsVectorOffset: kindsOffset,
86
+ pubkeyOffset: pubkeyOffset
87
+ )
88
+ case .npubLimiter(let kind, let limitPerNpub, let maxTotalNpubs):
89
+ configType = .npublimiterpipeconfig
90
+ configOffset = nostr_fb_NpubLimiterPipeConfig.createNpubLimiterPipeConfig(
91
+ &builder,
92
+ kind: kind,
93
+ limitPerNpub: limitPerNpub,
94
+ maxTotalNpubs: maxTotalNpubs
95
+ )
96
+ case .proofVerification(let maxProofs):
97
+ configType = .proofverificationpipeconfig
98
+ configOffset = nostr_fb_ProofVerificationPipeConfig.createProofVerificationPipeConfig(
99
+ &builder,
100
+ maxProofs: maxProofs
101
+ )
102
+ }
103
+ return nostr_fb_Pipe.createPipe(&builder, configType: configType, configOffset: configOffset)
104
+ }) ?? [
105
+ defaultMuteFilterPipe(&builder),
106
+ defaultParsePipe(&builder),
107
+ defaultSaveToDbPipe(&builder),
108
+ defaultSerializeEventsPipe(&builder, subId: subId)
109
+ ]
110
+
111
+ let pipelineOffset = nostr_fb_PipelineConfig.createPipelineConfig(
112
+ &builder,
113
+ pipesVectorOffset: builder.createVector(ofOffsets: pipeOffsets)
114
+ )
115
+
116
+ let configOffset = nostr_fb_SubscriptionConfig.createSubscriptionConfig(
117
+ &builder,
118
+ pipelineOffset: pipelineOffset,
119
+ closeOnEose: options.closeOnEose,
120
+ cacheFirst: options.cacheFirst,
121
+ timeoutMs: options.timeoutMs ?? 0,
122
+ maxEvents: options.maxEvents ?? 0,
123
+ skipCache: options.skipCache,
124
+ force: options.force,
125
+ bytesPerEvent: options.bytesPerEvent,
126
+ isSlow: options.isSlow,
127
+ paginationOffset: options.pagination.map { builder.create(string: $0) } ?? Offset(),
128
+ cacheOnly: options.cacheOnly
129
+ )
130
+
131
+ let subIdOffset = builder.create(string: subId)
132
+ let subscribeOffset = nostr_fb_Subscribe.createSubscribe(
133
+ &builder,
134
+ subscriptionIdOffset: subIdOffset,
135
+ requestsVectorOffset: builder.createVector(ofOffsets: requestOffsets),
136
+ configOffset: configOffset
137
+ )
138
+
139
+ let mainOffset = nostr_fb_MainMessage.createMainMessage(
140
+ &builder,
141
+ contentType: .subscribe,
142
+ contentOffset: subscribeOffset
143
+ )
144
+
145
+ builder.finish(offset: mainOffset)
146
+ return Data(builder.data)
147
+ }
148
+
149
+ private func defaultMuteFilterPipe(_ builder: inout FlatBufferBuilder) -> Offset {
150
+ let start = nostr_fb_MuteFilterPipeConfig.startMuteFilterPipeConfig(&builder)
151
+ let configOffset = nostr_fb_MuteFilterPipeConfig.endMuteFilterPipeConfig(&builder, start: start)
152
+ return nostr_fb_Pipe.createPipe(&builder, configType: .mutefilterpipeconfig, configOffset: configOffset)
153
+ }
154
+
155
+ private func defaultParsePipe(_ builder: inout FlatBufferBuilder) -> Offset {
156
+ let start = nostr_fb_ParsePipeConfig.startParsePipeConfig(&builder)
157
+ let configOffset = nostr_fb_ParsePipeConfig.endParsePipeConfig(&builder, start: start)
158
+ return nostr_fb_Pipe.createPipe(&builder, configType: .parsepipeconfig, configOffset: configOffset)
159
+ }
160
+
161
+ private func defaultSaveToDbPipe(_ builder: inout FlatBufferBuilder) -> Offset {
162
+ let start = nostr_fb_SaveToDbPipeConfig.startSaveToDbPipeConfig(&builder)
163
+ let configOffset = nostr_fb_SaveToDbPipeConfig.endSaveToDbPipeConfig(&builder, start: start)
164
+ return nostr_fb_Pipe.createPipe(&builder, configType: .savetodbpipeconfig, configOffset: configOffset)
165
+ }
166
+
167
+ private func defaultSerializeEventsPipe(_ builder: inout FlatBufferBuilder, subId: String) -> Offset {
168
+ let sidOffset = builder.create(string: subId)
169
+ let configOffset = nostr_fb_SerializeEventsPipeConfig.createSerializeEventsPipeConfig(
170
+ &builder,
171
+ subscriptionIdOffset: sidOffset
172
+ )
173
+ return nostr_fb_Pipe.createPipe(&builder, configType: .serializeeventspipeconfig, configOffset: configOffset)
174
+ }
175
+
176
+ // MARK: - Unsubscribe
177
+
178
+ func buildUnsubscribeMessage(subId: String) -> Data {
179
+ var builder = FlatBufferBuilder(initialSize: 256)
180
+ let subIdOffset = builder.create(string: subId)
181
+ let unsubOffset = nostr_fb_Unsubscribe.createUnsubscribe(&builder, subscriptionIdOffset: subIdOffset)
182
+ let mainOffset = nostr_fb_MainMessage.createMainMessage(&builder, contentType: .unsubscribe, contentOffset: unsubOffset)
183
+ builder.finish(offset: mainOffset)
184
+ return Data(builder.data)
185
+ }
186
+
187
+ // MARK: - Publish
188
+
189
+ func buildPublishMessage(
190
+ publishId: String,
191
+ event: NostrEvent,
192
+ defaultRelays: [String],
193
+ optimisticSubIds: [String]
194
+ ) -> Data {
195
+ var builder = FlatBufferBuilder(initialSize: 2048)
196
+
197
+ let contentOffset = builder.create(string: event.content)
198
+ let tagOffsets = event.tags.map { tag -> Offset in
199
+ let items = builder.createVector(ofStrings: tag)
200
+ return nostr_fb_StringVec.createStringVec(&builder, itemsVectorOffset: items)
201
+ }
202
+ let tagsOffset = builder.createVector(ofOffsets: tagOffsets)
203
+ let templateOffset = nostr_fb_Template.createTemplate(
204
+ &builder,
205
+ kind: event.kind,
206
+ createdAt: Int32(event.createdAt),
207
+ contentOffset: contentOffset,
208
+ tagsVectorOffset: tagsOffset
209
+ )
210
+
211
+ let publishIdOffset = builder.create(string: publishId)
212
+ let relaysOffset = defaultRelays.isEmpty ? Offset() : builder.createVector(ofStrings: defaultRelays)
213
+ let optimisticSubIdsOffset = optimisticSubIds.isEmpty ? Offset() : builder.createVector(ofStrings: optimisticSubIds)
214
+
215
+ let publishOffset = nostr_fb_Publish.createPublish(
216
+ &builder,
217
+ publishIdOffset: publishIdOffset,
218
+ templateOffset: templateOffset,
219
+ relaysVectorOffset: relaysOffset,
220
+ optimisticSubidsVectorOffset: optimisticSubIdsOffset
221
+ )
222
+
223
+ let mainOffset = nostr_fb_MainMessage.createMainMessage(&builder, contentType: .publish, contentOffset: publishOffset)
224
+ builder.finish(offset: mainOffset)
225
+ return Data(builder.data)
226
+ }
227
+
228
+ // MARK: - SignEvent
229
+
230
+ func buildSignEventMessage(template: EventTemplate) -> Data {
231
+ var builder = FlatBufferBuilder(initialSize: 2048)
232
+
233
+ let contentOffset = builder.create(string: template.content)
234
+ let tagOffsets = template.tags.map { tag -> Offset in
235
+ let items = builder.createVector(ofStrings: tag)
236
+ return nostr_fb_StringVec.createStringVec(&builder, itemsVectorOffset: items)
237
+ }
238
+ let tagsOffset = builder.createVector(ofOffsets: tagOffsets)
239
+ let templateOffset = nostr_fb_Template.createTemplate(
240
+ &builder,
241
+ kind: template.kind,
242
+ createdAt: Int32(Date().timeIntervalSince1970),
243
+ contentOffset: contentOffset,
244
+ tagsVectorOffset: tagsOffset
245
+ )
246
+
247
+ let signOffset = nostr_fb_SignEvent.createSignEvent(&builder, templateOffset: templateOffset)
248
+ let mainOffset = nostr_fb_MainMessage.createMainMessage(&builder, contentType: .signevent, contentOffset: signOffset)
249
+ builder.finish(offset: mainOffset)
250
+ return Data(builder.data)
251
+ }
252
+
253
+ // MARK: - GetPublicKey
254
+
255
+ func buildGetPublicKeyMessage() -> Data {
256
+ var builder = FlatBufferBuilder(initialSize: 256)
257
+ let getPubkeyOffset = nostr_fb_GetPublicKey.endGetPublicKey(&builder, start: nostr_fb_GetPublicKey.startGetPublicKey(&builder))
258
+ let mainOffset = nostr_fb_MainMessage.createMainMessage(&builder, contentType: .getpublickey, contentOffset: getPubkeyOffset)
259
+ builder.finish(offset: mainOffset)
260
+ return Data(builder.data)
261
+ }
262
+
263
+ // MARK: - PrivateKey signer
264
+
265
+ func buildSetPrivateKeyMessage(secret: String) -> Data {
266
+ var builder = FlatBufferBuilder(initialSize: 256)
267
+ let secretOffset = builder.create(string: secret)
268
+ let pkOffset = nostr_fb_PrivateKey.createPrivateKey(&builder, privateKeyOffset: secretOffset)
269
+ let signerOffset = nostr_fb_SetSigner.createSetSigner(&builder, signerTypeType: .privatekey, signerTypeOffset: pkOffset)
270
+ let mainOffset = nostr_fb_MainMessage.createMainMessage(&builder, contentType: .setsigner, contentOffset: signerOffset)
271
+ builder.finish(offset: mainOffset)
272
+ return Data(builder.data)
273
+ }