@turnkey/sdk-browser 0.0.1 → 0.1.0

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/__generated__/sdk-client-base.d.ts.map +1 -1
  3. package/dist/__generated__/sdk-client-base.js +173 -43
  4. package/dist/__generated__/sdk-client-base.js.map +1 -1
  5. package/dist/__generated__/sdk-client-base.mjs +173 -43
  6. package/dist/__generated__/sdk-client-base.mjs.map +1 -1
  7. package/dist/__generated__/version.d.ts +1 -1
  8. package/dist/__generated__/version.js +1 -1
  9. package/dist/__generated__/version.mjs +1 -1
  10. package/dist/__polyfills__/window.d.ts +15 -0
  11. package/dist/__polyfills__/window.d.ts.map +1 -0
  12. package/dist/__polyfills__/window.js +30 -0
  13. package/dist/__polyfills__/window.js.map +1 -0
  14. package/dist/__polyfills__/window.mjs +28 -0
  15. package/dist/__polyfills__/window.mjs.map +1 -0
  16. package/dist/index.d.ts +5 -5
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +6 -2
  19. package/dist/index.js.map +1 -1
  20. package/dist/index.mjs +2 -2
  21. package/dist/models.d.ts +0 -5
  22. package/dist/models.d.ts.map +1 -1
  23. package/dist/sdk-client.d.ts +18 -22
  24. package/dist/sdk-client.d.ts.map +1 -1
  25. package/dist/sdk-client.js +70 -131
  26. package/dist/sdk-client.js.map +1 -1
  27. package/dist/sdk-client.mjs +69 -132
  28. package/dist/sdk-client.mjs.map +1 -1
  29. package/dist/storage.d.ts +2 -6
  30. package/dist/storage.d.ts.map +1 -1
  31. package/dist/storage.js +5 -9
  32. package/dist/storage.js.map +1 -1
  33. package/dist/storage.mjs +5 -9
  34. package/dist/storage.mjs.map +1 -1
  35. package/dist/turnkey-helpers.d.ts +2 -0
  36. package/dist/turnkey-helpers.d.ts.map +1 -1
  37. package/dist/turnkey-helpers.js +13 -0
  38. package/dist/turnkey-helpers.js.map +1 -1
  39. package/dist/turnkey-helpers.mjs +12 -1
  40. package/dist/turnkey-helpers.mjs.map +1 -1
  41. package/package.json +4 -3
  42. package/dist/constants.d.ts +0 -4
  43. package/dist/constants.d.ts.map +0 -1
  44. package/dist/constants.js +0 -18
  45. package/dist/constants.js.map +0 -1
  46. package/dist/constants.mjs +0 -15
  47. package/dist/constants.mjs.map +0 -1
@@ -1,16 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var apiKeyStamper = require('@turnkey/api-key-stamper');
4
3
  var webauthnStamper = require('@turnkey/webauthn-stamper');
5
4
  var iframeStamper = require('@turnkey/iframe-stamper');
6
5
  var http = require('@turnkey/http');
7
6
  var version = require('./__generated__/version.js');
7
+ var window = require('./__polyfills__/window.js');
8
8
  var base = require('./__types__/base.js');
9
9
  var sdkClientBase = require('./__generated__/sdk-client-base.js');
10
- var elliptic = require('elliptic');
11
10
  var storage = require('./storage.js');
12
11
  var utils = require('./utils.js');
13
- var constants = require('./constants.js');
14
12
 
