@openwallet-foundation/askar-react-native 0.7.0-alpha-20261028113056 → 0.7.0-alpha-20261106181830

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.
@@ -41,6 +41,11 @@ def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME").split("\\
41
41
 
42
42
  apply plugin: 'com.android.library'
43
43
 
44
+ // Generates the Java spec of the TurboModule from the codegen config in package.json
45
+ if (isNewArchitectureEnabled()) {
46
+ apply plugin: 'com.facebook.react'
47
+ }
48
+
44
49
  def getExt(name) {
45
50
  return rootProject.ext.get(name)
46
51
  }
@@ -66,11 +71,13 @@ android {
66
71
 
67
72
  buildFeatures {
68
73
  prefab true
74
+ buildConfig true
69
75
  }
70
76
 
71
77
  defaultConfig {
72
78
  minSdkVersion getExtWithFallback('minSdkVersion', 21)
73
79
  targetSdkVersion getExt('targetSdkVersion')
80
+ buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
74
81
 
75
82
  externalNativeBuild {
76
83
  cmake {
@@ -117,6 +124,12 @@ android {
117
124
  sourceSets {
118
125
  main {
119
126
  jniLibs.srcDirs = ['../native/mobile/android']
127
+ if (isNewArchitectureEnabled()) {
128
+ java.srcDirs += ["${project.buildDir}/generated/source/codegen/java"]
129
+ } else {
130
+ // A copy of the generated spec, as codegen only runs on the New Architecture
131
+ java.srcDirs += ['src/oldarch/java']
132
+ }
120
133
  }
121
134
  }
122
135
  }
@@ -1,6 +1,7 @@
1
1
  #include <jni.h>
2
2
  #include <jsi/jsi.h>
3
3
  #include <fbjni/fbjni.h>
4
+ #include <ReactCommon/BindingsInstallerHolder.h>
4
5
  #include <ReactCommon/CallInvokerHolder.h>
5
6
 
6
7
  #include "turboModuleUtility.h"
@@ -14,7 +15,10 @@ public:
14
15
  static constexpr auto TAG = "Askar";
15
16
 
16
17
  static void registerNatives() {
17
- javaClassStatic()->registerNatives({ makeNativeMethod("installNative", AskarModule::installNative) });
18
+ javaClassStatic()->registerNatives({
19
+ makeNativeMethod("installNative", AskarModule::installNative),
20
+ makeNativeMethod("getBindingsInstaller", AskarModule::getBindingsInstaller),
21
+ });
18
22
  }
19
23
 
20
24
  private:
@@ -27,6 +31,15 @@ private:
27
31
 
28
32
  askarTurboModuleUtility::registerTurboModule(*runtime, jsCallInvoker);
29
33
  }
34
+
35
+ // React Native calls the installer when it creates the TurboModule, with a valid runtime
36
+ // and call invoker also in bridgeless mode
37
+ static jni::local_ref<react::BindingsInstallerHolder::javaobject> getBindingsInstaller(jni::alias_ref<AskarModule>) {
38
+ return react::BindingsInstallerHolder::newObjectCxxArgs(
39
+ [](jsi::Runtime &runtime, const std::shared_ptr<react::CallInvoker> &callInvoker) {
40
+ askarTurboModuleUtility::registerTurboModule(runtime, callInvoker);
41
+ });
42
+ }
30
43
  };
31
44
 
32
45
  JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
@@ -2,38 +2,33 @@ package foundation.openwallet.askar;
2
2
 
3
3
  import android.util.Log;
4
4
  import androidx.annotation.Keep;
5
- import androidx.annotation.NonNull;
6
5
  import com.facebook.proguard.annotations.DoNotStrip;
7
6
  import com.facebook.react.bridge.ReactApplicationContext;
8
7
  import com.facebook.react.bridge.ReactContext;
9
- import com.facebook.react.bridge.ReactContextBaseJavaModule;
10
- import com.facebook.react.bridge.ReactMethod;
11
8
  import com.facebook.react.turbomodule.core.CallInvokerHolderImpl;
9
+ import com.facebook.react.turbomodule.core.interfaces.BindingsInstallerHolder;
10
+ import com.facebook.react.turbomodule.core.interfaces.TurboModuleWithJSIBindings;
12
11
 
13
12
  @Keep
14
13
  @DoNotStrip
15
- public class AskarModule extends ReactContextBaseJavaModule {
14
+ public class AskarModule extends NativeAskarSpec implements TurboModuleWithJSIBindings {
16
15
  static {
17
16
  System.loadLibrary("askarreactnative");
18
17
  }
19
18
 
20
- public static final String NAME = "Askar";
21
-
22
- static String TAG = "Askar";
23
-
24
19
  public AskarModule(ReactApplicationContext reactContext) {
25
20
  super(reactContext);
26
21
  }
27
22
 
23
+ // New Architecture: React Native installs the bindings that this returns when it creates the module
24
+ @DoNotStrip
28
25
  @Override
29
- @NonNull
30
- public String getName() {
31
- return TAG;
32
- }
26
+ public native BindingsInstallerHolder getBindingsInstaller();
33
27
 
34
28
  private static native void installNative(long jsiRuntimePointer, CallInvokerHolderImpl jsCallInvokerHolder);
35
29
 
36
- @ReactMethod(isBlockingSynchronousMethod = true)
30
+ // Old Architecture: install using the runtime of the bridge
31
+ @Override
37
32
  public boolean install() {
38
33
  try {
39
34
  ReactContext context = getReactApplicationContext();
@@ -1,23 +1,35 @@
1
1
  package foundation.openwallet.askar;
2
2
 
3
3
  import androidx.annotation.NonNull;
4
- import com.facebook.react.ReactPackage;
4
+ import androidx.annotation.Nullable;
5
+ import com.facebook.react.BaseReactPackage;
5
6
  import com.facebook.react.bridge.NativeModule;
6
7
  import com.facebook.react.bridge.ReactApplicationContext;
7
- import com.facebook.react.uimanager.ViewManager;
8
+ import com.facebook.react.module.model.ReactModuleInfo;
9
+ import com.facebook.react.module.model.ReactModuleInfoProvider;
8
10
  import java.util.Collections;
9
- import java.util.List;
10
11
 
11
- public class AskarPackage implements ReactPackage {
12
- @NonNull
12
+ public class AskarPackage extends BaseReactPackage {
13
+ @Nullable
13
14
  @Override
14
- public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
15
- return Collections.singletonList(new AskarModule(reactContext));
15
+ public NativeModule getModule(@NonNull String name, @NonNull ReactApplicationContext reactContext) {
16
+ return name.equals(NativeAskarSpec.NAME) ? new AskarModule(reactContext) : null;
16
17
  }
17
18
 
18
19
  @NonNull
19
20
  @Override
20
- public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
21
- return Collections.emptyList();
21
+ public ReactModuleInfoProvider getReactModuleInfoProvider() {
22
+ // A TurboModule isn't registered as a legacy native module, so only on the New Architecture
23
+ return () -> Collections.singletonMap(
24
+ NativeAskarSpec.NAME,
25
+ new ReactModuleInfo(
26
+ NativeAskarSpec.NAME,
27
+ AskarModule.class.getName(),
28
+ false, // canOverrideExistingModule
29
+ false, // needsEagerInit
30
+ false, // isCxxModule
31
+ BuildConfig.IS_NEW_ARCHITECTURE_ENABLED // isTurboModule
32
+ )
33
+ );
22
34
  }
23
35
  }
@@ -0,0 +1,27 @@
1
+ package foundation.openwallet.askar;
2
+
3
+ import com.facebook.proguard.annotations.DoNotStrip;
4
+ import com.facebook.react.bridge.ReactApplicationContext;
5
+ import com.facebook.react.bridge.ReactContextBaseJavaModule;
6
+ import com.facebook.react.bridge.ReactMethod;
7
+ import com.facebook.react.turbomodule.core.interfaces.TurboModule;
8
+ import javax.annotation.Nonnull;
9
+
10
+ // The spec that codegen generates from src/specs/NativeAskar.ts, for the old architecture where codegen doesn't run.
11
+ // Keep it in sync with the spec
12
+ public abstract class NativeAskarSpec extends ReactContextBaseJavaModule implements TurboModule {
13
+ public static final String NAME = "Askar";
14
+
15
+ public NativeAskarSpec(ReactApplicationContext reactContext) {
16
+ super(reactContext);
17
+ }
18
+
19
+ @Override
20
+ public @Nonnull String getName() {
21
+ return NAME;
22
+ }
23
+
24
+ @ReactMethod(isBlockingSynchronousMethod = true)
25
+ @DoNotStrip
26
+ public abstract boolean install();
27
+ }
package/askar.podspec CHANGED
@@ -24,8 +24,8 @@ Pod::Spec.new do |s|
24
24
  s.ios.vendored_frameworks = "native/mobile/ios/aries_askar.xcframework"
25
25
 
26
26
  s.source_files = "ios/**/*.{h,m,mm}", "cpp/**/*.{h,cpp}"
27
-
28
- s.dependency "React-Core"
29
- s.dependency "React-callinvoker"
30
- s.dependency "React"
27
+
28
+ # Adds the React Native dependencies, including the generated codegen spec, and defines
29
+ # RCT_NEW_ARCH_ENABLED when the app uses the New Architecture
30
+ install_modules_dependencies(s)
31
31
  end
package/build/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { AeadParams, ArcHandle, AskarError, EncryptedBuffer, EntryListHandle, Jwk, Key, KeyEntryListHandle, LocalKeyHandle, NativeAskar, ScanHandle, SessionHandle, StoreHandle, handleInvalidNullResponse } from "@openwallet-foundation/askar-shared";
2
- import { NativeModules } from "react-native";
2
+ import { TurboModuleRegistry } from "react-native";
3
3
  export * from "@openwallet-foundation/askar-shared";
4
4
  // src/serialize.ts
5
5
  const serialize = (arg) => {
@@ -611,8 +611,10 @@ var ReactNativeAskar = class {
611
611
  })));
612
612
  }
613
613
  };
614
+ // src/specs/NativeAskar.ts
615
+ var NativeAskar_default = TurboModuleRegistry.getEnforcing("Askar");
614
616
  // src/index.ts
615
- if (!NativeModules.Askar.install()) throw Error("Unable to install the turboModule: askar");
617
+ if (!("_askar" in globalThis) && !NativeAskar_default.install()) throw Error("Unable to install the turboModule: askar");
616
618
  if (!_askar) throw Error("_askar has not been exposed on global. Something went wrong while installing the turboModule");
617
619
  NativeAskar.register(new ReactNativeAskar(_askar));
618
620
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/serialize.ts","../src/ReactNativeAskar.ts","../src/index.ts"],"sourcesContent":["import { ArcHandle, Jwk, Key, ScanHandle, SessionHandle, StoreHandle } from '@openwallet-foundation/askar-shared'\n\nexport type ReturnObject<T = unknown> = {\n errorCode: number\n value?: null | T\n}\n\nexport type Callback = (o: ReturnObject<never>) => void\nexport type CallbackWithResponse<T = unknown> = (o: ReturnObject<T>) => void\n\ntype Argument =\n | Record<string, unknown>\n | unknown[]\n | Date\n | Uint8Array\n | SerializedArgument\n | boolean\n | StoreHandle\n | SessionHandle\n | ScanHandle\n | ArcHandle\n | Key\n | Jwk\n\n// ArcHandle is typed as Uint8Array | string for the Node.js bindings, and TypeScript 5.7 and later no longer accept a\n// Uint8Array as an ArrayBuffer\ntype SerializedArgument = string | number | bigint | Callback | CallbackWithResponse | ArrayBufferLike | Uint8Array\n\ntype SerializedArguments = Record<string, SerializedArgument>\n\nexport type SerializedOptions<Type> = {\n [Property in keyof Type]: Type[Property] extends string\n ? string\n : Type[Property] extends number\n ? number\n : Type[Property] extends Record<string, unknown>\n ? string\n : Type[Property] extends unknown[]\n ? string\n : Type[Property] extends unknown[] | undefined\n ? string\n : Type[Property] extends Record<string, unknown> | undefined\n ? string | undefined\n : Type[Property] extends Date\n ? number\n : Type[Property] extends Date | undefined\n ? number | undefined\n : Type[Property] extends string | undefined\n ? undefined | string\n : Type[Property] extends number | undefined\n ? undefined | number\n : Type[Property] extends Callback\n ? Callback\n : Type[Property] extends CallbackWithResponse\n ? CallbackWithResponse\n : Type[Property] extends Uint8Array\n ? ArrayBuffer\n : Type[Property] extends Uint8Array | undefined\n ? ArrayBuffer\n : Type[Property] extends StoreHandle\n ? number\n : Type[Property] extends SessionHandle\n ? number\n : Type[Property] extends ScanHandle\n ? number\n : Type[Property] extends ArcHandle\n ? string\n : Type[Property] extends Jwk\n ? string\n : unknown\n}\n\nconst serialize = (arg: Argument): SerializedArgument => {\n switch (typeof arg) {\n case 'undefined':\n return arg\n case 'string':\n return arg\n case 'boolean':\n return Number(arg)\n case 'number':\n return arg\n case 'function':\n return arg\n case 'object':\n if (arg instanceof Date) {\n return arg.valueOf()\n }\n if (arg instanceof Uint8Array) {\n return arg.buffer\n }\n if (arg instanceof Jwk) {\n return arg.toUint8Array().buffer\n }\n if (arg instanceof Key) {\n return arg.handle.handle\n }\n if (\n arg instanceof StoreHandle ||\n arg instanceof SessionHandle ||\n arg instanceof ScanHandle ||\n arg instanceof ArcHandle\n ) {\n return arg.handle\n }\n return JSON.stringify(arg)\n default:\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Could not serialize value ${arg}`)\n }\n}\n\nconst serializeArguments = <T extends Record<string, Argument> = Record<string, Argument>>(\n args: T\n): SerializedOptions<T> => {\n const retVal: SerializedArguments = {}\n for (const [key, value] of Object.entries(args)) {\n retVal[key] = serialize(value)\n }\n return retVal as SerializedOptions<T>\n}\n\nexport { serializeArguments }\n","import type {\n Argon2DerivePasswordOptions,\n Askar,\n AskarErrorObject,\n EntryListCountOptions,\n EntryListFreeOptions,\n EntryListGetCategoryOptions,\n EntryListGetNameOptions,\n EntryListGetTagsOptions,\n EntryListGetValueOptions,\n KeyAeadDecryptOptions,\n KeyAeadEncryptOptions,\n KeyAeadGetPaddingOptions,\n KeyAeadGetParamsOptions,\n KeyAeadRandomNonceOptions,\n KeyConvertOptions,\n KeyCryptoBoxOpenOptions,\n KeyCryptoBoxOptions,\n KeyCryptoBoxSealOpenOptions,\n KeyCryptoBoxSealOptions,\n KeyDeriveEcdh1puOptions,\n KeyDeriveEcdhEsOptions,\n KeyEntryListCountOptions,\n KeyEntryListFreeOptions,\n KeyEntryListGetAlgorithmOptions,\n KeyEntryListGetMetadataOptions,\n KeyEntryListGetNameOptions,\n KeyEntryListGetTagsOptions,\n KeyEntryListLoadLocalOptions,\n KeyFreeOptions,\n KeyFromJwkOptions,\n KeyFromKeyExchangeOptions,\n KeyFromPublicBytesOptions,\n KeyFromSecretBytesOptions,\n KeyFromSeedOptions,\n KeyGenerateOptions,\n KeyGetAlgorithmOptions,\n KeyGetEphemeralOptions,\n KeyGetJwkPublicOptions,\n KeyGetJwkSecretOptions,\n KeyGetJwkThumbprintOptions,\n KeyGetPublicBytesOptions,\n KeyGetSecretBytesOptions,\n KeySignMessageOptions,\n KeyUnwrapKeyOptions,\n KeyVerifySignatureOptions,\n KeyWrapKeyOptions,\n MigrateIndySdkOptions,\n ScanFreeOptions,\n ScanNextOptions,\n ScanStartOptions,\n SessionCloseOptions,\n SessionCountOptions,\n SessionFetchAllKeysOptions,\n SessionFetchAllOptions,\n SessionFetchKeyOptions,\n SessionFetchOptions,\n SessionInsertKeyOptions,\n SessionRemoveAllOptions,\n SessionRemoveKeyOptions,\n SessionStartOptions,\n SessionUpdateKeyOptions,\n SessionUpdateOptions,\n StoreCloseOptions,\n StoreCopyProfileOptions,\n StoreCopyToOptions,\n StoreCreateProfileOptions,\n StoreGenerateRawKeyOptions,\n StoreGetDefaultProfileOptions,\n StoreGetProfileNameOptions,\n StoreListProfilesOptions,\n StoreListScansOptions,\n StoreListSessionsOptions,\n StoreOpenOptions,\n StoreProvisionOptions,\n StoreRekeyOptions,\n StoreRemoveOptions,\n StoreRemoveProfileOptions,\n StoreRenameProfileOptions,\n StoreSetDefaultProfileOptions,\n} from '@openwallet-foundation/askar-shared'\nimport {\n AeadParams,\n AskarError,\n EncryptedBuffer,\n EntryListHandle,\n handleInvalidNullResponse,\n KeyEntryListHandle,\n LocalKeyHandle,\n ScanHandle,\n SessionHandle,\n StoreHandle,\n} from '@openwallet-foundation/askar-shared'\nimport type { NativeBindings } from './NativeBindings'\nimport type { Callback, CallbackWithResponse, ReturnObject } from './serialize'\nimport { serializeArguments } from './serialize'\n\nexport class ReactNativeAskar implements Askar {\n private askar: NativeBindings\n\n public constructor(bindings: NativeBindings) {\n this.askar = bindings\n }\n\n /**\n * Fetch the error from the native library and return it as a JS error\n *\n * NOTE:\n * Checks whether the error code of the returned error matches the error code that was passed to the function.\n * If it doesn't, we throw an error with the original errorCode, and a custom message explaining we weren't able\n * to retrieve the error message from the native library. This should however not break functionality as long as\n * error codes are used rather than error messages for error handling.\n *\n */\n private getAskarError(errorCode: number): AskarError {\n const error = this.getCurrentError()\n if (error.code !== errorCode) {\n return new AskarError({\n code: errorCode,\n message:\n 'Error details have already been overwritten on the native side, unable to retrieve error message for the error',\n })\n }\n\n return new AskarError(error)\n }\n\n private handleError<T>({ errorCode, value }: ReturnObject<T>): T {\n if (errorCode === 0) return value as T\n throw this.getAskarError(errorCode)\n }\n\n private promisify(method: (cb: Callback) => void): Promise<void> {\n return new Promise((resolve, reject) => {\n const _cb: Callback = ({ errorCode }) => {\n try {\n this.handleError({ errorCode })\n resolve()\n } catch (e) {\n reject(e)\n }\n }\n\n method(_cb)\n })\n }\n\n private promisifyWithResponse<Return>(method: (cb: CallbackWithResponse<Return>) => void): Promise<Return | null> {\n return new Promise((resolve, reject) => {\n const _cb: CallbackWithResponse<Return> = ({ errorCode, value }) => {\n if (errorCode !== 0) {\n const error = this.getAskarError(errorCode)\n reject(error)\n } else {\n if (value === undefined) {\n reject(AskarError.customError({ message: 'error code was 0 but no value found. This should not occur.' }))\n } else {\n resolve(value)\n }\n }\n }\n method(_cb)\n })\n }\n\n public version(): string {\n return handleInvalidNullResponse(this.askar.version({}))\n }\n\n public getCurrentError(): AskarErrorObject {\n const serializedError = handleInvalidNullResponse(this.askar.getCurrentError({}))\n return JSON.parse(serializedError) as AskarErrorObject\n }\n\n public clearCustomLogger(): void {\n throw new Error('Method not implemented. clearCustomLogger')\n }\n\n public setCustomLogger(): void {\n throw new Error('Method not implemented. setCustomLogger')\n }\n\n public setDefaultLogger(): void {\n this.askar.setDefaultLogger({})\n }\n\n public setMaxLogLevel(): void {\n throw new Error('Method not implemented. setMaxLogLevel')\n }\n\n public argon2DerivePassword(options: Argon2DerivePasswordOptions): Uint8Array {\n const { config, ...rest } = options\n // The config is passed as an object, and only when set: the C++ reads it when the property exists\n const buf = handleInvalidNullResponse(\n this.handleError(this.askar.argon2DerivePassword({ ...serializeArguments(rest), ...(config && { config }) }))\n )\n return new Uint8Array(buf)\n }\n\n public entryListCount(options: EntryListCountOptions): number {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.entryListCount(serializedOptions)))\n }\n\n public entryListFree(options: EntryListFreeOptions): void {\n const serializedOptions = serializeArguments(options)\n\n // null response is expected as we're freeing the object\n this.handleError(this.askar.entryListFree(serializedOptions))\n }\n\n public entryListGetCategory(options: EntryListGetCategoryOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.entryListGetCategory(serializedOptions)))\n }\n\n public entryListGetName(options: EntryListGetNameOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.entryListGetName(serializedOptions)))\n }\n\n public entryListGetTags(options: EntryListGetTagsOptions): string | null {\n const serializedOptions = serializeArguments(options)\n return this.handleError(this.askar.entryListGetTags(serializedOptions))\n }\n\n public entryListGetValue(options: EntryListGetValueOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.entryListGetValue(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyAeadDecrypt(options: KeyAeadDecryptOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyAeadDecrypt(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyAeadEncrypt(options: KeyAeadEncryptOptions): EncryptedBuffer {\n const serializedOptions = serializeArguments(options)\n const ret = this.handleError(this.askar.keyAeadEncrypt(serializedOptions))\n\n const { buffer, noncePos, tagPos } = handleInvalidNullResponse(ret)\n\n return new EncryptedBuffer({ tagPos, noncePos, buffer: new Uint8Array(buffer) })\n }\n\n public keyAeadGetPadding(options: KeyAeadGetPaddingOptions): number {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyAeadGetPadding(serializedOptions)))\n }\n\n public keyAeadGetParams(options: KeyAeadGetParamsOptions): AeadParams {\n const serializedOptions = serializeArguments(options)\n const ret = this.handleError(this.askar.keyAeadGetParams(serializedOptions))\n\n const { tagLength, nonceLength } = handleInvalidNullResponse(ret)\n\n return new AeadParams({ nonceLength, tagLength })\n }\n\n public keyAeadRandomNonce(options: KeyAeadRandomNonceOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyAeadRandomNonce(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyConvert(options: KeyConvertOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyConvert(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyCryptoBox(options: KeyCryptoBoxOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyCryptoBox(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyCryptoBoxOpen(options: KeyCryptoBoxOpenOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyCryptoBoxOpen(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyCryptoBoxRandomNonce(): Uint8Array {\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyCryptoBoxRandomNonce({})))\n return new Uint8Array(buf)\n }\n\n public keyCryptoBoxSeal(options: KeyCryptoBoxSealOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyCryptoBoxSeal(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyCryptoBoxSealOpen(options: KeyCryptoBoxSealOpenOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyCryptoBoxSealOpen(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyDeriveEcdh1pu(options: KeyDeriveEcdh1puOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyDeriveEcdh1pu(serializedOptions)))\n return new LocalKeyHandle(handle)\n }\n\n public keyDeriveEcdhEs(options: KeyDeriveEcdhEsOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyDeriveEcdhEs(serializedOptions)))\n return new LocalKeyHandle(handle)\n }\n\n public keyEntryListCount(options: KeyEntryListCountOptions): number {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyEntryListCount(serializedOptions)))\n }\n\n public keyEntryListFree(options: KeyEntryListFreeOptions): void {\n const serializedOptions = serializeArguments(options)\n\n // null resopnse is expected as we're freeing the object\n this.handleError(this.askar.keyEntryListFree(serializedOptions))\n }\n\n public keyEntryListGetAlgorithm(options: KeyEntryListGetAlgorithmOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyEntryListGetAlgorithm(serializedOptions)))\n }\n\n public keyEntryListGetMetadata(options: KeyEntryListGetMetadataOptions): string | null {\n const serializedOptions = serializeArguments(options)\n return this.handleError(this.askar.keyEntryListGetMetadata(serializedOptions))\n }\n\n public keyEntryListGetName(options: KeyEntryListGetNameOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyEntryListGetName(serializedOptions)))\n }\n\n public keyEntryListGetTags(options: KeyEntryListGetTagsOptions): string | null {\n const serializedOptions = serializeArguments(options)\n return this.handleError(this.askar.keyEntryListGetTags(serializedOptions))\n }\n\n public keyEntryListLoadLocal(options: KeyEntryListLoadLocalOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyEntryListLoadLocal(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyFree(options: KeyFreeOptions): void {\n const serializedOptions = serializeArguments(options)\n\n // null resopnse is expected as we're freeing the object\n this.handleError(this.askar.keyFree(serializedOptions))\n }\n\n public keyFromJwk(options: KeyFromJwkOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyFromJwk(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyFromKeyExchange(options: KeyFromKeyExchangeOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyFromKeyExchange(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyFromPublicBytes(options: KeyFromPublicBytesOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyFromPublicBytes(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyFromSecretBytes(options: KeyFromSecretBytesOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyFromSecretBytes(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyFromSeed(options: KeyFromSeedOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyFromSeed(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyGenerate(options: KeyGenerateOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyGenerate(serializedOptions)))\n\n return new LocalKeyHandle(handleInvalidNullResponse(handle))\n }\n\n public keyGetAlgorithm(options: KeyGetAlgorithmOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyGetAlgorithm(serializedOptions)))\n }\n\n public keyGetEphemeral(options: KeyGetEphemeralOptions): number {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyGetEphemeral(serializedOptions)))\n }\n\n public keyGetJwkPublic(options: KeyGetJwkPublicOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyGetJwkPublic(serializedOptions)))\n }\n\n public keyGetJwkSecret(options: KeyGetJwkSecretOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyGetJwkSecret(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyGetJwkThumbprint(options: KeyGetJwkThumbprintOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyGetJwkThumbprint(serializedOptions)))\n }\n\n public keyGetPublicBytes(options: KeyGetPublicBytesOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyGetPublicBytes(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyGetSupportedBackends(): string[] {\n const stringListHandle = handleInvalidNullResponse(this.handleError(this.askar.keyGetSupportedBackends({})))\n return this.stringListToArray(stringListHandle)\n }\n\n public keyGetSecretBytes(options: KeyGetSecretBytesOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyGetSecretBytes(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keySignMessage(options: KeySignMessageOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keySignMessage(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyUnwrapKey(options: KeyUnwrapKeyOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyUnwrapKey(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyVerifySignature(options: KeyVerifySignatureOptions): boolean {\n const serializedOptions = serializeArguments(options)\n const result = this.handleError(this.askar.keyVerifySignature(serializedOptions))\n\n return !!result\n }\n\n public keyWrapKey(options: KeyWrapKeyOptions): EncryptedBuffer {\n const serializedOptions = serializeArguments(options)\n const ret = this.handleError(this.askar.keyWrapKey(serializedOptions))\n\n const { buffer, noncePos, tagPos } = handleInvalidNullResponse(ret)\n\n return new EncryptedBuffer({ tagPos, noncePos, buffer: new Uint8Array(buffer) })\n }\n\n public scanFree(options: ScanFreeOptions): void {\n const serializedOptions = serializeArguments(options)\n\n // null resopnse is expected as we're freeing the object\n this.handleError(this.askar.scanFree(serializedOptions))\n }\n\n public async scanNext(options: ScanNextOptions) {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.scanNext({ cb, ...serializedOptions }))\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async scanStart(options: ScanStartOptions): Promise<ScanHandle> {\n const { category, storeHandle, limit, offset, profile, tagFilter, orderBy, descending } =\n serializeArguments(options)\n const handle = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(\n this.askar.scanStart({\n cb,\n category,\n storeHandle,\n offset: offset || 0,\n limit: limit || -1,\n orderBy,\n descending,\n profile,\n tagFilter,\n })\n )\n )\n\n return ScanHandle.fromHandle(handle)\n }\n\n public sessionClose(options: SessionCloseOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.sessionClose({ cb, ...serializedOptions })))\n }\n\n public async sessionCount(options: SessionCountOptions): Promise<number> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.sessionCount({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async sessionFetch(options: SessionFetchOptions) {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.sessionFetch({ cb, ...serializedOptions }))\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async sessionFetchAll(options: SessionFetchAllOptions) {\n const { category, sessionHandle, forUpdate, limit, tagFilter, descending, orderBy } = serializeArguments(options)\n const handle = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(\n this.askar.sessionFetchAll({\n cb,\n category,\n sessionHandle,\n forUpdate,\n limit: limit || -1,\n tagFilter,\n orderBy,\n descending,\n })\n )\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async sessionFetchAllKeys(options: SessionFetchAllKeysOptions) {\n const { sessionHandle, algorithm, forUpdate, limit, thumbprint, tagFilter } = serializeArguments(options)\n const handle = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(\n this.askar.sessionFetchAllKeys({\n cb,\n sessionHandle,\n algorithm,\n forUpdate: forUpdate || -1,\n limit: limit || -1,\n thumbprint,\n tagFilter,\n })\n )\n )\n\n return KeyEntryListHandle.fromHandle(handle)\n }\n public async sessionFetchKey(options: SessionFetchKeyOptions) {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.sessionFetchKey({ cb, ...serializedOptions }))\n )\n\n return KeyEntryListHandle.fromHandle(handle)\n }\n\n public sessionInsertKey(options: SessionInsertKeyOptions): Promise<void> {\n const { sessionHandle, name, localKeyHandle, expiryMs, metadata, tags } = serializeArguments(options)\n return this.promisify((cb) =>\n this.handleError(\n this.askar.sessionInsertKey({\n cb,\n sessionHandle,\n name,\n localKeyHandle,\n expiryMs: expiryMs || -1,\n metadata,\n tags,\n })\n )\n )\n }\n\n public async sessionRemoveAll(options: SessionRemoveAllOptions): Promise<number> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.sessionRemoveAll({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public sessionRemoveKey(options: SessionRemoveKeyOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.sessionRemoveKey({ cb, ...serializedOptions })))\n }\n\n public async sessionStart(options: SessionStartOptions): Promise<SessionHandle> {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.sessionStart({ cb, ...serializedOptions }))\n )\n\n return SessionHandle.fromHandle(handle)\n }\n\n public sessionUpdate(options: SessionUpdateOptions): Promise<void> {\n const { category, name, operation, sessionHandle, expiryMs, tags, value } = serializeArguments(options)\n return this.promisify((cb) =>\n this.handleError(\n this.askar.sessionUpdate({\n cb,\n category,\n name,\n operation,\n sessionHandle,\n expiryMs: expiryMs || -1,\n tags,\n value,\n })\n )\n )\n }\n\n public sessionUpdateKey(options: SessionUpdateKeyOptions): Promise<void> {\n // -1 for no expiry, as the C++ reads a missing expiryMs as 0, which expires the key right away\n const serializedOptions = serializeArguments({ ...options, expiryMs: options.expiryMs ?? -1 })\n return this.promisify((cb) => this.handleError(this.askar.sessionUpdateKey({ cb, ...serializedOptions })))\n }\n\n public storeClose(options: StoreCloseOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.storeClose({ cb, ...serializedOptions })))\n }\n\n // TODO: change when updating to 0.6.0\n public async storeCopyTo(options: StoreCopyToOptions): Promise<StoreHandle> {\n const serializedOptions = serializeArguments(options)\n\n const handle = await this.promisifyWithResponse<number>((cb) => {\n this.handleError(this.askar.storeCopy({ cb, ...serializedOptions }))\n })\n\n return StoreHandle.fromHandle(handle)\n }\n\n public async storeCreateProfile(options: StoreCreateProfileOptions): Promise<string> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.storeCreateProfile({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public storeGenerateRawKey(options: StoreGenerateRawKeyOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.storeGenerateRawKey(serializedOptions)))\n }\n\n public async storeGetProfileName(options: StoreGetProfileNameOptions): Promise<string> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.storeGetProfileName({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeGetDefaultProfile(options: StoreGetDefaultProfileOptions): Promise<string> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.storeGetDefaultProfile({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeListProfiles(options: StoreListProfilesOptions): Promise<string[]> {\n const serializedOptions = serializeArguments(options)\n const stringListHandle = handleInvalidNullResponse(\n await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.storeListProfiles({ cb, ...serializedOptions }))\n )\n )\n return this.stringListToArray(stringListHandle)\n }\n\n public async storeListScans(options: StoreListScansOptions): Promise<ScanHandle[]> {\n const serializedOptions = serializeArguments(options)\n const handles = await this.promisifyWithResponse<number[]>((cb) =>\n this.handleError(this.askar.storeListScans({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(handles).map((handle) => ScanHandle.fromHandle(handle))\n }\n\n public async storeListSessions(options: StoreListSessionsOptions): Promise<SessionHandle[]> {\n const serializedOptions = serializeArguments(options)\n const handles = await this.promisifyWithResponse<number[]>((cb) =>\n this.handleError(this.askar.storeListSessions({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(handles).map((handle) => SessionHandle.fromHandle(handle))\n }\n\n // Reads the items of a string list from the native library and frees it\n private stringListToArray(stringListHandle: string): string[] {\n const items = []\n const count = this.handleError(this.askar.stringListCount({ stringListHandle }))\n for (let index = 0; index < count; index++) {\n items.push(this.handleError(this.askar.stringListGetItem({ stringListHandle, index })))\n }\n this.handleError(this.askar.stringListFree({ stringListHandle }))\n return items\n }\n\n public async storeOpen(options: StoreOpenOptions): Promise<StoreHandle> {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.storeOpen({ cb, ...serializedOptions }))\n )\n\n return StoreHandle.fromHandle(handle)\n }\n\n public async storeProvision(options: StoreProvisionOptions): Promise<StoreHandle> {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.storeProvision({ cb, ...serializedOptions }))\n )\n\n return StoreHandle.fromHandle(handle)\n }\n\n public storeRekey(options: StoreRekeyOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.storeRekey({ cb, ...serializedOptions })))\n }\n\n public async storeRemove(options: StoreRemoveOptions): Promise<number> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.storeRemove({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeRemoveProfile(options: StoreRemoveProfileOptions): Promise<number> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.storeRemoveProfile({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeRenameProfile(options: StoreRenameProfileOptions): Promise<number> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.storeRenameProfile({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeCopyProfile(options: StoreCopyProfileOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.storeCopyProfile({ cb, ...serializedOptions })))\n }\n\n public async storeSetDefaultProfile(options: StoreSetDefaultProfileOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.storeSetDefaultProfile({ cb, ...serializedOptions })))\n }\n\n public async migrateIndySdk(options: MigrateIndySdkOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.migrateIndySdk({ cb, ...serializedOptions })))\n }\n}\n","import { NativeAskar } from '@openwallet-foundation/askar-shared'\nimport { NativeModules } from 'react-native'\n\nimport type { NativeBindings } from './NativeBindings'\nimport { ReactNativeAskar } from './ReactNativeAskar'\n\n// Reexport everything from shared\nexport * from '@openwallet-foundation/askar-shared'\n\nconst module = NativeModules.Askar as { install: () => boolean }\nif (!module.install()) throw Error('Unable to install the turboModule: askar')\n\n// This can already check whether `_askar` exists on global\nif (!_askar) {\n throw Error('_askar has not been exposed on global. Something went wrong while installing the turboModule')\n}\n\ndeclare let _askar: NativeBindings\n\nNativeAskar.register(new ReactNativeAskar(_askar))\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["AskarModule"],"sources":["../src/serialize.ts","../src/ReactNativeAskar.ts","../src/specs/NativeAskar.ts","../src/index.ts"],"sourcesContent":["import { ArcHandle, Jwk, Key, ScanHandle, SessionHandle, StoreHandle } from '@openwallet-foundation/askar-shared'\n\nexport type ReturnObject<T = unknown> = {\n errorCode: number\n value?: null | T\n}\n\nexport type Callback = (o: ReturnObject<never>) => void\nexport type CallbackWithResponse<T = unknown> = (o: ReturnObject<T>) => void\n\ntype Argument =\n | Record<string, unknown>\n | unknown[]\n | Date\n | Uint8Array\n | SerializedArgument\n | boolean\n | StoreHandle\n | SessionHandle\n | ScanHandle\n | ArcHandle\n | Key\n | Jwk\n\n// ArcHandle is typed as Uint8Array | string for the Node.js bindings, and TypeScript 5.7 and later no longer accept a\n// Uint8Array as an ArrayBuffer\ntype SerializedArgument = string | number | bigint | Callback | CallbackWithResponse | ArrayBufferLike | Uint8Array\n\ntype SerializedArguments = Record<string, SerializedArgument>\n\nexport type SerializedOptions<Type> = {\n [Property in keyof Type]: Type[Property] extends string\n ? string\n : Type[Property] extends number\n ? number\n : Type[Property] extends Record<string, unknown>\n ? string\n : Type[Property] extends unknown[]\n ? string\n : Type[Property] extends unknown[] | undefined\n ? string\n : Type[Property] extends Record<string, unknown> | undefined\n ? string | undefined\n : Type[Property] extends Date\n ? number\n : Type[Property] extends Date | undefined\n ? number | undefined\n : Type[Property] extends string | undefined\n ? undefined | string\n : Type[Property] extends number | undefined\n ? undefined | number\n : Type[Property] extends Callback\n ? Callback\n : Type[Property] extends CallbackWithResponse\n ? CallbackWithResponse\n : Type[Property] extends Uint8Array\n ? ArrayBuffer\n : Type[Property] extends Uint8Array | undefined\n ? ArrayBuffer\n : Type[Property] extends StoreHandle\n ? number\n : Type[Property] extends SessionHandle\n ? number\n : Type[Property] extends ScanHandle\n ? number\n : Type[Property] extends ArcHandle\n ? string\n : Type[Property] extends Jwk\n ? string\n : unknown\n}\n\nconst serialize = (arg: Argument): SerializedArgument => {\n switch (typeof arg) {\n case 'undefined':\n return arg\n case 'string':\n return arg\n case 'boolean':\n return Number(arg)\n case 'number':\n return arg\n case 'function':\n return arg\n case 'object':\n if (arg instanceof Date) {\n return arg.valueOf()\n }\n if (arg instanceof Uint8Array) {\n return arg.buffer\n }\n if (arg instanceof Jwk) {\n return arg.toUint8Array().buffer\n }\n if (arg instanceof Key) {\n return arg.handle.handle\n }\n if (\n arg instanceof StoreHandle ||\n arg instanceof SessionHandle ||\n arg instanceof ScanHandle ||\n arg instanceof ArcHandle\n ) {\n return arg.handle\n }\n return JSON.stringify(arg)\n default:\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n throw new Error(`Could not serialize value ${arg}`)\n }\n}\n\nconst serializeArguments = <T extends Record<string, Argument> = Record<string, Argument>>(\n args: T\n): SerializedOptions<T> => {\n const retVal: SerializedArguments = {}\n for (const [key, value] of Object.entries(args)) {\n retVal[key] = serialize(value)\n }\n return retVal as SerializedOptions<T>\n}\n\nexport { serializeArguments }\n","import type {\n Argon2DerivePasswordOptions,\n Askar,\n AskarErrorObject,\n EntryListCountOptions,\n EntryListFreeOptions,\n EntryListGetCategoryOptions,\n EntryListGetNameOptions,\n EntryListGetTagsOptions,\n EntryListGetValueOptions,\n KeyAeadDecryptOptions,\n KeyAeadEncryptOptions,\n KeyAeadGetPaddingOptions,\n KeyAeadGetParamsOptions,\n KeyAeadRandomNonceOptions,\n KeyConvertOptions,\n KeyCryptoBoxOpenOptions,\n KeyCryptoBoxOptions,\n KeyCryptoBoxSealOpenOptions,\n KeyCryptoBoxSealOptions,\n KeyDeriveEcdh1puOptions,\n KeyDeriveEcdhEsOptions,\n KeyEntryListCountOptions,\n KeyEntryListFreeOptions,\n KeyEntryListGetAlgorithmOptions,\n KeyEntryListGetMetadataOptions,\n KeyEntryListGetNameOptions,\n KeyEntryListGetTagsOptions,\n KeyEntryListLoadLocalOptions,\n KeyFreeOptions,\n KeyFromJwkOptions,\n KeyFromKeyExchangeOptions,\n KeyFromPublicBytesOptions,\n KeyFromSecretBytesOptions,\n KeyFromSeedOptions,\n KeyGenerateOptions,\n KeyGetAlgorithmOptions,\n KeyGetEphemeralOptions,\n KeyGetJwkPublicOptions,\n KeyGetJwkSecretOptions,\n KeyGetJwkThumbprintOptions,\n KeyGetPublicBytesOptions,\n KeyGetSecretBytesOptions,\n KeySignMessageOptions,\n KeyUnwrapKeyOptions,\n KeyVerifySignatureOptions,\n KeyWrapKeyOptions,\n MigrateIndySdkOptions,\n ScanFreeOptions,\n ScanNextOptions,\n ScanStartOptions,\n SessionCloseOptions,\n SessionCountOptions,\n SessionFetchAllKeysOptions,\n SessionFetchAllOptions,\n SessionFetchKeyOptions,\n SessionFetchOptions,\n SessionInsertKeyOptions,\n SessionRemoveAllOptions,\n SessionRemoveKeyOptions,\n SessionStartOptions,\n SessionUpdateKeyOptions,\n SessionUpdateOptions,\n StoreCloseOptions,\n StoreCopyProfileOptions,\n StoreCopyToOptions,\n StoreCreateProfileOptions,\n StoreGenerateRawKeyOptions,\n StoreGetDefaultProfileOptions,\n StoreGetProfileNameOptions,\n StoreListProfilesOptions,\n StoreListScansOptions,\n StoreListSessionsOptions,\n StoreOpenOptions,\n StoreProvisionOptions,\n StoreRekeyOptions,\n StoreRemoveOptions,\n StoreRemoveProfileOptions,\n StoreRenameProfileOptions,\n StoreSetDefaultProfileOptions,\n} from '@openwallet-foundation/askar-shared'\nimport {\n AeadParams,\n AskarError,\n EncryptedBuffer,\n EntryListHandle,\n handleInvalidNullResponse,\n KeyEntryListHandle,\n LocalKeyHandle,\n ScanHandle,\n SessionHandle,\n StoreHandle,\n} from '@openwallet-foundation/askar-shared'\nimport type { NativeBindings } from './NativeBindings'\nimport type { Callback, CallbackWithResponse, ReturnObject } from './serialize'\nimport { serializeArguments } from './serialize'\n\nexport class ReactNativeAskar implements Askar {\n private askar: NativeBindings\n\n public constructor(bindings: NativeBindings) {\n this.askar = bindings\n }\n\n /**\n * Fetch the error from the native library and return it as a JS error\n *\n * NOTE:\n * Checks whether the error code of the returned error matches the error code that was passed to the function.\n * If it doesn't, we throw an error with the original errorCode, and a custom message explaining we weren't able\n * to retrieve the error message from the native library. This should however not break functionality as long as\n * error codes are used rather than error messages for error handling.\n *\n */\n private getAskarError(errorCode: number): AskarError {\n const error = this.getCurrentError()\n if (error.code !== errorCode) {\n return new AskarError({\n code: errorCode,\n message:\n 'Error details have already been overwritten on the native side, unable to retrieve error message for the error',\n })\n }\n\n return new AskarError(error)\n }\n\n private handleError<T>({ errorCode, value }: ReturnObject<T>): T {\n if (errorCode === 0) return value as T\n throw this.getAskarError(errorCode)\n }\n\n private promisify(method: (cb: Callback) => void): Promise<void> {\n return new Promise((resolve, reject) => {\n const _cb: Callback = ({ errorCode }) => {\n try {\n this.handleError({ errorCode })\n resolve()\n } catch (e) {\n reject(e)\n }\n }\n\n method(_cb)\n })\n }\n\n private promisifyWithResponse<Return>(method: (cb: CallbackWithResponse<Return>) => void): Promise<Return | null> {\n return new Promise((resolve, reject) => {\n const _cb: CallbackWithResponse<Return> = ({ errorCode, value }) => {\n if (errorCode !== 0) {\n const error = this.getAskarError(errorCode)\n reject(error)\n } else {\n if (value === undefined) {\n reject(AskarError.customError({ message: 'error code was 0 but no value found. This should not occur.' }))\n } else {\n resolve(value)\n }\n }\n }\n method(_cb)\n })\n }\n\n public version(): string {\n return handleInvalidNullResponse(this.askar.version({}))\n }\n\n public getCurrentError(): AskarErrorObject {\n const serializedError = handleInvalidNullResponse(this.askar.getCurrentError({}))\n return JSON.parse(serializedError) as AskarErrorObject\n }\n\n public clearCustomLogger(): void {\n throw new Error('Method not implemented. clearCustomLogger')\n }\n\n public setCustomLogger(): void {\n throw new Error('Method not implemented. setCustomLogger')\n }\n\n public setDefaultLogger(): void {\n this.askar.setDefaultLogger({})\n }\n\n public setMaxLogLevel(): void {\n throw new Error('Method not implemented. setMaxLogLevel')\n }\n\n public argon2DerivePassword(options: Argon2DerivePasswordOptions): Uint8Array {\n const { config, ...rest } = options\n // The config is passed as an object, and only when set: the C++ reads it when the property exists\n const buf = handleInvalidNullResponse(\n this.handleError(this.askar.argon2DerivePassword({ ...serializeArguments(rest), ...(config && { config }) }))\n )\n return new Uint8Array(buf)\n }\n\n public entryListCount(options: EntryListCountOptions): number {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.entryListCount(serializedOptions)))\n }\n\n public entryListFree(options: EntryListFreeOptions): void {\n const serializedOptions = serializeArguments(options)\n\n // null response is expected as we're freeing the object\n this.handleError(this.askar.entryListFree(serializedOptions))\n }\n\n public entryListGetCategory(options: EntryListGetCategoryOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.entryListGetCategory(serializedOptions)))\n }\n\n public entryListGetName(options: EntryListGetNameOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.entryListGetName(serializedOptions)))\n }\n\n public entryListGetTags(options: EntryListGetTagsOptions): string | null {\n const serializedOptions = serializeArguments(options)\n return this.handleError(this.askar.entryListGetTags(serializedOptions))\n }\n\n public entryListGetValue(options: EntryListGetValueOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.entryListGetValue(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyAeadDecrypt(options: KeyAeadDecryptOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyAeadDecrypt(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyAeadEncrypt(options: KeyAeadEncryptOptions): EncryptedBuffer {\n const serializedOptions = serializeArguments(options)\n const ret = this.handleError(this.askar.keyAeadEncrypt(serializedOptions))\n\n const { buffer, noncePos, tagPos } = handleInvalidNullResponse(ret)\n\n return new EncryptedBuffer({ tagPos, noncePos, buffer: new Uint8Array(buffer) })\n }\n\n public keyAeadGetPadding(options: KeyAeadGetPaddingOptions): number {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyAeadGetPadding(serializedOptions)))\n }\n\n public keyAeadGetParams(options: KeyAeadGetParamsOptions): AeadParams {\n const serializedOptions = serializeArguments(options)\n const ret = this.handleError(this.askar.keyAeadGetParams(serializedOptions))\n\n const { tagLength, nonceLength } = handleInvalidNullResponse(ret)\n\n return new AeadParams({ nonceLength, tagLength })\n }\n\n public keyAeadRandomNonce(options: KeyAeadRandomNonceOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyAeadRandomNonce(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyConvert(options: KeyConvertOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyConvert(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyCryptoBox(options: KeyCryptoBoxOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyCryptoBox(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyCryptoBoxOpen(options: KeyCryptoBoxOpenOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyCryptoBoxOpen(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyCryptoBoxRandomNonce(): Uint8Array {\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyCryptoBoxRandomNonce({})))\n return new Uint8Array(buf)\n }\n\n public keyCryptoBoxSeal(options: KeyCryptoBoxSealOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyCryptoBoxSeal(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyCryptoBoxSealOpen(options: KeyCryptoBoxSealOpenOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyCryptoBoxSealOpen(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyDeriveEcdh1pu(options: KeyDeriveEcdh1puOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyDeriveEcdh1pu(serializedOptions)))\n return new LocalKeyHandle(handle)\n }\n\n public keyDeriveEcdhEs(options: KeyDeriveEcdhEsOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyDeriveEcdhEs(serializedOptions)))\n return new LocalKeyHandle(handle)\n }\n\n public keyEntryListCount(options: KeyEntryListCountOptions): number {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyEntryListCount(serializedOptions)))\n }\n\n public keyEntryListFree(options: KeyEntryListFreeOptions): void {\n const serializedOptions = serializeArguments(options)\n\n // null resopnse is expected as we're freeing the object\n this.handleError(this.askar.keyEntryListFree(serializedOptions))\n }\n\n public keyEntryListGetAlgorithm(options: KeyEntryListGetAlgorithmOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyEntryListGetAlgorithm(serializedOptions)))\n }\n\n public keyEntryListGetMetadata(options: KeyEntryListGetMetadataOptions): string | null {\n const serializedOptions = serializeArguments(options)\n return this.handleError(this.askar.keyEntryListGetMetadata(serializedOptions))\n }\n\n public keyEntryListGetName(options: KeyEntryListGetNameOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyEntryListGetName(serializedOptions)))\n }\n\n public keyEntryListGetTags(options: KeyEntryListGetTagsOptions): string | null {\n const serializedOptions = serializeArguments(options)\n return this.handleError(this.askar.keyEntryListGetTags(serializedOptions))\n }\n\n public keyEntryListLoadLocal(options: KeyEntryListLoadLocalOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyEntryListLoadLocal(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyFree(options: KeyFreeOptions): void {\n const serializedOptions = serializeArguments(options)\n\n // null resopnse is expected as we're freeing the object\n this.handleError(this.askar.keyFree(serializedOptions))\n }\n\n public keyFromJwk(options: KeyFromJwkOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyFromJwk(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyFromKeyExchange(options: KeyFromKeyExchangeOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyFromKeyExchange(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyFromPublicBytes(options: KeyFromPublicBytesOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyFromPublicBytes(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyFromSecretBytes(options: KeyFromSecretBytesOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyFromSecretBytes(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyFromSeed(options: KeyFromSeedOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyFromSeed(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyGenerate(options: KeyGenerateOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyGenerate(serializedOptions)))\n\n return new LocalKeyHandle(handleInvalidNullResponse(handle))\n }\n\n public keyGetAlgorithm(options: KeyGetAlgorithmOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyGetAlgorithm(serializedOptions)))\n }\n\n public keyGetEphemeral(options: KeyGetEphemeralOptions): number {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyGetEphemeral(serializedOptions)))\n }\n\n public keyGetJwkPublic(options: KeyGetJwkPublicOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyGetJwkPublic(serializedOptions)))\n }\n\n public keyGetJwkSecret(options: KeyGetJwkSecretOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyGetJwkSecret(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyGetJwkThumbprint(options: KeyGetJwkThumbprintOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.keyGetJwkThumbprint(serializedOptions)))\n }\n\n public keyGetPublicBytes(options: KeyGetPublicBytesOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyGetPublicBytes(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyGetSupportedBackends(): string[] {\n const stringListHandle = handleInvalidNullResponse(this.handleError(this.askar.keyGetSupportedBackends({})))\n return this.stringListToArray(stringListHandle)\n }\n\n public keyGetSecretBytes(options: KeyGetSecretBytesOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keyGetSecretBytes(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keySignMessage(options: KeySignMessageOptions): Uint8Array {\n const serializedOptions = serializeArguments(options)\n const buf = handleInvalidNullResponse(this.handleError(this.askar.keySignMessage(serializedOptions)))\n return new Uint8Array(buf)\n }\n\n public keyUnwrapKey(options: KeyUnwrapKeyOptions): LocalKeyHandle {\n const serializedOptions = serializeArguments(options)\n const handle = handleInvalidNullResponse(this.handleError(this.askar.keyUnwrapKey(serializedOptions)))\n\n return new LocalKeyHandle(handle)\n }\n\n public keyVerifySignature(options: KeyVerifySignatureOptions): boolean {\n const serializedOptions = serializeArguments(options)\n const result = this.handleError(this.askar.keyVerifySignature(serializedOptions))\n\n return !!result\n }\n\n public keyWrapKey(options: KeyWrapKeyOptions): EncryptedBuffer {\n const serializedOptions = serializeArguments(options)\n const ret = this.handleError(this.askar.keyWrapKey(serializedOptions))\n\n const { buffer, noncePos, tagPos } = handleInvalidNullResponse(ret)\n\n return new EncryptedBuffer({ tagPos, noncePos, buffer: new Uint8Array(buffer) })\n }\n\n public scanFree(options: ScanFreeOptions): void {\n const serializedOptions = serializeArguments(options)\n\n // null resopnse is expected as we're freeing the object\n this.handleError(this.askar.scanFree(serializedOptions))\n }\n\n public async scanNext(options: ScanNextOptions) {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.scanNext({ cb, ...serializedOptions }))\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async scanStart(options: ScanStartOptions): Promise<ScanHandle> {\n const { category, storeHandle, limit, offset, profile, tagFilter, orderBy, descending } =\n serializeArguments(options)\n const handle = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(\n this.askar.scanStart({\n cb,\n category,\n storeHandle,\n offset: offset || 0,\n limit: limit || -1,\n orderBy,\n descending,\n profile,\n tagFilter,\n })\n )\n )\n\n return ScanHandle.fromHandle(handle)\n }\n\n public sessionClose(options: SessionCloseOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.sessionClose({ cb, ...serializedOptions })))\n }\n\n public async sessionCount(options: SessionCountOptions): Promise<number> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.sessionCount({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async sessionFetch(options: SessionFetchOptions) {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.sessionFetch({ cb, ...serializedOptions }))\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async sessionFetchAll(options: SessionFetchAllOptions) {\n const { category, sessionHandle, forUpdate, limit, tagFilter, descending, orderBy } = serializeArguments(options)\n const handle = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(\n this.askar.sessionFetchAll({\n cb,\n category,\n sessionHandle,\n forUpdate,\n limit: limit || -1,\n tagFilter,\n orderBy,\n descending,\n })\n )\n )\n\n return EntryListHandle.fromHandle(handle)\n }\n\n public async sessionFetchAllKeys(options: SessionFetchAllKeysOptions) {\n const { sessionHandle, algorithm, forUpdate, limit, thumbprint, tagFilter } = serializeArguments(options)\n const handle = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(\n this.askar.sessionFetchAllKeys({\n cb,\n sessionHandle,\n algorithm,\n forUpdate: forUpdate || -1,\n limit: limit || -1,\n thumbprint,\n tagFilter,\n })\n )\n )\n\n return KeyEntryListHandle.fromHandle(handle)\n }\n public async sessionFetchKey(options: SessionFetchKeyOptions) {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.sessionFetchKey({ cb, ...serializedOptions }))\n )\n\n return KeyEntryListHandle.fromHandle(handle)\n }\n\n public sessionInsertKey(options: SessionInsertKeyOptions): Promise<void> {\n const { sessionHandle, name, localKeyHandle, expiryMs, metadata, tags } = serializeArguments(options)\n return this.promisify((cb) =>\n this.handleError(\n this.askar.sessionInsertKey({\n cb,\n sessionHandle,\n name,\n localKeyHandle,\n expiryMs: expiryMs || -1,\n metadata,\n tags,\n })\n )\n )\n }\n\n public async sessionRemoveAll(options: SessionRemoveAllOptions): Promise<number> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.sessionRemoveAll({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public sessionRemoveKey(options: SessionRemoveKeyOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.sessionRemoveKey({ cb, ...serializedOptions })))\n }\n\n public async sessionStart(options: SessionStartOptions): Promise<SessionHandle> {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.sessionStart({ cb, ...serializedOptions }))\n )\n\n return SessionHandle.fromHandle(handle)\n }\n\n public sessionUpdate(options: SessionUpdateOptions): Promise<void> {\n const { category, name, operation, sessionHandle, expiryMs, tags, value } = serializeArguments(options)\n return this.promisify((cb) =>\n this.handleError(\n this.askar.sessionUpdate({\n cb,\n category,\n name,\n operation,\n sessionHandle,\n expiryMs: expiryMs || -1,\n tags,\n value,\n })\n )\n )\n }\n\n public sessionUpdateKey(options: SessionUpdateKeyOptions): Promise<void> {\n // -1 for no expiry, as the C++ reads a missing expiryMs as 0, which expires the key right away\n const serializedOptions = serializeArguments({ ...options, expiryMs: options.expiryMs ?? -1 })\n return this.promisify((cb) => this.handleError(this.askar.sessionUpdateKey({ cb, ...serializedOptions })))\n }\n\n public storeClose(options: StoreCloseOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.storeClose({ cb, ...serializedOptions })))\n }\n\n // TODO: change when updating to 0.6.0\n public async storeCopyTo(options: StoreCopyToOptions): Promise<StoreHandle> {\n const serializedOptions = serializeArguments(options)\n\n const handle = await this.promisifyWithResponse<number>((cb) => {\n this.handleError(this.askar.storeCopy({ cb, ...serializedOptions }))\n })\n\n return StoreHandle.fromHandle(handle)\n }\n\n public async storeCreateProfile(options: StoreCreateProfileOptions): Promise<string> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.storeCreateProfile({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public storeGenerateRawKey(options: StoreGenerateRawKeyOptions): string {\n const serializedOptions = serializeArguments(options)\n return handleInvalidNullResponse(this.handleError(this.askar.storeGenerateRawKey(serializedOptions)))\n }\n\n public async storeGetProfileName(options: StoreGetProfileNameOptions): Promise<string> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.storeGetProfileName({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeGetDefaultProfile(options: StoreGetDefaultProfileOptions): Promise<string> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.storeGetDefaultProfile({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeListProfiles(options: StoreListProfilesOptions): Promise<string[]> {\n const serializedOptions = serializeArguments(options)\n const stringListHandle = handleInvalidNullResponse(\n await this.promisifyWithResponse<string>((cb) =>\n this.handleError(this.askar.storeListProfiles({ cb, ...serializedOptions }))\n )\n )\n return this.stringListToArray(stringListHandle)\n }\n\n public async storeListScans(options: StoreListScansOptions): Promise<ScanHandle[]> {\n const serializedOptions = serializeArguments(options)\n const handles = await this.promisifyWithResponse<number[]>((cb) =>\n this.handleError(this.askar.storeListScans({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(handles).map((handle) => ScanHandle.fromHandle(handle))\n }\n\n public async storeListSessions(options: StoreListSessionsOptions): Promise<SessionHandle[]> {\n const serializedOptions = serializeArguments(options)\n const handles = await this.promisifyWithResponse<number[]>((cb) =>\n this.handleError(this.askar.storeListSessions({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(handles).map((handle) => SessionHandle.fromHandle(handle))\n }\n\n // Reads the items of a string list from the native library and frees it\n private stringListToArray(stringListHandle: string): string[] {\n const items = []\n const count = this.handleError(this.askar.stringListCount({ stringListHandle }))\n for (let index = 0; index < count; index++) {\n items.push(this.handleError(this.askar.stringListGetItem({ stringListHandle, index })))\n }\n this.handleError(this.askar.stringListFree({ stringListHandle }))\n return items\n }\n\n public async storeOpen(options: StoreOpenOptions): Promise<StoreHandle> {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.storeOpen({ cb, ...serializedOptions }))\n )\n\n return StoreHandle.fromHandle(handle)\n }\n\n public async storeProvision(options: StoreProvisionOptions): Promise<StoreHandle> {\n const serializedOptions = serializeArguments(options)\n const handle = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.storeProvision({ cb, ...serializedOptions }))\n )\n\n return StoreHandle.fromHandle(handle)\n }\n\n public storeRekey(options: StoreRekeyOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.storeRekey({ cb, ...serializedOptions })))\n }\n\n public async storeRemove(options: StoreRemoveOptions): Promise<number> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.storeRemove({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeRemoveProfile(options: StoreRemoveProfileOptions): Promise<number> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.storeRemoveProfile({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeRenameProfile(options: StoreRenameProfileOptions): Promise<number> {\n const serializedOptions = serializeArguments(options)\n const response = await this.promisifyWithResponse<number>((cb) =>\n this.handleError(this.askar.storeRenameProfile({ cb, ...serializedOptions }))\n )\n\n return handleInvalidNullResponse(response)\n }\n\n public async storeCopyProfile(options: StoreCopyProfileOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.storeCopyProfile({ cb, ...serializedOptions })))\n }\n\n public async storeSetDefaultProfile(options: StoreSetDefaultProfileOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.storeSetDefaultProfile({ cb, ...serializedOptions })))\n }\n\n public async migrateIndySdk(options: MigrateIndySdkOptions): Promise<void> {\n const serializedOptions = serializeArguments(options)\n return this.promisify((cb) => this.handleError(this.askar.migrateIndySdk({ cb, ...serializedOptions })))\n }\n}\n","import { type TurboModule, TurboModuleRegistry } from 'react-native'\n\nexport interface Spec extends TurboModule {\n // Installs the bindings on the global object as `_askar`. Only needed on the old architecture: on the New\n // Architecture, React Native installs them when it creates the module\n install(): boolean\n}\n\nexport default TurboModuleRegistry.getEnforcing<Spec>('Askar')\n","import { NativeAskar } from '@openwallet-foundation/askar-shared'\n\nimport type { NativeBindings } from './NativeBindings'\nimport { ReactNativeAskar } from './ReactNativeAskar'\nimport AskarModule from './specs/NativeAskar'\n\n// Reexport everything from shared\nexport * from '@openwallet-foundation/askar-shared'\n\n// Only calls install() on the old architecture: on the New Architecture, getting the module already installed the\n// bindings\nif (!('_askar' in globalThis) && !AskarModule.install()) throw Error('Unable to install the turboModule: askar')\n\n// This can already check whether `_askar` exists on global\nif (!_askar) {\n throw Error('_askar has not been exposed on global. Something went wrong while installing the turboModule')\n}\n\ndeclare let _askar: NativeBindings\n\nNativeAskar.register(new ReactNativeAskar(_askar))\n"],"mappings":";;;;AAwEA,MAAM,aAAa,QAAsC;CACvD,QAAQ,OAAO,KAAf;EACE,KAAK,aACH,OAAO;EACT,KAAK,UACH,OAAO;EACT,KAAK,WACH,OAAO,OAAO,GAAG;EACnB,KAAK,UACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK;GACH,IAAI,eAAe,MACjB,OAAO,IAAI,QAAQ;GAErB,IAAI,eAAe,YACjB,OAAO,IAAI;GAEb,IAAI,eAAe,KACjB,OAAO,IAAI,aAAa,CAAC,CAAC;GAE5B,IAAI,eAAe,KACjB,OAAO,IAAI,OAAO;GAEpB,IACE,eAAe,eACf,eAAe,iBACf,eAAe,cACf,eAAe,WAEf,OAAO,IAAI;GAEb,OAAO,KAAK,UAAU,GAAG;EAC3B,SAEE,MAAM,IAAI,MAAM,6BAA6B,KAAK;CACtD;AACF;AAEA,MAAM,sBACJ,SACyB;CACzB,MAAM,SAA8B,CAAC;CACrC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,GAC5C,OAAO,OAAO,UAAU,KAAK;CAE/B,OAAO;AACT;;ACvBA,IAAa,mBAAb,MAA+C;CAG7C,YAAmB,UAA0B;EAC3C,KAAK,QAAQ;CACf;;;;;;;;;;;CAYA,cAAsB,WAA+B;EACnD,MAAM,QAAQ,KAAK,gBAAgB;EACnC,IAAI,MAAM,SAAS,WACjB,OAAO,IAAI,WAAW;GACpB,MAAM;GACN,SACE;EACJ,CAAC;EAGH,OAAO,IAAI,WAAW,KAAK;CAC7B;CAEA,YAAuB,EAAE,WAAW,SAA6B;EAC/D,IAAI,cAAc,GAAG,OAAO;EAC5B,MAAM,KAAK,cAAc,SAAS;CACpC;CAEA,UAAkB,QAA+C;EAC/D,OAAO,IAAI,SAAS,SAAS,WAAW;GACtC,MAAM,OAAiB,EAAE,gBAAgB;IACvC,IAAI;KACF,KAAK,YAAY,EAAE,UAAU,CAAC;KAC9B,QAAQ;IACV,SAAS,GAAG;KACV,OAAO,CAAC;IACV;GACF;GAEA,OAAO,GAAG;EACZ,CAAC;CACH;CAEA,sBAAsC,QAA4E;EAChH,OAAO,IAAI,SAAS,SAAS,WAAW;GACtC,MAAM,OAAqC,EAAE,WAAW,YAAY;IAClE,IAAI,cAAc,GAEhB,OADc,KAAK,cAAc,SACtB,CAAC;SAEZ,IAAI,UAAU,KAAA,GACZ,OAAO,WAAW,YAAY,EAAE,SAAS,8DAA8D,CAAC,CAAC;SAEzG,QAAQ,KAAK;GAGnB;GACA,OAAO,GAAG;EACZ,CAAC;CACH;CAEA,UAAyB;EACvB,OAAO,0BAA0B,KAAK,MAAM,QAAQ,CAAC,CAAC,CAAC;CACzD;CAEA,kBAA2C;EACzC,MAAM,kBAAkB,0BAA0B,KAAK,MAAM,gBAAgB,CAAC,CAAC,CAAC;EAChF,OAAO,KAAK,MAAM,eAAe;CACnC;CAEA,oBAAiC;EAC/B,MAAM,IAAI,MAAM,2CAA2C;CAC7D;CAEA,kBAA+B;EAC7B,MAAM,IAAI,MAAM,yCAAyC;CAC3D;CAEA,mBAAgC;EAC9B,KAAK,MAAM,iBAAiB,CAAC,CAAC;CAChC;CAEA,iBAA8B;EAC5B,MAAM,IAAI,MAAM,wCAAwC;CAC1D;CAEA,qBAA4B,SAAkD;EAC5E,MAAM,EAAE,QAAQ,GAAG,SAAS;EAE5B,MAAM,MAAM,0BACV,KAAK,YAAY,KAAK,MAAM,qBAAqB;GAAE,GAAG,mBAAmB,IAAI;GAAG,GAAI,UAAU,EAAE,OAAO;EAAG,CAAC,CAAC,CAC9G;EACA,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,eAAsB,SAAwC;EAC5D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,eAAe,iBAAiB,CAAC,CAAC;CACjG;CAEA,cAAqB,SAAqC;EACxD,MAAM,oBAAoB,mBAAmB,OAAO;EAGpD,KAAK,YAAY,KAAK,MAAM,cAAc,iBAAiB,CAAC;CAC9D;CAEA,qBAA4B,SAA8C;EACxE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,qBAAqB,iBAAiB,CAAC,CAAC;CACvG;CAEA,iBAAwB,SAA0C;EAChE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,iBAAiB,iBAAiB,CAAC,CAAC;CACnG;CAEA,iBAAwB,SAAiD;EACvE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,KAAK,YAAY,KAAK,MAAM,iBAAiB,iBAAiB,CAAC;CACxE;CAEA,kBAAyB,SAA+C;EACtE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,kBAAkB,iBAAiB,CAAC,CAAC;EACvG,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,eAAsB,SAA4C;EAChE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,eAAe,iBAAiB,CAAC,CAAC;EACpG,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,eAAsB,SAAiD;EACrE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,KAAK,YAAY,KAAK,MAAM,eAAe,iBAAiB,CAAC;EAEzE,MAAM,EAAE,QAAQ,UAAU,WAAW,0BAA0B,GAAG;EAElE,OAAO,IAAI,gBAAgB;GAAE;GAAQ;GAAU,QAAQ,IAAI,WAAW,MAAM;EAAE,CAAC;CACjF;CAEA,kBAAyB,SAA2C;EAClE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,kBAAkB,iBAAiB,CAAC,CAAC;CACpG;CAEA,iBAAwB,SAA8C;EACpE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,KAAK,YAAY,KAAK,MAAM,iBAAiB,iBAAiB,CAAC;EAE3E,MAAM,EAAE,WAAW,gBAAgB,0BAA0B,GAAG;EAEhE,OAAO,IAAI,WAAW;GAAE;GAAa;EAAU,CAAC;CAClD;CAEA,mBAA0B,SAAgD;EACxE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,mBAAmB,iBAAiB,CAAC,CAAC;EACxG,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,WAAkB,SAA4C;EAC5D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,0BAA0B,KAAK,YAAY,KAAK,MAAM,WAAW,iBAAiB,CAAC,CAAC;EAEnG,OAAO,IAAI,eAAe,MAAM;CAClC;CAEA,aAAoB,SAA0C;EAC5D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,aAAa,iBAAiB,CAAC,CAAC;EAClG,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,iBAAwB,SAA8C;EACpE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,iBAAiB,iBAAiB,CAAC,CAAC;EACtG,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,0BAA6C;EAC3C,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,wBAAwB,CAAC,CAAC,CAAC,CAAC;EAC9F,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,iBAAwB,SAA8C;EACpE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,iBAAiB,iBAAiB,CAAC,CAAC;EACtG,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,qBAA4B,SAAkD;EAC5E,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,qBAAqB,iBAAiB,CAAC,CAAC;EAC1G,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,iBAAwB,SAAkD;EACxE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,0BAA0B,KAAK,YAAY,KAAK,MAAM,iBAAiB,iBAAiB,CAAC,CAAC;EACzG,OAAO,IAAI,eAAe,MAAM;CAClC;CAEA,gBAAuB,SAAiD;EACtE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,0BAA0B,KAAK,YAAY,KAAK,MAAM,gBAAgB,iBAAiB,CAAC,CAAC;EACxG,OAAO,IAAI,eAAe,MAAM;CAClC;CAEA,kBAAyB,SAA2C;EAClE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,kBAAkB,iBAAiB,CAAC,CAAC;CACpG;CAEA,iBAAwB,SAAwC;EAC9D,MAAM,oBAAoB,mBAAmB,OAAO;EAGpD,KAAK,YAAY,KAAK,MAAM,iBAAiB,iBAAiB,CAAC;CACjE;CAEA,yBAAgC,SAAkD;EAChF,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,yBAAyB,iBAAiB,CAAC,CAAC;CAC3G;CAEA,wBAA+B,SAAwD;EACrF,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,KAAK,YAAY,KAAK,MAAM,wBAAwB,iBAAiB,CAAC;CAC/E;CAEA,oBAA2B,SAA6C;EACtE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,oBAAoB,iBAAiB,CAAC,CAAC;CACtG;CAEA,oBAA2B,SAAoD;EAC7E,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,KAAK,YAAY,KAAK,MAAM,oBAAoB,iBAAiB,CAAC;CAC3E;CAEA,sBAA6B,SAAuD;EAClF,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,0BAA0B,KAAK,YAAY,KAAK,MAAM,sBAAsB,iBAAiB,CAAC,CAAC;EAE9G,OAAO,IAAI,eAAe,MAAM;CAClC;CAEA,QAAe,SAA+B;EAC5C,MAAM,oBAAoB,mBAAmB,OAAO;EAGpD,KAAK,YAAY,KAAK,MAAM,QAAQ,iBAAiB,CAAC;CACxD;CAEA,WAAkB,SAA4C;EAC5D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,0BAA0B,KAAK,YAAY,KAAK,MAAM,WAAW,iBAAiB,CAAC,CAAC;EAEnG,OAAO,IAAI,eAAe,MAAM;CAClC;CAEA,mBAA0B,SAAoD;EAC5E,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,0BAA0B,KAAK,YAAY,KAAK,MAAM,mBAAmB,iBAAiB,CAAC,CAAC;EAE3G,OAAO,IAAI,eAAe,MAAM;CAClC;CAEA,mBAA0B,SAAoD;EAC5E,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,0BAA0B,KAAK,YAAY,KAAK,MAAM,mBAAmB,iBAAiB,CAAC,CAAC;EAE3G,OAAO,IAAI,eAAe,MAAM;CAClC;CAEA,mBAA0B,SAAoD;EAC5E,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,0BAA0B,KAAK,YAAY,KAAK,MAAM,mBAAmB,iBAAiB,CAAC,CAAC;EAE3G,OAAO,IAAI,eAAe,MAAM;CAClC;CAEA,YAAmB,SAA6C;EAC9D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,0BAA0B,KAAK,YAAY,KAAK,MAAM,YAAY,iBAAiB,CAAC,CAAC;EAEpG,OAAO,IAAI,eAAe,MAAM;CAClC;CAEA,YAAmB,SAA6C;EAC9D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,0BAA0B,KAAK,YAAY,KAAK,MAAM,YAAY,iBAAiB,CAAC,CAAC;EAEpG,OAAO,IAAI,eAAe,0BAA0B,MAAM,CAAC;CAC7D;CAEA,gBAAuB,SAAyC;EAC9D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,gBAAgB,iBAAiB,CAAC,CAAC;CAClG;CAEA,gBAAuB,SAAyC;EAC9D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,gBAAgB,iBAAiB,CAAC,CAAC;CAClG;CAEA,gBAAuB,SAAyC;EAC9D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,gBAAgB,iBAAiB,CAAC,CAAC;CAClG;CAEA,gBAAuB,SAA6C;EAClE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,gBAAgB,iBAAiB,CAAC,CAAC;EACrG,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,oBAA2B,SAA6C;EACtE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,oBAAoB,iBAAiB,CAAC,CAAC;CACtG;CAEA,kBAAyB,SAA+C;EACtE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,kBAAkB,iBAAiB,CAAC,CAAC;EACvG,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,0BAA2C;EACzC,MAAM,mBAAmB,0BAA0B,KAAK,YAAY,KAAK,MAAM,wBAAwB,CAAC,CAAC,CAAC,CAAC;EAC3G,OAAO,KAAK,kBAAkB,gBAAgB;CAChD;CAEA,kBAAyB,SAA+C;EACtE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,kBAAkB,iBAAiB,CAAC,CAAC;EACvG,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,eAAsB,SAA4C;EAChE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,0BAA0B,KAAK,YAAY,KAAK,MAAM,eAAe,iBAAiB,CAAC,CAAC;EACpG,OAAO,IAAI,WAAW,GAAG;CAC3B;CAEA,aAAoB,SAA8C;EAChE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,0BAA0B,KAAK,YAAY,KAAK,MAAM,aAAa,iBAAiB,CAAC,CAAC;EAErG,OAAO,IAAI,eAAe,MAAM;CAClC;CAEA,mBAA0B,SAA6C;EACrE,MAAM,oBAAoB,mBAAmB,OAAO;EAGpD,OAAO,CAAC,CAFO,KAAK,YAAY,KAAK,MAAM,mBAAmB,iBAAiB,CAEjE;CAChB;CAEA,WAAkB,SAA6C;EAC7D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,MAAM,KAAK,YAAY,KAAK,MAAM,WAAW,iBAAiB,CAAC;EAErE,MAAM,EAAE,QAAQ,UAAU,WAAW,0BAA0B,GAAG;EAElE,OAAO,IAAI,gBAAgB;GAAE;GAAQ;GAAU,QAAQ,IAAI,WAAW,MAAM;EAAE,CAAC;CACjF;CAEA,SAAgB,SAAgC;EAC9C,MAAM,oBAAoB,mBAAmB,OAAO;EAGpD,KAAK,YAAY,KAAK,MAAM,SAAS,iBAAiB,CAAC;CACzD;CAEA,MAAa,SAAS,SAA0B;EAC9C,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,MAAM,KAAK,uBAA+B,OACvD,KAAK,YAAY,KAAK,MAAM,SAAS;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CACpE;EAEA,OAAO,gBAAgB,WAAW,MAAM;CAC1C;CAEA,MAAa,UAAU,SAAgD;EACrE,MAAM,EAAE,UAAU,aAAa,OAAO,QAAQ,SAAS,WAAW,SAAS,eACzE,mBAAmB,OAAO;EAC5B,MAAM,SAAS,MAAM,KAAK,uBAA+B,OACvD,KAAK,YACH,KAAK,MAAM,UAAU;GACnB;GACA;GACA;GACA,QAAQ,UAAU;GAClB,OAAO,SAAS;GAChB;GACA;GACA;GACA;EACF,CAAC,CACH,CACF;EAEA,OAAO,WAAW,WAAW,MAAM;CACrC;CAEA,aAAoB,SAA6C;EAC/D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,KAAK,WAAW,OAAO,KAAK,YAAY,KAAK,MAAM,aAAa;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAAC;CACvG;CAEA,MAAa,aAAa,SAA+C;EACvE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,WAAW,MAAM,KAAK,uBAA+B,OACzD,KAAK,YAAY,KAAK,MAAM,aAAa;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CACxE;EAEA,OAAO,0BAA0B,QAAQ;CAC3C;CAEA,MAAa,aAAa,SAA8B;EACtD,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,MAAM,KAAK,uBAA+B,OACvD,KAAK,YAAY,KAAK,MAAM,aAAa;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CACxE;EAEA,OAAO,gBAAgB,WAAW,MAAM;CAC1C;CAEA,MAAa,gBAAgB,SAAiC;EAC5D,MAAM,EAAE,UAAU,eAAe,WAAW,OAAO,WAAW,YAAY,YAAY,mBAAmB,OAAO;EAChH,MAAM,SAAS,MAAM,KAAK,uBAA+B,OACvD,KAAK,YACH,KAAK,MAAM,gBAAgB;GACzB;GACA;GACA;GACA;GACA,OAAO,SAAS;GAChB;GACA;GACA;EACF,CAAC,CACH,CACF;EAEA,OAAO,gBAAgB,WAAW,MAAM;CAC1C;CAEA,MAAa,oBAAoB,SAAqC;EACpE,MAAM,EAAE,eAAe,WAAW,WAAW,OAAO,YAAY,cAAc,mBAAmB,OAAO;EACxG,MAAM,SAAS,MAAM,KAAK,uBAA+B,OACvD,KAAK,YACH,KAAK,MAAM,oBAAoB;GAC7B;GACA;GACA;GACA,WAAW,aAAa;GACxB,OAAO,SAAS;GAChB;GACA;EACF,CAAC,CACH,CACF;EAEA,OAAO,mBAAmB,WAAW,MAAM;CAC7C;CACA,MAAa,gBAAgB,SAAiC;EAC5D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,MAAM,KAAK,uBAA+B,OACvD,KAAK,YAAY,KAAK,MAAM,gBAAgB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAC3E;EAEA,OAAO,mBAAmB,WAAW,MAAM;CAC7C;CAEA,iBAAwB,SAAiD;EACvE,MAAM,EAAE,eAAe,MAAM,gBAAgB,UAAU,UAAU,SAAS,mBAAmB,OAAO;EACpG,OAAO,KAAK,WAAW,OACrB,KAAK,YACH,KAAK,MAAM,iBAAiB;GAC1B;GACA;GACA;GACA;GACA,UAAU,YAAY;GACtB;GACA;EACF,CAAC,CACH,CACF;CACF;CAEA,MAAa,iBAAiB,SAAmD;EAC/E,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,WAAW,MAAM,KAAK,uBAA+B,OACzD,KAAK,YAAY,KAAK,MAAM,iBAAiB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAC5E;EAEA,OAAO,0BAA0B,QAAQ;CAC3C;CAEA,iBAAwB,SAAiD;EACvE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,KAAK,WAAW,OAAO,KAAK,YAAY,KAAK,MAAM,iBAAiB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAAC;CAC3G;CAEA,MAAa,aAAa,SAAsD;EAC9E,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,MAAM,KAAK,uBAA+B,OACvD,KAAK,YAAY,KAAK,MAAM,aAAa;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CACxE;EAEA,OAAO,cAAc,WAAW,MAAM;CACxC;CAEA,cAAqB,SAA8C;EACjE,MAAM,EAAE,UAAU,MAAM,WAAW,eAAe,UAAU,MAAM,UAAU,mBAAmB,OAAO;EACtG,OAAO,KAAK,WAAW,OACrB,KAAK,YACH,KAAK,MAAM,cAAc;GACvB;GACA;GACA;GACA;GACA;GACA,UAAU,YAAY;GACtB;GACA;EACF,CAAC,CACH,CACF;CACF;CAEA,iBAAwB,SAAiD;EAEvE,MAAM,oBAAoB,mBAAmB;GAAE,GAAG;GAAS,UAAU,QAAQ,YAAY;EAAG,CAAC;EAC7F,OAAO,KAAK,WAAW,OAAO,KAAK,YAAY,KAAK,MAAM,iBAAiB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAAC;CAC3G;CAEA,WAAkB,SAA2C;EAC3D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,KAAK,WAAW,OAAO,KAAK,YAAY,KAAK,MAAM,WAAW;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAAC;CACrG;CAGA,MAAa,YAAY,SAAmD;EAC1E,MAAM,oBAAoB,mBAAmB,OAAO;EAEpD,MAAM,SAAS,MAAM,KAAK,uBAA+B,OAAO;GAC9D,KAAK,YAAY,KAAK,MAAM,UAAU;IAAE;IAAI,GAAG;GAAkB,CAAC,CAAC;EACrE,CAAC;EAED,OAAO,YAAY,WAAW,MAAM;CACtC;CAEA,MAAa,mBAAmB,SAAqD;EACnF,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,WAAW,MAAM,KAAK,uBAA+B,OACzD,KAAK,YAAY,KAAK,MAAM,mBAAmB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAC9E;EAEA,OAAO,0BAA0B,QAAQ;CAC3C;CAEA,oBAA2B,SAA6C;EACtE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,0BAA0B,KAAK,YAAY,KAAK,MAAM,oBAAoB,iBAAiB,CAAC,CAAC;CACtG;CAEA,MAAa,oBAAoB,SAAsD;EACrF,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,WAAW,MAAM,KAAK,uBAA+B,OACzD,KAAK,YAAY,KAAK,MAAM,oBAAoB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAC/E;EAEA,OAAO,0BAA0B,QAAQ;CAC3C;CAEA,MAAa,uBAAuB,SAAyD;EAC3F,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,WAAW,MAAM,KAAK,uBAA+B,OACzD,KAAK,YAAY,KAAK,MAAM,uBAAuB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAClF;EAEA,OAAO,0BAA0B,QAAQ;CAC3C;CAEA,MAAa,kBAAkB,SAAsD;EACnF,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,mBAAmB,0BACvB,MAAM,KAAK,uBAA+B,OACxC,KAAK,YAAY,KAAK,MAAM,kBAAkB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAC7E,CACF;EACA,OAAO,KAAK,kBAAkB,gBAAgB;CAChD;CAEA,MAAa,eAAe,SAAuD;EACjF,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,UAAU,MAAM,KAAK,uBAAiC,OAC1D,KAAK,YAAY,KAAK,MAAM,eAAe;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAC1E;EAEA,OAAO,0BAA0B,OAAO,CAAC,CAAC,KAAK,WAAW,WAAW,WAAW,MAAM,CAAC;CACzF;CAEA,MAAa,kBAAkB,SAA6D;EAC1F,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,UAAU,MAAM,KAAK,uBAAiC,OAC1D,KAAK,YAAY,KAAK,MAAM,kBAAkB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAC7E;EAEA,OAAO,0BAA0B,OAAO,CAAC,CAAC,KAAK,WAAW,cAAc,WAAW,MAAM,CAAC;CAC5F;CAGA,kBAA0B,kBAAoC;EAC5D,MAAM,QAAQ,CAAC;EACf,MAAM,QAAQ,KAAK,YAAY,KAAK,MAAM,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;EAC/E,KAAK,IAAI,QAAQ,GAAG,QAAQ,OAAO,SACjC,MAAM,KAAK,KAAK,YAAY,KAAK,MAAM,kBAAkB;GAAE;GAAkB;EAAM,CAAC,CAAC,CAAC;EAExF,KAAK,YAAY,KAAK,MAAM,eAAe,EAAE,iBAAiB,CAAC,CAAC;EAChE,OAAO;CACT;CAEA,MAAa,UAAU,SAAiD;EACtE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,MAAM,KAAK,uBAA+B,OACvD,KAAK,YAAY,KAAK,MAAM,UAAU;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CACrE;EAEA,OAAO,YAAY,WAAW,MAAM;CACtC;CAEA,MAAa,eAAe,SAAsD;EAChF,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,SAAS,MAAM,KAAK,uBAA+B,OACvD,KAAK,YAAY,KAAK,MAAM,eAAe;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAC1E;EAEA,OAAO,YAAY,WAAW,MAAM;CACtC;CAEA,WAAkB,SAA2C;EAC3D,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,KAAK,WAAW,OAAO,KAAK,YAAY,KAAK,MAAM,WAAW;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAAC;CACrG;CAEA,MAAa,YAAY,SAA8C;EACrE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,WAAW,MAAM,KAAK,uBAA+B,OACzD,KAAK,YAAY,KAAK,MAAM,YAAY;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CACvE;EAEA,OAAO,0BAA0B,QAAQ;CAC3C;CAEA,MAAa,mBAAmB,SAAqD;EACnF,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,WAAW,MAAM,KAAK,uBAA+B,OACzD,KAAK,YAAY,KAAK,MAAM,mBAAmB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAC9E;EAEA,OAAO,0BAA0B,QAAQ;CAC3C;CAEA,MAAa,mBAAmB,SAAqD;EACnF,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,MAAM,WAAW,MAAM,KAAK,uBAA+B,OACzD,KAAK,YAAY,KAAK,MAAM,mBAAmB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAC9E;EAEA,OAAO,0BAA0B,QAAQ;CAC3C;CAEA,MAAa,iBAAiB,SAAiD;EAC7E,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,KAAK,WAAW,OAAO,KAAK,YAAY,KAAK,MAAM,iBAAiB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAAC;CAC3G;CAEA,MAAa,uBAAuB,SAAuD;EACzF,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,KAAK,WAAW,OAAO,KAAK,YAAY,KAAK,MAAM,uBAAuB;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAAC;CACjH;CAEA,MAAa,eAAe,SAA+C;EACzE,MAAM,oBAAoB,mBAAmB,OAAO;EACpD,OAAO,KAAK,WAAW,OAAO,KAAK,YAAY,KAAK,MAAM,eAAe;GAAE;GAAI,GAAG;EAAkB,CAAC,CAAC,CAAC;CACzG;AACF;;ACtxBA,IAAA,sBAAe,oBAAoB,aAAmB,OAAO;;ACG7D,IAAI,EAAE,YAAY,eAAe,CAACA,oBAAY,QAAQ,GAAG,MAAM,MAAM,0CAA0C;AAG/G,IAAI,CAAC,QACH,MAAM,MAAM,8FAA8F;AAK5G,YAAY,SAAS,IAAI,iBAAiB,MAAM,CAAC"}
package/ios/Askar.h CHANGED
@@ -1,5 +1,13 @@
1
+ #ifdef RCT_NEW_ARCH_ENABLED
2
+ #import <RNAskarSpec/RNAskarSpec.h>
3
+
4
+ @interface Askar : NSObject <NativeAskarSpec>
5
+
6
+ @end
7
+ #else
1
8
  #import <React/RCTBridgeModule.h>
2
9
 
3
10
  @interface Askar : NSObject <RCTBridgeModule>
4
11
 
5
12
  @end
13
+ #endif
package/ios/Askar.mm CHANGED
@@ -1,8 +1,5 @@
1
- #import <React/RCTBridge+Private.h>
2
1
  #import <jsi/jsi.h>
3
- #import <React/RCTUtils.h>
4
2
  #import <ReactCommon/RCTTurboModule.h>
5
- #import <ReactCommon/RCTInteropTurboModule.h>
6
3
  #import <ReactCommon/RCTTurboModuleWithJSIBindings.h>
7
4
  #import <askar/turboModuleUtility.h>
8
5
 
@@ -10,6 +7,9 @@
10
7
 
11
8
  using namespace facebook;
12
9
 
10
+ #ifndef RCT_NEW_ARCH_ENABLED
11
+ #import <React/RCTBridge+Private.h>
12
+
13
13
  // React Native 0.87 removed the legacy bridge, so `RCTCxxBridge` no longer exists and
14
14
  // cannot be named. Re-declare just the `runtime` accessor we need and probe for it at
15
15
  // runtime instead: only the legacy bridge responds to it, and on 0.87+
@@ -18,50 +18,52 @@ using namespace facebook;
18
18
  @interface RCTBridge (AskarLegacyBridge)
19
19
  - (void *)runtime;
20
20
  @end
21
+ #endif
21
22
 
22
- @interface Askar () <RCTTurboModule, RCTTurboModuleWithJSIBindings>
23
+ @interface Askar () <RCTTurboModuleWithJSIBindings>
23
24
  @end
24
25
 
25
- @implementation Askar
26
+ @implementation Askar
26
27
 
27
28
  RCT_EXPORT_MODULE()
28
29
 
29
- // Expose this module as a TurboModule so React Native invokes
30
- // installJSIBindingsWithRuntime:callInvoker: below when the module is created.
31
- // This is the only supported way to install JSI bindings under the New
32
- // Architecture / bridgeless mode, where [RCTBridge currentBridge] is nil and
33
- // the legacy bridge is compiled out (RCT_REMOVE_LEGACY_ARCH=1).
34
- //
35
- // ObjCInteropTurboModule keeps the existing RCT_EXPORT methods (e.g. `install`)
36
- // dispatchable without requiring a codegen spec, so this remains a drop-in
37
- // change that also works on the old architecture.
30
+ // React Native calls this when it creates the TurboModule, with a valid runtime and call
31
+ // invoker also in bridgeless mode, where [RCTBridge currentBridge] is nil
32
+ - (void)installJSIBindingsWithRuntime:(jsi::Runtime &)runtime
33
+ callInvoker:(const std::shared_ptr<react::CallInvoker> &)callInvoker
34
+ {
35
+ askarTurboModuleUtility::registerTurboModule(runtime, callInvoker);
36
+ }
37
+
38
+ #ifdef RCT_NEW_ARCH_ENABLED
39
+
38
40
  - (std::shared_ptr<react::TurboModule>)getTurboModule:(const react::ObjCTurboModule::InitParams &)params
39
41
  {
40
- return std::make_shared<react::ObjCInteropTurboModule>(params);
42
+ return std::make_shared<react::NativeAskarSpecJSI>(params);
41
43
  }
42
44
 
43
- - (void)installJSIBindingsWithRuntime:(jsi::Runtime &)runtime
44
- callInvoker:(const std::shared_ptr<react::CallInvoker> &)callInvoker
45
+ // The bindings are already installed by installJSIBindingsWithRuntime:callInvoker:
46
+ - (NSNumber *)install
45
47
  {
46
- askarTurboModuleUtility::registerTurboModule(runtime, callInvoker);
48
+ return @YES;
47
49
  }
48
50
 
51
+ #else
52
+
53
+ // Old Architecture: install using the runtime of the legacy bridge
49
54
  RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install)
50
55
  {
51
- // New Architecture: the JSI bindings are installed via
52
- // installJSIBindingsWithRuntime:callInvoker: when this TurboModule is
53
- // created, so there is nothing to do here.
54
- //
55
- // Old Architecture (legacy bridge present): install using the bridge
56
- // runtime so this keeps working for non-bridgeless apps.
57
56
  RCTBridge* bridge = [RCTBridge currentBridge];
58
57
  if ([bridge respondsToSelector:@selector(runtime)]) {
59
58
  jsi::Runtime* jsiRuntime = (jsi::Runtime*) [bridge runtime];
60
59
  if (jsiRuntime != nil) {
61
60
  askarTurboModuleUtility::registerTurboModule(*jsiRuntime, bridge.jsCallInvoker);
61
+ return @true;
62
62
  }
63
63
  }
64
- return @true;
64
+ return @false;
65
65
  }
66
66
 
67
+ #endif
68
+
67
69
  @end
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openwallet-foundation/askar-react-native",
3
- "version": "0.7.0-alpha-20261028113056",
3
+ "version": "0.7.0-alpha-20261106181830",
4
4
  "license": "Apache-2.0",
5
5
  "description": "React Native wrapper for Askar",
6
6
  "main": "./build/index.mjs",
@@ -25,6 +25,7 @@
25
25
  },
26
26
  "files": [
27
27
  "build",
28
+ "src/specs",
28
29
  "android/src",
29
30
  "android/build.gradle",
30
31
  "android/CMakeLists.txt",
@@ -37,8 +38,21 @@
37
38
  "askar.podspec",
38
39
  "scripts"
39
40
  ],
41
+ "codegenConfig": {
42
+ "name": "RNAskarSpec",
43
+ "type": "modules",
44
+ "jsSrcsDir": "src/specs",
45
+ "android": {
46
+ "javaPackageName": "foundation.openwallet.askar"
47
+ },
48
+ "ios": {
49
+ "modulesProvider": {
50
+ "Askar": "Askar"
51
+ }
52
+ }
53
+ },
40
54
  "dependencies": {
41
- "@openwallet-foundation/askar-shared": "0.7.0-alpha-20261028113056"
55
+ "@openwallet-foundation/askar-shared": "0.7.0-alpha-20261106181830"
42
56
  },
43
57
  "devDependencies": {
44
58
  "react": "19.3.0",
@@ -0,0 +1,9 @@
1
+ import { type TurboModule, TurboModuleRegistry } from 'react-native'
2
+
3
+ export interface Spec extends TurboModule {
4
+ // Installs the bindings on the global object as `_askar`. Only needed on the old architecture: on the New
5
+ // Architecture, React Native installs them when it creates the module
6
+ install(): boolean
7
+ }
8
+
9
+ export default TurboModuleRegistry.getEnforcing<Spec>('Askar')