@synonymdev/react-native-pubky 0.1.1 → 0.2.1

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 CHANGED
@@ -11,8 +11,8 @@ npm install @synonymdev/react-native-pubky
11
11
  ## Implementation Status
12
12
  ### Implemented Methods
13
13
  - [x] [auth](#auth): Authentication functionality.
14
+ - [x] [parseAuthUrl](#parseAuthUrl): Method to decode an authUrl.
14
15
  ### Methods to be Implemented
15
- - [ ] parseAuthUrl: Method to decode an authUrl.
16
16
  - [ ] publish: Functionality to publish content.
17
17
  - [ ] resolve: Functionality to resolve content.
18
18
  - [ ] signIn: Functionality to sign in.
@@ -31,6 +31,18 @@ if (authRes.isErr()) {
31
31
  }
32
32
  console.log(authRes.value);
33
33
  ```
34
+ ### <a name="parseAuthUrl"></a>parseAuthUrl
35
+ ```js
36
+ import { parseAuthUrl } from '@synonymdev/react-native-pubky';
37
+
38
+ const pubkyAuthUrl = 'pubkyauth:///?relay=https://demo.httprelay.io/link&capabilities=/pub/pubky.app:rw,/pub/example.com/nested:rw&secret=FyzJ3gJ1W7boyFZC1Do9fYrRmDNgCLNRwEu_gaBgPUA';
39
+ const parseRes = await parseAuthUrl(pubkyAuthUrl);
40
+ if (parseRes.isErr()) {
41
+ console.log(parseRes.error.message);
42
+ return;
43
+ }
44
+ console.log(parseRes.value);
45
+ ```
34
46
 
35
47
  ## Local Installation
36
48
 
@@ -10,6 +10,7 @@ import kotlinx.coroutines.Dispatchers
10
10
  import kotlinx.coroutines.launch
11
11
  import kotlinx.coroutines.withContext
12
12
  import uniffi.pubkymobile.auth
13
+ import uniffi.pubkymobile.parseAuthUrl
13
14
 
14
15
  class PubkyModule(reactContext: ReactApplicationContext) :
15
16
  ReactContextBaseJavaModule(reactContext) {
@@ -37,6 +38,19 @@ class PubkyModule(reactContext: ReactApplicationContext) :
37
38
  }
38
39
  }
39
40
 
41
+ @ReactMethod
42
+ fun parseAuthUrl(url: String, promise: Promise) {
43
+ try {
44
+ val result = parseAuthUrl(url)
45
+ val array = Arguments.createArray().apply {
46
+ result.forEach { pushString(it) }
47
+ }
48
+ promise.resolve(array)
49
+ } catch (e: Exception) {
50
+ promise.reject("Error", e.message)
51
+ }
52
+ }
53
+
40
54
  companion object {
41
55
  const val NAME = "Pubky"
42
56
  }
@@ -29,9 +29,6 @@ import java.nio.ByteOrder
29
29
  import java.nio.CharBuffer
30
30
  import java.nio.charset.CodingErrorAction
31
31
  import java.util.concurrent.ConcurrentHashMap
32
- import kotlin.coroutines.resume
33
- import kotlinx.coroutines.CancellableContinuation
34
- import kotlinx.coroutines.suspendCancellableCoroutine
35
32
 
36
33
  // This is a helper for safely working with byte buffers returned from the Rust code.
37
34
  // A rust-owned buffer is represented by its capacity, its current length, and a
@@ -380,13 +377,14 @@ internal interface _UniFFILib : Library {
380
377
  .also { lib: _UniFFILib ->
381
378
  uniffiCheckContractApiVersion(lib)
382
379
  uniffiCheckApiChecksums(lib)
383
- uniffiRustFutureContinuationCallback.register(lib)
384
380
  }
385
381
  }
386
382
  }
387
383
 
388
- fun uniffi_pubkymobile_fn_func_auth(`url`: RustBuffer.ByValue,`secretKey`: RustBuffer.ByValue,
389
- ): Pointer
384
+ fun uniffi_pubkymobile_fn_func_auth(`url`: RustBuffer.ByValue,`secretKey`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus,
385
+ ): RustBuffer.ByValue
386
+ fun uniffi_pubkymobile_fn_func_parse_auth_url(`url`: RustBuffer.ByValue,_uniffi_out_err: RustCallStatus,
387
+ ): RustBuffer.ByValue
390
388
  fun ffi_pubkymobile_rustbuffer_alloc(`size`: Int,_uniffi_out_err: RustCallStatus,
391
389
  ): RustBuffer.ByValue
392
390
  fun ffi_pubkymobile_rustbuffer_from_bytes(`bytes`: ForeignBytes.ByValue,_uniffi_out_err: RustCallStatus,
@@ -503,6 +501,8 @@ internal interface _UniFFILib : Library {
503
501
  ): Unit
504
502
  fun uniffi_pubkymobile_checksum_func_auth(
505
503
  ): Short
504
+ fun uniffi_pubkymobile_checksum_func_parse_auth_url(
505
+ ): Short
506
506
  fun ffi_pubkymobile_uniffi_contract_version(
507
507
  ): Int
508
508
 
@@ -520,56 +520,15 @@ private fun uniffiCheckContractApiVersion(lib: _UniFFILib) {
520
520
 
521
521
  @Suppress("UNUSED_PARAMETER")
522
522
  private fun uniffiCheckApiChecksums(lib: _UniFFILib) {
523
- if (lib.uniffi_pubkymobile_checksum_func_auth() != 46918.toShort()) {
523
+ if (lib.uniffi_pubkymobile_checksum_func_auth() != 61378.toShort()) {
524
524
  throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
525
525
  }
526
- }
527
-
528
- // Async support
529
- // Async return type handlers
530
-
531
- internal const val UNIFFI_RUST_FUTURE_POLL_READY = 0.toShort()
532
- internal const val UNIFFI_RUST_FUTURE_POLL_MAYBE_READY = 1.toShort()
533
-
534
- internal val uniffiContinuationHandleMap = UniFfiHandleMap<CancellableContinuation<Short>>()
535
-
536
- // FFI type for Rust future continuations
537
- internal object uniffiRustFutureContinuationCallback: UniFffiRustFutureContinuationCallbackType {
538
- override fun callback(continuationHandle: USize, pollResult: Short) {
539
- uniffiContinuationHandleMap.remove(continuationHandle)?.resume(pollResult)
540
- }
541
-
542
- internal fun register(lib: _UniFFILib) {
543
- lib.ffi_pubkymobile_rust_future_continuation_callback_set(this)
544
- }
545
- }
546
-
547
- internal suspend fun<T, F, E: Exception> uniffiRustCallAsync(
548
- rustFuture: Pointer,
549
- pollFunc: (Pointer, USize) -> Unit,
550
- completeFunc: (Pointer, RustCallStatus) -> F,
551
- freeFunc: (Pointer) -> Unit,
552
- liftFunc: (F) -> T,
553
- errorHandler: CallStatusErrorHandler<E>
554
- ): T {
555
- try {
556
- do {
557
- val pollResult = suspendCancellableCoroutine<Short> { continuation ->
558
- pollFunc(
559
- rustFuture,
560
- uniffiContinuationHandleMap.insert(continuation)
561
- )
562
- }
563
- } while (pollResult != UNIFFI_RUST_FUTURE_POLL_READY);
564
-
565
- return liftFunc(
566
- rustCallWithError(errorHandler, { status -> completeFunc(rustFuture, status) })
567
- )
568
- } finally {
569
- freeFunc(rustFuture)
526
+ if (lib.uniffi_pubkymobile_checksum_func_parse_auth_url() != 29088.toShort()) {
527
+ throw RuntimeException("UniFFI API checksum mismatch: try cleaning and rebuilding your project")
570
528
  }
571
529
  }
572
530
 
531
+ // Async support
573
532
 
574
533
  // Public interface members begin here.
575
534
 
@@ -653,21 +612,19 @@ public object FfiConverterSequenceString: FfiConverterRustBuffer<List<String>> {
653
612
  }
654
613
  }
655
614
 
615
+ fun `auth`(`url`: String, `secretKey`: String): List<String> {
616
+ return FfiConverterSequenceString.lift(
617
+ rustCall() { _status ->
618
+ _UniFFILib.INSTANCE.uniffi_pubkymobile_fn_func_auth(FfiConverterString.lower(`url`),FfiConverterString.lower(`secretKey`),_status)
619
+ })
620
+ }
656
621
 
657
622
 
658
-
659
-
660
- @Suppress("ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
661
- suspend fun `auth`(`url`: String, `secretKey`: String) : List<String> {
662
- return uniffiRustCallAsync(
663
- _UniFFILib.INSTANCE.uniffi_pubkymobile_fn_func_auth(FfiConverterString.lower(`url`),FfiConverterString.lower(`secretKey`),),
664
- { future, continuation -> _UniFFILib.INSTANCE.ffi_pubkymobile_rust_future_poll_rust_buffer(future, continuation) },
665
- { future, continuation -> _UniFFILib.INSTANCE.ffi_pubkymobile_rust_future_complete_rust_buffer(future, continuation) },
666
- { future -> _UniFFILib.INSTANCE.ffi_pubkymobile_rust_future_free_rust_buffer(future) },
667
- // lift function
668
- { FfiConverterSequenceString.lift(it) },
669
- // Error FFI converter
670
- NullCallStatusErrorHandler,
671
- )
623
+ fun `parseAuthUrl`(`url`: String): List<String> {
624
+ return FfiConverterSequenceString.lift(
625
+ rustCall() { _status ->
626
+ _UniFFILib.INSTANCE.uniffi_pubkymobile_fn_func_parse_auth_url(FfiConverterString.lower(`url`),_status)
627
+ })
672
628
  }
673
629
 
630
+
@@ -63,7 +63,9 @@ typedef struct RustCallStatus {
63
63
  typedef void (*UniFfiRustFutureContinuation)(void * _Nonnull, int8_t);
64
64
 
65
65
  // Scaffolding functions
66
- void* _Nonnull uniffi_pubkymobile_fn_func_auth(RustBuffer url, RustBuffer secret_key
66
+ RustBuffer uniffi_pubkymobile_fn_func_auth(RustBuffer url, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
67
+ );
68
+ RustBuffer uniffi_pubkymobile_fn_func_parse_auth_url(RustBuffer url, RustCallStatus *_Nonnull out_status
67
69
  );
68
70
  RustBuffer ffi_pubkymobile_rustbuffer_alloc(int32_t size, RustCallStatus *_Nonnull out_status
69
71
  );
@@ -181,6 +183,9 @@ void ffi_pubkymobile_rust_future_complete_void(void* _Nonnull handle, RustCallSt
181
183
  );
182
184
  uint16_t uniffi_pubkymobile_checksum_func_auth(void
183
185
 
186
+ );
187
+ uint16_t uniffi_pubkymobile_checksum_func_parse_auth_url(void
188
+
184
189
  );
185
190
  uint32_t ffi_pubkymobile_uniffi_contract_version(void
186
191
 
@@ -63,7 +63,9 @@ typedef struct RustCallStatus {
63
63
  typedef void (*UniFfiRustFutureContinuation)(void * _Nonnull, int8_t);
64
64
 
65
65
  // Scaffolding functions
66
- void* _Nonnull uniffi_pubkymobile_fn_func_auth(RustBuffer url, RustBuffer secret_key
66
+ RustBuffer uniffi_pubkymobile_fn_func_auth(RustBuffer url, RustBuffer secret_key, RustCallStatus *_Nonnull out_status
67
+ );
68
+ RustBuffer uniffi_pubkymobile_fn_func_parse_auth_url(RustBuffer url, RustCallStatus *_Nonnull out_status
67
69
  );
68
70
  RustBuffer ffi_pubkymobile_rustbuffer_alloc(int32_t size, RustCallStatus *_Nonnull out_status
69
71
  );
@@ -181,6 +183,9 @@ void ffi_pubkymobile_rust_future_complete_void(void* _Nonnull handle, RustCallSt
181
183
  );
182
184
  uint16_t uniffi_pubkymobile_checksum_func_auth(void
183
185
 
186
+ );
187
+ uint16_t uniffi_pubkymobile_checksum_func_parse_auth_url(void
188
+
184
189
  );
185
190
  uint32_t ffi_pubkymobile_uniffi_contract_version(void
186
191
 
package/ios/Pubky.mm CHANGED
@@ -7,6 +7,10 @@ RCT_EXTERN_METHOD(auth:(NSString *)url
7
7
  withResolver:(RCTPromiseResolveBlock)resolve
8
8
  withRejecter:(RCTPromiseRejectBlock)reject)
9
9
 
10
+ RCT_EXTERN_METHOD(parseAuthUrl:(NSString *)url
11
+ withResolver:(RCTPromiseResolveBlock)resolve
12
+ withRejecter:(RCTPromiseRejectBlock)reject)
13
+
10
14
  + (BOOL)requiresMainQueueSetup
11
15
  {
12
16
  return NO;
package/ios/Pubky.swift CHANGED
@@ -2,15 +2,26 @@ import Foundation
2
2
 
3
3
  @objc(Pubky)
4
4
  class Pubky: NSObject {
5
- @objc(auth:secretKey:withResolver:withRejecter:)
6
- func auth(_ url: String, secretKey: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
7
- Task {
8
- do {
9
- let result = try await react_native_pubky.auth(url: url, secretKey: secretKey)
10
- resolve(result)
11
- } catch {
12
- reject("auth Error", "Failed to auth", error)
13
- }
14
- }
15
- }
5
+ @objc(auth:secretKey:withResolver:withRejecter:)
6
+ func auth(_ url: String, secretKey: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
7
+ Task {
8
+ do {
9
+ let result = try await react_native_pubky.auth(url: url, secretKey: secretKey)
10
+ resolve(result)
11
+ } catch {
12
+ reject("auth Error", "Failed to auth", error)
13
+ }
14
+ }
15
+ }
16
+ @objc(parseAuthUrl:withResolver:withRejecter:)
17
+ func parseAuthUrl(_ url: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
18
+ Task {
19
+ do {
20
+ let result = react_native_pubky.parseAuthUrl(url: url)
21
+ resolve(result)
22
+ } catch {
23
+ reject("parseAuthUrl Error", "Failed to parse auth url", error)
24
+ }
25
+ }
26
+ }
16
27
  }
@@ -356,88 +356,26 @@ fileprivate struct FfiConverterSequenceString: FfiConverterRustBuffer {
356
356
  return seq
357
357
  }
358
358
  }
359
- private let UNIFFI_RUST_FUTURE_POLL_READY: Int8 = 0
360
- private let UNIFFI_RUST_FUTURE_POLL_MAYBE_READY: Int8 = 1
361
-
362
- fileprivate func uniffiRustCallAsync<F, T>(
363
- rustFutureFunc: () -> UnsafeMutableRawPointer,
364
- pollFunc: (UnsafeMutableRawPointer, UnsafeMutableRawPointer) -> (),
365
- completeFunc: (UnsafeMutableRawPointer, UnsafeMutablePointer<RustCallStatus>) -> F,
366
- freeFunc: (UnsafeMutableRawPointer) -> (),
367
- liftFunc: (F) throws -> T,
368
- errorHandler: ((RustBuffer) throws -> Error)?
369
- ) async throws -> T {
370
- // Make sure to call uniffiEnsureInitialized() since future creation doesn't have a
371
- // RustCallStatus param, so doesn't use makeRustCall()
372
- uniffiEnsureInitialized()
373
- let rustFuture = rustFutureFunc()
374
- defer {
375
- freeFunc(rustFuture)
376
- }
377
- var pollResult: Int8;
378
- repeat {
379
- pollResult = await withUnsafeContinuation {
380
- pollFunc(rustFuture, ContinuationHolder($0).toOpaque())
381
- }
382
- } while pollResult != UNIFFI_RUST_FUTURE_POLL_READY
383
-
384
- return try liftFunc(makeRustCall(
385
- { completeFunc(rustFuture, $0) },
386
- errorHandler: errorHandler
387
- ))
388
- }
389
359
 
390
- // Callback handlers for an async calls. These are invoked by Rust when the future is ready. They
391
- // lift the return value or error and resume the suspended function.
392
- fileprivate func uniffiFutureContinuationCallback(ptr: UnsafeMutableRawPointer, pollResult: Int8) {
393
- ContinuationHolder.fromOpaque(ptr).resume(pollResult)
360
+ public func auth(url: String, secretKey: String) -> [String] {
361
+ return try! FfiConverterSequenceString.lift(
362
+ try! rustCall() {
363
+ uniffi_pubkymobile_fn_func_auth(
364
+ FfiConverterString.lower(url),
365
+ FfiConverterString.lower(secretKey),$0)
394
366
  }
395
-
396
- // Wraps UnsafeContinuation in a class so that we can use reference counting when passing it across
397
- // the FFI
398
- fileprivate class ContinuationHolder {
399
- let continuation: UnsafeContinuation<Int8, Never>
400
-
401
- init(_ continuation: UnsafeContinuation<Int8, Never>) {
402
- self.continuation = continuation
403
- }
404
-
405
- func resume(_ pollResult: Int8) {
406
- self.continuation.resume(returning: pollResult)
407
- }
408
-
409
- func toOpaque() -> UnsafeMutableRawPointer {
410
- return Unmanaged<ContinuationHolder>.passRetained(self).toOpaque()
411
- }
412
-
413
- static func fromOpaque(_ ptr: UnsafeRawPointer) -> ContinuationHolder {
414
- return Unmanaged<ContinuationHolder>.fromOpaque(ptr).takeRetainedValue()
415
- }
367
+ )
416
368
  }
417
369
 
418
- fileprivate func uniffiInitContinuationCallback() {
419
- ffi_pubkymobile_rust_future_continuation_callback_set(uniffiFutureContinuationCallback)
370
+ public func parseAuthUrl(url: String) -> [String] {
371
+ return try! FfiConverterSequenceString.lift(
372
+ try! rustCall() {
373
+ uniffi_pubkymobile_fn_func_parse_auth_url(
374
+ FfiConverterString.lower(url),$0)
420
375
  }
421
-
422
- public func auth(url: String, secretKey: String) async -> [String] {
423
- return try! await uniffiRustCallAsync(
424
- rustFutureFunc: {
425
- uniffi_pubkymobile_fn_func_auth(
426
- FfiConverterString.lower(url),
427
- FfiConverterString.lower(secretKey)
428
- )
429
- },
430
- pollFunc: ffi_pubkymobile_rust_future_poll_rust_buffer,
431
- completeFunc: ffi_pubkymobile_rust_future_complete_rust_buffer,
432
- freeFunc: ffi_pubkymobile_rust_future_free_rust_buffer,
433
- liftFunc: FfiConverterSequenceString.lift,
434
- errorHandler: nil
435
-
436
376
  )
437
377
  }
438
378
 
439
-
440
-
441
379
  private enum InitializationResult {
442
380
  case ok
443
381
  case contractVersionMismatch
@@ -453,11 +391,13 @@ private var initializationResult: InitializationResult {
453
391
  if bindings_contract_version != scaffolding_contract_version {
454
392
  return InitializationResult.contractVersionMismatch
455
393
  }
456
- if (uniffi_pubkymobile_checksum_func_auth() != 46918) {
394
+ if (uniffi_pubkymobile_checksum_func_auth() != 61378) {
395
+ return InitializationResult.apiChecksumMismatch
396
+ }
397
+ if (uniffi_pubkymobile_checksum_func_parse_auth_url() != 29088) {
457
398
  return InitializationResult.apiChecksumMismatch
458
399
  }
459
400
 
460
- uniffiInitContinuationCallback()
461
401
  return InitializationResult.ok
462
402
  }
463
403
 
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.auth = auth;
7
+ exports.parseAuthUrl = parseAuthUrl;
7
8
  var _reactNative = require("react-native");
8
9
  var _result = require("@synonymdev/result");
9
10
  const LINKING_ERROR = `The package 'react-native-pubky' doesn't seem to be linked. Make sure: \n\n` + _reactNative.Platform.select({
@@ -22,4 +23,16 @@ async function auth(url, secretKey) {
22
23
  }
23
24
  return (0, _result.ok)(res[1]);
24
25
  }
26
+ async function parseAuthUrl(url) {
27
+ try {
28
+ const res = await Pubky.parseAuthUrl(url);
29
+ if (res[0] === 'error') {
30
+ return (0, _result.err)(res[1]);
31
+ }
32
+ const parsed = JSON.parse(res[1]);
33
+ return (0, _result.ok)(parsed);
34
+ } catch (e) {
35
+ return (0, _result.err)(JSON.stringify(e));
36
+ }
37
+ }
25
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_result","LINKING_ERROR","Platform","select","ios","default","Pubky","NativeModules","Proxy","get","Error","auth","url","secretKey","res","err","ok"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,MAAME,aAAa,GACjB,6EAA6E,GAC7EC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,KAAK,GAAGC,0BAAa,CAACD,KAAK,GAC7BC,0BAAa,CAACD,KAAK,GACnB,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACT,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEE,eAAeU,IAAIA,CACxBC,GAAW,EACXC,SAAiB,EACU;EAC3B,MAAMC,GAAG,GAAG,MAAMR,KAAK,CAACK,IAAI,CAACC,GAAG,EAAEC,SAAS,CAAC;EAC5C,IAAIC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;IACtB,OAAO,IAAAC,WAAG,EAACD,GAAG,CAAC,CAAC,CAAC,CAAC;EACpB;EACA,OAAO,IAAAE,UAAE,EAACF,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_result","LINKING_ERROR","Platform","select","ios","default","Pubky","NativeModules","Proxy","get","Error","auth","url","secretKey","res","err","ok","parseAuthUrl","parsed","JSON","parse","e","stringify"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAEA,MAAME,aAAa,GACjB,6EAA6E,GAC7EC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,KAAK,GAAGC,0BAAa,CAACD,KAAK,GAC7BC,0BAAa,CAACD,KAAK,GACnB,IAAIE,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACT,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEE,eAAeU,IAAIA,CACxBC,GAAW,EACXC,SAAiB,EACU;EAC3B,MAAMC,GAAG,GAAG,MAAMR,KAAK,CAACK,IAAI,CAACC,GAAG,EAAEC,SAAS,CAAC;EAC5C,IAAIC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;IACtB,OAAO,IAAAC,WAAG,EAACD,GAAG,CAAC,CAAC,CAAC,CAAC;EACpB;EACA,OAAO,IAAAE,UAAE,EAACF,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB;AAaO,eAAeG,YAAYA,CAChCL,GAAW,EACwB;EACnC,IAAI;IACF,MAAME,GAAG,GAAG,MAAMR,KAAK,CAACW,YAAY,CAACL,GAAG,CAAC;IACzC,IAAIE,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;MACtB,OAAO,IAAAC,WAAG,EAACD,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB;IACA,MAAMI,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACN,GAAG,CAAC,CAAC,CAAC,CAAC;IACjC,OAAO,IAAAE,UAAE,EAACE,MAAM,CAAC;EACnB,CAAC,CAAC,OAAOG,CAAC,EAAE;IACV,OAAO,IAAAN,WAAG,EAACI,IAAI,CAACG,SAAS,CAACD,CAAC,CAAC,CAAC;EAC/B;AACF","ignoreList":[]}
@@ -18,4 +18,16 @@ export async function auth(url, secretKey) {
18
18
  }
19
19
  return ok(res[1]);
20
20
  }
