@turnkey/sdk-browser 0.0.1

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 (64) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +201 -0
  3. package/README.md +38 -0
  4. package/dist/__generated__/sdk-client-base.d.ts +73 -0
  5. package/dist/__generated__/sdk-client-base.d.ts.map +1 -0
  6. package/dist/__generated__/sdk-client-base.js +600 -0
  7. package/dist/__generated__/sdk-client-base.js.map +1 -0
  8. package/dist/__generated__/sdk-client-base.mjs +598 -0
  9. package/dist/__generated__/sdk-client-base.mjs.map +1 -0
  10. package/dist/__generated__/sdk_api_types.d.ts +319 -0
  11. package/dist/__generated__/sdk_api_types.d.ts.map +1 -0
  12. package/dist/__generated__/version.d.ts +2 -0
  13. package/dist/__generated__/version.d.ts.map +1 -0
  14. package/dist/__generated__/version.js +6 -0
  15. package/dist/__generated__/version.js.map +1 -0
  16. package/dist/__generated__/version.mjs +4 -0
  17. package/dist/__generated__/version.mjs.map +1 -0
  18. package/dist/__inputs__/public_api.types.d.ts +3303 -0
  19. package/dist/__inputs__/public_api.types.d.ts.map +1 -0
  20. package/dist/__types__/base.d.ts +71 -0
  21. package/dist/__types__/base.d.ts.map +1 -0
  22. package/dist/__types__/base.js +23 -0
  23. package/dist/__types__/base.js.map +1 -0
  24. package/dist/__types__/base.mjs +21 -0
  25. package/dist/__types__/base.mjs.map +1 -0
  26. package/dist/constants.d.ts +4 -0
  27. package/dist/constants.d.ts.map +1 -0
  28. package/dist/constants.js +18 -0
  29. package/dist/constants.js.map +1 -0
  30. package/dist/constants.mjs +15 -0
  31. package/dist/constants.mjs.map +1 -0
  32. package/dist/index.d.ts +15 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +60 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/index.mjs +7 -0
  37. package/dist/index.mjs.map +1 -0
  38. package/dist/models.d.ts +20 -0
  39. package/dist/models.d.ts.map +1 -0
  40. package/dist/sdk-client.d.ts +42 -0
  41. package/dist/sdk-client.d.ts.map +1 -0
  42. package/dist/sdk-client.js +263 -0
  43. package/dist/sdk-client.js.map +1 -0
  44. package/dist/sdk-client.mjs +260 -0
  45. package/dist/sdk-client.mjs.map +1 -0
  46. package/dist/storage.d.ts +16 -0
  47. package/dist/storage.d.ts.map +1 -0
  48. package/dist/storage.js +47 -0
  49. package/dist/storage.js.map +1 -0
  50. package/dist/storage.mjs +43 -0
  51. package/dist/storage.mjs.map +1 -0
  52. package/dist/turnkey-helpers.d.ts +10 -0
  53. package/dist/turnkey-helpers.d.ts.map +1 -0
  54. package/dist/turnkey-helpers.js +17 -0
  55. package/dist/turnkey-helpers.js.map +1 -0
  56. package/dist/turnkey-helpers.mjs +14 -0
  57. package/dist/turnkey-helpers.mjs.map +1 -0
  58. package/dist/utils.d.ts +4 -0
  59. package/dist/utils.d.ts.map +1 -0
  60. package/dist/utils.js +21 -0
  61. package/dist/utils.js.map +1 -0
  62. package/dist/utils.mjs +18 -0
  63. package/dist/utils.mjs.map +1 -0
  64. package/package.json +61 -0
