@auth0/auth0-acul-react 1.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +128 -0
- package/dist/export/getting-started.d.ts +336 -0
- package/dist/export/hooks.d.ts +1 -0
- package/dist/export/index.d.ts +6 -0
- package/dist/export/screens.d.ts +76 -0
- package/dist/hooks/common/auth0-themes.d.ts +48 -0
- package/dist/hooks/common/auth0-themes.js +2 -0
- package/dist/hooks/common/auth0-themes.js.map +1 -0
- package/dist/hooks/common/current-screen.d.ts +75 -0
- package/dist/hooks/common/current-screen.js +2 -0
- package/dist/hooks/common/current-screen.js.map +1 -0
- package/dist/hooks/common/errors.d.ts +103 -0
- package/dist/hooks/common/errors.js +2 -0
- package/dist/hooks/common/errors.js.map +1 -0
- package/dist/hooks/context/index.d.ts +120 -0
- package/dist/hooks/context/index.js +2 -0
- package/dist/hooks/context/index.js.map +1 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/utility/login-identifiers.d.ts +26 -0
- package/dist/hooks/utility/login-identifiers.js +2 -0
- package/dist/hooks/utility/login-identifiers.js.map +1 -0
- package/dist/hooks/utility/polling-manager.d.ts +93 -0
- package/dist/hooks/utility/polling-manager.js +2 -0
- package/dist/hooks/utility/polling-manager.js.map +1 -0
- package/dist/hooks/utility/resend-manager.d.ts +74 -0
- package/dist/hooks/utility/resend-manager.js +2 -0
- package/dist/hooks/utility/resend-manager.js.map +1 -0
- package/dist/hooks/utility/signup-identifiers.d.ts +34 -0
- package/dist/hooks/utility/signup-identifiers.js +2 -0
- package/dist/hooks/utility/signup-identifiers.js.map +1 -0
- package/dist/hooks/utility/validate-password.d.ts +36 -0
- package/dist/hooks/utility/validate-password.js +2 -0
- package/dist/hooks/utility/validate-password.js.map +1 -0
- package/dist/hooks/utility/validate-username.d.ts +58 -0
- package/dist/hooks/utility/validate-username.js +2 -0
- package/dist/hooks/utility/validate-username.js.map +1 -0
- package/dist/index.d.ts +78 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/screens/accept-invitation.d.ts +5 -0
- package/dist/screens/accept-invitation.js +2 -0
- package/dist/screens/accept-invitation.js.map +1 -0
- package/dist/screens/consent.d.ts +6 -0
- package/dist/screens/consent.js +2 -0
- package/dist/screens/consent.js.map +1 -0
- package/dist/screens/customized-consent.d.ts +6 -0
- package/dist/screens/customized-consent.js +2 -0
- package/dist/screens/customized-consent.js.map +1 -0
- package/dist/screens/device-code-activation-allowed.d.ts +4 -0
- package/dist/screens/device-code-activation-allowed.js +2 -0
- package/dist/screens/device-code-activation-allowed.js.map +1 -0
- package/dist/screens/device-code-activation-denied.d.ts +4 -0
- package/dist/screens/device-code-activation-denied.js +2 -0
- package/dist/screens/device-code-activation-denied.js.map +1 -0
- package/dist/screens/device-code-activation.d.ts +5 -0
- package/dist/screens/device-code-activation.js +2 -0
- package/dist/screens/device-code-activation.js.map +1 -0
- package/dist/screens/device-code-confirmation.d.ts +6 -0
- package/dist/screens/device-code-confirmation.js +2 -0
- package/dist/screens/device-code-confirmation.js.map +1 -0
- package/dist/screens/email-identifier-challenge.d.ts +8 -0
- package/dist/screens/email-identifier-challenge.js +2 -0
- package/dist/screens/email-identifier-challenge.js.map +1 -0
- package/dist/screens/email-otp-challenge.d.ts +7 -0
- package/dist/screens/email-otp-challenge.js +2 -0
- package/dist/screens/email-otp-challenge.js.map +1 -0
- package/dist/screens/email-verification-result.d.ts +4 -0
- package/dist/screens/email-verification-result.js +2 -0
- package/dist/screens/email-verification-result.js.map +1 -0
- package/dist/screens/interstitial-captcha.d.ts +4 -0
- package/dist/screens/interstitial-captcha.js +2 -0
- package/dist/screens/interstitial-captcha.js.map +1 -0
- package/dist/screens/login-email-verification.d.ts +7 -0
- package/dist/screens/login-email-verification.js +2 -0
- package/dist/screens/login-email-verification.js.map +1 -0
- package/dist/screens/login-id.d.ts +9 -0
- package/dist/screens/login-id.js +2 -0
- package/dist/screens/login-id.js.map +1 -0
- package/dist/screens/login-password.d.ts +6 -0
- package/dist/screens/login-password.js +2 -0
- package/dist/screens/login-password.js.map +1 -0
- package/dist/screens/login-passwordless-email-code.d.ts +7 -0
- package/dist/screens/login-passwordless-email-code.js +2 -0
- package/dist/screens/login-passwordless-email-code.js.map +1 -0
- package/dist/screens/login-passwordless-sms-otp.d.ts +7 -0
- package/dist/screens/login-passwordless-sms-otp.js +2 -0
- package/dist/screens/login-passwordless-sms-otp.js.map +1 -0
- package/dist/screens/login.d.ts +8 -0
- package/dist/screens/login.js +2 -0
- package/dist/screens/login.js.map +1 -0
- package/dist/screens/logout-aborted.d.ts +4 -0
- package/dist/screens/logout-aborted.js +2 -0
- package/dist/screens/logout-aborted.js.map +1 -0
- package/dist/screens/logout-complete.d.ts +4 -0
- package/dist/screens/logout-complete.js +2 -0
- package/dist/screens/logout-complete.js.map +1 -0
- package/dist/screens/logout.d.ts +5 -0
- package/dist/screens/logout.js +2 -0
- package/dist/screens/logout.js.map +1 -0
- package/dist/screens/mfa-begin-enroll-options.d.ts +5 -0
- package/dist/screens/mfa-begin-enroll-options.js +2 -0
- package/dist/screens/mfa-begin-enroll-options.js.map +1 -0
- package/dist/screens/mfa-country-codes.d.ts +6 -0
- package/dist/screens/mfa-country-codes.js +2 -0
- package/dist/screens/mfa-country-codes.js.map +1 -0
- package/dist/screens/mfa-detect-browser-capabilities.d.ts +5 -0
- package/dist/screens/mfa-detect-browser-capabilities.js +2 -0
- package/dist/screens/mfa-detect-browser-capabilities.js.map +1 -0
- package/dist/screens/mfa-email-challenge.d.ts +8 -0
- package/dist/screens/mfa-email-challenge.js +2 -0
- package/dist/screens/mfa-email-challenge.js.map +1 -0
- package/dist/screens/mfa-email-list.d.ts +6 -0
- package/dist/screens/mfa-email-list.js +2 -0
- package/dist/screens/mfa-email-list.js.map +1 -0
- package/dist/screens/mfa-enroll-result.d.ts +4 -0
- package/dist/screens/mfa-enroll-result.js +2 -0
- package/dist/screens/mfa-enroll-result.js.map +1 -0
- package/dist/screens/mfa-login-options.d.ts +5 -0
- package/dist/screens/mfa-login-options.js +2 -0
- package/dist/screens/mfa-login-options.js.map +1 -0
- package/dist/screens/mfa-otp-challenge.d.ts +6 -0
- package/dist/screens/mfa-otp-challenge.js +2 -0
- package/dist/screens/mfa-otp-challenge.js.map +1 -0
- package/dist/screens/mfa-otp-enrollment-code.d.ts +6 -0
- package/dist/screens/mfa-otp-enrollment-code.js +2 -0
- package/dist/screens/mfa-otp-enrollment-code.js.map +1 -0
- package/dist/screens/mfa-otp-enrollment-qr.d.ts +7 -0
- package/dist/screens/mfa-otp-enrollment-qr.js +2 -0
- package/dist/screens/mfa-otp-enrollment-qr.js.map +1 -0
- package/dist/screens/mfa-phone-challenge.d.ts +7 -0
- package/dist/screens/mfa-phone-challenge.js +2 -0
- package/dist/screens/mfa-phone-challenge.js.map +1 -0
- package/dist/screens/mfa-phone-enrollment.d.ts +7 -0
- package/dist/screens/mfa-phone-enrollment.js +2 -0
- package/dist/screens/mfa-phone-enrollment.js.map +1 -0
- package/dist/screens/mfa-push-challenge-push.d.ts +9 -0
- package/dist/screens/mfa-push-challenge-push.js +2 -0
- package/dist/screens/mfa-push-challenge-push.js.map +1 -0
- package/dist/screens/mfa-push-enrollment-qr.d.ts +5 -0
- package/dist/screens/mfa-push-enrollment-qr.js +2 -0
- package/dist/screens/mfa-push-enrollment-qr.js.map +1 -0
- package/dist/screens/mfa-push-list.d.ts +6 -0
- package/dist/screens/mfa-push-list.js +2 -0
- package/dist/screens/mfa-push-list.js.map +1 -0
- package/dist/screens/mfa-push-welcome.d.ts +6 -0
- package/dist/screens/mfa-push-welcome.js +2 -0
- package/dist/screens/mfa-push-welcome.js.map +1 -0
- package/dist/screens/mfa-recovery-code-challenge-new-code.d.ts +5 -0
- package/dist/screens/mfa-recovery-code-challenge-new-code.js +2 -0
- package/dist/screens/mfa-recovery-code-challenge-new-code.js.map +1 -0
- package/dist/screens/mfa-recovery-code-challenge.d.ts +6 -0
- package/dist/screens/mfa-recovery-code-challenge.js +2 -0
- package/dist/screens/mfa-recovery-code-challenge.js.map +1 -0
- package/dist/screens/mfa-recovery-code-enrollment.d.ts +5 -0
- package/dist/screens/mfa-recovery-code-enrollment.js +2 -0
- package/dist/screens/mfa-recovery-code-enrollment.js.map +1 -0
- package/dist/screens/mfa-sms-challenge.d.ts +10 -0
- package/dist/screens/mfa-sms-challenge.js +2 -0
- package/dist/screens/mfa-sms-challenge.js.map +1 -0
- package/dist/screens/mfa-sms-enrollment.d.ts +10 -0
- package/dist/screens/mfa-sms-enrollment.js +2 -0
- package/dist/screens/mfa-sms-enrollment.js.map +1 -0
- package/dist/screens/mfa-sms-list.d.ts +6 -0
- package/dist/screens/mfa-sms-list.js +2 -0
- package/dist/screens/mfa-sms-list.js.map +1 -0
- package/dist/screens/mfa-voice-challenge.d.ts +10 -0
- package/dist/screens/mfa-voice-challenge.js +2 -0
- package/dist/screens/mfa-voice-challenge.js.map +1 -0
- package/dist/screens/mfa-voice-enrollment.d.ts +7 -0
- package/dist/screens/mfa-voice-enrollment.js +2 -0
- package/dist/screens/mfa-voice-enrollment.js.map +1 -0
- package/dist/screens/mfa-webauthn-change-key-nickname.d.ts +5 -0
- package/dist/screens/mfa-webauthn-change-key-nickname.js +2 -0
- package/dist/screens/mfa-webauthn-change-key-nickname.js.map +1 -0
- package/dist/screens/mfa-webauthn-enrollment-success.d.ts +5 -0
- package/dist/screens/mfa-webauthn-enrollment-success.js +2 -0
- package/dist/screens/mfa-webauthn-enrollment-success.js.map +1 -0
- package/dist/screens/mfa-webauthn-error.d.ts +8 -0
- package/dist/screens/mfa-webauthn-error.js +2 -0
- package/dist/screens/mfa-webauthn-error.js.map +1 -0
- package/dist/screens/mfa-webauthn-not-available-error.d.ts +5 -0
- package/dist/screens/mfa-webauthn-not-available-error.js +2 -0
- package/dist/screens/mfa-webauthn-not-available-error.js.map +1 -0
- package/dist/screens/mfa-webauthn-platform-challenge.d.ts +7 -0
- package/dist/screens/mfa-webauthn-platform-challenge.js +2 -0
- package/dist/screens/mfa-webauthn-platform-challenge.js.map +1 -0
- package/dist/screens/mfa-webauthn-platform-enrollment.d.ts +8 -0
- package/dist/screens/mfa-webauthn-platform-enrollment.js +2 -0
- package/dist/screens/mfa-webauthn-platform-enrollment.js.map +1 -0
- package/dist/screens/mfa-webauthn-roaming-challenge.d.ts +7 -0
- package/dist/screens/mfa-webauthn-roaming-challenge.js +2 -0
- package/dist/screens/mfa-webauthn-roaming-challenge.js.map +1 -0
- package/dist/screens/mfa-webauthn-roaming-enrollment.d.ts +7 -0
- package/dist/screens/mfa-webauthn-roaming-enrollment.js +2 -0
- package/dist/screens/mfa-webauthn-roaming-enrollment.js.map +1 -0
- package/dist/screens/organization-picker.d.ts +9 -0
- package/dist/screens/organization-picker.js +2 -0
- package/dist/screens/organization-picker.js.map +1 -0
- package/dist/screens/organization-selection.d.ts +5 -0
- package/dist/screens/organization-selection.js +2 -0
- package/dist/screens/organization-selection.js.map +1 -0
- package/dist/screens/passkey-enrollment-local.d.ts +6 -0
- package/dist/screens/passkey-enrollment-local.js +2 -0
- package/dist/screens/passkey-enrollment-local.js.map +1 -0
- package/dist/screens/passkey-enrollment.d.ts +6 -0
- package/dist/screens/passkey-enrollment.js +2 -0
- package/dist/screens/passkey-enrollment.js.map +1 -0
- package/dist/screens/phone-identifier-challenge.d.ts +8 -0
- package/dist/screens/phone-identifier-challenge.js +2 -0
- package/dist/screens/phone-identifier-challenge.js.map +1 -0
- package/dist/screens/phone-identifier-enrollment.d.ts +6 -0
- package/dist/screens/phone-identifier-enrollment.js +2 -0
- package/dist/screens/phone-identifier-enrollment.js.map +1 -0
- package/dist/screens/redeem-ticket.d.ts +5 -0
- package/dist/screens/redeem-ticket.js +2 -0
- package/dist/screens/redeem-ticket.js.map +1 -0
- package/dist/screens/reset-password-email.d.ts +5 -0
- package/dist/screens/reset-password-email.js +2 -0
- package/dist/screens/reset-password-email.js.map +1 -0
- package/dist/screens/reset-password-error.d.ts +4 -0
- package/dist/screens/reset-password-error.js +2 -0
- package/dist/screens/reset-password-error.js.map +1 -0
- package/dist/screens/reset-password-mfa-email-challenge.d.ts +8 -0
- package/dist/screens/reset-password-mfa-email-challenge.js +2 -0
- package/dist/screens/reset-password-mfa-email-challenge.js.map +1 -0
- package/dist/screens/reset-password-mfa-otp-challenge.d.ts +6 -0
- package/dist/screens/reset-password-mfa-otp-challenge.js +2 -0
- package/dist/screens/reset-password-mfa-otp-challenge.js.map +1 -0
- package/dist/screens/reset-password-mfa-phone-challenge.d.ts +6 -0
- package/dist/screens/reset-password-mfa-phone-challenge.js +2 -0
- package/dist/screens/reset-password-mfa-phone-challenge.js.map +1 -0
- package/dist/screens/reset-password-mfa-push-challenge-push.d.ts +9 -0
- package/dist/screens/reset-password-mfa-push-challenge-push.js +2 -0
- package/dist/screens/reset-password-mfa-push-challenge-push.js.map +1 -0
- package/dist/screens/reset-password-mfa-recovery-code-challenge.d.ts +6 -0
- package/dist/screens/reset-password-mfa-recovery-code-challenge.js +2 -0
- package/dist/screens/reset-password-mfa-recovery-code-challenge.js.map +1 -0
- package/dist/screens/reset-password-mfa-sms-challenge.d.ts +9 -0
- package/dist/screens/reset-password-mfa-sms-challenge.js +2 -0
- package/dist/screens/reset-password-mfa-sms-challenge.js.map +1 -0
- package/dist/screens/reset-password-mfa-voice-challenge.d.ts +9 -0
- package/dist/screens/reset-password-mfa-voice-challenge.js +2 -0
- package/dist/screens/reset-password-mfa-voice-challenge.js.map +1 -0
- package/dist/screens/reset-password-mfa-webauthn-platform-challenge.d.ts +7 -0
- package/dist/screens/reset-password-mfa-webauthn-platform-challenge.js +2 -0
- package/dist/screens/reset-password-mfa-webauthn-platform-challenge.js.map +1 -0
- package/dist/screens/reset-password-mfa-webauthn-roaming-challenge.d.ts +7 -0
- package/dist/screens/reset-password-mfa-webauthn-roaming-challenge.js +2 -0
- package/dist/screens/reset-password-mfa-webauthn-roaming-challenge.js.map +1 -0
- package/dist/screens/reset-password-request.d.ts +7 -0
- package/dist/screens/reset-password-request.js +2 -0
- package/dist/screens/reset-password-request.js.map +1 -0
- package/dist/screens/reset-password-success.d.ts +4 -0
- package/dist/screens/reset-password-success.js +2 -0
- package/dist/screens/reset-password-success.js.map +1 -0
- package/dist/screens/reset-password.d.ts +6 -0
- package/dist/screens/reset-password.js +2 -0
- package/dist/screens/reset-password.js.map +1 -0
- package/dist/screens/signup-id.d.ts +9 -0
- package/dist/screens/signup-id.js +2 -0
- package/dist/screens/signup-id.js.map +1 -0
- package/dist/screens/signup-password.d.ts +7 -0
- package/dist/screens/signup-password.js +2 -0
- package/dist/screens/signup-password.js.map +1 -0
- package/dist/screens/signup.d.ts +10 -0
- package/dist/screens/signup.js +2 -0
- package/dist/screens/signup.js.map +1 -0
- package/dist/state/error-store.d.ts +47 -0
- package/dist/state/error-store.js +2 -0
- package/dist/state/error-store.js.map +1 -0
- package/dist/state/instance-store.d.ts +19 -0
- package/dist/state/instance-store.js +2 -0
- package/dist/state/instance-store.js.map +1 -0
- package/dist/telemetry.d.ts +8 -0
- package/dist/telemetry.js +2 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/package.json +61 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Error as Auth0Error } from '@auth0/auth0-acul-js';
|
|
2
|
+
export interface ErrorItem extends Auth0Error {
|
|
3
|
+
id: string;
|
|
4
|
+
label?: string;
|
|
5
|
+
kind?: ErrorKind;
|
|
6
|
+
}
|
|
7
|
+
export type ErrorKind = 'server' | 'client' | 'developer';
|
|
8
|
+
export declare const ERROR_KINDS: ErrorKind[];
|
|
9
|
+
type Bucket = {
|
|
10
|
+
server: ReadonlyArray<ErrorItem>;
|
|
11
|
+
client: ReadonlyArray<ErrorItem>;
|
|
12
|
+
developer: ReadonlyArray<ErrorItem>;
|
|
13
|
+
};
|
|
14
|
+
type Listener = () => void;
|
|
15
|
+
/**
|
|
16
|
+
* Global error store for ACUL (one screen per page).
|
|
17
|
+
* - Holds a single bucket of errors across the current page.
|
|
18
|
+
* - Generates stable ids for every inserted error.
|
|
19
|
+
* - Emits immutable snapshots to subscribers.
|
|
20
|
+
*/
|
|
21
|
+
declare class ErrorStore {
|
|
22
|
+
private bucket;
|
|
23
|
+
private listeners;
|
|
24
|
+
subscribe(cb: Listener): () => void;
|
|
25
|
+
snapshot(): Readonly<Bucket>;
|
|
26
|
+
/** Add ids and freeze an array of ErrorItem-like objects. */
|
|
27
|
+
private normalize;
|
|
28
|
+
/** Replace an entire kind with a new list (generating ids if needed). */
|
|
29
|
+
replace(kind: ErrorKind, list: Array<Omit<ErrorItem, 'id'> | ErrorItem>): void;
|
|
30
|
+
/**
|
|
31
|
+
* Replace only errors for a specific field within a kind.
|
|
32
|
+
* - Keeps all existing errors for other fields.
|
|
33
|
+
* - Normalizes incoming errors and replaces matching field ones.
|
|
34
|
+
*/
|
|
35
|
+
replacePartial(kind: ErrorKind, list: Array<Omit<ErrorItem, 'id'> | ErrorItem>, field: string): void;
|
|
36
|
+
/** Append one or more items to a kind. */
|
|
37
|
+
push(kind: ErrorKind, list: Omit<ErrorItem, 'id'> | ErrorItem | Array<Omit<ErrorItem, 'id'> | ErrorItem>): void;
|
|
38
|
+
/** Clear one or more kinds (default: all kinds). */
|
|
39
|
+
clear(kinds?: ErrorKind[]): void;
|
|
40
|
+
/**
|
|
41
|
+
* Remove errors that match a given id or predicate from specified kinds.
|
|
42
|
+
*/
|
|
43
|
+
remove(kinds: ErrorKind[] | undefined, test: string | ((e: ErrorItem) => boolean)): void;
|
|
44
|
+
private notify;
|
|
45
|
+
}
|
|
46
|
+
export declare const errorStore: ErrorStore;
|
|
47
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=["server","client","developer"];function t(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r].id!==t[r].id)return!1;return!0}const r=Object.freeze({server:Object.freeze([]),client:Object.freeze([]),developer:Object.freeze([])});let s=0;const i=new class{constructor(){this.bucket=r,this.listeners=new Set}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}snapshot(){return this.bucket}normalize(e){return Object.freeze(e.map(e=>Object.freeze({...e,id:e.id??`${Date.now()}-${s++}`})))}replace(e,r){const s=this.normalize(r);t(this.bucket[e],s)||(this.bucket=Object.freeze({...this.bucket,[e]:s}),this.notify())}replacePartial(e,r,s){const i=this.normalize(r),c=this.bucket[e].filter(e=>e.field!==s),n=Object.freeze([...c,...i]);t(this.bucket[e],n)||(this.bucket=Object.freeze({...this.bucket,[e]:n}),this.notify())}push(e,t){const r=Array.isArray(t)?t:[t];if(0===r.length)return;const s=Object.freeze([...this.bucket[e],...this.normalize(r)]);this.bucket=Object.freeze({...this.bucket,[e]:s}),this.notify()}clear(t=e){let r=!1;const s={...this.bucket};for(const e of t)this.bucket[e].length>0&&(s[e]=Object.freeze([]),r=!0);r&&(this.bucket=Object.freeze(s),this.notify())}remove(t=e,r){const s="string"==typeof r?e=>e.id===r:r;let i=!1;const c={...this.bucket};for(const e of t){const t=this.bucket[e].filter(e=>!s(e));t.length!==this.bucket[e].length&&(c[e]=Object.freeze(t),i=!0)}i&&(this.bucket=Object.freeze(c),this.notify())}notify(){for(const e of this.listeners)e()}};export{e as ERROR_KINDS,i as errorStore};
|
|
2
|
+
//# sourceMappingURL=error-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-store.js","sources":["../../src/state/error-store.ts"],"sourcesContent":["import type { Error as Auth0Error } from '@auth0/auth0-acul-js';\n\nexport interface ErrorItem extends Auth0Error {\n id: string;\n label?: string;\n kind?: ErrorKind;\n}\n\nexport type ErrorKind = 'server' | 'client' | 'developer';\n\nexport const ERROR_KINDS: ErrorKind[] = ['server', 'client', 'developer'];\n\ntype Bucket = {\n server: ReadonlyArray<ErrorItem>;\n client: ReadonlyArray<ErrorItem>;\n developer: ReadonlyArray<ErrorItem>;\n};\n\ntype Listener = () => void;\n\n/** Compare two error lists by id only for maximal speed. */\nfunction listsEqual(a: ReadonlyArray<ErrorItem>, b: ReadonlyArray<ErrorItem>) {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i].id !== b[i].id) return false;\n }\n return true;\n}\n\nconst EMPTY_BUCKET: Bucket = Object.freeze({\n server: Object.freeze([]),\n client: Object.freeze([]),\n developer: Object.freeze([]),\n});\n\nlet nextId = 0;\nconst genId = () => `${Date.now()}-${nextId++}`;\n\n/**\n * Global error store for ACUL (one screen per page).\n * - Holds a single bucket of errors across the current page.\n * - Generates stable ids for every inserted error.\n * - Emits immutable snapshots to subscribers.\n */\nclass ErrorStore {\n private bucket: Bucket = EMPTY_BUCKET;\n private listeners: Set<Listener> = new Set();\n\n subscribe(cb: Listener): () => void {\n this.listeners.add(cb);\n return () => this.listeners.delete(cb);\n }\n\n snapshot(): Readonly<Bucket> {\n return this.bucket;\n }\n\n /** Add ids and freeze an array of ErrorItem-like objects. */\n private normalize(\n list: Array<Omit<ErrorItem, 'id'> & { id?: string }>\n ): ReadonlyArray<ErrorItem> {\n return Object.freeze(\n list.map((e) =>\n Object.freeze({\n ...e,\n id: e.id ?? genId(),\n })\n )\n );\n }\n\n /** Replace an entire kind with a new list (generating ids if needed). */\n replace(kind: ErrorKind, list: Array<Omit<ErrorItem, 'id'> | ErrorItem>) {\n const nextList = this.normalize(list);\n if (listsEqual(this.bucket[kind], nextList)) return;\n\n this.bucket = Object.freeze({\n ...this.bucket,\n [kind]: nextList,\n });\n this.notify();\n }\n\n /**\n * Replace only errors for a specific field within a kind.\n * - Keeps all existing errors for other fields.\n * - Normalizes incoming errors and replaces matching field ones.\n */\n replacePartial(kind: ErrorKind, list: Array<Omit<ErrorItem, 'id'> | ErrorItem>, field: string) {\n const incoming = this.normalize(list);\n const existing = this.bucket[kind].filter((e) => e.field !== field);\n const nextKindList = Object.freeze([...existing, ...incoming]);\n\n if (listsEqual(this.bucket[kind], nextKindList)) return;\n\n this.bucket = Object.freeze({\n ...this.bucket,\n [kind]: nextKindList,\n });\n this.notify();\n }\n\n /** Append one or more items to a kind. */\n push(\n kind: ErrorKind,\n list: Omit<ErrorItem, 'id'> | ErrorItem | Array<Omit<ErrorItem, 'id'> | ErrorItem>\n ) {\n const arr = Array.isArray(list) ? list : [list];\n if (arr.length === 0) return;\n\n const nextKindList = Object.freeze([...this.bucket[kind], ...this.normalize(arr)]);\n this.bucket = Object.freeze({\n ...this.bucket,\n [kind]: nextKindList,\n });\n this.notify();\n }\n\n /** Clear one or more kinds (default: all kinds). */\n clear(kinds: ErrorKind[] = ERROR_KINDS) {\n let changed = false;\n const next: Bucket = { ...this.bucket };\n\n for (const k of kinds) {\n if (this.bucket[k].length > 0) {\n next[k] = Object.freeze([]);\n changed = true;\n }\n }\n\n if (!changed) return;\n this.bucket = Object.freeze(next);\n this.notify();\n }\n\n /**\n * Remove errors that match a given id or predicate from specified kinds.\n */\n remove(kinds: ErrorKind[] = ERROR_KINDS, test: string | ((e: ErrorItem) => boolean)) {\n const isMatch = typeof test === 'string' ? (e: ErrorItem) => e.id === test : test;\n\n let changed = false;\n const next: Bucket = { ...this.bucket };\n\n for (const k of kinds) {\n const filtered = this.bucket[k].filter((e) => !isMatch(e));\n if (filtered.length !== this.bucket[k].length) {\n next[k] = Object.freeze(filtered);\n changed = true;\n }\n }\n\n if (!changed) return;\n this.bucket = Object.freeze(next);\n this.notify();\n }\n\n private notify() {\n for (const cb of this.listeners) cb();\n }\n}\n\nexport const errorStore = new ErrorStore();\n"],"names":["ERROR_KINDS","listsEqual","a","b","length","i","id","EMPTY_BUCKET","Object","freeze","server","client","developer","nextId","errorStore","constructor","this","bucket","listeners","Set","subscribe","cb","add","delete","snapshot","normalize","list","map","e","Date","now","replace","kind","nextList","notify","replacePartial","field","incoming","existing","filter","nextKindList","push","arr","Array","isArray","clear","kinds","changed","next","k","remove","test","isMatch","filtered"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type ScreenConstructor<T> = {
|
|
2
|
+
new (): T;
|
|
3
|
+
screenIdentifier: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Register a screen class. If its identifier matches the current screen,
|
|
7
|
+
* instantiate it immediately and store as the singleton.
|
|
8
|
+
* Returns the instance if created, or null otherwise.
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerScreen<T>(Constructor: ScreenConstructor<T>): T | null;
|
|
11
|
+
/**
|
|
12
|
+
* Get the current screen instance (throws if not initialized).
|
|
13
|
+
*/
|
|
14
|
+
export declare function getScreen<T>(): T;
|
|
15
|
+
/**
|
|
16
|
+
* Clear the current instance.
|
|
17
|
+
*/
|
|
18
|
+
export declare function clearScreen(): void;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{getCurrentScreenOptions as e}from"@auth0/auth0-acul-js";let n=null;function r(r){const t=e();return t.screen?.name===r.screenIdentifier?(n||(n=new r),n):null}function t(){if(!n)throw new Error("No active screen instance has been initialized");return n}export{t as getScreen,r as registerScreen};
|
|
2
|
+
//# sourceMappingURL=instance-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-store.js","sources":["../../src/state/instance-store.ts"],"sourcesContent":["import { getCurrentScreenOptions } from '@auth0/auth0-acul-js';\n\nlet instance: unknown = null;\n\ntype ScreenConstructor<T> = { new (): T; screenIdentifier: string };\n\n/**\n * Register a screen class. If its identifier matches the current screen,\n * instantiate it immediately and store as the singleton.\n * Returns the instance if created, or null otherwise.\n */\nexport function registerScreen<T>(Constructor: ScreenConstructor<T>): T | null {\n const current = getCurrentScreenOptions();\n\n if (current.screen?.name === Constructor.screenIdentifier) {\n if (!instance) {\n instance = new Constructor();\n }\n return instance as T;\n }\n\n // Not the active screen, just ignore\n return null;\n}\n\n/**\n * Get the current screen instance (throws if not initialized).\n */\nexport function getScreen<T>(): T {\n if (!instance) {\n throw new Error('No active screen instance has been initialized');\n }\n return instance as T;\n}\n\n/**\n * Clear the current instance.\n */\nexport function clearScreen(): void {\n instance = null;\n}\n"],"names":["instance","registerScreen","Constructor","current","getCurrentScreenOptions","screen","name","screenIdentifier","getScreen","Error"],"mappings":"+DAEA,IAAIA,EAAoB,KASlB,SAAUC,EAAkBC,GAChC,MAAMC,EAAUC,IAEhB,OAAID,EAAQE,QAAQC,OAASJ,EAAYK,kBAClCP,IACHA,EAAW,IAAIE,GAEVF,GAIF,IACT,UAKgBQ,IACd,IAAKR,EACH,MAAM,IAAIS,MAAM,kDAElB,OAAOT,CACT"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telemetry initialization for Auth0 ACUL React SDK
|
|
3
|
+
*
|
|
4
|
+
* Sets global telemetry values that the Core SDK will use at runtime.
|
|
5
|
+
* This must run BEFORE any Core SDK screens are imported.
|
|
6
|
+
*
|
|
7
|
+
* Note: __SDK_NAME__ and __SDK_VERSION__ are replaced at build time by rollup
|
|
8
|
+
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sources":["../src/telemetry.ts"],"sourcesContent":["/**\n * Telemetry initialization for Auth0 ACUL React SDK\n *\n * Sets global telemetry values that the Core SDK will use at runtime.\n * This must run BEFORE any Core SDK screens are imported.\n *\n * Note: __SDK_NAME__ and __SDK_VERSION__ are replaced at build time by rollup\n */\n\n// Set global telemetry values for Core SDK to pick up\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n(globalThis as any).__ACUL_SDK_NAME__ = __SDK_NAME__;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n(globalThis as any).__ACUL_SDK_VERSION__ = __SDK_VERSION__;\n"],"names":["globalThis","__ACUL_SDK_NAME__","__ACUL_SDK_VERSION__"],"mappings":"AAWCA,WAAmBC,kBAAoB,0BAEvCD,WAAmBE,qBAAuB"}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@auth0/auth0-acul-react",
|
|
3
|
+
"version": "1.0.0-alpha.0",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "npm run clean && npm run lint && npm run test && rollup -c rollup.config.mjs",
|
|
9
|
+
"clean": "rm -rf dist",
|
|
10
|
+
"test": "jest --verbose tests/**/* --coverage",
|
|
11
|
+
"generate:sdk": "tsx ./scripts/generate-sdk/index.ts",
|
|
12
|
+
"generate:examples": "tsx ./scripts/generate-examples.ts",
|
|
13
|
+
"generate:screen-tests": "tsx ./scripts/generate-screen-tests.ts",
|
|
14
|
+
"lint": "eslint src --ext .ts,.tsx",
|
|
15
|
+
"lint:fix": "eslint src --ext .ts,.tsx --fix",
|
|
16
|
+
"docs": "typedoc --options typedoc.js",
|
|
17
|
+
"postbuild": "npm run docs"
|
|
18
|
+
},
|
|
19
|
+
"author": "Auth0",
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"description": "The Auth0 ACUL React SDK enables you to build Advanced Customization for Universal Login with React hooks and components.",
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"react": "^18.3.1"
|
|
27
|
+
},
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"import": "./dist/index.js",
|
|
31
|
+
"types": "./dist/index.d.ts"
|
|
32
|
+
},
|
|
33
|
+
"./types": {
|
|
34
|
+
"types": "./dist/types/index.d.ts"
|
|
35
|
+
},
|
|
36
|
+
"./*": {
|
|
37
|
+
"import": "./dist/screens/*.js",
|
|
38
|
+
"types": "./dist/screens/*.d.ts"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@rollup/plugin-replace": "^6.0.2",
|
|
43
|
+
"@testing-library/jest-dom": "^6.0.0",
|
|
44
|
+
"@testing-library/react": "^14.0.0",
|
|
45
|
+
"@types/react": "^18.3.24",
|
|
46
|
+
"eslint-plugin-react": "^7.37.5",
|
|
47
|
+
"ts-node": "^10.9.2"
|
|
48
|
+
},
|
|
49
|
+
"dependencies": {
|
|
50
|
+
"@auth0/auth0-acul-js": "1.0.0-alpha.0"
|
|
51
|
+
},
|
|
52
|
+
"files": [
|
|
53
|
+
"dist",
|
|
54
|
+
"package.json",
|
|
55
|
+
"README.md",
|
|
56
|
+
"LICENSE"
|
|
57
|
+
],
|
|
58
|
+
"publishConfig": {
|
|
59
|
+
"access": "public"
|
|
60
|
+
}
|
|
61
|
+
}
|