@account-kit/signer 4.16.0 → 4.16.1-alpha.3
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 +32 -0
- package/dist/esm/base.js +122 -54
- package/dist/esm/base.js.map +1 -1
- package/dist/esm/client/base.d.ts +36 -2
- package/dist/esm/client/base.js.map +1 -1
- package/dist/esm/client/index.d.ts +40 -1
- package/dist/esm/client/index.js +164 -7
- package/dist/esm/client/index.js.map +1 -1
- package/dist/esm/client/types.d.ts +68 -1
- package/dist/esm/client/types.js.map +1 -1
- package/dist/esm/errors.d.ts +6 -0
- package/dist/esm/errors.js +18 -0
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/session/manager.d.ts +1 -0
- package/dist/esm/session/manager.js.map +1 -1
- package/dist/esm/signer.d.ts +3 -1
- package/dist/esm/signer.js.map +1 -1
- package/dist/esm/types.d.ts +8 -0
- package/dist/esm/types.js +5 -0
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/parseMfaError.d.ts +2 -0
- package/dist/esm/utils/parseMfaError.js +15 -0
- package/dist/esm/utils/parseMfaError.js.map +1 -0
- 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 +32 -0
- package/dist/types/base.d.ts.map +1 -1
- package/dist/types/client/base.d.ts +36 -2
- package/dist/types/client/base.d.ts.map +1 -1
- package/dist/types/client/index.d.ts +40 -1
- package/dist/types/client/index.d.ts.map +1 -1
- package/dist/types/client/types.d.ts +68 -1
- package/dist/types/client/types.d.ts.map +1 -1
- package/dist/types/errors.d.ts +6 -0
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/session/manager.d.ts +1 -0
- package/dist/types/session/manager.d.ts.map +1 -1
- package/dist/types/signer.d.ts +3 -1
- package/dist/types/signer.d.ts.map +1 -1
- package/dist/types/types.d.ts +8 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/parseMfaError.d.ts +3 -0
- package/dist/types/utils/parseMfaError.d.ts.map +1 -0
- package/dist/types/version.d.ts +1 -1
- package/dist/types/version.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/base.ts +171 -60
- package/src/client/base.ts +43 -1
- package/src/client/index.ts +174 -7
- package/src/client/types.ts +78 -1
- package/src/errors.ts +11 -1
- package/src/index.ts +5 -1
- package/src/session/manager.ts +5 -1
- package/src/signer.ts +6 -1
- package/src/types.ts +9 -0
- package/src/utils/parseMfaError.ts +15 -0
- package/src/version.ts +1 -1
|
@@ -41,6 +41,7 @@ export type EmailAuthParams = {
|
|
|
41
41
|
expirationSeconds?: number;
|
|
42
42
|
targetPublicKey: string;
|
|
43
43
|
redirectParams?: URLSearchParams;
|
|
44
|
+
multiFactors?: VerifyMfaParams[];
|
|
44
45
|
};
|
|
45
46
|
export type OauthParams = Extract<AuthParams, {
|
|
46
47
|
type: "oauth";
|
|
@@ -53,6 +54,7 @@ export type OtpParams = {
|
|
|
53
54
|
otpCode: string;
|
|
54
55
|
targetPublicKey: string;
|
|
55
56
|
expirationSeconds?: number;
|
|
57
|
+
multiFactors?: VerifyMfaParams[];
|
|
56
58
|
};
|
|
57
59
|
export type SignupResponse = {
|
|
58
60
|
orgId: string;
|
|
@@ -102,10 +104,12 @@ export type SignerEndpoints = [
|
|
|
102
104
|
Route: "/v1/auth";
|
|
103
105
|
Body: Omit<EmailAuthParams, "redirectParams"> & {
|
|
104
106
|
redirectParams?: string;
|
|
107
|
+
multiFactors?: VerifyMfaParams[];
|
|
105
108
|
};
|
|
106
109
|
Response: {
|
|
107
110
|
orgId: string;
|
|
108
111
|
otpId?: string;
|
|
112
|
+
multiFactors?: MfaFactor[];
|
|
109
113
|
};
|
|
110
114
|
},
|
|
111
115
|
{
|
|
@@ -137,7 +141,43 @@ export type SignerEndpoints = [
|
|
|
137
141
|
Route: "/v1/otp";
|
|
138
142
|
Body: OtpParams;
|
|
139
143
|
Response: {
|
|
140
|
-
credentialBundle: string;
|
|
144
|
+
credentialBundle: string | null;
|
|
145
|
+
};
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
Route: "/v1/auth-list-multi-factors";
|
|
149
|
+
Body: {
|
|
150
|
+
stampedRequest: TSignedRequest;
|
|
151
|
+
};
|
|
152
|
+
Response: {
|
|
153
|
+
multiFactors: MfaFactor[];
|
|
154
|
+
};
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
Route: "/v1/auth-delete-multi-factors";
|
|
158
|
+
Body: {
|
|
159
|
+
stampedRequest: TSignedRequest;
|
|
160
|
+
multiFactorIds: string[];
|
|
161
|
+
};
|
|
162
|
+
Response: {
|
|
163
|
+
multiFactors: MfaFactor[];
|
|
164
|
+
};
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
Route: "/v1/auth-request-multi-factor";
|
|
168
|
+
Body: {
|
|
169
|
+
stampedRequest: TSignedRequest;
|
|
170
|
+
multiFactorType: MultiFactorType;
|
|
171
|
+
};
|
|
172
|
+
Response: EnableMfaResult;
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
Route: "/v1/auth-verify-multi-factor";
|
|
176
|
+
Body: VerifyMfaParams & {
|
|
177
|
+
stampedRequest: TSignedRequest;
|
|
178
|
+
};
|
|
179
|
+
Response: {
|
|
180
|
+
multiFactors: MfaFactor[];
|
|
141
181
|
};
|
|
142
182
|
}
|
|
143
183
|
];
|
|
@@ -176,3 +216,30 @@ export type GetOauthProviderUrlArgs = {
|
|
|
176
216
|
oauthConfig?: OauthConfig;
|
|
177
217
|
usesRelativeUrl?: boolean;
|
|
178
218
|
};
|
|
219
|
+
export type MfaFactor = {
|
|
220
|
+
multiFactorId: string;
|
|
221
|
+
multiFactorType: string;
|
|
222
|
+
};
|
|
223
|
+
type MultiFactorType = "totp";
|
|
224
|
+
export type EnableMfaParams = {
|
|
225
|
+
multiFactorType: MultiFactorType;
|
|
226
|
+
};
|
|
227
|
+
export type EnableMfaResult = {
|
|
228
|
+
multiFactorType: MultiFactorType;
|
|
229
|
+
multiFactorId: string;
|
|
230
|
+
multiFactorTotpUrl: string;
|
|
231
|
+
};
|
|
232
|
+
export type VerifyMfaParams = {
|
|
233
|
+
multiFactorId: string;
|
|
234
|
+
multiFactorCode: string;
|
|
235
|
+
};
|
|
236
|
+
export type RemoveMfaParams = {
|
|
237
|
+
multiFactorIds: string[];
|
|
238
|
+
};
|
|
239
|
+
export type MfaChallenge = {
|
|
240
|
+
multiFactorId: string;
|
|
241
|
+
multiFactorChallenge: {
|
|
242
|
+
code: string;
|
|
243
|
+
} | Record<string, any>;
|
|
244
|
+
};
|
|
245
|
+
export {};
|
|
@@ -1 +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\";\nimport type { AuthParams } from \"../signer\";\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 solanaAddress?: string;\n credentialId?: string;\n idToken?: string;\n claims?: Record<string, unknown>;\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 emailMode?: EmailType;\n expirationSeconds?: number;\n redirectParams?: URLSearchParams;\n }\n | {\n type: \"passkey\";\n email: string;\n creationOpts?: CredentialCreationOptionOverrides;\n }\n | {\n type: \"passkey\";\n username: string;\n creationOpts?: CredentialCreationOptionOverrides;\n };\n\nexport type EmailType = \"magicLink\" | \"otp\";\n\nexport type EmailAuthParams = {\n email: string;\n emailMode?: EmailType;\n expirationSeconds?: number;\n targetPublicKey: string;\n redirectParams?: URLSearchParams;\n};\n\nexport type OauthParams = Extract<AuthParams, { type: \"oauth\" }> & {\n expirationSeconds?: number;\n};\n\nexport type OtpParams = {\n orgId: string;\n otpId: string;\n otpCode: string;\n targetPublicKey: string;\n expirationSeconds?: number;\n};\n\nexport type SignupResponse = {\n orgId: string;\n userId?: string;\n address?: Address;\n otpId?: string;\n};\n\nexport type OauthConfig = {\n codeChallenge: string;\n requestKey: string;\n authProviders: AuthProviderConfig[];\n};\n\nexport type AuthProviderConfig = {\n id: string;\n isCustomProvider?: boolean;\n clientId: string;\n authEndpoint: string;\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\"> & {\n redirectParams?: string;\n })\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\"> & {\n redirectParams?: string;\n };\n Response: {\n orgId: string;\n otpId?: 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 Route: \"/v1/prepare-oauth\";\n Body: {\n nonce: string;\n };\n Response: OauthConfig;\n },\n {\n Route: \"/v1/otp\";\n Body: OtpParams;\n Response: {
|
|
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\";\nimport type { AuthParams } from \"../signer\";\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 solanaAddress?: string;\n credentialId?: string;\n idToken?: string;\n claims?: Record<string, unknown>;\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 emailMode?: EmailType;\n expirationSeconds?: number;\n redirectParams?: URLSearchParams;\n }\n | {\n type: \"passkey\";\n email: string;\n creationOpts?: CredentialCreationOptionOverrides;\n }\n | {\n type: \"passkey\";\n username: string;\n creationOpts?: CredentialCreationOptionOverrides;\n };\n\nexport type EmailType = \"magicLink\" | \"otp\";\n\nexport type EmailAuthParams = {\n email: string;\n emailMode?: EmailType;\n expirationSeconds?: number;\n targetPublicKey: string;\n redirectParams?: URLSearchParams;\n multiFactors?: VerifyMfaParams[];\n};\n\nexport type OauthParams = Extract<AuthParams, { type: \"oauth\" }> & {\n expirationSeconds?: number;\n};\n\nexport type OtpParams = {\n orgId: string;\n otpId: string;\n otpCode: string;\n targetPublicKey: string;\n expirationSeconds?: number;\n multiFactors?: VerifyMfaParams[];\n};\n\nexport type SignupResponse = {\n orgId: string;\n userId?: string;\n address?: Address;\n otpId?: string;\n};\n\nexport type OauthConfig = {\n codeChallenge: string;\n requestKey: string;\n authProviders: AuthProviderConfig[];\n};\n\nexport type AuthProviderConfig = {\n id: string;\n isCustomProvider?: boolean;\n clientId: string;\n authEndpoint: string;\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\"> & {\n redirectParams?: string;\n })\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\"> & {\n redirectParams?: string;\n multiFactors?: VerifyMfaParams[];\n };\n Response: {\n orgId: string;\n otpId?: string;\n multiFactors?: MfaFactor[];\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 Route: \"/v1/prepare-oauth\";\n Body: {\n nonce: string;\n };\n Response: OauthConfig;\n },\n {\n Route: \"/v1/otp\";\n Body: OtpParams;\n Response: {\n credentialBundle: string | null;\n };\n },\n {\n Route: \"/v1/auth-list-multi-factors\";\n Body: {\n stampedRequest: TSignedRequest;\n };\n Response: {\n multiFactors: MfaFactor[];\n };\n },\n {\n Route: \"/v1/auth-delete-multi-factors\";\n Body: {\n stampedRequest: TSignedRequest;\n multiFactorIds: string[];\n };\n Response: {\n multiFactors: MfaFactor[];\n };\n },\n {\n Route: \"/v1/auth-request-multi-factor\";\n Body: {\n stampedRequest: TSignedRequest;\n multiFactorType: MultiFactorType;\n };\n Response: EnableMfaResult;\n },\n {\n Route: \"/v1/auth-verify-multi-factor\";\n Body: VerifyMfaParams & {\n stampedRequest: TSignedRequest;\n };\n Response: {\n multiFactors: MfaFactor[];\n };\n }\n];\n\nexport type AuthenticatingEventMetadata = {\n type: \"email\" | \"passkey\" | \"oauth\" | \"otp\" | \"otpVerify\";\n};\n\nexport type AlchemySignerClientEvents = {\n connected(user: User): void;\n newUserSignup(): void;\n authenticating(data: AuthenticatingEventMetadata): void;\n connectedEmail(user: User, bundle: string): void;\n connectedPasskey(user: User): void;\n connectedOauth(user: User, bundle: string): void;\n connectedOtp(user: User, bundle: string): 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\nexport type OauthState = {\n authProviderId: string;\n isCustomProvider?: boolean;\n requestKey: string;\n turnkeyPublicKey: string;\n expirationSeconds?: number;\n redirectUrl?: string;\n openerOrigin?: string;\n};\n\nexport type GetOauthProviderUrlArgs = {\n oauthParams: OauthParams;\n turnkeyPublicKey: string;\n oauthCallbackUrl: string;\n oauthConfig?: OauthConfig;\n usesRelativeUrl?: boolean;\n};\n\nexport type MfaFactor = {\n multiFactorId: string;\n multiFactorType: string;\n};\n\ntype MultiFactorType = \"totp\";\n\nexport type EnableMfaParams = {\n multiFactorType: MultiFactorType;\n};\n\nexport type EnableMfaResult = {\n multiFactorType: MultiFactorType;\n multiFactorId: string;\n multiFactorTotpUrl: string;\n};\n\nexport type VerifyMfaParams = {\n multiFactorId: string;\n multiFactorCode: string;\n};\n\nexport type RemoveMfaParams = {\n multiFactorIds: string[];\n};\n\nexport type MfaChallenge = {\n multiFactorId: string;\n multiFactorChallenge:\n | {\n code: string;\n }\n | Record<string, any>;\n};\n"]}
|
package/dist/esm/errors.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BaseError } from "@aa-sdk/core";
|
|
2
|
+
import type { MfaFactor } from "./client/types";
|
|
2
3
|
export declare class NotAuthenticatedError extends BaseError {
|
|
3
4
|
name: string;
|
|
4
5
|
constructor();
|
|
@@ -7,3 +8,8 @@ export declare class OAuthProvidersError extends BaseError {
|
|
|
7
8
|
name: string;
|
|
8
9
|
constructor();
|
|
9
10
|
}
|
|
11
|
+
export declare class MfaRequiredError extends BaseError {
|
|
12
|
+
name: string;
|
|
13
|
+
multiFactors: MfaFactor[];
|
|
14
|
+
constructor(multiFactors: MfaFactor[]);
|
|
15
|
+
}
|
package/dist/esm/errors.js
CHANGED
|
@@ -28,4 +28,22 @@ export class OAuthProvidersError extends BaseError {
|
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
+
export class MfaRequiredError extends BaseError {
|
|
32
|
+
constructor(multiFactors) {
|
|
33
|
+
super("MFA is required for this user");
|
|
34
|
+
Object.defineProperty(this, "name", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
configurable: true,
|
|
37
|
+
writable: true,
|
|
38
|
+
value: "MfaRequiredError"
|
|
39
|
+
});
|
|
40
|
+
Object.defineProperty(this, "multiFactors", {
|
|
41
|
+
enumerable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
writable: true,
|
|
44
|
+
value: void 0
|
|
45
|
+
});
|
|
46
|
+
this.multiFactors = multiFactors;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
31
49
|
//# sourceMappingURL=errors.js.map
|
package/dist/esm/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,OAAO,qBAAsB,SAAQ,SAAS;IAElD;QACE,KAAK,CACH;YACE,0BAA0B;YAC1B,wCAAwC;SACzC,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ;YACE,QAAQ,EAAE,2CAA2C;SACtD,CACF,CAAC;QAVK;;;;mBAAO,uBAAuB;WAAC;IAWxC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAEhD;QACE,KAAK,CAAC,2BAA2B,EAAE;YACjC,QAAQ,EAAE,wBAAwB;SACnC,CAAC,CAAC;QAJI;;;;mBAAO,qBAAqB;WAAC;IAKtC,CAAC;CACF","sourcesContent":["import { BaseError } from \"@aa-sdk/core\";\
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,OAAO,qBAAsB,SAAQ,SAAS;IAElD;QACE,KAAK,CACH;YACE,0BAA0B;YAC1B,wCAAwC;SACzC,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ;YACE,QAAQ,EAAE,2CAA2C;SACtD,CACF,CAAC;QAVK;;;;mBAAO,uBAAuB;WAAC;IAWxC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAEhD;QACE,KAAK,CAAC,2BAA2B,EAAE;YACjC,QAAQ,EAAE,wBAAwB;SACnC,CAAC,CAAC;QAJI;;;;mBAAO,qBAAqB;WAAC;IAKtC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAI7C,YAAY,YAAyB;QACnC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAJhC;;;;mBAAO,kBAAkB;WAAC;QAC5B;;;;;WAA0B;QAI/B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF","sourcesContent":["import { BaseError } from \"@aa-sdk/core\";\nimport type { MfaFactor } from \"./client/types\";\nexport class NotAuthenticatedError extends BaseError {\n override name = \"NotAuthenticatedError\";\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\nexport class OAuthProvidersError extends BaseError {\n override name = \"OAuthProvidersError\";\n constructor() {\n super(\"OAuth providers not found\", {\n docsPath: \"/react/getting-started\",\n });\n }\n}\n\nexport class MfaRequiredError extends BaseError {\n override name = \"MfaRequiredError\";\n public multiFactors: MfaFactor[];\n\n constructor(multiFactors: MfaFactor[]) {\n super(\"MFA is required for this user\");\n this.multiFactors = multiFactors;\n }\n}\n"]}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { BaseAlchemySigner } from "./base.js";
|
|
|
2
2
|
export { BaseSignerClient } from "./client/base.js";
|
|
3
3
|
export { AlchemySignerWebClient, OauthCancelledError, OauthFailedError, } from "./client/index.js";
|
|
4
4
|
export type * from "./client/types.js";
|
|
5
|
-
export { NotAuthenticatedError, OAuthProvidersError } from "./errors.js";
|
|
5
|
+
export { NotAuthenticatedError, OAuthProvidersError, MfaRequiredError, } from "./errors.js";
|
|
6
6
|
export { DEFAULT_SESSION_MS, SessionManagerParamsSchema, } from "./session/manager.js";
|
|
7
7
|
export type * from "./signer.js";
|
|
8
8
|
export { AlchemyWebSigner } from "./signer.js";
|
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { BaseAlchemySigner } from "./base.js";
|
|
2
2
|
export { BaseSignerClient } from "./client/base.js";
|
|
3
3
|
export { AlchemySignerWebClient, OauthCancelledError, OauthFailedError, } from "./client/index.js";
|
|
4
|
-
export { NotAuthenticatedError, OAuthProvidersError } from "./errors.js";
|
|
4
|
+
export { NotAuthenticatedError, OAuthProvidersError, MfaRequiredError, } from "./errors.js";
|
|
5
5
|
export { DEFAULT_SESSION_MS, SessionManagerParamsSchema, } from "./session/manager.js";
|
|
6
6
|
export { AlchemyWebSigner } from "./signer.js";
|
|
7
7
|
export { AlchemySignerStatus } from "./types.js";
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC","sourcesContent":["export { BaseAlchemySigner } from \"./base.js\";\nexport { BaseSignerClient } from \"./client/base.js\";\nexport {\n AlchemySignerWebClient,\n OauthCancelledError,\n OauthFailedError,\n} from \"./client/index.js\";\nexport type * from \"./client/types.js\";\nexport {\n NotAuthenticatedError,\n OAuthProvidersError,\n MfaRequiredError,\n} from \"./errors.js\";\nexport {\n DEFAULT_SESSION_MS,\n SessionManagerParamsSchema,\n} from \"./session/manager.js\";\nexport type * from \"./signer.js\";\nexport { AlchemyWebSigner } from \"./signer.js\";\nexport type * from \"./solanaSigner.js\";\nexport type * from \"./types.js\";\nexport { AlchemySignerStatus } from \"./types.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/session/manager.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from \"eventemitter3\";\nimport { z } from \"zod\";\nimport {\n createJSONStorage,\n persist,\n subscribeWithSelector,\n} from \"zustand/middleware\";\nimport { createStore, type Mutate, type StoreApi } from \"zustand/vanilla\";\nimport type { BaseSignerClient } from \"../client/base\";\nimport type {\n AlchemySignerClientEvent,\n AlchemySignerClientEvents,\n User,\n} from \"../client/types\";\nimport { assertNever } from \"../utils/typeAssertions.js\";\nimport type { Session, SessionManagerEvents } from \"./types\";\n\nexport const DEFAULT_SESSION_MS = 15 * 60 * 1000; // 15 minutes\n\nexport const SessionManagerParamsSchema = z.object({\n sessionKey: z.string().default(\"alchemy-signer-session\"),\n storage: z\n .enum([\"localStorage\", \"sessionStorage\"])\n .default(\"localStorage\")\n .or(z.custom<Storage>()),\n expirationTimeMs: z\n .number()\n .default(DEFAULT_SESSION_MS)\n .describe(\n \"The time in milliseconds that a session should last before expiring [default: 15 minutes]\"\n ),\n client: z.custom<BaseSignerClient>(),\n});\n\nexport type SessionManagerParams = z.input<typeof SessionManagerParamsSchema>;\n\ntype SessionState = {\n session: Session | null;\n};\n\ntype Store = Mutate<\n StoreApi<SessionState>,\n [[\"zustand/subscribeWithSelector\", never], [\"zustand/persist\", SessionState]]\n>;\n\ntype TemporarySession = { orgId: string; isNewUser?: boolean };\n\nexport class SessionManager {\n private sessionKey: string;\n private client: BaseSignerClient;\n private eventEmitter: EventEmitter<SessionManagerEvents>;\n readonly expirationTimeMs: number;\n private store: Store;\n private clearSessionHandle: NodeJS.Timeout | null = null;\n\n constructor(params: SessionManagerParams) {\n const {\n sessionKey,\n storage: storageType,\n expirationTimeMs,\n client,\n } = SessionManagerParamsSchema.parse(params);\n this.sessionKey = sessionKey;\n const storage =\n typeof storageType === \"string\"\n ? storageType === \"localStorage\"\n ? localStorage\n : sessionStorage\n : storageType;\n this.expirationTimeMs = expirationTimeMs;\n this.client = client;\n this.eventEmitter = new EventEmitter<SessionManagerEvents>();\n\n this.store = createStore(\n subscribeWithSelector(\n persist(this.getInitialState, {\n name: this.sessionKey,\n storage: createJSONStorage<SessionState>(() => storage),\n })\n )\n );\n\n this.registerEventListeners();\n }\n\n public getSessionUser = async (): Promise<User | null> => {\n const existingSession = this.getSession();\n if (existingSession == null) {\n return null;\n }\n\n switch (existingSession.type) {\n case \"email\":\n case \"oauth\":\n case \"otp\": {\n const connectedEventName = (() => {\n switch (existingSession.type) {\n case \"email\":\n return \"connectedEmail\";\n case \"oauth\":\n return \"connectedOauth\";\n case \"otp\":\n return \"connectedOtp\";\n }\n })();\n const result = await this.client\n .completeAuthWithBundle({\n bundle: existingSession.bundle,\n orgId: existingSession.user.orgId,\n authenticatingType: existingSession.type,\n connectedEventName,\n idToken: existingSession.user.idToken,\n })\n .catch((e) => {\n console.warn(\"Failed to load user from session\", e);\n return null;\n });\n\n if (!result) {\n this.clearSession();\n return null;\n }\n\n return result;\n }\n case \"passkey\": {\n // we don't need to do much here if we already have a user\n // this will setup the client with the user context, but\n // requests still have to be signed by the user on first request\n // so this is fine\n return this.client.lookupUserWithPasskey(existingSession.user);\n }\n default:\n assertNever(\n existingSession,\n `Unknown session type: ${(existingSession as any).type}`\n );\n }\n };\n\n public clearSession = () => {\n this.store.setState({ session: null });\n localStorage.removeItem(`${this.sessionKey}:temporary`);\n\n if (this.clearSessionHandle) {\n clearTimeout(this.clearSessionHandle);\n }\n };\n\n public setTemporarySession = (session: TemporarySession) => {\n // temporary session must be placed in localStorage so that it can be accessed across tabs\n localStorage.setItem(\n `${this.sessionKey}:temporary`,\n JSON.stringify(session)\n );\n };\n\n public getTemporarySession = (): TemporarySession | null => {\n // temporary session must be placed in localStorage so that it can be accessed across tabs\n const sessionStr = localStorage.getItem(`${this.sessionKey}:temporary`);\n\n if (!sessionStr) {\n return null;\n }\n\n return JSON.parse(sessionStr);\n };\n\n on = <E extends keyof SessionManagerEvents>(\n event: E,\n listener: SessionManagerEvents[E]\n ) => {\n this.eventEmitter.on(event, listener as any);\n\n return () => this.eventEmitter.removeListener(event, listener as any);\n };\n\n private getSession = (): Session | null => {\n const session = this.store.getState().session;\n\n if (!session) {\n return null;\n }\n\n /**\n * TODO: this isn't really good enough\n * A user's session could be about to expire and we would still return it\n *\n * Instead we should check if a session is about to expire and refresh it\n * We should revisit this later\n */\n if (session.expirationDateMs < Date.now()) {\n this.client.disconnect();\n this.clearSession();\n return null;\n }\n\n this.registerSessionExpirationHandler(session);\n\n return session;\n };\n\n private setSession = (\n session_:\n | Omit<\n Extract<Session, { type: \"email\" | \"oauth\" | \"otp\" }>,\n \"expirationDateMs\"\n >\n | Omit<Extract<Session, { type: \"passkey\" }>, \"expirationDateMs\">\n ) => {\n const session = {\n ...session_,\n expirationDateMs: Date.now() + this.expirationTimeMs,\n };\n\n this.registerSessionExpirationHandler(session);\n\n this.store.setState({ session });\n };\n\n public initialize() {\n this.getSessionUser()\n .then((user) => {\n // once we complete auth we can update the state of the session to connected or disconnected\n if (user) this.eventEmitter.emit(\"connected\", this.getSession()!);\n else this.eventEmitter.emit(\"disconnected\");\n })\n .finally(() => {\n this.eventEmitter.emit(\"initialized\");\n });\n }\n\n private getInitialState(): SessionState {\n return {\n session: null,\n };\n }\n\n private registerEventListeners = () => {\n this.store.subscribe(\n ({ session }) => session,\n (session, prevSession) => {\n if (session != null && prevSession == null) {\n this.eventEmitter.emit(\"connected\", session);\n } else if (session == null && prevSession != null) {\n this.eventEmitter.emit(\"disconnected\");\n }\n }\n );\n\n // Helper type to ensure that a listener is either defined or explicitly\n // omitted for every event type.\n type Listeners = {\n [K in keyof AlchemySignerClientEvents]:\n | AlchemySignerClientEvents[K]\n | undefined;\n };\n\n const listeners: Listeners = {\n connected: undefined,\n newUserSignup: undefined,\n authenticating: undefined,\n connectedEmail: (user, bundle) =>\n this.setSessionWithUserAndBundle({ type: \"email\", user, bundle }),\n connectedPasskey: (user) => {\n const existingSession = this.getSession();\n if (\n existingSession != null &&\n existingSession.type === \"passkey\" &&\n existingSession.user.userId === user.userId\n ) {\n return;\n }\n\n this.setSession({ type: \"passkey\", user });\n },\n connectedOauth: (user, bundle) =>\n this.setSessionWithUserAndBundle({ type: \"oauth\", user, bundle }),\n connectedOtp: (user, bundle) => {\n this.setSessionWithUserAndBundle({ type: \"otp\", user, bundle });\n },\n disconnected: () => this.clearSession(),\n };\n\n for (const [event, listener] of Object.entries(listeners)) {\n if (listener) {\n this.client.on(event as AlchemySignerClientEvent, listener);\n }\n }\n\n // sync local state if persisted state has changed from another tab\n // only do this in the browser\n // Add a try catch to prevent potential crashes in non-browser environments\n try {\n if (\n typeof window !== \"undefined\" &&\n typeof window.addEventListener !== \"undefined\"\n ) {\n window.addEventListener(\"focus\", () => {\n const oldSession = this.store.getState().session;\n this.store.persist.rehydrate();\n const newSession = this.store.getState().session;\n if (\n (oldSession?.expirationDateMs ?? 0) < Date.now() ||\n oldSession?.user.orgId !== newSession?.user.orgId ||\n oldSession?.user.userId !== newSession?.user.userId\n ) {\n // Initialize if the user has changed.\n this.initialize();\n }\n });\n }\n } catch (e) {\n console.error(\"Error registering event listeners\", e);\n }\n };\n\n private registerSessionExpirationHandler = (session: Session) => {\n if (this.clearSessionHandle) {\n clearTimeout(this.clearSessionHandle);\n }\n\n this.clearSessionHandle = setTimeout(() => {\n this.client.disconnect();\n this.clearSession();\n }, Math.min(session.expirationDateMs - Date.now(), Math.pow(2, 31) - 1));\n };\n\n private setSessionWithUserAndBundle = ({\n type,\n user,\n bundle,\n }: {\n type: \"email\" | \"oauth\" | \"otp\";\n user: User;\n bundle: string;\n }) => {\n const existingSession = this.getSession();\n if (\n existingSession != null &&\n existingSession.type === type &&\n existingSession.user.userId === user.userId &&\n // if the bundle is different, then we've refreshed the session\n // so we need to reset the session\n existingSession.bundle === bundle\n ) {\n return;\n }\n\n this.setSession({ type, user, bundle });\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/session/manager.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from \"eventemitter3\";\nimport { z } from \"zod\";\nimport {\n createJSONStorage,\n persist,\n subscribeWithSelector,\n} from \"zustand/middleware\";\nimport { createStore, type Mutate, type StoreApi } from \"zustand/vanilla\";\nimport type { BaseSignerClient } from \"../client/base\";\nimport type {\n AlchemySignerClientEvent,\n AlchemySignerClientEvents,\n User,\n} from \"../client/types\";\nimport { assertNever } from \"../utils/typeAssertions.js\";\nimport type { Session, SessionManagerEvents } from \"./types\";\n\nexport const DEFAULT_SESSION_MS = 15 * 60 * 1000; // 15 minutes\n\nexport const SessionManagerParamsSchema = z.object({\n sessionKey: z.string().default(\"alchemy-signer-session\"),\n storage: z\n .enum([\"localStorage\", \"sessionStorage\"])\n .default(\"localStorage\")\n .or(z.custom<Storage>()),\n expirationTimeMs: z\n .number()\n .default(DEFAULT_SESSION_MS)\n .describe(\n \"The time in milliseconds that a session should last before expiring [default: 15 minutes]\"\n ),\n client: z.custom<BaseSignerClient>(),\n});\n\nexport type SessionManagerParams = z.input<typeof SessionManagerParamsSchema>;\n\ntype SessionState = {\n session: Session | null;\n};\n\ntype Store = Mutate<\n StoreApi<SessionState>,\n [[\"zustand/subscribeWithSelector\", never], [\"zustand/persist\", SessionState]]\n>;\n\ntype TemporarySession = {\n orgId: string;\n isNewUser?: boolean;\n isMfaRequired?: boolean;\n};\n\nexport class SessionManager {\n private sessionKey: string;\n private client: BaseSignerClient;\n private eventEmitter: EventEmitter<SessionManagerEvents>;\n readonly expirationTimeMs: number;\n private store: Store;\n private clearSessionHandle: NodeJS.Timeout | null = null;\n\n constructor(params: SessionManagerParams) {\n const {\n sessionKey,\n storage: storageType,\n expirationTimeMs,\n client,\n } = SessionManagerParamsSchema.parse(params);\n this.sessionKey = sessionKey;\n const storage =\n typeof storageType === \"string\"\n ? storageType === \"localStorage\"\n ? localStorage\n : sessionStorage\n : storageType;\n this.expirationTimeMs = expirationTimeMs;\n this.client = client;\n this.eventEmitter = new EventEmitter<SessionManagerEvents>();\n\n this.store = createStore(\n subscribeWithSelector(\n persist(this.getInitialState, {\n name: this.sessionKey,\n storage: createJSONStorage<SessionState>(() => storage),\n })\n )\n );\n\n this.registerEventListeners();\n }\n\n public getSessionUser = async (): Promise<User | null> => {\n const existingSession = this.getSession();\n if (existingSession == null) {\n return null;\n }\n\n switch (existingSession.type) {\n case \"email\":\n case \"oauth\":\n case \"otp\": {\n const connectedEventName = (() => {\n switch (existingSession.type) {\n case \"email\":\n return \"connectedEmail\";\n case \"oauth\":\n return \"connectedOauth\";\n case \"otp\":\n return \"connectedOtp\";\n }\n })();\n const result = await this.client\n .completeAuthWithBundle({\n bundle: existingSession.bundle,\n orgId: existingSession.user.orgId,\n authenticatingType: existingSession.type,\n connectedEventName,\n idToken: existingSession.user.idToken,\n })\n .catch((e) => {\n console.warn(\"Failed to load user from session\", e);\n return null;\n });\n\n if (!result) {\n this.clearSession();\n return null;\n }\n\n return result;\n }\n case \"passkey\": {\n // we don't need to do much here if we already have a user\n // this will setup the client with the user context, but\n // requests still have to be signed by the user on first request\n // so this is fine\n return this.client.lookupUserWithPasskey(existingSession.user);\n }\n default:\n assertNever(\n existingSession,\n `Unknown session type: ${(existingSession as any).type}`\n );\n }\n };\n\n public clearSession = () => {\n this.store.setState({ session: null });\n localStorage.removeItem(`${this.sessionKey}:temporary`);\n\n if (this.clearSessionHandle) {\n clearTimeout(this.clearSessionHandle);\n }\n };\n\n public setTemporarySession = (session: TemporarySession) => {\n // temporary session must be placed in localStorage so that it can be accessed across tabs\n localStorage.setItem(\n `${this.sessionKey}:temporary`,\n JSON.stringify(session)\n );\n };\n\n public getTemporarySession = (): TemporarySession | null => {\n // temporary session must be placed in localStorage so that it can be accessed across tabs\n const sessionStr = localStorage.getItem(`${this.sessionKey}:temporary`);\n\n if (!sessionStr) {\n return null;\n }\n\n return JSON.parse(sessionStr);\n };\n\n on = <E extends keyof SessionManagerEvents>(\n event: E,\n listener: SessionManagerEvents[E]\n ) => {\n this.eventEmitter.on(event, listener as any);\n\n return () => this.eventEmitter.removeListener(event, listener as any);\n };\n\n private getSession = (): Session | null => {\n const session = this.store.getState().session;\n\n if (!session) {\n return null;\n }\n\n /**\n * TODO: this isn't really good enough\n * A user's session could be about to expire and we would still return it\n *\n * Instead we should check if a session is about to expire and refresh it\n * We should revisit this later\n */\n if (session.expirationDateMs < Date.now()) {\n this.client.disconnect();\n this.clearSession();\n return null;\n }\n\n this.registerSessionExpirationHandler(session);\n\n return session;\n };\n\n private setSession = (\n session_:\n | Omit<\n Extract<Session, { type: \"email\" | \"oauth\" | \"otp\" }>,\n \"expirationDateMs\"\n >\n | Omit<Extract<Session, { type: \"passkey\" }>, \"expirationDateMs\">\n ) => {\n const session = {\n ...session_,\n expirationDateMs: Date.now() + this.expirationTimeMs,\n };\n\n this.registerSessionExpirationHandler(session);\n\n this.store.setState({ session });\n };\n\n public initialize() {\n this.getSessionUser()\n .then((user) => {\n // once we complete auth we can update the state of the session to connected or disconnected\n if (user) this.eventEmitter.emit(\"connected\", this.getSession()!);\n else this.eventEmitter.emit(\"disconnected\");\n })\n .finally(() => {\n this.eventEmitter.emit(\"initialized\");\n });\n }\n\n private getInitialState(): SessionState {\n return {\n session: null,\n };\n }\n\n private registerEventListeners = () => {\n this.store.subscribe(\n ({ session }) => session,\n (session, prevSession) => {\n if (session != null && prevSession == null) {\n this.eventEmitter.emit(\"connected\", session);\n } else if (session == null && prevSession != null) {\n this.eventEmitter.emit(\"disconnected\");\n }\n }\n );\n\n // Helper type to ensure that a listener is either defined or explicitly\n // omitted for every event type.\n type Listeners = {\n [K in keyof AlchemySignerClientEvents]:\n | AlchemySignerClientEvents[K]\n | undefined;\n };\n\n const listeners: Listeners = {\n connected: undefined,\n newUserSignup: undefined,\n authenticating: undefined,\n connectedEmail: (user, bundle) =>\n this.setSessionWithUserAndBundle({ type: \"email\", user, bundle }),\n connectedPasskey: (user) => {\n const existingSession = this.getSession();\n if (\n existingSession != null &&\n existingSession.type === \"passkey\" &&\n existingSession.user.userId === user.userId\n ) {\n return;\n }\n\n this.setSession({ type: \"passkey\", user });\n },\n connectedOauth: (user, bundle) =>\n this.setSessionWithUserAndBundle({ type: \"oauth\", user, bundle }),\n connectedOtp: (user, bundle) => {\n this.setSessionWithUserAndBundle({ type: \"otp\", user, bundle });\n },\n disconnected: () => this.clearSession(),\n };\n\n for (const [event, listener] of Object.entries(listeners)) {\n if (listener) {\n this.client.on(event as AlchemySignerClientEvent, listener);\n }\n }\n\n // sync local state if persisted state has changed from another tab\n // only do this in the browser\n // Add a try catch to prevent potential crashes in non-browser environments\n try {\n if (\n typeof window !== \"undefined\" &&\n typeof window.addEventListener !== \"undefined\"\n ) {\n window.addEventListener(\"focus\", () => {\n const oldSession = this.store.getState().session;\n this.store.persist.rehydrate();\n const newSession = this.store.getState().session;\n if (\n (oldSession?.expirationDateMs ?? 0) < Date.now() ||\n oldSession?.user.orgId !== newSession?.user.orgId ||\n oldSession?.user.userId !== newSession?.user.userId\n ) {\n // Initialize if the user has changed.\n this.initialize();\n }\n });\n }\n } catch (e) {\n console.error(\"Error registering event listeners\", e);\n }\n };\n\n private registerSessionExpirationHandler = (session: Session) => {\n if (this.clearSessionHandle) {\n clearTimeout(this.clearSessionHandle);\n }\n\n this.clearSessionHandle = setTimeout(() => {\n this.client.disconnect();\n this.clearSession();\n }, Math.min(session.expirationDateMs - Date.now(), Math.pow(2, 31) - 1));\n };\n\n private setSessionWithUserAndBundle = ({\n type,\n user,\n bundle,\n }: {\n type: \"email\" | \"oauth\" | \"otp\";\n user: User;\n bundle: string;\n }) => {\n const existingSession = this.getSession();\n if (\n existingSession != null &&\n existingSession.type === type &&\n existingSession.user.userId === user.userId &&\n // if the bundle is different, then we've refreshed the session\n // so we need to reset the session\n existingSession.bundle === bundle\n ) {\n return;\n }\n\n this.setSession({ type, user, bundle });\n };\n}\n"]}
|
package/dist/esm/signer.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { BaseAlchemySigner } from "./base.js";
|
|
3
3
|
import { AlchemySignerWebClient } from "./client/index.js";
|
|
4
|
-
import type { CredentialCreationOptionOverrides } from "./client/types.js";
|
|
4
|
+
import type { CredentialCreationOptionOverrides, VerifyMfaParams } from "./client/types.js";
|
|
5
5
|
export type AuthParams = {
|
|
6
6
|
type: "email";
|
|
7
7
|
email: string;
|
|
8
8
|
emailMode?: "magicLink" | "otp";
|
|
9
9
|
redirectParams?: URLSearchParams;
|
|
10
|
+
multiFactors?: VerifyMfaParams[];
|
|
10
11
|
} | {
|
|
11
12
|
type: "email";
|
|
12
13
|
bundle: string;
|
|
@@ -37,6 +38,7 @@ export type AuthParams = {
|
|
|
37
38
|
} | {
|
|
38
39
|
type: "otp";
|
|
39
40
|
otpCode: string;
|
|
41
|
+
multiFactors?: VerifyMfaParams[];
|
|
40
42
|
};
|
|
41
43
|
export type OauthProviderConfig = {
|
|
42
44
|
authProviderId: "auth0";
|
package/dist/esm/signer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"signer.js","sourceRoot":"","sources":["../../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACL,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAK3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAsElE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC;KACvC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC;SACN,MAAM,EAA0B;SAChC,EAAE,CAAC,+BAA+B,CAAC;CACvC,CAAC;KACD,MAAM,CAAC;IACN,aAAa,EAAE,0BAA0B,CAAC,IAAI,CAAC;QAC7C,MAAM,EAAE,IAAI;KACb,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC;AAIL;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,iBAAyC;IAC7E;;;;;;;;;;;;;;;;;;;;OAoBG;IAEH,YAAY,MAA2B;QACrC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,GACjC,yBAAyB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,MAA8B,CAAC;QACnC,IAAI,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,GAAG,IAAI,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC1B,CAAC;QACD,MAAM,EACJ,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,OAAO,EACP,QAAQ,GACT,GAAG,uBAAuB,CAAC;YAC1B,WAAW,EAAE,QAAQ;YACrB,mEAAmE;YACnE,UAAU,EAAE,OAAO;YACnB,WAAW,EAAE,gBAAgB;YAC7B,UAAU,EAAE,gBAAgB;YAC5B,UAAU,EAAE,eAAe;YAC3B,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE,cAAc;SACzB,CAAC,CAAC;QAEH,MAAM,YAAY,GAChB,UAAU,IAAI,IAAI;YAChB,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE;YAC7C,CAAC,CAAC,SAAS,CAAC;QAEhB,KAAK,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,QAAQ,KAAK,MAAM,CAAC;QAEtC,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC;QAEnC,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,CAAC;gBAChB,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,WAAW;gBACnB,SAAS;aACV,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,WAAW,IAAI,UAAU,IAAI,OAAO,EAAE,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC;gBAChB,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,UAAU;gBACjB,OAAO;gBACP,SAAS;aACV,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED;;;;;;;GAOG;AACH,SAAS,uBAAuB,CAC9B,IAAO;IAEP,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAuC,EAAE,CAAC;IACtD,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;QACvD,eAAe,KAAf,eAAe,GAAK,KAAK,IAAI,IAAI,EAAC;QAClC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACpB,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAgD,CAAC;AAC1D,CAAC","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 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 } & 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 = \"google\" | \"apple\" | \"facebook\" | \"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 /**\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 const {\n emailBundle,\n oauthBundle,\n oauthOrgId,\n oauthError,\n idToken,\n isSignup,\n } = getAndRemoveQueryParams({\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 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 * 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"]}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -5,6 +5,10 @@ export type AlchemySignerEvents = {
|
|
|
5
5
|
disconnected(): void;
|
|
6
6
|
statusChanged(status: AlchemySignerStatus): void;
|
|
7
7
|
errorChanged(error: ErrorInfo | undefined): void;
|
|
8
|
+
mfaStatusChanged(mfaStatus: {
|
|
9
|
+
mfaRequired: boolean;
|
|
10
|
+
mfaFactorId?: string;
|
|
11
|
+
}): void;
|
|
8
12
|
};
|
|
9
13
|
export type AlchemySignerEvent = keyof AlchemySignerEvents;
|
|
10
14
|
export declare enum AlchemySignerStatus {
|
|
@@ -17,6 +21,10 @@ export declare enum AlchemySignerStatus {
|
|
|
17
21
|
AWAITING_EMAIL_AUTH = "AWAITING_EMAIL_AUTH",
|
|
18
22
|
AWAITING_OTP_AUTH = "AWAITING_OTP_AUTH"
|
|
19
23
|
}
|
|
24
|
+
export declare enum AlchemyMfaStatus {
|
|
25
|
+
NOT_REQUIRED = "not_required",
|
|
26
|
+
REQUIRED = "required"
|
|
27
|
+
}
|
|
20
28
|
export interface ErrorInfo {
|
|
21
29
|
name: string;
|
|
22
30
|
message: string;
|
package/dist/esm/types.js
CHANGED
|
@@ -9,4 +9,9 @@ export var AlchemySignerStatus;
|
|
|
9
9
|
AlchemySignerStatus["AWAITING_EMAIL_AUTH"] = "AWAITING_EMAIL_AUTH";
|
|
10
10
|
AlchemySignerStatus["AWAITING_OTP_AUTH"] = "AWAITING_OTP_AUTH";
|
|
11
11
|
})(AlchemySignerStatus || (AlchemySignerStatus = {}));
|
|
12
|
+
export var AlchemyMfaStatus;
|
|
13
|
+
(function (AlchemyMfaStatus) {
|
|
14
|
+
AlchemyMfaStatus["NOT_REQUIRED"] = "not_required";
|
|
15
|
+
AlchemyMfaStatus["REQUIRED"] = "required";
|
|
16
|
+
})(AlchemyMfaStatus || (AlchemyMfaStatus = {}));
|
|
12
17
|
//# sourceMappingURL=types.js.map
|
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":"AAgBA,MAAM,CAAN,IAAY,mBASX;AATD,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;AACzC,CAAC,EATW,mBAAmB,KAAnB,mBAAmB,QAS9B;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 }): 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}\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"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function parseMfaError(error) {
|
|
2
|
+
if (error instanceof Error) {
|
|
3
|
+
try {
|
|
4
|
+
const parsed = JSON.parse(error.message);
|
|
5
|
+
if (parsed?.data?.multiFactors) {
|
|
6
|
+
return parsed.data.multiFactors;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
// ignore JSON parse failures
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=parseMfaError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseMfaError.js","sourceRoot":"","sources":["../../../src/utils/parseMfaError.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import type { MfaFactor } from \"../client/types.js\";\n\nexport function parseMfaError(error: unknown): MfaFactor[] | null {\n if (error instanceof Error) {\n try {\n const parsed = JSON.parse(error.message);\n if (parsed?.data?.multiFactors) {\n return parsed.data.multiFactors;\n }\n } catch {\n // ignore JSON parse failures\n }\n }\n return null;\n}\n"]}
|
package/dist/esm/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "4.16.
|
|
1
|
+
export declare const VERSION = "4.16.1-alpha.3";
|
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,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,yBAAyB;AACzB,MAAM,CAAC,MAAM,OAAO,GAAG,gBAAgB,CAAC","sourcesContent":["// This file is autogenerated by inject-version.ts. Any changes will be\n// overwritten on commit!\nexport const VERSION = \"4.16.1-alpha.3\";\n"]}
|
package/dist/types/base.d.ts
CHANGED
|
@@ -274,6 +274,36 @@ export declare abstract class BaseAlchemySigner<TClient extends BaseSignerClient
|
|
|
274
274
|
* @returns {Promise<Authorization<number, true>> | undefined} a promise that resolves to the authorization with the signature
|
|
275
275
|
*/
|
|
276
276
|
signAuthorization: (unsignedAuthorization: Authorization<number, false>) => Promise<Authorization<number, true>>;
|
|
277
|
+
/**
|
|
278
|
+
* Gets the current MFA status
|
|
279
|
+
*
|
|
280
|
+
* @example
|
|
281
|
+
* ```ts
|
|
282
|
+
* import { AlchemyWebSigner } from "@account-kit/signer";
|
|
283
|
+
*
|
|
284
|
+
* const signer = new AlchemyWebSigner({
|
|
285
|
+
* client: {
|
|
286
|
+
* connection: {
|
|
287
|
+
* rpcUrl: "/api/rpc",
|
|
288
|
+
* },
|
|
289
|
+
* iframeConfig: {
|
|
290
|
+
* iframeContainerId: "alchemy-signer-iframe-container",
|
|
291
|
+
* },
|
|
292
|
+
* },
|
|
293
|
+
* });
|
|
294
|
+
*
|
|
295
|
+
* const mfaStatus = signer.getMfaStatus();
|
|
296
|
+
* if (mfaStatus === AlchemyMfaStatus.REQUIRED) {
|
|
297
|
+
* // Handle MFA requirement
|
|
298
|
+
* }
|
|
299
|
+
* ```
|
|
300
|
+
*
|
|
301
|
+
* @returns {{ mfaRequired: boolean; mfaFactorId?: string }} The current MFA status
|
|
302
|
+
*/
|
|
303
|
+
getMfaStatus: () => {
|
|
304
|
+
mfaRequired: boolean;
|
|
305
|
+
mfaFactorId?: string;
|
|
306
|
+
};
|
|
277
307
|
private unpackSignRawMessageBytes;
|
|
278
308
|
/**
|
|
279
309
|
* Unauthenticated call to look up a user's organizationId by email
|
|
@@ -414,5 +444,7 @@ export declare abstract class BaseAlchemySigner<TClient extends BaseSignerClient
|
|
|
414
444
|
private getExpirationSeconds;
|
|
415
445
|
private registerListeners;
|
|
416
446
|
private emitNewUserEvent;
|
|
447
|
+
private initOrCreateEmailUser;
|
|
448
|
+
private completeEmailAuth;
|
|
417
449
|
}
|
|
418
450
|
//# 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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"}
|
|
@@ -2,7 +2,7 @@ import { type ConnectionConfig } from "@aa-sdk/core";
|
|
|
2
2
|
import { TurnkeyClient, type TSignedRequest } from "@turnkey/http";
|
|
3
3
|
import EventEmitter from "eventemitter3";
|
|
4
4
|
import { type Hex } from "viem";
|
|
5
|
-
import type { AlchemySignerClientEvents, AuthenticatingEventMetadata, CreateAccountParams, EmailAuthParams, GetOauthProviderUrlArgs, GetWebAuthnAttestationResult, OauthConfig, OauthParams, OtpParams, SignerBody, SignerResponse, SignupResponse, User } from "./types.js";
|
|
5
|
+
import type { AlchemySignerClientEvents, AuthenticatingEventMetadata, CreateAccountParams, RemoveMfaParams, EmailAuthParams, EnableMfaParams, EnableMfaResult, GetOauthProviderUrlArgs, GetWebAuthnAttestationResult, MfaFactor, OauthConfig, OauthParams, OtpParams, SignerBody, SignerResponse, SignupResponse, User, VerifyMfaParams } from "./types.js";
|
|
6
6
|
export interface BaseSignerClientParams {
|
|
7
7
|
stamper: TurnkeyClient["stamper"];
|
|
8
8
|
connection: ConnectionConfig;
|
|
@@ -60,6 +60,40 @@ export declare abstract class BaseSignerClient<TExportWalletParams = unknown> {
|
|
|
60
60
|
abstract initEmailAuth(params: Omit<EmailAuthParams, "targetPublicKey">): Promise<{
|
|
61
61
|
orgId: string;
|
|
62
62
|
otpId?: string;
|
|
63
|
+
multiFactors?: MfaFactor[];
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* Retrieves the list of MFA factors configured for the current user.
|
|
67
|
+
*
|
|
68
|
+
* @returns {Promise<{ multiFactors: Array<MfaFactor> }>} A promise that resolves to an array of configured MFA factors
|
|
69
|
+
*/
|
|
70
|
+
abstract getMfaFactors(): Promise<{
|
|
71
|
+
multiFactors: MfaFactor[];
|
|
72
|
+
}>;
|
|
73
|
+
/**
|
|
74
|
+
* Initiates the setup of a new MFA factor for the current user. Mfa will need to be verified before it is active.
|
|
75
|
+
*
|
|
76
|
+
* @param {EnableMfaParams} params The parameters required to enable a new MFA factor
|
|
77
|
+
* @returns {Promise<EnableMfaResult>} A promise that resolves to the factor setup information
|
|
78
|
+
*/
|
|
79
|
+
abstract addMfa(params: EnableMfaParams): Promise<EnableMfaResult>;
|
|
80
|
+
/**
|
|
81
|
+
* Verifies a newly created MFA factor to complete the setup process.
|
|
82
|
+
*
|
|
83
|
+
* @param {VerifyMfaParams} params The parameters required to verify the MFA factor
|
|
84
|
+
* @returns {Promise<{ multiFactors: MfaFactor[] }>} A promise that resolves to the updated list of MFA factors
|
|
85
|
+
*/
|
|
86
|
+
abstract verifyMfa(params: VerifyMfaParams): Promise<{
|
|
87
|
+
multiFactors: MfaFactor[];
|
|
88
|
+
}>;
|
|
89
|
+
/**
|
|
90
|
+
* Removes existing MFA factors by ID or factor type.
|
|
91
|
+
*
|
|
92
|
+
* @param {RemoveMfaParams} params The parameters specifying which factors to disable
|
|
93
|
+
* @returns {Promise<{ multiFactors: MfaFactor[] }>} A promise that resolves to the updated list of MFA factors
|
|
94
|
+
*/
|
|
95
|
+
abstract removeMfa(params: RemoveMfaParams): Promise<{
|
|
96
|
+
multiFactors: MfaFactor[];
|
|
63
97
|
}>;
|
|
64
98
|
abstract completeAuthWithBundle(params: {
|
|
65
99
|
bundle: string;
|
|
@@ -153,7 +187,7 @@ export declare abstract class BaseSignerClient<TExportWalletParams = unknown> {
|
|
|
153
187
|
* @param {SignerBody<R>} body The request body containing the data to be sent
|
|
154
188
|
* @returns {Promise<SignerResponse<R>>} A promise that resolves to the response from the signer
|
|
155
189
|
*/
|
|
156
|
-
request: <R extends "/v1/signup" | "/v1/whoami" | "/v1/auth" | "/v1/lookup" | "/v1/sign-payload" | "/v1/prepare-oauth" | "/v1/otp">(route: R, body: SignerBody<R>) => Promise<SignerResponse<R>>;
|
|
190
|
+
request: <R extends "/v1/signup" | "/v1/whoami" | "/v1/auth" | "/v1/lookup" | "/v1/sign-payload" | "/v1/prepare-oauth" | "/v1/otp" | "/v1/auth-list-multi-factors" | "/v1/auth-delete-multi-factors" | "/v1/auth-request-multi-factor" | "/v1/auth-verify-multi-factor">(route: R, body: SignerBody<R>) => Promise<SignerResponse<R>>;
|
|
157
191
|
private exportAsSeedPhrase;
|
|
158
192
|
private exportAsPrivateKey;
|
|
159
193
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/client/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,YAAY,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAU,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAOxC,OAAO,KAAK,EAEV,yBAAyB,EACzB,2BAA2B,EAC3B,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACvB,4BAA4B,EAC5B,WAAW,EACX,WAAW,EAEX,SAAS,EACT,UAAU,EACV,cAAc,EAEd,cAAc,EACd,IAAI,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/client/base.ts"],"names":[],"mappings":"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"}
|