@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 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 wallet.exportWallet(targetPublicKey);
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
@@ -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");
@@ -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;AAWvB,2DAAsD;AAA7C,+GAAA,YAAY,OAAA;AAErB,6CAAqD;AAA5C,8GAAA,kBAAkB,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":";;AAGA,kDA+BC;AAlCD,4DAA+E;AAGxE,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;KACF,CAAA;AACH,CAAC"}
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"}
@@ -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';
@@ -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;AAU5B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,QAAQ;AACR,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,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,EAAE,aAAa,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAG/E,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;KACF,CAAA;AACH,CAAC"}
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"}
@@ -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":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,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,CA2BzB"}
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"}