@zerodev/wallet-core 0.0.1-alpha.20 → 0.0.1-alpha.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/dist/_cjs/core/{createZeroDevWallet.js → createZeroDevWalletCore.js} +7 -10
- package/dist/_cjs/core/createZeroDevWalletCore.js.map +1 -0
- package/dist/_cjs/index.js +9 -7
- package/dist/_cjs/index.js.map +1 -1
- package/dist/_cjs/index.native.js +39 -0
- package/dist/_cjs/index.native.js.map +1 -0
- package/dist/_cjs/native/createZeroDevWallet.js +13 -0
- package/dist/_cjs/native/createZeroDevWallet.js.map +1 -0
- package/dist/_cjs/native/stampers/passkey.js +30 -0
- package/dist/_cjs/native/stampers/passkey.js.map +1 -0
- package/dist/_cjs/native/stampers/secureStore.js +112 -0
- package/dist/_cjs/native/stampers/secureStore.js.map +1 -0
- package/dist/_cjs/native/storage/asyncStorage.js +11 -0
- package/dist/_cjs/native/storage/asyncStorage.js.map +1 -0
- package/dist/_cjs/stampers/noopPasskeyStamper.js +16 -0
- package/dist/_cjs/stampers/noopPasskeyStamper.js.map +1 -0
- package/dist/_cjs/stubs/native-on-web.js +12 -0
- package/dist/_cjs/stubs/native-on-web.js.map +1 -0
- package/dist/_cjs/utils/exportWallet.js +52 -57
- package/dist/_cjs/utils/exportWallet.js.map +1 -1
- package/dist/_cjs/utils/platform.js +19 -0
- package/dist/_cjs/utils/platform.js.map +1 -0
- package/dist/_cjs/web/createZeroDevWallet.js +21 -0
- package/dist/_cjs/web/createZeroDevWallet.js.map +1 -0
- package/dist/_esm/core/{createZeroDevWallet.js → createZeroDevWalletCore.js} +6 -9
- package/dist/_esm/core/createZeroDevWalletCore.js.map +1 -0
- package/dist/_esm/index.js +11 -3
- package/dist/_esm/index.js.map +1 -1
- package/dist/_esm/index.native.js +19 -0
- package/dist/_esm/index.native.js.map +1 -0
- package/dist/_esm/native/createZeroDevWallet.js +10 -0
- package/dist/_esm/native/createZeroDevWallet.js.map +1 -0
- package/dist/_esm/native/stampers/passkey.js +27 -0
- package/dist/_esm/native/stampers/passkey.js.map +1 -0
- package/dist/_esm/native/stampers/secureStore.js +120 -0
- package/dist/_esm/native/stampers/secureStore.js.map +1 -0
- package/dist/_esm/native/storage/asyncStorage.js +13 -0
- package/dist/_esm/native/storage/asyncStorage.js.map +1 -0
- package/dist/_esm/stampers/noopPasskeyStamper.js +18 -0
- package/dist/_esm/stampers/noopPasskeyStamper.js.map +1 -0
- package/dist/_esm/stubs/native-on-web.js +25 -0
- package/dist/_esm/stubs/native-on-web.js.map +1 -0
- package/dist/_esm/utils/exportWallet.js +52 -57
- package/dist/_esm/utils/exportWallet.js.map +1 -1
- package/dist/_esm/utils/platform.js +16 -0
- package/dist/_esm/utils/platform.js.map +1 -0
- package/dist/_esm/web/createZeroDevWallet.js +18 -0
- package/dist/_esm/web/createZeroDevWallet.js.map +1 -0
- package/dist/_types/core/{createZeroDevWallet.d.ts → createZeroDevWalletCore.d.ts} +6 -6
- package/dist/_types/core/createZeroDevWalletCore.d.ts.map +1 -0
- package/dist/_types/index.d.ts +3 -3
- package/dist/_types/index.d.ts.map +1 -1
- package/dist/_types/index.native.d.ts +19 -0
- package/dist/_types/index.native.d.ts.map +1 -0
- package/dist/_types/native/createZeroDevWallet.d.ts +12 -0
- package/dist/_types/native/createZeroDevWallet.d.ts.map +1 -0
- package/dist/_types/native/stampers/passkey.d.ts +5 -0
- package/dist/_types/native/stampers/passkey.d.ts.map +1 -0
- package/dist/_types/native/stampers/secureStore.d.ts +3 -0
- package/dist/_types/native/stampers/secureStore.d.ts.map +1 -0
- package/dist/_types/native/storage/asyncStorage.d.ts +3 -0
- package/dist/_types/native/storage/asyncStorage.d.ts.map +1 -0
- package/dist/_types/stampers/noopPasskeyStamper.d.ts +8 -0
- package/dist/_types/stampers/noopPasskeyStamper.d.ts.map +1 -0
- package/dist/_types/stubs/native-on-web.d.ts +6 -0
- package/dist/_types/stubs/native-on-web.d.ts.map +1 -0
- package/dist/_types/utils/exportPrivateKey.d.ts +1 -1
- package/dist/_types/utils/exportPrivateKey.d.ts.map +1 -1
- package/dist/_types/utils/exportWallet.d.ts +1 -1
- package/dist/_types/utils/exportWallet.d.ts.map +1 -1
- package/dist/_types/utils/platform.d.ts +2 -0
- package/dist/_types/utils/platform.d.ts.map +1 -0
- package/dist/_types/web/createZeroDevWallet.d.ts +18 -0
- package/dist/_types/web/createZeroDevWallet.d.ts.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +96 -11
- package/src/core/{createZeroDevWallet.ts → createZeroDevWalletCore.ts} +11 -18
- package/src/index.native.ts +103 -0
- package/src/index.ts +19 -9
- package/src/native/createZeroDevWallet.ts +26 -0
- package/src/native/stampers/passkey.ts +39 -0
- package/src/native/stampers/secureStore.ts +139 -0
- package/src/native/storage/asyncStorage.ts +18 -0
- package/src/stampers/noopPasskeyStamper.ts +21 -0
- package/src/stubs/native-on-web.ts +29 -0
- package/src/utils/exportPrivateKey.ts +1 -1
- package/src/utils/exportWallet.ts +66 -71
- package/src/utils/platform.ts +21 -0
- package/src/web/createZeroDevWallet.ts +45 -0
- package/dist/_cjs/core/createZeroDevWallet.js.map +0 -1
- package/dist/_cjs/stampers/index.js +0 -10
- package/dist/_cjs/stampers/index.js.map +0 -1
- package/dist/_esm/core/createZeroDevWallet.js.map +0 -1
- package/dist/_esm/stampers/index.js +0 -4
- package/dist/_esm/stampers/index.js.map +0 -1
- package/dist/_types/core/createZeroDevWallet.d.ts.map +0 -1
- package/dist/_types/stampers/index.d.ts +0 -5
- package/dist/_types/stampers/index.d.ts.map +0 -1
- package/src/stampers/index.ts +0 -8
|
@@ -1,19 +1,16 @@
|
|
|
1
1
|
import { toViemAccount } from '../adapters/viem.js';
|
|
2
2
|
import { createAuthProxyClient, createClient, zeroDevWalletTransport, } from '../client/index.js';
|
|
3
3
|
import { DEFAULT_ORGANIZATION_ID, DEFAULT_SESSION_EXPIRATION_IN_SECONDS, KMS_SERVER_URL, } from '../constants.js';
|
|
4
|
-
import {
|
|
5
|
-
import { createWebauthnStamper } from '../stampers/webauthnStamper.js';
|
|
6
|
-
import { createWebStorageAdapter } from '../storage/adapters.js';
|
|
4
|
+
import { createNoopPasskeyStamper } from '../stampers/noopPasskeyStamper.js';
|
|
7
5
|
import { createStorageManager, } from '../storage/manager.js';
|
|
8
6
|
import { SessionType } from '../types/session.js';
|
|
9
7
|
import { buildClientSignature } from '../utils/buildClientSignature.js';
|
|
10
8
|
import { encryptOtpAttempt } from '../utils/encryptOtpAttempt.js';
|
|
11
9
|
import { humanReadableDateTime, parseSession } from '../utils/utils.js';
|
|
12
|
-
export async function
|
|
13
|
-
const { projectId, sessionStorage, rpId
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const passkeyStamper = config.passkeyStamper ?? (await createWebauthnStamper({ rpId }));
|
|
10
|
+
export async function createZeroDevWalletCore(config) {
|
|
11
|
+
const { projectId, sessionStorage, rpId, apiKeyStamper, organizationId = DEFAULT_ORGANIZATION_ID, } = config;
|
|
12
|
+
const passkeyStamper = config.passkeyStamper ?? createNoopPasskeyStamper();
|
|
13
|
+
const sessionStorageManager = createStorageManager(sessionStorage);
|
|
17
14
|
const client = createClient({
|
|
18
15
|
apiKeyStamper,
|
|
19
16
|
passkeyStamper,
|
|
@@ -314,4 +311,4 @@ export async function createZeroDevWallet(config) {
|
|
|
314
311
|
},
|
|
315
312
|
};
|
|
316
313
|
}
|
|
317
|
-
//# sourceMappingURL=
|
|
314
|
+
//# sourceMappingURL=createZeroDevWalletCore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createZeroDevWalletCore.js","sourceRoot":"","sources":["../../../src/core/createZeroDevWalletCore.ts"],"names":[],"mappings":"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"}
|
package/dist/_esm/index.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import { isReactNative } from './utils/platform.js';
|
|
2
|
+
if (isReactNative()) {
|
|
3
|
+
// biome-ignore lint/suspicious/noConsole: Warning users if they try to use the web entry on React Native.
|
|
4
|
+
console.warn('@zerodev/wallet-core: the web entry was loaded in a React Native runtime. Check that your metro.config.js has `unstable_enablePackageExports: true` and `"react-native"` in `unstable_conditionNames`.');
|
|
5
|
+
}
|
|
1
6
|
// Actions
|
|
2
7
|
export {
|
|
3
8
|
// Auth actions
|
|
@@ -12,12 +17,15 @@ export { zeroDevWalletActions } from './client/decorators/client.js';
|
|
|
12
17
|
export { createBaseClient, createClient, zeroDevWalletTransport, } from './client/index.js';
|
|
13
18
|
// Constants
|
|
14
19
|
export { KMS_SERVER_URL } from './constants.js';
|
|
15
|
-
// Core
|
|
16
|
-
export { createZeroDevWallet } from './core/createZeroDevWallet.js';
|
|
17
20
|
// Stampers
|
|
18
|
-
export { createIframeStamper
|
|
21
|
+
export { createIframeStamper } from './stampers/iframeStamper.js';
|
|
19
22
|
export { exportPrivateKey } from './utils/exportPrivateKey.js';
|
|
20
23
|
export { exportWallet } from './utils/exportWallet.js';
|
|
21
24
|
// Utils
|
|
22
25
|
export { normalizeTimestamp } from './utils/utils.js';
|
|
26
|
+
// Core — bare specifier resolves web defaults (IndexedDB, WebAuthn, session
|
|
27
|
+
// storage, hostname-derived rpId) before forwarding to the shared factory.
|
|
28
|
+
// RN consumers go through `@zerodev/wallet-core/react-native`, which exposes
|
|
29
|
+
// the strict `ZeroDevWalletConfig` (= core's required-fields shape) directly.
|
|
30
|
+
export { createZeroDevWallet, } from './web/createZeroDevWallet.js';
|
|
23
31
|
//# sourceMappingURL=index.js.map
|
package/dist/_esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,IAAI,aAAa,EAAE,EAAE,CAAC;IACpB,0GAA0G;IAC1G,OAAO,CAAC,IAAI,CACV,wMAAwM,CACzM,CAAA;AACH,CAAC;AAqCD,UAAU;AACV,OAAO;AACL,eAAe;AACf,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB;AACjB,iBAAiB;AACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAE3B,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAOpE,SAAS;AACT,OAAO,EACL,gBAAgB,EAChB,YAAY,EAEZ,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAK/C,WAAW;AACX,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAcjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,4EAA4E;AAC5E,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,OAAO,EACL,mBAAmB,GAEpB,MAAM,8BAA8B,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { isReactNative } from './utils/platform.js';
|
|
2
|
+
if (!isReactNative()) {
|
|
3
|
+
// biome-ignore lint/suspicious/noConsole: Warning users if they try to use the web entry on React Native.
|
|
4
|
+
console.warn('@zerodev/wallet-core/react-native: the React Native entry was loaded outside a React Native runtime. If this is a non-RN context, import `@zerodev/wallet-core` (the bare specifier) instead.');
|
|
5
|
+
}
|
|
6
|
+
export { authenticateWithEmail, authenticateWithOAuth, getAuthenticators, getUserWallet, getWhoami, loginWithOTP, registerWithOTP, sign7702Authorization, signMessage, signTransaction, signTypedDataV4, signUserOperation, } from './actions/index.js';
|
|
7
|
+
export { toViemAccount } from './adapters/viem.js';
|
|
8
|
+
export { zeroDevWalletActions } from './client/decorators/client.js';
|
|
9
|
+
export { createBaseClient, createClient, zeroDevWalletTransport, } from './client/index.js';
|
|
10
|
+
export { KMS_SERVER_URL } from './constants.js';
|
|
11
|
+
// RN entry re-exports through a thin wrapper that auto-injects the
|
|
12
|
+
// `Origin: https://${rpId}` header on Turnkey requests. `ZeroDevWalletConfig`
|
|
13
|
+
// matches the strict `ZeroDevWalletConfigCore` shape, so RN consumers still
|
|
14
|
+
// get compile-time enforcement of the four required adapter fields.
|
|
15
|
+
export { createZeroDevWallet, } from './native/createZeroDevWallet.js';
|
|
16
|
+
export { exportPrivateKey } from './utils/exportPrivateKey.js';
|
|
17
|
+
export { exportWallet } from './utils/exportWallet.js';
|
|
18
|
+
export { normalizeTimestamp } from './utils/utils.js';
|
|
19
|
+
//# sourceMappingURL=index.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.native.js","sourceRoot":"","sources":["../../src/index.native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;IACrB,0GAA0G;IAC1G,OAAO,CAAC,IAAI,CACV,+LAA+L,CAChM,CAAA;AACH,CAAC;AAuCD,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAOpE,OAAO,EACL,gBAAgB,EAChB,YAAY,EAEZ,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAK/C,mEAAmE;AACnE,8EAA8E;AAC9E,4EAA4E;AAC5E,oEAAoE;AACpE,OAAO,EACL,mBAAmB,GAEpB,MAAM,iCAAiC,CAAA;AAYxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createZeroDevWalletCore, } from '../core/createZeroDevWalletCore.js';
|
|
2
|
+
export async function createZeroDevWallet(config) {
|
|
3
|
+
return createZeroDevWalletCore({
|
|
4
|
+
...config,
|
|
5
|
+
fetchOptions: config.fetchOptions ?? {
|
|
6
|
+
headers: { Origin: `https://${config.rpId}` },
|
|
7
|
+
},
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=createZeroDevWallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createZeroDevWallet.js","sourceRoot":"","sources":["../../../src/native/createZeroDevWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GAGxB,MAAM,oCAAoC,CAAA;AAY3C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA2B;IAE3B,OAAO,uBAAuB,CAAC;QAC7B,GAAG,MAAM;QACT,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI;YACnC,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,MAAM,CAAC,IAAI,EAAE,EAAE;SAC9C;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { createPasskey, PasskeyStamper as TurnkeyPasskeyStamper, } from '@turnkey/react-native-passkey-stamper';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
+
export async function createReactNativePasskeyStamper({ rpId, }) {
|
|
4
|
+
const inner = new TurnkeyPasskeyStamper({ rpId });
|
|
5
|
+
return {
|
|
6
|
+
async stamp(payload) {
|
|
7
|
+
return await inner.stamp(payload);
|
|
8
|
+
},
|
|
9
|
+
async clear() { },
|
|
10
|
+
async register({ rp, userName }) {
|
|
11
|
+
const { attestation, challenge: encodedChallenge } = await createPasskey({
|
|
12
|
+
rp: {
|
|
13
|
+
id: rp.id,
|
|
14
|
+
name: rp.name ?? 'Turnkey',
|
|
15
|
+
},
|
|
16
|
+
user: {
|
|
17
|
+
id: uuidv4(),
|
|
18
|
+
name: userName,
|
|
19
|
+
displayName: userName,
|
|
20
|
+
},
|
|
21
|
+
authenticatorName: userName ?? 'End-User Passkey',
|
|
22
|
+
});
|
|
23
|
+
return { attestation, encodedChallenge };
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=passkey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passkey.js","sourceRoot":"","sources":["../../../../src/native/stampers/passkey.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,IAAI,qBAAqB,GACxC,MAAM,uCAAuC,CAAA;AAC9C,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAA;AAMnC,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,EACpD,IAAI,GAGL;IACC,MAAM,KAAK,GAAG,IAAI,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;IAEjD,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,OAAe;YACzB,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;QACD,KAAK,CAAC,KAAK,KAAI,CAAC;QAChB,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,QAAQ,EAA8B;YACzD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,aAAa,CAAC;gBACvE,EAAE,EAAE;oBACF,EAAE,EAAE,EAAE,CAAC,EAAE;oBACT,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,SAAS;iBAC3B;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,MAAM,EAAE;oBACZ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,QAAQ;iBACtB;gBACD,iBAAiB,EAAE,QAAQ,IAAI,kBAAkB;aAClD,CAAC,CAAA;YACF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAA;QAC1C,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { ApiKeyStamper, SignatureFormat } from '@turnkey/api-key-stamper';
|
|
2
|
+
import { generateP256KeyPair } from '@turnkey/crypto';
|
|
3
|
+
import * as SecureStore from 'expo-secure-store';
|
|
4
|
+
const PUBLIC_KEY = 'zerodev.publicKey';
|
|
5
|
+
const PRIVATE_KEY = 'zerodev.privateKey';
|
|
6
|
+
class SecureStoreStamperInner {
|
|
7
|
+
constructor() {
|
|
8
|
+
Object.defineProperty(this, "publicKeyHex", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
configurable: true,
|
|
11
|
+
writable: true,
|
|
12
|
+
value: null
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async init() {
|
|
16
|
+
const publicKey = await SecureStore.getItemAsync(PUBLIC_KEY);
|
|
17
|
+
const privateKey = await SecureStore.getItemAsync(PRIVATE_KEY);
|
|
18
|
+
if (publicKey && privateKey) {
|
|
19
|
+
this.publicKeyHex = publicKey;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
await this.resetKeyPair();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async getPublicKey() {
|
|
26
|
+
return this.publicKeyHex;
|
|
27
|
+
}
|
|
28
|
+
async resetKeyPair(externalKeyPair) {
|
|
29
|
+
await this.clear();
|
|
30
|
+
const pair = externalKeyPair ?? generateP256KeyPair();
|
|
31
|
+
await SecureStore.setItemAsync(PUBLIC_KEY, pair.publicKey);
|
|
32
|
+
await SecureStore.setItemAsync(PRIVATE_KEY, pair.privateKey);
|
|
33
|
+
this.publicKeyHex = pair.publicKey;
|
|
34
|
+
}
|
|
35
|
+
async getTurnkeyApiKeyStamper() {
|
|
36
|
+
if (!this.publicKeyHex) {
|
|
37
|
+
throw new Error('Key not initialized. Call init() or resetKeyPair() first.');
|
|
38
|
+
}
|
|
39
|
+
const privateKey = await SecureStore.getItemAsync(PRIVATE_KEY);
|
|
40
|
+
if (!privateKey) {
|
|
41
|
+
throw new Error('No private key found in secure store.');
|
|
42
|
+
}
|
|
43
|
+
return new ApiKeyStamper({
|
|
44
|
+
apiPublicKey: this.publicKeyHex,
|
|
45
|
+
apiPrivateKey: privateKey,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
async stamp(payload) {
|
|
49
|
+
const stamper = await this.getTurnkeyApiKeyStamper();
|
|
50
|
+
const { stampHeaderName, stampHeaderValue } = await stamper.stamp(payload);
|
|
51
|
+
return { stampHeaderName, stampHeaderValue };
|
|
52
|
+
}
|
|
53
|
+
async sign(payload) {
|
|
54
|
+
const stamper = await this.getTurnkeyApiKeyStamper();
|
|
55
|
+
return stamper.sign(payload, SignatureFormat.Der);
|
|
56
|
+
}
|
|
57
|
+
async clear() {
|
|
58
|
+
await SecureStore.deleteItemAsync(PUBLIC_KEY);
|
|
59
|
+
await SecureStore.deleteItemAsync(PRIVATE_KEY);
|
|
60
|
+
this.publicKeyHex = null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
async function warmApiKeyStamperForMetroDev(inner) {
|
|
64
|
+
// `__DEV__` is a global set by React Native's Metro; read it via globalThis
|
|
65
|
+
// so this file needs no ambient `.d.ts` (which would conflict with RN's own
|
|
66
|
+
// typings when both happen to be in scope, e.g. in the editor).
|
|
67
|
+
if (!globalThis.__DEV__)
|
|
68
|
+
return;
|
|
69
|
+
// In Expo dev, Turnkey's API key stamper loads its React Native signer with a
|
|
70
|
+
// dynamic import the first time `stamp()` runs. OTP verification is usually
|
|
71
|
+
// the first code path that stamps a payload, and if the app was backgrounded
|
|
72
|
+
// while the user copied the code, Metro can serve that lazy module after
|
|
73
|
+
// foregrounding and trigger a full JS reload. Warming the stamper during dev
|
|
74
|
+
// startup makes Metro load the signer while the app is foregrounded; production
|
|
75
|
+
// builds do not use Metro and skip this block via `__DEV__`.
|
|
76
|
+
try {
|
|
77
|
+
await inner.stamp('{"purpose":"metro-dev-warmup"}');
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
// biome-ignore lint/suspicious/noConsole: This only runs in dev mode
|
|
81
|
+
console.warn('Failed to warm API key stamper in dev:', error);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export async function createSecureStoreStamper() {
|
|
85
|
+
const inner = new SecureStoreStamperInner();
|
|
86
|
+
await inner.init();
|
|
87
|
+
await warmApiKeyStamperForMetroDev(inner);
|
|
88
|
+
let pendingKeyPair = null;
|
|
89
|
+
return {
|
|
90
|
+
async getPublicKey() {
|
|
91
|
+
return inner.getPublicKey();
|
|
92
|
+
},
|
|
93
|
+
async stamp(payload) {
|
|
94
|
+
return inner.stamp(payload);
|
|
95
|
+
},
|
|
96
|
+
async sign(payload) {
|
|
97
|
+
return inner.sign(payload);
|
|
98
|
+
},
|
|
99
|
+
async clear() {
|
|
100
|
+
await inner.clear();
|
|
101
|
+
},
|
|
102
|
+
async resetKeyPair() {
|
|
103
|
+
pendingKeyPair = null;
|
|
104
|
+
await inner.resetKeyPair();
|
|
105
|
+
},
|
|
106
|
+
async prepareKeyRotation() {
|
|
107
|
+
const keyPair = generateP256KeyPair();
|
|
108
|
+
pendingKeyPair = keyPair;
|
|
109
|
+
return keyPair.publicKey;
|
|
110
|
+
},
|
|
111
|
+
async commitKeyRotation() {
|
|
112
|
+
if (!pendingKeyPair) {
|
|
113
|
+
throw new Error('No pending key rotation to commit');
|
|
114
|
+
}
|
|
115
|
+
await inner.resetKeyPair(pendingKeyPair);
|
|
116
|
+
pendingKeyPair = null;
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=secureStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secureStore.js","sourceRoot":"","sources":["../../../../src/native/stampers/secureStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as AsyncStorageNS from '@react-native-async-storage/async-storage';
|
|
2
|
+
// CJS package whose `.d.ts` declares `export default AsyncStorage`. Our tsconfig
|
|
3
|
+
// keeps `esModuleInterop: false` (and `verbatimModuleSyntax: true`), so a plain
|
|
4
|
+
// `import AsyncStorage from '...'` types as the module namespace instead of
|
|
5
|
+
// the default. Unwrap explicitly. At runtime Metro returns the default object
|
|
6
|
+
// either way; this only affects the static type.
|
|
7
|
+
const AsyncStorage = AsyncStorageNS.default;
|
|
8
|
+
export const asyncStorageAdapter = {
|
|
9
|
+
getItem: (key) => AsyncStorage.getItem(key),
|
|
10
|
+
setItem: (key, value) => AsyncStorage.setItem(key, value),
|
|
11
|
+
removeItem: (key) => AsyncStorage.removeItem(key),
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=asyncStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asyncStorage.js","sourceRoot":"","sources":["../../../../src/native/storage/asyncStorage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,cAAc,MAAM,2CAA2C,CAAA;AAG3E,iFAAiF;AACjF,gFAAgF;AAChF,4EAA4E;AAC5E,8EAA8E;AAC9E,iDAAiD;AACjD,MAAM,YAAY,GAChB,cACD,CAAC,OAAO,CAAA;AAET,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;IAC3C,OAAO,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;IACzD,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;CAClD,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const NOT_CONFIGURED_MESSAGE = 'passkeyStamper is not configured. Pass passkeyStamper to zeroDevWallet({ ... }) — use createReactNativePasskeyStamper({ rpId }) on React Native or createWebauthnStamper({ rpId }) on web.';
|
|
2
|
+
/**
|
|
3
|
+
* Internal fallback used when a consumer doesn't supply a `passkeyStamper`.
|
|
4
|
+
* Methods throw on use, so passkey register/login fails with an actionable
|
|
5
|
+
* message — all other flows (apiKey signing, OAuth, OTP) are unaffected.
|
|
6
|
+
*/
|
|
7
|
+
export function createNoopPasskeyStamper() {
|
|
8
|
+
return {
|
|
9
|
+
async stamp() {
|
|
10
|
+
throw new Error(NOT_CONFIGURED_MESSAGE);
|
|
11
|
+
},
|
|
12
|
+
async register() {
|
|
13
|
+
throw new Error(NOT_CONFIGURED_MESSAGE);
|
|
14
|
+
},
|
|
15
|
+
async clear() { },
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=noopPasskeyStamper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noopPasskeyStamper.js","sourceRoot":"","sources":["../../../src/stampers/noopPasskeyStamper.ts"],"names":[],"mappings":"AAEA,MAAM,sBAAsB,GAC1B,4LAA4L,CAAA;AAE9L;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,KAAK,CAAC,KAAK;YACT,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACzC,CAAC;QACD,KAAK,CAAC,QAAQ;YACZ,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACzC,CAAC;QACD,KAAK,CAAC,KAAK,KAAI,CAAC;KACjB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Catch-all stub used by every `./react-native/*` subpath in this package
|
|
2
|
+
// under the `browser` and `node` exports conditions. Both are needed for
|
|
3
|
+
// Expo web: the client bundle resolves with `browser` active, while Expo
|
|
4
|
+
// Router's SSR/RSC route render drops platform conditions (no `browser`)
|
|
5
|
+
// and turns on `node` instead — so the web stub has to be gated on both or
|
|
6
|
+
// the SSR pass falls through to the native impl. Imports must be safe on web
|
|
7
|
+
// (some route files are bundled even when they aren't rendered) so we expose
|
|
8
|
+
// the RN-only symbols as throw-on-use functions instead of throwing at
|
|
9
|
+
// module-init time.
|
|
10
|
+
//
|
|
11
|
+
// Anyone who *uses* these on web gets a clear actionable error; anyone who
|
|
12
|
+
// merely imports them (typically because their universal app bundles the
|
|
13
|
+
// native variant too) is unaffected.
|
|
14
|
+
const message = '@zerodev/wallet-core react-native subpaths cannot be imported in a web environment. Use the bare specifier (`import { ... } from "@zerodev/wallet-core"`) instead.';
|
|
15
|
+
function throwOnUse() {
|
|
16
|
+
throw new Error(message);
|
|
17
|
+
}
|
|
18
|
+
export const createSecureStoreStamper = throwOnUse;
|
|
19
|
+
export const createReactNativePasskeyStamper = throwOnUse;
|
|
20
|
+
export const asyncStorageAdapter = throwOnUse;
|
|
21
|
+
// For the broad `./react-native` entry: any consumer reaching it on web is
|
|
22
|
+
// already off-pattern (they should use the bare specifier). Default export
|
|
23
|
+
// covers `import X from '...'`.
|
|
24
|
+
export default throwOnUse;
|
|
25
|
+
//# sourceMappingURL=native-on-web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-on-web.js","sourceRoot":"","sources":["../../../src/stubs/native-on-web.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yEAAyE;AACzE,yEAAyE;AACzE,yEAAyE;AACzE,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,uEAAuE;AACvE,oBAAoB;AACpB,EAAE;AACF,2EAA2E;AAC3E,yEAAyE;AACzE,qCAAqC;AAErC,MAAM,OAAO,GACX,oKAAoK,CAAA;AAEtK,SAAS,UAAU;IACjB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAA;AAClD,MAAM,CAAC,MAAM,+BAA+B,GAAG,UAAU,CAAA;AACzD,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAA;AAE7C,2EAA2E;AAC3E,2EAA2E;AAC3E,gCAAgC;AAChC,eAAe,UAAU,CAAA"}
|
|
@@ -31,64 +31,59 @@
|
|
|
31
31
|
*/
|
|
32
32
|
export async function exportWallet(params) {
|
|
33
33
|
const { targetPublicKey, wallet } = params;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
throw new Error('Session not found');
|
|
38
|
-
}
|
|
39
|
-
const { organizationId } = session;
|
|
40
|
-
const listWalletsBody = JSON.stringify({
|
|
41
|
-
organizationId,
|
|
42
|
-
});
|
|
43
|
-
const listWalletsStamp = await wallet.client[session.stamperType === 'apiKey' ? 'apiKeyStamper' : 'passkeyStamper'].stamp(listWalletsBody);
|
|
44
|
-
if (!listWalletsStamp) {
|
|
45
|
-
throw new Error('Failed to stamp list wallets body');
|
|
46
|
-
}
|
|
47
|
-
const listWalletsResponse = await fetch('https://api.turnkey.com/public/v1/query/list_wallets', {
|
|
48
|
-
method: 'POST',
|
|
49
|
-
body: listWalletsBody,
|
|
50
|
-
headers: {
|
|
51
|
-
[listWalletsStamp.stampHeaderName]: listWalletsStamp.stampHeaderValue,
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
if (!listWalletsResponse.ok) {
|
|
55
|
-
throw new Error('Failed to list wallets');
|
|
56
|
-
}
|
|
57
|
-
const listWalletsData = await listWalletsResponse.json();
|
|
58
|
-
const walletId = listWalletsData.wallets[0].walletId;
|
|
59
|
-
const exportWalletBody = JSON.stringify({
|
|
60
|
-
type: 'ACTIVITY_TYPE_EXPORT_WALLET',
|
|
61
|
-
timestampMs: Date.now().toString(),
|
|
62
|
-
organizationId: organizationId,
|
|
63
|
-
parameters: {
|
|
64
|
-
walletId: walletId,
|
|
65
|
-
targetPublicKey,
|
|
66
|
-
language: 'MNEMONIC_LANGUAGE_ENGLISH',
|
|
67
|
-
},
|
|
68
|
-
});
|
|
69
|
-
const exportWalletStamp = await wallet.client[session.stamperType === 'apiKey' ? 'apiKeyStamper' : 'passkeyStamper'].stamp(exportWalletBody);
|
|
70
|
-
if (!exportWalletStamp) {
|
|
71
|
-
throw new Error('Failed to stamp export wallet body');
|
|
72
|
-
}
|
|
73
|
-
const exportWalletResponse = await fetch('https://api.turnkey.com/public/v1/submit/export_wallet', {
|
|
74
|
-
method: 'POST',
|
|
75
|
-
body: exportWalletBody,
|
|
76
|
-
headers: {
|
|
77
|
-
[exportWalletStamp.stampHeaderName]: exportWalletStamp.stampHeaderValue,
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
if (!exportWalletResponse.ok) {
|
|
81
|
-
throw new Error('Failed to export wallet');
|
|
82
|
-
}
|
|
83
|
-
const exportWalletData = await exportWalletResponse.json();
|
|
84
|
-
const exportBundle = exportWalletData?.activity?.result?.exportWalletResult?.exportBundle;
|
|
85
|
-
if (!exportBundle) {
|
|
86
|
-
throw new Error('Export bundle not found in response');
|
|
87
|
-
}
|
|
88
|
-
return { exportBundle, walletId, organizationId };
|
|
34
|
+
const session = await wallet.getSession();
|
|
35
|
+
if (!session) {
|
|
36
|
+
throw new Error('Session not found');
|
|
89
37
|
}
|
|
90
|
-
|
|
91
|
-
|
|
38
|
+
const { organizationId } = session;
|
|
39
|
+
const listWalletsBody = JSON.stringify({
|
|
40
|
+
organizationId,
|
|
41
|
+
});
|
|
42
|
+
const listWalletsStamp = await wallet.client[session.stamperType === 'apiKey' ? 'apiKeyStamper' : 'passkeyStamper'].stamp(listWalletsBody);
|
|
43
|
+
if (!listWalletsStamp) {
|
|
44
|
+
throw new Error('Failed to stamp list wallets body');
|
|
92
45
|
}
|
|
46
|
+
const listWalletsResponse = await fetch('https://api.turnkey.com/public/v1/query/list_wallets', {
|
|
47
|
+
method: 'POST',
|
|
48
|
+
body: listWalletsBody,
|
|
49
|
+
headers: {
|
|
50
|
+
[listWalletsStamp.stampHeaderName]: listWalletsStamp.stampHeaderValue,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
if (!listWalletsResponse.ok) {
|
|
54
|
+
throw new Error('Failed to list wallets');
|
|
55
|
+
}
|
|
56
|
+
const listWalletsData = await listWalletsResponse.json();
|
|
57
|
+
const walletId = listWalletsData.wallets[0].walletId;
|
|
58
|
+
const exportWalletBody = JSON.stringify({
|
|
59
|
+
type: 'ACTIVITY_TYPE_EXPORT_WALLET',
|
|
60
|
+
timestampMs: Date.now().toString(),
|
|
61
|
+
organizationId: organizationId,
|
|
62
|
+
parameters: {
|
|
63
|
+
walletId: walletId,
|
|
64
|
+
targetPublicKey,
|
|
65
|
+
language: 'MNEMONIC_LANGUAGE_ENGLISH',
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
const exportWalletStamp = await wallet.client[session.stamperType === 'apiKey' ? 'apiKeyStamper' : 'passkeyStamper'].stamp(exportWalletBody);
|
|
69
|
+
if (!exportWalletStamp) {
|
|
70
|
+
throw new Error('Failed to stamp export wallet body');
|
|
71
|
+
}
|
|
72
|
+
const exportWalletResponse = await fetch('https://api.turnkey.com/public/v1/submit/export_wallet', {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
body: exportWalletBody,
|
|
75
|
+
headers: {
|
|
76
|
+
[exportWalletStamp.stampHeaderName]: exportWalletStamp.stampHeaderValue,
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
if (!exportWalletResponse.ok) {
|
|
80
|
+
throw new Error('Failed to export wallet');
|
|
81
|
+
}
|
|
82
|
+
const exportWalletData = await exportWalletResponse.json();
|
|
83
|
+
const exportBundle = exportWalletData?.activity?.result?.exportWalletResult?.exportBundle;
|
|
84
|
+
if (!exportBundle) {
|
|
85
|
+
throw new Error('Export bundle not found in response');
|
|
86
|
+
}
|
|
87
|
+
return { exportBundle, walletId, organizationId };
|
|
93
88
|
}
|
|
94
89
|
//# sourceMappingURL=exportWallet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportWallet.js","sourceRoot":"","sources":["../../../src/utils/exportWallet.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAA8B;IAE9B,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAE1C,
|
|
1
|
+
{"version":3,"file":"exportWallet.js","sourceRoot":"","sources":["../../../src/utils/exportWallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function isReactNative() {
|
|
2
|
+
if (typeof navigator !== 'undefined' &&
|
|
3
|
+
navigator.product === 'ReactNative') {
|
|
4
|
+
return true;
|
|
5
|
+
}
|
|
6
|
+
if (typeof window !== 'undefined' &&
|
|
7
|
+
Object.hasOwn(window, 'ReactNativeWebView')) {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
if (typeof globalThis !== 'undefined' &&
|
|
11
|
+
Object.hasOwn(globalThis, 'HermesEngine')) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../../src/utils/platform.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa;IAC3B,IACE,OAAO,SAAS,KAAK,WAAW;QAC/B,SAAkC,CAAC,OAAO,KAAK,aAAa,EAC7D,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IACE,OAAO,MAAM,KAAK,WAAW;QAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC3C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IACE,OAAO,UAAU,KAAK,WAAW;QACjC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,EACzC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createZeroDevWalletCore, } from '../core/createZeroDevWalletCore.js';
|
|
2
|
+
import { createIndexedDbStamper } from '../stampers/indexedDbStamper.js';
|
|
3
|
+
import { createWebauthnStamper } from '../stampers/webauthnStamper.js';
|
|
4
|
+
import { createWebStorageAdapter } from '../storage/adapters.js';
|
|
5
|
+
export async function createZeroDevWallet(config) {
|
|
6
|
+
const rpId = config.rpId ?? window.location.hostname;
|
|
7
|
+
const apiKeyStamper = config.apiKeyStamper ?? (await createIndexedDbStamper());
|
|
8
|
+
const passkeyStamper = config.passkeyStamper ?? (await createWebauthnStamper({ rpId }));
|
|
9
|
+
const sessionStorage = config.sessionStorage ?? createWebStorageAdapter();
|
|
10
|
+
return createZeroDevWalletCore({
|
|
11
|
+
...config,
|
|
12
|
+
rpId,
|
|
13
|
+
apiKeyStamper,
|
|
14
|
+
passkeyStamper,
|
|
15
|
+
sessionStorage,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=createZeroDevWallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createZeroDevWallet.js","sourceRoot":"","sources":["../../../src/web/createZeroDevWallet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GAGxB,MAAM,oCAAoC,CAAA;AAC3C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAA;AAExE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAA;AAoBhE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA2B;IAE3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAA;IACpD,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,MAAM,sBAAsB,EAAE,CAAC,CAAA;IAC9E,MAAM,cAAc,GAClB,MAAM,CAAC,cAAc,IAAI,CAAC,MAAM,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAClE,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,uBAAuB,EAAE,CAAA;IAEzE,OAAO,uBAAuB,CAAC;QAC7B,GAAG,MAAM;QACT,IAAI;QACJ,aAAa;QACb,cAAc;QACd,cAAc;KACf,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -4,13 +4,13 @@ import { type CreateTransportOptions, type ZeroDevWalletClient } from '../client
|
|
|
4
4
|
import type { ApiKeyStamper, PasskeyStamper } from '../stampers/types.js';
|
|
5
5
|
import { type StorageAdapter } from '../storage/manager.js';
|
|
6
6
|
import { type ZeroDevWalletSession } from '../types/session.js';
|
|
7
|
-
export interface
|
|
7
|
+
export interface ZeroDevWalletConfigCore {
|
|
8
8
|
organizationId?: string;
|
|
9
9
|
proxyBaseUrl?: string;
|
|
10
10
|
projectId: string;
|
|
11
|
-
sessionStorage
|
|
12
|
-
rpId
|
|
13
|
-
apiKeyStamper
|
|
11
|
+
sessionStorage: StorageAdapter;
|
|
12
|
+
rpId: string;
|
|
13
|
+
apiKeyStamper: ApiKeyStamper;
|
|
14
14
|
passkeyStamper?: PasskeyStamper;
|
|
15
15
|
fetchOptions?: CreateTransportOptions['fetchOptions'];
|
|
16
16
|
}
|
|
@@ -74,5 +74,5 @@ export interface ZeroDevWalletSDK {
|
|
|
74
74
|
logout: () => Promise<boolean>;
|
|
75
75
|
toAccount: () => Promise<LocalAccount>;
|
|
76
76
|
}
|
|
77
|
-
export declare function
|
|
78
|
-
//# sourceMappingURL=
|
|
77
|
+
export declare function createZeroDevWalletCore(config: ZeroDevWalletConfigCore): Promise<ZeroDevWalletSDK>;
|
|
78
|
+
//# sourceMappingURL=createZeroDevWalletCore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createZeroDevWalletCore.d.ts","sourceRoot":"","sources":["../../../src/core/createZeroDevWalletCore.ts"],"names":[],"mappings":"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"}
|
package/dist/_types/index.d.ts
CHANGED
|
@@ -7,9 +7,8 @@ export { zeroDevWalletActions } from './client/decorators/client.js';
|
|
|
7
7
|
export type { Client, ClientConfig, CreateTransportOptions, Transport, } from './client/index.js';
|
|
8
8
|
export { createBaseClient, createClient, type ZeroDevWalletClient, zeroDevWalletTransport, } from './client/index.js';
|
|
9
9
|
export { KMS_SERVER_URL } from './constants.js';
|
|
10
|
-
export type { AuthParams,
|
|
11
|
-
export {
|
|
12
|
-
export { createIframeStamper, createIndexedDbStamper, createWebauthnStamper, } from './stampers/index.js';
|
|
10
|
+
export type { AuthParams, ZeroDevWalletSDK, } from './core/createZeroDevWalletCore.js';
|
|
11
|
+
export { createIframeStamper } from './stampers/iframeStamper.js';
|
|
13
12
|
export type { ApiKeyStamper, Attestation, IframeStamper, PasskeyRegistrationOptions, PasskeyRegistrationResult, PasskeyStamper, } from './stampers/types.js';
|
|
14
13
|
export type { StorageAdapter, StorageManager } from './storage/manager.js';
|
|
15
14
|
export type { StamperType, ZeroDevWalletSession } from './types/session.js';
|
|
@@ -17,4 +16,5 @@ export type { KeyFormat } from './utils/exportPrivateKey.js';
|
|
|
17
16
|
export { exportPrivateKey } from './utils/exportPrivateKey.js';
|
|
18
17
|
export { exportWallet } from './utils/exportWallet.js';
|
|
19
18
|
export { normalizeTimestamp } from './utils/utils.js';
|
|
19
|
+
export { createZeroDevWallet, type ZeroDevWalletConfig, } from './web/createZeroDevWallet.js';
|
|
20
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AASA,YAAY,EAEV,mBAAmB,EACnB,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,EAC/B,YAAY,EACZ,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAE3B,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,EACzB,+BAA+B,EAC/B,+BAA+B,EAC/B,qBAAqB,EACrB,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAEL,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EAEjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AACpE,YAAY,EACV,MAAM,EACN,YAAY,EACZ,sBAAsB,EACtB,SAAS,GACV,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,KAAK,mBAAmB,EACxB,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,YAAY,EACV,UAAU,EACV,gBAAgB,GACjB,MAAM,mCAAmC,CAAA;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,YAAY,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,0BAA0B,EAC1B,yBAAyB,EACzB,cAAc,GACf,MAAM,qBAAqB,CAAA;AAE5B,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1E,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,YAAY,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAKrD,OAAO,EACL,mBAAmB,EACnB,KAAK,mBAAmB,GACzB,MAAM,8BAA8B,CAAA"}
|