21
+ export async function parseAuthUrl(url) {
22
+ try {
23
+ const res = await Pubky.parseAuthUrl(url);
24
+ if (res[0] === 'error') {
25
+ return err(res[1]);
26
+ }
27
+ const parsed = JSON.parse(res[1]);
28
+ return ok(parsed);
29
+ } catch (e) {
30
+ return err(JSON.stringify(e));
31
+ }
32
+ }
21
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","ok","err","LINKING_ERROR","select","ios","default","Pubky","Proxy","get","Error","auth","url","secretKey","res"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AACtD,SAASC,EAAE,EAAEC,GAAG,QAAqB,oBAAoB;AAEzD,MAAMC,aAAa,GACjB,6EAA6E,GAC7EH,QAAQ,CAACI,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,KAAK,GAAGR,aAAa,CAACQ,KAAK,GAC7BR,aAAa,CAACQ,KAAK,GACnB,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEL,OAAO,eAAeQ,IAAIA,CACxBC,GAAW,EACXC,SAAiB,EACU;EAC3B,MAAMC,GAAG,GAAG,MAAMP,KAAK,CAACI,IAAI,CAACC,GAAG,EAAEC,SAAS,CAAC;EAC5C,IAAIC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;IACtB,OAAOZ,GAAG,CAACY,GAAG,CAAC,CAAC,CAAC,CAAC;EACpB;EACA,OAAOb,EAAE,CAACa,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","Platform","ok","err","LINKING_ERROR","select","ios","default","Pubky","Proxy","get","Error","auth","url","secretKey","res","parseAuthUrl","parsed","JSON","parse","e","stringify"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AACtD,SAASC,EAAE,EAAEC,GAAG,QAAqB,oBAAoB;AAEzD,MAAMC,aAAa,GACjB,6EAA6E,GAC7EH,QAAQ,CAACI,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AAEjC,MAAMC,KAAK,GAAGR,aAAa,CAACQ,KAAK,GAC7BR,aAAa,CAACQ,KAAK,GACnB,IAAIC,KAAK,CACP,CAAC,CAAC,EACF;EACEC,GAAGA,CAAA,EAAG;IACJ,MAAM,IAAIC,KAAK,CAACP,aAAa,CAAC;EAChC;AACF,CACF,CAAC;AAEL,OAAO,eAAeQ,IAAIA,CACxBC,GAAW,EACXC,SAAiB,EACU;EAC3B,MAAMC,GAAG,GAAG,MAAMP,KAAK,CAACI,IAAI,CAACC,GAAG,EAAEC,SAAS,CAAC;EAC5C,IAAIC,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;IACtB,OAAOZ,GAAG,CAACY,GAAG,CAAC,CAAC,CAAC,CAAC;EACpB;EACA,OAAOb,EAAE,CAACa,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB;AAaA,OAAO,eAAeC,YAAYA,CAChCH,GAAW,EACwB;EACnC,IAAI;IACF,MAAME,GAAG,GAAG,MAAMP,KAAK,CAACQ,YAAY,CAACH,GAAG,CAAC;IACzC,IAAIE,GAAG,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;MACtB,OAAOZ,GAAG,CAACY,GAAG,CAAC,CAAC,CAAC,CAAC;IACpB;IACA,MAAME,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACJ,GAAG,CAAC,CAAC,CAAC,CAAC;IACjC,OAAOb,EAAE,CAACe,MAAM,CAAC;EACnB,CAAC,CAAC,OAAOG,CAAC,EAAE;IACV,OAAOjB,GAAG,CAACe,IAAI,CAACG,SAAS,CAACD,CAAC,CAAC,CAAC;EAC/B;AACF","ignoreList":[]}
@@ -1,3 +1,14 @@
1
1
  import { type Result } from '@synonymdev/result';
