@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.
- package/android/build.gradle +13 -0
- package/android/cpp-adapter.cpp +14 -1
- package/android/src/main/java/foundation/openwallet/askar/AskarModule.java +8 -13
- package/android/src/main/java/foundation/openwallet/askar/AskarPackage.java +21 -9
- package/android/src/oldarch/java/foundation/openwallet/askar/NativeAskarSpec.java +27 -0
- package/askar.podspec +4 -4
- package/build/index.mjs +4 -2
- package/build/index.mjs.map +1 -1
- package/ios/Askar.h +8 -0
- package/ios/Askar.mm +27 -25
- package/package.json +16 -2
- package/src/specs/NativeAskar.ts +9 -0
package/android/build.gradle
CHANGED
|
@@ -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
|
}
|
package/android/cpp-adapter.cpp
CHANGED
|
@@ -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({
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
|
12
|
-
@
|
|
12
|
+
public class AskarPackage extends BaseReactPackage {
|
|
13
|
+
@Nullable
|
|
13
14
|
@Override
|
|
14
|
-
public
|
|
15
|
-
return
|
|
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
|
|
21
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
s
|
|
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 {
|
|
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 (!
|
|
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
|
|
package/build/index.mjs.map
CHANGED
|
@@ -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":"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"}
|
package/ios/Askar.h
CHANGED
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 () <
|
|
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
|
-
//
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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::
|
|
42
|
+
return std::make_shared<react::NativeAskarSpecJSI>(params);
|
|
41
43
|
}
|
|
42
44
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
// The bindings are already installed by installJSIBindingsWithRuntime:callInvoker:
|
|
46
|
+
- (NSNumber *)install
|
|
45
47
|
{
|
|
46
|
-
|
|
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 @
|
|
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-
|
|
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-
|
|
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')
|