15
13
  class TurnkeyBrowserSDK {
16
14
  constructor(config) {
@@ -20,10 +18,11 @@ class TurnkeyBrowserSDK {
20
18
  return;
21
19
  }
22
20
  if (currentUser?.readOnlySession?.sessionExpiry > Date.now()) {
23
- return new TurnkeySDKBrowserClient({
21
+ return new TurnkeyBrowserClient({
24
22
  readOnlySession: currentUser?.readOnlySession?.session,
25
23
  apiBaseUrl: this.config.apiBaseUrl,
26
- organizationId: this.config.defaultOrganizationId,
24
+ organizationId: currentUser?.organization?.organizationId ??
25
+ this.config.defaultOrganizationId,
27
26
  });
28
27
  }
29
28
  else {
@@ -31,50 +30,38 @@ class TurnkeyBrowserSDK {
31
30
  }
32
31
  return;
33
32
  };
34
- this.passkeySigner = async (rpId) => {
33
+ this.passkeyClient = (rpId) => {
35
34
  const targetRpId = rpId ?? this.config.rpId ?? window.location.hostname;
36
35
  if (!targetRpId) {
37
- throw new Error("Tried to initialize a passkey signer with no rpId defined");
36
+ throw new Error("Tried to initialize a passkey client with no rpId defined");
38
37
  }
39
38
  const webauthnStamper$1 = new webauthnStamper.WebauthnStamper({
40
39
  rpId: targetRpId,
41
40
  });
42
- return new TurnkeySDKBrowserClient({
41
+ return new TurnkeyPasskeyClient({
43
42
  stamper: webauthnStamper$1,
44
43
  apiBaseUrl: this.config.apiBaseUrl,
45
44
  organizationId: this.config.defaultOrganizationId,
46
45
  });
47
46
  };
48
- this.iframeSigner = async (iframeContainer, iframeUrl) => {
47
+ this.iframeClient = async (iframeContainer, iframeUrl) => {
49
48
  const targetIframeUrl = iframeUrl ?? this.config.iframeUrl;
50
49
  if (!targetIframeUrl) {
51
50
  throw new Error("Tried to initialize iframeSigner with no iframeUrl defined");
52
51
  }
53
- const TurnkeyIframeElementId = "turnkey-auth-iframe-element-id";
52
+ const TurnkeyIframeElementId = "turnkey-default-iframe-element-id";
54
53
  const iframeStamper$1 = new iframeStamper.IframeStamper({
55
54
  iframeUrl: targetIframeUrl,
56
55
  iframeElementId: TurnkeyIframeElementId,
57
56
  iframeContainer: iframeContainer,
58
57
  });
59
58
  await iframeStamper$1.init();
60
- return new TurnkeySDKBrowserClient({
59
+ return new TurnkeyIframeClient({
61
60
  stamper: iframeStamper$1,
62
61
  apiBaseUrl: this.config.apiBaseUrl,
63
62
  organizationId: this.config.defaultOrganizationId,
64
63
  });
65
64
  };
66
- this.sessionSigner = async () => {
67
- const signingSession = await storage.getStorageValue(storage.StorageKeys.CurrentSigningSession);
68
- const sessionStamper = new apiKeyStamper.ApiKeyStamper({
69
- apiPublicKey: signingSession.publicKey,
70
- apiPrivateKey: signingSession.privateKey,
71
- });
72
- return new TurnkeySDKBrowserClient({
73
- stamper: sessionStamper,
74
- apiBaseUrl: this.config.apiBaseUrl,
75
- organizationId: this.config.defaultOrganizationId,
76
- });
77
- };
78
65
  this.serverSign = async (methodName, params, serverSignUrl) => {
79
66
  const targetServerSignUrl = serverSignUrl ?? this.config.serverSignUrl;
80
67
  if (!targetServerSignUrl) {
@@ -107,14 +94,62 @@ class TurnkeyBrowserSDK {
107
94
  return data;
108
95
  };
109
96
  // Local
97
+ this.getCurrentSubOrganization = async () => {
98
+ const currentUser = await this.getCurrentUser();
99
+ return currentUser?.organization;
100
+ };
101
+ this.getCurrentUser = async () => {
102
+ return await storage.getStorageValue(storage.StorageKeys.CurrentUser);
103
+ };
104
+ this.logoutUser = async () => {
105
+ await storage.removeStorageValue(storage.StorageKeys.CurrentUser);
106
+ return true;
107
+ };
108
+ this.config = config;
109
+ }
110
+ }
111
+ class TurnkeyBrowserClient extends sdkClientBase.TurnkeySDKClientBase {
112
+ constructor(config) {
113
+ super(config);
114
+ this.login = async () => {
115
+ const readOnlySessionResult = await this.createReadOnlySession({});
116
+ const org = {
117
+ organizationId: readOnlySessionResult.organizationId,
118
+ organizationName: readOnlySessionResult.organizationName,
119
+ };
120
+ const currentUser = {
121
+ userId: readOnlySessionResult.userId,
122
+ username: readOnlySessionResult.username,
123
+ organization: org,
124
+ readOnlySession: {
125
+ session: readOnlySessionResult.session,
126
+ sessionExpiry: Number(readOnlySessionResult.sessionExpiry),
127
+ },
128
+ };
129
+ await storage.setStorageValue(storage.StorageKeys.CurrentUser, currentUser);
130
+ return readOnlySessionResult;
131
+ };
132
+ }
133
+ }
134
+ class TurnkeyPasskeyClient extends TurnkeyBrowserClient {
135
+ constructor(config) {
136
+ super(config);
110
137
  this.createUserPasskey = async (config = {}) => {
111
138
  const challenge = utils.generateRandomBuffer();
112
139
  const encodedChallenge = utils.base64UrlEncode(challenge);
113
140
  const authenticatorUserId = utils.generateRandomBuffer();
141
+ // WebAuthn credential options options can be found here:
142
+ // https://www.w3.org/TR/webauthn-2/#sctn-sample-registration
143
+ //
144
+ // All pubkey algorithms can be found here: https://www.iana.org/assignments/cose/cose.xhtml#algorithms
145
+ // Turnkey only supports ES256 (-7) and RS256 (-257)
146
+ //
147
+ // The pubkey type only supports one value, "public-key"
148
+ // See https://www.w3.org/TR/webauthn-2/#enumdef-publickeycredentialtype for more details
114
149
  const webauthnConfig = {
115
150
  publicKey: {
116
151
  rp: {
117
- id: config.publicKey?.rp?.id ?? "",
152
+ id: config.publicKey?.rp?.id ?? this.rpId,
118
153
  name: config.publicKey?.rp?.name ?? "",
119
154
  },
120
155
  challenge: config.publicKey?.challenge ?? challenge,
@@ -126,8 +161,8 @@ class TurnkeyBrowserSDK {
126
161
  ],
127
162
  user: {
128
163
  id: config.publicKey?.user?.id ?? authenticatorUserId,
129
- name: config.publicKey?.user?.name ?? "",
130
- displayName: config.publicKey?.user?.displayName ?? "",
164
+ name: config.publicKey?.user?.name ?? "Default User",
165
+ displayName: config.publicKey?.user?.displayName ?? "Default User",
131
166
  },
132
167
  authenticatorSelection: {
133
168
  requireResidentKey: config.publicKey?.authenticatorSelection?.requireResidentKey ??
@@ -146,118 +181,22 @@ class TurnkeyBrowserSDK {
146
181
  attestation: attestation,
147
182
  };
148
183
  };
149
- this.getCurrentSubOrganization = async () => {
150
- const currentUser = await this.getCurrentUser();
151
- return currentUser?.organization;
152
- };
153
- this.getCurrentUser = async () => {
154
- return await storage.getStorageValue(storage.StorageKeys.CurrentUser);
155
- };
156
- this.getCurrentSigningSession = async () => {
157
- return await storage.getStorageValue(storage.StorageKeys.CurrentSigningSession);
158
- };
159
- this.isSigningSessionActive = async () => {
160
- const signingSession = await this.getCurrentSigningSession();
161
- if (signingSession && signingSession.expiration > Date.now()) {
162
- return true;
163
- }
164
- return false;
165
- };
166
- this.logoutUser = async () => {
167
- await storage.removeStorageValue(storage.StorageKeys.CurrentUser);
168
- await storage.removeStorageValue(storage.StorageKeys.CurrentSubOrganization);
169
- return true;
170
- };
171
- this.config = config;
184
+ this.rpId = config.stamper.rpId;
172
185
  }
173
186
  }
174
- class TurnkeySDKBrowserClient extends sdkClientBase.TurnkeySDKClientBase {
187
+ class TurnkeyIframeClient extends TurnkeyBrowserClient {
175
188
  constructor(config) {
176
189
  super(config);
177
- this.createWalletWithAccount = async (params) => {
178
- switch (params.accountChain) {
179
- case "solana": {
180
- return await this.createWallet({
181
- walletName: params.walletName,
182
- accounts: [constants.DEFAULT_SOLANA_WALLET_ACCOUNT],
183
- });
184
- }
185
- default: {
186
- return await this.createWallet({
187
- walletName: params.walletName,
188
- accounts: [constants.DEFAULT_ETHEREUM_WALLET_ACCOUNT],
189
- });
190
- }
191
- }
192
- };
193
- this.createNextWalletAccount = async (params) => {
194
- const walletAccounts = await this.getWalletAccounts({
195
- walletId: params.walletId,
196
- });
197
- const lastAccount = walletAccounts.accounts[walletAccounts.accounts.length - 1];
198
- const lastAccountPath = lastAccount.path.split("/");
199
- const lastAccountPathIndex = lastAccountPath[3].replace(/[^0-9]/g, "");
200
- const nextPathIndex = Number(lastAccountPathIndex) + 1;
201
- lastAccountPath[3] = `${nextPathIndex}'`;
202
- const nextAccountPath = lastAccountPath.join("/");
203
- return await this.createWalletAccounts({
204
- walletId: params.walletId,
205
- accounts: [
206
- {
207
- curve: lastAccount.curve,
208
- pathFormat: lastAccount.pathFormat,
209
- addressFormat: lastAccount.addressFormat,
210
- path: nextAccountPath,
211
- },
212
- ],
213
- });
214
- };
215
- this.login = async () => {
216
- const readOnlySessionResult = await this.createReadOnlySession({});
217
- const org = {
218
- organizationId: readOnlySessionResult.organizationId,
219
- organizationName: readOnlySessionResult.organizationName,
220
- };
221
- const currentUser = {
222
- userId: readOnlySessionResult.userId,
223
- username: readOnlySessionResult.username,
224
- organization: org,
225
- readOnlySession: {
226
- session: readOnlySessionResult.session,
227
- sessionExpiry: Number(readOnlySessionResult.sessionExpiry),
228
- },
229
- };
230
- await storage.setStorageValue(storage.StorageKeys.CurrentUser, currentUser);
231
- await storage.setStorageValue(storage.StorageKeys.CurrentSubOrganization, org);
232
- return readOnlySessionResult;
233
- };
234
- this.createSigningSessionKey = async (params) => {
235
- const currentUser = await storage.getStorageValue(storage.StorageKeys.CurrentUser);
236
- const ec = new elliptic.ec("p256");
237
- const keyPair = ec.genKeyPair();
238
- const signingSession = {
239
- publicKey: keyPair.getPublic(true, "hex"),
240
- privateKey: keyPair.getPrivate("hex"),
241
- expiration: Date.now() + params.duration * 1000,
242
- };
243
- const response = await this.createApiKeys({
244
- apiKeys: [
245
- {
246
- apiKeyName: `Short-lived Signing Session Key ${Date.now()}`,
247
- publicKey: signingSession.publicKey,
248
- expirationSeconds: `${params.duration}`,
249
- },
250
- ],
251
- userId: currentUser.userId,
252
- });
253
- if (response) {
254
- storage.setStorageValue(storage.StorageKeys.CurrentSigningSession, signingSession);
255
- }
256
- return response;
190
+ this.injectCredentialBundle = async (credentialBundle) => {
191
+ const stamper = this.config.stamper;
192
+ return await stamper.injectCredentialBundle(credentialBundle);
257
193
  };
194
+ this.iframePublicKey = config.stamper.iframePublicKey;
258
195
  }
259
196
  }
260
197
 
198
+ exports.TurnkeyBrowserClient = TurnkeyBrowserClient;
261
199
  exports.TurnkeyBrowserSDK = TurnkeyBrowserSDK;
262
- exports.TurnkeySDKBrowserClient = TurnkeySDKBrowserClient;
200
+ exports.TurnkeyIframeClient = TurnkeyIframeClient;
201
+ exports.TurnkeyPasskeyClient = TurnkeyPasskeyClient;
263
202
  //# sourceMappingURL=sdk-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-client.js","sources":["../src/sdk-client.ts"],"sourcesContent":[null],"names":["webauthnStamper","WebauthnStamper","iframeStamper","IframeStamper","getStorageValue","StorageKeys","ApiKeyStamper","VERSION","TurnkeyRequestError","generateRandomBuffer","base64UrlEncode","getWebAuthnAttestation","removeStorageValue","TurnkeySDKClientBase","DEFAULT_SOLANA_WALLET_ACCOUNT","DEFAULT_ETHEREUM_WALLET_ACCOUNT","setStorageValue"],"mappings":"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"}
1
+ {"version":3,"file":"sdk-client.js","sources":["../src/sdk-client.ts"],"sourcesContent":[null],"names":["WindowWrapper","webauthnStamper","WebauthnStamper","iframeStamper","IframeStamper","VERSION","TurnkeyRequestError","getStorageValue","StorageKeys","removeStorageValue","TurnkeySDKClientBase","setStorageValue","generateRandomBuffer","base64UrlEncode","getWebAuthnAttestation"],"mappings":"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"}
@@ -1,14 +1,12 @@
1
- import { ApiKeyStamper } from '@turnkey/api-key-stamper';
2
1
  import { WebauthnStamper } from '@turnkey/webauthn-stamper';
3
2
  import { IframeStamper } from '@turnkey/iframe-stamper';
4
3
  import { getWebAuthnAttestation } from '@turnkey/http';
5
4
  import { VERSION } from './__generated__/version.mjs';
5
+ import WindowWrapper from './__polyfills__/window.mjs';
6
6
  import { TurnkeyRequestError } from './__types__/base.mjs';
7
7
  import { TurnkeySDKClientBase } from './__generated__/sdk-client-base.mjs';
8
- import elliptic from 'elliptic';
9
8
  import { getStorageValue, StorageKeys, removeStorageValue, setStorageValue } from './storage.mjs';
10
9
  import { generateRandomBuffer, base64UrlEncode } from './utils.mjs';
11
- import { DEFAULT_ETHEREUM_WALLET_ACCOUNT, DEFAULT_SOLANA_WALLET_ACCOUNT } from './constants.mjs';
12
10
 
13
11
  class TurnkeyBrowserSDK {
14
12
  constructor(config) {
@@ -18,10 +16,11 @@ class TurnkeyBrowserSDK {
18
16
  return;
19
17
  }
20
18
  if (currentUser?.readOnlySession?.sessionExpiry > Date.now()) {
21
- return new TurnkeySDKBrowserClient({
19
+ return new TurnkeyBrowserClient({
22
20
  readOnlySession: currentUser?.readOnlySession?.session,
23
21
  apiBaseUrl: this.config.apiBaseUrl,
24
- organizationId: this.config.defaultOrganizationId,
22
+ organizationId: currentUser?.organization?.organizationId ??
23
+ this.config.defaultOrganizationId,
25
24
  });
26
25
  }
27
26
  else {
@@ -29,50 +28,38 @@ class TurnkeyBrowserSDK {
29
28
  }
30
29
  return;
31
30
  };
32
- this.passkeySigner = async (rpId) => {
33
- const targetRpId = rpId ?? this.config.rpId ?? window.location.hostname;
31
+ this.passkeyClient = (rpId) => {
32
+ const targetRpId = rpId ?? this.config.rpId ?? WindowWrapper.location.hostname;
34
33
  if (!targetRpId) {
35
- throw new Error("Tried to initialize a passkey signer with no rpId defined");
34
+ throw new Error("Tried to initialize a passkey client with no rpId defined");
36
35
  }
37
36
  const webauthnStamper = new WebauthnStamper({
38
37
  rpId: targetRpId,
39
38
  });
40
- return new TurnkeySDKBrowserClient({
39
+ return new TurnkeyPasskeyClient({
41
40
  stamper: webauthnStamper,
42
41
  apiBaseUrl: this.config.apiBaseUrl,
43
42
  organizationId: this.config.defaultOrganizationId,
44
43
  });
45
44
  };
46
- this.iframeSigner = async (iframeContainer, iframeUrl) => {
45
+ this.iframeClient = async (iframeContainer, iframeUrl) => {
47
46
  const targetIframeUrl = iframeUrl ?? this.config.iframeUrl;
48
47
  if (!targetIframeUrl) {
49
48
  throw new Error("Tried to initialize iframeSigner with no iframeUrl defined");
50
49
  }
51
- const TurnkeyIframeElementId = "turnkey-auth-iframe-element-id";
50
+ const TurnkeyIframeElementId = "turnkey-default-iframe-element-id";
52
51
  const iframeStamper = new IframeStamper({
53
52
  iframeUrl: targetIframeUrl,
54
53
  iframeElementId: TurnkeyIframeElementId,
55
54
  iframeContainer: iframeContainer,
56
55
  });
57
56
  await iframeStamper.init();
58
- return new TurnkeySDKBrowserClient({
57
+ return new TurnkeyIframeClient({
59
58
  stamper: iframeStamper,
60
59
  apiBaseUrl: this.config.apiBaseUrl,
61
60
  organizationId: this.config.defaultOrganizationId,
62
61
  });
63
62
  };
64
- this.sessionSigner = async () => {
65
- const signingSession = await getStorageValue(StorageKeys.CurrentSigningSession);
66
- const sessionStamper = new ApiKeyStamper({
67
- apiPublicKey: signingSession.publicKey,
68
- apiPrivateKey: signingSession.privateKey,
69
- });
70
- return new TurnkeySDKBrowserClient({
71
- stamper: sessionStamper,
72
- apiBaseUrl: this.config.apiBaseUrl,
73
- organizationId: this.config.defaultOrganizationId,
74
- });
75
- };
76
63
  this.serverSign = async (methodName, params, serverSignUrl) => {
77
64
  const targetServerSignUrl = serverSignUrl ?? this.config.serverSignUrl;
78
65
  if (!targetServerSignUrl) {
@@ -105,14 +92,62 @@ class TurnkeyBrowserSDK {
105
92
  return data;
106
93
  };
107
94
  // Local
95
+ this.getCurrentSubOrganization = async () => {
96
+ const currentUser = await this.getCurrentUser();
97
+ return currentUser?.organization;
98
+ };
99
+ this.getCurrentUser = async () => {
100
+ return await getStorageValue(StorageKeys.CurrentUser);
101
+ };
102
+ this.logoutUser = async () => {
103
+ await removeStorageValue(StorageKeys.CurrentUser);
104
+ return true;
105
+ };
106
+ this.config = config;
107
+ }
108
+ }
109
+ class TurnkeyBrowserClient extends TurnkeySDKClientBase {
110
+ constructor(config) {
111
+ super(config);
112
+ this.login = async () => {
113
+ const readOnlySessionResult = await this.createReadOnlySession({});
114
+ const org = {
115
+ organizationId: readOnlySessionResult.organizationId,
116
+ organizationName: readOnlySessionResult.organizationName,
117
+ };
118
+ const currentUser = {
119
+ userId: readOnlySessionResult.userId,
120
+ username: readOnlySessionResult.username,
121
+ organization: org,
122
+ readOnlySession: {
123
+ session: readOnlySessionResult.session,
124
+ sessionExpiry: Number(readOnlySessionResult.sessionExpiry),
125
+ },
126
+ };
127
+ await setStorageValue(StorageKeys.CurrentUser, currentUser);
128
+ return readOnlySessionResult;
129
+ };
130
+ }
131
+ }
132
+ class TurnkeyPasskeyClient extends TurnkeyBrowserClient {
133
+ constructor(config) {
134
+ super(config);
108
135
  this.createUserPasskey = async (config = {}) => {
109
136
  const challenge = generateRandomBuffer();
110
137
  const encodedChallenge = base64UrlEncode(challenge);
111
138
  const authenticatorUserId = generateRandomBuffer();
139
+ // WebAuthn credential options options can be found here:
140
+ // https://www.w3.org/TR/webauthn-2/#sctn-sample-registration
141
+ //
142
+ // All pubkey algorithms can be found here: https://www.iana.org/assignments/cose/cose.xhtml#algorithms
143
+ // Turnkey only supports ES256 (-7) and RS256 (-257)
144
+ //
145
+ // The pubkey type only supports one value, "public-key"
146
+ // See https://www.w3.org/TR/webauthn-2/#enumdef-publickeycredentialtype for more details
112
147
  const webauthnConfig = {
113
148
  publicKey: {
114
149
  rp: {
115
- id: config.publicKey?.rp?.id ?? "",
150
+ id: config.publicKey?.rp?.id ?? this.rpId,
116
151
  name: config.publicKey?.rp?.name ?? "",
117
152
  },
118
153
  challenge: config.publicKey?.challenge ?? challenge,
@@ -124,8 +159,8 @@ class TurnkeyBrowserSDK {
124
159
  ],
125
160
  user: {
126
161
  id: config.publicKey?.user?.id ?? authenticatorUserId,
127
- name: config.publicKey?.user?.name ?? "",
128
- displayName: config.publicKey?.user?.displayName ?? "",
162
+ name: config.publicKey?.user?.name ?? "Default User",
163
+ displayName: config.publicKey?.user?.displayName ?? "Default User",
129
164
  },
130
165
  authenticatorSelection: {
131
166
  requireResidentKey: config.publicKey?.authenticatorSelection?.requireResidentKey ??
@@ -144,117 +179,19 @@ class TurnkeyBrowserSDK {
144
179
  attestation: attestation,
145
180
  };
146
181
  };
147
- this.getCurrentSubOrganization = async () => {
148
- const currentUser = await this.getCurrentUser();
149
- return currentUser?.organization;
150
- };
151
- this.getCurrentUser = async () => {
152
- return await getStorageValue(StorageKeys.CurrentUser);
153
- };
154
- this.getCurrentSigningSession = async () => {
155
- return await getStorageValue(StorageKeys.CurrentSigningSession);
156
- };
157
- this.isSigningSessionActive = async () => {
158
- const signingSession = await this.getCurrentSigningSession();
159
- if (signingSession && signingSession.expiration > Date.now()) {
160
- return true;
161
- }
162
- return false;
163
- };
164
- this.logoutUser = async () => {
165
- await removeStorageValue(StorageKeys.CurrentUser);
166
- await removeStorageValue(StorageKeys.CurrentSubOrganization);
167
- return true;
168
- };
169
- this.config = config;
182
+ this.rpId = config.stamper.rpId;
170
183
  }
171
184
  }
172
- class TurnkeySDKBrowserClient extends TurnkeySDKClientBase {
185
+ class TurnkeyIframeClient extends TurnkeyBrowserClient {
173
186
  constructor(config) {
174
187
  super(config);
175
- this.createWalletWithAccount = async (params) => {
176
- switch (params.accountChain) {
177
- case "solana": {
178
- return await this.createWallet({
179
- walletName: params.walletName,
180
- accounts: [DEFAULT_SOLANA_WALLET_ACCOUNT],
181
- });
182
- }
183
- default: {
184
- return await this.createWallet({
185
- walletName: params.walletName,
186
- accounts: [DEFAULT_ETHEREUM_WALLET_ACCOUNT],
187
- });
188
- }
189
- }
190
- };
191
- this.createNextWalletAccount = async (params) => {
192
- const walletAccounts = await this.getWalletAccounts({
193
- walletId: params.walletId,
194
- });
195
- const lastAccount = walletAccounts.accounts[walletAccounts.accounts.length - 1];
196
- const lastAccountPath = lastAccount.path.split("/");
197
- const lastAccountPathIndex = lastAccountPath[3].replace(/[^0-9]/g, "");
198
- const nextPathIndex = Number(lastAccountPathIndex) + 1;
199
- lastAccountPath[3] = `${nextPathIndex}'`;
200
- const nextAccountPath = lastAccountPath.join("/");
201
- return await this.createWalletAccounts({
202
- walletId: params.walletId,
203
- accounts: [
204
- {
205
- curve: lastAccount.curve,
206
- pathFormat: lastAccount.pathFormat,
207
- addressFormat: lastAccount.addressFormat,
208
- path: nextAccountPath,
209
- },
210
- ],
211
- });
212
- };
213
- this.login = async () => {
214
- const readOnlySessionResult = await this.createReadOnlySession({});
215
- const org = {
216
- organizationId: readOnlySessionResult.organizationId,
217
- organizationName: readOnlySessionResult.organizationName,
218
- };
219
- const currentUser = {
220
- userId: readOnlySessionResult.userId,
221
- username: readOnlySessionResult.username,
222
- organization: org,
223
- readOnlySession: {
224
- session: readOnlySessionResult.session,
225
- sessionExpiry: Number(readOnlySessionResult.sessionExpiry),
226
- },
227
- };
228
- await setStorageValue(StorageKeys.CurrentUser, currentUser);
229
- await setStorageValue(StorageKeys.CurrentSubOrganization, org);
230
- return readOnlySessionResult;
231
- };
232
- this.createSigningSessionKey = async (params) => {
233
- const currentUser = await getStorageValue(StorageKeys.CurrentUser);
234
- const ec = new elliptic.ec("p256");
235
- const keyPair = ec.genKeyPair();
236
- const signingSession = {
237
- publicKey: keyPair.getPublic(true, "hex"),
238
- privateKey: keyPair.getPrivate("hex"),
239
- expiration: Date.now() + params.duration * 1000,
240
- };
241
- const response = await this.createApiKeys({
242
- apiKeys: [
243
- {
244
- apiKeyName: `Short-lived Signing Session Key ${Date.now()}`,
245
- publicKey: signingSession.publicKey,
246
- expirationSeconds: `${params.duration}`,
247
- },
248
- ],
249
- userId: currentUser.userId,
250
- });
251
- if (response) {
252
- setStorageValue(StorageKeys.CurrentSigningSession, signingSession);
253
- }
254
- return response;
188
+ this.injectCredentialBundle = async (credentialBundle) => {
189
+ const stamper = this.config.stamper;
190
+ return await stamper.injectCredentialBundle(credentialBundle);
255
191
  };
192
+ this.iframePublicKey = config.stamper.iframePublicKey;
256
193
  }
257
194
  }
258
195
 
259
- export { TurnkeyBrowserSDK, TurnkeySDKBrowserClient };
196
+ export { TurnkeyBrowserClient, TurnkeyBrowserSDK, TurnkeyIframeClient, TurnkeyPasskeyClient };
260
197
  //# sourceMappingURL=sdk-client.mjs.map