@account-kit/signer 4.31.2 → 4.32.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.
- package/dist/esm/base.d.ts +6 -2
- package/dist/esm/base.js +131 -33
- package/dist/esm/base.js.map +1 -1
- package/dist/esm/client/base.d.ts +132 -9
- package/dist/esm/client/base.js +34 -4
- package/dist/esm/client/base.js.map +1 -1
- package/dist/esm/client/index.d.ts +36 -14
- package/dist/esm/client/index.js +36 -18
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/client/types.d.ts +19 -0
- package/dist/esm/client/types.js.map +1 -1
- package/dist/esm/signer.d.ts +88 -33
- package/dist/esm/signer.js +28 -3
- package/dist/esm/signer.js.map +1 -1
- package/dist/esm/solanaSigner.d.ts +3 -3
- package/dist/esm/solanaSigner.js +1 -1
- package/dist/esm/solanaSigner.js.map +1 -1
- package/dist/esm/types.d.ts +1 -0
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/types/base.d.ts +6 -2
- package/dist/types/base.d.ts.map +1 -1
- package/dist/types/client/base.d.ts +132 -9
- package/dist/types/client/base.d.ts.map +1 -1
- package/dist/types/client/index.d.ts +36 -14
- package/dist/types/client/index.d.ts.map +1 -1
- package/dist/types/client/types.d.ts +19 -0
- package/dist/types/client/types.d.ts.map +1 -1
- package/dist/types/signer.d.ts +88 -33
- package/dist/types/signer.d.ts.map +1 -1
- package/dist/types/solanaSigner.d.ts +3 -3
- package/dist/types/solanaSigner.d.ts.map +1 -1
- package/dist/types/types.d.ts +1 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +5 -6
- package/src/base.ts +172 -56
- package/src/client/base.ts +36 -7
- package/src/client/index.ts +41 -18
- package/src/client/types.ts +21 -0
- package/src/signer.ts +36 -3
- package/src/solanaSigner.ts +4 -4
- package/src/types.ts +1 -0
- package/src/version.ts +1 -1
package/dist/esm/signer.d.ts
CHANGED
|
@@ -66,8 +66,9 @@ export type KnownAuthProvider = "google" | "apple" | "facebook" | "twitch" | "au
|
|
|
66
66
|
export type OauthMode = "redirect" | "popup";
|
|
67
67
|
export declare const AlchemySignerParamsSchema: z.ZodObject<{
|
|
68
68
|
client: z.ZodUnion<[z.ZodType<AlchemySignerWebClient, z.ZodTypeDef, AlchemySignerWebClient>, z.ZodObject<{
|
|
69
|
-
connection: z.ZodUnion<[z.ZodObject<{
|
|
70
|
-
rpcUrl: z.ZodOptional<z.ZodNever>;
|
|
69
|
+
connection: z.ZodIntersection<z.ZodUnion<[z.ZodObject<{
|
|
70
|
+
rpcUrl: z.ZodOptional<z.ZodNever>;
|
|
71
|
+
/** @deprecated This option will be overriden by dashboard settings. Please use the dashboard settings instead. This option will be removed in a future release. */
|
|
71
72
|
apiKey: z.ZodString;
|
|
72
73
|
jwt: z.ZodOptional<z.ZodNever>;
|
|
73
74
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -114,7 +115,13 @@ export declare const AlchemySignerParamsSchema: z.ZodObject<{
|
|
|
114
115
|
rpcUrl: string;
|
|
115
116
|
jwt: string;
|
|
116
117
|
apiKey?: undefined;
|
|
117
|
-
}>]
|
|
118
|
+
}>]>, z.ZodObject<{
|
|
119
|
+
chainAgnosticUrl: z.ZodOptional<z.ZodString>;
|
|
120
|
+
}, "strip", z.ZodTypeAny, {
|
|
121
|
+
chainAgnosticUrl?: string | undefined;
|
|
122
|
+
}, {
|
|
123
|
+
chainAgnosticUrl?: string | undefined;
|
|
124
|
+
}>>;
|
|
118
125
|
iframeConfig: z.ZodObject<{
|
|
119
126
|
iframeElementId: z.ZodDefault<z.ZodString>;
|
|
120
127
|
iframeContainerId: z.ZodString;
|
|
@@ -130,23 +137,31 @@ export declare const AlchemySignerParamsSchema: z.ZodObject<{
|
|
|
130
137
|
oauthCallbackUrl: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
131
138
|
enablePopupOauth: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
132
139
|
}, "strip", z.ZodTypeAny, {
|
|
133
|
-
connection: {
|
|
140
|
+
connection: ({
|
|
134
141
|
apiKey: string;
|
|
135
142
|
rpcUrl?: undefined;
|
|
136
143
|
jwt?: undefined;
|
|
137
|
-
}
|
|
144
|
+
} & {
|
|
145
|
+
chainAgnosticUrl?: string | undefined;
|
|
146
|
+
}) | ({
|
|
138
147
|
jwt: string;
|
|
139
148
|
rpcUrl?: undefined;
|
|
140
149
|
apiKey?: undefined;
|
|
141
|
-
}
|
|
150
|
+
} & {
|
|
151
|
+
chainAgnosticUrl?: string | undefined;
|
|
152
|
+
}) | ({
|
|
142
153
|
rpcUrl: string;
|
|
143
154
|
apiKey?: undefined;
|
|
144
155
|
jwt?: undefined;
|
|
145
|
-
}
|
|
156
|
+
} & {
|
|
157
|
+
chainAgnosticUrl?: string | undefined;
|
|
158
|
+
}) | ({
|
|
146
159
|
rpcUrl: string;
|
|
147
160
|
jwt: string;
|
|
148
161
|
apiKey?: undefined;
|
|
149
|
-
}
|
|
162
|
+
} & {
|
|
163
|
+
chainAgnosticUrl?: string | undefined;
|
|
164
|
+
});
|
|
150
165
|
iframeConfig: {
|
|
151
166
|
iframeElementId: string;
|
|
152
167
|
iframeContainerId: string;
|
|
@@ -156,23 +171,31 @@ export declare const AlchemySignerParamsSchema: z.ZodObject<{
|
|
|
156
171
|
enablePopupOauth: boolean;
|
|
157
172
|
rpId?: string | undefined;
|
|
158
173
|
}, {
|
|
159
|
-
connection: {
|
|
174
|
+
connection: ({
|
|
160
175
|
apiKey: string;
|
|
161
176
|
rpcUrl?: undefined;
|
|
162
177
|
jwt?: undefined;
|
|
163
|
-
}
|
|
178
|
+
} & {
|
|
179
|
+
chainAgnosticUrl?: string | undefined;
|
|
180
|
+
}) | ({
|
|
164
181
|
jwt: string;
|
|
165
182
|
rpcUrl?: undefined;
|
|
166
183
|
apiKey?: undefined;
|
|
167
|
-
}
|
|
184
|
+
} & {
|
|
185
|
+
chainAgnosticUrl?: string | undefined;
|
|
186
|
+
}) | ({
|
|
168
187
|
rpcUrl: string;
|
|
169
188
|
apiKey?: undefined;
|
|
170
189
|
jwt?: undefined;
|
|
171
|
-
}
|
|
190
|
+
} & {
|
|
191
|
+
chainAgnosticUrl?: string | undefined;
|
|
192
|
+
}) | ({
|
|
172
193
|
rpcUrl: string;
|
|
173
194
|
jwt: string;
|
|
174
195
|
apiKey?: undefined;
|
|
175
|
-
}
|
|
196
|
+
} & {
|
|
197
|
+
chainAgnosticUrl?: string | undefined;
|
|
198
|
+
});
|
|
176
199
|
iframeConfig: {
|
|
177
200
|
iframeContainerId: string;
|
|
178
201
|
iframeElementId?: string | undefined;
|
|
@@ -198,23 +221,31 @@ export declare const AlchemySignerParamsSchema: z.ZodObject<{
|
|
|
198
221
|
}>>;
|
|
199
222
|
}, "strip", z.ZodTypeAny, {
|
|
200
223
|
client: ({
|
|
201
|
-
connection: {
|
|
224
|
+
connection: ({
|
|
202
225
|
apiKey: string;
|
|
203
226
|
rpcUrl?: undefined;
|
|
204
227
|
jwt?: undefined;
|
|
205
|
-
}
|
|
228
|
+
} & {
|
|
229
|
+
chainAgnosticUrl?: string | undefined;
|
|
230
|
+
}) | ({
|
|
206
231
|
jwt: string;
|
|
207
232
|
rpcUrl?: undefined;
|
|
208
233
|
apiKey?: undefined;
|
|
209
|
-
}
|
|
234
|
+
} & {
|
|
235
|
+
chainAgnosticUrl?: string | undefined;
|
|
236
|
+
}) | ({
|
|
210
237
|
rpcUrl: string;
|
|
211
238
|
apiKey?: undefined;
|
|
212
239
|
jwt?: undefined;
|
|
213
|
-
}
|
|
240
|
+
} & {
|
|
241
|
+
chainAgnosticUrl?: string | undefined;
|
|
242
|
+
}) | ({
|
|
214
243
|
rpcUrl: string;
|
|
215
244
|
jwt: string;
|
|
216
245
|
apiKey?: undefined;
|
|
217
|
-
}
|
|
246
|
+
} & {
|
|
247
|
+
chainAgnosticUrl?: string | undefined;
|
|
248
|
+
});
|
|
218
249
|
iframeConfig: {
|
|
219
250
|
iframeElementId: string;
|
|
220
251
|
iframeContainerId: string;
|
|
@@ -224,23 +255,31 @@ export declare const AlchemySignerParamsSchema: z.ZodObject<{
|
|
|
224
255
|
enablePopupOauth: boolean;
|
|
225
256
|
rpId?: string | undefined;
|
|
226
257
|
} | AlchemySignerWebClient) & ({
|
|
227
|
-
connection: {
|
|
258
|
+
connection: ({
|
|
228
259
|
apiKey: string;
|
|
229
260
|
rpcUrl?: undefined;
|
|
230
261
|
jwt?: undefined;
|
|
231
|
-
}
|
|
262
|
+
} & {
|
|
263
|
+
chainAgnosticUrl?: string | undefined;
|
|
264
|
+
}) | ({
|
|
232
265
|
jwt: string;
|
|
233
266
|
rpcUrl?: undefined;
|
|
234
267
|
apiKey?: undefined;
|
|
235
|
-
}
|
|
268
|
+
} & {
|
|
269
|
+
chainAgnosticUrl?: string | undefined;
|
|
270
|
+
}) | ({
|
|
236
271
|
rpcUrl: string;
|
|
237
272
|
apiKey?: undefined;
|
|
238
273
|
jwt?: undefined;
|
|
239
|
-
}
|
|
274
|
+
} & {
|
|
275
|
+
chainAgnosticUrl?: string | undefined;
|
|
276
|
+
}) | ({
|
|
240
277
|
rpcUrl: string;
|
|
241
278
|
jwt: string;
|
|
242
279
|
apiKey?: undefined;
|
|
243
|
-
}
|
|
280
|
+
} & {
|
|
281
|
+
chainAgnosticUrl?: string | undefined;
|
|
282
|
+
});
|
|
244
283
|
iframeConfig: {
|
|
245
284
|
iframeElementId: string;
|
|
246
285
|
iframeContainerId: string;
|
|
@@ -257,23 +296,31 @@ export declare const AlchemySignerParamsSchema: z.ZodObject<{
|
|
|
257
296
|
} | undefined;
|
|
258
297
|
}, {
|
|
259
298
|
client: ({
|
|
260
|
-
connection: {
|
|
299
|
+
connection: ({
|
|
261
300
|
apiKey: string;
|
|
262
301
|
rpcUrl?: undefined;
|
|
263
302
|
jwt?: undefined;
|
|
264
|
-
}
|
|
303
|
+
} & {
|
|
304
|
+
chainAgnosticUrl?: string | undefined;
|
|
305
|
+
}) | ({
|
|
265
306
|
jwt: string;
|
|
266
307
|
rpcUrl?: undefined;
|
|
267
308
|
apiKey?: undefined;
|
|
268
|
-
}
|
|
309
|
+
} & {
|
|
310
|
+
chainAgnosticUrl?: string | undefined;
|
|
311
|
+
}) | ({
|
|
269
312
|
rpcUrl: string;
|
|
270
313
|
apiKey?: undefined;
|
|
271
314
|
jwt?: undefined;
|
|
272
|
-
}
|
|
315
|
+
} & {
|
|
316
|
+
chainAgnosticUrl?: string | undefined;
|
|
317
|
+
}) | ({
|
|
273
318
|
rpcUrl: string;
|
|
274
319
|
jwt: string;
|
|
275
320
|
apiKey?: undefined;
|
|
276
|
-
}
|
|
321
|
+
} & {
|
|
322
|
+
chainAgnosticUrl?: string | undefined;
|
|
323
|
+
});
|
|
277
324
|
iframeConfig: {
|
|
278
325
|
iframeContainerId: string;
|
|
279
326
|
iframeElementId?: string | undefined;
|
|
@@ -283,23 +330,31 @@ export declare const AlchemySignerParamsSchema: z.ZodObject<{
|
|
|
283
330
|
oauthCallbackUrl?: string | undefined;
|
|
284
331
|
enablePopupOauth?: boolean | undefined;
|
|
285
332
|
} | AlchemySignerWebClient) & ({
|
|
286
|
-
connection: {
|
|
333
|
+
connection: ({
|
|
287
334
|
apiKey: string;
|
|
288
335
|
rpcUrl?: undefined;
|
|
289
336
|
jwt?: undefined;
|
|
290
|
-
}
|
|
337
|
+
} & {
|
|
338
|
+
chainAgnosticUrl?: string | undefined;
|
|
339
|
+
}) | ({
|
|
291
340
|
jwt: string;
|
|
292
341
|
rpcUrl?: undefined;
|
|
293
342
|
apiKey?: undefined;
|
|
294
|
-
}
|
|
343
|
+
} & {
|
|
344
|
+
chainAgnosticUrl?: string | undefined;
|
|
345
|
+
}) | ({
|
|
295
346
|
rpcUrl: string;
|
|
296
347
|
apiKey?: undefined;
|
|
297
348
|
jwt?: undefined;
|
|
298
|
-
}
|
|
349
|
+
} & {
|
|
350
|
+
chainAgnosticUrl?: string | undefined;
|
|
351
|
+
}) | ({
|
|
299
352
|
rpcUrl: string;
|
|
300
353
|
jwt: string;
|
|
301
354
|
apiKey?: undefined;
|
|
302
|
-
}
|
|
355
|
+
} & {
|
|
356
|
+
chainAgnosticUrl?: string | undefined;
|
|
357
|
+
});
|
|
303
358
|
iframeConfig: {
|
|
304
359
|
iframeContainerId: string;
|
|
305
360
|
iframeElementId?: string | undefined;
|
package/dist/esm/signer.js
CHANGED
|
@@ -51,13 +51,17 @@ export class AlchemyWebSigner extends BaseAlchemySigner {
|
|
|
51
51
|
emailBundle: "bundle",
|
|
52
52
|
// We don't need this, but we still want to remove it from the URL.
|
|
53
53
|
emailOrgId: "orgId",
|
|
54
|
+
status: "alchemy-status",
|
|
54
55
|
oauthBundle: "alchemy-bundle",
|
|
55
56
|
oauthOrgId: "alchemy-org-id",
|
|
56
|
-
oauthError: "alchemy-error",
|
|
57
57
|
idToken: "alchemy-id-token",
|
|
58
58
|
isSignup: "aa-is-signup",
|
|
59
|
+
otpId: "alchemy-otp-id",
|
|
60
|
+
email: "alchemy-email",
|
|
61
|
+
authProvider: "alchemy-auth-provider",
|
|
62
|
+
oauthError: "alchemy-error",
|
|
59
63
|
};
|
|
60
|
-
const { emailBundle, oauthBundle, oauthOrgId,
|
|
64
|
+
const { emailBundle, status, oauthBundle, oauthOrgId, idToken, isSignup, otpId, email, authProvider, oauthError, } = getAndRemoveQueryParams(qpStructure);
|
|
61
65
|
if (!AlchemyWebSigner.replaceStateFilterInstalled) {
|
|
62
66
|
installReplaceStateFilter(Object.values(qpStructure));
|
|
63
67
|
AlchemyWebSigner.replaceStateFilterInstalled = true;
|
|
@@ -65,7 +69,28 @@ export class AlchemyWebSigner extends BaseAlchemySigner {
|
|
|
65
69
|
const initialError = oauthError != null
|
|
66
70
|
? { name: "OauthError", message: oauthError }
|
|
67
71
|
: undefined;
|
|
68
|
-
|
|
72
|
+
const initialAuthLinkingPrompt = (() => {
|
|
73
|
+
if (status !== "ACCOUNT_LINKING_CONFIRMATION_REQUIRED") {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
if (idToken == null ||
|
|
77
|
+
email == null ||
|
|
78
|
+
authProvider == null ||
|
|
79
|
+
otpId == null ||
|
|
80
|
+
oauthOrgId == null) {
|
|
81
|
+
console.error("Missing required query params for auth linking prompt");
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
status,
|
|
86
|
+
idToken,
|
|
87
|
+
email,
|
|
88
|
+
providerName: authProvider,
|
|
89
|
+
otpId,
|
|
90
|
+
orgId: oauthOrgId,
|
|
91
|
+
};
|
|
92
|
+
})();
|
|
93
|
+
super({ client, sessionConfig, initialError, initialAuthLinkingPrompt });
|
|
69
94
|
const isNewUser = isSignup === "true";
|
|
70
95
|
this.signerType = "alchemy-signer";
|
|
71
96
|
if (emailBundle) {
|
package/dist/esm/signer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signer.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { BaseAlchemySigner } from \"./base.js\";\nimport {\n AlchemySignerClientParamsSchema,\n AlchemySignerWebClient,\n} from \"./client/index.js\";\nimport type {\n CredentialCreationOptionOverrides,\n VerifyMfaParams,\n} from \"./client/types.js\";\nimport { SessionManagerParamsSchema } from \"./session/manager.js\";\n\nexport type AuthParams =\n | {\n type: \"email\";\n email: string;\n /** @deprecated This option will be overriden by dashboard settings. Please use the dashboard settings instead. This option will be removed in a future release. */\n emailMode?: \"magicLink\" | \"otp\";\n redirectParams?: URLSearchParams;\n multiFactors?: VerifyMfaParams[];\n }\n | { type: \"email\"; bundle: string; orgId?: string; isNewUser?: boolean }\n | {\n type: \"passkey\";\n email: string;\n creationOpts?: CredentialCreationOptionOverrides;\n }\n | {\n type: \"passkey\";\n createNew: false;\n }\n | {\n type: \"passkey\";\n createNew: true;\n username: string;\n creationOpts?: CredentialCreationOptionOverrides;\n }\n | ({\n type: \"oauth\";\n scope?: string;\n claims?: string;\n otherParameters?: Record<string, string>;\n } & OauthProviderConfig &\n OauthRedirectConfig)\n | {\n type: \"oauthReturn\";\n bundle: string;\n orgId: string;\n idToken: string;\n isNewUser?: boolean;\n }\n | {\n type: \"otp\";\n otpCode: string;\n multiFactors?: VerifyMfaParams[];\n };\n\nexport type OauthProviderConfig =\n | {\n authProviderId: \"auth0\";\n isCustomProvider?: false;\n auth0Connection?: string;\n }\n | {\n authProviderId: KnownAuthProvider;\n isCustomProvider?: false;\n auth0Connection?: never;\n }\n | {\n authProviderId: string;\n isCustomProvider: true;\n auth0Connection?: never;\n };\n\nexport type OauthRedirectConfig =\n | { mode: \"redirect\"; redirectUrl: string }\n | { mode: \"popup\"; redirectUrl?: never };\n\nexport type KnownAuthProvider =\n | \"google\"\n | \"apple\"\n | \"facebook\"\n | \"twitch\"\n | \"auth0\";\n\nexport type OauthMode = \"redirect\" | \"popup\";\n\nexport const AlchemySignerParamsSchema = z\n .object({\n client: z\n .custom<AlchemySignerWebClient>()\n .or(AlchemySignerClientParamsSchema),\n })\n .extend({\n sessionConfig: SessionManagerParamsSchema.omit({\n client: true,\n }).optional(),\n });\n\nexport type AlchemySignerParams = z.input<typeof AlchemySignerParamsSchema>;\n\n/**\n * A SmartAccountSigner that can be used with any SmartContractAccount\n */\nexport class AlchemyWebSigner extends BaseAlchemySigner<AlchemySignerWebClient> {\n private static replaceStateFilterInstalled = false;\n /**\n * Initializes an instance with the provided Alchemy signer parameters after parsing them with a schema.\n *\n * @example\n * ```ts\n * import { AlchemyWebSigner } from \"@account-kit/signer\";\n *\n * const signer = new AlchemyWebSigner({\n * client: {\n * connection: {\n * rpcUrl: \"/api/rpc\",\n * },\n * iframeConfig: {\n * iframeContainerId: \"alchemy-signer-iframe-container\",\n * },\n * },\n * });\n * ```\n *\n * @param {AlchemySignerParams} params The parameters for the Alchemy signer, including the client and session configuration\n */\n\n constructor(params: AlchemySignerParams) {\n const { sessionConfig, ...params_ } =\n AlchemySignerParamsSchema.parse(params);\n\n let client: AlchemySignerWebClient;\n if (\"connection\" in params_.client) {\n client = new AlchemySignerWebClient(params_.client);\n } else {\n client = params_.client;\n }\n\n const qpStructure = {\n emailBundle: \"bundle\",\n // We don't need this, but we still want to remove it from the URL.\n emailOrgId: \"orgId\",\n oauthBundle: \"alchemy-bundle\",\n oauthOrgId: \"alchemy-org-id\",\n oauthError: \"alchemy-error\",\n idToken: \"alchemy-id-token\",\n isSignup: \"aa-is-signup\",\n };\n\n const {\n emailBundle,\n oauthBundle,\n oauthOrgId,\n oauthError,\n idToken,\n isSignup,\n } = getAndRemoveQueryParams(qpStructure);\n\n if (!AlchemyWebSigner.replaceStateFilterInstalled) {\n installReplaceStateFilter(Object.values(qpStructure));\n AlchemyWebSigner.replaceStateFilterInstalled = true;\n }\n\n const initialError =\n oauthError != null\n ? { name: \"OauthError\", message: oauthError }\n : undefined;\n\n super({ client, sessionConfig, initialError });\n\n const isNewUser = isSignup === \"true\";\n\n this.signerType = \"alchemy-signer\";\n\n if (emailBundle) {\n this.authenticate({\n type: \"email\",\n bundle: emailBundle,\n isNewUser,\n });\n } else if (oauthBundle && oauthOrgId && idToken) {\n this.authenticate({\n type: \"oauthReturn\",\n bundle: oauthBundle,\n orgId: oauthOrgId,\n idToken,\n isNewUser,\n });\n }\n }\n}\n\n/**\n * Overrides `window.history.replaceState` to remove the specified query params from target URLs.\n *\n * @param {string[]} qpToRemove The query params to remove from target URLs.\n */\nfunction installReplaceStateFilter(qpToRemove: string[]) {\n const originalReplaceState = window.history.replaceState;\n\n const processUrl = (src: string | URL | undefined | null) => {\n if (!src) {\n return src;\n }\n\n try {\n const url = new URL(src, document.baseURI);\n const originalSearch = url.search;\n\n qpToRemove.forEach((qp) => url.searchParams.delete(qp));\n if (originalSearch === url.search) return src;\n\n console.log(\"[Alchemy] filtered query params from URL\");\n return url;\n } catch (e) {\n console.log(\"[Alchemy] failed to process URL in state filter\", e);\n return src;\n }\n };\n\n window.history.replaceState = function (...args) {\n const [state, unused, url] = args;\n\n const result = originalReplaceState.apply(this, [\n state,\n unused,\n processUrl(url),\n ]);\n\n return result;\n };\n\n console.log(\"[Alchemy] installed window.history.replaceState interceptor\");\n}\n\n/**\n * Reads and removes the specified query params from the URL.\n *\n * @param {T} keys object whose values are the query parameter keys to read and\n * remove\n * @returns {{ [K in keyof T]: string | undefined }} object with the same keys\n * as the input whose values are the values of the query params.\n */\nfunction getAndRemoveQueryParams<T extends Record<string, string>>(\n keys: T\n): { [K in keyof T]: string | undefined } {\n const url = new URL(window.location.href);\n const result: Record<string, string | undefined> = {};\n let foundQueryParam = false;\n for (const [key, param] of Object.entries(keys)) {\n const value = url.searchParams.get(param) ?? undefined;\n foundQueryParam ||= value != null;\n result[key] = value;\n url.searchParams.delete(param);\n }\n if (foundQueryParam) {\n window.history.replaceState(window.history.state, \"\", url.toString());\n }\n return result as { [K in keyof T]: string | undefined };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signer.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { BaseAlchemySigner } from \"./base.js\";\nimport {\n AlchemySignerClientParamsSchema,\n AlchemySignerWebClient,\n} from \"./client/index.js\";\nimport type {\n AuthLinkingPrompt,\n CredentialCreationOptionOverrides,\n VerifyMfaParams,\n} from \"./client/types.js\";\nimport { SessionManagerParamsSchema } from \"./session/manager.js\";\n\nexport type AuthParams =\n | {\n type: \"email\";\n email: string;\n /** @deprecated This option will be overriden by dashboard settings. Please use the dashboard settings instead. This option will be removed in a future release. */\n emailMode?: \"magicLink\" | \"otp\";\n redirectParams?: URLSearchParams;\n multiFactors?: VerifyMfaParams[];\n }\n | { type: \"email\"; bundle: string; orgId?: string; isNewUser?: boolean }\n | {\n type: \"passkey\";\n email: string;\n creationOpts?: CredentialCreationOptionOverrides;\n }\n | {\n type: \"passkey\";\n createNew: false;\n }\n | {\n type: \"passkey\";\n createNew: true;\n username: string;\n creationOpts?: CredentialCreationOptionOverrides;\n }\n | ({\n type: \"oauth\";\n scope?: string;\n claims?: string;\n otherParameters?: Record<string, string>;\n } & OauthProviderConfig &\n OauthRedirectConfig)\n | {\n type: \"oauthReturn\";\n bundle: string;\n orgId: string;\n idToken: string;\n isNewUser?: boolean;\n }\n | {\n type: \"otp\";\n otpCode: string;\n multiFactors?: VerifyMfaParams[];\n };\n\nexport type OauthProviderConfig =\n | {\n authProviderId: \"auth0\";\n isCustomProvider?: false;\n auth0Connection?: string;\n }\n | {\n authProviderId: KnownAuthProvider;\n isCustomProvider?: false;\n auth0Connection?: never;\n }\n | {\n authProviderId: string;\n isCustomProvider: true;\n auth0Connection?: never;\n };\n\nexport type OauthRedirectConfig =\n | { mode: \"redirect\"; redirectUrl: string }\n | { mode: \"popup\"; redirectUrl?: never };\n\nexport type KnownAuthProvider =\n | \"google\"\n | \"apple\"\n | \"facebook\"\n | \"twitch\"\n | \"auth0\";\n\nexport type OauthMode = \"redirect\" | \"popup\";\n\nexport const AlchemySignerParamsSchema = z\n .object({\n client: z\n .custom<AlchemySignerWebClient>()\n .or(AlchemySignerClientParamsSchema),\n })\n .extend({\n sessionConfig: SessionManagerParamsSchema.omit({\n client: true,\n }).optional(),\n });\n\nexport type AlchemySignerParams = z.input<typeof AlchemySignerParamsSchema>;\n\n/**\n * A SmartAccountSigner that can be used with any SmartContractAccount\n */\nexport class AlchemyWebSigner extends BaseAlchemySigner<AlchemySignerWebClient> {\n private static replaceStateFilterInstalled = false;\n /**\n * Initializes an instance with the provided Alchemy signer parameters after parsing them with a schema.\n *\n * @example\n * ```ts\n * import { AlchemyWebSigner } from \"@account-kit/signer\";\n *\n * const signer = new AlchemyWebSigner({\n * client: {\n * connection: {\n * rpcUrl: \"/api/rpc\",\n * },\n * iframeConfig: {\n * iframeContainerId: \"alchemy-signer-iframe-container\",\n * },\n * },\n * });\n * ```\n *\n * @param {AlchemySignerParams} params The parameters for the Alchemy signer, including the client and session configuration\n */\n\n constructor(params: AlchemySignerParams) {\n const { sessionConfig, ...params_ } =\n AlchemySignerParamsSchema.parse(params);\n\n let client: AlchemySignerWebClient;\n if (\"connection\" in params_.client) {\n client = new AlchemySignerWebClient(params_.client);\n } else {\n client = params_.client;\n }\n\n const qpStructure = {\n emailBundle: \"bundle\",\n // We don't need this, but we still want to remove it from the URL.\n emailOrgId: \"orgId\",\n status: \"alchemy-status\",\n oauthBundle: \"alchemy-bundle\",\n oauthOrgId: \"alchemy-org-id\",\n idToken: \"alchemy-id-token\",\n isSignup: \"aa-is-signup\",\n otpId: \"alchemy-otp-id\",\n email: \"alchemy-email\",\n authProvider: \"alchemy-auth-provider\",\n oauthError: \"alchemy-error\",\n };\n\n const {\n emailBundle,\n status,\n oauthBundle,\n oauthOrgId,\n idToken,\n isSignup,\n otpId,\n email,\n authProvider,\n oauthError,\n } = getAndRemoveQueryParams(qpStructure);\n\n if (!AlchemyWebSigner.replaceStateFilterInstalled) {\n installReplaceStateFilter(Object.values(qpStructure));\n AlchemyWebSigner.replaceStateFilterInstalled = true;\n }\n\n const initialError =\n oauthError != null\n ? { name: \"OauthError\", message: oauthError }\n : undefined;\n\n const initialAuthLinkingPrompt: AuthLinkingPrompt | undefined = (() => {\n if (status !== \"ACCOUNT_LINKING_CONFIRMATION_REQUIRED\") {\n return undefined;\n }\n if (\n idToken == null ||\n email == null ||\n authProvider == null ||\n otpId == null ||\n oauthOrgId == null\n ) {\n console.error(\"Missing required query params for auth linking prompt\");\n return undefined;\n }\n return {\n status,\n idToken,\n email,\n providerName: authProvider,\n otpId,\n orgId: oauthOrgId,\n };\n })();\n\n super({ client, sessionConfig, initialError, initialAuthLinkingPrompt });\n\n const isNewUser = isSignup === \"true\";\n\n this.signerType = \"alchemy-signer\";\n\n if (emailBundle) {\n this.authenticate({\n type: \"email\",\n bundle: emailBundle,\n isNewUser,\n });\n } else if (oauthBundle && oauthOrgId && idToken) {\n this.authenticate({\n type: \"oauthReturn\",\n bundle: oauthBundle,\n orgId: oauthOrgId,\n idToken,\n isNewUser,\n });\n }\n }\n}\n\n/**\n * Overrides `window.history.replaceState` to remove the specified query params from target URLs.\n *\n * @param {string[]} qpToRemove The query params to remove from target URLs.\n */\nfunction installReplaceStateFilter(qpToRemove: string[]) {\n const originalReplaceState = window.history.replaceState;\n\n const processUrl = (src: string | URL | undefined | null) => {\n if (!src) {\n return src;\n }\n\n try {\n const url = new URL(src, document.baseURI);\n const originalSearch = url.search;\n\n qpToRemove.forEach((qp) => url.searchParams.delete(qp));\n if (originalSearch === url.search) return src;\n\n console.log(\"[Alchemy] filtered query params from URL\");\n return url;\n } catch (e) {\n console.log(\"[Alchemy] failed to process URL in state filter\", e);\n return src;\n }\n };\n\n window.history.replaceState = function (...args) {\n const [state, unused, url] = args;\n\n const result = originalReplaceState.apply(this, [\n state,\n unused,\n processUrl(url),\n ]);\n\n return result;\n };\n\n console.log(\"[Alchemy] installed window.history.replaceState interceptor\");\n}\n\n/**\n * Reads and removes the specified query params from the URL.\n *\n * @param {T} keys object whose values are the query parameter keys to read and\n * remove\n * @returns {{ [K in keyof T]: string | undefined }} object with the same keys\n * as the input whose values are the values of the query params.\n */\nfunction getAndRemoveQueryParams<T extends Record<string, string>>(\n keys: T\n): { [K in keyof T]: string | undefined } {\n const url = new URL(window.location.href);\n const result: Record<string, string | undefined> = {};\n let foundQueryParam = false;\n for (const [key, param] of Object.entries(keys)) {\n const value = url.searchParams.get(param) ?? undefined;\n foundQueryParam ||= value != null;\n result[key] = value;\n url.searchParams.delete(param);\n }\n if (foundQueryParam) {\n window.history.replaceState(window.history.state, \"\", url.toString());\n }\n return result as { [K in keyof T]: string | undefined };\n}\n"]}
|
|
@@ -28,9 +28,9 @@ export declare class SolanaSigner {
|
|
|
28
28
|
* @returns {Promise<ByteArray>} The signature of the message
|
|
29
29
|
*/
|
|
30
30
|
signMessage(message: Uint8Array): Promise<ByteArray>;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
createTransaction(instructions: TransactionInstruction[], connection: Connection, version?: "versioned"): Promise<VersionedTransaction>;
|
|
32
|
+
createTransaction(instructions: TransactionInstruction[], connection: Connection, version?: "legacy"): Promise<Transaction>;
|
|
33
|
+
createTransaction(instructions: TransactionInstruction[], connection: Connection): Promise<VersionedTransaction>;
|
|
34
34
|
/**
|
|
35
35
|
* Adds sponsorship to a transaction. Used to have a party like Alchemy pay for the transaction.
|
|
36
36
|
*
|
package/dist/esm/solanaSigner.js
CHANGED
|
@@ -76,7 +76,7 @@ export class SolanaSigner {
|
|
|
76
76
|
* @param {"versioned" | "legacy"} [version] - The version of the transaction
|
|
77
77
|
* @returns {Promise<Transaction | VersionedTransaction>} The transfer transaction
|
|
78
78
|
*/
|
|
79
|
-
async
|
|
79
|
+
async createTransaction(instructions, connection, version) {
|
|
80
80
|
const blockhash = (await connection.getLatestBlockhash()).blockhash;
|
|
81
81
|
let transferTransaction;
|
|
82
82
|
if (version === "legacy") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solanaSigner.js","sourceRoot":"","sources":["../../src/solanaSigner.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Connection,\n PublicKey,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { size, slice, toBytes, toHex, type ByteArray, type Hex } from \"viem\";\nimport type { BaseSignerClient } from \"./client/base\";\nimport { NotAuthenticatedError } from \"./errors.js\";\n\n/**\n * The SolanaSigner class is used to sign transactions and messages for the Solana blockchain.\n * It provides methods to add signatures to transactions and sign messages.\n */\nexport class SolanaSigner {\n readonly alchemyClient: BaseSignerClient;\n public readonly address: string;\n\n /**\n * Constructor for the SolanaSigner class which is a wrapper around the alchemy client, and is more focused on the solana web3\n *\n * @param {object} client This is the client that will be used to sign the transaction, and we are just having functions on top of it.\n */\n constructor(client: BaseSignerClient) {\n this.alchemyClient = client;\n if (!client.getUser()) throw new Error(\"Must be authenticated!\");\n\n // TODO: also throw here\n this.address = client.getUser()!.solanaAddress!;\n }\n\n /**\n * Adds a signature of the client user to a transaction\n *\n * @param {Transaction | VersionedTransaction} transaction - The transaction to add the signature to\n * @returns {Promise<Transaction | VersionedTransaction >} The transaction with the signature added\n */\n async addSignature(\n transaction: Transaction | VersionedTransaction\n ): Promise<Transaction | VersionedTransaction> {\n const user = this.alchemyClient.getUser();\n if (!user) {\n throw new NotAuthenticatedError();\n }\n\n if (!user.solanaAddress) {\n throw new Error(\"no solana address\");\n }\n\n const fromKey = new PublicKey(user.solanaAddress);\n const messageToSign = this.getMessageToSign(transaction);\n const signature = await this.alchemyClient.signRawMessage(\n messageToSign,\n \"SOLANA\"\n );\n\n transaction.addSignature(\n fromKey,\n Buffer.from(toBytes(this.formatSignatureForSolana(signature)))\n );\n return transaction;\n }\n\n /**\n * Signs a message\n *\n * @param {Uint8Array} message - The message to sign\n * @returns {Promise<ByteArray>} The signature of the message\n */\n async signMessage(message: Uint8Array): Promise<ByteArray> {\n const user = this.alchemyClient.getUser();\n if (!user) {\n throw new NotAuthenticatedError();\n }\n\n if (!user.solanaAddress) {\n throw new Error(\"no solana address\");\n }\n\n const messageToSign = toHex(message);\n const signature = await this.alchemyClient.signRawMessage(\n messageToSign,\n \"SOLANA\"\n );\n\n return toBytes(this.formatSignatureForSolana(signature));\n }\n\n async createTransfer(\n instructions: TransactionInstruction[],\n connection: Connection,\n version?: \"versioned\"\n ): Promise<VersionedTransaction>;\n async createTransfer(\n instructions: TransactionInstruction[],\n connection: Connection,\n version?: \"legacy\"\n ): Promise<Transaction>;\n async createTransfer(\n instructions: TransactionInstruction[],\n connection: Connection\n ): Promise<VersionedTransaction>;\n\n /**\n * Creates a transfer transaction. Used for the SolanaCard example.\n *\n * @param {TransactionInstruction[]} instructions - The instructions to add to the transaction\n * @param {Connection} connection - The connection to use for the transaction\n * @param {\"versioned\" | \"legacy\"} [version] - The version of the transaction\n * @returns {Promise<Transaction | VersionedTransaction>} The transfer transaction\n */\n async createTransfer(\n instructions: TransactionInstruction[],\n connection: Connection,\n version?: string\n ): Promise<Transaction | VersionedTransaction> {\n const blockhash = (await connection.getLatestBlockhash()).blockhash;\n\n let transferTransaction;\n\n if (version === \"legacy\") {\n // Legacy transaction\n transferTransaction = instructions.reduce(\n (tx, instruction) => tx.add(instruction),\n new Transaction()\n );\n\n // Get a recent block hash\n transferTransaction.recentBlockhash = blockhash;\n // Set the signer\n transferTransaction.feePayer = new PublicKey(this.address);\n } else {\n // VersionedTransaction\n const txMessage = new TransactionMessage({\n payerKey: new PublicKey(this.address),\n recentBlockhash: blockhash,\n instructions,\n });\n\n const versionedTxMessage = txMessage.compileToV0Message();\n transferTransaction = new VersionedTransaction(versionedTxMessage);\n }\n\n return transferTransaction;\n }\n\n /**\n * Adds sponsorship to a transaction. Used to have a party like Alchemy pay for the transaction.\n *\n * @param {TransactionInstruction[]} instructions - The instructions to add to the transaction\n * @param {Connection} connection - The connection to use for the transaction\n * @param {string} [policyId] - The policy ID to add sponsorship to\n * @returns {Promise<VersionedTransaction>} The transaction with sponsorship added\n */\n async addSponsorship(\n instructions: TransactionInstruction[],\n connection: Connection,\n policyId: string\n ): Promise<VersionedTransaction> {\n const { blockhash } = await connection.getLatestBlockhash({\n commitment: \"finalized\",\n });\n const message = new TransactionMessage({\n // Right now the backend will rewrite this payer Key to the server's address\n payerKey: new PublicKey(this.address),\n recentBlockhash: blockhash,\n instructions,\n }).compileToV0Message();\n const versionedTransaction = new VersionedTransaction(message);\n const serializedTransaction = Buffer.from(\n versionedTransaction.serialize()\n ).toString(\"base64\");\n const body = JSON.stringify({\n id: crypto?.randomUUID() ?? Math.floor(Math.random() * 1000000),\n jsonrpc: \"2.0\",\n method: \"alchemy_requestFeePayer\",\n params: [\n {\n policyId,\n serializedTransaction,\n },\n ],\n });\n const options = {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body,\n };\n\n const response = await fetch(\n // TODO: Use the connection??\n connection.rpcEndpoint,\n options\n );\n const jsonResponse = await response.json();\n if (!jsonResponse?.result?.serializedTransaction)\n throw new Error(\n `Response doesn't include the serializedTransaction ${JSON.stringify(\n jsonResponse\n )}`\n );\n return VersionedTransaction.deserialize(\n decodeBase64(jsonResponse.result.serializedTransaction)\n );\n }\n\n private formatSignatureForSolana(signature: Hex): Hex {\n if (size(signature) === 64) return signature;\n\n return slice(signature, 0, 64);\n }\n\n private getMessageToSign(tx: Transaction | VersionedTransaction): Hex {\n let messageToSign;\n if (tx instanceof Transaction) {\n messageToSign = tx.serializeMessage();\n } else {\n messageToSign = Buffer.from(tx.message.serialize());\n }\n return toHex(messageToSign);\n }\n}\nfunction decodeBase64(serializedTransaction: string): Uint8Array {\n return Buffer.from(serializedTransaction, \"base64\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"solanaSigner.js","sourceRoot":"","sources":["../../src/solanaSigner.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Connection,\n PublicKey,\n Transaction,\n TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { size, slice, toBytes, toHex, type ByteArray, type Hex } from \"viem\";\nimport type { BaseSignerClient } from \"./client/base\";\nimport { NotAuthenticatedError } from \"./errors.js\";\n\n/**\n * The SolanaSigner class is used to sign transactions and messages for the Solana blockchain.\n * It provides methods to add signatures to transactions and sign messages.\n */\nexport class SolanaSigner {\n readonly alchemyClient: BaseSignerClient;\n public readonly address: string;\n\n /**\n * Constructor for the SolanaSigner class which is a wrapper around the alchemy client, and is more focused on the solana web3\n *\n * @param {object} client This is the client that will be used to sign the transaction, and we are just having functions on top of it.\n */\n constructor(client: BaseSignerClient) {\n this.alchemyClient = client;\n if (!client.getUser()) throw new Error(\"Must be authenticated!\");\n\n // TODO: also throw here\n this.address = client.getUser()!.solanaAddress!;\n }\n\n /**\n * Adds a signature of the client user to a transaction\n *\n * @param {Transaction | VersionedTransaction} transaction - The transaction to add the signature to\n * @returns {Promise<Transaction | VersionedTransaction >} The transaction with the signature added\n */\n async addSignature(\n transaction: Transaction | VersionedTransaction\n ): Promise<Transaction | VersionedTransaction> {\n const user = this.alchemyClient.getUser();\n if (!user) {\n throw new NotAuthenticatedError();\n }\n\n if (!user.solanaAddress) {\n throw new Error(\"no solana address\");\n }\n\n const fromKey = new PublicKey(user.solanaAddress);\n const messageToSign = this.getMessageToSign(transaction);\n const signature = await this.alchemyClient.signRawMessage(\n messageToSign,\n \"SOLANA\"\n );\n\n transaction.addSignature(\n fromKey,\n Buffer.from(toBytes(this.formatSignatureForSolana(signature)))\n );\n return transaction;\n }\n\n /**\n * Signs a message\n *\n * @param {Uint8Array} message - The message to sign\n * @returns {Promise<ByteArray>} The signature of the message\n */\n async signMessage(message: Uint8Array): Promise<ByteArray> {\n const user = this.alchemyClient.getUser();\n if (!user) {\n throw new NotAuthenticatedError();\n }\n\n if (!user.solanaAddress) {\n throw new Error(\"no solana address\");\n }\n\n const messageToSign = toHex(message);\n const signature = await this.alchemyClient.signRawMessage(\n messageToSign,\n \"SOLANA\"\n );\n\n return toBytes(this.formatSignatureForSolana(signature));\n }\n\n async createTransaction(\n instructions: TransactionInstruction[],\n connection: Connection,\n version?: \"versioned\"\n ): Promise<VersionedTransaction>;\n async createTransaction(\n instructions: TransactionInstruction[],\n connection: Connection,\n version?: \"legacy\"\n ): Promise<Transaction>;\n async createTransaction(\n instructions: TransactionInstruction[],\n connection: Connection\n ): Promise<VersionedTransaction>;\n\n /**\n * Creates a transfer transaction. Used for the SolanaCard example.\n *\n * @param {TransactionInstruction[]} instructions - The instructions to add to the transaction\n * @param {Connection} connection - The connection to use for the transaction\n * @param {\"versioned\" | \"legacy\"} [version] - The version of the transaction\n * @returns {Promise<Transaction | VersionedTransaction>} The transfer transaction\n */\n async createTransaction(\n instructions: TransactionInstruction[],\n connection: Connection,\n version?: string\n ): Promise<Transaction | VersionedTransaction> {\n const blockhash = (await connection.getLatestBlockhash()).blockhash;\n\n let transferTransaction;\n\n if (version === \"legacy\") {\n // Legacy transaction\n transferTransaction = instructions.reduce(\n (tx, instruction) => tx.add(instruction),\n new Transaction()\n );\n\n // Get a recent block hash\n transferTransaction.recentBlockhash = blockhash;\n // Set the signer\n transferTransaction.feePayer = new PublicKey(this.address);\n } else {\n // VersionedTransaction\n const txMessage = new TransactionMessage({\n payerKey: new PublicKey(this.address),\n recentBlockhash: blockhash,\n instructions,\n });\n\n const versionedTxMessage = txMessage.compileToV0Message();\n transferTransaction = new VersionedTransaction(versionedTxMessage);\n }\n\n return transferTransaction;\n }\n\n /**\n * Adds sponsorship to a transaction. Used to have a party like Alchemy pay for the transaction.\n *\n * @param {TransactionInstruction[]} instructions - The instructions to add to the transaction\n * @param {Connection} connection - The connection to use for the transaction\n * @param {string} [policyId] - The policy ID to add sponsorship to\n * @returns {Promise<VersionedTransaction>} The transaction with sponsorship added\n */\n async addSponsorship(\n instructions: TransactionInstruction[],\n connection: Connection,\n policyId: string\n ): Promise<VersionedTransaction> {\n const { blockhash } = await connection.getLatestBlockhash({\n commitment: \"finalized\",\n });\n const message = new TransactionMessage({\n // Right now the backend will rewrite this payer Key to the server's address\n payerKey: new PublicKey(this.address),\n recentBlockhash: blockhash,\n instructions,\n }).compileToV0Message();\n const versionedTransaction = new VersionedTransaction(message);\n const serializedTransaction = Buffer.from(\n versionedTransaction.serialize()\n ).toString(\"base64\");\n const body = JSON.stringify({\n id: crypto?.randomUUID() ?? Math.floor(Math.random() * 1000000),\n jsonrpc: \"2.0\",\n method: \"alchemy_requestFeePayer\",\n params: [\n {\n policyId,\n serializedTransaction,\n },\n ],\n });\n const options = {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body,\n };\n\n const response = await fetch(\n // TODO: Use the connection??\n connection.rpcEndpoint,\n options\n );\n const jsonResponse = await response.json();\n if (!jsonResponse?.result?.serializedTransaction)\n throw new Error(\n `Response doesn't include the serializedTransaction ${JSON.stringify(\n jsonResponse\n )}`\n );\n return VersionedTransaction.deserialize(\n decodeBase64(jsonResponse.result.serializedTransaction)\n );\n }\n\n private formatSignatureForSolana(signature: Hex): Hex {\n if (size(signature) === 64) return signature;\n\n return slice(signature, 0, 64);\n }\n\n private getMessageToSign(tx: Transaction | VersionedTransaction): Hex {\n let messageToSign;\n if (tx instanceof Transaction) {\n messageToSign = tx.serializeMessage();\n } else {\n messageToSign = Buffer.from(tx.message.serialize());\n }\n return toHex(messageToSign);\n }\n}\nfunction decodeBase64(serializedTransaction: string): Uint8Array {\n return Buffer.from(serializedTransaction, \"base64\");\n}\n"]}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export type AlchemySignerEvents = {
|
|
|
10
10
|
mfaFactorId?: string;
|
|
11
11
|
encryptedPayload?: string;
|
|
12
12
|
}): void;
|
|
13
|
+
emailAuthLinkingRequired(email: string): void;
|
|
13
14
|
};
|
|
14
15
|
export type AlchemySignerEvent = keyof AlchemySignerEvents;
|
|
15
16
|
export declare enum AlchemySignerStatus {
|
package/dist/esm/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAN,IAAY,mBAUX;AAVD,WAAY,mBAAmB;IAC7B,oDAA6B,CAAA;IAC7B,8CAAuB,CAAA;IACvB,oDAA6B,CAAA;IAC7B,wEAAiD,CAAA;IACjD,oEAA6C,CAAA;IAC7C,oEAA6C,CAAA;IAC7C,kEAA2C,CAAA;IAC3C,8DAAuC,CAAA;IACvC,8DAAuC,CAAA;AACzC,CAAC,EAVW,mBAAmB,KAAnB,mBAAmB,QAU9B;AAED,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,iDAA6B,CAAA;IAC7B,yCAAqB,CAAA;AACvB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B","sourcesContent":["import type { User } from \"./client/types\";\n\nexport type AlchemySignerEvents = {\n connected(user: User): void;\n newUserSignup(): void;\n disconnected(): void;\n statusChanged(status: AlchemySignerStatus): void;\n errorChanged(error: ErrorInfo | undefined): void;\n mfaStatusChanged(mfaStatus: {\n mfaRequired: boolean;\n mfaFactorId?: string;\n encryptedPayload?: string;\n }): void;\n emailAuthLinkingRequired(email: string): void;\n};\n\nexport type AlchemySignerEvent = keyof AlchemySignerEvents;\n\nexport enum AlchemySignerStatus {\n INITIALIZING = \"INITIALIZING\",\n CONNECTED = \"CONNECTED\",\n DISCONNECTED = \"DISCONNECTED\",\n AUTHENTICATING_PASSKEY = \"AUTHENTICATING_PASSKEY\",\n AUTHENTICATING_EMAIL = \"AUTHENTICATING_EMAIL\",\n AUTHENTICATING_OAUTH = \"AUTHENTICATING_OAUTH\",\n AWAITING_EMAIL_AUTH = \"AWAITING_EMAIL_AUTH\",\n AWAITING_OTP_AUTH = \"AWAITING_OTP_AUTH\",\n AWAITING_MFA_AUTH = \"AWAITING_MFA_AUTH\",\n}\n\nexport enum AlchemyMfaStatus {\n NOT_REQUIRED = \"not_required\",\n REQUIRED = \"required\",\n}\n\nexport interface ErrorInfo {\n name: string;\n message: string;\n}\n\nexport type ValidateMultiFactorsArgs = {\n multiFactorId?: string;\n multiFactorCode: string;\n};\n"]}
|
package/dist/esm/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "4.
|
|
1
|
+
export declare const VERSION = "4.32.0";
|
package/dist/esm/version.js
CHANGED
package/dist/esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yBAAyB;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// This file is autogenerated by inject-version.ts. Any changes will be\n// overwritten on commit!\nexport const VERSION = \"4.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yBAAyB;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC","sourcesContent":["// This file is autogenerated by inject-version.ts. Any changes will be\n// overwritten on commit!\nexport const VERSION = \"4.32.0\";\n"]}
|
package/dist/types/base.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { type SmartAccountAuthenticator } from "@aa-sdk/core";
|
|
|
2
2
|
import { type GetTransactionType, type Hex, type IsNarrowable, type LocalAccount, type SerializeTransactionFn, type SignableMessage, type TransactionSerializable, type TransactionSerialized, type TypedData, type TypedDataDefinition } from "viem";
|
|
3
3
|
import { type Authorization } from "viem/experimental";
|
|
4
4
|
import type { BaseSignerClient } from "./client/base";
|
|
5
|
-
import type
|
|
5
|
+
import { type MfaFactor, type OauthConfig, type User, type VerifyMfaParams, type AddMfaParams, type AddMfaResult, type RemoveMfaParams, type AuthLinkingPrompt } from "./client/types.js";
|
|
6
6
|
import { type SessionManagerParams } from "./session/manager.js";
|
|
7
7
|
import type { AuthParams } from "./signer";
|
|
8
8
|
import { SolanaSigner } from "./solanaSigner.js";
|
|
@@ -11,6 +11,7 @@ export interface BaseAlchemySignerParams<TClient extends BaseSignerClient> {
|
|
|
11
11
|
client: TClient;
|
|
12
12
|
sessionConfig?: Omit<SessionManagerParams, "client">;
|
|
13
13
|
initialError?: ErrorInfo;
|
|
14
|
+
initialAuthLinkingPrompt?: AuthLinkingPrompt;
|
|
14
15
|
}
|
|
15
16
|
export type EmailConfig = {
|
|
16
17
|
mode?: "MAGIC_LINK" | "OTP";
|
|
@@ -38,7 +39,7 @@ export declare abstract class BaseAlchemySigner<TClient extends BaseSignerClient
|
|
|
38
39
|
* @param {SessionConfig} param0.sessionConfig Configuration for managing sessions
|
|
39
40
|
* @param {ErrorInfo | undefined} param0.initialError Error already present on the signer when initialized, if any
|
|
40
41
|
*/
|
|
41
|
-
constructor({ client, sessionConfig, initialError, }: BaseAlchemySignerParams<TClient>);
|
|
42
|
+
constructor({ client, sessionConfig, initialError, initialAuthLinkingPrompt, }: BaseAlchemySignerParams<TClient>);
|
|
42
43
|
/**
|
|
43
44
|
* Allows you to subscribe to events emitted by the signer
|
|
44
45
|
*
|
|
@@ -450,6 +451,7 @@ export declare abstract class BaseAlchemySigner<TClient extends BaseSignerClient
|
|
|
450
451
|
private authenticateWithPasskey;
|
|
451
452
|
private authenticateWithOauth;
|
|
452
453
|
private authenticateWithOtp;
|
|
454
|
+
private setAwaitingEmailAuth;
|
|
453
455
|
private handleOauthReturn;
|
|
454
456
|
private handleMfaRequired;
|
|
455
457
|
private getExpirationSeconds;
|
|
@@ -613,5 +615,7 @@ export declare abstract class BaseAlchemySigner<TClient extends BaseSignerClient
|
|
|
613
615
|
*/
|
|
614
616
|
getConfig: () => Promise<SignerConfig>;
|
|
615
617
|
protected fetchConfig: () => Promise<SignerConfig>;
|
|
618
|
+
private setAuthLinkingPrompt;
|
|
619
|
+
private waitForConnected;
|
|
616
620
|
}
|
|
617
621
|
//# sourceMappingURL=base.d.ts.map
|
package/dist/types/base.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,SAAS,EACd,KAAK,mBAAmB,EACzB,MAAM,MAAM,CAAC;AAEd,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAI1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/base.ts"],"names":[],"mappings":"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"}
|