@atlasauth/js 0.23.1 → 0.24.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/CHANGELOG.md +4 -0
- package/dist/app-launcher.d.ts +11 -0
- package/dist/app-launcher.js +12 -0
- package/dist/app-launcher.js.map +1 -0
- package/dist/attempt.d.ts +52 -1
- package/dist/attempt.js +2 -0
- package/dist/attempt.js.map +1 -1
- package/dist/attestation.d.ts +52 -0
- package/dist/attestation.js +48 -0
- package/dist/attestation.js.map +1 -0
- package/dist/compat.d.ts +1 -0
- package/dist/compat.js +5 -1
- package/dist/compat.js.map +1 -1
- package/dist/connect.d.ts +6 -0
- package/dist/connect.js +22 -0
- package/dist/connect.js.map +1 -1
- package/dist/connections.d.ts +43 -0
- package/dist/connections.js +53 -0
- package/dist/connections.js.map +1 -0
- package/dist/credentials.d.ts +47 -0
- package/dist/credentials.js +95 -0
- package/dist/credentials.js.map +1 -0
- package/dist/custom-challenge.d.ts +13 -0
- package/dist/custom-challenge.js +27 -0
- package/dist/custom-challenge.js.map +1 -0
- package/dist/delegated-ui.d.ts +93 -0
- package/dist/delegated-ui.js +62 -0
- package/dist/delegated-ui.js.map +1 -0
- package/dist/dev-browser.d.ts +9 -0
- package/dist/dev-browser.js +21 -1
- package/dist/dev-browser.js.map +1 -1
- package/dist/device-key.d.ts +65 -0
- package/dist/device-key.js +64 -0
- package/dist/device-key.js.map +1 -0
- package/dist/email-addresses.d.ts +24 -0
- package/dist/email-addresses.js +36 -0
- package/dist/email-addresses.js.map +1 -0
- package/dist/environment.d.ts +8 -0
- package/dist/environment.js +6 -0
- package/dist/environment.js.map +1 -1
- package/dist/external-passkeys.d.ts +34 -0
- package/dist/external-passkeys.js +31 -0
- package/dist/external-passkeys.js.map +1 -0
- package/dist/fapi.d.ts +36 -0
- package/dist/fapi.js +75 -4
- package/dist/fapi.js.map +1 -1
- package/dist/identity-verification.d.ts +40 -0
- package/dist/identity-verification.js +40 -0
- package/dist/identity-verification.js.map +1 -0
- package/dist/index.d.ts +17 -1
- package/dist/index.js +24 -1
- package/dist/index.js.map +1 -1
- package/dist/journey-redirect.d.ts +8 -0
- package/dist/journey-redirect.js +32 -0
- package/dist/journey-redirect.js.map +1 -0
- package/dist/marketing.d.ts +81 -0
- package/dist/marketing.js +162 -0
- package/dist/marketing.js.map +1 -0
- package/dist/mfa-enrollment.d.ts +2 -0
- package/dist/mfa-enrollment.js +1 -0
- package/dist/mfa-enrollment.js.map +1 -1
- package/dist/mfa-factors.d.ts +109 -0
- package/dist/mfa-factors.js +98 -0
- package/dist/mfa-factors.js.map +1 -0
- package/dist/migration-browser-sessions.d.ts +118 -0
- package/dist/migration-browser-sessions.js +404 -0
- package/dist/migration-browser-sessions.js.map +1 -0
- package/dist/organization-admin.d.ts +192 -0
- package/dist/organization-admin.js +53 -0
- package/dist/organization-admin.js.map +1 -0
- package/dist/passkey.d.ts +71 -2
- package/dist/passkey.js +97 -0
- package/dist/passkey.js.map +1 -1
- package/dist/password-reset.d.ts +16 -1
- package/dist/password-reset.js +19 -4
- package/dist/password-reset.js.map +1 -1
- package/dist/pricing.d.ts +80 -0
- package/dist/pricing.js +71 -0
- package/dist/pricing.js.map +1 -0
- package/dist/profile.d.ts +73 -1
- package/dist/profile.js +23 -0
- package/dist/profile.js.map +1 -1
- package/dist/redirect.js +1 -1
- package/dist/redirect.js.map +1 -1
- package/dist/telegram.d.ts +23 -0
- package/dist/telegram.js +8 -0
- package/dist/telegram.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import type { FapiClient } from './fapi';
|
|
2
|
+
/**
|
|
3
|
+
* The org-admin Frontend API behind the in-app admin widgets
|
|
4
|
+
* (`<OrganizationSsoConnection/>`, `<OrganizationDirectory/>`,
|
|
5
|
+
* `<OrganizationDomains/>`, `<OrganizationLogStreams/>`, `<OrganizationApiKeys/>`,
|
|
6
|
+
* `<OrganizationIpAllowlist/>`, `<OrganizationWebhooks/>`). Every call is scoped
|
|
7
|
+
* to the ACTIVE organization and needs the manage-members permission; a refused
|
|
8
|
+
* call throws {@link OrganizationRequestError} (404 for another organization,
|
|
9
|
+
* 403 for a member without the permission).
|
|
10
|
+
*/
|
|
11
|
+
export interface OrganizationSsoConnection {
|
|
12
|
+
id: string;
|
|
13
|
+
type: 'oidc' | 'saml';
|
|
14
|
+
status: string;
|
|
15
|
+
oidc_issuer: string | null;
|
|
16
|
+
oidc_client_id: string | null;
|
|
17
|
+
has_secret: boolean;
|
|
18
|
+
saml_idp_entity_id: string | null;
|
|
19
|
+
saml_idp_sso_url: string | null;
|
|
20
|
+
has_saml_certificate: boolean;
|
|
21
|
+
saml_single_logout: boolean;
|
|
22
|
+
saml_idp_slo_url: string | null;
|
|
23
|
+
}
|
|
24
|
+
/** The service-provider details an IdP admin copies into their identity provider. */
|
|
25
|
+
export interface OrganizationSsoServiceProvider {
|
|
26
|
+
acs_url: string;
|
|
27
|
+
oidc_redirect_uri: string;
|
|
28
|
+
sp_entity_id: string | null;
|
|
29
|
+
saml_metadata_url: string | null;
|
|
30
|
+
saml_slo_url: string | null;
|
|
31
|
+
}
|
|
32
|
+
export interface OrganizationSsoView {
|
|
33
|
+
object: 'organization_sso_connection';
|
|
34
|
+
connection: OrganizationSsoConnection | null;
|
|
35
|
+
sp: OrganizationSsoServiceProvider;
|
|
36
|
+
}
|
|
37
|
+
export interface OrganizationSsoInput {
|
|
38
|
+
type: 'oidc' | 'saml';
|
|
39
|
+
oidc_issuer?: string;
|
|
40
|
+
oidc_client_id?: string;
|
|
41
|
+
/** Write-only; leave blank to keep the stored secret. */
|
|
42
|
+
oidc_client_secret?: string;
|
|
43
|
+
saml_metadata_xml?: string;
|
|
44
|
+
saml_idp_entity_id?: string;
|
|
45
|
+
saml_idp_sso_url?: string;
|
|
46
|
+
/** Write-only PEM; leave blank to keep the stored certificate. */
|
|
47
|
+
saml_idp_certificate?: string;
|
|
48
|
+
saml_idp_slo_url?: string;
|
|
49
|
+
saml_single_logout?: boolean;
|
|
50
|
+
}
|
|
51
|
+
export interface OrganizationScimToken {
|
|
52
|
+
object: 'scim_token';
|
|
53
|
+
id: string;
|
|
54
|
+
name: string | null;
|
|
55
|
+
prefix: string;
|
|
56
|
+
last_used_at: number | null;
|
|
57
|
+
expires_at: number | null;
|
|
58
|
+
created_at: number;
|
|
59
|
+
}
|
|
60
|
+
export interface OrganizationDirectory {
|
|
61
|
+
object: 'organization_directory';
|
|
62
|
+
base_url: string;
|
|
63
|
+
tokens: OrganizationScimToken[];
|
|
64
|
+
}
|
|
65
|
+
export interface OrganizationDomain {
|
|
66
|
+
object: 'org_domain';
|
|
67
|
+
id: string;
|
|
68
|
+
domain: string;
|
|
69
|
+
status: string;
|
|
70
|
+
verification: {
|
|
71
|
+
record_type: 'TXT';
|
|
72
|
+
record_name: string;
|
|
73
|
+
record_value: string;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export interface OrganizationLogStream {
|
|
77
|
+
object: 'org_audit_stream';
|
|
78
|
+
id: string;
|
|
79
|
+
organization_id: string;
|
|
80
|
+
url: string;
|
|
81
|
+
format: string;
|
|
82
|
+
active: boolean;
|
|
83
|
+
has_secret: boolean;
|
|
84
|
+
created_at: number;
|
|
85
|
+
}
|
|
86
|
+
export interface OrganizationApiKey {
|
|
87
|
+
object: 'api_key';
|
|
88
|
+
id: string;
|
|
89
|
+
name: string | null;
|
|
90
|
+
prefix: string;
|
|
91
|
+
expires_at: number | null;
|
|
92
|
+
last_used_at: number | null;
|
|
93
|
+
created_at: number;
|
|
94
|
+
}
|
|
95
|
+
export interface OrganizationIpAllowlist {
|
|
96
|
+
object: 'organization_ip_allowlist';
|
|
97
|
+
entries: string[];
|
|
98
|
+
/** The caller's own address, so a UI can offer "add my IP". */
|
|
99
|
+
your_ip: string;
|
|
100
|
+
}
|
|
101
|
+
export interface OrganizationWebhookEndpoint {
|
|
102
|
+
object: 'webhook_endpoint';
|
|
103
|
+
id: string;
|
|
104
|
+
url: string;
|
|
105
|
+
description: string | null;
|
|
106
|
+
enabled_events: string[];
|
|
107
|
+
active: boolean;
|
|
108
|
+
health: 'healthy' | 'failing' | 'disabled' | string;
|
|
109
|
+
created_at: number;
|
|
110
|
+
}
|
|
111
|
+
export interface OrganizationWebhookDelivery {
|
|
112
|
+
object: 'webhook_delivery';
|
|
113
|
+
id: string;
|
|
114
|
+
event_type: string | null;
|
|
115
|
+
status: string;
|
|
116
|
+
http_status: number | null;
|
|
117
|
+
attempt_number: number;
|
|
118
|
+
created_at: number;
|
|
119
|
+
}
|
|
120
|
+
export declare const organizationAdmin: {
|
|
121
|
+
getSso: (c: FapiClient, org: string) => Promise<OrganizationSsoView>;
|
|
122
|
+
saveSso: (c: FapiClient, org: string, input: OrganizationSsoInput) => Promise<OrganizationSsoView>;
|
|
123
|
+
getDirectory: (c: FapiClient, org: string) => Promise<OrganizationDirectory>;
|
|
124
|
+
/** The returned `token` is shown once. */
|
|
125
|
+
createDirectoryToken: (c: FapiClient, org: string) => Promise<OrganizationScimToken & {
|
|
126
|
+
token: string;
|
|
127
|
+
}>;
|
|
128
|
+
revokeDirectoryToken: (c: FapiClient, org: string, tokenId: string) => Promise<{
|
|
129
|
+
id: string;
|
|
130
|
+
revoked: true;
|
|
131
|
+
}>;
|
|
132
|
+
listDomains: (c: FapiClient, org: string) => Promise<OrganizationDomain[]>;
|
|
133
|
+
addDomain: (c: FapiClient, org: string, domain: string) => Promise<OrganizationDomain>;
|
|
134
|
+
verifyDomain: (c: FapiClient, org: string, domainId: string) => Promise<OrganizationDomain & {
|
|
135
|
+
verified: boolean;
|
|
136
|
+
}>;
|
|
137
|
+
removeDomain: (c: FapiClient, org: string, domainId: string) => Promise<{
|
|
138
|
+
id: string;
|
|
139
|
+
deleted: true;
|
|
140
|
+
}>;
|
|
141
|
+
listLogStreams: (c: FapiClient, org: string) => Promise<OrganizationLogStream[]>;
|
|
142
|
+
/** The returned `secret` signs deliveries and is shown once. */
|
|
143
|
+
addLogStream: (c: FapiClient, org: string, input: {
|
|
144
|
+
url: string;
|
|
145
|
+
format?: string;
|
|
146
|
+
}) => Promise<OrganizationLogStream & {
|
|
147
|
+
secret: string;
|
|
148
|
+
}>;
|
|
149
|
+
removeLogStream: (c: FapiClient, org: string, streamId: string) => Promise<{
|
|
150
|
+
id: string;
|
|
151
|
+
deleted: true;
|
|
152
|
+
}>;
|
|
153
|
+
listApiKeys: (c: FapiClient, org: string) => Promise<OrganizationApiKey[]>;
|
|
154
|
+
/** The returned `secret` is shown once. */
|
|
155
|
+
createApiKey: (c: FapiClient, org: string, input?: {
|
|
156
|
+
name?: string;
|
|
157
|
+
expires_in_seconds?: number;
|
|
158
|
+
}) => Promise<OrganizationApiKey & {
|
|
159
|
+
secret: string;
|
|
160
|
+
}>;
|
|
161
|
+
revokeApiKey: (c: FapiClient, org: string, keyId: string) => Promise<{
|
|
162
|
+
id: string;
|
|
163
|
+
revoked: true;
|
|
164
|
+
}>;
|
|
165
|
+
getIpAllowlist: (c: FapiClient, org: string) => Promise<OrganizationIpAllowlist>;
|
|
166
|
+
/** An empty list clears it; a list that excludes the caller's own IP is refused. */
|
|
167
|
+
setIpAllowlist: (c: FapiClient, org: string, entries: string[]) => Promise<OrganizationIpAllowlist>;
|
|
168
|
+
listWebhooks: (c: FapiClient, org: string) => Promise<OrganizationWebhookEndpoint[]>;
|
|
169
|
+
/** The returned `secret` is shown once. */
|
|
170
|
+
createWebhook: (c: FapiClient, org: string, input: {
|
|
171
|
+
url: string;
|
|
172
|
+
enabled_events?: string[];
|
|
173
|
+
description?: string;
|
|
174
|
+
}) => Promise<OrganizationWebhookEndpoint & {
|
|
175
|
+
secret: string;
|
|
176
|
+
}>;
|
|
177
|
+
updateWebhook: (c: FapiClient, org: string, endpointId: string, input: {
|
|
178
|
+
url?: string;
|
|
179
|
+
enabled_events?: string[];
|
|
180
|
+
description?: string | null;
|
|
181
|
+
active?: boolean;
|
|
182
|
+
}) => Promise<OrganizationWebhookEndpoint>;
|
|
183
|
+
deleteWebhook: (c: FapiClient, org: string, endpointId: string) => Promise<{
|
|
184
|
+
id: string;
|
|
185
|
+
deleted: true;
|
|
186
|
+
}>;
|
|
187
|
+
rotateWebhookSecret: (c: FapiClient, org: string, endpointId: string) => Promise<{
|
|
188
|
+
secret: string;
|
|
189
|
+
overlap_seconds: number;
|
|
190
|
+
}>;
|
|
191
|
+
webhookDeliveries: (c: FapiClient, org: string, endpointId: string) => Promise<OrganizationWebhookDelivery[]>;
|
|
192
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.organizationAdmin = void 0;
|
|
4
|
+
const organizations_1 = require("./organizations");
|
|
5
|
+
const enc = encodeURIComponent;
|
|
6
|
+
const base = (organizationId) => `/v1/client/organizations/${enc(organizationId)}`;
|
|
7
|
+
async function call(client, path, init = {}) {
|
|
8
|
+
const res = await client.request(path, init);
|
|
9
|
+
if (!res.ok || !res.data) {
|
|
10
|
+
const first = res.errors[0];
|
|
11
|
+
throw new organizations_1.OrganizationRequestError(res.status, first?.code ?? 'UNKNOWN', first?.message ?? 'The request failed.', first?.param, first?.reason, first?.meta);
|
|
12
|
+
}
|
|
13
|
+
return res.data;
|
|
14
|
+
}
|
|
15
|
+
const send = (method, body) => body === undefined ? { method } : { method, body: JSON.stringify(body) };
|
|
16
|
+
exports.organizationAdmin = {
|
|
17
|
+
/* SSO connection */
|
|
18
|
+
getSso: (c, org) => call(c, `${base(org)}/sso_connection`, send('GET')),
|
|
19
|
+
saveSso: (c, org, input) => call(c, `${base(org)}/sso_connection`, send('PATCH', input)),
|
|
20
|
+
/* Directory sync (SCIM) */
|
|
21
|
+
getDirectory: (c, org) => call(c, `${base(org)}/directory`, send('GET')),
|
|
22
|
+
/** The returned `token` is shown once. */
|
|
23
|
+
createDirectoryToken: (c, org) => call(c, `${base(org)}/directory/tokens`, send('POST')),
|
|
24
|
+
revokeDirectoryToken: (c, org, tokenId) => call(c, `${base(org)}/directory/tokens/${enc(tokenId)}`, send('DELETE')),
|
|
25
|
+
/* Domains */
|
|
26
|
+
listDomains: async (c, org) => (await call(c, `${base(org)}/domains`, send('GET'))).data,
|
|
27
|
+
addDomain: (c, org, domain) => call(c, `${base(org)}/domains`, send('POST', { domain })),
|
|
28
|
+
verifyDomain: (c, org, domainId) => call(c, `${base(org)}/domains/${enc(domainId)}/verify`, send('POST')),
|
|
29
|
+
removeDomain: (c, org, domainId) => call(c, `${base(org)}/domains/${enc(domainId)}`, send('DELETE')),
|
|
30
|
+
/* Log streams */
|
|
31
|
+
listLogStreams: async (c, org) => (await call(c, `${base(org)}/log_streams`, send('GET'))).data,
|
|
32
|
+
/** The returned `secret` signs deliveries and is shown once. */
|
|
33
|
+
addLogStream: (c, org, input) => call(c, `${base(org)}/log_streams`, send('POST', input)),
|
|
34
|
+
removeLogStream: (c, org, streamId) => call(c, `${base(org)}/log_streams/${enc(streamId)}`, send('DELETE')),
|
|
35
|
+
/* API keys */
|
|
36
|
+
listApiKeys: async (c, org) => (await call(c, `${base(org)}/api_keys`, send('GET'))).data,
|
|
37
|
+
/** The returned `secret` is shown once. */
|
|
38
|
+
createApiKey: (c, org, input = {}) => call(c, `${base(org)}/api_keys`, send('POST', input)),
|
|
39
|
+
revokeApiKey: (c, org, keyId) => call(c, `${base(org)}/api_keys/${enc(keyId)}`, send('DELETE')),
|
|
40
|
+
/* Sign-in IP allowlist */
|
|
41
|
+
getIpAllowlist: (c, org) => call(c, `${base(org)}/ip_allowlist`, send('GET')),
|
|
42
|
+
/** An empty list clears it; a list that excludes the caller's own IP is refused. */
|
|
43
|
+
setIpAllowlist: (c, org, entries) => call(c, `${base(org)}/ip_allowlist`, send('PATCH', { entries })),
|
|
44
|
+
/* Webhook endpoints */
|
|
45
|
+
listWebhooks: async (c, org) => (await call(c, `${base(org)}/webhook_endpoints`, send('GET'))).data,
|
|
46
|
+
/** The returned `secret` is shown once. */
|
|
47
|
+
createWebhook: (c, org, input) => call(c, `${base(org)}/webhook_endpoints`, send('POST', input)),
|
|
48
|
+
updateWebhook: (c, org, endpointId, input) => call(c, `${base(org)}/webhook_endpoints/${enc(endpointId)}`, send('PATCH', input)),
|
|
49
|
+
deleteWebhook: (c, org, endpointId) => call(c, `${base(org)}/webhook_endpoints/${enc(endpointId)}`, send('DELETE')),
|
|
50
|
+
rotateWebhookSecret: (c, org, endpointId) => call(c, `${base(org)}/webhook_endpoints/${enc(endpointId)}/rotate_secret`, send('POST')),
|
|
51
|
+
webhookDeliveries: async (c, org, endpointId) => (await call(c, `${base(org)}/webhook_endpoints/${enc(endpointId)}/deliveries`, send('GET'))).data,
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=organization-admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization-admin.js","sourceRoot":"","sources":["../src/organization-admin.ts"],"names":[],"mappings":"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"}
|
package/dist/passkey.d.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* register: POST /v1/client/me/passkeys/begin → create → /finish
|
|
13
13
|
* sign in : POST /v1/client/sign_ins/passkey/begin → get → /finish
|
|
14
14
|
*/
|
|
15
|
+
import type { FapiClient, FapiResponse } from './fapi';
|
|
15
16
|
/** The slice of `navigator` these helpers need — injectable for tests. */
|
|
16
17
|
export interface WebAuthnHost {
|
|
17
18
|
credentials: {
|
|
@@ -21,7 +22,7 @@ export interface WebAuthnHost {
|
|
|
21
22
|
}): Promise<Credential | null>;
|
|
22
23
|
get(options: {
|
|
23
24
|
publicKey: PublicKeyCredentialRequestOptions;
|
|
24
|
-
mediation?: 'silent' | 'optional' | 'conditional' | 'required';
|
|
25
|
+
mediation?: 'silent' | 'optional' | 'conditional' | 'required' | 'immediate';
|
|
25
26
|
signal?: AbortSignal;
|
|
26
27
|
}): Promise<Credential | null>;
|
|
27
28
|
};
|
|
@@ -121,6 +122,74 @@ export interface PasskeyAssertionBody {
|
|
|
121
122
|
*/
|
|
122
123
|
export declare function getPasskeyAssertion(begin: Record<string, unknown>, opts?: {
|
|
123
124
|
host?: WebAuthnHost;
|
|
124
|
-
mediation?: 'optional' | 'conditional';
|
|
125
|
+
mediation?: 'optional' | 'conditional' | 'immediate';
|
|
125
126
|
signal?: AbortSignal;
|
|
126
127
|
} & PasskeyExtensionOptions): Promise<PasskeyAssertionBody>;
|
|
128
|
+
/** The `GET /v1/client/me/passkeys/signal` response. */
|
|
129
|
+
export interface PasskeySignalInput {
|
|
130
|
+
enabled: boolean;
|
|
131
|
+
rp_id: string;
|
|
132
|
+
user_id: string;
|
|
133
|
+
name: string;
|
|
134
|
+
display_name: string;
|
|
135
|
+
credential_ids: string[];
|
|
136
|
+
}
|
|
137
|
+
/** The slice of `PublicKeyCredential` the Signal API calls need — injectable for tests. */
|
|
138
|
+
export interface PasskeySignalHost {
|
|
139
|
+
signalAllAcceptedCredentials?(o: {
|
|
140
|
+
rpId: string;
|
|
141
|
+
userId: string;
|
|
142
|
+
allAcceptedCredentialIds: string[];
|
|
143
|
+
}): Promise<void>;
|
|
144
|
+
signalCurrentUserDetails?(o: {
|
|
145
|
+
rpId: string;
|
|
146
|
+
userId: string;
|
|
147
|
+
name: string;
|
|
148
|
+
displayName: string;
|
|
149
|
+
}): Promise<void>;
|
|
150
|
+
signalUnknownCredential?(o: {
|
|
151
|
+
rpId: string;
|
|
152
|
+
credentialId: string;
|
|
153
|
+
}): Promise<void>;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Tell the user's password manager what the server still accepts, so removed
|
|
157
|
+
* passkeys disappear from its list and renamed accounts update. Best-effort:
|
|
158
|
+
* browsers without the Signal API, or a signal the instance has off, do nothing.
|
|
159
|
+
* Returns the names of the signals sent.
|
|
160
|
+
*/
|
|
161
|
+
export declare function sendPasskeySignals(input: PasskeySignalInput, host?: PasskeySignalHost): Promise<string[]>;
|
|
162
|
+
/** Report a credential the server rejected as unknown (after a failed passkey sign-in). */
|
|
163
|
+
export declare function signalUnknownPasskey(rpId: string, credentialId: string, host?: PasskeySignalHost): Promise<boolean>;
|
|
164
|
+
/** The `GET /v1/client/me/passkeys/prompt` response. */
|
|
165
|
+
export interface PasskeyPromptDecision {
|
|
166
|
+
eligible: boolean;
|
|
167
|
+
variant: string;
|
|
168
|
+
cooldown_days: number;
|
|
169
|
+
}
|
|
170
|
+
/** Eligible by the server and not dismissed within the cooldown on this device. */
|
|
171
|
+
export declare function passkeyPromptDue(decision: PasskeyPromptDecision, store?: Pick<Storage, 'getItem'> | undefined, now?: number): boolean;
|
|
172
|
+
/** Start the cooldown (call when the user dismisses the nudge). */
|
|
173
|
+
export declare function dismissPasskeyPrompt(store?: Pick<Storage, 'setItem'> | undefined, now?: number): void;
|
|
174
|
+
/** What the user did with the nudge. */
|
|
175
|
+
export type PasskeyPromptEvent = 'shown' | 'dismissed' | 'accepted';
|
|
176
|
+
/**
|
|
177
|
+
* Report what the user did with the passkey nudge. The server records it with the rollout
|
|
178
|
+
* variant it computed itself (`passkey_prompt.shown|dismissed|accepted` in the audit log), so
|
|
179
|
+
* conversion per variant is readable without trusting the client. Best-effort: never throws.
|
|
180
|
+
*/
|
|
181
|
+
export declare function reportPasskeyPromptEvent(client: FapiClient, event: PasskeyPromptEvent, deviceClass?: 'desktop' | 'mobile' | 'tablet'): Promise<boolean>;
|
|
182
|
+
/**
|
|
183
|
+
* Passkey recovery, step 1: an account whose only sign-in is a passkey (no password) that lost it
|
|
184
|
+
* gets a code at a verified email or phone. Needs `accountUx.passkeyAdoption.recovery` on. The
|
|
185
|
+
* answer is the same whether or not the account exists. Returns the sign-in attempt id for step 2.
|
|
186
|
+
*/
|
|
187
|
+
export declare function startPasskeyRecovery(client: FapiClient, identifier: string, method?: 'email' | 'phone'): Promise<FapiResponse<{
|
|
188
|
+
id: string;
|
|
189
|
+
}>>;
|
|
190
|
+
/**
|
|
191
|
+
* Passkey recovery, step 2: submit the code. A correct one completes the sign-in as usual (the
|
|
192
|
+
* response carries the `ticket` to exchange for a session, or the next step if the account has
|
|
193
|
+
* MFA). The user then adds a new passkey with the normal add flow, since the sign-in is fresh.
|
|
194
|
+
*/
|
|
195
|
+
export declare function finishPasskeyRecovery(client: FapiClient, attemptId: string, code: string, method?: 'email' | 'phone'): Promise<FapiResponse<Record<string, unknown>>>;
|
package/dist/passkey.js
CHANGED
|
@@ -22,6 +22,13 @@ exports.passkeyExtensionsInput = passkeyExtensionsInput;
|
|
|
22
22
|
exports.readExtensionResults = readExtensionResults;
|
|
23
23
|
exports.createPasskey = createPasskey;
|
|
24
24
|
exports.getPasskeyAssertion = getPasskeyAssertion;
|
|
25
|
+
exports.sendPasskeySignals = sendPasskeySignals;
|
|
26
|
+
exports.signalUnknownPasskey = signalUnknownPasskey;
|
|
27
|
+
exports.passkeyPromptDue = passkeyPromptDue;
|
|
28
|
+
exports.dismissPasskeyPrompt = dismissPasskeyPrompt;
|
|
29
|
+
exports.reportPasskeyPromptEvent = reportPasskeyPromptEvent;
|
|
30
|
+
exports.startPasskeyRecovery = startPasskeyRecovery;
|
|
31
|
+
exports.finishPasskeyRecovery = finishPasskeyRecovery;
|
|
25
32
|
const defaultHost = () => {
|
|
26
33
|
const nav = globalThis.navigator;
|
|
27
34
|
if (!nav || !nav.credentials) {
|
|
@@ -184,4 +191,94 @@ function extensionsMember(app, server) {
|
|
|
184
191
|
return {};
|
|
185
192
|
return { extensions: { ...(fromServer ?? {}), ...(app ?? {}) } };
|
|
186
193
|
}
|
|
194
|
+
const signalHost = () => (globalThis.PublicKeyCredential ?? {});
|
|
195
|
+
/**
|
|
196
|
+
* Tell the user's password manager what the server still accepts, so removed
|
|
197
|
+
* passkeys disappear from its list and renamed accounts update. Best-effort:
|
|
198
|
+
* browsers without the Signal API, or a signal the instance has off, do nothing.
|
|
199
|
+
* Returns the names of the signals sent.
|
|
200
|
+
*/
|
|
201
|
+
async function sendPasskeySignals(input, host = signalHost()) {
|
|
202
|
+
if (!input.enabled)
|
|
203
|
+
return [];
|
|
204
|
+
const sent = [];
|
|
205
|
+
const run = async (name, fn) => {
|
|
206
|
+
if (!fn)
|
|
207
|
+
return;
|
|
208
|
+
try {
|
|
209
|
+
await fn();
|
|
210
|
+
sent.push(name);
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// A signal is a hint; a rejected one (wrong rpId, stale handle) never blocks sign-in.
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
await run('signalAllAcceptedCredentials', host.signalAllAcceptedCredentials?.bind(host, { rpId: input.rp_id, userId: input.user_id, allAcceptedCredentialIds: input.credential_ids }));
|
|
217
|
+
await run('signalCurrentUserDetails', host.signalCurrentUserDetails?.bind(host, { rpId: input.rp_id, userId: input.user_id, name: input.name, displayName: input.display_name }));
|
|
218
|
+
return sent;
|
|
219
|
+
}
|
|
220
|
+
/** Report a credential the server rejected as unknown (after a failed passkey sign-in). */
|
|
221
|
+
async function signalUnknownPasskey(rpId, credentialId, host = signalHost()) {
|
|
222
|
+
if (!host.signalUnknownCredential)
|
|
223
|
+
return false;
|
|
224
|
+
try {
|
|
225
|
+
await host.signalUnknownCredential({ rpId, credentialId });
|
|
226
|
+
return true;
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
const PROMPT_KEY = 'atlas.passkeyPromptDismissedAt';
|
|
233
|
+
const DAY_MS = 86_400_000;
|
|
234
|
+
/** Eligible by the server and not dismissed within the cooldown on this device. */
|
|
235
|
+
function passkeyPromptDue(decision, store = globalThis.localStorage, now = Date.now()) {
|
|
236
|
+
if (!decision.eligible)
|
|
237
|
+
return false;
|
|
238
|
+
const at = Number(store?.getItem(PROMPT_KEY));
|
|
239
|
+
return !(at > 0 && now - at < decision.cooldown_days * DAY_MS);
|
|
240
|
+
}
|
|
241
|
+
/** Start the cooldown (call when the user dismisses the nudge). */
|
|
242
|
+
function dismissPasskeyPrompt(store = globalThis.localStorage, now = Date.now()) {
|
|
243
|
+
store?.setItem(PROMPT_KEY, String(now));
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Report what the user did with the passkey nudge. The server records it with the rollout
|
|
247
|
+
* variant it computed itself (`passkey_prompt.shown|dismissed|accepted` in the audit log), so
|
|
248
|
+
* conversion per variant is readable without trusting the client. Best-effort: never throws.
|
|
249
|
+
*/
|
|
250
|
+
async function reportPasskeyPromptEvent(client, event, deviceClass) {
|
|
251
|
+
try {
|
|
252
|
+
const res = await client.post('/v1/client/me/passkeys/prompt/events', { event, ...(deviceClass ? { device_class: deviceClass } : {}) });
|
|
253
|
+
return res.ok;
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Passkey recovery, step 1: an account whose only sign-in is a passkey (no password) that lost it
|
|
261
|
+
* gets a code at a verified email or phone. Needs `accountUx.passkeyAdoption.recovery` on. The
|
|
262
|
+
* answer is the same whether or not the account exists. Returns the sign-in attempt id for step 2.
|
|
263
|
+
*/
|
|
264
|
+
async function startPasskeyRecovery(client, identifier, method = 'email') {
|
|
265
|
+
const attempt = await client.post('/v1/client/sign_ins', { identifier });
|
|
266
|
+
if (!attempt.ok || !attempt.data)
|
|
267
|
+
return attempt;
|
|
268
|
+
const prepared = await client.post(`/v1/client/sign_ins/${attempt.data.id}/prepare_first_factor`, {
|
|
269
|
+
strategy: method === 'email' ? 'email_code' : 'phone_code',
|
|
270
|
+
});
|
|
271
|
+
return prepared.ok ? { ...prepared, data: { id: attempt.data.id } } : prepared;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Passkey recovery, step 2: submit the code. A correct one completes the sign-in as usual (the
|
|
275
|
+
* response carries the `ticket` to exchange for a session, or the next step if the account has
|
|
276
|
+
* MFA). The user then adds a new passkey with the normal add flow, since the sign-in is fresh.
|
|
277
|
+
*/
|
|
278
|
+
function finishPasskeyRecovery(client, attemptId, code, method = 'email') {
|
|
279
|
+
return client.post(`/v1/client/sign_ins/${attemptId}/attempt_first_factor`, {
|
|
280
|
+
strategy: method === 'email' ? 'email_code' : 'phone_code',
|
|
281
|
+
code,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
187
284
|
//# sourceMappingURL=passkey.js.map
|
package/dist/passkey.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"passkey.js","sourceRoot":"","sources":["../src/passkey.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"passkey.js","sourceRoot":"","sources":["../src/passkey.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;AAyBH,8CAKC;AAGD,8CAOC;AAGD,8CAGC;AAGD,wDAQC;AAkED,wDAaC;AAMD,oDAeC;AAeD,sCAkCC;AAgBD,kDAiCC;AAyCD,gDAeC;AAGD,oDAQC;AAaD,4CAQC;AAGD,oDAKC;AAUD,4DAWC;AAOD,oDAWC;AAOD,sDAUC;AAvYD,MAAM,WAAW,GAAG,GAAiB,EAAE;IACrC,MAAM,GAAG,GAAI,UAAsC,CAAC,SAAS,CAAC;IAC9D,IAAI,CAAC,GAAG,IAAI,CAAE,GAAiC,CAAC,WAAW,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,GAA8B,CAAC;AACxC,CAAC,CAAC;AAEF,uDAAuD;AACvD,SAAgB,iBAAiB,CAAC,GAA6B;IAC7D,MAAM,KAAK,GAAG,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACpE,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAChF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,+CAA+C;AAC/C,SAAgB,iBAAiB,CAAC,KAAa;IAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,KAAK,CAAC,MAAM,CAAC;AACtB,CAAC;AAED,uDAAuD;AACvD,SAAgB,iBAAiB,CAAC,IAAc;IAC9C,MAAM,CAAC,GAAG,IAAI,IAAK,UAAgD,CAAC,mBAAmB,CAAC;IACxF,OAAO,OAAO,CAAC,KAAK,WAAW,CAAC;AAClC,CAAC;AAED,8EAA8E;AACvE,KAAK,UAAU,sBAAsB;IAC1C,MAAM,EAAE,GAAI,UAAqG;SAC9G,mBAAmB,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,EAAE,EAAE,+BAA+B,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAuDD,SAAS,SAAS,CAAC,IAAoB;IACrC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACpE,IAAI,IAAI,YAAY,WAAW;QAAE,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,SAAS,CAAC,CAAmB;IACpC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC3G,CAAC;AAED,sFAAsF;AACtF,SAAgB,sBAAsB,CACpC,GAAkC,EAClC,QAA0B;IAE1B,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,IAAI,GAAG,CAAC,IAAI;QAAE,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,QAAQ,KAAK,KAAK,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC/C,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC,WAAW,CACvC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,CAAU,EAA0B,EAAE,CACrD,CAAC,YAAY,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAE1I,oEAAoE;AACpE,SAAgB,oBAAoB,CAAC,UAA+B;IAClE,MAAM,GAAG,GAAI,UAAuF,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,CAAC;IACzI,MAAM,GAAG,GAA4B,EAAE,YAAY,EAAE,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAC3F,MAAM,GAAG,GAAG,GAAG,CAAC,GAAyF,CAAC;IAC1G,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5C,GAAG,CAAC,GAAG,GAAG;YACR,GAAG,CAAC,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAyC,CAAC;IAChE,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;QAAE,GAAG,CAAC,SAAS,GAAG,OAAO,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9H,OAAO,GAAG,CAAC;AACb,CAAC;AAUD;;;;GAIG;AACI,KAAK,UAAU,aAAa,CACjC,KAA8B,EAC9B,OAAyE,EAAE;IAE3E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAyD,CAAC;IAC7E,MAAM,OAAO,GAAI,KAAK,CAAC,kBAAiE,IAAI,EAAE,CAAC;IAE/F,MAAM,SAAS,GAAG;QAChB,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAAC,SAAmB,CAAC;QACvD,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;QACjD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvF,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;QACpD,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC;KACjC,CAAC;IAEnD,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAA+B,CAAC;IAChG,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,UAAU,CAAC,QAA4C,CAAC;IACzE,yEAAyE;IACzE,wDAAwD;IACxD,IAAI,IAAI,CAAC,kBAAkB;QAAE,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvF,OAAO;QACL,qEAAqE;QACrE,SAAS,EAAE,KAAK,CAAC,SAAmB;QACpC,kBAAkB,EAAE,iBAAiB,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACjE,gBAAgB,EAAE,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC;AACJ,CAAC;AAYD;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CACvC,KAA8B,EAC9B,OAAsI,EAAE;IAExI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAI,KAAK,CAAC,gBAA+D,IAAI,EAAE,CAAC;IAE3F,MAAM,SAAS,GAAG;QAChB,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAAC,SAAmB,CAAC;QACvD,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnF,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC;KAC/B,CAAC;IAElD,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QAC7C,SAAS;QACT,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC,CAA+B,CAAC;IAClC,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,UAAU,CAAC,QAA0C,CAAC;IACvE,IAAI,IAAI,CAAC,kBAAkB;QAAE,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvF,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAgB;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAmB;QACpC,aAAa,EAAE,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC;QAClD,kBAAkB,EAAE,iBAAiB,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACjE,gBAAgB,EAAE,iBAAiB,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5D,SAAS,EAAE,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC;KACjD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CACvB,GAAwC,EACxC,MAAe;IAEf,MAAM,UAAU,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAkC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpI,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;AACnE,CAAC;AAmBD,MAAM,UAAU,GAAG,GAAsB,EAAE,CACzC,CAAE,UAAgD,CAAC,mBAAmB,IAAI,EAAE,CAAsB,CAAC;AAErG;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAC,KAAyB,EAAE,OAA0B,UAAU,EAAE;IACxG,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,KAAK,EAAE,IAAY,EAAE,EAAqC,EAAE,EAAE;QACxE,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,CAAC;YACX,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,sFAAsF;QACxF,CAAC;IACH,CAAC,CAAC;IACF,MAAM,GAAG,CAAC,8BAA8B,EAAE,IAAI,CAAC,4BAA4B,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,wBAAwB,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACvL,MAAM,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAClL,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2FAA2F;AACpF,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,YAAoB,EAAE,OAA0B,UAAU,EAAE;IACnH,IAAI,CAAC,IAAI,CAAC,uBAAuB;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AASD,MAAM,UAAU,GAAG,gCAAgC,CAAC;AACpD,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B,mFAAmF;AACnF,SAAgB,gBAAgB,CAC9B,QAA+B,EAC/B,QAA+C,UAAyC,CAAC,YAAY,EACrG,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,IAAI,CAAC,QAAQ,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC;AACjE,CAAC;AAED,mEAAmE;AACnE,SAAgB,oBAAoB,CAClC,QAA+C,UAAyC,CAAC,YAAY,EACrG,MAAc,IAAI,CAAC,GAAG,EAAE;IAExB,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC;AAKD;;;;GAIG;AACI,KAAK,UAAU,wBAAwB,CAC5C,MAAkB,EAClB,KAAyB,EACzB,WAA6C;IAE7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACxI,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,oBAAoB,CACxC,MAAkB,EAClB,UAAkB,EAClB,SAA4B,OAAO;IAEnC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAiB,qBAAqB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACzF,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC;IACjD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,IAAI,CAAC,EAAE,uBAAuB,EAAE;QAChG,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY;KAC3D,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAE,QAAoD,CAAC;AAC9H,CAAC;AAED;;;;GAIG;AACH,SAAgB,qBAAqB,CACnC,MAAkB,EAClB,SAAiB,EACjB,IAAY,EACZ,SAA4B,OAAO;IAEnC,OAAO,MAAM,CAAC,IAAI,CAAC,uBAAuB,SAAS,uBAAuB,EAAE;QAC1E,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY;QAC1D,IAAI;KACL,CAAC,CAAC;AACL,CAAC"}
|
package/dist/password-reset.d.ts
CHANGED
|
@@ -29,6 +29,11 @@ export interface ResetFlowState {
|
|
|
29
29
|
busy: boolean;
|
|
30
30
|
/** Present once the reset completes — exchange it for session cookies. */
|
|
31
31
|
ticket: string | null;
|
|
32
|
+
/**
|
|
33
|
+
* At `needs_new_password`: the security questions the user must answer first (they set some;
|
|
34
|
+
* recovery only). Empty or absent when none are required. Send the answers as `securityAnswers`.
|
|
35
|
+
*/
|
|
36
|
+
securityQuestions?: string[];
|
|
32
37
|
}
|
|
33
38
|
export declare const initialResetFlow: ResetFlowState;
|
|
34
39
|
/** Begin a reset: email the code. Returns a flow parked at `needs_email_verification`. */
|
|
@@ -41,6 +46,14 @@ export declare function startPasswordReset(client: FapiClient, email: string, ca
|
|
|
41
46
|
export declare function advancePasswordReset(client: FapiClient, state: ResetFlowState, values: {
|
|
42
47
|
code?: string;
|
|
43
48
|
password?: string;
|
|
49
|
+
securityAnswers?: Array<{
|
|
50
|
+
question: string;
|
|
51
|
+
answer: string;
|
|
52
|
+
}>;
|
|
53
|
+
},
|
|
54
|
+
/** `askQuestions`: look up the user's security questions on reaching the new-password step (`account.mfa.securityQuestions`). */
|
|
55
|
+
opts?: {
|
|
56
|
+
askQuestions?: boolean;
|
|
44
57
|
}): Promise<ResetFlowState>;
|
|
45
58
|
/** The step a reset flow is on — what the UI should collect next. */
|
|
46
59
|
export type ResetStep = 'request' | 'collect_email_code' | 'collect_second_factor' | 'collect_new_password' | 'done' | 'unknown';
|
|
@@ -50,4 +63,6 @@ export declare function resetStep(state: ResetFlowState): ResetStep;
|
|
|
50
63
|
* flow at its current status (`needs_new_password` / `needs_second_factor`
|
|
51
64
|
* once it was); unchanged while still waiting or when the server can't say.
|
|
52
65
|
*/
|
|
53
|
-
export declare function pollPasswordReset(client: FapiClient, state: ResetFlowState
|
|
66
|
+
export declare function pollPasswordReset(client: FapiClient, state: ResetFlowState, opts?: {
|
|
67
|
+
askQuestions?: boolean;
|
|
68
|
+
}): Promise<ResetFlowState>;
|
package/dist/password-reset.js
CHANGED
|
@@ -5,6 +5,7 @@ exports.startPasswordReset = startPasswordReset;
|
|
|
5
5
|
exports.advancePasswordReset = advancePasswordReset;
|
|
6
6
|
exports.resetStep = resetStep;
|
|
7
7
|
exports.pollPasswordReset = pollPasswordReset;
|
|
8
|
+
const mfa_factors_1 = require("./mfa-factors");
|
|
8
9
|
exports.initialResetFlow = {
|
|
9
10
|
attempt: null,
|
|
10
11
|
errors: [],
|
|
@@ -26,7 +27,9 @@ async function startPasswordReset(client, email, captchaToken) {
|
|
|
26
27
|
* → verification, a 2FA code → second factor, a new password → set-password. On
|
|
27
28
|
* completion the returned state carries a ticket to exchange for cookies.
|
|
28
29
|
*/
|
|
29
|
-
async function advancePasswordReset(client, state, values
|
|
30
|
+
async function advancePasswordReset(client, state, values,
|
|
31
|
+
/** `askQuestions`: look up the user's security questions on reaching the new-password step (`account.mfa.securityQuestions`). */
|
|
32
|
+
opts = {}) {
|
|
30
33
|
const attempt = state.attempt;
|
|
31
34
|
if (!attempt)
|
|
32
35
|
return state;
|
|
@@ -43,7 +46,7 @@ async function advancePasswordReset(client, state, values) {
|
|
|
43
46
|
break;
|
|
44
47
|
case 'needs_new_password':
|
|
45
48
|
path = `/v1/client/password_resets/${attempt.id}/set_new_password`;
|
|
46
|
-
body = { password: values.password ?? '' };
|
|
49
|
+
body = { password: values.password ?? '', ...(values.securityAnswers?.length ? { security_answers: values.securityAnswers } : {}) };
|
|
47
50
|
break;
|
|
48
51
|
default:
|
|
49
52
|
return state;
|
|
@@ -59,8 +62,16 @@ async function advancePasswordReset(client, state, values) {
|
|
|
59
62
|
errors: [],
|
|
60
63
|
busy: false,
|
|
61
64
|
ticket: res.data.ticket ?? null,
|
|
65
|
+
...(opts.askQuestions ? await questionsFor(client, res.data.id, res.data.status) : {}),
|
|
62
66
|
};
|
|
63
67
|
}
|
|
68
|
+
/** The security questions a reset owes once it reaches the new-password step. */
|
|
69
|
+
async function questionsFor(client, id, status) {
|
|
70
|
+
if (status !== 'needs_new_password')
|
|
71
|
+
return {};
|
|
72
|
+
const asked = await (0, mfa_factors_1.getResetSecurityQuestions)(client, id);
|
|
73
|
+
return asked?.required ? { securityQuestions: asked.questions } : {};
|
|
74
|
+
}
|
|
64
75
|
function resetStep(state) {
|
|
65
76
|
const status = state.attempt?.status;
|
|
66
77
|
if (!status)
|
|
@@ -83,13 +94,17 @@ function resetStep(state) {
|
|
|
83
94
|
* flow at its current status (`needs_new_password` / `needs_second_factor`
|
|
84
95
|
* once it was); unchanged while still waiting or when the server can't say.
|
|
85
96
|
*/
|
|
86
|
-
async function pollPasswordReset(client, state) {
|
|
97
|
+
async function pollPasswordReset(client, state, opts = {}) {
|
|
87
98
|
const attempt = state.attempt;
|
|
88
99
|
if (!attempt?.poll_secret)
|
|
89
100
|
return state;
|
|
90
101
|
const res = await client.get(`/v1/client/password_resets/${attempt.id}?poll_secret=${encodeURIComponent(attempt.poll_secret)}`);
|
|
91
102
|
if (!res.ok || !res.data)
|
|
92
103
|
return state;
|
|
93
|
-
return {
|
|
104
|
+
return {
|
|
105
|
+
...state,
|
|
106
|
+
attempt: { id: res.data.id, status: res.data.status, poll_secret: attempt.poll_secret },
|
|
107
|
+
...(opts.askQuestions ? await questionsFor(client, res.data.id, res.data.status) : {}),
|
|
108
|
+
};
|
|
94
109
|
}
|
|
95
110
|
//# sourceMappingURL=password-reset.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-reset.js","sourceRoot":"","sources":["../src/password-reset.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"password-reset.js","sourceRoot":"","sources":["../src/password-reset.ts"],"names":[],"mappings":"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"}
|