@zerodev/wallet-core 0.0.1-alpha.5 → 0.0.1-alpha.6
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 +43 -2
- package/dist/_cjs/index.js +3 -1
- package/dist/_cjs/index.js.map +1 -1
- package/dist/_cjs/stampers/iframeStamper.js +3 -0
- package/dist/_cjs/stampers/iframeStamper.js.map +1 -1
- package/dist/_cjs/utils/exportPrivateKey.js +55 -0
- package/dist/_cjs/utils/exportPrivateKey.js.map +1 -0
- package/dist/_esm/index.js +1 -0
- package/dist/_esm/index.js.map +1 -1
- package/dist/_esm/stampers/iframeStamper.js +4 -1
- package/dist/_esm/stampers/iframeStamper.js.map +1 -1
- package/dist/_esm/utils/exportPrivateKey.js +83 -0
- package/dist/_esm/utils/exportPrivateKey.js.map +1 -0
- package/dist/_types/index.d.ts +2 -0
- package/dist/_types/index.d.ts.map +1 -1
- package/dist/_types/stampers/iframeStamper.d.ts.map +1 -1
- package/dist/_types/stampers/types.d.ts +2 -0
- package/dist/_types/stampers/types.d.ts.map +1 -1
- package/dist/_types/utils/exportPrivateKey.d.ts +47 -0
- package/dist/_types/utils/exportPrivateKey.d.ts.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/index.ts +2 -0
- package/src/stampers/iframeStamper.ts +16 -2
- package/src/stampers/types.ts +7 -0
- package/src/utils/exportPrivateKey.ts +116 -0
package/README.md
CHANGED
|
@@ -213,7 +213,7 @@ Export your wallet's seed phrase using Turnkey's secure iframe:
|
|
|
213
213
|
|
|
214
214
|
**Usage:**
|
|
215
215
|
```typescript
|
|
216
|
-
import { createIframeStamper } from '@zerodev/wallet-core';
|
|
216
|
+
import { createIframeStamper, exportWallet } from '@zerodev/wallet-core';
|
|
217
217
|
|
|
218
218
|
// 1. Create export iframe stamper
|
|
219
219
|
// IMPORTANT: Container element must exist in DOM first!
|
|
@@ -227,7 +227,10 @@ const exportIframeStamper = await createIframeStamper({
|
|
|
227
227
|
const targetPublicKey = await exportIframeStamper.init();
|
|
228
228
|
|
|
229
229
|
// 3. Get encrypted export bundle from SDK
|
|
230
|
-
const { exportBundle, organizationId } = await
|
|
230
|
+
const { exportBundle, organizationId } = await exportWallet({
|
|
231
|
+
wallet,
|
|
232
|
+
targetPublicKey
|
|
233
|
+
});
|
|
231
234
|
|
|
232
235
|
// 4. Inject into iframe to display seed phrase
|
|
233
236
|
await exportIframeStamper.injectWalletExportBundle(exportBundle, organizationId);
|
|
@@ -237,6 +240,44 @@ await exportIframeStamper.injectWalletExportBundle(exportBundle, organizationId)
|
|
|
237
240
|
|
|
238
241
|
**Note:** The SDK handles Turnkey API calls. The iframe handles secure decryption and display. The seed phrase never touches your JavaScript code.
|
|
239
242
|
|
|
243
|
+
## Export Private Key
|
|
244
|
+
|
|
245
|
+
Export your wallet account's private key using Turnkey's secure iframe:
|
|
246
|
+
|
|
247
|
+
**Setup:** Add a container element to your HTML:
|
|
248
|
+
```html
|
|
249
|
+
<div id="export-container"></div>
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**Usage:**
|
|
253
|
+
```typescript
|
|
254
|
+
import { createIframeStamper, exportPrivateKey } from '@zerodev/wallet-core';
|
|
255
|
+
|
|
256
|
+
// 1. Create export iframe stamper
|
|
257
|
+
const exportIframeStamper = await createIframeStamper({
|
|
258
|
+
iframeUrl: 'https://export.turnkey.com',
|
|
259
|
+
iframeContainer: document.getElementById('export-container'),
|
|
260
|
+
iframeElementId: 'export-iframe'
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
// 2. Initialize iframe and get target public key
|
|
264
|
+
const targetPublicKey = await exportIframeStamper.init();
|
|
265
|
+
|
|
266
|
+
// 3. Get encrypted export bundle from SDK
|
|
267
|
+
const { exportBundle, organizationId } = await exportPrivateKey({
|
|
268
|
+
wallet,
|
|
269
|
+
targetPublicKey,
|
|
270
|
+
// address: '0x...' // Optional: defaults to wallet's account address
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
// 4. Inject into iframe to display private key
|
|
274
|
+
await exportIframeStamper.injectKeyExportBundle(exportBundle, organizationId, 'Hexadecimal');
|
|
275
|
+
|
|
276
|
+
// The private key is now visible in the 'export-container' div
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
**Note:** The private key never touches your JavaScript code - it's decrypted inside Turnkey's iframe.
|
|
280
|
+
|
|
240
281
|
## TypeScript Types
|
|
241
282
|
|
|
242
283
|
```typescript
|
package/dist/_cjs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.normalizeTimestamp = exports.exportWallet = exports.createWebauthnStamper = exports.createIndexedDbStamper = exports.createIframeStamper = exports.createZeroDevWallet = exports.zeroDevWalletTransport = exports.createClient = exports.createBaseClient = exports.zeroDevWalletActions = exports.toViemAccount = exports.signTransaction = exports.signRawPayload = exports.registerWithOTP = exports.loginWithOTP = exports.getWhoami = exports.getUserWallet = exports.authenticateWithOAuth = exports.authenticateWithEmail = void 0;
|
|
3
|
+
exports.normalizeTimestamp = exports.exportWallet = exports.exportPrivateKey = exports.createWebauthnStamper = exports.createIndexedDbStamper = exports.createIframeStamper = exports.createZeroDevWallet = exports.zeroDevWalletTransport = exports.createClient = exports.createBaseClient = exports.zeroDevWalletActions = exports.toViemAccount = exports.signTransaction = exports.signRawPayload = exports.registerWithOTP = exports.loginWithOTP = exports.getWhoami = exports.getUserWallet = exports.authenticateWithOAuth = exports.authenticateWithEmail = void 0;
|
|
4
4
|
var index_js_1 = require("./actions/index.js");
|
|
5
5
|
Object.defineProperty(exports, "authenticateWithEmail", { enumerable: true, get: function () { return index_js_1.authenticateWithEmail; } });
|
|
6
6
|
Object.defineProperty(exports, "authenticateWithOAuth", { enumerable: true, get: function () { return index_js_1.authenticateWithOAuth; } });
|
|
@@ -24,6 +24,8 @@ var index_js_3 = require("./stampers/index.js");
|
|
|
24
24
|
Object.defineProperty(exports, "createIframeStamper", { enumerable: true, get: function () { return index_js_3.createIframeStamper; } });
|
|
25
25
|
Object.defineProperty(exports, "createIndexedDbStamper", { enumerable: true, get: function () { return index_js_3.createIndexedDbStamper; } });
|
|
26
26
|
Object.defineProperty(exports, "createWebauthnStamper", { enumerable: true, get: function () { return index_js_3.createWebauthnStamper; } });
|
|
27
|
+
var exportPrivateKey_js_1 = require("./utils/exportPrivateKey.js");
|
|
28
|
+
Object.defineProperty(exports, "exportPrivateKey", { enumerable: true, get: function () { return exportPrivateKey_js_1.exportPrivateKey; } });
|
|
27
29
|
var exportWallet_js_1 = require("./utils/exportWallet.js");
|
|
28
30
|
Object.defineProperty(exports, "exportWallet", { enumerable: true, get: function () { return exportWallet_js_1.exportWallet; } });
|
|
29
31
|
var utils_js_1 = require("./utils/utils.js");
|
package/dist/_cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAwBA,+CAW2B;AATzB,iHAAA,qBAAqB,OAAA;AACrB,iHAAA,qBAAqB,OAAA;AAErB,yGAAA,aAAa,OAAA;AACb,qGAAA,SAAS,OAAA;AACT,wGAAA,YAAY,OAAA;AACZ,2GAAA,eAAe,OAAA;AACf,0GAAA,cAAc,OAAA;AACd,2GAAA,eAAe,OAAA;AAIjB,8CAAkD;AAAzC,wGAAA,aAAa,OAAA;AAGtB,2DAAoE;AAA3D,iHAAA,oBAAoB,OAAA;AAG7B,8CAK0B;AAJxB,4GAAA,gBAAgB,OAAA;AAChB,wGAAA,YAAY,OAAA;AAEZ,kHAAA,sBAAsB,OAAA;AAQxB,wEAAmE;AAA1D,6HAAA,mBAAmB,OAAA;AAE5B,gDAI4B;AAH1B,+GAAA,mBAAmB,OAAA;AACnB,kHAAA,sBAAsB,OAAA;AACtB,iHAAA,qBAAqB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAwBA,+CAW2B;AATzB,iHAAA,qBAAqB,OAAA;AACrB,iHAAA,qBAAqB,OAAA;AAErB,yGAAA,aAAa,OAAA;AACb,qGAAA,SAAS,OAAA;AACT,wGAAA,YAAY,OAAA;AACZ,2GAAA,eAAe,OAAA;AACf,0GAAA,cAAc,OAAA;AACd,2GAAA,eAAe,OAAA;AAIjB,8CAAkD;AAAzC,wGAAA,aAAa,OAAA;AAGtB,2DAAoE;AAA3D,iHAAA,oBAAoB,OAAA;AAG7B,8CAK0B;AAJxB,4GAAA,gBAAgB,OAAA;AAChB,wGAAA,YAAY,OAAA;AAEZ,kHAAA,sBAAsB,OAAA;AAQxB,wEAAmE;AAA1D,6HAAA,mBAAmB,OAAA;AAE5B,gDAI4B;AAH1B,+GAAA,mBAAmB,OAAA;AACnB,kHAAA,sBAAsB,OAAA;AACtB,iHAAA,qBAAqB,OAAA;AAYvB,mEAA8D;AAArD,uHAAA,gBAAgB,OAAA;AACzB,2DAAsD;AAA7C,+GAAA,YAAY,OAAA;AAErB,6CAAqD;AAA5C,8GAAA,kBAAkB,OAAA"}
|
|
@@ -27,6 +27,9 @@ async function createIframeStamper(cfg) {
|
|
|
27
27
|
async injectWalletExportBundle(bundle, organizationId) {
|
|
28
28
|
return await inner.injectWalletExportBundle(bundle, organizationId);
|
|
29
29
|
},
|
|
30
|
+
async injectKeyExportBundle(bundle, organizationId, keyFormat) {
|
|
31
|
+
return await inner.injectKeyExportBundle(bundle, organizationId, keyFormat ? iframe_stamper_1.KeyFormat[keyFormat] : iframe_stamper_1.KeyFormat.Hexadecimal);
|
|
32
|
+
},
|
|
30
33
|
};
|
|
31
34
|
}
|
|
32
35
|
//# sourceMappingURL=iframeStamper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iframeStamper.js","sourceRoot":"","sources":["../../../src/stampers/iframeStamper.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"iframeStamper.js","sourceRoot":"","sources":["../../../src/stampers/iframeStamper.ts"],"names":[],"mappings":";;AAMA,kDA0CC;AAhDD,4DAGgC;AAGzB,KAAK,UAAU,mBAAmB,CAAC,GAIzC;IACC,MAAM,KAAK,GAAG,IAAI,8BAAoB,CAAC;QACrC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,eAAe,EAAE,GAAG,CAAC,eAAe;KACrC,CAAC,CAAA;IAEF,OAAO;QACL,KAAK,CAAC,IAAI;YACR,OAAO,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QAC3B,CAAC;QACD,KAAK,CAAC,sBAAsB,CAAC,MAAc;YACzC,OAAO,MAAM,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAA;QACnD,CAAC;QACD,KAAK,CAAC,YAAY;YAChB,OAAO,MAAM,KAAK,CAAC,oBAAoB,EAAE,CAAA;QAC3C,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,OAAe;YACzB,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QACD,KAAK,CAAC,wBAAwB,CAAC,MAAc,EAAE,cAAsB;YACnE,OAAO,MAAM,KAAK,CAAC,wBAAwB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;QACrE,CAAC;QACD,KAAK,CAAC,qBAAqB,CACzB,MAAc,EACd,cAAsB,EACtB,SAAyB;YAEzB,OAAO,MAAM,KAAK,CAAC,qBAAqB,CACtC,MAAM,EACN,cAAc,EACd,SAAS,CAAC,CAAC,CAAC,0BAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,0BAAS,CAAC,WAAW,CACzD,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.exportPrivateKey = exportPrivateKey;
|
|
4
|
+
async function exportPrivateKey(params) {
|
|
5
|
+
const { targetPublicKey, wallet, address: addressParam } = params;
|
|
6
|
+
const session = await wallet.getSession();
|
|
7
|
+
if (!session) {
|
|
8
|
+
throw new Error('Session not found');
|
|
9
|
+
}
|
|
10
|
+
const { organizationId } = session;
|
|
11
|
+
let address = addressParam;
|
|
12
|
+
if (!address) {
|
|
13
|
+
const account = await wallet.toAccount();
|
|
14
|
+
if (!account?.address) {
|
|
15
|
+
throw new Error('Could not get address from wallet account');
|
|
16
|
+
}
|
|
17
|
+
address = account.address;
|
|
18
|
+
}
|
|
19
|
+
const exportBody = JSON.stringify({
|
|
20
|
+
type: 'ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT',
|
|
21
|
+
timestampMs: Date.now().toString(),
|
|
22
|
+
organizationId: organizationId,
|
|
23
|
+
parameters: {
|
|
24
|
+
address: address,
|
|
25
|
+
targetPublicKey,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
const stamperKey = session.stamperType === 'indexedDb' ? 'indexedDbStamper' : 'webauthnStamper';
|
|
29
|
+
const stamper = wallet.client[stamperKey];
|
|
30
|
+
if (!stamper) {
|
|
31
|
+
throw new Error(`Stamper '${stamperKey}' not found on wallet.client`);
|
|
32
|
+
}
|
|
33
|
+
const exportStamp = await stamper.stamp(exportBody);
|
|
34
|
+
if (!exportStamp) {
|
|
35
|
+
throw new Error('Failed to stamp export body');
|
|
36
|
+
}
|
|
37
|
+
const exportResponse = await fetch('https://api.turnkey.com/public/v1/submit/export_wallet_account', {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
body: exportBody,
|
|
40
|
+
headers: {
|
|
41
|
+
[exportStamp.stampHeaderName]: exportStamp.stampHeaderValue,
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
if (!exportResponse.ok) {
|
|
45
|
+
const errorText = await exportResponse.text();
|
|
46
|
+
throw new Error(`Failed to export wallet account: ${exportResponse.status} ${errorText}`);
|
|
47
|
+
}
|
|
48
|
+
const exportData = await exportResponse.json();
|
|
49
|
+
const exportBundle = exportData?.activity?.result?.exportWalletAccountResult?.exportBundle;
|
|
50
|
+
if (!exportBundle) {
|
|
51
|
+
throw new Error(`Export bundle not found in response: ${JSON.stringify(exportData)}`);
|
|
52
|
+
}
|
|
53
|
+
return { exportBundle, address: address, organizationId };
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=exportPrivateKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exportPrivateKey.js","sourceRoot":"","sources":["../../../src/utils/exportPrivateKey.ts"],"names":[],"mappings":";;AA0CA,4CAuEC;AAvEM,KAAK,UAAU,gBAAgB,CACpC,MAAkC;IAElC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAAA;IAEjE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAA;IAGlC,IAAI,OAAO,GAAG,YAAY,CAAA;IAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAA;QACxC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;QAC9D,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAC3B,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,EAAE,qCAAqC;QAC3C,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAClC,cAAc,EAAE,cAAc;QAC9B,UAAU,EAAE;YACV,OAAO,EAAE,OAAO;YAChB,eAAe;SAChB;KACF,CAAC,CAAA;IAEF,MAAM,UAAU,GACd,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAA;IAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,8BAA8B,CAAC,CAAA;IACvE,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IACnD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,gEAAgE,EAChE;QACE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE;YACP,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,gBAAgB;SAC5D;KACF,CACF,CAAA;IACD,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAA;QAC7C,MAAM,IAAI,KAAK,CACb,oCAAoC,cAAc,CAAC,MAAM,IAAI,SAAS,EAAE,CACzE,CAAA;IACH,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAA;IAE9C,MAAM,YAAY,GAChB,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,yBAAyB,EAAE,YAAY,CAAA;IAEvE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,wCAAwC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CACrE,CAAA;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAQ,EAAE,cAAc,EAAE,CAAA;AAC5D,CAAC"}
|
package/dist/_esm/index.js
CHANGED
|
@@ -14,6 +14,7 @@ export { createBaseClient, createClient, zeroDevWalletTransport, } from './clien
|
|
|
14
14
|
export { createZeroDevWallet } from './core/createZeroDevWallet.js';
|
|
15
15
|
// Stampers
|
|
16
16
|
export { createIframeStamper, createIndexedDbStamper, createWebauthnStamper, } from './stampers/index.js';
|
|
17
|
+
export { exportPrivateKey } from './utils/exportPrivateKey.js';
|
|
17
18
|
export { exportWallet } from './utils/exportWallet.js';
|
|
18
19
|
// Utils
|
|
19
20
|
export { normalizeTimestamp } from './utils/utils.js';
|
package/dist/_esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAuBA,UAAU;AACV,OAAO;AACL,eAAe;AACf,qBAAqB,EACrB,qBAAqB;AACrB,iBAAiB;AACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAE3B,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAEpE,SAAS;AACT,OAAO,EACL,gBAAgB,EAChB,YAAY,EAEZ,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAM1B,OAAO;AACP,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,WAAW;AACX,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAuBA,UAAU;AACV,OAAO;AACL,eAAe;AACf,qBAAqB,EACrB,qBAAqB;AACrB,iBAAiB;AACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,oBAAoB,CAAA;AAE3B,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,oBAAoB;AACpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAEpE,SAAS;AACT,OAAO,EACL,gBAAgB,EAChB,YAAY,EAEZ,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAM1B,OAAO;AACP,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,WAAW;AACX,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,qBAAqB,CAAA;AAW5B,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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IframeStamper as TurnkeyIframeStamper } from '@turnkey/iframe-stamper';
|
|
1
|
+
import { KeyFormat, IframeStamper as TurnkeyIframeStamper, } from '@turnkey/iframe-stamper';
|
|
2
2
|
export async function createIframeStamper(cfg) {
|
|
3
3
|
const inner = new TurnkeyIframeStamper({
|
|
4
4
|
iframeUrl: cfg.iframeUrl,
|
|
@@ -24,6 +24,9 @@ export async function createIframeStamper(cfg) {
|
|
|
24
24
|
async injectWalletExportBundle(bundle, organizationId) {
|
|
25
25
|
return await inner.injectWalletExportBundle(bundle, organizationId);
|
|
26
26
|
},
|
|
27
|
+
async injectKeyExportBundle(bundle, organizationId, keyFormat) {
|
|
28
|
+
return await inner.injectKeyExportBundle(bundle, organizationId, keyFormat ? KeyFormat[keyFormat] : KeyFormat.Hexadecimal);
|
|
29
|
+
},
|
|
27
30
|
};
|
|
28
31
|
}
|
|
29
32
|
//# sourceMappingURL=iframeStamper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iframeStamper.js","sourceRoot":"","sources":["../../../src/stampers/iframeStamper.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"iframeStamper.js","sourceRoot":"","sources":["../../../src/stampers/iframeStamper.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,aAAa,IAAI,oBAAoB,GACtC,MAAM,yBAAyB,CAAA;AAGhC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAIzC;IACC,MAAM,KAAK,GAAG,IAAI,oBAAoB,CAAC;QACrC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,eAAe,EAAE,GAAG,CAAC,eAAe;KACrC,CAAC,CAAA;IAEF,OAAO;QACL,KAAK,CAAC,IAAI;YACR,OAAO,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;QAC3B,CAAC;QACD,KAAK,CAAC,sBAAsB,CAAC,MAAc;YACzC,OAAO,MAAM,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAA;QACnD,CAAC;QACD,KAAK,CAAC,YAAY;YAChB,OAAO,MAAM,KAAK,CAAC,oBAAoB,EAAE,CAAA;QAC3C,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,OAAe;YACzB,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;QACD,KAAK,CAAC,KAAK;YACT,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QACD,KAAK,CAAC,wBAAwB,CAAC,MAAc,EAAE,cAAsB;YACnE,OAAO,MAAM,KAAK,CAAC,wBAAwB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;QACrE,CAAC;QACD,KAAK,CAAC,qBAAqB,CACzB,MAAc,EACd,cAAsB,EACtB,SAAyB;YAEzB,OAAO,MAAM,KAAK,CAAC,qBAAqB,CACtC,MAAM,EACN,cAAc,EACd,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CACzD,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export a wallet account's private key
|
|
3
|
+
*
|
|
4
|
+
* This calls Turnkey's export_wallet_account API to get an encrypted bundle
|
|
5
|
+
* containing the account's private key. The bundle is encrypted with the
|
|
6
|
+
* targetPublicKey (from Turnkey's export iframe).
|
|
7
|
+
*
|
|
8
|
+
* @param params - Export parameters
|
|
9
|
+
* @returns Encrypted export bundle and metadata
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* // In UI: Initialize export iframe first
|
|
14
|
+
* const iframeStamper = await createIframeStamper({
|
|
15
|
+
* iframeUrl: 'https://export.turnkey.com',
|
|
16
|
+
* iframeContainer: document.getElementById('export-container'),
|
|
17
|
+
* iframeElementId: 'export-iframe'
|
|
18
|
+
* });
|
|
19
|
+
* const targetPublicKey = await iframeStamper.init();
|
|
20
|
+
*
|
|
21
|
+
* // Call SDK to get encrypted bundle
|
|
22
|
+
* const { exportBundle, address, organizationId } = await exportPrivateKey({
|
|
23
|
+
* wallet,
|
|
24
|
+
* targetPublicKey
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* // Inject into iframe to display private key
|
|
28
|
+
* await iframeStamper.injectKeyExportBundle(exportBundle, organizationId, 'Hexadecimal');
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export async function exportPrivateKey(params) {
|
|
32
|
+
const { targetPublicKey, wallet, address: addressParam } = params;
|
|
33
|
+
const session = await wallet.getSession();
|
|
34
|
+
if (!session) {
|
|
35
|
+
throw new Error('Session not found');
|
|
36
|
+
}
|
|
37
|
+
const { organizationId } = session;
|
|
38
|
+
// If address not provided, get it from the wallet's account
|
|
39
|
+
let address = addressParam;
|
|
40
|
+
if (!address) {
|
|
41
|
+
const account = await wallet.toAccount();
|
|
42
|
+
if (!account?.address) {
|
|
43
|
+
throw new Error('Could not get address from wallet account');
|
|
44
|
+
}
|
|
45
|
+
address = account.address;
|
|
46
|
+
}
|
|
47
|
+
const exportBody = JSON.stringify({
|
|
48
|
+
type: 'ACTIVITY_TYPE_EXPORT_WALLET_ACCOUNT',
|
|
49
|
+
timestampMs: Date.now().toString(),
|
|
50
|
+
organizationId: organizationId,
|
|
51
|
+
parameters: {
|
|
52
|
+
address: address,
|
|
53
|
+
targetPublicKey,
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
const stamperKey = session.stamperType === 'indexedDb' ? 'indexedDbStamper' : 'webauthnStamper';
|
|
57
|
+
const stamper = wallet.client[stamperKey];
|
|
58
|
+
if (!stamper) {
|
|
59
|
+
throw new Error(`Stamper '${stamperKey}' not found on wallet.client`);
|
|
60
|
+
}
|
|
61
|
+
const exportStamp = await stamper.stamp(exportBody);
|
|
62
|
+
if (!exportStamp) {
|
|
63
|
+
throw new Error('Failed to stamp export body');
|
|
64
|
+
}
|
|
65
|
+
const exportResponse = await fetch('https://api.turnkey.com/public/v1/submit/export_wallet_account', {
|
|
66
|
+
method: 'POST',
|
|
67
|
+
body: exportBody,
|
|
68
|
+
headers: {
|
|
69
|
+
[exportStamp.stampHeaderName]: exportStamp.stampHeaderValue,
|
|
70
|
+
},
|
|
71
|
+
});
|
|
72
|
+
if (!exportResponse.ok) {
|
|
73
|
+
const errorText = await exportResponse.text();
|
|
74
|
+
throw new Error(`Failed to export wallet account: ${exportResponse.status} ${errorText}`);
|
|
75
|
+
}
|
|
76
|
+
const exportData = await exportResponse.json();
|
|
77
|
+
const exportBundle = exportData?.activity?.result?.exportWalletAccountResult?.exportBundle;
|
|
78
|
+
if (!exportBundle) {
|
|
79
|
+
throw new Error(`Export bundle not found in response: ${JSON.stringify(exportData)}`);
|
|
80
|
+
}
|
|
81
|
+
return { exportBundle, address: address, organizationId };
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=exportPrivateKey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exportPrivateKey.js","sourceRoot":"","sources":["../../../src/utils/exportPrivateKey.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAkC;IAElC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAAA;IAEjE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAA;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACtC,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAA;IAElC,4DAA4D;IAC5D,IAAI,OAAO,GAAG,YAAY,CAAA;IAC1B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAA;QACxC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;QAC9D,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAC3B,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,EAAE,qCAAqC;QAC3C,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAClC,cAAc,EAAE,cAAc;QAC9B,UAAU,EAAE;YACV,OAAO,EAAE,OAAO;YAChB,eAAe;SAChB;KACF,CAAC,CAAA;IAEF,MAAM,UAAU,GACd,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAA;IAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,YAAY,UAAU,8BAA8B,CAAC,CAAA;IACvE,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IACnD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,gEAAgE,EAChE;QACE,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE;YACP,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,gBAAgB;SAC5D;KACF,CACF,CAAA;IACD,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAA;QAC7C,MAAM,IAAI,KAAK,CACb,oCAAoC,cAAc,CAAC,MAAM,IAAI,SAAS,EAAE,CACzE,CAAA;IACH,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,CAAA;IAE9C,MAAM,YAAY,GAChB,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,yBAAyB,EAAE,YAAY,CAAA;IAEvE,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,wCAAwC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CACrE,CAAA;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAQ,EAAE,cAAc,EAAE,CAAA;AAC5D,CAAC"}
|
package/dist/_types/index.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export { createIframeStamper, createIndexedDbStamper, createWebauthnStamper, } f
|
|
|
12
12
|
export type { IframeStamper, IndexedDbStamper, WebauthnStamper, } from './stampers/types.js';
|
|
13
13
|
export type { StorageAdapter, StorageManager } from './storage/manager.js';
|
|
14
14
|
export type { StamperType, ZeroDevWalletSession } from './types/session.js';
|
|
15
|
+
export type { KeyFormat } from './utils/exportPrivateKey.js';
|
|
16
|
+
export { exportPrivateKey } from './utils/exportPrivateKey.js';
|
|
15
17
|
export { exportWallet } from './utils/exportWallet.js';
|
|
16
18
|
export { normalizeTimestamp } from './utils/utils.js';
|
|
17
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAEV,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,EAC/B,kBAAkB,EAElB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,UAAU,EACV,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAEL,qBAAqB,EACrB,qBAAqB,EAErB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,eAAe,GAChB,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,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAExE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,KAAK,mBAAmB,EACxB,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAEnE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAE5B,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1E,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAEV,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,EAC/B,+BAA+B,EAC/B,kBAAkB,EAElB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,UAAU,EACV,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EAEL,qBAAqB,EACrB,qBAAqB,EAErB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,eAAe,EACf,cAAc,EACd,eAAe,GAChB,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,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAExE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,KAAK,mBAAmB,EACxB,sBAAsB,GACvB,MAAM,mBAAmB,CAAA;AAC1B,YAAY,EACV,UAAU,EACV,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AAEnE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iframeStamper.d.ts","sourceRoot":"","sources":["../../../src/stampers/iframeStamper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"iframeStamper.d.ts","sourceRoot":"","sources":["../../../src/stampers/iframeStamper.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAA8B,MAAM,YAAY,CAAA;AAE3E,wBAAsB,mBAAmB,CAAC,GAAG,EAAE;IAC7C,SAAS,EAAE,MAAM,CAAA;IACjB,eAAe,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAAA;IAC/C,eAAe,EAAE,MAAM,CAAA;CACxB,GAAG,OAAO,CAAC,aAAa,CAAC,CAsCzB"}
|
|
@@ -11,10 +11,12 @@ export type Stamper = {
|
|
|
11
11
|
/** clear local state (embedded key, IDB keypair, etc.) */
|
|
12
12
|
clear: () => Promise<void>;
|
|
13
13
|
};
|
|
14
|
+
export type KeyFormat = 'Hexadecimal' | 'Solana';
|
|
14
15
|
export type IframeStamper = Stamper & {
|
|
15
16
|
init(): Promise<string>;
|
|
16
17
|
injectCredentialBundle(bundle: string): Promise<boolean>;
|
|
17
18
|
injectWalletExportBundle(bundle: string, organizationId: string): Promise<boolean>;
|
|
19
|
+
injectKeyExportBundle(bundle: string, organizationId: string, keyFormat?: KeyFormat): Promise<boolean>;
|
|
18
20
|
};
|
|
19
21
|
export type IndexedDbStamper = Stamper & {
|
|
20
22
|
resetKeyPair: (externalKeyPair?: CryptoKeyPair) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/stampers/types.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,MAAM,KAAK,GAAG;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,qEAAqE;IACrE,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC1C,4DAA4D;IAC5D,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAA;IAC1C,0DAA0D;IAC1D,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;IACpC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACvB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACxD,wBAAwB,CACtB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG;IACvC,YAAY,EAAE,CAAC,eAAe,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACjE,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/stampers/types.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,MAAM,KAAK,GAAG;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,qEAAqE;IACrE,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC1C,4DAA4D;IAC5D,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,CAAA;IAC1C,0DAA0D;IAC1D,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAA;AAEhD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;IACpC,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACvB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACxD,wBAAwB,CACtB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAAA;IACnB,qBAAqB,CACnB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,OAAO,CAAC,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG;IACvC,YAAY,EAAE,CAAC,eAAe,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACjE,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { ZeroDevWalletSDK } from '../core/createZeroDevWallet.js';
|
|
2
|
+
import type { KeyFormat } from '../stampers/types.js';
|
|
3
|
+
export type ExportPrivateKeyParameters = {
|
|
4
|
+
/** Wallet to use for the export */
|
|
5
|
+
wallet: ZeroDevWalletSDK;
|
|
6
|
+
/** Target public key from export iframe for encryption */
|
|
7
|
+
targetPublicKey: string;
|
|
8
|
+
/** Wallet address to export (optional, defaults to wallet's account address) */
|
|
9
|
+
address?: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Export a wallet account's private key
|
|
13
|
+
*
|
|
14
|
+
* This calls Turnkey's export_wallet_account API to get an encrypted bundle
|
|
15
|
+
* containing the account's private key. The bundle is encrypted with the
|
|
16
|
+
* targetPublicKey (from Turnkey's export iframe).
|
|
17
|
+
*
|
|
18
|
+
* @param params - Export parameters
|
|
19
|
+
* @returns Encrypted export bundle and metadata
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```ts
|
|
23
|
+
* // In UI: Initialize export iframe first
|
|
24
|
+
* const iframeStamper = await createIframeStamper({
|
|
25
|
+
* iframeUrl: 'https://export.turnkey.com',
|
|
26
|
+
* iframeContainer: document.getElementById('export-container'),
|
|
27
|
+
* iframeElementId: 'export-iframe'
|
|
28
|
+
* });
|
|
29
|
+
* const targetPublicKey = await iframeStamper.init();
|
|
30
|
+
*
|
|
31
|
+
* // Call SDK to get encrypted bundle
|
|
32
|
+
* const { exportBundle, address, organizationId } = await exportPrivateKey({
|
|
33
|
+
* wallet,
|
|
34
|
+
* targetPublicKey
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
37
|
+
* // Inject into iframe to display private key
|
|
38
|
+
* await iframeStamper.injectKeyExportBundle(exportBundle, organizationId, 'Hexadecimal');
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function exportPrivateKey(params: ExportPrivateKeyParameters): Promise<{
|
|
42
|
+
exportBundle: string;
|
|
43
|
+
address: string;
|
|
44
|
+
organizationId: string;
|
|
45
|
+
}>;
|
|
46
|
+
export type { KeyFormat };
|
|
47
|
+
//# sourceMappingURL=exportPrivateKey.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exportPrivateKey.d.ts","sourceRoot":"","sources":["../../../src/utils/exportPrivateKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAErD,MAAM,MAAM,0BAA0B,GAAG;IACvC,mCAAmC;IACnC,MAAM,EAAE,gBAAgB,CAAA;IACxB,0DAA0D;IAC1D,eAAe,EAAE,MAAM,CAAA;IACvB,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAqE5E;AAED,YAAY,EAAE,SAAS,EAAE,CAAA"}
|