@account-kit/signer 4.0.0-alpha.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 (121) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/base.d.ts +37 -0
  3. package/dist/cjs/base.js +292 -0
  4. package/dist/cjs/base.js.map +1 -0
  5. package/dist/cjs/client/base.d.ts +230 -0
  6. package/dist/cjs/client/base.js +298 -0
  7. package/dist/cjs/client/base.js.map +1 -0
  8. package/dist/cjs/client/index.d.ts +146 -0
  9. package/dist/cjs/client/index.js +260 -0
  10. package/dist/cjs/client/index.js.map +1 -0
  11. package/dist/cjs/client/types.d.ts +106 -0
  12. package/dist/cjs/client/types.js +3 -0
  13. package/dist/cjs/client/types.js.map +1 -0
  14. package/dist/cjs/errors.d.ts +4 -0
  15. package/dist/cjs/errors.js +16 -0
  16. package/dist/cjs/errors.js.map +1 -0
  17. package/dist/cjs/index.d.ts +8 -0
  18. package/dist/cjs/index.js +14 -0
  19. package/dist/cjs/index.js.map +1 -0
  20. package/dist/cjs/package.json +1 -0
  21. package/dist/cjs/session/manager.d.ts +45 -0
  22. package/dist/cjs/session/manager.js +230 -0
  23. package/dist/cjs/session/manager.js.map +1 -0
  24. package/dist/cjs/session/types.d.ts +16 -0
  25. package/dist/cjs/session/types.js +3 -0
  26. package/dist/cjs/session/types.js.map +1 -0
  27. package/dist/cjs/signer.d.ts +262 -0
  28. package/dist/cjs/signer.js +34 -0
  29. package/dist/cjs/signer.js.map +1 -0
  30. package/dist/cjs/types.d.ts +14 -0
  31. package/dist/cjs/types.js +12 -0
  32. package/dist/cjs/types.js.map +1 -0
  33. package/dist/cjs/utils/base64UrlEncode.d.ts +1 -0
  34. package/dist/cjs/utils/base64UrlEncode.js +12 -0
  35. package/dist/cjs/utils/base64UrlEncode.js.map +1 -0
  36. package/dist/cjs/utils/generateRandomBuffer.d.ts +1 -0
  37. package/dist/cjs/utils/generateRandomBuffer.js +10 -0
  38. package/dist/cjs/utils/generateRandomBuffer.js.map +1 -0
  39. package/dist/cjs/version.d.ts +1 -0
  40. package/dist/cjs/version.js +5 -0
  41. package/dist/cjs/version.js.map +1 -0
  42. package/dist/esm/base.d.ts +37 -0
  43. package/dist/esm/base.js +288 -0
  44. package/dist/esm/base.js.map +1 -0
  45. package/dist/esm/client/base.d.ts +230 -0
  46. package/dist/esm/client/base.js +291 -0
  47. package/dist/esm/client/base.js.map +1 -0
  48. package/dist/esm/client/index.d.ts +146 -0
  49. package/dist/esm/client/index.js +256 -0
  50. package/dist/esm/client/index.js.map +1 -0
  51. package/dist/esm/client/types.d.ts +106 -0
  52. package/dist/esm/client/types.js +2 -0
  53. package/dist/esm/client/types.js.map +1 -0
  54. package/dist/esm/errors.d.ts +4 -0
  55. package/dist/esm/errors.js +12 -0
  56. package/dist/esm/errors.js.map +1 -0
  57. package/dist/esm/index.d.ts +8 -0
  58. package/dist/esm/index.js +6 -0
  59. package/dist/esm/index.js.map +1 -0
  60. package/dist/esm/package.json +1 -0
  61. package/dist/esm/session/manager.d.ts +45 -0
  62. package/dist/esm/session/manager.js +223 -0
  63. package/dist/esm/session/manager.js.map +1 -0
  64. package/dist/esm/session/types.d.ts +16 -0
  65. package/dist/esm/session/types.js +2 -0
  66. package/dist/esm/session/types.js.map +1 -0
  67. package/dist/esm/signer.d.ts +262 -0
  68. package/dist/esm/signer.js +30 -0
  69. package/dist/esm/signer.js.map +1 -0
  70. package/dist/esm/types.d.ts +14 -0
  71. package/dist/esm/types.js +9 -0
  72. package/dist/esm/types.js.map +1 -0
  73. package/dist/esm/utils/base64UrlEncode.d.ts +1 -0
  74. package/dist/esm/utils/base64UrlEncode.js +8 -0
  75. package/dist/esm/utils/base64UrlEncode.js.map +1 -0
  76. package/dist/esm/utils/generateRandomBuffer.d.ts +1 -0
  77. package/dist/esm/utils/generateRandomBuffer.js +6 -0
  78. package/dist/esm/utils/generateRandomBuffer.js.map +1 -0
  79. package/dist/esm/version.d.ts +1 -0
  80. package/dist/esm/version.js +2 -0
  81. package/dist/esm/version.js.map +1 -0
  82. package/dist/types/base.d.ts +89 -0
  83. package/dist/types/base.d.ts.map +1 -0
  84. package/dist/types/client/base.d.ts +246 -0
  85. package/dist/types/client/base.d.ts.map +1 -0
  86. package/dist/types/client/index.d.ts +151 -0
  87. package/dist/types/client/index.d.ts.map +1 -0
  88. package/dist/types/client/types.d.ts +107 -0
  89. package/dist/types/client/types.d.ts.map +1 -0
  90. package/dist/types/errors.d.ts +5 -0
  91. package/dist/types/errors.d.ts.map +1 -0
  92. package/dist/types/index.d.ts +9 -0
  93. package/dist/types/index.d.ts.map +1 -0
  94. package/dist/types/session/manager.d.ts +46 -0
  95. package/dist/types/session/manager.d.ts.map +1 -0
  96. package/dist/types/session/types.d.ts +17 -0
  97. package/dist/types/session/types.d.ts.map +1 -0
  98. package/dist/types/signer.d.ts +269 -0
  99. package/dist/types/signer.d.ts.map +1 -0
  100. package/dist/types/types.d.ts +15 -0
  101. package/dist/types/types.d.ts.map +1 -0
  102. package/dist/types/utils/base64UrlEncode.d.ts +2 -0
  103. package/dist/types/utils/base64UrlEncode.d.ts.map +1 -0
  104. package/dist/types/utils/generateRandomBuffer.d.ts +2 -0
  105. package/dist/types/utils/generateRandomBuffer.d.ts.map +1 -0
  106. package/dist/types/version.d.ts +2 -0
  107. package/dist/types/version.d.ts.map +1 -0
  108. package/package.json +79 -0
  109. package/src/base.ts +386 -0
  110. package/src/client/base.ts +399 -0
  111. package/src/client/index.ts +267 -0
  112. package/src/client/types.ts +121 -0
  113. package/src/errors.ts +15 -0
  114. package/src/index.ts +10 -0
  115. package/src/session/manager.ts +249 -0
  116. package/src/session/types.ts +16 -0
  117. package/src/signer.ts +55 -0
  118. package/src/types.ts +17 -0
  119. package/src/utils/base64UrlEncode.ts +7 -0
  120. package/src/utils/generateRandomBuffer.ts +5 -0
  121. package/src/version.ts +3 -0
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlchemySignerWebClient = exports.AlchemySignerClientParamsSchema = void 0;
4
+ const core_1 = require("@aa-sdk/core");
5
+ const http_1 = require("@turnkey/http");
6
+ const iframe_stamper_1 = require("@turnkey/iframe-stamper");
7
+ const webauthn_stamper_1 = require("@turnkey/webauthn-stamper");
8
+ const zod_1 = require("zod");
9
+ const base64UrlEncode_js_1 = require("../utils/base64UrlEncode.js");
10
+ const generateRandomBuffer_js_1 = require("../utils/generateRandomBuffer.js");
11
+ const base_js_1 = require("./base.js");
12
+ exports.AlchemySignerClientParamsSchema = zod_1.z.object({
13
+ connection: core_1.ConnectionConfigSchema,
14
+ iframeConfig: zod_1.z.object({
15
+ iframeElementId: zod_1.z.string().default("turnkey-iframe"),
16
+ iframeContainerId: zod_1.z.string(),
17
+ }),
18
+ rpId: zod_1.z.string().optional(),
19
+ rootOrgId: zod_1.z
20
+ .string()
21
+ .optional()
22
+ .default("24c1acf5-810f-41e0-a503-d5d13fa8e830"),
23
+ });
24
+ class AlchemySignerWebClient extends base_js_1.BaseSignerClient {
25
+ constructor(params) {
26
+ const { connection, iframeConfig, rpId, rootOrgId } = exports.AlchemySignerClientParamsSchema.parse(params);
27
+ const iframeStamper = new iframe_stamper_1.IframeStamper({
28
+ iframeElementId: iframeConfig.iframeElementId,
29
+ iframeUrl: "https://auth.turnkey.com",
30
+ iframeContainer: document.getElementById(iframeConfig.iframeContainerId),
31
+ });
32
+ super({
33
+ connection,
34
+ rootOrgId,
35
+ stamper: iframeStamper,
36
+ });
37
+ Object.defineProperty(this, "iframeStamper", {
38
+ enumerable: true,
39
+ configurable: true,
40
+ writable: true,
41
+ value: void 0
42
+ });
43
+ Object.defineProperty(this, "webauthnStamper", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: void 0
48
+ });
49
+ Object.defineProperty(this, "iframeContainerId", {
50
+ enumerable: true,
51
+ configurable: true,
52
+ writable: true,
53
+ value: void 0
54
+ });
55
+ Object.defineProperty(this, "createAccount", {
56
+ enumerable: true,
57
+ configurable: true,
58
+ writable: true,
59
+ value: async (params) => {
60
+ this.eventEmitter.emit("authenticating");
61
+ if (params.type === "email") {
62
+ const { email, expirationSeconds } = params;
63
+ const publicKey = await this.initIframeStamper();
64
+ const response = await this.request("/v1/signup", {
65
+ email,
66
+ targetPublicKey: publicKey,
67
+ expirationSeconds,
68
+ redirectParams: params.redirectParams?.toString(),
69
+ });
70
+ return response;
71
+ }
72
+ const { attestation, challenge } = await this.getWebAuthnAttestation(params.creationOpts, { username: params.username });
73
+ const result = await this.request("/v1/signup", {
74
+ passkey: {
75
+ challenge: (0, base64UrlEncode_js_1.base64UrlEncode)(challenge),
76
+ attestation,
77
+ },
78
+ });
79
+ this.user = {
80
+ orgId: result.orgId,
81
+ address: result.address,
82
+ userId: result.userId,
83
+ credentialId: attestation.credentialId,
84
+ };
85
+ this.initWebauthnStamper(this.user);
86
+ this.eventEmitter.emit("connectedPasskey", this.user);
87
+ return result;
88
+ }
89
+ });
90
+ Object.defineProperty(this, "initEmailAuth", {
91
+ enumerable: true,
92
+ configurable: true,
93
+ writable: true,
94
+ value: async (params) => {
95
+ this.eventEmitter.emit("authenticating");
96
+ const { email, expirationSeconds } = params;
97
+ const publicKey = await this.initIframeStamper();
98
+ return this.request("/v1/auth", {
99
+ email,
100
+ targetPublicKey: publicKey,
101
+ expirationSeconds,
102
+ redirectParams: params.redirectParams?.toString(),
103
+ });
104
+ }
105
+ });
106
+ Object.defineProperty(this, "completeEmailAuth", {
107
+ enumerable: true,
108
+ configurable: true,
109
+ writable: true,
110
+ value: async ({ bundle, orgId, }) => {
111
+ this.eventEmitter.emit("authenticating");
112
+ await this.initIframeStamper();
113
+ const result = await this.iframeStamper.injectCredentialBundle(bundle);
114
+ if (!result) {
115
+ throw new Error("Failed to inject credential bundle");
116
+ }
117
+ const user = await this.whoami(orgId);
118
+ this.eventEmitter.emit("connectedEmail", user, bundle);
119
+ return user;
120
+ }
121
+ });
122
+ Object.defineProperty(this, "lookupUserWithPasskey", {
123
+ enumerable: true,
124
+ configurable: true,
125
+ writable: true,
126
+ value: async (user = undefined) => {
127
+ this.eventEmitter.emit("authenticating");
128
+ await this.initWebauthnStamper(user);
129
+ if (user) {
130
+ this.user = user;
131
+ return user;
132
+ }
133
+ const result = await this.whoami(this.rootOrg);
134
+ await this.initWebauthnStamper(result);
135
+ this.eventEmitter.emit("connectedPasskey", result);
136
+ return result;
137
+ }
138
+ });
139
+ Object.defineProperty(this, "exportWallet", {
140
+ enumerable: true,
141
+ configurable: true,
142
+ writable: true,
143
+ value: async ({ iframeContainerId, iframeElementId = "turnkey-export-iframe", }) => {
144
+ const exportWalletIframeStamper = new iframe_stamper_1.IframeStamper({
145
+ iframeContainer: document.getElementById(iframeContainerId),
146
+ iframeElementId: iframeElementId,
147
+ iframeUrl: "https://export.turnkey.com",
148
+ });
149
+ await exportWalletIframeStamper.init();
150
+ if (this.turnkeyClient.stamper === this.iframeStamper) {
151
+ return this.exportWalletInner({
152
+ exportStamper: exportWalletIframeStamper,
153
+ exportAs: "SEED_PHRASE",
154
+ });
155
+ }
156
+ return this.exportWalletInner({
157
+ exportStamper: exportWalletIframeStamper,
158
+ exportAs: "PRIVATE_KEY",
159
+ });
160
+ }
161
+ });
162
+ Object.defineProperty(this, "disconnect", {
163
+ enumerable: true,
164
+ configurable: true,
165
+ writable: true,
166
+ value: async () => {
167
+ this.user = undefined;
168
+ this.iframeStamper.clear();
169
+ }
170
+ });
171
+ Object.defineProperty(this, "initIframeStamper", {
172
+ enumerable: true,
173
+ configurable: true,
174
+ writable: true,
175
+ value: async () => {
176
+ if (!this.iframeStamper.publicKey()) {
177
+ await this.iframeStamper.init();
178
+ }
179
+ this.setStamper(this.iframeStamper);
180
+ return this.iframeStamper.publicKey();
181
+ }
182
+ });
183
+ Object.defineProperty(this, "initWebauthnStamper", {
184
+ enumerable: true,
185
+ configurable: true,
186
+ writable: true,
187
+ value: async (user = this.user) => {
188
+ this.setStamper(this.webauthnStamper);
189
+ if (user && user.credentialId) {
190
+ this.webauthnStamper.allowCredentials = [
191
+ {
192
+ id: Buffer.from(user.credentialId, "base64"),
193
+ type: "public-key",
194
+ transports: ["internal", "hybrid"],
195
+ },
196
+ ];
197
+ }
198
+ }
199
+ });
200
+ Object.defineProperty(this, "getWebAuthnAttestation", {
201
+ enumerable: true,
202
+ configurable: true,
203
+ writable: true,
204
+ value: async (options, userDetails = {
205
+ username: this.user?.email ?? "anonymous",
206
+ }) => {
207
+ const challenge = (0, generateRandomBuffer_js_1.generateRandomBuffer)();
208
+ const authenticatorUserId = (0, generateRandomBuffer_js_1.generateRandomBuffer)();
209
+ const attestation = await (0, http_1.getWebAuthnAttestation)({
210
+ publicKey: {
211
+ ...options?.publicKey,
212
+ authenticatorSelection: {
213
+ residentKey: "preferred",
214
+ requireResidentKey: false,
215
+ userVerification: "preferred",
216
+ ...options?.publicKey?.authenticatorSelection,
217
+ },
218
+ challenge,
219
+ rp: {
220
+ id: window.location.hostname,
221
+ name: window.location.hostname,
222
+ ...options?.publicKey?.rp,
223
+ },
224
+ pubKeyCredParams: [
225
+ {
226
+ type: "public-key",
227
+ alg: -7,
228
+ },
229
+ {
230
+ type: "public-key",
231
+ alg: -257,
232
+ },
233
+ ],
234
+ user: {
235
+ id: authenticatorUserId,
236
+ name: userDetails.username,
237
+ displayName: userDetails.username,
238
+ ...options?.publicKey?.user,
239
+ },
240
+ },
241
+ signal: options?.signal,
242
+ });
243
+ if (attestation.transports == null || attestation.transports.length === 0) {
244
+ attestation.transports = [
245
+ "AUTHENTICATOR_TRANSPORT_INTERNAL",
246
+ "AUTHENTICATOR_TRANSPORT_HYBRID",
247
+ ];
248
+ }
249
+ return { challenge, authenticatorUserId, attestation };
250
+ }
251
+ });
252
+ this.iframeStamper = iframeStamper;
253
+ this.iframeContainerId = iframeConfig.iframeContainerId;
254
+ this.webauthnStamper = new webauthn_stamper_1.WebauthnStamper({
255
+ rpId: rpId ?? window.location.hostname,
256
+ });
257
+ }
258
+ }
259
+ exports.AlchemySignerWebClient = AlchemySignerWebClient;
260
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { ConnectionConfigSchema } from \"@aa-sdk/core\";\nimport { getWebAuthnAttestation } from \"@turnkey/http\";\nimport { IframeStamper } from \"@turnkey/iframe-stamper\";\nimport { WebauthnStamper } from \"@turnkey/webauthn-stamper\";\nimport { z } from \"zod\";\nimport { base64UrlEncode } from \"../utils/base64UrlEncode.js\";\nimport { generateRandomBuffer } from \"../utils/generateRandomBuffer.js\";\nimport { BaseSignerClient } from \"./base.js\";\nimport type {\n CreateAccountParams,\n CredentialCreationOptionOverrides,\n EmailAuthParams,\n ExportWalletParams,\n User,\n} from \"./types.js\";\n\nexport const AlchemySignerClientParamsSchema = z.object({\n connection: ConnectionConfigSchema,\n iframeConfig: z.object({\n iframeElementId: z.string().default(\"turnkey-iframe\"),\n iframeContainerId: z.string(),\n }),\n rpId: z.string().optional(),\n rootOrgId: z\n .string()\n .optional()\n .default(\"24c1acf5-810f-41e0-a503-d5d13fa8e830\"),\n});\n\nexport type AlchemySignerClientParams = z.input<\n typeof AlchemySignerClientParamsSchema\n>;\n\n/**\n * A lower level client used by the AlchemySigner used to communicate with\n * Alchemy's signer service.\n */\nexport class AlchemySignerWebClient extends BaseSignerClient<ExportWalletParams> {\n private iframeStamper: IframeStamper;\n private webauthnStamper: WebauthnStamper;\n iframeContainerId: string;\n\n constructor(params: AlchemySignerClientParams) {\n const { connection, iframeConfig, rpId, rootOrgId } =\n AlchemySignerClientParamsSchema.parse(params);\n\n const iframeStamper = new IframeStamper({\n iframeElementId: iframeConfig.iframeElementId,\n iframeUrl: \"https://auth.turnkey.com\",\n iframeContainer: document.getElementById(iframeConfig.iframeContainerId),\n });\n\n super({\n connection,\n rootOrgId,\n stamper: iframeStamper,\n });\n\n this.iframeStamper = iframeStamper;\n this.iframeContainerId = iframeConfig.iframeContainerId;\n\n this.webauthnStamper = new WebauthnStamper({\n rpId: rpId ?? window.location.hostname,\n });\n }\n\n public createAccount = async (params: CreateAccountParams) => {\n this.eventEmitter.emit(\"authenticating\");\n if (params.type === \"email\") {\n const { email, expirationSeconds } = params;\n const publicKey = await this.initIframeStamper();\n\n const response = await this.request(\"/v1/signup\", {\n email,\n targetPublicKey: publicKey,\n expirationSeconds,\n redirectParams: params.redirectParams?.toString(),\n });\n\n return response;\n }\n\n // Passkey account creation flow\n const { attestation, challenge } = await this.getWebAuthnAttestation(\n params.creationOpts,\n { username: params.username }\n );\n\n const result = await this.request(\"/v1/signup\", {\n passkey: {\n challenge: base64UrlEncode(challenge),\n attestation,\n },\n });\n\n this.user = {\n orgId: result.orgId,\n address: result.address!,\n userId: result.userId!,\n credentialId: attestation.credentialId,\n };\n this.initWebauthnStamper(this.user);\n this.eventEmitter.emit(\"connectedPasskey\", this.user);\n\n return result;\n };\n\n public initEmailAuth = async (\n params: Omit<EmailAuthParams, \"targetPublicKey\">\n ) => {\n this.eventEmitter.emit(\"authenticating\");\n const { email, expirationSeconds } = params;\n const publicKey = await this.initIframeStamper();\n\n return this.request(\"/v1/auth\", {\n email,\n targetPublicKey: publicKey,\n expirationSeconds,\n redirectParams: params.redirectParams?.toString(),\n });\n };\n\n public completeEmailAuth = async ({\n bundle,\n orgId,\n }: {\n bundle: string;\n orgId: string;\n }) => {\n this.eventEmitter.emit(\"authenticating\");\n await this.initIframeStamper();\n\n const result = await this.iframeStamper.injectCredentialBundle(bundle);\n\n if (!result) {\n throw new Error(\"Failed to inject credential bundle\");\n }\n\n const user = await this.whoami(orgId);\n this.eventEmitter.emit(\"connectedEmail\", user, bundle);\n\n return user;\n };\n\n public lookupUserWithPasskey = async (user: User | undefined = undefined) => {\n this.eventEmitter.emit(\"authenticating\");\n await this.initWebauthnStamper(user);\n if (user) {\n this.user = user;\n return user;\n }\n\n const result = await this.whoami(this.rootOrg);\n await this.initWebauthnStamper(result);\n this.eventEmitter.emit(\"connectedPasskey\", result);\n\n return result;\n };\n\n public exportWallet = async ({\n iframeContainerId,\n iframeElementId = \"turnkey-export-iframe\",\n }: ExportWalletParams) => {\n const exportWalletIframeStamper = new IframeStamper({\n iframeContainer: document.getElementById(iframeContainerId),\n iframeElementId: iframeElementId,\n iframeUrl: \"https://export.turnkey.com\",\n });\n await exportWalletIframeStamper.init();\n\n if (this.turnkeyClient.stamper === this.iframeStamper) {\n return this.exportWalletInner({\n exportStamper: exportWalletIframeStamper,\n exportAs: \"SEED_PHRASE\",\n });\n }\n\n return this.exportWalletInner({\n exportStamper: exportWalletIframeStamper,\n exportAs: \"PRIVATE_KEY\",\n });\n };\n\n public disconnect = async () => {\n this.user = undefined;\n this.iframeStamper.clear();\n };\n\n private initIframeStamper = async () => {\n if (!this.iframeStamper.publicKey()) {\n await this.iframeStamper.init();\n }\n\n this.setStamper(this.iframeStamper);\n\n return this.iframeStamper.publicKey()!;\n };\n\n private initWebauthnStamper = async (user: User | undefined = this.user) => {\n this.setStamper(this.webauthnStamper);\n if (user && user.credentialId) {\n // The goal here is to allow us to cache the allowed credential, but this doesn't work with hybrid transport :(\n this.webauthnStamper.allowCredentials = [\n {\n id: Buffer.from(user.credentialId, \"base64\"),\n type: \"public-key\",\n transports: [\"internal\", \"hybrid\"],\n },\n ];\n }\n };\n\n protected getWebAuthnAttestation = async (\n options?: CredentialCreationOptionOverrides,\n userDetails: { username: string } = {\n username: this.user?.email ?? \"anonymous\",\n }\n ) => {\n const challenge = generateRandomBuffer();\n const authenticatorUserId = generateRandomBuffer();\n\n const attestation = await getWebAuthnAttestation({\n publicKey: {\n ...options?.publicKey,\n authenticatorSelection: {\n residentKey: \"preferred\",\n requireResidentKey: false,\n userVerification: \"preferred\",\n ...options?.publicKey?.authenticatorSelection,\n },\n challenge,\n rp: {\n id: window.location.hostname,\n name: window.location.hostname,\n ...options?.publicKey?.rp,\n },\n pubKeyCredParams: [\n {\n type: \"public-key\",\n alg: -7,\n },\n {\n type: \"public-key\",\n alg: -257,\n },\n ],\n user: {\n id: authenticatorUserId,\n name: userDetails.username,\n displayName: userDetails.username,\n ...options?.publicKey?.user,\n },\n },\n signal: options?.signal,\n });\n\n // on iOS sometimes this is returned as empty or null, so handling that here\n if (attestation.transports == null || attestation.transports.length === 0) {\n attestation.transports = [\n \"AUTHENTICATOR_TRANSPORT_INTERNAL\",\n \"AUTHENTICATOR_TRANSPORT_HYBRID\",\n ];\n }\n\n return { challenge, authenticatorUserId, attestation };\n };\n}\n"]}
@@ -0,0 +1,106 @@
1
+ import type { Address } from "@aa-sdk/core";
2
+ import type { TSignedRequest, getWebAuthnAttestation } from "@turnkey/http";
3
+ import type { Hex } from "viem";
4
+ export type CredentialCreationOptionOverrides = {
5
+ publicKey?: Partial<CredentialCreationOptions["publicKey"]>;
6
+ } & Pick<CredentialCreationOptions, "signal">;
7
+ export type User = {
8
+ email?: string;
9
+ orgId: string;
10
+ userId: string;
11
+ address: Address;
12
+ credentialId?: string;
13
+ };
14
+ export type ExportWalletParams = {
15
+ iframeContainerId: string;
16
+ iframeElementId?: string;
17
+ };
18
+ export type CreateAccountParams = {
19
+ type: "email";
20
+ email: string;
21
+ expirationSeconds?: number;
22
+ redirectParams?: URLSearchParams;
23
+ } | {
24
+ type: "passkey";
25
+ username: string;
26
+ creationOpts?: CredentialCreationOptionOverrides;
27
+ };
28
+ export type EmailAuthParams = {
29
+ email: string;
30
+ expirationSeconds?: number;
31
+ targetPublicKey: string;
32
+ redirectParams?: URLSearchParams;
33
+ };
34
+ export type SignupResponse = {
35
+ orgId: string;
36
+ userId?: string;
37
+ address?: Address;
38
+ };
39
+ export type SignerRoutes = SignerEndpoints[number]["Route"];
40
+ export type SignerBody<T extends SignerRoutes> = Extract<SignerEndpoints[number], {
41
+ Route: T;
42
+ }>["Body"];
43
+ export type SignerResponse<T extends SignerRoutes> = Extract<SignerEndpoints[number], {
44
+ Route: T;
45
+ }>["Response"];
46
+ export type SignerEndpoints = [
47
+ {
48
+ Route: "/v1/signup";
49
+ Body: (Omit<EmailAuthParams, "redirectParams"> & {
50
+ redirectParams?: string;
51
+ }) | {
52
+ passkey: {
53
+ challenge: string;
54
+ attestation: Awaited<ReturnType<typeof getWebAuthnAttestation>>;
55
+ };
56
+ };
57
+ Response: SignupResponse;
58
+ },
59
+ {
60
+ Route: "/v1/whoami";
61
+ Body: {
62
+ stampedRequest: TSignedRequest;
63
+ };
64
+ Response: User;
65
+ },
66
+ {
67
+ Route: "/v1/auth";
68
+ Body: Omit<EmailAuthParams, "redirectParams"> & {
69
+ redirectParams?: string;
70
+ };
71
+ Response: {
72
+ orgId: string;
73
+ };
74
+ },
75
+ {
76
+ Route: "/v1/lookup";
77
+ Body: {
78
+ email: string;
79
+ };
80
+ Response: {
81
+ orgId: string | null;
82
+ };
83
+ },
84
+ {
85
+ Route: "/v1/sign-payload";
86
+ Body: {
87
+ stampedRequest: TSignedRequest;
88
+ };
89
+ Response: {
90
+ signature: Hex;
91
+ };
92
+ }
93
+ ];
94
+ export type AlchemySignerClientEvents = {
95
+ connected(user: User): void;
96
+ authenticating(): void;
97
+ connectedEmail(user: User, bundle: string): void;
98
+ connectedPasskey(user: User): void;
99
+ disconnected(): void;
100
+ };
101
+ export type AlchemySignerClientEvent = keyof AlchemySignerClientEvents;
102
+ export type GetWebAuthnAttestationResult = {
103
+ attestation: Awaited<ReturnType<typeof getWebAuthnAttestation>>;
104
+ challenge: ArrayBuffer;
105
+ authenticatorUserId: ArrayBuffer;
106
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/client/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Address } from \"@aa-sdk/core\";\nimport type { TSignedRequest, getWebAuthnAttestation } from \"@turnkey/http\";\nimport type { Hex } from \"viem\";\n\nexport type CredentialCreationOptionOverrides = {\n publicKey?: Partial<CredentialCreationOptions[\"publicKey\"]>;\n} & Pick<CredentialCreationOptions, \"signal\">;\n\n// [!region User]\nexport type User = {\n email?: string;\n orgId: string;\n userId: string;\n address: Address;\n credentialId?: string;\n};\n// [!endregion User]\n\nexport type ExportWalletParams = {\n iframeContainerId: string;\n iframeElementId?: string;\n};\n\nexport type CreateAccountParams =\n | {\n type: \"email\";\n email: string;\n expirationSeconds?: number;\n redirectParams?: URLSearchParams;\n }\n | {\n type: \"passkey\";\n username: string;\n creationOpts?: CredentialCreationOptionOverrides;\n };\n\nexport type EmailAuthParams = {\n email: string;\n expirationSeconds?: number;\n targetPublicKey: string;\n redirectParams?: URLSearchParams;\n};\n\nexport type SignupResponse = {\n orgId: string;\n userId?: string;\n address?: Address;\n};\n\nexport type SignerRoutes = SignerEndpoints[number][\"Route\"];\nexport type SignerBody<T extends SignerRoutes> = Extract<\n SignerEndpoints[number],\n { Route: T }\n>[\"Body\"];\nexport type SignerResponse<T extends SignerRoutes> = Extract<\n SignerEndpoints[number],\n { Route: T }\n>[\"Response\"];\n\nexport type SignerEndpoints = [\n {\n Route: \"/v1/signup\";\n Body:\n | (Omit<EmailAuthParams, \"redirectParams\"> & { redirectParams?: string })\n | {\n passkey: {\n challenge: string;\n attestation: Awaited<ReturnType<typeof getWebAuthnAttestation>>;\n };\n };\n Response: SignupResponse;\n },\n {\n Route: \"/v1/whoami\";\n Body: {\n stampedRequest: TSignedRequest;\n };\n Response: User;\n },\n {\n Route: \"/v1/auth\";\n Body: Omit<EmailAuthParams, \"redirectParams\"> & { redirectParams?: string };\n Response: {\n orgId: string;\n };\n },\n {\n Route: \"/v1/lookup\";\n Body: {\n email: string;\n };\n Response: {\n orgId: string | null;\n };\n },\n {\n Route: \"/v1/sign-payload\";\n Body: {\n stampedRequest: TSignedRequest;\n };\n Response: {\n signature: Hex;\n };\n }\n];\n\nexport type AlchemySignerClientEvents = {\n connected(user: User): void;\n authenticating(): void;\n connectedEmail(user: User, bundle: string): void;\n connectedPasskey(user: User): void;\n disconnected(): void;\n};\n\nexport type AlchemySignerClientEvent = keyof AlchemySignerClientEvents;\n\nexport type GetWebAuthnAttestationResult = {\n attestation: Awaited<ReturnType<typeof getWebAuthnAttestation>>;\n challenge: ArrayBuffer;\n authenticatorUserId: ArrayBuffer;\n};\n"]}
@@ -0,0 +1,4 @@
1
+ import { BaseError } from "@aa-sdk/core";
2
+ export declare class NotAuthenticatedError extends BaseError {
3
+ constructor();
4
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NotAuthenticatedError = void 0;
4
+ const core_1 = require("@aa-sdk/core");
5
+ class NotAuthenticatedError extends core_1.BaseError {
6
+ constructor() {
7
+ super([
8
+ "Signer not authenticated",
9
+ "Please authenticate to use this signer",
10
+ ].join("\n"), {
11
+ docsPath: "/signers/alchemy-signer/introduction.html",
12
+ });
13
+ }
14
+ }
15
+ exports.NotAuthenticatedError = NotAuthenticatedError;
16
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AAEzC,MAAa,qBAAsB,SAAQ,gBAAS;IAClD;QACE,KAAK,CACH;YACE,0BAA0B;YAC1B,wCAAwC;SACzC,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ;YACE,QAAQ,EAAE,2CAA2C;SACtD,CACF,CAAC;IACJ,CAAC;CACF;AAZD,sDAYC","sourcesContent":["import { BaseError } from \"@aa-sdk/core\";\n\nexport class NotAuthenticatedError extends BaseError {\n constructor() {\n super(\n [\n \"Signer not authenticated\",\n \"Please authenticate to use this signer\",\n ].join(\"\\n\"),\n {\n docsPath: \"/signers/alchemy-signer/introduction.html\",\n }\n );\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export type * from "./signer.js";
2
+ export { AlchemyWebSigner } from "./signer.js";
3
+ export type * from "./types.js";
4
+ export { AlchemySignerStatus } from "./types.js";
5
+ export { BaseSignerClient } from "./client/base.js";
6
+ export { AlchemySignerWebClient } from "./client/index.js";
7
+ export type * from "./client/types.js";
8
+ export { DEFAULT_SESSION_MS } from "./session/manager.js";
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_SESSION_MS = exports.AlchemySignerWebClient = exports.BaseSignerClient = exports.AlchemySignerStatus = exports.AlchemyWebSigner = void 0;
4
+ var signer_js_1 = require("./signer.js");
5
+ Object.defineProperty(exports, "AlchemyWebSigner", { enumerable: true, get: function () { return signer_js_1.AlchemyWebSigner; } });
6
+ var types_js_1 = require("./types.js");
7
+ Object.defineProperty(exports, "AlchemySignerStatus", { enumerable: true, get: function () { return types_js_1.AlchemySignerStatus; } });
8
+ var base_js_1 = require("./client/base.js");
9
+ Object.defineProperty(exports, "BaseSignerClient", { enumerable: true, get: function () { return base_js_1.BaseSignerClient; } });
10
+ var index_js_1 = require("./client/index.js");
11
+ Object.defineProperty(exports, "AlchemySignerWebClient", { enumerable: true, get: function () { return index_js_1.AlchemySignerWebClient; } });
12
+ var manager_js_1 = require("./session/manager.js");
13
+ Object.defineProperty(exports, "DEFAULT_SESSION_MS", { enumerable: true, get: function () { return manager_js_1.DEFAULT_SESSION_MS; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,yCAA+C;AAAtC,6GAAA,gBAAgB,OAAA;AAGzB,uCAAiD;AAAxC,+GAAA,mBAAmB,OAAA;AAE5B,4CAAoD;AAA3C,2GAAA,gBAAgB,OAAA;AACzB,8CAA2D;AAAlD,kHAAA,sBAAsB,OAAA;AAE/B,mDAA0D;AAAjD,gHAAA,kBAAkB,OAAA","sourcesContent":["export type * from \"./signer.js\";\nexport { AlchemyWebSigner } from \"./signer.js\";\n\nexport type * from \"./types.js\";\nexport { AlchemySignerStatus } from \"./types.js\";\n\nexport { BaseSignerClient } from \"./client/base.js\";\nexport { AlchemySignerWebClient } from \"./client/index.js\";\nexport type * from \"./client/types.js\";\nexport { DEFAULT_SESSION_MS } from \"./session/manager.js\";\n"]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,45 @@
1
+ import EventEmitter from "eventemitter3";
2
+ import { z } from "zod";
3
+ import type { BaseSignerClient } from "../client/base";
4
+ import type { User } from "../client/types";
5
+ import type { SessionManagerEvents } from "./types";
6
+ export declare const DEFAULT_SESSION_MS: number;
7
+ export declare const SessionManagerParamsSchema: z.ZodObject<{
8
+ sessionKey: z.ZodDefault<z.ZodString>;
9
+ storage: z.ZodUnion<[z.ZodDefault<z.ZodEnum<["localStorage", "sessionStorage"]>>, z.ZodType<Storage, z.ZodTypeDef, Storage>]>;
10
+ expirationTimeMs: z.ZodDefault<z.ZodNumber>;
11
+ client: z.ZodType<BaseSignerClient<unknown>, z.ZodTypeDef, BaseSignerClient<unknown>>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ sessionKey: string;
14
+ storage: ("localStorage" | "sessionStorage" | Storage) & ("localStorage" | "sessionStorage" | Storage | undefined);
15
+ expirationTimeMs: number;
16
+ client: BaseSignerClient<unknown>;
17
+ }, {
18
+ client: BaseSignerClient<unknown>;
19
+ sessionKey?: string | undefined;
20
+ storage?: "localStorage" | "sessionStorage" | Storage | undefined;
21
+ expirationTimeMs?: number | undefined;
22
+ }>;
23
+ export type SessionManagerParams = z.input<typeof SessionManagerParamsSchema>;
24
+ export declare class SessionManager {
25
+ private sessionKey;
26
+ private client;
27
+ private eventEmitter;
28
+ readonly expirationTimeMs: number;
29
+ private store;
30
+ constructor(params: SessionManagerParams);
31
+ getSessionUser: () => Promise<User | null>;
32
+ clearSession: () => void;
33
+ setTemporarySession: (session: {
34
+ orgId: string;
35
+ }) => void;
36
+ getTemporarySession: () => {
37
+ orgId: string;
38
+ } | null;
39
+ on: <E extends keyof SessionManagerEvents>(event: E, listener: SessionManagerEvents[E]) => () => EventEmitter<SessionManagerEvents, any>;
40
+ private getSession;
41
+ private setSession;
42
+ initialize(): void;
43
+ private getInitialState;
44
+ private registerEventListeners;
45
+ }