@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.
- package/README.md +206 -73
- package/crates/native-ffi/README.md +14 -151
- package/crates/native-ffi/ios/README.md +4 -50
- package/crates/native-ffi/react-native/README.md +8 -7
- package/crates/native-ffi/react-native/android/build.gradle +1 -0
- package/crates/native-ffi/react-native/android/src/main/cpp/NipworkerByteRuntime.cpp +348 -0
- package/crates/native-ffi/react-native/android/src/main/java/com/candypoets/nipworker/reactnative/NipworkerHooks.kt +292 -0
- package/crates/native-ffi/react-native/android/src/main/java/com/candypoets/nipworker/reactnative/NipworkerReactNativeModule.kt +283 -89
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/AddressPointer.java +75 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ArticleBlock.java +102 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ArticleBlockType.java +23 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ArticleEntity.java +80 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ArticleInline.java +85 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ArticleInlineType.java +24 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/BadgeAwardRecipient.java +61 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/BufferFull.java +52 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CacheInput.java +16 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CacheInputMessage.java +57 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CacheRequest.java +84 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CacheResponse.java +67 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CashuData.java +55 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ChatLimiterPipeConfig.java +74 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CodeData.java +61 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ConnectionStatus.java +68 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Contact.java +70 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ContentBlock.java +70 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ContentData.java +23 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Coordinate.java +75 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CountResponse.java +60 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/CounterPipeConfig.java +67 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/DLEQProof.java +69 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Emoji.java +62 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/EmojiData.java +68 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Eoce.java +55 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/EventPointer.java +74 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/GetPublicKey.java +43 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/HTLCWitness.java +64 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/HashtagData.java +55 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/HistoryTag.java +74 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ImageData.java +67 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ImetaTag.java +100 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind0Parsed.java +168 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind10002Parsed.java +59 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind10019Parsed.java +73 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind1018Parsed.java +79 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind1068Parsed.java +107 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind1111Parsed.java +159 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind1311Parsed.java +91 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind17375Parsed.java +74 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind17Parsed.java +81 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind1Parsed.java +109 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind20Parsed.java +107 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind22Parsed.java +111 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind30023Parsed.java +113 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind3Parsed.java +59 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind4Parsed.java +78 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind6Parsed.java +53 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind7374Parsed.java +66 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind7375Parsed.java +79 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind7376Parsed.java +100 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind7Parsed.java +81 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind8Parsed.java +78 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind9321Parsed.java +117 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Kind9735Parsed.java +119 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/KindFilterPipeConfig.java +60 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/LinkPreviewData.java +73 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ListParsed.java +123 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/LiveActivityRef.java +72 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/LiveChatParticipant.java +61 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/LiveChatThreadRef.java +61 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MainContent.java +20 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MainMessage.java +57 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MediaGroupData.java +58 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MediaItem.java +58 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Message.java +24 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MessageType.java +19 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MintInfo.java +65 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MintProofs.java +66 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/MuteFilterPipeConfig.java +84 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Nip07.java +43 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Nip46Bunker.java +61 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Nip46QR.java +61 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/NostrData.java +81 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/NostrEvent.java +95 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/NpubLimiterKey.java +15 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/NpubLimiterPipeConfig.java +64 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/P2PKWitness.java +57 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ParsePipeConfig.java +43 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ParsedData.java +39 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ParsedDataUnion.java +35 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ParsedEvent.java +108 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Pipe.java +57 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PipeConfig.java +23 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PipelineConfig.java +59 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PollOption.java +62 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PollType.java +15 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PreGenericParsed.java +213 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PreParticipant.java +73 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PreRefEvent.java +67 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/PrivateKey.java +55 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ProfilePointer.java +64 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Proof.java +90 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ProofVerificationPipeConfig.java +52 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Pubkey.java +55 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Publish.java +80 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Raw.java +55 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ReactionType.java +17 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/RelayInfo.java +63 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Request.java +134 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SaveToDbPipeConfig.java +43 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SerializeEventsPipeConfig.java +55 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SetSigner.java +57 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignEvent.java +54 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignedEvent.java +54 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignerOp.java +19 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignerRequest.java +80 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignerResponse.java +64 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SignerType.java +18 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/StringVec.java +57 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Subscribe.java +72 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SubscribeKind.java +19 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/SubscriptionConfig.java +95 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Tag.java +64 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Template.java +74 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Unsubscribe.java +55 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ValidProofs.java +59 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/VideoData.java +67 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/VideoVariant.java +102 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/Witness.java +17 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/WitnessString.java +54 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/WorkerMessage.java +74 -0
- package/crates/native-ffi/react-native/android/src/main/java/nostr/fb/ZapRequest.java +83 -0
- package/crates/native-ffi/react-native/ios/NipworkerReactNativeModule.h +18 -0
- package/crates/native-ffi/react-native/ios/NipworkerReactNativeModule.mm +263 -8
- package/dist/EngineManager.d.ts +1 -0
- package/dist/EngineManager.d.ts.map +1 -1
- package/dist/EngineManager.js +143 -137
- package/dist/NostrManager.d.ts +1 -0
- package/dist/NostrManager.d.ts.map +1 -1
- package/dist/NostrManager.js +49 -44
- package/dist/connections/index.js +87 -87
- package/dist/engine/index.js +119 -119
- package/dist/engine.d.ts.map +1 -1
- package/dist/hooks.d.ts +1 -1
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +27 -26
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/legacy.d.ts.map +1 -1
- package/dist/lib/ArrayBufferReader.d.ts +2 -1
- package/dist/lib/ArrayBufferReader.d.ts.map +1 -1
- package/dist/lib/BaseBackend.d.ts +5 -3
- package/dist/lib/BaseBackend.d.ts.map +1 -1
- package/dist/manager.d.ts +2 -6
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +10 -28
- package/dist/react-native.d.ts +33 -4
- package/dist/react-native.d.ts.map +1 -1
- package/dist/react-native.js +400 -122
- package/dist/scheduleMicrotask.js +58 -50
- package/package.json +13 -11
- package/swift/Package.swift +36 -0
- package/swift/README.md +438 -0
- package/swift/Sources/NipworkerSwift/ArrayBufferReader.swift +136 -0
- package/swift/Sources/NipworkerSwift/AuthSession.swift +24 -0
- package/swift/Sources/NipworkerSwift/FFI.swift +94 -0
- package/swift/Sources/NipworkerSwift/FlatBufferHelpers.swift +273 -0
- package/swift/Sources/NipworkerSwift/Generated/message_generated.swift +6530 -0
- package/swift/Sources/NipworkerSwift/Hooks.swift +300 -0
- package/swift/Sources/NipworkerSwift/Models.swift +156 -0
- package/swift/Sources/NipworkerSwift/NostrManager.swift +594 -0
- package/swift/Sources/NipworkerSwift/PublishTracker.swift +40 -0
- package/swift/Sources/NipworkerSwift/Subscription.swift +44 -0
- package/swift/Sources/NipworkerSwift/WorkerMessageView.swift +145 -0
- package/dist/NativeBackend.d.ts +0 -53
- package/dist/NativeBackend.d.ts.map +0 -1
- package/dist/NativeBackend.js +0 -464
- package/dist/native.d.ts +0 -29
- package/dist/native.d.ts.map +0 -1
- package/dist/native.js +0 -273
|
@@ -4,15 +4,220 @@ import android.content.Context
|
|
|
4
4
|
import com.facebook.react.bridge.Arguments
|
|
5
5
|
import com.facebook.react.bridge.ReadableArray
|
|
6
6
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
7
|
+
import com.facebook.react.bridge.ReactContextBaseJavaModule
|
|
7
8
|
import com.facebook.react.bridge.ReactMethod
|
|
8
9
|
import com.facebook.react.module.annotations.ReactModule
|
|
9
10
|
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
11
|
+
import com.facebook.react.turbomodule.core.interfaces.TurboModule
|
|
12
|
+
import java.nio.ByteBuffer
|
|
13
|
+
import java.nio.ByteOrder
|
|
10
14
|
import java.util.concurrent.atomic.AtomicLong
|
|
15
|
+
import nostr.fb.WorkerMessage
|
|
16
|
+
|
|
17
|
+
typealias NipworkerRuntimeListener = (ByteArray) -> Unit
|
|
18
|
+
|
|
19
|
+
object NipworkerRuntime {
|
|
20
|
+
private const val STORAGE_NAME = "nipworker_storage"
|
|
21
|
+
private val nextUserdata = AtomicLong(1L)
|
|
22
|
+
private val listeners = LinkedHashSet<NipworkerRuntimeListener>()
|
|
23
|
+
private val keyedListeners = LinkedHashMap<String, LinkedHashSet<NipworkerRuntimeListener>>()
|
|
24
|
+
|
|
25
|
+
@Volatile
|
|
26
|
+
private var sharedHandle: Long = 0L
|
|
27
|
+
|
|
28
|
+
@Volatile
|
|
29
|
+
private var sharedUserdata: Long = 0L
|
|
30
|
+
|
|
31
|
+
val handle: Long
|
|
32
|
+
get() = sharedHandle
|
|
33
|
+
|
|
34
|
+
fun addListener(listener: NipworkerRuntimeListener): () -> Unit {
|
|
35
|
+
synchronized(this) {
|
|
36
|
+
listeners.add(listener)
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
synchronized(this) {
|
|
40
|
+
listeners.remove(listener)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
fun addListener(id: String, listener: NipworkerRuntimeListener): () -> Unit {
|
|
46
|
+
synchronized(this) {
|
|
47
|
+
keyedListeners.getOrPut(id) { LinkedHashSet() }.add(listener)
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
synchronized(this) {
|
|
51
|
+
val listenersForId = keyedListeners[id]
|
|
52
|
+
if (listenersForId != null) {
|
|
53
|
+
listenersForId.remove(listener)
|
|
54
|
+
if (listenersForId.isEmpty()) {
|
|
55
|
+
keyedListeners.remove(id)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
fun init(context: Context, defaultRelays: ReadableArray? = null, indexerRelays: ReadableArray? = null): Long {
|
|
63
|
+
synchronized(this) {
|
|
64
|
+
if (sharedHandle == 0L) {
|
|
65
|
+
sharedUserdata = nextUserdata.getAndIncrement()
|
|
66
|
+
val cacheDir = context.filesDir.resolve("nipworker")
|
|
67
|
+
sharedHandle = NipworkerReactNativeModule.nipworkerInitWithConfig(
|
|
68
|
+
sharedUserdata,
|
|
69
|
+
cacheDir.absolutePath,
|
|
70
|
+
readableArrayToCsv(defaultRelays),
|
|
71
|
+
readableArrayToCsv(indexerRelays)
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
return sharedHandle
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
fun handleMessage(bytes: ByteArray) {
|
|
79
|
+
val handle = sharedHandle
|
|
80
|
+
if (handle != 0L) {
|
|
81
|
+
NipworkerReactNativeModule.nipworkerHandleMessage(handle, bytes)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
fun subscribe(message: ByteArray, subId: String): ByteBuffer? {
|
|
86
|
+
val handle = sharedHandle
|
|
87
|
+
if (handle == 0L) return null
|
|
88
|
+
retainSubscriptionBuffer(subId)?.let { return it }
|
|
89
|
+
return NipworkerReactNativeModule.nativeSubscribeMessage(handle, message, subId)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
fun publish(message: ByteArray, publishId: String): ByteBuffer? {
|
|
93
|
+
val handle = sharedHandle
|
|
94
|
+
return if (handle == 0L) null else NipworkerReactNativeModule.nativePublishMessage(handle, message, publishId)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
fun setPrivateKey(secret: String) {
|
|
98
|
+
val handle = sharedHandle
|
|
99
|
+
if (handle != 0L) {
|
|
100
|
+
NipworkerReactNativeModule.nipworkerSetPrivateKey(handle, secret)
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
fun wake() {
|
|
105
|
+
val handle = sharedHandle
|
|
106
|
+
if (handle != 0L) {
|
|
107
|
+
NipworkerReactNativeModule.nipworkerWake(handle)
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
fun registerSubscription(subId: String, bufferSize: Int): Boolean {
|
|
112
|
+
val handle = sharedHandle
|
|
113
|
+
return handle != 0L && NipworkerReactNativeModule.nativeRegisterSubscription(handle, subId, bufferSize)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
fun registerPublishBuffer(publishId: String, bufferSize: Int): Boolean {
|
|
117
|
+
val handle = sharedHandle
|
|
118
|
+
return handle != 0L && NipworkerReactNativeModule.nativeRegisterPublishBuffer(handle, publishId, bufferSize)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
fun retainSubscription(subId: String): Boolean {
|
|
122
|
+
val handle = sharedHandle
|
|
123
|
+
return handle != 0L && NipworkerReactNativeModule.nativeRetainSubscription(handle, subId)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
fun retainSubscriptionBuffer(subId: String): ByteBuffer? {
|
|
127
|
+
val handle = sharedHandle
|
|
128
|
+
if (handle == 0L || !NipworkerReactNativeModule.nativeRetainSubscription(handle, subId)) {
|
|
129
|
+
return null
|
|
130
|
+
}
|
|
131
|
+
return NipworkerReactNativeModule.nativeGetSubscriptionBuffer(handle, subId)
|
|
132
|
+
?: run {
|
|
133
|
+
NipworkerReactNativeModule.nativeReleaseSubscription(handle, subId)
|
|
134
|
+
null
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
fun releaseSubscription(subId: String) {
|
|
139
|
+
val handle = sharedHandle
|
|
140
|
+
if (handle != 0L) {
|
|
141
|
+
NipworkerReactNativeModule.nativeReleaseSubscription(handle, subId)
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
fun subscriptionBuffer(subId: String): ByteBuffer? {
|
|
146
|
+
val handle = sharedHandle
|
|
147
|
+
return if (handle == 0L) null else NipworkerReactNativeModule.nativeGetSubscriptionBuffer(handle, subId)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
fun deinit() {
|
|
151
|
+
synchronized(this) {
|
|
152
|
+
if (sharedHandle != 0L) {
|
|
153
|
+
NipworkerReactNativeModule.nipworkerDeinit(sharedHandle)
|
|
154
|
+
sharedHandle = 0L
|
|
155
|
+
sharedUserdata = 0L
|
|
156
|
+
}
|
|
157
|
+
listeners.clear()
|
|
158
|
+
keyedListeners.clear()
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
internal fun dispatch(data: ByteArray) {
|
|
163
|
+
val subId = readSubId(data)
|
|
164
|
+
val (globalSnapshot, keyedSnapshot) = synchronized(this) {
|
|
165
|
+
listeners.toList() to if (subId == null) {
|
|
166
|
+
emptyList<NipworkerRuntimeListener>()
|
|
167
|
+
} else {
|
|
168
|
+
keyedListeners[subId].orEmpty().toList()
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
for (listener in globalSnapshot) {
|
|
172
|
+
listener(data)
|
|
173
|
+
}
|
|
174
|
+
for (listener in keyedSnapshot) {
|
|
175
|
+
listener(data)
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private fun readSubId(data: ByteArray): String? {
|
|
180
|
+
decodeRouteWakeFrame(data)?.let { return it }
|
|
181
|
+
return runCatching {
|
|
182
|
+
val buffer = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN)
|
|
183
|
+
WorkerMessage.getRootAsWorkerMessage(buffer).subId()
|
|
184
|
+
}.getOrNull()
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
private fun decodeRouteWakeFrame(data: ByteArray): String? {
|
|
188
|
+
if (data.size < 8) return null
|
|
189
|
+
if (
|
|
190
|
+
data[0] != 0x4e.toByte() ||
|
|
191
|
+
data[1] != 0x57.toByte() ||
|
|
192
|
+
data[2] != 0x52.toByte() ||
|
|
193
|
+
data[3] != 0x31.toByte()
|
|
194
|
+
) {
|
|
195
|
+
return null
|
|
196
|
+
}
|
|
197
|
+
val subIdLength = ByteBuffer.wrap(data, 4, 4).order(ByteOrder.LITTLE_ENDIAN).int
|
|
198
|
+
if (subIdLength <= 0 || subIdLength != data.size - 8) return null
|
|
199
|
+
return data.decodeToString(8, data.size)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
private fun readableArrayToCsv(values: ReadableArray?): String {
|
|
203
|
+
if (values == null) {
|
|
204
|
+
return ""
|
|
205
|
+
}
|
|
206
|
+
val relays = mutableListOf<String>()
|
|
207
|
+
for (i in 0 until values.size()) {
|
|
208
|
+
val relay = values.getString(i)?.trim()
|
|
209
|
+
if (!relay.isNullOrEmpty() && !relay.contains(",")) {
|
|
210
|
+
relays.add(relay)
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return relays.joinToString(",")
|
|
214
|
+
}
|
|
215
|
+
}
|
|
11
216
|
|
|
12
217
|
@ReactModule(name = NipworkerReactNativeModule.NAME)
|
|
13
218
|
class NipworkerReactNativeModule(
|
|
14
219
|
private val reactContext: ReactApplicationContext
|
|
15
|
-
) :
|
|
220
|
+
) : ReactContextBaseJavaModule(reactContext), TurboModule {
|
|
16
221
|
companion object {
|
|
17
222
|
const val NAME = "NipworkerReactNativeModule"
|
|
18
223
|
private const val EVENT_NAME = "NipworkerEvent"
|
|
@@ -23,38 +228,9 @@ class NipworkerReactNativeModule(
|
|
|
23
228
|
System.loadLibrary("nipworker_react_native")
|
|
24
229
|
}
|
|
25
230
|
|
|
26
|
-
private val nextUserdata = AtomicLong(1L)
|
|
27
|
-
|
|
28
|
-
@Volatile
|
|
29
|
-
private var sharedHandle: Long = 0L
|
|
30
|
-
|
|
31
|
-
@Volatile
|
|
32
|
-
private var sharedUserdata: Long = 0L
|
|
33
|
-
|
|
34
|
-
@Volatile
|
|
35
|
-
private var activeModule: NipworkerReactNativeModule? = null
|
|
36
|
-
|
|
37
231
|
@JvmStatic
|
|
38
232
|
fun onNativeData(userdata: Long, data: ByteArray) {
|
|
39
|
-
|
|
40
|
-
if (nativeIsByteRuntimeInstalled() && nativeQueueData(data)) {
|
|
41
|
-
val payload = Arguments.createMap().apply {
|
|
42
|
-
putInt("v", 1)
|
|
43
|
-
putString("encoding", "queued")
|
|
44
|
-
}
|
|
45
|
-
module.emitData(payload)
|
|
46
|
-
return
|
|
47
|
-
}
|
|
48
|
-
val bytes = Arguments.createArray()
|
|
49
|
-
for (byte in data) {
|
|
50
|
-
bytes.pushInt(byte.toInt() and 0xff)
|
|
51
|
-
}
|
|
52
|
-
val payload = Arguments.createMap().apply {
|
|
53
|
-
putInt("v", 1)
|
|
54
|
-
putString("encoding", "bytes")
|
|
55
|
-
putArray("data", bytes)
|
|
56
|
-
}
|
|
57
|
-
module.emitData(payload)
|
|
233
|
+
NipworkerRuntime.dispatch(data)
|
|
58
234
|
}
|
|
59
235
|
|
|
60
236
|
@JvmStatic
|
|
@@ -94,8 +270,33 @@ class NipworkerReactNativeModule(
|
|
|
94
270
|
|
|
95
271
|
@JvmStatic
|
|
96
272
|
external fun nativeQueueData(bytes: ByteArray): Boolean
|
|
273
|
+
|
|
274
|
+
@JvmStatic
|
|
275
|
+
external fun nativeSubscribeMessage(handle: Long, bytes: ByteArray, subId: String): ByteBuffer?
|
|
276
|
+
|
|
277
|
+
@JvmStatic
|
|
278
|
+
external fun nativePublishMessage(handle: Long, bytes: ByteArray, publishId: String): ByteBuffer?
|
|
279
|
+
|
|
280
|
+
@JvmStatic
|
|
281
|
+
external fun nativeRegisterSubscription(handle: Long, subId: String, bufferSize: Int): Boolean
|
|
282
|
+
|
|
283
|
+
@JvmStatic
|
|
284
|
+
external fun nativeRegisterPublishBuffer(handle: Long, publishId: String, bufferSize: Int): Boolean
|
|
285
|
+
|
|
286
|
+
@JvmStatic
|
|
287
|
+
external fun nativeRetainSubscription(handle: Long, subId: String): Boolean
|
|
288
|
+
|
|
289
|
+
@JvmStatic
|
|
290
|
+
external fun nativeReleaseSubscription(handle: Long, subId: String)
|
|
291
|
+
|
|
292
|
+
@JvmStatic
|
|
293
|
+
external fun nativeGetSubscriptionBuffer(handle: Long, subId: String): ByteBuffer?
|
|
97
294
|
}
|
|
98
295
|
|
|
296
|
+
private var removeRuntimeListener: (() -> Unit)? = null
|
|
297
|
+
|
|
298
|
+
override fun getName(): String = NAME
|
|
299
|
+
|
|
99
300
|
private val storage by lazy {
|
|
100
301
|
reactContext.getSharedPreferences(STORAGE_NAME, Context.MODE_PRIVATE)
|
|
101
302
|
}
|
|
@@ -110,102 +311,95 @@ class NipworkerReactNativeModule(
|
|
|
110
311
|
// Required by NativeEventEmitter on Android legacy paths.
|
|
111
312
|
}
|
|
112
313
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
val relays = mutableListOf<String>()
|
|
118
|
-
for (i in 0 until values.size()) {
|
|
119
|
-
val relay = values.getString(i)?.trim()
|
|
120
|
-
if (!relay.isNullOrEmpty() && !relay.contains(",")) {
|
|
121
|
-
relays.add(relay)
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
return relays.joinToString(",")
|
|
314
|
+
@ReactMethod
|
|
315
|
+
fun initEngine(defaultRelays: ReadableArray, indexerRelays: ReadableArray) {
|
|
316
|
+
ensureRuntimeListener()
|
|
317
|
+
NipworkerRuntime.init(reactContext, defaultRelays, indexerRelays)
|
|
125
318
|
}
|
|
126
319
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
sharedHandle = nipworkerInitWithConfig(
|
|
133
|
-
sharedUserdata,
|
|
134
|
-
cacheDir.absolutePath,
|
|
135
|
-
readableArrayToCsv(defaultRelays),
|
|
136
|
-
readableArrayToCsv(indexerRelays)
|
|
137
|
-
)
|
|
320
|
+
private fun ensureRuntimeListener() {
|
|
321
|
+
if (removeRuntimeListener == null) {
|
|
322
|
+
removeRuntimeListener = NipworkerRuntime.addListener { data ->
|
|
323
|
+
emitRuntimeData(data)
|
|
324
|
+
}
|
|
138
325
|
}
|
|
139
326
|
}
|
|
140
327
|
|
|
141
328
|
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
142
|
-
|
|
329
|
+
fun installByteRuntime(): Boolean {
|
|
143
330
|
initEngine(Arguments.createArray(), Arguments.createArray())
|
|
144
331
|
val runtimePtr = reactContext.javaScriptContextHolder?.get() ?: 0L
|
|
145
|
-
|
|
332
|
+
val handle = NipworkerRuntime.handle
|
|
333
|
+
if (runtimePtr == 0L || handle == 0L) {
|
|
146
334
|
return false
|
|
147
335
|
}
|
|
148
|
-
return nativeInstallByteRuntime(runtimePtr,
|
|
336
|
+
return nativeInstallByteRuntime(runtimePtr, handle)
|
|
149
337
|
}
|
|
150
338
|
|
|
151
339
|
@ReactMethod
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
data[i] = (bytes.getInt(i) and 0xff).toByte()
|
|
157
|
-
}
|
|
158
|
-
nipworkerHandleMessage(sharedHandle, data)
|
|
340
|
+
fun handleMessage(bytes: ReadableArray) {
|
|
341
|
+
val data = ByteArray(bytes.size())
|
|
342
|
+
for (i in 0 until bytes.size()) {
|
|
343
|
+
data[i] = (bytes.getInt(i) and 0xff).toByte()
|
|
159
344
|
}
|
|
345
|
+
NipworkerRuntime.handleMessage(data)
|
|
160
346
|
}
|
|
161
347
|
|
|
162
348
|
@ReactMethod
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
nipworkerWake(sharedHandle)
|
|
166
|
-
}
|
|
349
|
+
fun wake() {
|
|
350
|
+
NipworkerRuntime.wake()
|
|
167
351
|
}
|
|
168
352
|
|
|
169
353
|
@ReactMethod
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
nipworkerSetPrivateKey(sharedHandle, secret)
|
|
173
|
-
}
|
|
354
|
+
fun setPrivateKey(secret: String) {
|
|
355
|
+
NipworkerRuntime.setPrivateKey(secret)
|
|
174
356
|
}
|
|
175
357
|
|
|
176
358
|
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
177
|
-
|
|
359
|
+
fun getStorageItem(key: String): String? {
|
|
178
360
|
return storage.getString(key, null)
|
|
179
361
|
}
|
|
180
362
|
|
|
181
363
|
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
182
|
-
|
|
364
|
+
fun setStorageItem(key: String, value: String): Boolean {
|
|
183
365
|
return storage.edit().putString(key, value).commit()
|
|
184
366
|
}
|
|
185
367
|
|
|
186
368
|
@ReactMethod(isBlockingSynchronousMethod = true)
|
|
187
|
-
|
|
369
|
+
fun removeStorageItem(key: String): Boolean {
|
|
188
370
|
return storage.edit().remove(key).commit()
|
|
189
371
|
}
|
|
190
372
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
373
|
+
@ReactMethod
|
|
374
|
+
fun deinitEngine() {
|
|
375
|
+
removeRuntimeListener?.invoke()
|
|
376
|
+
removeRuntimeListener = null
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
private fun emitRuntimeData(data: ByteArray) {
|
|
380
|
+
if (nativeIsByteRuntimeInstalled() && nativeQueueData(data)) {
|
|
381
|
+
val payload = Arguments.createMap().apply {
|
|
382
|
+
putInt("v", 1)
|
|
383
|
+
putString("encoding", "queued")
|
|
384
|
+
}
|
|
385
|
+
emitData(payload)
|
|
386
|
+
return
|
|
196
387
|
}
|
|
197
|
-
|
|
198
|
-
|
|
388
|
+
val bytes = Arguments.createArray()
|
|
389
|
+
for (byte in data) {
|
|
390
|
+
bytes.pushInt(byte.toInt() and 0xff)
|
|
199
391
|
}
|
|
392
|
+
val payload = Arguments.createMap().apply {
|
|
393
|
+
putInt("v", 1)
|
|
394
|
+
putString("encoding", "bytes")
|
|
395
|
+
putArray("data", bytes)
|
|
396
|
+
}
|
|
397
|
+
emitData(payload)
|
|
200
398
|
}
|
|
201
399
|
|
|
202
400
|
private fun emitData(payload: com.facebook.react.bridge.WritableMap) {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
reactContext
|
|
207
|
-
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
208
|
-
.emit(EVENT_NAME, payload)
|
|
209
|
-
}
|
|
401
|
+
reactContext
|
|
402
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
403
|
+
.emit(EVENT_NAME, payload)
|
|
210
404
|
}
|
|
211
405
|
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// automatically generated by the FlatBuffers compiler, do not modify
|
|
2
|
+
|
|
3
|
+
package nostr.fb;
|
|
4
|
+
|
|
5
|
+
import com.google.flatbuffers.BaseVector;
|
|
6
|
+
import com.google.flatbuffers.BooleanVector;
|
|
7
|
+
import com.google.flatbuffers.ByteVector;
|
|
8
|
+
import com.google.flatbuffers.Constants;
|
|
9
|
+
import com.google.flatbuffers.DoubleVector;
|
|
10
|
+
import com.google.flatbuffers.FlatBufferBuilder;
|
|
11
|
+
import com.google.flatbuffers.FloatVector;
|
|
12
|
+
import com.google.flatbuffers.IntVector;
|
|
13
|
+
import com.google.flatbuffers.LongVector;
|
|
14
|
+
import com.google.flatbuffers.ShortVector;
|
|
15
|
+
import com.google.flatbuffers.StringVector;
|
|
16
|
+
import com.google.flatbuffers.Struct;
|
|
17
|
+
import com.google.flatbuffers.UnionVector;
|
|
18
|
+
import java.nio.ByteBuffer;
|
|
19
|
+
import java.nio.ByteOrder;
|
|
20
|
+
|
|
21
|
+
@SuppressWarnings("unused")
|
|
22
|
+
public final class AddressPointer extends com.google.flatbuffers.Table {
|
|
23
|
+
public static void ValidateVersion() { Constants.FLATBUFFERS_25_2_10(); }
|
|
24
|
+
public static AddressPointer getRootAsAddressPointer(ByteBuffer _bb) { return getRootAsAddressPointer(_bb, new AddressPointer()); }
|
|
25
|
+
public static AddressPointer getRootAsAddressPointer(ByteBuffer _bb, AddressPointer obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
|
|
26
|
+
public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
|
|
27
|
+
public AddressPointer __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
|
|
28
|
+
|
|
29
|
+
public long kind() { int o = __offset(4); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
|
|
30
|
+
public String pubkey() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
|
|
31
|
+
public ByteBuffer pubkeyAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
|
|
32
|
+
public ByteBuffer pubkeyInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
|
|
33
|
+
public String d() { int o = __offset(8); return o != 0 ? __string(o + bb_pos) : null; }
|
|
34
|
+
public ByteBuffer dAsByteBuffer() { return __vector_as_bytebuffer(8, 1); }
|
|
35
|
+
public ByteBuffer dInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 8, 1); }
|
|
36
|
+
public String relays(int j) { int o = __offset(10); return o != 0 ? __string(__vector(o) + j * 4) : null; }
|
|
37
|
+
public int relaysLength() { int o = __offset(10); return o != 0 ? __vector_len(o) : 0; }
|
|
38
|
+
public StringVector relaysVector() { return relaysVector(new StringVector()); }
|
|
39
|
+
public StringVector relaysVector(StringVector obj) { int o = __offset(10); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
|
|
40
|
+
|
|
41
|
+
public static int createAddressPointer(FlatBufferBuilder builder,
|
|
42
|
+
long kind,
|
|
43
|
+
int pubkeyOffset,
|
|
44
|
+
int dOffset,
|
|
45
|
+
int relaysOffset) {
|
|
46
|
+
builder.startTable(4);
|
|
47
|
+
AddressPointer.addKind(builder, kind);
|
|
48
|
+
AddressPointer.addRelays(builder, relaysOffset);
|
|
49
|
+
AddressPointer.addD(builder, dOffset);
|
|
50
|
+
AddressPointer.addPubkey(builder, pubkeyOffset);
|
|
51
|
+
return AddressPointer.endAddressPointer(builder);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public static void startAddressPointer(FlatBufferBuilder builder) { builder.startTable(4); }
|
|
55
|
+
public static void addKind(FlatBufferBuilder builder, long kind) { builder.addLong(0, kind, 0L); }
|
|
56
|
+
public static void addPubkey(FlatBufferBuilder builder, int pubkeyOffset) { builder.addOffset(1, pubkeyOffset, 0); }
|
|
57
|
+
public static void addD(FlatBufferBuilder builder, int dOffset) { builder.addOffset(2, dOffset, 0); }
|
|
58
|
+
public static void addRelays(FlatBufferBuilder builder, int relaysOffset) { builder.addOffset(3, relaysOffset, 0); }
|
|
59
|
+
public static int createRelaysVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
|
|
60
|
+
public static void startRelaysVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
|
|
61
|
+
public static int endAddressPointer(FlatBufferBuilder builder) {
|
|
62
|
+
int o = builder.endTable();
|
|
63
|
+
builder.required(o, 6); // pubkey
|
|
64
|
+
builder.required(o, 8); // d
|
|
65
|
+
return o;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public static final class Vector extends BaseVector {
|
|
69
|
+
public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
|
|
70
|
+
|
|
71
|
+
public AddressPointer get(int j) { return get(new AddressPointer(), j); }
|
|
72
|
+
public AddressPointer get(AddressPointer obj, int j) { return obj.__assign(__indirect(__element(j), bb), bb); }
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// automatically generated by the FlatBuffers compiler, do not modify
|
|
2
|
+
|
|
3
|
+
package nostr.fb;
|
|
4
|
+
|
|
5
|
+
import com.google.flatbuffers.BaseVector;
|
|
6
|
+
import com.google.flatbuffers.BooleanVector;
|
|
7
|
+
import com.google.flatbuffers.ByteVector;
|
|
8
|
+
import com.google.flatbuffers.Constants;
|
|
9
|
+
import com.google.flatbuffers.DoubleVector;
|
|
10
|
+
import com.google.flatbuffers.FlatBufferBuilder;
|
|
11
|
+
import com.google.flatbuffers.FloatVector;
|
|
12
|
+
import com.google.flatbuffers.IntVector;
|
|
13
|
+
import com.google.flatbuffers.LongVector;
|
|
14
|
+
import com.google.flatbuffers.ShortVector;
|
|
15
|
+
import com.google.flatbuffers.StringVector;
|
|
16
|
+
import com.google.flatbuffers.Struct;
|
|
17
|
+
import com.google.flatbuffers.UnionVector;
|
|
18
|
+
import java.nio.ByteBuffer;
|
|
19
|
+
import java.nio.ByteOrder;
|
|
20
|
+
|
|
21
|
+
@SuppressWarnings("unused")
|
|
22
|
+
public final class ArticleBlock extends com.google.flatbuffers.Table {
|
|
23
|
+
public static void ValidateVersion() { Constants.FLATBUFFERS_25_2_10(); }
|
|
24
|
+
public static ArticleBlock getRootAsArticleBlock(ByteBuffer _bb) { return getRootAsArticleBlock(_bb, new ArticleBlock()); }
|
|
25
|
+
public static ArticleBlock getRootAsArticleBlock(ByteBuffer _bb, ArticleBlock obj) { _bb.order(ByteOrder.LITTLE_ENDIAN); return (obj.__assign(_bb.getInt(_bb.position()) + _bb.position(), _bb)); }
|
|
26
|
+
public void __init(int _i, ByteBuffer _bb) { __reset(_i, _bb); }
|
|
27
|
+
public ArticleBlock __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; }
|
|
28
|
+
|
|
29
|
+
public byte type() { int o = __offset(4); return o != 0 ? bb.get(o + bb_pos) : 0; }
|
|
30
|
+
public String text() { int o = __offset(6); return o != 0 ? __string(o + bb_pos) : null; }
|
|
31
|
+
public ByteBuffer textAsByteBuffer() { return __vector_as_bytebuffer(6, 1); }
|
|
32
|
+
public ByteBuffer textInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 6, 1); }
|
|
33
|
+
public String url() { int o = __offset(8); return o != 0 ? __string(o + bb_pos) : null; }
|
|
34
|
+
public ByteBuffer urlAsByteBuffer() { return __vector_as_bytebuffer(8, 1); }
|
|
35
|
+
public ByteBuffer urlInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 8, 1); }
|
|
36
|
+
public String language() { int o = __offset(10); return o != 0 ? __string(o + bb_pos) : null; }
|
|
37
|
+
public ByteBuffer languageAsByteBuffer() { return __vector_as_bytebuffer(10, 1); }
|
|
38
|
+
public ByteBuffer languageInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 10, 1); }
|
|
39
|
+
public int depth() { int o = __offset(12); return o != 0 ? bb.get(o + bb_pos) & 0xFF : 0; }
|
|
40
|
+
public boolean ordered() { int o = __offset(14); return o != 0 ? 0!=bb.get(o + bb_pos) : false; }
|
|
41
|
+
public long start() { int o = __offset(16); return o != 0 ? bb.getLong(o + bb_pos) : 0L; }
|
|
42
|
+
public nostr.fb.ArticleInline inlines(int j) { return inlines(new nostr.fb.ArticleInline(), j); }
|
|
43
|
+
public nostr.fb.ArticleInline inlines(nostr.fb.ArticleInline obj, int j) { int o = __offset(18); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; }
|
|
44
|
+
public int inlinesLength() { int o = __offset(18); return o != 0 ? __vector_len(o) : 0; }
|
|
45
|
+
public nostr.fb.ArticleInline.Vector inlinesVector() { return inlinesVector(new nostr.fb.ArticleInline.Vector()); }
|
|
46
|
+
public nostr.fb.ArticleInline.Vector inlinesVector(nostr.fb.ArticleInline.Vector obj) { int o = __offset(18); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
|
|
47
|
+
public nostr.fb.ArticleBlock children(int j) { return children(new nostr.fb.ArticleBlock(), j); }
|
|
48
|
+
public nostr.fb.ArticleBlock children(nostr.fb.ArticleBlock obj, int j) { int o = __offset(20); return o != 0 ? obj.__assign(__indirect(__vector(o) + j * 4), bb) : null; }
|
|
49
|
+
public int childrenLength() { int o = __offset(20); return o != 0 ? __vector_len(o) : 0; }
|
|
50
|
+
public nostr.fb.ArticleBlock.Vector childrenVector() { return childrenVector(new nostr.fb.ArticleBlock.Vector()); }
|
|
51
|
+
public nostr.fb.ArticleBlock.Vector childrenVector(nostr.fb.ArticleBlock.Vector obj) { int o = __offset(20); return o != 0 ? obj.__assign(__vector(o), 4, bb) : null; }
|
|
52
|
+
|
|
53
|
+
public static int createArticleBlock(FlatBufferBuilder builder,
|
|
54
|
+
byte type,
|
|
55
|
+
int textOffset,
|
|
56
|
+
int urlOffset,
|
|
57
|
+
int languageOffset,
|
|
58
|
+
int depth,
|
|
59
|
+
boolean ordered,
|
|
60
|
+
long start,
|
|
61
|
+
int inlinesOffset,
|
|
62
|
+
int childrenOffset) {
|
|
63
|
+
builder.startTable(9);
|
|
64
|
+
ArticleBlock.addStart(builder, start);
|
|
65
|
+
ArticleBlock.addChildren(builder, childrenOffset);
|
|
66
|
+
ArticleBlock.addInlines(builder, inlinesOffset);
|
|
67
|
+
ArticleBlock.addLanguage(builder, languageOffset);
|
|
68
|
+
ArticleBlock.addUrl(builder, urlOffset);
|
|
69
|
+
ArticleBlock.addText(builder, textOffset);
|
|
70
|
+
ArticleBlock.addOrdered(builder, ordered);
|
|
71
|
+
ArticleBlock.addDepth(builder, depth);
|
|
72
|
+
ArticleBlock.addType(builder, type);
|
|
73
|
+
return ArticleBlock.endArticleBlock(builder);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public static void startArticleBlock(FlatBufferBuilder builder) { builder.startTable(9); }
|
|
77
|
+
public static void addType(FlatBufferBuilder builder, byte type) { builder.addByte(0, type, 0); }
|
|
78
|
+
public static void addText(FlatBufferBuilder builder, int textOffset) { builder.addOffset(1, textOffset, 0); }
|
|
79
|
+
public static void addUrl(FlatBufferBuilder builder, int urlOffset) { builder.addOffset(2, urlOffset, 0); }
|
|
80
|
+
public static void addLanguage(FlatBufferBuilder builder, int languageOffset) { builder.addOffset(3, languageOffset, 0); }
|
|
81
|
+
public static void addDepth(FlatBufferBuilder builder, int depth) { builder.addByte(4, (byte) depth, (byte) 0); }
|
|
82
|
+
public static void addOrdered(FlatBufferBuilder builder, boolean ordered) { builder.addBoolean(5, ordered, false); }
|
|
83
|
+
public static void addStart(FlatBufferBuilder builder, long start) { builder.addLong(6, start, 0L); }
|
|
84
|
+
public static void addInlines(FlatBufferBuilder builder, int inlinesOffset) { builder.addOffset(7, inlinesOffset, 0); }
|
|
85
|
+
public static int createInlinesVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
|
|
86
|
+
public static void startInlinesVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
|
|
87
|
+
public static void addChildren(FlatBufferBuilder builder, int childrenOffset) { builder.addOffset(8, childrenOffset, 0); }
|
|
88
|
+
public static int createChildrenVector(FlatBufferBuilder builder, int[] data) { builder.startVector(4, data.length, 4); for (int i = data.length - 1; i >= 0; i--) builder.addOffset(data[i]); return builder.endVector(); }
|
|
89
|
+
public static void startChildrenVector(FlatBufferBuilder builder, int numElems) { builder.startVector(4, numElems, 4); }
|
|
90
|
+
public static int endArticleBlock(FlatBufferBuilder builder) {
|
|
91
|
+
int o = builder.endTable();
|
|
92
|
+
return o;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
public static final class Vector extends BaseVector {
|
|
96
|
+
public Vector __assign(int _vector, int _element_size, ByteBuffer _bb) { __reset(_vector, _element_size, _bb); return this; }
|
|
97
|
+
|
|
98
|
+
public ArticleBlock get(int j) { return get(new ArticleBlock(), j); }
|
|
99
|
+
public ArticleBlock get(ArticleBlock obj, int j) { return obj.__assign(__indirect(__element(j), bb), bb); }
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// automatically generated by the FlatBuffers compiler, do not modify
|
|
2
|
+
|
|
3
|
+
package nostr.fb;
|
|
4
|
+
|
|
5
|
+
@SuppressWarnings("unused")
|
|
6
|
+
public final class ArticleBlockType {
|
|
7
|
+
private ArticleBlockType() { }
|
|
8
|
+
public static final byte Paragraph = 0;
|
|
9
|
+
public static final byte Heading = 1;
|
|
10
|
+
public static final byte Blockquote = 2;
|
|
11
|
+
public static final byte List = 3;
|
|
12
|
+
public static final byte ListItem = 4;
|
|
13
|
+
public static final byte CodeBlock = 5;
|
|
14
|
+
public static final byte Image = 6;
|
|
15
|
+
public static final byte Video = 7;
|
|
16
|
+
public static final byte ThematicBreak = 8;
|
|
17
|
+
public static final byte Html = 9;
|
|
18
|
+
|
|
19
|
+
public static final String[] names = { "Paragraph", "Heading", "Blockquote", "List", "ListItem", "CodeBlock", "Image", "Video", "ThematicBreak", "Html", };
|
|
20
|
+
|
|
21
|
+
public static String name(int e) { return names[e]; }
|
|
22
|
+
}
|
|
23
|
+
|