2
2
  export declare function auth(url: string, secretKey: string): Promise<Result<string[]>>;
3
+ type Capability = {
4
+ path: string;
5
+ permission: string;
6
+ };
7
+ type PubkyAuthDetails = {
8
+ relay: string;
9
+ capabilities: Capability[];
10
+ secret: string;
11
+ };
12
+ export declare function parseAuthUrl(url: string): Promise<Result<PubkyAuthDetails>>;
13
+ export {};
3
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAmB1D,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAM3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAmB1D,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAM3B;AAED,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAWnC"}
@@ -1,3 +1,14 @@
1
1
  import { type Result } from '@synonymdev/result';
2
2
  export declare function auth(url: string, secretKey: string): Promise<Result<string[]>>;
3
+ type Capability = {
4
+ path: string;
5
+ permission: string;
6
+ };
7
+ type PubkyAuthDetails = {
8
+ relay: string;
9
+ capabilities: Capability[];
10
+ secret: string;
11
+ };
12
+ export declare function parseAuthUrl(url: string): Promise<Result<PubkyAuthDetails>>;
13
+ export {};
3
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAmB1D,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAM3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.tsx"],"names":[],"mappings":"AACA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAmB1D,wBAAsB,IAAI,CACxB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAM3B;AAED,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAWnC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synonymdev/react-native-pubky",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "React Native Implementation of Pubky",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/commonjs/index.js",
@@ -49,7 +49,8 @@
49
49
  "cargo-build": "cd rust && cargo build && cd pubky && cargo build && cd pubky && cargo build && cd ../ && cd pubky-common && cargo build && cd ../ && cd pubky-homeserver && cargo build && cd ../../../",
