@synonymdev/react-native-pubky 0.8.0 → 0.9.0
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 +42 -3
- package/android/src/main/java/com/pubky/PubkyModule.kt +363 -272
- package/android/src/main/java/uniffi/pubkymobile/pubkymobile.kt +557 -127
- package/android/src/main/jniLibs/arm64-v8a/libpubkymobile.so +0 -0
- package/android/src/main/jniLibs/armeabi-v7a/libpubkymobile.so +0 -0
- package/android/src/main/jniLibs/x86/libpubkymobile.so +0 -0
- package/android/src/main/jniLibs/x86_64/libpubkymobile.so +0 -0
- package/ios/Frameworks/PubkyMobile.xcframework/ios-arm64/Headers/pubkymobileFFI.h +28 -0
- package/ios/Frameworks/PubkyMobile.xcframework/ios-arm64/libpubkymobile.a +0 -0
- package/ios/Frameworks/PubkyMobile.xcframework/ios-arm64-simulator/Headers/pubkymobileFFI.h +28 -0
- package/ios/Frameworks/PubkyMobile.xcframework/ios-arm64-simulator/libpubkymobile.a +0 -0
- package/ios/Pubky-Bridging-Header.h +1 -0
- package/ios/Pubky.mm +16 -1
- package/ios/Pubky.swift +64 -1
- package/ios/pubkymobile.swift +284 -0
- package/lib/commonjs/index.js +45 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +42 -1
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/commonjs/src/index.d.ts +8 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -1
- package/lib/typescript/module/src/index.d.ts +8 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/index.tsx +54 -1
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -63,12 +63,18 @@ typedef struct RustCallStatus {
|
|
63
63
|
typedef void (*UniFfiRustFutureContinuation)(void * _Nonnull, int8_t);
|
64
64
|
|
65
65
|
// Scaffolding functions
|
66
|
+
void uniffi_pubkymobile_fn_free_eventnotifier(void*_Nonnull ptr, RustCallStatus *_Nonnull out_status
|
67
|
+
);
|
68
|
+
void uniffi_pubkymobile_fn_init_callback_eventlistener(ForeignCallback _Nonnull callback_stub, RustCallStatus *_Nonnull out_status
|
69
|
+
);
|
66
70
|
RustBuffer uniffi_pubkymobile_fn_func_auth(RustBuffer url, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
67
71
|
);
|
68
72
|
RustBuffer uniffi_pubkymobile_fn_func_create_recovery_file(RustBuffer secret_key, RustBuffer passphrase, RustCallStatus *_Nonnull out_status
|
69
73
|
);
|
70
74
|
RustBuffer uniffi_pubkymobile_fn_func_decrypt_recovery_file(RustBuffer recovery_file, RustBuffer passphrase, RustCallStatus *_Nonnull out_status
|
71
75
|
);
|
76
|
+
RustBuffer uniffi_pubkymobile_fn_func_delete_file(RustBuffer url, RustCallStatus *_Nonnull out_status
|
77
|
+
);
|
72
78
|
RustBuffer uniffi_pubkymobile_fn_func_generate_secret_key(RustCallStatus *_Nonnull out_status
|
73
79
|
|
74
80
|
);
|
@@ -85,11 +91,18 @@ RustBuffer uniffi_pubkymobile_fn_func_publish(RustBuffer record_name, RustBuffer
|
|
85
91
|
RustBuffer uniffi_pubkymobile_fn_func_publish_https(RustBuffer record_name, RustBuffer target, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
86
92
|
);
|
87
93
|
RustBuffer uniffi_pubkymobile_fn_func_put(RustBuffer url, RustBuffer content, RustCallStatus *_Nonnull out_status
|
94
|
+
);
|
95
|
+
void uniffi_pubkymobile_fn_func_remove_event_listener(RustCallStatus *_Nonnull out_status
|
96
|
+
|
88
97
|
);
|
89
98
|
RustBuffer uniffi_pubkymobile_fn_func_resolve(RustBuffer public_key, RustCallStatus *_Nonnull out_status
|
90
99
|
);
|
91
100
|
RustBuffer uniffi_pubkymobile_fn_func_resolve_https(RustBuffer public_key, RustCallStatus *_Nonnull out_status
|
92
101
|
);
|
102
|
+
RustBuffer uniffi_pubkymobile_fn_func_session(RustBuffer pubky, RustCallStatus *_Nonnull out_status
|
103
|
+
);
|
104
|
+
void uniffi_pubkymobile_fn_func_set_event_listener(uint64_t listener, RustCallStatus *_Nonnull out_status
|
105
|
+
);
|
93
106
|
RustBuffer uniffi_pubkymobile_fn_func_sign_in(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
94
107
|
);
|
95
108
|
RustBuffer uniffi_pubkymobile_fn_func_sign_out(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
@@ -218,6 +231,9 @@ uint16_t uniffi_pubkymobile_checksum_func_create_recovery_file(void
|
|
218
231
|
);
|
219
232
|
uint16_t uniffi_pubkymobile_checksum_func_decrypt_recovery_file(void
|
220
233
|
|
234
|
+
);
|
235
|
+
uint16_t uniffi_pubkymobile_checksum_func_delete_file(void
|
236
|
+
|
221
237
|
);
|
222
238
|
uint16_t uniffi_pubkymobile_checksum_func_generate_secret_key(void
|
223
239
|
|
@@ -242,12 +258,21 @@ uint16_t uniffi_pubkymobile_checksum_func_publish_https(void
|
|
242
258
|
);
|
243
259
|
uint16_t uniffi_pubkymobile_checksum_func_put(void
|
244
260
|
|
261
|
+
);
|
262
|
+
uint16_t uniffi_pubkymobile_checksum_func_remove_event_listener(void
|
263
|
+
|
245
264
|
);
|
246
265
|
uint16_t uniffi_pubkymobile_checksum_func_resolve(void
|
247
266
|
|
248
267
|
);
|
249
268
|
uint16_t uniffi_pubkymobile_checksum_func_resolve_https(void
|
250
269
|
|
270
|
+
);
|
271
|
+
uint16_t uniffi_pubkymobile_checksum_func_session(void
|
272
|
+
|
273
|
+
);
|
274
|
+
uint16_t uniffi_pubkymobile_checksum_func_set_event_listener(void
|
275
|
+
|
251
276
|
);
|
252
277
|
uint16_t uniffi_pubkymobile_checksum_func_sign_in(void
|
253
278
|
|
@@ -257,6 +282,9 @@ uint16_t uniffi_pubkymobile_checksum_func_sign_out(void
|
|
257
282
|
);
|
258
283
|
uint16_t uniffi_pubkymobile_checksum_func_sign_up(void
|
259
284
|
|
285
|
+
);
|
286
|
+
uint16_t uniffi_pubkymobile_checksum_method_eventlistener_on_event_occurred(void
|
287
|
+
|
260
288
|
);
|
261
289
|
uint32_t ffi_pubkymobile_uniffi_contract_version(void
|
262
290
|
|
Binary file
|
@@ -63,12 +63,18 @@ typedef struct RustCallStatus {
|
|
63
63
|
typedef void (*UniFfiRustFutureContinuation)(void * _Nonnull, int8_t);
|
64
64
|
|
65
65
|
// Scaffolding functions
|
66
|
+
void uniffi_pubkymobile_fn_free_eventnotifier(void*_Nonnull ptr, RustCallStatus *_Nonnull out_status
|
67
|
+
);
|
68
|
+
void uniffi_pubkymobile_fn_init_callback_eventlistener(ForeignCallback _Nonnull callback_stub, RustCallStatus *_Nonnull out_status
|
69
|
+
);
|
66
70
|
RustBuffer uniffi_pubkymobile_fn_func_auth(RustBuffer url, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
67
71
|
);
|
68
72
|
RustBuffer uniffi_pubkymobile_fn_func_create_recovery_file(RustBuffer secret_key, RustBuffer passphrase, RustCallStatus *_Nonnull out_status
|
69
73
|
);
|
70
74
|
RustBuffer uniffi_pubkymobile_fn_func_decrypt_recovery_file(RustBuffer recovery_file, RustBuffer passphrase, RustCallStatus *_Nonnull out_status
|
71
75
|
);
|
76
|
+
RustBuffer uniffi_pubkymobile_fn_func_delete_file(RustBuffer url, RustCallStatus *_Nonnull out_status
|
77
|
+
);
|
72
78
|
RustBuffer uniffi_pubkymobile_fn_func_generate_secret_key(RustCallStatus *_Nonnull out_status
|
73
79
|
|
74
80
|
);
|
@@ -85,11 +91,18 @@ RustBuffer uniffi_pubkymobile_fn_func_publish(RustBuffer record_name, RustBuffer
|
|
85
91
|
RustBuffer uniffi_pubkymobile_fn_func_publish_https(RustBuffer record_name, RustBuffer target, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
86
92
|
);
|
87
93
|
RustBuffer uniffi_pubkymobile_fn_func_put(RustBuffer url, RustBuffer content, RustCallStatus *_Nonnull out_status
|
94
|
+
);
|
95
|
+
void uniffi_pubkymobile_fn_func_remove_event_listener(RustCallStatus *_Nonnull out_status
|
96
|
+
|
88
97
|
);
|
89
98
|
RustBuffer uniffi_pubkymobile_fn_func_resolve(RustBuffer public_key, RustCallStatus *_Nonnull out_status
|
90
99
|
);
|
91
100
|
RustBuffer uniffi_pubkymobile_fn_func_resolve_https(RustBuffer public_key, RustCallStatus *_Nonnull out_status
|
92
101
|
);
|
102
|
+
RustBuffer uniffi_pubkymobile_fn_func_session(RustBuffer pubky, RustCallStatus *_Nonnull out_status
|
103
|
+
);
|
104
|
+
void uniffi_pubkymobile_fn_func_set_event_listener(uint64_t listener, RustCallStatus *_Nonnull out_status
|
105
|
+
);
|
93
106
|
RustBuffer uniffi_pubkymobile_fn_func_sign_in(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
94
107
|
);
|
95
108
|
RustBuffer uniffi_pubkymobile_fn_func_sign_out(RustBuffer secret_key, RustCallStatus *_Nonnull out_status
|
@@ -218,6 +231,9 @@ uint16_t uniffi_pubkymobile_checksum_func_create_recovery_file(void
|
|
218
231
|
);
|
219
232
|
uint16_t uniffi_pubkymobile_checksum_func_decrypt_recovery_file(void
|
220
233
|
|
234
|
+
);
|
235
|
+
uint16_t uniffi_pubkymobile_checksum_func_delete_file(void
|
236
|
+
|
221
237
|
);
|
222
238
|
uint16_t uniffi_pubkymobile_checksum_func_generate_secret_key(void
|
223
239
|
|
@@ -242,12 +258,21 @@ uint16_t uniffi_pubkymobile_checksum_func_publish_https(void
|
|
242
258
|
);
|
243
259
|
uint16_t uniffi_pubkymobile_checksum_func_put(void
|
244
260
|
|
261
|
+
);
|
262
|
+
uint16_t uniffi_pubkymobile_checksum_func_remove_event_listener(void
|
263
|
+
|
245
264
|
);
|
246
265
|
uint16_t uniffi_pubkymobile_checksum_func_resolve(void
|
247
266
|
|
248
267
|
);
|
249
268
|
uint16_t uniffi_pubkymobile_checksum_func_resolve_https(void
|
250
269
|
|
270
|
+
);
|
271
|
+
uint16_t uniffi_pubkymobile_checksum_func_session(void
|
272
|
+
|
273
|
+
);
|
274
|
+
uint16_t uniffi_pubkymobile_checksum_func_set_event_listener(void
|
275
|
+
|
251
276
|
);
|
252
277
|
uint16_t uniffi_pubkymobile_checksum_func_sign_in(void
|
253
278
|
|
@@ -257,6 +282,9 @@ uint16_t uniffi_pubkymobile_checksum_func_sign_out(void
|
|
257
282
|
);
|
258
283
|
uint16_t uniffi_pubkymobile_checksum_func_sign_up(void
|
259
284
|
|
285
|
+
);
|
286
|
+
uint16_t uniffi_pubkymobile_checksum_method_eventlistener_on_event_occurred(void
|
287
|
+
|
260
288
|
);
|
261
289
|
uint32_t ffi_pubkymobile_uniffi_contract_version(void
|
262
290
|
|
Binary file
|
package/ios/Pubky.mm
CHANGED
@@ -1,6 +1,21 @@
|
|
1
1
|
#import <React/RCTBridgeModule.h>
|
2
|
+
#import <React/RCTEventEmitter.h>
|
2
3
|
|
3
|
-
@interface RCT_EXTERN_MODULE(Pubky,
|
4
|
+
@interface RCT_EXTERN_MODULE(Pubky, RCTEventEmitter)
|
5
|
+
|
6
|
+
RCT_EXTERN_METHOD(setEventListener:(RCTPromiseResolveBlock)resolve
|
7
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
8
|
+
|
9
|
+
RCT_EXTERN_METHOD(removeEventListener:(RCTPromiseResolveBlock)resolve
|
10
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
11
|
+
|
12
|
+
RCT_EXTERN_METHOD(deleteFile:(NSString *)url
|
13
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
14
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
15
|
+
|
16
|
+
RCT_EXTERN_METHOD(session:(NSString *)pubky
|
17
|
+
withResolver:(RCTPromiseResolveBlock)resolve
|
18
|
+
withRejecter:(RCTPromiseRejectBlock)reject)
|
4
19
|
|
5
20
|
RCT_EXTERN_METHOD(auth:(NSString *)url
|
6
21
|
secretKey:(NSString *)secretKey
|
package/ios/Pubky.swift
CHANGED
@@ -1,7 +1,46 @@
|
|
1
1
|
import Foundation
|
2
|
+
import React
|
2
3
|
|
3
4
|
@objc(Pubky)
|
4
|
-
class Pubky:
|
5
|
+
class Pubky: RCTEventEmitter {
|
6
|
+
|
7
|
+
override init() {
|
8
|
+
super.init()
|
9
|
+
}
|
10
|
+
|
11
|
+
@objc override static func requiresMainQueueSetup() -> Bool {
|
12
|
+
return false
|
13
|
+
}
|
14
|
+
|
15
|
+
override func supportedEvents() -> [String]! {
|
16
|
+
return ["PubkyEvent"]
|
17
|
+
}
|
18
|
+
|
19
|
+
class EventListenerImpl: EventListener {
|
20
|
+
weak var pubky: Pubky?
|
21
|
+
|
22
|
+
init(pubky: Pubky) {
|
23
|
+
self.pubky = pubky
|
24
|
+
}
|
25
|
+
|
26
|
+
func onEventOccurred(eventData: String) {
|
27
|
+
pubky?.sendEvent(withName: "PubkyEvent", body: eventData)
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
@objc(setEventListener:withRejecter:)
|
32
|
+
func setEventListener(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
33
|
+
let listener = EventListenerImpl(pubky: self)
|
34
|
+
react_native_pubky.setEventListener(listener: listener)
|
35
|
+
resolve(nil)
|
36
|
+
}
|
37
|
+
|
38
|
+
@objc(removeEventListener:withRejecter:)
|
39
|
+
func removeEventListener(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
40
|
+
react_native_pubky.removeEventListener()
|
41
|
+
resolve(nil)
|
42
|
+
}
|
43
|
+
|
5
44
|
@objc(auth:secretKey:withResolver:withRejecter:)
|
6
45
|
func auth(_ url: String, secretKey: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
7
46
|
Task {
|
@@ -144,6 +183,30 @@ class Pubky: NSObject {
|
|
144
183
|
}
|
145
184
|
}
|
146
185
|
|
186
|
+
@objc(deleteFile:withResolver:withRejecter:)
|
187
|
+
func deleteFile(_ url: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
188
|
+
Task {
|
189
|
+
do {
|
190
|
+
let result = try await react_native_pubky.deleteFile(url: url)
|
191
|
+
resolve(result)
|
192
|
+
} catch {
|
193
|
+
reject("list Error", "Failed to deleteFile", error)
|
194
|
+
}
|
195
|
+
}
|
196
|
+
}
|
197
|
+
|
198
|
+
@objc(session:withResolver:withRejecter:)
|
199
|
+
func session(_ pubky: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
200
|
+
Task {
|
201
|
+
do {
|
202
|
+
let result = react_native_pubky.session(pubky: pubky)
|
203
|
+
resolve(result)
|
204
|
+
} catch {
|
205
|
+
reject("session Error", "Failed to get session", error)
|
206
|
+
}
|
207
|
+
}
|
208
|
+
}
|
209
|
+
|
147
210
|
@objc(generateSecretKey:withRejecter:)
|
148
211
|
func generateSecretKey(_ resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
149
212
|
Task {
|
package/ios/pubkymobile.swift
CHANGED
@@ -335,6 +335,240 @@ fileprivate struct FfiConverterString: FfiConverter {
|
|
335
335
|
}
|
336
336
|
}
|
337
337
|
|
338
|
+
|
339
|
+
public protocol EventNotifierProtocol {
|
340
|
+
|
341
|
+
}
|
342
|
+
|
343
|
+
public class EventNotifier: EventNotifierProtocol {
|
344
|
+
fileprivate let pointer: UnsafeMutableRawPointer
|
345
|
+
|
346
|
+
// TODO: We'd like this to be `private` but for Swifty reasons,
|
347
|
+
// we can't implement `FfiConverter` without making this `required` and we can't
|
348
|
+
// make it `required` without making it `public`.
|
349
|
+
required init(unsafeFromRawPointer pointer: UnsafeMutableRawPointer) {
|
350
|
+
self.pointer = pointer
|
351
|
+
}
|
352
|
+
|
353
|
+
deinit {
|
354
|
+
try! rustCall { uniffi_pubkymobile_fn_free_eventnotifier(pointer, $0) }
|
355
|
+
}
|
356
|
+
|
357
|
+
|
358
|
+
|
359
|
+
|
360
|
+
|
361
|
+
}
|
362
|
+
|
363
|
+
public struct FfiConverterTypeEventNotifier: FfiConverter {
|
364
|
+
typealias FfiType = UnsafeMutableRawPointer
|
365
|
+
typealias SwiftType = EventNotifier
|
366
|
+
|
367
|
+
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> EventNotifier {
|
368
|
+
let v: UInt64 = try readInt(&buf)
|
369
|
+
// The Rust code won't compile if a pointer won't fit in a UInt64.
|
370
|
+
// We have to go via `UInt` because that's the thing that's the size of a pointer.
|
371
|
+
let ptr = UnsafeMutableRawPointer(bitPattern: UInt(truncatingIfNeeded: v))
|
372
|
+
if (ptr == nil) {
|
373
|
+
throw UniffiInternalError.unexpectedNullPointer
|
374
|
+
}
|
375
|
+
return try lift(ptr!)
|
376
|
+
}
|
377
|
+
|
378
|
+
public static func write(_ value: EventNotifier, into buf: inout [UInt8]) {
|
379
|
+
// This fiddling is because `Int` is the thing that's the same size as a pointer.
|
380
|
+
// The Rust code won't compile if a pointer won't fit in a `UInt64`.
|
381
|
+
writeInt(&buf, UInt64(bitPattern: Int64(Int(bitPattern: lower(value)))))
|
382
|
+
}
|
383
|
+
|
384
|
+
public static func lift(_ pointer: UnsafeMutableRawPointer) throws -> EventNotifier {
|
385
|
+
return EventNotifier(unsafeFromRawPointer: pointer)
|
386
|
+
}
|
387
|
+
|
388
|
+
public static func lower(_ value: EventNotifier) -> UnsafeMutableRawPointer {
|
389
|
+
return value.pointer
|
390
|
+
}
|
391
|
+
}
|
392
|
+
|
393
|
+
|
394
|
+
public func FfiConverterTypeEventNotifier_lift(_ pointer: UnsafeMutableRawPointer) throws -> EventNotifier {
|
395
|
+
return try FfiConverterTypeEventNotifier.lift(pointer)
|
396
|
+
}
|
397
|
+
|
398
|
+
public func FfiConverterTypeEventNotifier_lower(_ value: EventNotifier) -> UnsafeMutableRawPointer {
|
399
|
+
return FfiConverterTypeEventNotifier.lower(value)
|
400
|
+
}
|
401
|
+
|
402
|
+
fileprivate extension NSLock {
|
403
|
+
func withLock<T>(f: () throws -> T) rethrows -> T {
|
404
|
+
self.lock()
|
405
|
+
defer { self.unlock() }
|
406
|
+
return try f()
|
407
|
+
}
|
408
|
+
}
|
409
|
+
|
410
|
+
fileprivate typealias UniFFICallbackHandle = UInt64
|
411
|
+
fileprivate class UniFFICallbackHandleMap<T> {
|
412
|
+
private var leftMap: [UniFFICallbackHandle: T] = [:]
|
413
|
+
private var counter: [UniFFICallbackHandle: UInt64] = [:]
|
414
|
+
private var rightMap: [ObjectIdentifier: UniFFICallbackHandle] = [:]
|
415
|
+
|
416
|
+
private let lock = NSLock()
|
417
|
+
private var currentHandle: UniFFICallbackHandle = 0
|
418
|
+
private let stride: UniFFICallbackHandle = 1
|
419
|
+
|
420
|
+
func insert(obj: T) -> UniFFICallbackHandle {
|
421
|
+
lock.withLock {
|
422
|
+
let id = ObjectIdentifier(obj as AnyObject)
|
423
|
+
let handle = rightMap[id] ?? {
|
424
|
+
currentHandle += stride
|
425
|
+
let handle = currentHandle
|
426
|
+
leftMap[handle] = obj
|
427
|
+
rightMap[id] = handle
|
428
|
+
return handle
|
429
|
+
}()
|
430
|
+
counter[handle] = (counter[handle] ?? 0) + 1
|
431
|
+
return handle
|
432
|
+
}
|
433
|
+
}
|
434
|
+
|
435
|
+
func get(handle: UniFFICallbackHandle) -> T? {
|
436
|
+
lock.withLock {
|
437
|
+
leftMap[handle]
|
438
|
+
}
|
439
|
+
}
|
440
|
+
|
441
|
+
func delete(handle: UniFFICallbackHandle) {
|
442
|
+
remove(handle: handle)
|
443
|
+
}
|
444
|
+
|
445
|
+
@discardableResult
|
446
|
+
func remove(handle: UniFFICallbackHandle) -> T? {
|
447
|
+
lock.withLock {
|
448
|
+
defer { counter[handle] = (counter[handle] ?? 1) - 1 }
|
449
|
+
guard counter[handle] == 1 else { return leftMap[handle] }
|
450
|
+
let obj = leftMap.removeValue(forKey: handle)
|
451
|
+
if let obj = obj {
|
452
|
+
rightMap.removeValue(forKey: ObjectIdentifier(obj as AnyObject))
|
453
|
+
}
|
454
|
+
return obj
|
455
|
+
}
|
456
|
+
}
|
457
|
+
}
|
458
|
+
|
459
|
+
// Magic number for the Rust proxy to call using the same mechanism as every other method,
|
460
|
+
// to free the callback once it's dropped by Rust.
|
461
|
+
private let IDX_CALLBACK_FREE: Int32 = 0
|
462
|
+
// Callback return codes
|
463
|
+
private let UNIFFI_CALLBACK_SUCCESS: Int32 = 0
|
464
|
+
private let UNIFFI_CALLBACK_ERROR: Int32 = 1
|
465
|
+
private let UNIFFI_CALLBACK_UNEXPECTED_ERROR: Int32 = 2
|
466
|
+
|
467
|
+
// Declaration and FfiConverters for EventListener Callback Interface
|
468
|
+
|
469
|
+
public protocol EventListener : AnyObject {
|
470
|
+
func onEventOccurred(eventData: String)
|
471
|
+
|
472
|
+
}
|
473
|
+
|
474
|
+
// The ForeignCallback that is passed to Rust.
|
475
|
+
fileprivate let foreignCallbackCallbackInterfaceEventListener : ForeignCallback =
|
476
|
+
{ (handle: UniFFICallbackHandle, method: Int32, argsData: UnsafePointer<UInt8>, argsLen: Int32, out_buf: UnsafeMutablePointer<RustBuffer>) -> Int32 in
|
477
|
+
|
478
|
+
|
479
|
+
func invokeOnEventOccurred(_ swiftCallbackInterface: EventListener, _ argsData: UnsafePointer<UInt8>, _ argsLen: Int32, _ out_buf: UnsafeMutablePointer<RustBuffer>) throws -> Int32 {
|
480
|
+
var reader = createReader(data: Data(bytes: argsData, count: Int(argsLen)))
|
481
|
+
func makeCall() throws -> Int32 {
|
482
|
+
try swiftCallbackInterface.onEventOccurred(
|
483
|
+
eventData: try FfiConverterString.read(from: &reader)
|
484
|
+
)
|
485
|
+
return UNIFFI_CALLBACK_SUCCESS
|
486
|
+
}
|
487
|
+
return try makeCall()
|
488
|
+
}
|
489
|
+
|
490
|
+
|
491
|
+
switch method {
|
492
|
+
case IDX_CALLBACK_FREE:
|
493
|
+
FfiConverterCallbackInterfaceEventListener.drop(handle: handle)
|
494
|
+
// Sucessful return
|
495
|
+
// See docs of ForeignCallback in `uniffi_core/src/ffi/foreigncallbacks.rs`
|
496
|
+
return UNIFFI_CALLBACK_SUCCESS
|
497
|
+
case 1:
|
498
|
+
let cb: EventListener
|
499
|
+
do {
|
500
|
+
cb = try FfiConverterCallbackInterfaceEventListener.lift(handle)
|
501
|
+
} catch {
|
502
|
+
out_buf.pointee = FfiConverterString.lower("EventListener: Invalid handle")
|
503
|
+
return UNIFFI_CALLBACK_UNEXPECTED_ERROR
|
504
|
+
}
|
505
|
+
do {
|
506
|
+
return try invokeOnEventOccurred(cb, argsData, argsLen, out_buf)
|
507
|
+
} catch let error {
|
508
|
+
out_buf.pointee = FfiConverterString.lower(String(describing: error))
|
509
|
+
return UNIFFI_CALLBACK_UNEXPECTED_ERROR
|
510
|
+
}
|
511
|
+
|
512
|
+
// This should never happen, because an out of bounds method index won't
|
513
|
+
// ever be used. Once we can catch errors, we should return an InternalError.
|
514
|
+
// https://github.com/mozilla/uniffi-rs/issues/351
|
515
|
+
default:
|
516
|
+
// An unexpected error happened.
|
517
|
+
// See docs of ForeignCallback in `uniffi_core/src/ffi/foreigncallbacks.rs`
|
518
|
+
return UNIFFI_CALLBACK_UNEXPECTED_ERROR
|
519
|
+
}
|
520
|
+
}
|
521
|
+
|
522
|
+
// FfiConverter protocol for callback interfaces
|
523
|
+
fileprivate struct FfiConverterCallbackInterfaceEventListener {
|
524
|
+
private static let initCallbackOnce: () = {
|
525
|
+
// Swift ensures this initializer code will once run once, even when accessed by multiple threads.
|
526
|
+
try! rustCall { (err: UnsafeMutablePointer<RustCallStatus>) in
|
527
|
+
uniffi_pubkymobile_fn_init_callback_eventlistener(foreignCallbackCallbackInterfaceEventListener, err)
|
528
|
+
}
|
529
|
+
}()
|
530
|
+
|
531
|
+
private static func ensureCallbackinitialized() {
|
532
|
+
_ = initCallbackOnce
|
533
|
+
}
|
534
|
+
|
535
|
+
static func drop(handle: UniFFICallbackHandle) {
|
536
|
+
handleMap.remove(handle: handle)
|
537
|
+
}
|
538
|
+
|
539
|
+
private static var handleMap = UniFFICallbackHandleMap<EventListener>()
|
540
|
+
}
|
541
|
+
|
542
|
+
extension FfiConverterCallbackInterfaceEventListener : FfiConverter {
|
543
|
+
typealias SwiftType = EventListener
|
544
|
+
// We can use Handle as the FfiType because it's a typealias to UInt64
|
545
|
+
typealias FfiType = UniFFICallbackHandle
|
546
|
+
|
547
|
+
public static func lift(_ handle: UniFFICallbackHandle) throws -> SwiftType {
|
548
|
+
ensureCallbackinitialized();
|
549
|
+
guard let callback = handleMap.get(handle: handle) else {
|
550
|
+
throw UniffiInternalError.unexpectedStaleHandle
|
551
|
+
}
|
552
|
+
return callback
|
553
|
+
}
|
554
|
+
|
555
|
+
public static func read(from buf: inout (data: Data, offset: Data.Index)) throws -> SwiftType {
|
556
|
+
ensureCallbackinitialized();
|
557
|
+
let handle: UniFFICallbackHandle = try readInt(&buf)
|
558
|
+
return try lift(handle)
|
559
|
+
}
|
560
|
+
|
561
|
+
public static func lower(_ v: SwiftType) -> UniFFICallbackHandle {
|
562
|
+
ensureCallbackinitialized();
|
563
|
+
return handleMap.insert(obj: v)
|
564
|
+
}
|
565
|
+
|
566
|
+
public static func write(_ v: SwiftType, into buf: inout [UInt8]) {
|
567
|
+
ensureCallbackinitialized();
|
568
|
+
writeInt(&buf, lower(v))
|
569
|
+
}
|
570
|
+
}
|
571
|
+
|
338
572
|
fileprivate struct FfiConverterSequenceString: FfiConverterRustBuffer {
|
339
573
|
typealias SwiftType = [String]
|
340
574
|
|
@@ -387,6 +621,15 @@ public func decryptRecoveryFile(recoveryFile: String, passphrase: String) -> [S
|
|
387
621
|
)
|
388
622
|
}
|
389
623
|
|
624
|
+
public func deleteFile(url: String) -> [String] {
|
625
|
+
return try! FfiConverterSequenceString.lift(
|
626
|
+
try! rustCall() {
|
627
|
+
uniffi_pubkymobile_fn_func_delete_file(
|
628
|
+
FfiConverterString.lower(url),$0)
|
629
|
+
}
|
630
|
+
)
|
631
|
+
}
|
632
|
+
|
390
633
|
public func generateSecretKey() -> [String] {
|
391
634
|
return try! FfiConverterSequenceString.lift(
|
392
635
|
try! rustCall() {
|
@@ -463,6 +706,14 @@ public func put(url: String, content: String) -> [String] {
|
|
463
706
|
)
|
464
707
|
}
|
465
708
|
|
709
|
+
public func removeEventListener() {
|
710
|
+
try! rustCall() {
|
711
|
+
uniffi_pubkymobile_fn_func_remove_event_listener($0)
|
712
|
+
}
|
713
|
+
}
|
714
|
+
|
715
|
+
|
716
|
+
|
466
717
|
public func resolve(publicKey: String) -> [String] {
|
467
718
|
return try! FfiConverterSequenceString.lift(
|
468
719
|
try! rustCall() {
|
@@ -481,6 +732,24 @@ public func resolveHttps(publicKey: String) -> [String] {
|
|
481
732
|
)
|
482
733
|
}
|
483
734
|
|
735
|
+
public func session(pubky: String) -> [String] {
|
736
|
+
return try! FfiConverterSequenceString.lift(
|
737
|
+
try! rustCall() {
|
738
|
+
uniffi_pubkymobile_fn_func_session(
|
739
|
+
FfiConverterString.lower(pubky),$0)
|
740
|
+
}
|
741
|
+
)
|
742
|
+
}
|
743
|
+
|
744
|
+
public func setEventListener(listener: EventListener) {
|
745
|
+
try! rustCall() {
|
746
|
+
uniffi_pubkymobile_fn_func_set_event_listener(
|
747
|
+
FfiConverterCallbackInterfaceEventListener.lower(listener),$0)
|
748
|
+
}
|
749
|
+
}
|
750
|
+
|
751
|
+
|
752
|
+
|
484
753
|
public func signIn(secretKey: String) -> [String] {
|
485
754
|
return try! FfiConverterSequenceString.lift(
|
486
755
|
try! rustCall() {
|
@@ -533,6 +802,9 @@ private var initializationResult: InitializationResult {
|
|
533
802
|
if (uniffi_pubkymobile_checksum_func_decrypt_recovery_file() != 59688) {
|
534
803
|
return InitializationResult.apiChecksumMismatch
|
535
804
|
}
|
805
|
+
if (uniffi_pubkymobile_checksum_func_delete_file() != 57905) {
|
806
|
+
return InitializationResult.apiChecksumMismatch
|
807
|
+
}
|
536
808
|
if (uniffi_pubkymobile_checksum_func_generate_secret_key() != 63116) {
|
537
809
|
return InitializationResult.apiChecksumMismatch
|
538
810
|
}
|
@@ -557,12 +829,21 @@ private var initializationResult: InitializationResult {
|
|
557
829
|
if (uniffi_pubkymobile_checksum_func_put() != 51107) {
|
558
830
|
return InitializationResult.apiChecksumMismatch
|
559
831
|
}
|
832
|
+
if (uniffi_pubkymobile_checksum_func_remove_event_listener() != 6794) {
|
833
|
+
return InitializationResult.apiChecksumMismatch
|
834
|
+
}
|
560
835
|
if (uniffi_pubkymobile_checksum_func_resolve() != 18303) {
|
561
836
|
return InitializationResult.apiChecksumMismatch
|
562
837
|
}
|
563
838
|
if (uniffi_pubkymobile_checksum_func_resolve_https() != 34593) {
|
564
839
|
return InitializationResult.apiChecksumMismatch
|
565
840
|
}
|
841
|
+
if (uniffi_pubkymobile_checksum_func_session() != 65177) {
|
842
|
+
return InitializationResult.apiChecksumMismatch
|
843
|
+
}
|
844
|
+
if (uniffi_pubkymobile_checksum_func_set_event_listener() != 19468) {
|
845
|
+
return InitializationResult.apiChecksumMismatch
|
846
|
+
}
|
566
847
|
if (uniffi_pubkymobile_checksum_func_sign_in() != 21006) {
|
567
848
|
return InitializationResult.apiChecksumMismatch
|
568
849
|
}
|
@@ -572,6 +853,9 @@ private var initializationResult: InitializationResult {
|
|
572
853
|
if (uniffi_pubkymobile_checksum_func_sign_up() != 58756) {
|
573
854
|
return InitializationResult.apiChecksumMismatch
|
574
855
|
}
|
856
|
+
if (uniffi_pubkymobile_checksum_method_eventlistener_on_event_occurred() != 39865) {
|
857
|
+
return InitializationResult.apiChecksumMismatch
|
858
|
+
}
|
575
859
|
|
576
860
|
return InitializationResult.ok
|
577
861
|
}
|
package/lib/commonjs/index.js
CHANGED
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
exports.auth = auth;
|
7
7
|
exports.createRecoveryFile = createRecoveryFile;
|
8
8
|
exports.decryptRecoveryFile = decryptRecoveryFile;
|
9
|
+
exports.deleteFile = deleteFile;
|
9
10
|
exports.generateSecretKey = generateSecretKey;
|
10
11
|
exports.get = get;
|
11
12
|
exports.getPublicKeyFromSecretKey = getPublicKeyFromSecretKey;
|
@@ -14,8 +15,11 @@ exports.parseAuthUrl = parseAuthUrl;
|
|
14
15
|
exports.publish = publish;
|
15
16
|
exports.publishHttps = publishHttps;
|
16
17
|
exports.put = put;
|
18
|
+
exports.removeEventListener = removeEventListener;
|
17
19
|
exports.resolve = resolve;
|
18
20
|
exports.resolveHttps = resolveHttps;
|
21
|
+
exports.session = session;
|
22
|
+
exports.setEventListener = setEventListener;
|
19
23
|
exports.signIn = signIn;
|
20
24
|
exports.signOut = signOut;
|
21
25
|
exports.signUp = signUp;
|
@@ -30,6 +34,25 @@ const Pubky = _reactNative.NativeModules.Pubky ? _reactNative.NativeModules.Pubk
|
|
30
34
|
throw new Error(LINKING_ERROR);
|
31
35
|
}
|
32
36
|
});
|
37
|
+
const eventEmitter = new _reactNative.NativeEventEmitter(Pubky);
|
38
|
+
async function setEventListener(callback) {
|
39
|
+
try {
|
40
|
+
await Pubky.setEventListener();
|
41
|
+
eventEmitter.addListener('PubkyEvent', callback);
|
42
|
+
return (0, _result.ok)(undefined);
|
43
|
+
} catch (e) {
|
44
|
+
return (0, _result.err)(JSON.stringify(e));
|
45
|
+
}
|
46
|
+
}
|
47
|
+
async function removeEventListener() {
|
48
|
+
try {
|
49
|
+
//await Pubky.removeEventListener();
|
50
|
+
eventEmitter.removeAllListeners('PubkyEvent');
|
51
|
+
return (0, _result.ok)(undefined);
|
52
|
+
} catch (e) {
|
53
|
+
return (0, _result.err)(JSON.stringify(e));
|
54
|
+
}
|
55
|
+
}
|
33
56
|
async function auth(url, secretKey) {
|
34
57
|
const res = await Pubky.auth(url, secretKey);
|
35
58
|
if (res[0] === 'error') {
|
@@ -159,6 +182,28 @@ async function list(url) {
|
|
159
182
|
return (0, _result.err)(JSON.stringify(e));
|
160
183
|
}
|
161
184
|
}
|
185
|
+
async function deleteFile(url) {
|
186
|
+
try {
|
187
|
+
const res = await Pubky.deleteFile(url);
|
188
|
+
if (res[0] === 'error') {
|
189
|
+
return (0, _result.err)(res[1]);
|
190
|
+
}
|
191
|
+
return (0, _result.ok)(res[1]);
|
192
|
+
} catch (e) {
|
193
|
+
return (0, _result.err)(JSON.stringify(e));
|
194
|
+
}
|
195
|
+
}
|
196
|
+
async function session(pubky) {
|
197
|
+
try {
|
198
|
+
const res = await Pubky.session(pubky);
|
199
|
+
if (res[0] === 'error') {
|
200
|
+
return (0, _result.err)(res[1]);
|
201
|
+
}
|
202
|
+
return (0, _result.ok)(JSON.parse(res[1]));
|
203
|
+
} catch (e) {
|
204
|
+
return (0, _result.err)(JSON.stringify(e));
|
205
|
+
}
|
206
|
+
}
|
162
207
|
async function generateSecretKey() {
|
163
208
|
try {
|
164
209
|
const res = await Pubky.generateSecretKey();
|