@@ -0,0 +1,263 @@
1
+ 'use strict';
2
+
3
+ var apiKeyStamper = require('@turnkey/api-key-stamper');
4
+ var webauthnStamper = require('@turnkey/webauthn-stamper');
5
+ var iframeStamper = require('@turnkey/iframe-stamper');
6
+ var http = require('@turnkey/http');
7
+ var version = require('./__generated__/version.js');
8
+ var base = require('./__types__/base.js');
9
+ var sdkClientBase = require('./__generated__/sdk-client-base.js');
10
+ var elliptic = require('elliptic');
11
+ var storage = require('./storage.js');
12
+ var utils = require('./utils.js');
13
+ var constants = require('./constants.js');
14
+
15
+ class TurnkeyBrowserSDK {
16
+ constructor(config) {
17
+ this.currentUserSession = async () => {
18
+ const currentUser = await this.getCurrentUser();
19
+ if (!currentUser?.readOnlySession) {
20
+ return;
21
+ }
22
+ if (currentUser?.readOnlySession?.sessionExpiry > Date.now()) {
23
+ return new TurnkeySDKBrowserClient({
24
+ readOnlySession: currentUser?.readOnlySession?.session,
25
+ apiBaseUrl: this.config.apiBaseUrl,
26
+ organizationId: this.config.defaultOrganizationId,
27
+ });
28
+ }
29
+ else {
30
+ this.logoutUser();
31
+ }
32
+ return;
33
+ };
34
+ this.passkeySigner = async (rpId) => {
35
+ const targetRpId = rpId ?? this.config.rpId ?? window.location.hostname;
36
+ if (!targetRpId) {
37
+ throw new Error("Tried to initialize a passkey signer with no rpId defined");
38
+ }
39
+ const webauthnStamper$1 = new webauthnStamper.WebauthnStamper({
40
+ rpId: targetRpId,
41
+ });
42
+ return new TurnkeySDKBrowserClient({
43
+ stamper: webauthnStamper$1,
44
+ apiBaseUrl: this.config.apiBaseUrl,
45
+ organizationId: this.config.defaultOrganizationId,
46
+ });
47
+ };
48
+ this.iframeSigner = async (iframeContainer, iframeUrl) => {
49
+ const targetIframeUrl = iframeUrl ?? this.config.iframeUrl;
50
+ if (!targetIframeUrl) {
51
+ throw new Error("Tried to initialize iframeSigner with no iframeUrl defined");
52
+ }
53
+ const TurnkeyIframeElementId = "turnkey-auth-iframe-element-id";
54
+ const iframeStamper$1 = new iframeStamper.IframeStamper({
55
+ iframeUrl: targetIframeUrl,
56
+ iframeElementId: TurnkeyIframeElementId,
57
+ iframeContainer: iframeContainer,
58
+ });
59
+ await iframeStamper$1.init();
60
+ return new TurnkeySDKBrowserClient({
61
+ stamper: iframeStamper$1,
62
+ apiBaseUrl: this.config.apiBaseUrl,
63
+ organizationId: this.config.defaultOrganizationId,
64
+ });
65
+ };
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
+ this.serverSign = async (methodName, params, serverSignUrl) => {
79
+ const targetServerSignUrl = serverSignUrl ?? this.config.serverSignUrl;
80
+ if (!targetServerSignUrl) {
81
+ throw new Error("Tried to call serverSign with no serverSignUrl defined");
82
+ }
83
+ const stringifiedBody = JSON.stringify({
84
+ methodName: methodName,
85
+ params: params,
86
+ });
87
+ const response = await fetch(targetServerSignUrl, {
88
+ method: "POST",
89
+ headers: {
90
+ "Content-Type": "application/json",
91
+ "X-Client-Version": version.VERSION,
92
+ },
93
+ body: stringifiedBody,
94
+ redirect: "follow",
95
+ });
96
+ if (!response.ok) {
97
+ let res;
98
+ try {
99
+ res = await response.json();
100
+ }
101
+ catch (_) {
102
+ throw new Error(`${response.status} ${response.statusText}`);
103
+ }
104
+ throw new base.TurnkeyRequestError(res);
105
+ }
106
+ const data = await response.json();
107
+ return data;
108
+ };
109
+ // Local
110
+ this.createUserPasskey = async (config = {}) => {
111
+ const challenge = utils.generateRandomBuffer();
112
+ const encodedChallenge = utils.base64UrlEncode(challenge);
113
+ const authenticatorUserId = utils.generateRandomBuffer();
114
+ const webauthnConfig = {
115
+ publicKey: {
116
+ rp: {
117
+ id: config.publicKey?.rp?.id ?? "",
118
+ name: config.publicKey?.rp?.name ?? "",
119
+ },
120
+ challenge: config.publicKey?.challenge ?? challenge,
121
+ pubKeyCredParams: config.publicKey?.pubKeyCredParams ?? [
122
+ {
123
+ type: "public-key",
124
+ alg: -7,
125
+ },
126
+ ],
127
+ user: {
128
+ id: config.publicKey?.user?.id ?? authenticatorUserId,
129
+ name: config.publicKey?.user?.name ?? "",
130
+ displayName: config.publicKey?.user?.displayName ?? "",
131
+ },
132
+ authenticatorSelection: {
133
+ requireResidentKey: config.publicKey?.authenticatorSelection?.requireResidentKey ??
134
+ true,
135
+ residentKey: config.publicKey?.authenticatorSelection?.residentKey ?? "required",
136
+ userVerification: config.publicKey?.authenticatorSelection?.userVerification ??
137
+ "preferred",
138
+ },
139
+ },
140
+ };
141
+ const attestation = await http.getWebAuthnAttestation(webauthnConfig);
142
+ return {
143
+ encodedChallenge: config.publicKey?.challenge
144
+ ? utils.base64UrlEncode(config.publicKey?.challenge)
145
+ : encodedChallenge,
146
+ attestation: attestation,
147
+ };
148
+ };
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;
172
+ }
173
+ }
174
+ class TurnkeySDKBrowserClient extends sdkClientBase.TurnkeySDKClientBase {
175
+ constructor(config) {
176
+ 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;
257
+ };
258
+ }
259
+ }
260
+
261
+ exports.TurnkeyBrowserSDK = TurnkeyBrowserSDK;
262
+ exports.TurnkeySDKBrowserClient = TurnkeySDKBrowserClient;
263
+ //# sourceMappingURL=sdk-client.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,260 @@
1
+ import { ApiKeyStamper } from '@turnkey/api-key-stamper';
2
+ import { WebauthnStamper } from '@turnkey/webauthn-stamper';
3
+ import { IframeStamper } from '@turnkey/iframe-stamper';
4
+ import { getWebAuthnAttestation } from '@turnkey/http';
5
+ import { VERSION } from './__generated__/version.mjs';
6
+ import { TurnkeyRequestError } from './__types__/base.mjs';
7
+ import { TurnkeySDKClientBase } from './__generated__/sdk-client-base.mjs';
8
+ import elliptic from 'elliptic';
9
+ import { getStorageValue, StorageKeys, removeStorageValue, setStorageValue } from './storage.mjs';
10
+ import { generateRandomBuffer, base64UrlEncode } from './utils.mjs';
11
+ import { DEFAULT_ETHEREUM_WALLET_ACCOUNT, DEFAULT_SOLANA_WALLET_ACCOUNT } from './constants.mjs';
12
+
13
+ class TurnkeyBrowserSDK {
14
+ constructor(config) {
15
+ this.currentUserSession = async () => {
16
+ const currentUser = await this.getCurrentUser();
17
+ if (!currentUser?.readOnlySession) {
18
+ return;
19
+ }
20
+ if (currentUser?.readOnlySession?.sessionExpiry > Date.now()) {
21
+ return new TurnkeySDKBrowserClient({
22
+ readOnlySession: currentUser?.readOnlySession?.session,
23
+ apiBaseUrl: this.config.apiBaseUrl,
24
+ organizationId: this.config.defaultOrganizationId,
25
+ });
26
+ }
27
+ else {
28
+ this.logoutUser();
29
+ }
30
+ return;
31
+ };
32
+ this.passkeySigner = async (rpId) => {
33
+ const targetRpId = rpId ?? this.config.rpId ?? window.location.hostname;
34
+ if (!targetRpId) {
35
+ throw new Error("Tried to initialize a passkey signer with no rpId defined");
36
+ }
37
+ const webauthnStamper = new WebauthnStamper({
38
+ rpId: targetRpId,
39
+ });
40
+ return new TurnkeySDKBrowserClient({
41
+ stamper: webauthnStamper,
42
+ apiBaseUrl: this.config.apiBaseUrl,
43
+ organizationId: this.config.defaultOrganizationId,
44
+ });
45
+ };
46
+ this.iframeSigner = async (iframeContainer, iframeUrl) => {
47
+ const targetIframeUrl = iframeUrl ?? this.config.iframeUrl;
48
+ if (!targetIframeUrl) {
49
+ throw new Error("Tried to initialize iframeSigner with no iframeUrl defined");
50
+ }
51
+ const TurnkeyIframeElementId = "turnkey-auth-iframe-element-id";
52
+ const iframeStamper = new IframeStamper({
53
+ iframeUrl: targetIframeUrl,
54
+ iframeElementId: TurnkeyIframeElementId,
55
+ iframeContainer: iframeContainer,
56
+ });
57
+ await iframeStamper.init();
58
+ return new TurnkeySDKBrowserClient({
59
+ stamper: iframeStamper,
60
+ apiBaseUrl: this.config.apiBaseUrl,
61
+ organizationId: this.config.defaultOrganizationId,
62
+ });
63
+ };
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
+ this.serverSign = async (methodName, params, serverSignUrl) => {
77
+ const targetServerSignUrl = serverSignUrl ?? this.config.serverSignUrl;
78
+ if (!targetServerSignUrl) {
79
+ throw new Error("Tried to call serverSign with no serverSignUrl defined");
80
+ }
81
+ const stringifiedBody = JSON.stringify({
82
+ methodName: methodName,
83
+ params: params,
84
+ });
85
+ const response = await fetch(targetServerSignUrl, {
86
+ method: "POST",
87
+ headers: {
88
+ "Content-Type": "application/json",
89
+ "X-Client-Version": VERSION,
90
+ },
91
+ body: stringifiedBody,
92
+ redirect: "follow",
93
+ });
94
+ if (!response.ok) {
95
+ let res;
96
+ try {
97
+ res = await response.json();
98
+ }
99
+ catch (_) {
100
+ throw new Error(`${response.status} ${response.statusText}`);
101
+ }
102
+ throw new TurnkeyRequestError(res);
103
+ }
104
+ const data = await response.json();
105
+ return data;
106
+ };
107
+ // Local
108
+ this.createUserPasskey = async (config = {}) => {
109
+ const challenge = generateRandomBuffer();
110
+ const encodedChallenge = base64UrlEncode(challenge);
111
+ const authenticatorUserId = generateRandomBuffer();
112
+ const webauthnConfig = {
113
+ publicKey: {
114
+ rp: {
115
+ id: config.publicKey?.rp?.id ?? "",
116
+ name: config.publicKey?.rp?.name ?? "",
117
+ },
118
+ challenge: config.publicKey?.challenge ?? challenge,
119
+ pubKeyCredParams: config.publicKey?.pubKeyCredParams ?? [
120
+ {
121
+ type: "public-key",
122
+ alg: -7,
123
+ },
124
+ ],
125
+ user: {
126
+ id: config.publicKey?.user?.id ?? authenticatorUserId,
127
+ name: config.publicKey?.user?.name ?? "",
128
+ displayName: config.publicKey?.user?.displayName ?? "",
129
+ },
130
+ authenticatorSelection: {
131
+ requireResidentKey: config.publicKey?.authenticatorSelection?.requireResidentKey ??
132
+ true,
133
+ residentKey: config.publicKey?.authenticatorSelection?.residentKey ?? "required",
134
+ userVerification: config.publicKey?.authenticatorSelection?.userVerification ??
135
+ "preferred",
136
+ },
137
+ },
138
+ };
139
+ const attestation = await getWebAuthnAttestation(webauthnConfig);
140
+ return {
141
+ encodedChallenge: config.publicKey?.challenge
142
+ ? base64UrlEncode(config.publicKey?.challenge)
143
+ : encodedChallenge,
144
+ attestation: attestation,
145
+ };
146
+ };
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;
170
+ }
171
+ }
172
+ class TurnkeySDKBrowserClient extends TurnkeySDKClientBase {
173
+ constructor(config) {
174
+ 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;
255
+ };
256
+ }
257
+ }
258
+
259
+ export { TurnkeyBrowserSDK, TurnkeySDKBrowserClient };
260
+ //# sourceMappingURL=sdk-client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-client.mjs","sources":["../src/sdk-client.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { User, SigningSession, SubOrganization } from "./models";
2
+ export declare enum StorageKeys {
3
+ CurrentSubOrganization = "@turnkey/current_sub_organization",
4
+ CurrentUser = "@turnkey/current_user",
5
+ CurrentSigningSession = "@turnkey/current_signing_session"
6
+ }
7
+ interface StorageValue {
8
+ [StorageKeys.CurrentSubOrganization]: SubOrganization;
9
+ [StorageKeys.CurrentUser]: User;
10
+ [StorageKeys.CurrentSigningSession]: SigningSession;
11
+ }
12
+ export declare const getStorageValue: <K extends StorageKeys>(storageKey: K) => Promise<StorageValue[K] | undefined>;
13
+ export declare const setStorageValue: <K extends StorageKeys>(storageKey: K, storageValue: StorageValue[K]) => Promise<any>;
14
+ export declare const removeStorageValue: <K extends StorageKeys>(storageKey: K) => Promise<void>;
15
+ export {};
16
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEtE,oBAAY,WAAW;IACrB,sBAAsB,sCAAsC;IAC5D,WAAW,0BAA0B;IACrC,qBAAqB,qCAAqC;CAC3D;AAED,UAAU,YAAY;IACpB,CAAC,WAAW,CAAC,sBAAsB,CAAC,EAAE,eAAe,CAAC;IACtD,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC;IAChC,CAAC,WAAW,CAAC,qBAAqB,CAAC,EAAE,cAAc,CAAC;CACrD;AAoBD,eAAO,MAAM,eAAe,gFAO3B,CAAC;AAEF,eAAO,MAAM,eAAe,2EAGzB,QAAQ,GAAG,CAKb,CAAC;AAEF,eAAO,MAAM,kBAAkB,4CAE5B,QAAQ,IAAI,CAKd,CAAC"}
@@ -0,0 +1,47 @@
1
+ 'use strict';
2
+
3
+ exports.StorageKeys = void 0;
4
+ (function (StorageKeys) {
5
+ StorageKeys["CurrentSubOrganization"] = "@turnkey/current_sub_organization";
6
+ StorageKeys["CurrentUser"] = "@turnkey/current_user";
7
+ StorageKeys["CurrentSigningSession"] = "@turnkey/current_signing_session";
8
+ })(exports.StorageKeys || (exports.StorageKeys = {}));
9
+ var StorageLocation;
10
+ (function (StorageLocation) {
11
+ StorageLocation["Local"] = "local";
12
+ StorageLocation["Secure"] = "secure";
13
+ StorageLocation["Session"] = "session";
14
+ })(StorageLocation || (StorageLocation = {}));
15
+ const STORAGE_VALUE_LOCATIONS = {
16
+ [exports.StorageKeys.CurrentSubOrganization]: StorageLocation.Local,
17
+ [exports.StorageKeys.CurrentUser]: StorageLocation.Local,
18
+ [exports.StorageKeys.CurrentSigningSession]: StorageLocation.Secure,
19
+ };
20
+ const STORAGE_LOCATIONS = {
21
+ [StorageLocation.Local]: localStorage,
22
+ [StorageLocation.Secure]: localStorage,
23
+ [StorageLocation.Session]: localStorage,
24
+ };
25
+ const getStorageValue = async (storageKey) => {
26
+ const storageLocation = STORAGE_VALUE_LOCATIONS[storageKey];
27
+ const browserStorageLocation = STORAGE_LOCATIONS[storageLocation];
28
+ const storageItem = browserStorageLocation.getItem(storageKey);
29
+ return storageItem ? JSON.parse(storageItem) : undefined;
30
+ };
31
+ const setStorageValue = async (storageKey, storageValue) => {
32
+ const storageLocation = STORAGE_VALUE_LOCATIONS[storageKey];
33
+ const browserStorageLocation = STORAGE_LOCATIONS[storageLocation];
34
+ browserStorageLocation.setItem(storageKey, JSON.stringify(storageValue));
35
+ // eventEmitter.emit('storageChange', { storageKey, storageValue });
36
+ };
37
+ const removeStorageValue = async (storageKey) => {
38
+ const storageLocation = STORAGE_VALUE_LOCATIONS[storageKey];
39
+ const browserStorageLocation = STORAGE_LOCATIONS[storageLocation];
40
+ browserStorageLocation.removeItem(storageKey);
41
+ // eventEmitter.emit('storageChange', { storageKey, storageValue: undefined });
42
+ };
43
+
44
+ exports.getStorageValue = getStorageValue;
45
+ exports.removeStorageValue = removeStorageValue;
46
+ exports.setStorageValue = setStorageValue;
47
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sources":["../src/storage.ts"],"sourcesContent":[null],"names":["StorageKeys"],"mappings":";;AAEYA,6BAIX;AAJD,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,wBAAA,CAAA,GAAA,mCAA4D,CAAA;AAC5D,IAAA,WAAA,CAAA,aAAA,CAAA,GAAA,uBAAqC,CAAA;AACrC,IAAA,WAAA,CAAA,uBAAA,CAAA,GAAA,kCAA0D,CAAA;AAC5D,CAAC,EAJWA,mBAAW,KAAXA,mBAAW,GAItB,EAAA,CAAA,CAAA,CAAA;AAQD,IAAK,eAIJ,CAAA;AAJD,CAAA,UAAK,eAAe,EAAA;AAClB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,eAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACrB,CAAC,EAJI,eAAe,KAAf,eAAe,GAInB,EAAA,CAAA,CAAA,CAAA;AAED,MAAM,uBAAuB,GAAyC;AACpE,IAAA,CAACA,mBAAW,CAAC,sBAAsB,GAAG,eAAe,CAAC,KAAK;AAC3D,IAAA,CAACA,mBAAW,CAAC,WAAW,GAAG,eAAe,CAAC,KAAK;AAChD,IAAA,CAACA,mBAAW,CAAC,qBAAqB,GAAG,eAAe,CAAC,MAAM;CAC5D,CAAC;AAEF,MAAM,iBAAiB,GAAG;AACxB,IAAA,CAAC,eAAe,CAAC,KAAK,GAAG,YAAY;AACrC,IAAA,CAAC,eAAe,CAAC,MAAM,GAAG,YAAY;AACtC,IAAA,CAAC,eAAe,CAAC,OAAO,GAAG,YAAY;CACxC,CAAC;MAEW,eAAe,GAAG,OAC7B,UAAa,KAC2B;AACxC,IAAA,MAAM,eAAe,GAAoB,uBAAuB,CAAC,UAAU,CAAC,CAAC;AAC7E,IAAA,MAAM,sBAAsB,GAAY,iBAAiB,CAAC,eAAe,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,sBAAsB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC/D,IAAA,OAAO,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;AAC3D,EAAE;AAEW,MAAA,eAAe,GAAG,OAC7B,UAAa,EACb,YAA6B,KACb;AAChB,IAAA,MAAM,eAAe,GAAoB,uBAAuB,CAAC,UAAU,CAAC,CAAC;AAC7E,IAAA,MAAM,sBAAsB,GAAY,iBAAiB,CAAC,eAAe,CAAC,CAAC;AAC3E,IAAA,sBAAsB,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;;AAE3E,EAAE;MAEW,kBAAkB,GAAG,OAChC,UAAa,KACI;AACjB,IAAA,MAAM,eAAe,GAAoB,uBAAuB,CAAC,UAAU,CAAC,CAAC;AAC7E,IAAA,MAAM,sBAAsB,GAAY,iBAAiB,CAAC,eAAe,CAAC,CAAC;AAC3E,IAAA,sBAAsB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;;AAEhD;;;;;;"}