50
50
  "update-bindings:ios": "npm run cargo-build && node setup-ios-bindings.js && npm run reinstall",
51
51
  "update-bindings:android": "npm run cargo-build && node setup-android-bindings.js && npm run reinstall",
52
- "update-bindings": "npm run reinstall && npm run cargo-build && npm run update-bindings:ios && npm run update-bindings:android"
52
+ "update-bindings": "npm run reinstall && npm run cargo-build && npm run update-bindings:ios && npm run update-bindings:android",
53
+ "rebuild": "rm -rf node_modules && cd example && rm -rf node_modules && cd ios && rm -rf Pods Podfile.lock build && cd ../../ && npm run cargo-build && yarn install && npm run update-bindings && cd example && yarn install && bundle install && cd ios && pod install && cd ../ && yarn build:ios && yarn ios"
53
54
  },
54
55
  "keywords": [
55
56
  "pubky",
package/src/index.tsx CHANGED
@@ -28,3 +28,29 @@ export async function auth(
28
28
  }
29
29
  return ok(res[1]);
30
30
  }
31
+
32
+ type Capability = {
33
+ path: string;
34
+ permission: string;
35
+ };
36
+
37
+ type PubkyAuthDetails = {
38
+ relay: string;
39
+ capabilities: Capability[];
40
+ secret: string;
41
+ };
42
+
43
+ export async function parseAuthUrl(
44
+ url: string
45
+ ): Promise<Result<PubkyAuthDetails>> {
46
+ try {
47
+ const res = await Pubky.parseAuthUrl(url);
48
+ if (res[0] === 'error') {
49
+ return err(res[1]);
50
+ }
51
+ const parsed = JSON.parse(res[1]);
52
+ return ok(parsed);
53
+ } catch (e) {
54
+ return err(JSON.stringify(e));
55
+ }
56
+ }