@seamless-auth/react 0.8.0 → 0.10.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 CHANGED
@@ -1,5 +1,88 @@
1
1
  # @seamless-auth/react
2
2
 
3
+ ## 0.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 17a657d: Let a caller choose where a magic link lands.
8
+
9
+ `requestMagicLink` takes an optional `redirectUri`. A deployment serving both a web
10
+ app and a mobile app previously had one destination for every magic link, so a link
11
+ had to arrive in one or the other.
12
+
13
+ The value goes in the request body the client already sends. The deployment validates
14
+ it against its configured origins and refuses anything else, so this cannot be used to
15
+ point a link on the tenant's domain somewhere it should not go, and a refusal comes
16
+ back as an ordinary error result.
17
+
18
+ Omit it and nothing changes: the same empty body is sent, so the destination stays the
19
+ deployment's own and no caller has to do anything.
20
+
21
+ Needs a `@seamless-auth/server` adapter that forwards the field and an auth API that
22
+ understands it. Against older versions the value is dropped and the link keeps the
23
+ deployment's destination, which is the behaviour today.
24
+
25
+ - 4199d52: Add `getPasskeyPolicyErrorCode()`, which reads the code a refused passkey
26
+ registration carries (`attachment_not_allowed`, `synced_passkey_not_allowed`,
27
+ `authenticator_not_allowed`, or `prf_required`) so an app can explain the
28
+ refusal instead of rendering the raw code from `error.message`. Unrecognized
29
+ codes return `undefined`, so a refusal from a newer API keeps your generic
30
+ messaging.
31
+
32
+ The `PasskeyPolicyErrorCode` union is derived from `WebAuthnErrorCode` in
33
+ `@seamless-auth/types`, so the codes this recognizes cannot drift from the ones
34
+ the API sends.
35
+
36
+ This matters on a default deployment: the API's
37
+ `authenticator_policy.syncedPasskeys` defaults to `block`, and passkeys created
38
+ by iCloud Keychain or Google Password Manager are backup eligible, so the most
39
+ common consumer passkey is refused at registration.
40
+
41
+ - 8690cb0: Drop the naming step from the bundled passkey enrolment view.
42
+
43
+ Choosing "Register Passkey" (or "Use a security key instead") opened a modal asking for a
44
+ friendly name, and the browser's own passkey prompt only appeared once that form was
45
+ submitted. A user who came to the screen to press one button was handed a text field
46
+ first, at the point in the flow where they had the least idea what to type.
47
+
48
+ Registration now starts on the click. The credential still carries a `friendlyName`, and
49
+ the view fills it with the device the passkey was enrolled on (`mac • chrome`), which is
50
+ what the naming prompt suggested people write anyway. Renaming stays available through
51
+ `updateCredential`.
52
+
53
+ Nothing in the public API moves: `PasskeyMetadata.friendlyName` is unchanged and callers
54
+ building their own enrolment screen keep setting it themselves. Only the bundled
55
+ `/register-passkey` view changes, so an adopter relying on that screen to collect a name
56
+ needs their own screen for it.
57
+
58
+ - fa27861: `registerPasskey()` accepts an `attachment`, so a caller can ask for a roaming
59
+ authenticator (`cross-platform`, a USB or NFC security key) or the one built
60
+ into the device (`platform`) instead of leaving the choice to the browser's
61
+ picker. The bundled enrolment view offers a "Use a security key instead" control
62
+ that takes this path, and explains a policy refusal rather than showing a
63
+ generic failure.
64
+
65
+ Omitting the option sends no query parameter, so the deployment's
66
+ `authenticator_policy.attachment` stays in charge and current behaviour is
67
+ unchanged. It is a request rather than an override: a deployment that pins the
68
+ other kind refuses the registration with `attachment_not_allowed`, which
69
+ `getPasskeyPolicyErrorCode()` reads.
70
+
71
+ `PasskeyAttachment` is exported, and is derived from the deployment policy type
72
+ in `@seamless-auth/types` rather than restating its members.
73
+
74
+ ## 0.9.0
75
+
76
+ ### Minor Changes
77
+
78
+ - 4ea4fd0: feat(styles): make the built-in auth UI themeable with CSS custom properties
79
+
80
+ Every colour in the bundled screens now reads from a `--seamless-*` custom property with the previous
81
+ literal as its fallback, so consumers can match the auth UI to their brand by setting variables on
82
+ `:root` or on any ancestor of `<AuthRoutes />`.
83
+
84
+ This is opt-in and non-breaking. Applications that set nothing render exactly as before.
85
+
3
86
  ## 0.8.0
4
87
 
5
88
  ### Minor Changes
package/README.md CHANGED
@@ -20,6 +20,7 @@
20
20
  - `SeamlessAuthError`, the error type carried on a failed result
21
21
  - `getOAuthErrorCode()`, which reads the known OAuth callback failure codes off that error
22
22
  - `getWebAuthnErrorDetail()`, which reads the underlying failure of a passkey or step-up ceremony
23
+ - `getPasskeyPolicyErrorCode()`, which reads the code the API refused a passkey registration with
23
24
  - types including `AuthContextType`, `Credential`, `User`, `OAuthProvider`, `StepUpStatus`, the `SeamlessAuthResult` wrapper, and the headless client input/result types
24
25
 
25
26
  ## Installation
@@ -553,6 +554,86 @@ switch (detail?.name) {
553
554
  `getWebAuthnErrorDetail()` returns `undefined` for any error that did not come from a ceremony, so an
554
555
  HTTP failure keeps flowing through `error.message` and `error.body` as usual.
555
556
 
557
+ ### Choosing the authenticator
558
+
559
+ By default the browser offers every kind of authenticator the deployment enrols, which is what
560
+ `authenticator_policy.attachment: 'any'` means on the API. Pass `attachment` to narrow the picker to
561
+ one kind, for example to send someone straight to an issued security key rather than leaving them to
562
+ find it in a browser dialog:
563
+
564
+ ```ts
565
+ import { getPasskeyPolicyErrorCode } from '@seamless-auth/react';
566
+
567
+ const { error } = await authClient.registerPasskey({
568
+ metadata,
569
+ attachment: 'cross-platform',
570
+ });
571
+
572
+ if (getPasskeyPolicyErrorCode(error) === 'attachment_not_allowed') {
573
+ // This deployment pins the other kind. Fall back to the default path.
574
+ }
575
+ ```
576
+
577
+ `'cross-platform'` is a roaming authenticator such as a USB or NFC security key. `'platform'` is the
578
+ one built into the device, such as Touch ID or Windows Hello. Omit the option to leave the choice to
579
+ the deployment.
580
+
581
+ This is a request, not an override. A deployment that has pinned
582
+ `authenticator_policy.attachment` to the other kind refuses the registration with
583
+ `attachment_not_allowed`, covered below. The bundled enrolment view offers a "Use a security key
584
+ instead" control that takes this path.
585
+
586
+ ### Passkey policy refusals
587
+
588
+ A registration can also be refused by the policy the API is configured with. `registerPasskey()`
589
+ then fails with a body whose `error` is a stable code rather than a sentence, so rendering
590
+ `error.message` would put that code in front of a user. Use `getPasskeyPolicyErrorCode()` to branch
591
+ on it:
592
+
593
+ ```ts
594
+ import { getPasskeyPolicyErrorCode } from '@seamless-auth/react';
595
+
596
+ const { error } = await authClient.registerPasskey({ token, metadata });
597
+
598
+ switch (getPasskeyPolicyErrorCode(error)) {
599
+ case 'attachment_not_allowed':
600
+ // The requested `attachment` is not the kind this deployment enrols.
601
+ break;
602
+ case 'synced_passkey_not_allowed':
603
+ // This passkey syncs to iCloud Keychain or Google Password Manager, and
604
+ // this deployment requires a device-bound one such as a security key.
605
+ break;
606
+ case 'authenticator_not_allowed':
607
+ // This authenticator model is not permitted here.
608
+ break;
609
+ case 'prf_required':
610
+ // Registration asked for PRF and the authenticator does not support it.
611
+ break;
612
+ default:
613
+ // No error, or one without a recognized code. Fall back to error?.message.
614
+ break;
615
+ }
616
+ ```
617
+
618
+ | Code | Stage | Status | When the API sends it |
619
+ | ---------------------------- | --------------- | ------ | -------------------------------------------------------------------------------------------- |
620
+ | `attachment_not_allowed` | register/start | 400 | the requested `attachment` is not the kind `authenticator_policy.attachment` pins |
621
+ | `synced_passkey_not_allowed` | register/finish | 403 | `authenticator_policy.syncedPasskeys` is `block` and the credential is backup eligible |
622
+ | `authenticator_not_allowed` | register/finish | 403 | the credential's AAGUID is on `aaguidDenyList`, or absent from a non-empty `aaguidAllowList` |
623
+ | `prf_required` | register/finish | 403 | registration required PRF and the credential did not report support for it |
624
+
625
+ `attachment_not_allowed` is refused before any ceremony runs, so the browser never prompts. The rest
626
+ are refused after a credential exists and can be inspected.
627
+
628
+ `syncedPasskeys` defaults to `block` on the Seamless Auth API. Passkeys created by iCloud Keychain
629
+ and Google Password Manager are backup eligible, so on a default deployment the most common consumer
630
+ passkey is refused at registration. If that is not what you want, set
631
+ `authenticator_policy.syncedPasskeys` to `allow` in the API's system config; the SDK cannot relax it
632
+ from the client.
633
+
634
+ Like `getOAuthErrorCode()`, this returns `undefined` for anything it does not recognize, including
635
+ codes added by a newer API, so an unexpected refusal keeps your generic messaging.
636
+
556
637
  The single exception is `isPasskeySupported`-style capability checks:
557
638
  `isPasskeyPrfSupported(): Promise<boolean>` is a local check rather than a request, so it returns a
558
639
  plain boolean.
@@ -849,6 +930,69 @@ Two paths are unchanged because they are owned by contracts outside this package
849
930
  - `/oauth/callback` is registered with OAuth providers as an allowed redirect URI, so renaming it
850
931
  would break configured integrations.
851
932
 
933
+ ## Theming The Built-In UI
934
+
935
+ Every colour in the built-in screens is a CSS custom property with a fallback, so the default look is
936
+ unchanged if you set nothing. To match your brand, set the tokens you care about on `:root`, or on any
937
+ element that wraps `<AuthRoutes />`.
938
+
939
+ ```css
940
+ :root {
941
+ --seamless-accent: #1f3a34;
942
+ --seamless-accent-hover: #16302b;
943
+ --seamless-surface: #f7f5f0;
944
+ --seamless-text: #1a1a1a;
945
+ }
946
+ ```
947
+
948
+ Scoping to a wrapper also works, which is useful when the auth screens should look different from the
949
+ rest of the app:
950
+
951
+ ```css
952
+ .auth-shell {
953
+ --seamless-accent: #1f3a34;
954
+ --seamless-accent-soft: #3c6f63;
955
+ }
956
+ ```
957
+
958
+ There is no provider prop or JavaScript API for this. Setting the variables is the whole interface.
959
+
960
+ ### Tokens
961
+
962
+ | Token | Used for | Default |
963
+ | ---------------------------- | ---------------------------------------------------------------------- | --------------------------------------------- |
964
+ | `--seamless-accent` | Primary buttons, focus rings, selected states, accent borders, spinner | `#2563eb` fills, `#3b82f6` rings and borders |
965
+ | `--seamless-accent-hover` | Hover state of primary buttons | `#1d4ed8` |
966
+ | `--seamless-accent-contrast` | Label text on accent-filled buttons | `white` |
967
+ | `--seamless-accent-soft` | Links, toggle buttons, accent icons | `#60a5fa`, `#a5b4fc` on the magic-link screen |
968
+ | `--seamless-surface` | Card and modal backgrounds | `#1f2937` |
969
+ | `--seamless-surface-raised` | Inputs and panels sitting on a card | `#374151`, `#4b5563` on the login form |
970
+ | `--seamless-surface-hover` | Hover state of secondary buttons | `#4b5563` |
971
+ | `--seamless-border` | Input, button, and panel borders | `#4b5563`, `#d1d5db` |
972
+ | `--seamless-text` | Headings and body text | `white` |
973
+ | `--seamless-text-muted` | Labels, helper text, secondary copy | `#9ca3af`, `#d1d5db` |
974
+ | `--seamless-disabled` | Background of disabled submit buttons | `#9ca3af` |
975
+ | `--seamless-danger` | Error messages | `#f87171` |
976
+ | `--seamless-success` | Success messages and the verified check icon | `#34d399` |
977
+ | `--seamless-warning` | OTP countdown and resend timers | `#facc15` |
978
+ | `--seamless-overlay` | Modal backdrop scrim | `rgba(0, 0, 0, 0.45)` |
979
+ | `--seamless-shadow` | Card and modal shadow colour | `rgba(0, 0, 0, 0.1)` to `rgba(0, 0, 0, 0.4)` |
980
+
981
+ ### Notes
982
+
983
+ - Where the original design used near-duplicate shades for the same role, each declaration keeps its
984
+ own original value as the fallback. That is why some rows list more than one default. Nothing shifts
985
+ until you set the token, and once you do, every use of that role picks up your value.
986
+ - `--seamless-shadow` is the shadow colour only. Offsets and blur are fixed. Setting it applies one
987
+ colour to every shadow in the built-in UI, replacing the per-screen alpha values.
988
+ - If you set `--seamless-surface` to a light colour, set `--seamless-text` too. The default text
989
+ colour is white and will disappear otherwise.
990
+ - Two decorative tints are deliberately not tokenised: the pulse ring behind the magic-link mail icon
991
+ and the disc behind the success check. Both are translucent and sit directly under an icon, so an
992
+ opaque override would hide the icon it is meant to frame.
993
+ - The package ships one palette and no `prefers-color-scheme` rules. If you want the auth UI to follow
994
+ the system theme, wrap your own overrides in a media query.
995
+
852
996
  ## Backend Expectations
853
997
 
854
998
  This package assumes a Seamless Auth-compatible backend with the auth adapter mounted at `/auth`.
@@ -904,6 +1048,11 @@ The state-changing OTP and magic-link request routes are `POST` (marked above).
904
1048
  email sends to a signed-in user. Using `@seamless-auth/react` with an older adapter that only serves the
905
1049
  `GET` forms returns a 404 for those requests. See the changelog for the minimum adapter version.
906
1050
 
1051
+ `/webAuthn/register/finish` can refuse a verified credential on policy grounds with a `403` whose
1052
+ body is a stable code. `syncedPasskeys` defaults to `block`, which refuses every backup-eligible
1053
+ passkey, so this is reachable on a default deployment. See
1054
+ [Passkey policy refusals](#passkey-policy-refusals).
1055
+
907
1056
  ## Notes
908
1057
 
909
1058
  - This package does not create its own `<BrowserRouter>`.
@@ -1,4 +1,4 @@
1
- import type { AddOrganizationMemberRequest, CreateOrganizationRequest, CredentialUpdateResponse, LoginMethod as LoginMethodShape, LoginSuccessResponse, LogoutScope as LogoutScopeShape, MeResponse, MessageResponse, OAuthProvidersResponse, OrganizationEnvelopeResponse, OrganizationListResponse, OrganizationMembersResponse, OrganizationMembershipEnvelopeResponse, OrganizationSwitchResponse, PublicOAuthProvider, PublicSystemConfigResponse, RegistrationRequest, StartOAuthLoginResponse, StepUpMethod as StepUpMethodShape, StepUpStatus as StepUpStatusShape, TotpEnrollmentStartResponse, TotpStatus as TotpStatusShape, UpdateOrganizationMemberRequest, UpdateOrganizationRequest } from '@seamless-auth/types';
1
+ import type { AddOrganizationMemberRequest, AuthenticatorAttachmentPolicy, CreateOrganizationRequest, CredentialUpdateResponse, LoginMethod as LoginMethodShape, LoginSuccessResponse, LogoutScope as LogoutScopeShape, MeResponse, MessageResponse, OAuthProvidersResponse, OrganizationEnvelopeResponse, OrganizationListResponse, OrganizationMembersResponse, OrganizationMembershipEnvelopeResponse, OrganizationSwitchResponse, PublicOAuthProvider, PublicSystemConfigResponse, RegistrationRequest, StartOAuthLoginResponse, StepUpMethod as StepUpMethodShape, StepUpStatus as StepUpStatusShape, TotpEnrollmentStartResponse, TotpStatus as TotpStatusShape, UpdateOrganizationMemberRequest, UpdateOrganizationRequest } from '@seamless-auth/types';
2
2
  import { type SeamlessAuthResult } from './result';
3
3
  import { PasskeyPrfInput, PasskeyPrfResult } from './webauthnPrf';
4
4
  export interface SeamlessAuthClientOptions {
@@ -69,10 +69,27 @@ export interface PasskeyRegistrationData {
69
69
  }
70
70
  /** Response body returned when credential metadata is updated. */
71
71
  export type CredentialUpdateResult = CredentialUpdateResponse;
72
+ /**
73
+ * Which kind of authenticator to offer at registration. Omitting it leaves the
74
+ * choice to the deployment's `authenticator_policy.attachment`, which offers
75
+ * both kinds by default.
76
+ *
77
+ * Derived from the deployment policy type rather than restating its members:
78
+ * `any` is a standing default a deployment sets, not something a single request
79
+ * can ask for, so the request type is that policy minus that one member.
80
+ */
81
+ export type PasskeyAttachment = Exclude<AuthenticatorAttachmentPolicy, 'any'>;
72
82
  export interface RegisterPasskeyOptions {
73
83
  metadata: PasskeyMetadata;
74
84
  requestPrf?: boolean;
75
85
  requirePrf?: boolean;
86
+ /**
87
+ * Narrows the browser picker to one kind of authenticator, for example
88
+ * `cross-platform` to send a user straight to an issued security key. A
89
+ * deployment that has pinned a different kind refuses this, so it is a
90
+ * request rather than an override.
91
+ */
92
+ attachment?: PasskeyAttachment;
76
93
  }
77
94
  export type StepUpMethod = StepUpMethodShape;
78
95
  export type TotpStatus = TotpStatusShape;
@@ -114,7 +131,13 @@ export interface SeamlessAuthClient {
114
131
  verifyEmailOtp: (verificationToken: string) => Promise<SeamlessAuthResult<MessageResult>>;
115
132
  requestLoginEmailOtp: () => Promise<SeamlessAuthResult<MessageResult>>;
116
133
  verifyLoginEmailOtp: (verificationToken: string) => Promise<SeamlessAuthResult<MessageResult>>;
117
- requestMagicLink: () => Promise<SeamlessAuthResult<MessageResult>>;
134
+ /**
135
+ * @param redirectUri Where the emailed link should land. The deployment validates
136
+ * it against its configured origins and refuses anything else, so a tenant serving
137
+ * a web app and a mobile app can send each to its own destination. Omit it to keep
138
+ * the deployment's single destination.
139
+ */
140
+ requestMagicLink: (redirectUri?: string) => Promise<SeamlessAuthResult<MessageResult>>;
118
141
  checkMagicLink: () => Promise<SeamlessAuthResult<MessageResult>>;
119
142
  verifyMagicLink: (token: string) => Promise<SeamlessAuthResult<MessageResult>>;
120
143
  listOAuthProviders: () => Promise<SeamlessAuthResult<OAuthProvidersResult>>;
@@ -1,4 +1,4 @@
1
- import type { OAuthErrorCode as OAuthErrorCodeShape } from '@seamless-auth/types';
1
+ import type { OAuthErrorCode as OAuthErrorCodeShape, WebAuthnErrorCode as WebAuthnErrorCodeShape } from '@seamless-auth/types';
2
2
  /**
3
3
  * Error carrying the auth server's response detail, so callers can map known
4
4
  * failures to their own messaging instead of only seeing a generic string.
@@ -29,6 +29,28 @@ export type OAuthErrorCode = OAuthErrorCodeShape;
29
29
  * downgrade OAuth messaging to a generic failure.
30
30
  */
31
31
  export declare function getOAuthErrorCode(error: unknown): OAuthErrorCode | undefined;
32
+ /**
33
+ * Machine-readable codes registration is refused with when a deployment will not
34
+ * enrol the authenticator on policy grounds.
35
+ *
36
+ * `attachment_not_allowed` comes from register/start with a `400`, before any
37
+ * ceremony runs. The rest come from register/finish with a `403`, once the
38
+ * credential exists and can be inspected.
39
+ */
40
+ export type PasskeyPolicyErrorCode = Extract<WebAuthnErrorCodeShape, 'attachment_not_allowed' | 'synced_passkey_not_allowed' | 'authenticator_not_allowed' | 'prf_required'>;
41
+ /**
42
+ * Read the passkey policy refusal off a registration error, from either stage of
43
+ * the ceremony. Returns `undefined` for anything unrecognized, including codes
44
+ * added by a newer API, so callers keep their generic messaging instead of
45
+ * showing a raw code.
46
+ *
47
+ * The auth API sends the code as the whole of `error`, which is also what
48
+ * becomes `error.message`. A proxy in front of it may instead derive a
49
+ * human-readable `error` and keep the upstream body under `details`, so an
50
+ * unrecognized top-level value falls through to the nested one rather than
51
+ * ending the lookup.
52
+ */
53
+ export declare function getPasskeyPolicyErrorCode(error: unknown): PasskeyPolicyErrorCode | undefined;
32
54
  /**
33
55
  * Detail recovered from a failed WebAuthn ceremony.
34
56
  *
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { AuthContextType, AuthProvider, useAuth } from './AuthProvider';
2
2
  import { AuthRoutes } from './AuthRoutes';
3
- import { createSeamlessAuthClient, CredentialUpdateResult, CreateOrganizationInput, CurrentUserResult, FinishOAuthLoginInput, LoginInput, LoginMethod, LoginStartResult, MessageResult, OAuthProvider, OAuthProvidersResult, PublicSystemConfigResult, OrganizationMemberInput, OrganizationMemberUpdateInput, OrganizationMembersResult, OrganizationMembershipResult, OrganizationResult, OrganizationSwitchResult, OrganizationsResult, PasskeyLoginData, PasskeyMetadata, PasskeyRegistrationData, RegisterInput, RegisterPasskeyOptions, SeamlessAuthClient, SeamlessAuthClientOptions, StartOAuthLoginInput, StartOAuthLoginResult, StepUpMethod, StepUpStatus, StepUpPrfData, TotpEnrollmentStartResult, TotpStatus, UpdateOrganizationInput } from './client/createSeamlessAuthClient';
4
- import { getOAuthErrorCode, getWebAuthnErrorDetail, OAuthErrorCode, SeamlessAuthError, WebAuthnErrorDetail } from './client/errors';
3
+ import { createSeamlessAuthClient, CredentialUpdateResult, CreateOrganizationInput, CurrentUserResult, FinishOAuthLoginInput, LoginInput, LoginMethod, LoginStartResult, MessageResult, OAuthProvider, OAuthProvidersResult, PublicSystemConfigResult, OrganizationMemberInput, OrganizationMemberUpdateInput, OrganizationMembersResult, OrganizationMembershipResult, OrganizationResult, OrganizationSwitchResult, OrganizationsResult, PasskeyLoginData, PasskeyAttachment, PasskeyMetadata, PasskeyRegistrationData, RegisterInput, RegisterPasskeyOptions, SeamlessAuthClient, SeamlessAuthClientOptions, StartOAuthLoginInput, StartOAuthLoginResult, StepUpMethod, StepUpStatus, StepUpPrfData, TotpEnrollmentStartResult, TotpStatus, UpdateOrganizationInput } from './client/createSeamlessAuthClient';
4
+ import { getOAuthErrorCode, getPasskeyPolicyErrorCode, getWebAuthnErrorDetail, OAuthErrorCode, PasskeyPolicyErrorCode, SeamlessAuthError, WebAuthnErrorDetail } from './client/errors';
5
5
  import type { SeamlessAuthResult } from './client/result';
6
6
  import { encodePrfSalt, extractPasskeyPrfResult, isPasskeyPrfSupported, PasskeyPrfInput, PasskeyPrfResult } from './client/webauthnPrf';
7
7
  import { useAuthClient } from './hooks/useAuthClient';
@@ -9,5 +9,5 @@ import { hasNonPasskeyLoginMethod, useLoginMethods } from './hooks/useLoginMetho
9
9
  import { usePasskeySupport } from './hooks/usePasskeySupport';
10
10
  import { hasScopedRole, roleGrantsAccess } from './scopedRoles';
11
11
  import { Credential, Organization, OrganizationMembership, User } from './types';
12
- export { AuthProvider, AuthRoutes, createSeamlessAuthClient, encodePrfSalt, extractPasskeyPrfResult, getOAuthErrorCode, getWebAuthnErrorDetail, hasNonPasskeyLoginMethod, hasScopedRole, isPasskeyPrfSupported, roleGrantsAccess, SeamlessAuthError, useAuth, useAuthClient, useLoginMethods, usePasskeySupport, };
13
- export type { CredentialUpdateResult, AuthContextType, Credential, CreateOrganizationInput, CurrentUserResult, FinishOAuthLoginInput, LoginInput, LoginMethod, LoginStartResult, MessageResult, OAuthErrorCode, OAuthProvider, OAuthProvidersResult, Organization, OrganizationMemberInput, OrganizationMembership, OrganizationMemberUpdateInput, OrganizationMembersResult, OrganizationMembershipResult, OrganizationResult, OrganizationSwitchResult, OrganizationsResult, PasskeyLoginData, PasskeyMetadata, PasskeyPrfInput, PasskeyPrfResult, PasskeyRegistrationData, PublicSystemConfigResult, RegisterInput, RegisterPasskeyOptions, SeamlessAuthClient, SeamlessAuthClientOptions, SeamlessAuthResult, StartOAuthLoginInput, StartOAuthLoginResult, StepUpMethod, StepUpStatus, StepUpPrfData, TotpEnrollmentStartResult, TotpStatus, UpdateOrganizationInput, User, WebAuthnErrorDetail, };
12
+ export { AuthProvider, AuthRoutes, createSeamlessAuthClient, encodePrfSalt, extractPasskeyPrfResult, getOAuthErrorCode, getPasskeyPolicyErrorCode, getWebAuthnErrorDetail, hasNonPasskeyLoginMethod, hasScopedRole, isPasskeyPrfSupported, roleGrantsAccess, SeamlessAuthError, useAuth, useAuthClient, useLoginMethods, usePasskeySupport, };
13
+ export type { CredentialUpdateResult, AuthContextType, Credential, CreateOrganizationInput, CurrentUserResult, FinishOAuthLoginInput, LoginInput, LoginMethod, LoginStartResult, MessageResult, OAuthErrorCode, OAuthProvider, OAuthProvidersResult, Organization, OrganizationMemberInput, OrganizationMembership, OrganizationMemberUpdateInput, OrganizationMembersResult, OrganizationMembershipResult, OrganizationResult, OrganizationSwitchResult, OrganizationsResult, PasskeyLoginData, PasskeyAttachment, PasskeyMetadata, PasskeyPolicyErrorCode, PasskeyPrfInput, PasskeyPrfResult, PasskeyRegistrationData, PublicSystemConfigResult, RegisterInput, RegisterPasskeyOptions, SeamlessAuthClient, SeamlessAuthClientOptions, SeamlessAuthResult, StartOAuthLoginInput, StartOAuthLoginResult, StepUpMethod, StepUpStatus, StepUpPrfData, TotpEnrollmentStartResult, TotpStatus, UpdateOrganizationInput, User, WebAuthnErrorDetail, };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as t,Fragment as i}from"react/jsx-runtime";import{browserSupportsWebAuthn as o,bufferToBase64URLString as n,base64URLStringToBuffer as r,startAuthentication as a,startRegistration as s,WebAuthnError as l}from"@simplewebauthn/browser";import{createContext as d,useMemo as c,useSyncExternalStore as u,useEffect as _,useContext as m,useState as g,useRef as p,useCallback as f}from"react";import{useHref as h,useNavigate as y,useLocation as b,useSearchParams as v,Routes as k,Route as w,Navigate as x}from"react-router-dom";import P from"libphonenumber-js";class S extends Error{constructor(e,t,i,o){super(e),this.name="SeamlessAuthError",this.status=t,this.body=i,this.cause=o}}const N={oauth_missing_email:!0,oauth_email_not_verified:!0,oauth_missing_subject:!0};function O(e){if("object"==typeof e&&null!==e)return e.code}function T(e){if(!(e instanceof S))return;if("object"!=typeof e.body||null===e.body)return;const t=O(e.body)??O(e.body.details);return"string"==typeof t&&Object.prototype.hasOwnProperty.call(N,t)?t:void 0}function C(e){if(!(e instanceof S)||("object"!=typeof(t=e.cause)||null===t||"string"!=typeof t.name))return;var t;const{name:i,code:o,message:n}=e.cause;return{name:i,code:"string"==typeof o?o:void 0,message:"string"==typeof n?n:""}}async function M(e,t){let i;try{i=await e.json()}catch{i=void 0}return new S(function(e){if("object"!=typeof e||null===e)return;const{error:t,message:i}=e;return"string"==typeof t&&t?t:"string"==typeof i&&i?i:void 0}(i)??t,e.status,i)}async function I(e){try{return await e.json()}catch{return}}async function A(e,t){let i;try{i=await e}catch{return{data:null,error:new S(t,0)}}return i.ok?{data:await I(i),error:null}:{data:null,error:await M(i,t)}}function z(e){return{data:e,error:null}}function E(e,t=0,i,o){return{data:null,error:new S(e,t,i,o)}}function F(e){if(e instanceof ArrayBuffer)return e;const t=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),i=new Uint8Array(t.byteLength);return i.set(t),i.buffer}function U(e){return"string"==typeof e?e:n(F(e))}function L(e){return"string"==typeof e?r(e):e}function R(e){return{...e.credentialId?{credentialId:e.credentialId}:{},prf:{salt:U(e.salt),...e.secondSalt?{secondSalt:U(e.secondSalt)}:{}}}}async function B(){return!!o()&&("undefined"==typeof window||!1!==window.isSecureContext)&&void 0!==globalThis.PublicKeyCredential&&"undefined"!=typeof navigator&&"function"==typeof navigator.credentials?.get}function q(e){const t=e,i=t.extensions?.prf?.eval;return i?{...t,extensions:{...t.extensions,prf:{...t.extensions?.prf,eval:{...i,...i.first?{first:L(i.first)}:{},...i.second?{second:L(i.second)}:{}}}}}:e}function j(e){const t=e.clientExtensionResults,i=t?.prf?.results?.first;if(!i)return null;const o=(r=i)instanceof ArrayBuffer?new Uint8Array(r):new Uint8Array(r.buffer,r.byteOffset,r.byteLength);var r;return{credentialId:e.id,output:o,outputBase64url:n(F(o))}}function J(e){const t=e.clientExtensionResults;return t?.prf?.results?{...e,clientExtensionResults:{...e.clientExtensionResults,prf:{...t.prf,results:void 0}}}:e}function G(e,t){const i=e.method===t?e.method:null;return"Success"===e.message&&!0===e.fresh&&null!==i?z({fresh:!0,method:i,verifiedAt:e.verifiedAt??null,expiresAt:e.expiresAt??null,maxAgeSeconds:e.maxAgeSeconds??0}):E(e.message??"Step-up authentication failed.")}function D(e){return e?{method:"POST",body:JSON.stringify(R(e))}:{method:"POST"}}function W(e,t,i){const o=E(t,0,void 0,i),n=C(o.error);return console.error(e,n?.name??"Unknown error."),o}const $=e=>{const t=(e=>{const{authHost:t}=e;return async function(e,i){const o=`${t?.replace(/\/+$/,"")??""}/auth${e.startsWith("/")?e:`/${e}`}`,n=null!=i?.body,r={...i,credentials:"include",headers:{...n?{"Content-Type":"application/json"}:{},...i?.headers}};return fetch(o,r)}})({authHost:e.apiHost});return{getCurrentUser:()=>A(t("users/me",{method:"GET"}),"Failed to load the current user."),login:e=>A(t("/login",{method:"POST",body:JSON.stringify(e)}),"Failed to start sign-in."),loginWithPasskey:async e=>{const i=await A(t("/webAuthn/login/start",{...D(e?.prf)}),"Failed to start passkey login.");if(i.error)return i;let o,n;try{const e=await a({optionsJSON:q(i.data)});o=j(e),n=J(e)}catch(e){return W("Passkey login error.","Passkey login failed.",e)}const r=await A(t("/webAuthn/login/finish",{method:"POST",body:JSON.stringify({assertionResponse:n})}),"Failed to verify passkey.");return r.error?r:"Success"!==r.data?.message?E(r.data?.message??"Passkey login failed."):z(o?{prf:o}:{})},logout:(e={})=>A(t("all_sessions"===e.scope?"/logout/all":"/logout",{method:"DELETE"}),"Failed to sign out."),logoutAllSessions:()=>A(t("/logout/all",{method:"DELETE"}),"Failed to sign out of all sessions."),deleteUser:()=>A(t("/users/delete",{method:"DELETE"}),"Failed to delete the account."),register:e=>A(t("/registration/register",{method:"POST",body:JSON.stringify({email:e.email,...e.phone?{phone:e.phone}:{}})}),"Failed to register."),requestPhoneOtp:()=>A(t("/otp/generate-phone-otp",{method:"POST",body:JSON.stringify({})}),"Failed to send the SMS code."),verifyPhoneOtp:e=>A(t("/otp/verify-phone-otp",{method:"POST",body:JSON.stringify({verificationToken:e})}),"Failed to verify the SMS code."),requestLoginPhoneOtp:()=>A(t("/otp/generate-login-phone-otp",{method:"POST",body:JSON.stringify({})}),"Failed to send the SMS code."),verifyLoginPhoneOtp:e=>A(t("/otp/verify-login-phone-otp",{method:"POST",body:JSON.stringify({verificationToken:e})}),"Failed to verify the SMS code."),requestEmailOtp:()=>A(t("/otp/generate-email-otp",{method:"POST",body:JSON.stringify({})}),"Failed to send the email code."),verifyEmailOtp:e=>A(t("/otp/verify-email-otp",{method:"POST",body:JSON.stringify({verificationToken:e})}),"Failed to verify the email code."),requestLoginEmailOtp:()=>A(t("/otp/generate-login-email-otp",{method:"POST",body:JSON.stringify({})}),"Failed to send the email code."),verifyLoginEmailOtp:e=>A(t("/otp/verify-login-email-otp",{method:"POST",body:JSON.stringify({verificationToken:e})}),"Failed to verify the email code."),requestMagicLink:()=>A(t("/magic-link",{method:"POST",body:JSON.stringify({})}),"Failed to send the magic link."),checkMagicLink:()=>A(t("/magic-link/check",{method:"GET"}),"Failed to check the magic link."),verifyMagicLink:e=>A(t(`/magic-link/verify/${encodeURIComponent(e)}`,{method:"GET"}),"Failed to verify the magic link."),listOAuthProviders:()=>A(t("/oauth/providers",{method:"GET"}),"Failed to list OAuth providers."),getPublicSystemConfig:()=>A(t("/system-config/public",{method:"GET"}),"Failed to read the public system configuration."),startOAuthLogin:e=>A(t(`/oauth/${encodeURIComponent(e.providerId)}/start`,{method:"POST",body:JSON.stringify({...e.redirectUri?{redirectUri:e.redirectUri}:{},...e.returnTo?{returnTo:e.returnTo}:{}})}),"Failed to start OAuth login."),finishOAuthLogin:e=>A(t(`/oauth/${encodeURIComponent(e.providerId)}/callback`,{method:"POST",body:JSON.stringify({code:e.code,state:e.state})}),"Failed to finish OAuth login."),registerPasskey:async e=>{const i=function(e){return"metadata"in e?e:{metadata:e}}(e),o=await A(t(function(e){const t=new URLSearchParams;e.requirePrf?t.set("requirePrf","true"):e.requestPrf&&t.set("requestPrf","true");const i=t.toString();return"/webAuthn/register/start"+(i?`?${i}`:"")}(i),{method:"GET"}),"Failed to fetch passkey registration challenge.");if(o.error)return o;let n;try{n=await s({optionsJSON:o.data})}catch(e){return e instanceof l?E(e.name,0,void 0,e):W("Passkey registration error.","Passkey registration failed.",e)}const r=function(e){const t=e.clientExtensionResults;return!0===t?.prf?.enabled}(n),a=await A(t("/webAuthn/register/finish",{method:"POST",body:JSON.stringify({attestationResponse:n,metadata:{...i.metadata,prfCapable:r}})}),"Verification failed.");return a.error?a:z({credentialId:n.id,prfCapable:r})},isPasskeyPrfSupported:B,getStepUpStatus:()=>A(t("/step-up/status",{method:"GET"}),"Failed to load step-up status."),verifyStepUpWithPasskey:async()=>{const e=await A(t("/step-up/webauthn/start",{method:"POST"}),"Failed to start step-up authentication.");if(e.error)return e;let i;try{i=J(await a({optionsJSON:q(e.data)}))}catch(e){return W("Step-up authentication error.","Step-up authentication failed.",e)}const o=await A(t("/step-up/webauthn/finish",{method:"POST",body:JSON.stringify({assertionResponse:i})}),"Failed to verify step-up authentication.");return o.error?o:G(o.data??{},"webauthn")},verifyStepUpWithPasskeyPrf:async e=>{const i=await A(t("/step-up/webauthn/start",{...D(e)}),"Failed to start step-up authentication.");if(i.error)return i;let o,n;try{const e=await a({optionsJSON:q(i.data)});o=j(e),n=J(e)}catch(e){return W("Step-up authentication error.","Step-up authentication failed.",e)}if(!o)return E("Passkey did not return PRF output.");const r=await A(t("/step-up/webauthn/finish",{method:"POST",body:JSON.stringify({assertionResponse:n})}),"Failed to verify step-up authentication.");if(r.error)return r;const s=G(r.data??{},"webauthn");return s.error?s:z({...s.data,credentialId:o.credentialId,prf:o})},getTotpStatus:()=>A(t("/totp/status",{method:"GET"}),"Failed to load authenticator status."),startTotpEnrollment:()=>A(t("/totp/enroll/start",{method:"POST"}),"Failed to start authenticator enrollment."),verifyTotpEnrollment:e=>A(t("/totp/enroll/verify",{method:"POST",body:JSON.stringify({code:e})}),"Failed to verify the authenticator code."),disableTotp:e=>A(t("/totp/disable",{method:"POST",body:JSON.stringify({code:e})}),"Failed to disable the authenticator."),verifyStepUpWithTotp:async e=>{const i=await A(t("/totp/verify-mfa",{method:"POST",body:JSON.stringify({code:e})}),"Failed to verify step-up authentication.");return i.error?i:G(i.data??{},"totp")},updateCredential:e=>A(t("users/credentials",{method:"POST",body:JSON.stringify(e)}),"Failed to update credential."),deleteCredential:e=>A(t("users/credentials",{method:"DELETE",body:JSON.stringify({id:e})}),"Failed to delete credential."),listOrganizations:()=>A(t("/organizations",{method:"GET"}),"Failed to list organizations."),createOrganization:e=>A(t("/organizations",{method:"POST",body:JSON.stringify(e)}),"Failed to create organization."),getOrganization:e=>A(t(`/organizations/${encodeURIComponent(e)}`,{method:"GET"}),"Failed to load organization."),updateOrganization:(e,i)=>A(t(`/organizations/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(i)}),"Failed to update organization."),switchOrganization:e=>A(t(`/organizations/${encodeURIComponent(e)}/switch`,{method:"POST"}),"Failed to switch organization."),listOrganizationMembers:e=>A(t(`/organizations/${encodeURIComponent(e)}/members`,{method:"GET"}),"Failed to list organization members."),addOrganizationMember:(e,i)=>A(t(`/organizations/${encodeURIComponent(e)}/members`,{method:"POST",body:JSON.stringify(i)}),"Failed to add organization member."),updateOrganizationMember:(e,i,o)=>A(t(`/organizations/${encodeURIComponent(e)}/members/${encodeURIComponent(i)}`,{method:"PATCH",body:JSON.stringify(o)}),"Failed to update organization member."),removeOrganizationMember:(e,i)=>A(t(`/organizations/${encodeURIComponent(e)}/members/${encodeURIComponent(i)}`,{method:"DELETE"}),"Failed to remove organization member.")}};function V(e,t){const i=e.trim(),o=t.trim();if(!i||!o)return!1;if(i===o)return!0;if(i.endsWith(":*")){const e=i.slice(0,-2);return o===e||o.startsWith(`${e}:`)}if(!o.includes(":"))return!1;if(!i.includes(":"))return o.startsWith(`${i}:`);const n=i.split(":"),r=o.split(":"),a=n[n.length-1],s=r[r.length-1],l=n.slice(0,-1),d=r.slice(0,-1);return"write"===a&&"read"===s&&l.length===d.length&&l.every((e,t)=>e===d[t])}function K(e,t){if(!Array.isArray(e))return!1;const i=e.filter(e=>"string"==typeof e);return(Array.isArray(t)?t:[t]).some(e=>i.some(t=>V(t,e)))}function H(){return"undefined"==typeof localStorage?function(){const e=new Map;return{get:t=>e.get(t)??null,set:(t,i)=>{e.set(t,i)}}}():{get:e=>{try{return localStorage.getItem(e)}catch{return null}},set:(e,t)=>{try{localStorage.setItem(e,t)}catch{}}}}const Y="seamlessauth_seen",Q={user:null,credentials:[],organizations:[],activeOrganization:null,stepUpStatus:null,isAuthenticated:!1};const Z=d(void 0),X=()=>{const e=m(Z);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e},ee=({children:t,apiHost:i,autoDetectPreviousSignin:o=!0})=>{const n=c(()=>function(e){const{apiHost:t,detectPreviousSignIn:i=!0}=e,o=$({apiHost:t}),n=e.storage??H(),r=new Set;let a=!1,s=0,l={...Q,loading:!0,hasSignedInBefore:i&&"true"===n.get(Y)};function d(e){const t={...l,...e};Object.keys(e).some(e=>l[e]!==t[e])&&(l=t,r.forEach(e=>e()))}function c(){n.set(Y,"true"),i&&d({hasSignedInBefore:!0})}function u(){d(Q)}async function _(){const e=++s;d({loading:!0});const t=await o.getCurrentUser();return a||e!==s?t:t.error?(u(),d({loading:!1}),t):(d({user:t.data.user,credentials:t.data.credentials??[],organizations:t.data.organizations??[],activeOrganization:t.data.activeOrganization??null,isAuthenticated:!0,loading:!1}),l.hasSignedInBefore||c(),t)}async function m(e){const t=await e();return t.error||await _(),t}return{getState:()=>l,subscribe:e=>(r.add(e),()=>{r.delete(e)}),actions:{login:(e,t)=>o.login({identifier:e,passkeyAvailable:t}),handlePasskeyLogin:()=>m(()=>o.loginWithPasskey()),refreshSession:_,logout:async function(){try{return await o.logout()}finally{u()}},logoutAllSessions:async function(){try{return await o.logoutAllSessions()}finally{u()}},deleteUser:async()=>{const e=await o.deleteUser();return e.error||u(),e},updateCredential:async e=>{const{data:t,error:i}=await o.updateCredential({friendlyName:e.friendlyName??null,id:e.id});if(i)return{data:null,error:i};const n=t.credential;return d({credentials:l.credentials.map(e=>e.id===n.id?{...e,...n}:e)}),{data:n,error:null}},deleteCredential:async e=>{const t=await o.deleteCredential(e);return t.error||d({credentials:l.credentials.filter(t=>t.id!==e)}),t},switchOrganization:e=>m(()=>o.switchOrganization(e)),listOAuthProviders:()=>o.listOAuthProviders(),startOAuthLogin:e=>o.startOAuthLogin(e),finishOAuthLogin:e=>m(()=>o.finishOAuthLogin(e)),refreshStepUpStatus:async()=>{const e=await o.getStepUpStatus();return d({stepUpStatus:e.error?null:e.data}),e},verifyStepUpWithPasskey:async()=>{const e=await o.verifyStepUpWithPasskey();return e.error||d({stepUpStatus:e.data}),e},verifyStepUpWithPasskeyPrf:async e=>{const t=await o.verifyStepUpWithPasskeyPrf(e);return t.error||d({stepUpStatus:{fresh:t.data.fresh,method:t.data.method,verifiedAt:t.data.verifiedAt,expiresAt:t.data.expiresAt,maxAgeSeconds:t.data.maxAgeSeconds}}),t},verifyStepUpWithTotp:async e=>{const t=await o.verifyStepUpWithTotp(e);return t.error||d({stepUpStatus:t.data}),t},hasRole:e=>l.user?.roles?.includes(e),hasScopedRole:e=>l.user?K(l.user.roles,e):void 0,markSignedIn:c},destroy:()=>{a=!0,r.clear()}}}({apiHost:i,detectPreviousSignIn:o}),[i,o]),r=u(n.subscribe,n.getState,n.getState);_(()=>{n.actions.refreshSession()},[n]);const a=c(()=>({...r,...n.actions,apiHost:i}),[r,n,i]);return e(Z.Provider,{value:a,children:t})},te=()=>{const{apiHost:e}=X();return c(()=>$({apiHost:e}),[e])},ie=["passkey","magic_link"],oe=()=>{const e=te(),[t,i]=g(null),[o,n]=g(!0);return _(()=>{let t=!0;return(async()=>{try{const{data:o,error:n}=await e.getPublicSystemConfig();t&&!n&&o?.loginMethods?.length&&i(o.loginMethods)}catch{}finally{t&&n(!1)}})(),()=>{t=!1}},[e]),{loginMethods:t,loading:o}},ne=e=>Boolean(e?.some(e=>"passkey"!==e)),re=e=>{if("string"!=typeof e)return!1;const t=e.trim();if(t.length<3||t.length>320)return!1;const i=t.split("@");if(2!==i.length)return!1;const[o,n]=i;return!(!/^[A-Za-z0-9._%+-]+$/.test(o)||o.startsWith(".")||o.endsWith(".")||o.includes(".."))&&!(!/^[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/.test(n)||n.startsWith("-")||n.endsWith("-")||n.startsWith(".")||n.endsWith(".")||n.includes(".."))},ae=e=>{const t=P(e);return t?.isValid()||!1};async function se(){return async function(){if("undefined"==typeof window)return!1;if(window.PublicKeyCredential&&"function"==typeof window.PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable)try{return await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()}catch{return console.error("Error checking passkey support."),!1}return!1}()}const le=()=>{const[e,t]=g(!1),[i,o]=g(!0);return _(()=>{let e=!0;return(async()=>{try{const i=await se();e&&t(i)}catch{e&&t(!1)}finally{e&&o(!1)}})(),()=>{e=!1}},[]),{passkeySupported:e,loading:i}},de="/login",ce="/passkey-login",ue="/verify-phone-otp",_e="/verify-email-otp",me="/verify-magiclink",ge="/oauth/callback",pe="/register-passkey",fe="/magic-link-sent";function he(e,t){void 0===t&&(t={});var i=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===i&&o.firstChild?o.insertBefore(n,o.firstChild):o.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}}var ye="login-module__container___YggDx",be="login-module__card___Ub-Py",ve="login-module__heading___neEqb",ke="login-module__inputGroup___P6qgS",we="login-module__label___mx5vu",xe="login-module__input___U07lW",Pe="login-module__helperText___kDQ4-",Se="login-module__error___40zxh",Ne="login-module__button___0kFBs",Oe="login-module__toggle___1JiG1",Te="login-module__fallbackCard___HdIk-",Ce="login-module__fallbackHeader___-il2v",Me="login-module__fallbackDescription___ea5EB",Ie="login-module__fallbackActions___AD3ni",Ae="login-module__fallbackActionButton___lFgWf",ze="login-module__actionTitle___ycrMp",Ee="login-module__actionSubtext___opaIV",Fe="login-module__linkButton___5lsoe";he(".login-module__container___YggDx{align-items:center;color:#fff;display:flex;justify-content:center}.login-module__card___Ub-Py{background-color:#1f2937;border-radius:.5rem;box-shadow:0 4px 6px rgba(0,0,0,.1);max-width:28rem;padding:2rem;width:100%}.login-module__heading___neEqb{color:#fff;font-size:1.5rem;font-weight:700;margin-bottom:1.5rem;text-align:center}.login-module__message___qSejT{color:#68d391;text-align:center}.login-module__inputGroup___P6qgS{margin-bottom:1rem}.login-module__label___mx5vu{color:#d1d5db;display:block}.login-module__input___U07lW{background-color:#4b5563;border:1px solid #d1d5db;border-radius:.375rem;margin-top:.25rem;padding:.5rem;width:100%}.login-module__input___U07lW:focus{box-shadow:0 0 0 2px #3b82f6;outline:none}.login-module__helperText___kDQ4-{color:#9ca3af;font-size:.75rem;margin-top:.5rem}.login-module__error___40zxh{color:#f87171;font-size:.875rem}.login-module__button___0kFBs{background-color:#2563eb;border-radius:.375rem;color:#fff;cursor:pointer;margin-top:1rem;padding:.5rem;transition:background-color .3s;width:100%}.login-module__button___0kFBs:hover{background-color:#1d4ed8}.login-module__button___0kFBs:disabled{background-color:#9ca3af;cursor:not-allowed}.login-module__toggle___1JiG1{background:none;border:none;color:#60a5fa;cursor:pointer;font-size:.875rem;margin-top:1.5rem;text-align:center;width:100%}.login-module__underline___gs-RS{text-decoration:underline}.login-module__phoneRow___oeNtq{display:grid;gap:.5rem;grid-template-columns:1fr 3fr;margin-top:.25rem}.login-module__phoneInput___2MPQC,.login-module__select___rRV1O{background-color:#4b5563;border:1px solid #d1d5db;border-radius:.375rem;padding:.5rem;width:100%}@media (max-width:500px){.login-module__phoneRow___oeNtq{grid-template-columns:1fr}}.login-module__fallbackCard___HdIk-{background:hsla(0,0%,100%,.04);border:1px solid hsla(0,0%,100%,.08);border-radius:12px;display:flex;flex-direction:column;gap:14px;margin-top:18px;padding:18px}.login-module__fallbackHeader___-il2v{color:#f3f4f6;font-size:.95rem;font-weight:600}.login-module__fallbackDescription___ea5EB{color:#9ca3af;font-size:.85rem;line-height:1.4}.login-module__fallbackActions___AD3ni{display:flex;flex-direction:column;gap:10px}.login-module__fallbackActionButton___lFgWf{background:rgba(0,0,0,.25);border:1px solid hsla(0,0%,100%,.08);border-radius:8px;cursor:pointer;display:flex;flex-direction:column;padding:12px 14px;text-align:left;transition:all .15s ease}.login-module__fallbackActionButton___lFgWf:hover{background:hsla(0,0%,100%,.06);border-color:hsla(0,0%,100%,.15)}.login-module__actionTitle___ycrMp{color:#f9fafb;font-size:.9rem;font-weight:500}.login-module__actionSubtext___opaIV{color:#9ca3af;font-size:.75rem;margin-top:2px}.login-module__linkButton___5lsoe{background:none;border:none;color:#60a5fa;cursor:pointer;font-size:.8rem;margin-top:6px}.login-module__linkButton___5lsoe:hover{text-decoration:underline}");const Ue=({identifier:i,onMagicLink:o,onEmailOtp:n,onPhoneOtp:r,onPasskeyRetry:a,loginMethods:s})=>{const l=new Set(s??["passkey","magic_link","phone_otp"]),d=l.has("magic_link")&&re(i),c=l.has("email_otp")&&Boolean(n)&&re(i),u=l.has("phone_otp")&&ae(i),_=l.has("passkey")&&Boolean(a);return d||c||u||_?t("div",{className:Te,children:[e("div",{className:Ce,children:"Choose a sign-in method"}),e("p",{className:Me,children:"Choose another secure sign-in method."}),t("div",{className:Ie,children:[d&&t("button",{type:"button",className:Ae,onClick:o,children:[e("span",{className:ze,children:"Email Magic Link"}),e("span",{className:Ee,children:"Send a secure sign-in link to your email"})]}),c&&t("button",{type:"button",className:Ae,onClick:n,children:[e("span",{className:ze,children:"Email Code"}),e("span",{className:Ee,children:"Receive a one-time code by email"})]}),u&&t("button",{type:"button",className:Ae,onClick:r,children:[e("span",{className:ze,children:"Text Message Code"}),e("span",{className:Ee,children:"Receive a one-time code via SMS"})]})]}),_&&e("button",{type:"button",className:Fe,onClick:a,children:"Try passkey anyway"})]}):null},Le="seamless:oauth:provider",Re=()=>{const{listOAuthProviders:i,startOAuthLogin:o}=X(),n=h("/oauth/callback"),[r,a]=g([]),[s,l]=g("");if(_(()=>{let e=!0;return i().then(({data:t})=>{e&&a(t?.providers??[])}),()=>{e=!1}},[i]),0===r.length)return null;return t("div",{className:Ie,children:[r.map(i=>e("button",{type:"button",className:Ae,onClick:()=>(async e=>{l(""),sessionStorage.setItem(Le,e);const{data:t,error:i}=await o({providerId:e,redirectUri:new URL(n,window.location.origin).toString()});i?l("Could not start sign-in with this provider."):window.location.assign(t.authorizationUrl)})(i.id),children:t("span",{className:ze,children:["Continue with ",i.name]})},i.id)),s&&e("p",{className:Se,children:s})]})},Be=()=>{const o=y(),{hasSignedInBefore:n,login:r,handlePasskeyLogin:a}=X(),s=te(),{passkeySupported:l}=le(),{loginMethods:d}=oe(),[c,u]=g(""),[m,p]=g(""),[f,h]=g("register"),[b,v]=g(""),[k,w]=g(""),[x,P]=g(""),[S,N]=g(!1),[O,T]=g(null);_(()=>{n&&h("login")},[n]);return e("div",{className:ye,children:t("div",{className:be,children:[e("h2",{className:ve,children:"login"===f?"Sign In":"Create Account"}),t(i,{children:[t("form",{onSubmit:async e=>{e.preventDefault(),v(""),N(!1);try{if("login"===f){const{data:e,error:t}=await r(c,l);if(t)return void v("Failed to start sign-in. Please try again.");const i=e?.loginMethods?.length?e.loginMethods:d??ie;if(T(i),l&&i.includes("passkey")){const{error:e}=await a();return e?(N(!0),void v("Passkey sign-in could not be completed. Choose another sign-in method.")):void o("/")}return void N(!0)}"register"===f&&await(async()=>{v("");const{data:e,error:t}=await s.register({email:m});t?v("Failed to register. Please try again."):"Success"===e.message?o(_e):v("An unexpected error occurred. Try again. If the problem persists, contact support.")})()}catch{console.error("Failed to continue sign-in."),v("Failed to continue sign-in. Please try again.")}},children:["login"===f&&t("div",{className:ke,children:[e("label",{htmlFor:"identifier",className:we,children:"Email Address / Phone Number"}),e("input",{id:"identifier",type:"text",value:c,onChange:e=>{const t=e.target.value;u(t)},autoComplete:"off",placeholder:"Email or Phone Number",className:xe,onBlur:()=>{if(c){const e=re(c)||ae(c);P(e?"":"Please enter a valid email or phone number")}},required:!0}),e("p",{className:Pe,children:"Phone numbers must include a country code e.g. +1"}),S&&e(Ue,{identifier:c,onMagicLink:async()=>{const{error:e}=await s.requestMagicLink();e?v("Failed to send magic link."):o(fe,{state:{identifier:c}})},onEmailOtp:async()=>{const{error:e}=await s.requestLoginEmailOtp();e?v("Failed to send email code."):o(_e,{state:{flow:"login"}})},onPhoneOtp:async()=>{const{error:e}=await s.requestLoginPhoneOtp();e?v("Failed to send OTP."):o(ue,{state:{flow:"login"}})},onPasskeyRetry:l?a:void 0,loginMethods:O}),x&&e("p",{className:Se,children:x})]}),"register"===f&&t("div",{className:ke,children:[e("label",{htmlFor:"email",className:we,children:"Email Address"}),e("input",{id:"email",type:"email",value:m,onChange:e=>{const t=e.target.value;p(t)},autoComplete:"off",className:xe,onBlur:()=>{if(m){const e=re(m);w(e?"":"Please enter a valid email")}},required:!0}),k&&e("p",{className:Se,children:k})]}),e("button",{type:"submit",className:Ne,disabled:!("login"===f&&c?re(c)||ae(c):re(m)),children:"login"===f?"Login":"Register"}),b&&e("p",{className:Se,children:b}),e("button",{type:"button",onClick:()=>h("login"===f?"register":"login"),className:Oe,children:"login"===f?"Don't have an account? Create one":"Already have an account? Sign in"})]}),e(Re,{})]})]})})};var qe={container:"passKeyLogin-module__container___IUKxF",card:"passKeyLogin-module__card___2sKM1",title:"passKeyLogin-module__title___HZxvc",button:"passKeyLogin-module__button___FvR4I"};he(".passKeyLogin-module__container___IUKxF{align-items:center;color:#fff;display:flex;justify-content:center;padding:1rem}.passKeyLogin-module__card___2sKM1{background-color:#1f2937;border-radius:1rem;box-shadow:0 4px 20px rgba(0,0,0,.4);display:flex;flex-direction:column;gap:1.5rem;max-width:400px;padding:2rem;width:100%}.passKeyLogin-module__title___HZxvc{color:#fff;font-size:1.5rem;font-weight:600;text-align:center}.passKeyLogin-module__button___FvR4I{background-color:#2563eb;border:1px solid #3b82f6;border-radius:.5rem;color:#fff;cursor:pointer;font-weight:500;padding:.75rem 1rem;text-align:center;transition:background-color .2s ease;width:100%}.passKeyLogin-module__button___FvR4I:hover{background-color:#1d4ed8}@media (max-width:480px){.passKeyLogin-module__card___2sKM1{padding:1.25rem}.passKeyLogin-module__button___FvR4I{font-size:1rem}}");const je=()=>{const i=y(),{handlePasskeyLogin:o}=X(),[n,r]=g("");return e("div",{className:qe.container,children:t("div",{className:qe.card,children:[e("h2",{className:qe.title,children:"Login with Passkey"}),e("button",{onClick:async()=>{r("");const{error:e}=await o();e?r("Passkey sign-in could not be completed. Try another sign-in method."):i("/")},className:qe.button,children:"Use Passkey"}),n&&e("p",{className:qe.error,children:n})]})})};var Je="registerPasskey-module__container___jqEh8",Ge="registerPasskey-module__card___MJAyC",De="registerPasskey-module__loading___Q4i1x",We="registerPasskey-module__spinner___V1nhd",$e="registerPasskey-module__supported___ihTih",Ve="registerPasskey-module__title___vn2Qu",Ke="registerPasskey-module__description___AWmO-",He="registerPasskey-module__button___D3b4B",Ye="registerPasskey-module__message___RiOw-",Qe="registerPasskey-module__success___HP5aX",Ze="registerPasskey-module__error___hGiqE",Xe="registerPasskey-module__skip___1hDyU";he(".registerPasskey-module__container___jqEh8{align-items:center;color:#fff;display:flex;justify-content:center;padding:1rem}.registerPasskey-module__card___MJAyC{background-color:#1f2937;border-radius:1rem;box-shadow:0 4px 20px rgba(0,0,0,.4);max-width:400px;padding:1.5rem;width:100%}.registerPasskey-module__loading___Q4i1x{align-items:center;background-color:#f9fafb;border-radius:.75rem;box-shadow:0 2px 8px rgba(0,0,0,.1);color:#374151;display:flex;font-weight:500;gap:.75rem;justify-content:center;padding:1.5rem}.registerPasskey-module__spinner___V1nhd{animation:registerPasskey-module__spin___oYcsC 1s linear infinite;border-color:#3b82f6 transparent;border-radius:9999px;border-style:solid;border-width:2px;height:1.5rem;width:1.5rem}@keyframes registerPasskey-module__spin___oYcsC{to{transform:rotate(1turn)}}.registerPasskey-module__supported___ihTih{background-color:#ecfdf5;border-radius:.75rem;box-shadow:0 2px 12px rgba(0,0,0,.1);color:#065f46;padding:1.25rem}.registerPasskey-module__title___vn2Qu{font-size:1.125rem;font-weight:600;margin-bottom:.5rem}.registerPasskey-module__description___AWmO-{margin-bottom:1rem}.registerPasskey-module__button___D3b4B{background-color:#059669;border:none;border-radius:.5rem;color:#fff;cursor:pointer;font-weight:500;padding:.75rem 1rem;transition:background-color .2s ease;width:100%}.registerPasskey-module__button___D3b4B:hover{background-color:#047857}.registerPasskey-module__message___RiOw-{font-size:.875rem;margin-top:1rem}.registerPasskey-module__success___HP5aX{color:#6ee7b7}.registerPasskey-module__error___hGiqE{color:#f87171}.registerPasskey-module__skip___1hDyU{background:none;border:none;color:#60a5fa;cursor:pointer;font-size:.875rem;margin-top:1.5rem;text-align:center;width:100%}.registerPasskey-module__skip___1hDyU:disabled{cursor:default;opacity:.6}");var et="deviceNameModal-module__overlay___fmdPd",tt="deviceNameModal-module__modal___uoEda",it="deviceNameModal-module__description___-HMTA",ot="deviceNameModal-module__input___4vQMI",nt="deviceNameModal-module__actions___KXw7b",rt="deviceNameModal-module__primary___9Ozlk",at="deviceNameModal-module__secondary___HILhc";he(".deviceNameModal-module__overlay___fmdPd{align-items:center;background:rgba(0,0,0,.45);display:flex;inset:0;justify-content:center;position:fixed;z-index:1000}.deviceNameModal-module__modal___uoEda{background:#1f2937;border-radius:12px;box-shadow:0 20px 40px rgba(0,0,0,.15);color:#fff;max-width:420px;padding:24px;width:100%}.deviceNameModal-module__description___-HMTA{color:#fff;font-size:14px;margin-bottom:16px}.deviceNameModal-module__input___4vQMI{border:1px solid #ddd;border-radius:8px;font-size:14px;margin-bottom:20px;padding:10px 12px;width:100%}.deviceNameModal-module__actions___KXw7b{display:flex;gap:10px;justify-content:flex-end}.deviceNameModal-module__primary___9Ozlk{background:#2563eb;border:none;border-radius:8px;color:#fff;cursor:pointer;padding:8px 14px}.deviceNameModal-module__secondary___HILhc{background:transparent;border:1px solid #ccc;border-radius:8px;cursor:pointer;padding:8px 14px}");const st=({isOpen:i,onCancel:o,onConfirm:n})=>{const[r,a]=g("");return i?e("div",{className:et,children:t("div",{className:tt,children:[e("h3",{children:"Name This Device"}),e("p",{className:it,children:"Give this passkey a friendly name so you can recognize it later."}),e("input",{type:"text",placeholder:"e.g., MacBook Pro, iPhone, YubiKey",value:r,onChange:e=>a(e.target.value),className:ot,autoFocus:!0}),t("div",{className:nt,children:[e("button",{onClick:o,className:at,children:"Cancel"}),e("button",{onClick:()=>n(r.trim()),disabled:!r.trim(),className:rt,children:"Continue"})]})]})}):null},lt=()=>{const{refreshSession:o}=X(),n=te(),{passkeySupported:r,loading:a}=le(),{loginMethods:s,loading:l}=oe(),d=y(),[c,u]=g("idle"),[_,m]=g(""),[p,f]=g(!1),[h,b]=g(null),v=ne(s),k=async()=>{await o(),d("/")};return t(i,{children:[e("div",{className:Je,children:e("div",{className:Ge,children:t("div",a||l?{className:De,children:[e("div",{className:We}),e("span",{children:"Checking for Passkey Support..."})]}:r?{className:$e,children:[e("h2",{className:Ve,children:"Secure Your Account with a Passkey"}),e("p",{className:Ke,children:"Your device supports passkeys! Register one to skip passwords forever."}),e("button",{onClick:()=>{const{platform:e,browser:t,deviceInfo:i}=function(){const e=navigator.userAgent.toLowerCase();let t="unknown",i="unknown";return/iphone|ipad|ipod/.test(e)?t="ios":/android/.test(e)?t="android":/mac os/.test(e)?t="mac":/windows/.test(e)?t="windows":/linux/.test(e)&&(t="linux"),navigator.brave?i="brave":/edg\/|edgios/.test(e)?i="edge":/opr\/|opt\/|opera/.test(e)?i="opera":/vivaldi/.test(e)?i="vivaldi":/samsungbrowser/.test(e)?i="samsung":/firefox|fxios/.test(e)?i="firefox":/chrome|crios/.test(e)?i="chrome":/safari/.test(e)&&(i="safari"),{platform:t,browser:i,deviceInfo:`${t} • ${i}`}}();b({platform:e,browser:t,deviceInfo:i}),f(!0)},disabled:"loading"===c,className:He,children:"loading"===c?"Registering...":"Register Passkey"}),_&&e("p",{className:`${Ye} ${"success"===c?Qe:Ze}`,children:_}),v&&e("button",{type:"button",onClick:k,disabled:"loading"===c,className:Xe,children:"Skip for now"})]}:{className:$e,children:[e("h2",{className:Ve,children:"Passkeys are not available here"}),e("p",{className:Ke,children:v?"This device does not support passkeys. You can continue without one and add a passkey later from a device that does.":"This device does not support passkeys, and this application requires one to sign in. Try again from a device or browser that supports them."}),v&&e("button",{type:"button",onClick:k,className:He,children:"Continue"})]})})}),e(st,{isOpen:p,onCancel:()=>{f(!1),b(null)},onConfirm:async e=>{if(!h)return;const t={friendlyName:e,...h};u("loading");try{const{error:e}=await n.registerPasskey(t);if(e)throw e;await o(),u("success"),m("Passkey registered successfully."),d("/")}catch{console.error("Passkey registration failed."),u("error"),m("Error registering passkey.")}finally{f(!1),b(null)}}})]})};var dt="verifyOTP-module__container___wgoDE",ct="verifyOTP-module__card___3cs2p",ut="verifyOTP-module__title___fZ-1d",_t="verifyOTP-module__subtitle___dGSu3",mt="verifyOTP-module__error___GEtlG",gt="verifyOTP-module__success___46TjG",pt="verifyOTP-module__form___jiGG-",ft="verifyOTP-module__label___Zq5Mi",ht="verifyOTP-module__timer___smq-a",yt="verifyOTP-module__resend___PlmkG",bt="verifyOTP-module__button___8pIuO",vt="verifyOTP-module__toggle___wbzVa";he(".verifyOTP-module__container___wgoDE{align-items:center;color:#fff;display:flex;justify-content:center;padding:1rem}.verifyOTP-module__card___3cs2p{background-color:#1f2937;border-radius:.5rem;box-shadow:0 0 10px rgba(0,0,0,.3);max-width:28rem;padding:1.5rem;width:100%}.verifyOTP-module__title___fZ-1d{color:#fff;font-size:1.5rem;font-weight:700;margin-bottom:1rem;text-align:center}.verifyOTP-module__subtitle___dGSu3{color:#9ca3af;font-size:.875rem;margin-bottom:1.5rem;text-align:center}.verifyOTP-module__error___GEtlG{color:#f87171;margin-bottom:1rem;text-align:center}.verifyOTP-module__success___46TjG{color:#34d399;margin-bottom:.75rem;text-align:center}.verifyOTP-module__form___jiGG-{display:flex;flex-direction:column;gap:1rem}.verifyOTP-module__label___Zq5Mi{color:#d1d5db;display:block;font-size:.875rem;margin-bottom:.25rem}.verifyOTP-module__timer___smq-a{color:#facc15;font-size:.875rem}.verifyOTP-module__input___yqIXM{background-color:#374151;border:1px solid #4b5563;border-radius:.375rem;color:#fff;outline:none;padding:.5rem;width:100%}.verifyOTP-module__input___yqIXM:focus{box-shadow:0 0 0 2px #3b82f6}.verifyOTP-module__resend___PlmkG{background:none;border:none;color:#60a5fa;cursor:pointer;font-size:.75rem;margin-top:.25rem;text-decoration:underline}.verifyOTP-module__resend___PlmkG:hover{color:#3b82f6}.verifyOTP-module__button___8pIuO{background-color:#2563eb;border:none;border-radius:.375rem;color:#fff;cursor:pointer;padding:.5rem;transition:background-color .2s;width:100%}.verifyOTP-module__button___8pIuO:hover{background-color:#1d4ed8}.verifyOTP-module__toggle___wbzVa{background:none;border:none;color:#60a5fa;cursor:pointer;font-size:.875rem;margin-top:1.5rem;text-align:center;width:100%}");var kt="otpInput-module__otpContainer___MUjby",wt="otpInput-module__otpInput___3YMVm";he(".otpInput-module__otpContainer___MUjby{display:flex;gap:8px;justify-content:center;margin-top:8px}.otpInput-module__otpInput___3YMVm{background:#374151;border:1px solid #4b5563;border-radius:8px;color:#fff;font-size:1.2rem;height:48px;text-align:center;transition:border-color .15s ease,box-shadow .15s ease;width:42px}.otpInput-module__otpInput___3YMVm:focus{border-color:#60a5fa;box-shadow:0 0 0 2px rgba(96,165,250,.25);outline:none}");const xt=({length:t=6,value:i,inputMode:o="numeric",onChange:n,name:r="otp"})=>{const a=p([]),s=i.split("").concat(Array(t).fill("")).slice(0,t),l=(e,t)=>{var i;if(t.length>1)d(e,t);else if(!t||(i=t,"numeric"===o?/^\d$/.test(i):/^[a-zA-Z]$/.test(i))){const i=[...s];i[e]=t;const o=i.join("");n(o),t&&a.current[e+1]&&a.current[e+1]?.focus()}},d=(e,i)=>{let r=i;r="numeric"===o?i.replace(/\D/g,""):i.replace(/[^a-zA-Z]/g,"");const l=r.slice(0,t).split(""),d=[...s];l.forEach((i,o)=>{e+o<t&&(d[e+o]=i)}),n(d.join("")),a.current[Math.min(e+l.length,t-1)]?.focus()};return e("div",{className:kt,role:"group","aria-label":"One-time password input",onPaste:e=>{e.preventDefault(),d(0,e.clipboardData.getData("text"))},children:s.map((i,d)=>e("input",{ref:e=>a.current[d]=e,type:"text",inputMode:"numeric"===o?"numeric":"text",autoComplete:"one-time-code",name:`${r}-${d}`,maxLength:1,value:i,className:wt,onChange:e=>l(d,e.target.value),onKeyDown:e=>((e,i)=>{if("Backspace"===i.key){i.preventDefault();const t=[...s];s[e]?(t[e]="",n(t.join(""))):e>0&&(t[e-1]="",n(t.join("")),a.current[e-1]?.focus())}"ArrowLeft"===i.key&&e>0&&a.current[e-1]?.focus(),"ArrowRight"===i.key&&e<t-1&&a.current[e+1]?.focus()})(d,e),"aria-label":`Digit ${d+1}`},d))})},Pt=()=>{const i=y(),o=b(),{refreshSession:n}=X(),r="login"===o.state?.flow,[a,s]=g(""),[l,d]=g(null),[c,u]=g(""),[m,p]=g(!1),[f,h]=g(""),[v,k]=g(300),w=te(),x=async()=>{if(p(!0),!l){const{error:e}=r?await w.verifyLoginPhoneOtp(a):await w.verifyPhoneOtp(a);if(e)u("Verification failed.");else{if(r)return await n(),void i("/");d(!0)}}p(!1)},P=async()=>{h(""),await(async()=>{u("");const{error:e}=r?await w.requestLoginPhoneOtp():await w.requestPhoneOtp();e?u("Failed to send SMS code. If this persists, refresh the page and try again."):h("Verification SMS has been resent.")})(),h("Verification SMS has been resent.")};return _(()=>{const e=setInterval(()=>{k(e=>e>0?e-1:0)},1e3);return()=>clearInterval(e)},[]),_(()=>{l&&!r&&(async()=>{const{error:e}=await w.requestEmailOtp();e?u("Failed to send Email code. If this persists, refresh the page and try registering again."):i(_e)})()},[l,r,i,w]),e("div",{className:dt,children:t("div",{className:ct,children:[e("h2",{className:ut,children:"Verify Your Phone Number"}),e("p",{className:_t,children:"Enter the code sent to your phone number."}),c&&e("p",{className:mt,children:c}),f&&e("p",{className:gt,children:f}),t("form",{onSubmit:async e=>{if(e.preventDefault(),u(""),6===a.length){p(!0);try{await x()}catch{u("Unexpected error occurred.")}finally{p(!1)}}else u("Please enter a valid code.")},className:pt,children:[t("div",{children:[t("label",{htmlFor:"phoneCode",className:ft,children:["Phone Verification Code ",(N=l,!0===N?e("span",{className:"text-green-400 ml-2",children:"✅"}):!1===N?e("span",{className:"text-red-400 ml-2",children:"❌"}):null)," -"," ",t("span",{className:ht,children:["Code expires in: ",(S=v,`${Math.floor(S/60).toString().padStart(2,"0")}:${(S%60).toString().padStart(2,"0")}`)]})]}),e(xt,{length:6,value:a,onChange:s}),e("button",{type:"button",onClick:()=>P(),className:yt,children:"Resend code to phone"})]}),e("button",{type:"submit",className:bt,children:m?"Verifying...":"Verify & Continue"}),e("button",{type:"button",onClick:()=>i("/login"),className:vt,children:"Back to login"})]})]})});var S,N},St=()=>{const i=y(),o=b(),{refreshSession:n}=X(),r=te(),{passkeySupported:a}=le(),s="login"===o.state?.flow,[l,d]=g(!1),[c,u]=g(""),[m,p]=g(300),[f,h]=g(""),[v,k]=g("");return _(()=>{const e=setInterval(()=>{p(e=>e>0?e-1:0)},1e3);return()=>clearInterval(e)},[]),e("div",{className:dt,children:t("div",{className:ct,children:[e("h2",{className:ut,children:"Verify Your Email"}),e("p",{className:_t,children:"We sent you a verification email. Enter the code below."}),f&&e("p",{className:mt,children:f}),v&&e("p",{className:gt,children:v}),t("form",{onSubmit:async e=>{if(e.preventDefault(),h(""),6===c.length){d(!0);try{const{error:e}=s?await r.verifyLoginEmailOtp(c):await r.verifyEmailOtp(c);if(e)return void h("Verification failed.");if(s)return await n(),void i("/");a?i(pe):(await n(),i("/"))}catch{console.error("Email OTP verification failed."),h("Verification failed.")}finally{d(!1)}}else h("Please enter a valid code.")},className:pt,children:[t("div",{children:[t("label",{htmlFor:"emailCode",className:ft,children:["Email Verification Code",t("span",{className:ht,children:[" ","— Code expires in ",(w=m,`${Math.floor(w/60).toString().padStart(2,"0")}:${(w%60).toString().padStart(2,"0")}`)]})]}),e(xt,{length:6,value:c,onChange:u,inputMode:"text"}),e("button",{type:"button",onClick:async()=>{h(""),k("");const{error:e}=s?await r.requestLoginEmailOtp():await r.requestEmailOtp();e?h("Failed to send Email code. If this persists, refresh the page and try again."):k("Verification email has been resent.")},className:yt,children:"Resend code to email"})]}),e("button",{type:"submit",className:bt,disabled:l,children:l?"Verifying...":"Verify & Continue"}),e("button",{type:"button",onClick:()=>i("/login"),className:vt,children:"Back to login"})]})]})});var w};var Nt={container:"verifyMagiclink-module__container___qrSXf",card:"verifyMagiclink-module__card___niKgr",title:"verifyMagiclink-module__title___SumxD",verificationContent:"verifyMagiclink-module__verificationContent___NdsS0",spinner:"verifyMagiclink-module__spinner___lnW1k",successIcon:"verifyMagiclink-module__successIcon___XjFEM",checkIcon:"verifyMagiclink-module__checkIcon___I0JOP",successText:"verifyMagiclink-module__successText___lO5Qq"};he(".verifyMagiclink-module__container___qrSXf{align-items:center;color:#fff;display:flex;justify-content:center;padding:1rem}.verifyMagiclink-module__card___niKgr{background-color:#1f2937;border-radius:.5rem;box-shadow:0 0 10px rgba(0,0,0,.3);max-width:28rem;padding:1.5rem;width:100%}.verifyMagiclink-module__title___SumxD{color:#fff;font-size:1.5rem;font-weight:700;margin-bottom:1rem;text-align:center}.verifyMagiclink-module__verificationContent___NdsS0{align-items:center;display:flex;flex-direction:column;gap:14px;margin:20px 0}.verifyMagiclink-module__spinner___lnW1k{animation:verifyMagiclink-module__spin___2lGzj .9s linear infinite;border:3px solid hsla(0,0%,100%,.15);border-radius:50%;border-top-color:#60a5fa;height:28px;width:28px}.verifyMagiclink-module__successIcon___XjFEM{align-items:center;background:rgba(16,185,129,.15);border-radius:50%;display:flex;height:36px;justify-content:center;width:36px}.verifyMagiclink-module__checkIcon___I0JOP{animation:verifyMagiclink-module__checkPop___-3qJu .25s ease-out;color:#34d399;height:22px;width:22px}.verifyMagiclink-module__successText___lO5Qq{color:#34d399;font-size:.9rem}@keyframes verifyMagiclink-module__checkPop___-3qJu{0%{opacity:0;transform:scale(.6)}80%{transform:scale(1.15)}to{opacity:1;transform:scale(1)}}@keyframes verifyMagiclink-module__spin___2lGzj{to{transform:rotate(1turn)}}");const Ot=()=>{const[i]=v(),o=y(),n=i.get("token"),[r,a]=g(""),[s,l]=g(""),d=te(),{refreshSession:c}=X();return _(()=>{let e=!0,t=null,i=null;return(async()=>{if(!n)return e&&a("Missing token for verification."),void console.error("No magic-link token found.");const{error:r}=await d.verifyMagicLink(n);if(r)return console.error("Failed to verify token"),void(e&&a("Failed to verify token"));await c(),e&&(t=new BroadcastChannel("seamless-auth"),t.postMessage({type:"MAGIC_LINK_AUTH_SUCCESS"}),l("You have been verified on the device and browser that initiated this request"),i=setTimeout(()=>{e&&o("/")},900))})(),()=>{e=!1,t?.close(),i&&clearTimeout(i)}},[n,d,o,c]),e("div",{className:Nt.container,children:t("div",{className:Nt.card,children:[e("h1",{className:Nt.title,children:"Verifying your login"}),t("div",{className:Nt.verificationContent,children:[!s&&!r&&e("div",{className:Nt.spinner}),s&&e("div",{className:Nt.successIcon,children:e("svg",{viewBox:"0 0 24 24",className:Nt.checkIcon,fill:"none",stroke:"currentColor",strokeWidth:"2",children:e("path",{d:"M5 13l4 4L19 7"})})}),!s&&!r&&e("p",{className:Nt.helperText,children:"Please wait while we securely verify your sign-in link."}),s&&e("p",{className:Nt.successText,children:"Login verified. Redirecting…"}),r&&e("p",{className:Nt.error,children:r})]})]})})},Tt={oauth_missing_email:"Your provider account did not share an email address. Add an email to that account and make it visible, then try again.",oauth_email_not_verified:"The email address on your provider account is not verified. Verify it with your provider, then try again.",oauth_missing_subject:"Your provider did not return a usable account identifier. Try again, or sign in with a different method."},Ct=()=>{const{finishOAuthLogin:o}=X(),n=y(),[r]=v(),[a,s]=g(""),l=p(!1);return _(()=>{if(l.current)return;l.current=!0;const e=r.get("code"),t=r.get("state"),i=sessionStorage.getItem(Le);e&&t&&i?o({providerId:i,code:e,state:t}).then(({error:e})=>{if(e){const t=T(e);return void s(t?Tt[t]:"We could not complete sign-in. Please try again.")}sessionStorage.removeItem(Le),n("/")}):s("This sign-in link is missing required information.")},[o,n,r]),t("div",{className:Nt.container,children:[e("h2",{className:Nt.title,children:a?"Sign-in failed":"Completing sign-in..."}),a&&t(i,{children:[e("p",{children:a}),e("button",{type:"button",onClick:()=>n("/login"),children:"Back to login"})]})]})};var Mt="magiclink-module__container___45zcA",It="magiclink-module__card___Au9oN",At="magiclink-module__iconWrapper___k5ndr",zt="magiclink-module__mailIcon___Pwb7q",Et="magiclink-module__iconRing___bdLvf",Ft="magiclink-module__heading___b9cre",Ut="magiclink-module__message___kiVFj",Lt="magiclink-module__identifier___JtcFM",Rt="magiclink-module__helperText___7Mlfh",Bt="magiclink-module__actions___64I-3",qt="magiclink-module__secondaryButton___BntAI",jt="magiclink-module__cooldown___Ib4rm",Jt="magiclink-module__linkButton___maJiv";he(".magiclink-module__container___45zcA{align-items:center;color:#fff;display:flex;justify-content:center}.magiclink-module__card___Au9oN{background-color:#1f2937;border-radius:.75rem;box-shadow:0 10px 25px rgba(0,0,0,.25);max-width:420px;padding:2.5rem 2rem;text-align:center;width:100%}.magiclink-module__iconWrapper___k5ndr{display:flex;justify-content:center;margin-bottom:1.25rem;position:relative}.magiclink-module__mailIcon___Pwb7q{color:#a5b4fc;height:38px;width:38px;z-index:2}.magiclink-module__iconRing___bdLvf{animation:magiclink-module__pulse___YGm-I 2s infinite;background:rgba(99,102,241,.15);border-radius:50%;height:72px;position:absolute;width:72px}@keyframes magiclink-module__pulse___YGm-I{0%{opacity:.8;transform:scale(.6)}70%{opacity:0;transform:scale(1.4)}to{opacity:0}}.magiclink-module__heading___b9cre{font-size:1.55rem;font-weight:600;margin-bottom:.75rem}.magiclink-module__message___kiVFj{color:#d1d5db;font-size:.95rem;line-height:1.4;margin-bottom:1rem}.magiclink-module__identifier___JtcFM{background:hsla(0,0%,100%,.05);border-radius:6px;display:inline-block;font-size:1rem;font-weight:600;margin-bottom:1rem;padding:.45rem .6rem}.magiclink-module__helperText___7Mlfh{color:#9ca3af;font-size:.85rem;line-height:1.4;margin-bottom:.6rem}.magiclink-module__actions___64I-3{display:flex;flex-direction:column;gap:.6rem;margin-top:1.6rem}.magiclink-module__secondaryButton___BntAI{background:#111827;border:1px solid #374151;border-radius:8px;color:#fff;cursor:pointer;font-weight:500;padding:.65rem}.magiclink-module__secondaryButton___BntAI:hover:not(:disabled){background:#1f2937}.magiclink-module__secondaryButton___BntAI:disabled{cursor:not-allowed;opacity:.5}.magiclink-module__cooldown___Ib4rm{color:#9ca3af;font-size:.8rem}.magiclink-module__linkButton___maJiv{background:none;border:none;color:#a5b4fc;cursor:pointer;font-size:.85rem;margin-top:.4rem}.magiclink-module__linkButton___maJiv:hover{text-decoration:underline}");const Gt=()=>{const{refreshSession:i}=X(),o=y(),n=b(),r=te(),a=n.state?.identifier,[s,l]=g(30);_(()=>{const e=setInterval(()=>{l(e=>e>0?e-1:0)},1e3);return()=>clearInterval(e)},[]);const d=f(async()=>{const{data:e,error:t}=await r.checkMagicLink();return!t&&"Success"===e?.message},[r]);return _(()=>{const e=new BroadcastChannel("seamless-auth");return e.onmessage=async e=>{"MAGIC_LINK_AUTH_SUCCESS"===e.data?.type&&await d()&&(await i(),o("/"))},()=>{e.close()}},[d,o,i]),_(()=>{const e=setInterval(async()=>{try{await d()&&(await i(),o("/"))}catch{}},5e3);return()=>clearInterval(e)},[d,i,o]),e("div",{className:Mt,children:t("div",{className:It,children:[t("div",{className:At,children:[e("div",{className:Et}),t("svg",{className:zt,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",children:[e("path",{d:"M4 6h16v12H4z"}),e("path",{d:"m4 6 8 6 8-6"})]})]}),e("h2",{className:Ft,children:"Check your email"}),e("p",{className:Ut,children:"If an account exists for this address, we sent a secure sign-in link."}),a&&e("div",{className:Lt,children:a}),e("p",{className:Rt,children:"Open the email and click the link to finish signing in."}),e("p",{className:Rt,children:"Didn’t receive anything? Check your spam folder or try creating a new account."}),t("div",{className:Bt,children:[e("button",{className:qt,disabled:s>0,onClick:async()=>{s>0||(await r.requestMagicLink(),l(30))},children:"Resend link"}),s>0&&t("div",{className:jt,children:["Available in ",s,"s"]}),e("button",{className:Jt,onClick:()=>o("/login"),children:"Change email or phone"})]})]})})},Dt=()=>t(k,{children:[e(w,{path:de,element:e(Be,{})}),e(w,{path:ce,element:e(je,{})}),e(w,{path:ue,element:e(Pt,{})}),e(w,{path:_e,element:e(St,{})}),e(w,{path:me,element:e(Ot,{})}),e(w,{path:ge,element:e(Ct,{})}),e(w,{path:pe,element:e(lt,{})}),e(w,{path:fe,element:e(Gt,{})}),e(w,{path:"*",element:e(x,{to:de,replace:!0})})]});export{ee as AuthProvider,Dt as AuthRoutes,S as SeamlessAuthError,$ as createSeamlessAuthClient,U as encodePrfSalt,j as extractPasskeyPrfResult,T as getOAuthErrorCode,C as getWebAuthnErrorDetail,ne as hasNonPasskeyLoginMethod,K as hasScopedRole,B as isPasskeyPrfSupported,V as roleGrantsAccess,X as useAuth,te as useAuthClient,oe as useLoginMethods,le as usePasskeySupport};
1
+ import{jsx as e,jsxs as t,Fragment as r}from"react/jsx-runtime";import{browserSupportsWebAuthn as o,bufferToBase64URLString as n,base64URLStringToBuffer as a,startAuthentication as i,startRegistration as s,WebAuthnError as l}from"@simplewebauthn/browser";import{createContext as c,useMemo as d,useSyncExternalStore as u,useEffect as m,useContext as _,useState as g,useRef as f,useCallback as p}from"react";import{useHref as h,useNavigate as y,useLocation as b,useSearchParams as v,Routes as k,Route as w,Navigate as x}from"react-router-dom";import P from"libphonenumber-js";class S extends Error{constructor(e,t,r,o){super(e),this.name="SeamlessAuthError",this.status=t,this.body=r,this.cause=o}}const O={oauth_missing_email:!0,oauth_email_not_verified:!0,oauth_missing_subject:!0};function N(e){if("object"==typeof e&&null!==e)return e.code}function T(e){if(!(e instanceof S))return;if("object"!=typeof e.body||null===e.body)return;const t=N(e.body)??N(e.body.details);return"string"==typeof t&&Object.prototype.hasOwnProperty.call(O,t)?t:void 0}const C={attachment_not_allowed:!0,synced_passkey_not_allowed:!0,authenticator_not_allowed:!0,prf_required:!0};function I(e){if("object"!=typeof e||null===e)return;const t=e.error;return"string"==typeof t&&Object.prototype.hasOwnProperty.call(C,t)?t:void 0}function A(e){if(e instanceof S&&"object"==typeof e.body&&null!==e.body)return I(e.body)??I(e.body.details)}function M(e){if(!(e instanceof S)||("object"!=typeof(t=e.cause)||null===t||"string"!=typeof t.name))return;var t;const{name:r,code:o,message:n}=e.cause;return{name:r,code:"string"==typeof o?o:void 0,message:"string"==typeof n?n:""}}async function E(e,t){let r;try{r=await e.json()}catch{r=void 0}return new S(function(e){if("object"!=typeof e||null===e)return;const{error:t,message:r}=e;return"string"==typeof t&&t?t:"string"==typeof r&&r?r:void 0}(r)??t,e.status,r)}async function F(e){try{return await e.json()}catch{return}}async function z(e,t){let r;try{r=await e}catch{return{data:null,error:new S(t,0)}}return r.ok?{data:await F(r),error:null}:{data:null,error:await E(r,t)}}function U(e){return{data:e,error:null}}function L(e,t=0,r,o){return{data:null,error:new S(e,t,r,o)}}function q(e){if(e instanceof ArrayBuffer)return e;const t=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),r=new Uint8Array(t.byteLength);return r.set(t),r.buffer}function B(e){return"string"==typeof e?e:n(q(e))}function R(e){return"string"==typeof e?a(e):e}function j(e){return{...e.credentialId?{credentialId:e.credentialId}:{},prf:{salt:B(e.salt),...e.secondSalt?{secondSalt:B(e.secondSalt)}:{}}}}async function J(){return!!o()&&("undefined"==typeof window||!1!==window.isSecureContext)&&void 0!==globalThis.PublicKeyCredential&&"undefined"!=typeof navigator&&"function"==typeof navigator.credentials?.get}function G(e){const t=e,r=t.extensions?.prf?.eval;return r?{...t,extensions:{...t.extensions,prf:{...t.extensions?.prf,eval:{...r,...r.first?{first:R(r.first)}:{},...r.second?{second:R(r.second)}:{}}}}}:e}function W(e){const t=e.clientExtensionResults,r=t?.prf?.results?.first;if(!r)return null;const o=(a=r)instanceof ArrayBuffer?new Uint8Array(a):new Uint8Array(a.buffer,a.byteOffset,a.byteLength);var a;return{credentialId:e.id,output:o,outputBase64url:n(q(o))}}function D(e){const t=e.clientExtensionResults;return t?.prf?.results?{...e,clientExtensionResults:{...e.clientExtensionResults,prf:{...t.prf,results:void 0}}}:e}function $(e,t){const r=e.method===t?e.method:null;return"Success"===e.message&&!0===e.fresh&&null!==r?U({fresh:!0,method:r,verifiedAt:e.verifiedAt??null,expiresAt:e.expiresAt??null,maxAgeSeconds:e.maxAgeSeconds??0}):L(e.message??"Step-up authentication failed.")}function V(e){return e?{method:"POST",body:JSON.stringify(j(e))}:{method:"POST"}}function K(e,t,r){const o=L(t,0,void 0,r),n=M(o.error);return console.error(e,n?.name??"Unknown error."),o}const H=e=>{const t=(e=>{const{authHost:t}=e;return async function(e,r){const o=`${t?.replace(/\/+$/,"")??""}/auth${e.startsWith("/")?e:`/${e}`}`,n=null!=r?.body,a={...r,credentials:"include",headers:{...n?{"Content-Type":"application/json"}:{},...r?.headers}};return fetch(o,a)}})({authHost:e.apiHost});return{getCurrentUser:()=>z(t("users/me",{method:"GET"}),"Failed to load the current user."),login:e=>z(t("/login",{method:"POST",body:JSON.stringify(e)}),"Failed to start sign-in."),loginWithPasskey:async e=>{const r=await z(t("/webAuthn/login/start",{...V(e?.prf)}),"Failed to start passkey login.");if(r.error)return r;let o,n;try{const e=await i({optionsJSON:G(r.data)});o=W(e),n=D(e)}catch(e){return K("Passkey login error.","Passkey login failed.",e)}const a=await z(t("/webAuthn/login/finish",{method:"POST",body:JSON.stringify({assertionResponse:n})}),"Failed to verify passkey.");return a.error?a:"Success"!==a.data?.message?L(a.data?.message??"Passkey login failed."):U(o?{prf:o}:{})},logout:(e={})=>z(t("all_sessions"===e.scope?"/logout/all":"/logout",{method:"DELETE"}),"Failed to sign out."),logoutAllSessions:()=>z(t("/logout/all",{method:"DELETE"}),"Failed to sign out of all sessions."),deleteUser:()=>z(t("/users/delete",{method:"DELETE"}),"Failed to delete the account."),register:e=>z(t("/registration/register",{method:"POST",body:JSON.stringify({email:e.email,...e.phone?{phone:e.phone}:{}})}),"Failed to register."),requestPhoneOtp:()=>z(t("/otp/generate-phone-otp",{method:"POST",body:JSON.stringify({})}),"Failed to send the SMS code."),verifyPhoneOtp:e=>z(t("/otp/verify-phone-otp",{method:"POST",body:JSON.stringify({verificationToken:e})}),"Failed to verify the SMS code."),requestLoginPhoneOtp:()=>z(t("/otp/generate-login-phone-otp",{method:"POST",body:JSON.stringify({})}),"Failed to send the SMS code."),verifyLoginPhoneOtp:e=>z(t("/otp/verify-login-phone-otp",{method:"POST",body:JSON.stringify({verificationToken:e})}),"Failed to verify the SMS code."),requestEmailOtp:()=>z(t("/otp/generate-email-otp",{method:"POST",body:JSON.stringify({})}),"Failed to send the email code."),verifyEmailOtp:e=>z(t("/otp/verify-email-otp",{method:"POST",body:JSON.stringify({verificationToken:e})}),"Failed to verify the email code."),requestLoginEmailOtp:()=>z(t("/otp/generate-login-email-otp",{method:"POST",body:JSON.stringify({})}),"Failed to send the email code."),verifyLoginEmailOtp:e=>z(t("/otp/verify-login-email-otp",{method:"POST",body:JSON.stringify({verificationToken:e})}),"Failed to verify the email code."),requestMagicLink:e=>z(t("/magic-link",{method:"POST",body:JSON.stringify(e?{redirectUri:e}:{})}),"Failed to send the magic link."),checkMagicLink:()=>z(t("/magic-link/check",{method:"GET"}),"Failed to check the magic link."),verifyMagicLink:e=>z(t(`/magic-link/verify/${encodeURIComponent(e)}`,{method:"GET"}),"Failed to verify the magic link."),listOAuthProviders:()=>z(t("/oauth/providers",{method:"GET"}),"Failed to list OAuth providers."),getPublicSystemConfig:()=>z(t("/system-config/public",{method:"GET"}),"Failed to read the public system configuration."),startOAuthLogin:e=>z(t(`/oauth/${encodeURIComponent(e.providerId)}/start`,{method:"POST",body:JSON.stringify({...e.redirectUri?{redirectUri:e.redirectUri}:{},...e.returnTo?{returnTo:e.returnTo}:{}})}),"Failed to start OAuth login."),finishOAuthLogin:e=>z(t(`/oauth/${encodeURIComponent(e.providerId)}/callback`,{method:"POST",body:JSON.stringify({code:e.code,state:e.state})}),"Failed to finish OAuth login."),registerPasskey:async e=>{const r=function(e){return"metadata"in e?e:{metadata:e}}(e),o=await z(t(function(e){const t=new URLSearchParams;e.requirePrf?t.set("requirePrf","true"):e.requestPrf&&t.set("requestPrf","true"),e.attachment&&t.set("attachment",e.attachment);const r=t.toString();return"/webAuthn/register/start"+(r?`?${r}`:"")}(r),{method:"GET"}),"Failed to fetch passkey registration challenge.");if(o.error)return o;let n;try{n=await s({optionsJSON:o.data})}catch(e){return e instanceof l?L(e.name,0,void 0,e):K("Passkey registration error.","Passkey registration failed.",e)}const a=function(e){const t=e.clientExtensionResults;return!0===t?.prf?.enabled}(n),i=await z(t("/webAuthn/register/finish",{method:"POST",body:JSON.stringify({attestationResponse:n,metadata:{...r.metadata,prfCapable:a}})}),"Verification failed.");return i.error?i:U({credentialId:n.id,prfCapable:a})},isPasskeyPrfSupported:J,getStepUpStatus:()=>z(t("/step-up/status",{method:"GET"}),"Failed to load step-up status."),verifyStepUpWithPasskey:async()=>{const e=await z(t("/step-up/webauthn/start",{method:"POST"}),"Failed to start step-up authentication.");if(e.error)return e;let r;try{r=D(await i({optionsJSON:G(e.data)}))}catch(e){return K("Step-up authentication error.","Step-up authentication failed.",e)}const o=await z(t("/step-up/webauthn/finish",{method:"POST",body:JSON.stringify({assertionResponse:r})}),"Failed to verify step-up authentication.");return o.error?o:$(o.data??{},"webauthn")},verifyStepUpWithPasskeyPrf:async e=>{const r=await z(t("/step-up/webauthn/start",{...V(e)}),"Failed to start step-up authentication.");if(r.error)return r;let o,n;try{const e=await i({optionsJSON:G(r.data)});o=W(e),n=D(e)}catch(e){return K("Step-up authentication error.","Step-up authentication failed.",e)}if(!o)return L("Passkey did not return PRF output.");const a=await z(t("/step-up/webauthn/finish",{method:"POST",body:JSON.stringify({assertionResponse:n})}),"Failed to verify step-up authentication.");if(a.error)return a;const s=$(a.data??{},"webauthn");return s.error?s:U({...s.data,credentialId:o.credentialId,prf:o})},getTotpStatus:()=>z(t("/totp/status",{method:"GET"}),"Failed to load authenticator status."),startTotpEnrollment:()=>z(t("/totp/enroll/start",{method:"POST"}),"Failed to start authenticator enrollment."),verifyTotpEnrollment:e=>z(t("/totp/enroll/verify",{method:"POST",body:JSON.stringify({code:e})}),"Failed to verify the authenticator code."),disableTotp:e=>z(t("/totp/disable",{method:"POST",body:JSON.stringify({code:e})}),"Failed to disable the authenticator."),verifyStepUpWithTotp:async e=>{const r=await z(t("/totp/verify-mfa",{method:"POST",body:JSON.stringify({code:e})}),"Failed to verify step-up authentication.");return r.error?r:$(r.data??{},"totp")},updateCredential:e=>z(t("users/credentials",{method:"POST",body:JSON.stringify(e)}),"Failed to update credential."),deleteCredential:e=>z(t("users/credentials",{method:"DELETE",body:JSON.stringify({id:e})}),"Failed to delete credential."),listOrganizations:()=>z(t("/organizations",{method:"GET"}),"Failed to list organizations."),createOrganization:e=>z(t("/organizations",{method:"POST",body:JSON.stringify(e)}),"Failed to create organization."),getOrganization:e=>z(t(`/organizations/${encodeURIComponent(e)}`,{method:"GET"}),"Failed to load organization."),updateOrganization:(e,r)=>z(t(`/organizations/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(r)}),"Failed to update organization."),switchOrganization:e=>z(t(`/organizations/${encodeURIComponent(e)}/switch`,{method:"POST"}),"Failed to switch organization."),listOrganizationMembers:e=>z(t(`/organizations/${encodeURIComponent(e)}/members`,{method:"GET"}),"Failed to list organization members."),addOrganizationMember:(e,r)=>z(t(`/organizations/${encodeURIComponent(e)}/members`,{method:"POST",body:JSON.stringify(r)}),"Failed to add organization member."),updateOrganizationMember:(e,r,o)=>z(t(`/organizations/${encodeURIComponent(e)}/members/${encodeURIComponent(r)}`,{method:"PATCH",body:JSON.stringify(o)}),"Failed to update organization member."),removeOrganizationMember:(e,r)=>z(t(`/organizations/${encodeURIComponent(e)}/members/${encodeURIComponent(r)}`,{method:"DELETE"}),"Failed to remove organization member.")}};function Y(e,t){const r=e.trim(),o=t.trim();if(!r||!o)return!1;if(r===o)return!0;if(r.endsWith(":*")){const e=r.slice(0,-2);return o===e||o.startsWith(`${e}:`)}if(!o.includes(":"))return!1;if(!r.includes(":"))return o.startsWith(`${r}:`);const n=r.split(":"),a=o.split(":"),i=n[n.length-1],s=a[a.length-1],l=n.slice(0,-1),c=a.slice(0,-1);return"write"===i&&"read"===s&&l.length===c.length&&l.every((e,t)=>e===c[t])}function Z(e,t){if(!Array.isArray(e))return!1;const r=e.filter(e=>"string"==typeof e);return(Array.isArray(t)?t:[t]).some(e=>r.some(t=>Y(t,e)))}function Q(){return"undefined"==typeof localStorage?function(){const e=new Map;return{get:t=>e.get(t)??null,set:(t,r)=>{e.set(t,r)}}}():{get:e=>{try{return localStorage.getItem(e)}catch{return null}},set:(e,t)=>{try{localStorage.setItem(e,t)}catch{}}}}const X="seamlessauth_seen",ee={user:null,credentials:[],organizations:[],activeOrganization:null,stepUpStatus:null,isAuthenticated:!1};const te=c(void 0),re=()=>{const e=_(te);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e},oe=({children:t,apiHost:r,autoDetectPreviousSignin:o=!0})=>{const n=d(()=>function(e){const{apiHost:t,detectPreviousSignIn:r=!0}=e,o=H({apiHost:t}),n=e.storage??Q(),a=new Set;let i=!1,s=0,l={...ee,loading:!0,hasSignedInBefore:r&&"true"===n.get(X)};function c(e){const t={...l,...e};Object.keys(e).some(e=>l[e]!==t[e])&&(l=t,a.forEach(e=>e()))}function d(){n.set(X,"true"),r&&c({hasSignedInBefore:!0})}function u(){c(ee)}async function m(){const e=++s;c({loading:!0});const t=await o.getCurrentUser();return i||e!==s?t:t.error?(u(),c({loading:!1}),t):(c({user:t.data.user,credentials:t.data.credentials??[],organizations:t.data.organizations??[],activeOrganization:t.data.activeOrganization??null,isAuthenticated:!0,loading:!1}),l.hasSignedInBefore||d(),t)}async function _(e){const t=await e();return t.error||await m(),t}return{getState:()=>l,subscribe:e=>(a.add(e),()=>{a.delete(e)}),actions:{login:(e,t)=>o.login({identifier:e,passkeyAvailable:t}),handlePasskeyLogin:()=>_(()=>o.loginWithPasskey()),refreshSession:m,logout:async function(){try{return await o.logout()}finally{u()}},logoutAllSessions:async function(){try{return await o.logoutAllSessions()}finally{u()}},deleteUser:async()=>{const e=await o.deleteUser();return e.error||u(),e},updateCredential:async e=>{const{data:t,error:r}=await o.updateCredential({friendlyName:e.friendlyName??null,id:e.id});if(r)return{data:null,error:r};const n=t.credential;return c({credentials:l.credentials.map(e=>e.id===n.id?{...e,...n}:e)}),{data:n,error:null}},deleteCredential:async e=>{const t=await o.deleteCredential(e);return t.error||c({credentials:l.credentials.filter(t=>t.id!==e)}),t},switchOrganization:e=>_(()=>o.switchOrganization(e)),listOAuthProviders:()=>o.listOAuthProviders(),startOAuthLogin:e=>o.startOAuthLogin(e),finishOAuthLogin:e=>_(()=>o.finishOAuthLogin(e)),refreshStepUpStatus:async()=>{const e=await o.getStepUpStatus();return c({stepUpStatus:e.error?null:e.data}),e},verifyStepUpWithPasskey:async()=>{const e=await o.verifyStepUpWithPasskey();return e.error||c({stepUpStatus:e.data}),e},verifyStepUpWithPasskeyPrf:async e=>{const t=await o.verifyStepUpWithPasskeyPrf(e);return t.error||c({stepUpStatus:{fresh:t.data.fresh,method:t.data.method,verifiedAt:t.data.verifiedAt,expiresAt:t.data.expiresAt,maxAgeSeconds:t.data.maxAgeSeconds}}),t},verifyStepUpWithTotp:async e=>{const t=await o.verifyStepUpWithTotp(e);return t.error||c({stepUpStatus:t.data}),t},hasRole:e=>l.user?.roles?.includes(e),hasScopedRole:e=>l.user?Z(l.user.roles,e):void 0,markSignedIn:d},destroy:()=>{i=!0,a.clear()}}}({apiHost:r,detectPreviousSignIn:o}),[r,o]),a=u(n.subscribe,n.getState,n.getState);m(()=>{n.actions.refreshSession()},[n]);const i=d(()=>({...a,...n.actions,apiHost:r}),[a,n,r]);return e(te.Provider,{value:i,children:t})},ne=()=>{const{apiHost:e}=re();return d(()=>H({apiHost:e}),[e])},ae=["passkey","magic_link"],ie=()=>{const e=ne(),[t,r]=g(null),[o,n]=g(!0);return m(()=>{let t=!0;return(async()=>{try{const{data:o,error:n}=await e.getPublicSystemConfig();t&&!n&&o?.loginMethods?.length&&r(o.loginMethods)}catch{}finally{t&&n(!1)}})(),()=>{t=!1}},[e]),{loginMethods:t,loading:o}},se=e=>Boolean(e?.some(e=>"passkey"!==e)),le=e=>{if("string"!=typeof e)return!1;const t=e.trim();if(t.length<3||t.length>320)return!1;const r=t.split("@");if(2!==r.length)return!1;const[o,n]=r;return!(!/^[A-Za-z0-9._%+-]+$/.test(o)||o.startsWith(".")||o.endsWith(".")||o.includes(".."))&&!(!/^[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/.test(n)||n.startsWith("-")||n.endsWith("-")||n.startsWith(".")||n.endsWith(".")||n.includes(".."))},ce=e=>{const t=P(e);return t?.isValid()||!1};async function de(){return async function(){if("undefined"==typeof window)return!1;if(window.PublicKeyCredential&&"function"==typeof window.PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable)try{return await PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable()}catch{return console.error("Error checking passkey support."),!1}return!1}()}const ue=()=>{const[e,t]=g(!1),[r,o]=g(!0);return m(()=>{let e=!0;return(async()=>{try{const r=await de();e&&t(r)}catch{e&&t(!1)}finally{e&&o(!1)}})(),()=>{e=!1}},[]),{passkeySupported:e,loading:r}},me="/login",_e="/passkey-login",ge="/verify-phone-otp",fe="/verify-email-otp",pe="/verify-magiclink",he="/oauth/callback",ye="/register-passkey",be="/magic-link-sent";function ve(e,t){void 0===t&&(t={});var r=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css","top"===r&&o.firstChild?o.insertBefore(n,o.firstChild):o.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}}var ke="login-module__container___YggDx",we="login-module__card___Ub-Py",xe="login-module__heading___neEqb",Pe="login-module__inputGroup___P6qgS",Se="login-module__label___mx5vu",Oe="login-module__input___U07lW",Ne="login-module__helperText___kDQ4-",Te="login-module__error___40zxh",Ce="login-module__button___0kFBs",Ie="login-module__toggle___1JiG1",Ae="login-module__fallbackCard___HdIk-",Me="login-module__fallbackHeader___-il2v",Ee="login-module__fallbackDescription___ea5EB",Fe="login-module__fallbackActions___AD3ni",ze="login-module__fallbackActionButton___lFgWf",Ue="login-module__actionTitle___ycrMp",Le="login-module__actionSubtext___opaIV",qe="login-module__linkButton___5lsoe";ve(".login-module__container___YggDx{align-items:center;color:var(--seamless-text,#fff);display:flex;justify-content:center}.login-module__card___Ub-Py{background-color:var(--seamless-surface,#1f2937);border-radius:.5rem;box-shadow:0 4px 6px var(--seamless-shadow,rgba(0,0,0,.1));max-width:28rem;padding:2rem;width:100%}.login-module__heading___neEqb{color:var(--seamless-text,#fff);font-size:1.5rem;font-weight:700;margin-bottom:1.5rem;text-align:center}.login-module__message___qSejT{color:var(--seamless-success,#68d391);text-align:center}.login-module__inputGroup___P6qgS{margin-bottom:1rem}.login-module__label___mx5vu{color:var(--seamless-text-muted,#d1d5db);display:block}.login-module__input___U07lW{background-color:var(--seamless-surface-raised,#4b5563);border:1px solid var(--seamless-border,#d1d5db);border-radius:.375rem;margin-top:.25rem;padding:.5rem;width:100%}.login-module__input___U07lW:focus{box-shadow:0 0 0 2px var(--seamless-accent,#3b82f6);outline:none}.login-module__helperText___kDQ4-{color:var(--seamless-text-muted,#9ca3af);font-size:.75rem;margin-top:.5rem}.login-module__error___40zxh{color:var(--seamless-danger,#f87171);font-size:.875rem}.login-module__button___0kFBs{background-color:var(--seamless-accent,#2563eb);border-radius:.375rem;color:var(--seamless-accent-contrast,#fff);cursor:pointer;margin-top:1rem;padding:.5rem;transition:background-color .3s;width:100%}.login-module__button___0kFBs:hover{background-color:var(--seamless-accent-hover,#1d4ed8)}.login-module__button___0kFBs:disabled{background-color:var(--seamless-disabled,#9ca3af);cursor:not-allowed}.login-module__toggle___1JiG1{background:none;border:none;color:var(--seamless-accent-soft,#60a5fa);cursor:pointer;font-size:.875rem;margin-top:1.5rem;text-align:center;width:100%}.login-module__underline___gs-RS{text-decoration:underline}.login-module__phoneRow___oeNtq{display:grid;gap:.5rem;grid-template-columns:1fr 3fr;margin-top:.25rem}.login-module__phoneInput___2MPQC,.login-module__select___rRV1O{background-color:var(--seamless-surface-raised,#4b5563);border:1px solid var(--seamless-border,#d1d5db);border-radius:.375rem;padding:.5rem;width:100%}@media (max-width:500px){.login-module__phoneRow___oeNtq{grid-template-columns:1fr}}.login-module__fallbackCard___HdIk-{background:var(--seamless-surface-raised,hsla(0,0%,100%,.04));border:1px solid var(--seamless-border,hsla(0,0%,100%,.08));border-radius:12px;display:flex;flex-direction:column;gap:14px;margin-top:18px;padding:18px}.login-module__fallbackHeader___-il2v{color:var(--seamless-text,#f3f4f6);font-size:.95rem;font-weight:600}.login-module__fallbackDescription___ea5EB{color:var(--seamless-text-muted,#9ca3af);font-size:.85rem;line-height:1.4}.login-module__fallbackActions___AD3ni{display:flex;flex-direction:column;gap:10px}.login-module__fallbackActionButton___lFgWf{background:var(--seamless-surface,rgba(0,0,0,.25));border:1px solid var(--seamless-border,hsla(0,0%,100%,.08));border-radius:8px;cursor:pointer;display:flex;flex-direction:column;padding:12px 14px;text-align:left;transition:all .15s ease}.login-module__fallbackActionButton___lFgWf:hover{background:var(--seamless-surface-hover,hsla(0,0%,100%,.06));border-color:var(--seamless-border,hsla(0,0%,100%,.15))}.login-module__actionTitle___ycrMp{color:var(--seamless-text,#f9fafb);font-size:.9rem;font-weight:500}.login-module__actionSubtext___opaIV{color:var(--seamless-text-muted,#9ca3af);font-size:.75rem;margin-top:2px}.login-module__linkButton___5lsoe{background:none;border:none;color:var(--seamless-accent-soft,#60a5fa);cursor:pointer;font-size:.8rem;margin-top:6px}.login-module__linkButton___5lsoe:hover{text-decoration:underline}");const Be=({identifier:r,onMagicLink:o,onEmailOtp:n,onPhoneOtp:a,onPasskeyRetry:i,loginMethods:s})=>{const l=new Set(s??["passkey","magic_link","phone_otp"]),c=l.has("magic_link")&&le(r),d=l.has("email_otp")&&Boolean(n)&&le(r),u=l.has("phone_otp")&&ce(r),m=l.has("passkey")&&Boolean(i);return c||d||u||m?t("div",{className:Ae,children:[e("div",{className:Me,children:"Choose a sign-in method"}),e("p",{className:Ee,children:"Choose another secure sign-in method."}),t("div",{className:Fe,children:[c&&t("button",{type:"button",className:ze,onClick:o,children:[e("span",{className:Ue,children:"Email Magic Link"}),e("span",{className:Le,children:"Send a secure sign-in link to your email"})]}),d&&t("button",{type:"button",className:ze,onClick:n,children:[e("span",{className:Ue,children:"Email Code"}),e("span",{className:Le,children:"Receive a one-time code by email"})]}),u&&t("button",{type:"button",className:ze,onClick:a,children:[e("span",{className:Ue,children:"Text Message Code"}),e("span",{className:Le,children:"Receive a one-time code via SMS"})]})]}),m&&e("button",{type:"button",className:qe,onClick:i,children:"Try passkey anyway"})]}):null},Re="seamless:oauth:provider",je=()=>{const{listOAuthProviders:r,startOAuthLogin:o}=re(),n=h("/oauth/callback"),[a,i]=g([]),[s,l]=g("");if(m(()=>{let e=!0;return r().then(({data:t})=>{e&&i(t?.providers??[])}),()=>{e=!1}},[r]),0===a.length)return null;return t("div",{className:Fe,children:[a.map(r=>e("button",{type:"button",className:ze,onClick:()=>(async e=>{l(""),sessionStorage.setItem(Re,e);const{data:t,error:r}=await o({providerId:e,redirectUri:new URL(n,window.location.origin).toString()});r?l("Could not start sign-in with this provider."):window.location.assign(t.authorizationUrl)})(r.id),children:t("span",{className:Ue,children:["Continue with ",r.name]})},r.id)),s&&e("p",{className:Te,children:s})]})},Je=()=>{const o=y(),{hasSignedInBefore:n,login:a,handlePasskeyLogin:i}=re(),s=ne(),{passkeySupported:l}=ue(),{loginMethods:c}=ie(),[d,u]=g(""),[_,f]=g(""),[p,h]=g("register"),[b,v]=g(""),[k,w]=g(""),[x,P]=g(""),[S,O]=g(!1),[N,T]=g(null);m(()=>{n&&h("login")},[n]);return e("div",{className:ke,children:t("div",{className:we,children:[e("h2",{className:xe,children:"login"===p?"Sign In":"Create Account"}),t(r,{children:[t("form",{onSubmit:async e=>{e.preventDefault(),v(""),O(!1);try{if("login"===p){const{data:e,error:t}=await a(d,l);if(t)return void v("Failed to start sign-in. Please try again.");const r=e?.loginMethods?.length?e.loginMethods:c??ae;if(T(r),l&&r.includes("passkey")){const{error:e}=await i();return e?(O(!0),void v("Passkey sign-in could not be completed. Choose another sign-in method.")):void o("/")}return void O(!0)}"register"===p&&await(async()=>{v("");const{data:e,error:t}=await s.register({email:_});t?v("Failed to register. Please try again."):"Success"===e.message?o(fe):v("An unexpected error occurred. Try again. If the problem persists, contact support.")})()}catch{console.error("Failed to continue sign-in."),v("Failed to continue sign-in. Please try again.")}},children:["login"===p&&t("div",{className:Pe,children:[e("label",{htmlFor:"identifier",className:Se,children:"Email Address / Phone Number"}),e("input",{id:"identifier",type:"text",value:d,onChange:e=>{const t=e.target.value;u(t)},autoComplete:"off",placeholder:"Email or Phone Number",className:Oe,onBlur:()=>{if(d){const e=le(d)||ce(d);P(e?"":"Please enter a valid email or phone number")}},required:!0}),e("p",{className:Ne,children:"Phone numbers must include a country code e.g. +1"}),S&&e(Be,{identifier:d,onMagicLink:async()=>{const{error:e}=await s.requestMagicLink();e?v("Failed to send magic link."):o(be,{state:{identifier:d}})},onEmailOtp:async()=>{const{error:e}=await s.requestLoginEmailOtp();e?v("Failed to send email code."):o(fe,{state:{flow:"login"}})},onPhoneOtp:async()=>{const{error:e}=await s.requestLoginPhoneOtp();e?v("Failed to send OTP."):o(ge,{state:{flow:"login"}})},onPasskeyRetry:l?i:void 0,loginMethods:N}),x&&e("p",{className:Te,children:x})]}),"register"===p&&t("div",{className:Pe,children:[e("label",{htmlFor:"email",className:Se,children:"Email Address"}),e("input",{id:"email",type:"email",value:_,onChange:e=>{const t=e.target.value;f(t)},autoComplete:"off",className:Oe,onBlur:()=>{if(_){const e=le(_);w(e?"":"Please enter a valid email")}},required:!0}),k&&e("p",{className:Te,children:k})]}),e("button",{type:"submit",className:Ce,disabled:!("login"===p&&d?le(d)||ce(d):le(_)),children:"login"===p?"Login":"Register"}),b&&e("p",{className:Te,children:b}),e("button",{type:"button",onClick:()=>h("login"===p?"register":"login"),className:Ie,children:"login"===p?"Don't have an account? Create one":"Already have an account? Sign in"})]}),e(je,{})]})]})})};var Ge={container:"passKeyLogin-module__container___IUKxF",card:"passKeyLogin-module__card___2sKM1",title:"passKeyLogin-module__title___HZxvc",button:"passKeyLogin-module__button___FvR4I"};ve(".passKeyLogin-module__container___IUKxF{align-items:center;color:var(--seamless-text,#fff);display:flex;justify-content:center;padding:1rem}.passKeyLogin-module__card___2sKM1{background-color:var(--seamless-surface,#1f2937);border-radius:1rem;box-shadow:0 4px 20px var(--seamless-shadow,rgba(0,0,0,.4));display:flex;flex-direction:column;gap:1.5rem;max-width:400px;padding:2rem;width:100%}.passKeyLogin-module__title___HZxvc{color:var(--seamless-text,#fff);font-size:1.5rem;font-weight:600;text-align:center}.passKeyLogin-module__button___FvR4I{background-color:var(--seamless-accent,#2563eb);border:1px solid var(--seamless-accent,#3b82f6);border-radius:.5rem;color:var(--seamless-accent-contrast,#fff);cursor:pointer;font-weight:500;padding:.75rem 1rem;text-align:center;transition:background-color .2s ease;width:100%}.passKeyLogin-module__button___FvR4I:hover{background-color:var(--seamless-accent-hover,#1d4ed8)}@media (max-width:480px){.passKeyLogin-module__card___2sKM1{padding:1.25rem}.passKeyLogin-module__button___FvR4I{font-size:1rem}}");const We=()=>{const r=y(),{handlePasskeyLogin:o}=re(),[n,a]=g("");return e("div",{className:Ge.container,children:t("div",{className:Ge.card,children:[e("h2",{className:Ge.title,children:"Login with Passkey"}),e("button",{onClick:async()=>{a("");const{error:e}=await o();e?a("Passkey sign-in could not be completed. Try another sign-in method."):r("/")},className:Ge.button,children:"Use Passkey"}),n&&e("p",{className:Ge.error,children:n})]})})};var De="registerPasskey-module__container___jqEh8",$e="registerPasskey-module__card___MJAyC",Ve="registerPasskey-module__loading___Q4i1x",Ke="registerPasskey-module__spinner___V1nhd",He="registerPasskey-module__supported___ihTih",Ye="registerPasskey-module__title___vn2Qu",Ze="registerPasskey-module__description___AWmO-",Qe="registerPasskey-module__button___D3b4B",Xe="registerPasskey-module__message___RiOw-",et="registerPasskey-module__success___HP5aX",tt="registerPasskey-module__error___hGiqE",rt="registerPasskey-module__skip___1hDyU",ot="registerPasskey-module__secondary___bnOB4";ve(".registerPasskey-module__container___jqEh8{align-items:center;color:var(--seamless-text,#fff);display:flex;justify-content:center;padding:1rem}.registerPasskey-module__card___MJAyC{background-color:var(--seamless-surface,#1f2937);border-radius:1rem;box-shadow:0 4px 20px var(--seamless-shadow,rgba(0,0,0,.4));max-width:400px;padding:1.5rem;width:100%}.registerPasskey-module__loading___Q4i1x{align-items:center;background-color:var(--seamless-surface,#f9fafb);border-radius:.75rem;box-shadow:0 2px 8px var(--seamless-shadow,rgba(0,0,0,.1));color:var(--seamless-text,#374151);display:flex;font-weight:500;gap:.75rem;justify-content:center;padding:1.5rem}.registerPasskey-module__spinner___V1nhd{animation:registerPasskey-module__spin___oYcsC 1s linear infinite;border-bottom:2px solid var(--seamless-accent,#3b82f6);border-left:2px solid transparent;border-radius:9999px;border-right:2px solid transparent;border-top:2px solid var(--seamless-accent,#3b82f6);height:1.5rem;width:1.5rem}@keyframes registerPasskey-module__spin___oYcsC{to{transform:rotate(1turn)}}.registerPasskey-module__supported___ihTih{background-color:var(--seamless-surface,#ecfdf5);border-radius:.75rem;box-shadow:0 2px 12px var(--seamless-shadow,rgba(0,0,0,.1));color:var(--seamless-text,#065f46);padding:1.25rem}.registerPasskey-module__title___vn2Qu{font-size:1.125rem;font-weight:600;margin-bottom:.5rem}.registerPasskey-module__description___AWmO-{margin-bottom:1rem}.registerPasskey-module__button___D3b4B{background-color:var(--seamless-accent,#059669);border:none;border-radius:.5rem;color:var(--seamless-accent-contrast,#fff);cursor:pointer;font-weight:500;padding:.75rem 1rem;transition:background-color .2s ease;width:100%}.registerPasskey-module__button___D3b4B:hover{background-color:var(--seamless-accent-hover,#047857)}.registerPasskey-module__message___RiOw-{font-size:.875rem;margin-top:1rem}.registerPasskey-module__success___HP5aX{color:var(--seamless-success,#6ee7b7)}.registerPasskey-module__error___hGiqE{color:var(--seamless-danger,#f87171)}.registerPasskey-module__skip___1hDyU{background:none;border:none;color:var(--seamless-accent-soft,#60a5fa);cursor:pointer;font-size:.875rem;margin-top:1.5rem;text-align:center;width:100%}.registerPasskey-module__skip___1hDyU:disabled{cursor:default;opacity:.6}.registerPasskey-module__secondary___bnOB4{background:none;border:1px solid var(--seamless-accent,#059669);border-radius:.5rem;color:var(--seamless-accent,#059669);cursor:pointer;font-weight:500;margin-top:.75rem;padding:.75rem 1rem;transition:background-color .2s ease;width:100%}.registerPasskey-module__secondary___bnOB4:hover:not(:disabled){background-color:var(--seamless-accent-muted,rgba(5,150,105,.1))}.registerPasskey-module__secondary___bnOB4:disabled{cursor:default;opacity:.6}");const nt={attachment_not_allowed:"This application does not accept that kind of authenticator. Try the other option.",synced_passkey_not_allowed:"This passkey syncs to a password manager, and this application requires one that stays on a single device, such as a security key.",authenticator_not_allowed:"This application does not accept this authenticator.",prf_required:"This authenticator does not support a feature this application requires."};const at=()=>{const{refreshSession:r}=re(),o=ne(),{passkeySupported:n,loading:a}=ue(),{loginMethods:i,loading:s}=ie(),l=y(),[c,d]=g("idle"),[u,m]=g(""),_=se(i),f=async()=>{await r(),l("/")},p=async e=>{const{platform:t,browser:n,deviceInfo:a}=function(){const e=navigator.userAgent.toLowerCase();let t="unknown",r="unknown";return/iphone|ipad|ipod/.test(e)?t="ios":/android/.test(e)?t="android":/mac os/.test(e)?t="mac":/windows/.test(e)?t="windows":/linux/.test(e)&&(t="linux"),navigator.brave?r="brave":/edg\/|edgios/.test(e)?r="edge":/opr\/|opt\/|opera/.test(e)?r="opera":/vivaldi/.test(e)?r="vivaldi":/samsungbrowser/.test(e)?r="samsung":/firefox|fxios/.test(e)?r="firefox":/chrome|crios/.test(e)?r="chrome":/safari/.test(e)&&(r="safari"),{platform:t,browser:r,deviceInfo:`${t} • ${r}`}}(),i={friendlyName:a,platform:t,browser:n,deviceInfo:a};d("loading");try{const{error:t}=await o.registerPasskey({metadata:i,attachment:e});if(t)throw t;await r(),d("success"),m("Passkey registered successfully."),l("/")}catch(e){console.error("Passkey registration failed."),d("error"),m(function(e){const t=A(e);return t?nt[t]:void 0}(e)??"Error registering passkey.")}};return e("div",{className:De,children:e("div",{className:$e,children:t("div",a||s?{className:Ve,children:[e("div",{className:Ke}),e("span",{children:"Checking for Passkey Support..."})]}:n?{className:He,children:[e("h2",{className:Ye,children:"Secure Your Account with a Passkey"}),e("p",{className:Ze,children:"Your device supports passkeys! Register one to skip passwords forever."}),e("button",{onClick:()=>p(),disabled:"loading"===c,className:Qe,children:"loading"===c?"Registering...":"Register Passkey"}),e("button",{type:"button",onClick:()=>p("cross-platform"),disabled:"loading"===c,className:ot,children:"Use a security key instead"}),u&&e("p",{className:`${Xe} ${"success"===c?et:tt}`,children:u}),_&&e("button",{type:"button",onClick:f,disabled:"loading"===c,className:rt,children:"Skip for now"})]}:{className:He,children:[e("h2",{className:Ye,children:"Passkeys are not available here"}),e("p",{className:Ze,children:_?"This device does not support passkeys. You can continue without one and add a passkey later from a device that does.":"This device does not support passkeys, and this application requires one to sign in. Try again from a device or browser that supports them."}),_&&e("button",{type:"button",onClick:f,className:Qe,children:"Continue"})]})})})};var it="verifyOTP-module__container___wgoDE",st="verifyOTP-module__card___3cs2p",lt="verifyOTP-module__title___fZ-1d",ct="verifyOTP-module__subtitle___dGSu3",dt="verifyOTP-module__error___GEtlG",ut="verifyOTP-module__success___46TjG",mt="verifyOTP-module__form___jiGG-",_t="verifyOTP-module__label___Zq5Mi",gt="verifyOTP-module__timer___smq-a",ft="verifyOTP-module__resend___PlmkG",pt="verifyOTP-module__button___8pIuO",ht="verifyOTP-module__toggle___wbzVa";ve(".verifyOTP-module__container___wgoDE{align-items:center;color:var(--seamless-text,#fff);display:flex;justify-content:center;padding:1rem}.verifyOTP-module__card___3cs2p{background-color:var(--seamless-surface,#1f2937);border-radius:.5rem;box-shadow:0 0 10px var(--seamless-shadow,rgba(0,0,0,.3));max-width:28rem;padding:1.5rem;width:100%}.verifyOTP-module__title___fZ-1d{color:var(--seamless-text,#fff);font-size:1.5rem;font-weight:700;margin-bottom:1rem;text-align:center}.verifyOTP-module__subtitle___dGSu3{color:var(--seamless-text-muted,#9ca3af);font-size:.875rem;margin-bottom:1.5rem;text-align:center}.verifyOTP-module__error___GEtlG{color:var(--seamless-danger,#f87171);margin-bottom:1rem;text-align:center}.verifyOTP-module__success___46TjG{color:var(--seamless-success,#34d399);margin-bottom:.75rem;text-align:center}.verifyOTP-module__form___jiGG-{display:flex;flex-direction:column;gap:1rem}.verifyOTP-module__label___Zq5Mi{color:var(--seamless-text-muted,#d1d5db);display:block;font-size:.875rem;margin-bottom:.25rem}.verifyOTP-module__timer___smq-a{color:var(--seamless-warning,#facc15);font-size:.875rem}.verifyOTP-module__input___yqIXM{background-color:var(--seamless-surface-raised,#374151);border:1px solid var(--seamless-border,#4b5563);border-radius:.375rem;color:var(--seamless-text,#fff);outline:none;padding:.5rem;width:100%}.verifyOTP-module__input___yqIXM:focus{box-shadow:0 0 0 2px var(--seamless-accent,#3b82f6)}.verifyOTP-module__resend___PlmkG{background:none;border:none;color:var(--seamless-accent-soft,#60a5fa);cursor:pointer;font-size:.75rem;margin-top:.25rem;text-decoration:underline}.verifyOTP-module__resend___PlmkG:hover{color:var(--seamless-accent,#3b82f6)}.verifyOTP-module__button___8pIuO{background-color:var(--seamless-accent,#2563eb);border:none;border-radius:.375rem;color:var(--seamless-accent-contrast,#fff);cursor:pointer;padding:.5rem;transition:background-color .2s;width:100%}.verifyOTP-module__button___8pIuO:hover{background-color:var(--seamless-accent-hover,#1d4ed8)}.verifyOTP-module__toggle___wbzVa{background:none;border:none;color:var(--seamless-accent-soft,#60a5fa);cursor:pointer;font-size:.875rem;margin-top:1.5rem;text-align:center;width:100%}");var yt="otpInput-module__otpContainer___MUjby",bt="otpInput-module__otpInput___3YMVm";ve(".otpInput-module__otpContainer___MUjby{display:flex;gap:8px;justify-content:center;margin-top:8px}.otpInput-module__otpInput___3YMVm{background:var(--seamless-surface-raised,#374151);border:1px solid var(--seamless-border,#4b5563);border-radius:8px;color:var(--seamless-text,#fff);font-size:1.2rem;height:48px;text-align:center;transition:border-color .15s ease,box-shadow .15s ease;width:42px}.otpInput-module__otpInput___3YMVm:focus{border-color:var(--seamless-accent,#60a5fa);box-shadow:0 0 0 2px var(--seamless-accent,rgba(96,165,250,.25));outline:none}");const vt=({length:t=6,value:r,inputMode:o="numeric",onChange:n,name:a="otp"})=>{const i=f([]),s=r.split("").concat(Array(t).fill("")).slice(0,t),l=(e,t)=>{var r;if(t.length>1)c(e,t);else if(!t||(r=t,"numeric"===o?/^\d$/.test(r):/^[a-zA-Z]$/.test(r))){const r=[...s];r[e]=t;const o=r.join("");n(o),t&&i.current[e+1]&&i.current[e+1]?.focus()}},c=(e,r)=>{let a=r;a="numeric"===o?r.replace(/\D/g,""):r.replace(/[^a-zA-Z]/g,"");const l=a.slice(0,t).split(""),c=[...s];l.forEach((r,o)=>{e+o<t&&(c[e+o]=r)}),n(c.join("")),i.current[Math.min(e+l.length,t-1)]?.focus()};return e("div",{className:yt,role:"group","aria-label":"One-time password input",onPaste:e=>{e.preventDefault(),c(0,e.clipboardData.getData("text"))},children:s.map((r,c)=>e("input",{ref:e=>i.current[c]=e,type:"text",inputMode:"numeric"===o?"numeric":"text",autoComplete:"one-time-code",name:`${a}-${c}`,maxLength:1,value:r,className:bt,onChange:e=>l(c,e.target.value),onKeyDown:e=>((e,r)=>{if("Backspace"===r.key){r.preventDefault();const t=[...s];s[e]?(t[e]="",n(t.join(""))):e>0&&(t[e-1]="",n(t.join("")),i.current[e-1]?.focus())}"ArrowLeft"===r.key&&e>0&&i.current[e-1]?.focus(),"ArrowRight"===r.key&&e<t-1&&i.current[e+1]?.focus()})(c,e),"aria-label":`Digit ${c+1}`},c))})},kt=()=>{const r=y(),o=b(),{refreshSession:n}=re(),a="login"===o.state?.flow,[i,s]=g(""),[l,c]=g(null),[d,u]=g(""),[_,f]=g(!1),[p,h]=g(""),[v,k]=g(300),w=ne(),x=async()=>{if(f(!0),!l){const{error:e}=a?await w.verifyLoginPhoneOtp(i):await w.verifyPhoneOtp(i);if(e)u("Verification failed.");else{if(a)return await n(),void r("/");c(!0)}}f(!1)},P=async()=>{h(""),await(async()=>{u("");const{error:e}=a?await w.requestLoginPhoneOtp():await w.requestPhoneOtp();e?u("Failed to send SMS code. If this persists, refresh the page and try again."):h("Verification SMS has been resent.")})(),h("Verification SMS has been resent.")};return m(()=>{const e=setInterval(()=>{k(e=>e>0?e-1:0)},1e3);return()=>clearInterval(e)},[]),m(()=>{l&&!a&&(async()=>{const{error:e}=await w.requestEmailOtp();e?u("Failed to send Email code. If this persists, refresh the page and try registering again."):r(fe)})()},[l,a,r,w]),e("div",{className:it,children:t("div",{className:st,children:[e("h2",{className:lt,children:"Verify Your Phone Number"}),e("p",{className:ct,children:"Enter the code sent to your phone number."}),d&&e("p",{className:dt,children:d}),p&&e("p",{className:ut,children:p}),t("form",{onSubmit:async e=>{if(e.preventDefault(),u(""),6===i.length){f(!0);try{await x()}catch{u("Unexpected error occurred.")}finally{f(!1)}}else u("Please enter a valid code.")},className:mt,children:[t("div",{children:[t("label",{htmlFor:"phoneCode",className:_t,children:["Phone Verification Code ",(O=l,!0===O?e("span",{className:"text-green-400 ml-2",children:"✅"}):!1===O?e("span",{className:"text-red-400 ml-2",children:"❌"}):null)," -"," ",t("span",{className:gt,children:["Code expires in: ",(S=v,`${Math.floor(S/60).toString().padStart(2,"0")}:${(S%60).toString().padStart(2,"0")}`)]})]}),e(vt,{length:6,value:i,onChange:s}),e("button",{type:"button",onClick:()=>P(),className:ft,children:"Resend code to phone"})]}),e("button",{type:"submit",className:pt,children:_?"Verifying...":"Verify & Continue"}),e("button",{type:"button",onClick:()=>r("/login"),className:ht,children:"Back to login"})]})]})});var S,O},wt=()=>{const r=y(),o=b(),{refreshSession:n}=re(),a=ne(),{passkeySupported:i}=ue(),s="login"===o.state?.flow,[l,c]=g(!1),[d,u]=g(""),[_,f]=g(300),[p,h]=g(""),[v,k]=g("");return m(()=>{const e=setInterval(()=>{f(e=>e>0?e-1:0)},1e3);return()=>clearInterval(e)},[]),e("div",{className:it,children:t("div",{className:st,children:[e("h2",{className:lt,children:"Verify Your Email"}),e("p",{className:ct,children:"We sent you a verification email. Enter the code below."}),p&&e("p",{className:dt,children:p}),v&&e("p",{className:ut,children:v}),t("form",{onSubmit:async e=>{if(e.preventDefault(),h(""),6===d.length){c(!0);try{const{error:e}=s?await a.verifyLoginEmailOtp(d):await a.verifyEmailOtp(d);if(e)return void h("Verification failed.");if(s)return await n(),void r("/");i?r(ye):(await n(),r("/"))}catch{console.error("Email OTP verification failed."),h("Verification failed.")}finally{c(!1)}}else h("Please enter a valid code.")},className:mt,children:[t("div",{children:[t("label",{htmlFor:"emailCode",className:_t,children:["Email Verification Code",t("span",{className:gt,children:[" ","— Code expires in ",(w=_,`${Math.floor(w/60).toString().padStart(2,"0")}:${(w%60).toString().padStart(2,"0")}`)]})]}),e(vt,{length:6,value:d,onChange:u,inputMode:"text"}),e("button",{type:"button",onClick:async()=>{h(""),k("");const{error:e}=s?await a.requestLoginEmailOtp():await a.requestEmailOtp();e?h("Failed to send Email code. If this persists, refresh the page and try again."):k("Verification email has been resent.")},className:ft,children:"Resend code to email"})]}),e("button",{type:"submit",className:pt,disabled:l,children:l?"Verifying...":"Verify & Continue"}),e("button",{type:"button",onClick:()=>r("/login"),className:ht,children:"Back to login"})]})]})});var w};var xt={container:"verifyMagiclink-module__container___qrSXf",card:"verifyMagiclink-module__card___niKgr",title:"verifyMagiclink-module__title___SumxD",verificationContent:"verifyMagiclink-module__verificationContent___NdsS0",spinner:"verifyMagiclink-module__spinner___lnW1k",successIcon:"verifyMagiclink-module__successIcon___XjFEM",checkIcon:"verifyMagiclink-module__checkIcon___I0JOP",successText:"verifyMagiclink-module__successText___lO5Qq"};ve(".verifyMagiclink-module__container___qrSXf{align-items:center;color:var(--seamless-text,#fff);display:flex;justify-content:center;padding:1rem}.verifyMagiclink-module__card___niKgr{background-color:var(--seamless-surface,#1f2937);border-radius:.5rem;box-shadow:0 0 10px var(--seamless-shadow,rgba(0,0,0,.3));max-width:28rem;padding:1.5rem;width:100%}.verifyMagiclink-module__title___SumxD{color:var(--seamless-text,#fff);font-size:1.5rem;font-weight:700;margin-bottom:1rem;text-align:center}.verifyMagiclink-module__verificationContent___NdsS0{align-items:center;display:flex;flex-direction:column;gap:14px;margin:20px 0}.verifyMagiclink-module__spinner___lnW1k{animation:verifyMagiclink-module__spin___2lGzj .9s linear infinite;border:3px solid var(--seamless-border,hsla(0,0%,100%,.15));border-radius:50%;border-top-color:var(--seamless-accent,#60a5fa);height:28px;width:28px}.verifyMagiclink-module__successIcon___XjFEM{align-items:center;background:rgba(16,185,129,.15);border-radius:50%;display:flex;height:36px;justify-content:center;width:36px}.verifyMagiclink-module__checkIcon___I0JOP{animation:verifyMagiclink-module__checkPop___-3qJu .25s ease-out;color:var(--seamless-success,#34d399);height:22px;width:22px}.verifyMagiclink-module__successText___lO5Qq{color:var(--seamless-success,#34d399);font-size:.9rem}@keyframes verifyMagiclink-module__checkPop___-3qJu{0%{opacity:0;transform:scale(.6)}80%{transform:scale(1.15)}to{opacity:1;transform:scale(1)}}@keyframes verifyMagiclink-module__spin___2lGzj{to{transform:rotate(1turn)}}");const Pt=()=>{const[r]=v(),o=y(),n=r.get("token"),[a,i]=g(""),[s,l]=g(""),c=ne(),{refreshSession:d}=re();return m(()=>{let e=!0,t=null,r=null;return(async()=>{if(!n)return e&&i("Missing token for verification."),void console.error("No magic-link token found.");const{error:a}=await c.verifyMagicLink(n);if(a)return console.error("Failed to verify token"),void(e&&i("Failed to verify token"));await d(),e&&(t=new BroadcastChannel("seamless-auth"),t.postMessage({type:"MAGIC_LINK_AUTH_SUCCESS"}),l("You have been verified on the device and browser that initiated this request"),r=setTimeout(()=>{e&&o("/")},900))})(),()=>{e=!1,t?.close(),r&&clearTimeout(r)}},[n,c,o,d]),e("div",{className:xt.container,children:t("div",{className:xt.card,children:[e("h1",{className:xt.title,children:"Verifying your login"}),t("div",{className:xt.verificationContent,children:[!s&&!a&&e("div",{className:xt.spinner}),s&&e("div",{className:xt.successIcon,children:e("svg",{viewBox:"0 0 24 24",className:xt.checkIcon,fill:"none",stroke:"currentColor",strokeWidth:"2",children:e("path",{d:"M5 13l4 4L19 7"})})}),!s&&!a&&e("p",{className:xt.helperText,children:"Please wait while we securely verify your sign-in link."}),s&&e("p",{className:xt.successText,children:"Login verified. Redirecting…"}),a&&e("p",{className:xt.error,children:a})]})]})})},St={oauth_missing_email:"Your provider account did not share an email address. Add an email to that account and make it visible, then try again.",oauth_email_not_verified:"The email address on your provider account is not verified. Verify it with your provider, then try again.",oauth_missing_subject:"Your provider did not return a usable account identifier. Try again, or sign in with a different method."},Ot=()=>{const{finishOAuthLogin:o}=re(),n=y(),[a]=v(),[i,s]=g(""),l=f(!1);return m(()=>{if(l.current)return;l.current=!0;const e=a.get("code"),t=a.get("state"),r=sessionStorage.getItem(Re);e&&t&&r?o({providerId:r,code:e,state:t}).then(({error:e})=>{if(e){const t=T(e);return void s(t?St[t]:"We could not complete sign-in. Please try again.")}sessionStorage.removeItem(Re),n("/")}):s("This sign-in link is missing required information.")},[o,n,a]),t("div",{className:xt.container,children:[e("h2",{className:xt.title,children:i?"Sign-in failed":"Completing sign-in..."}),i&&t(r,{children:[e("p",{children:i}),e("button",{type:"button",onClick:()=>n("/login"),children:"Back to login"})]})]})};var Nt="magiclink-module__container___45zcA",Tt="magiclink-module__card___Au9oN",Ct="magiclink-module__iconWrapper___k5ndr",It="magiclink-module__mailIcon___Pwb7q",At="magiclink-module__iconRing___bdLvf",Mt="magiclink-module__heading___b9cre",Et="magiclink-module__message___kiVFj",Ft="magiclink-module__identifier___JtcFM",zt="magiclink-module__helperText___7Mlfh",Ut="magiclink-module__actions___64I-3",Lt="magiclink-module__secondaryButton___BntAI",qt="magiclink-module__cooldown___Ib4rm",Bt="magiclink-module__linkButton___maJiv";ve(".magiclink-module__container___45zcA{align-items:center;color:var(--seamless-text,#fff);display:flex;justify-content:center}.magiclink-module__card___Au9oN{background-color:var(--seamless-surface,#1f2937);border-radius:.75rem;box-shadow:0 10px 25px var(--seamless-shadow,rgba(0,0,0,.25));max-width:420px;padding:2.5rem 2rem;text-align:center;width:100%}.magiclink-module__iconWrapper___k5ndr{display:flex;justify-content:center;margin-bottom:1.25rem;position:relative}.magiclink-module__mailIcon___Pwb7q{color:var(--seamless-accent-soft,#a5b4fc);height:38px;width:38px;z-index:2}.magiclink-module__iconRing___bdLvf{animation:magiclink-module__pulse___YGm-I 2s infinite;background:rgba(99,102,241,.15);border-radius:50%;height:72px;position:absolute;width:72px}@keyframes magiclink-module__pulse___YGm-I{0%{opacity:.8;transform:scale(.6)}70%{opacity:0;transform:scale(1.4)}to{opacity:0}}.magiclink-module__heading___b9cre{font-size:1.55rem;font-weight:600;margin-bottom:.75rem}.magiclink-module__message___kiVFj{color:var(--seamless-text-muted,#d1d5db);font-size:.95rem;line-height:1.4;margin-bottom:1rem}.magiclink-module__identifier___JtcFM{background:var(--seamless-surface-raised,hsla(0,0%,100%,.05));border-radius:6px;display:inline-block;font-size:1rem;font-weight:600;margin-bottom:1rem;padding:.45rem .6rem}.magiclink-module__helperText___7Mlfh{color:var(--seamless-text-muted,#9ca3af);font-size:.85rem;line-height:1.4;margin-bottom:.6rem}.magiclink-module__actions___64I-3{display:flex;flex-direction:column;gap:.6rem;margin-top:1.6rem}.magiclink-module__secondaryButton___BntAI{background:var(--seamless-surface,#111827);border:1px solid var(--seamless-border,#374151);border-radius:8px;color:var(--seamless-text,#fff);cursor:pointer;font-weight:500;padding:.65rem}.magiclink-module__secondaryButton___BntAI:hover:not(:disabled){background:var(--seamless-surface-hover,#1f2937)}.magiclink-module__secondaryButton___BntAI:disabled{cursor:not-allowed;opacity:.5}.magiclink-module__cooldown___Ib4rm{color:var(--seamless-text-muted,#9ca3af);font-size:.8rem}.magiclink-module__linkButton___maJiv{background:none;border:none;color:var(--seamless-accent-soft,#a5b4fc);cursor:pointer;font-size:.85rem;margin-top:.4rem}.magiclink-module__linkButton___maJiv:hover{text-decoration:underline}");const Rt=()=>{const{refreshSession:r}=re(),o=y(),n=b(),a=ne(),i=n.state?.identifier,[s,l]=g(30);m(()=>{const e=setInterval(()=>{l(e=>e>0?e-1:0)},1e3);return()=>clearInterval(e)},[]);const c=p(async()=>{const{data:e,error:t}=await a.checkMagicLink();return!t&&"Success"===e?.message},[a]);return m(()=>{const e=new BroadcastChannel("seamless-auth");return e.onmessage=async e=>{"MAGIC_LINK_AUTH_SUCCESS"===e.data?.type&&await c()&&(await r(),o("/"))},()=>{e.close()}},[c,o,r]),m(()=>{const e=setInterval(async()=>{try{await c()&&(await r(),o("/"))}catch{}},5e3);return()=>clearInterval(e)},[c,r,o]),e("div",{className:Nt,children:t("div",{className:Tt,children:[t("div",{className:Ct,children:[e("div",{className:At}),t("svg",{className:It,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",children:[e("path",{d:"M4 6h16v12H4z"}),e("path",{d:"m4 6 8 6 8-6"})]})]}),e("h2",{className:Mt,children:"Check your email"}),e("p",{className:Et,children:"If an account exists for this address, we sent a secure sign-in link."}),i&&e("div",{className:Ft,children:i}),e("p",{className:zt,children:"Open the email and click the link to finish signing in."}),e("p",{className:zt,children:"Didn’t receive anything? Check your spam folder or try creating a new account."}),t("div",{className:Ut,children:[e("button",{className:Lt,disabled:s>0,onClick:async()=>{s>0||(await a.requestMagicLink(),l(30))},children:"Resend link"}),s>0&&t("div",{className:qt,children:["Available in ",s,"s"]}),e("button",{className:Bt,onClick:()=>o("/login"),children:"Change email or phone"})]})]})})},jt=()=>t(k,{children:[e(w,{path:me,element:e(Je,{})}),e(w,{path:_e,element:e(We,{})}),e(w,{path:ge,element:e(kt,{})}),e(w,{path:fe,element:e(wt,{})}),e(w,{path:pe,element:e(Pt,{})}),e(w,{path:he,element:e(Ot,{})}),e(w,{path:ye,element:e(at,{})}),e(w,{path:be,element:e(Rt,{})}),e(w,{path:"*",element:e(x,{to:me,replace:!0})})]});export{oe as AuthProvider,jt as AuthRoutes,S as SeamlessAuthError,H as createSeamlessAuthClient,B as encodePrfSalt,W as extractPasskeyPrfResult,T as getOAuthErrorCode,A as getPasskeyPolicyErrorCode,M as getWebAuthnErrorDetail,se as hasNonPasskeyLoginMethod,Z as hasScopedRole,J as isPasskeyPrfSupported,Y as roleGrantsAccess,re as useAuth,ne as useAuthClient,ie as useLoginMethods,ue as usePasskeySupport};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/client/errors.ts","../src/client/result.ts","../src/client/webauthnPrf.ts","../src/client/webauthnSupport.ts","../src/client/createSeamlessAuthClient.ts","../src/fetchWithAuth.ts","../src/scopedRoles.ts","../src/session/storage.ts","../src/session/createAuthSession.ts","../src/AuthProvider.tsx","../src/hooks/useAuthClient.ts","../src/hooks/useLoginMethods.ts","../src/utils.ts","../src/hooks/usePasskeySupport.ts","../src/routes.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/components/AuthFallbackOptions.tsx","../src/components/OAuthProviderButtons.tsx","../src/views/Login.tsx","../src/views/PassKeyLogin.tsx","../src/components/DeviceNameModal.tsx","../src/views/PassKeyRegistration.tsx","../src/components/OtpInput.tsx","../src/views/PhoneRegistration.tsx","../src/views/EmailRegistration.tsx","../src/views/VerifyMagicLink.tsx","../src/views/OAuthCallback.tsx","../src/components/MagicLinkSent.tsx","../src/AuthRoutes.tsx"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n",null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["SeamlessAuthError","Error","constructor","message","status","body","cause","super","this","name","OAUTH_ERROR_CODES","oauth_missing_email","oauth_email_not_verified","oauth_missing_subject","readCode","code","getOAuthErrorCode","error","details","Object","prototype","hasOwnProperty","call","undefined","getWebAuthnErrorDetail","value","async","toSeamlessAuthError","response","fallbackMessage","json","extractMessage","readBody","requestResult","request","data","ok","resultOf","resultError","toArrayBuffer","ArrayBuffer","source","Uint8Array","buffer","byteOffset","byteLength","copy","set","encodePrfSalt","salt","bufferToBase64URLString","saltToBufferSource","base64URLStringToBuffer","createPrfRequestBody","input","credentialId","prf","secondSalt","isPasskeyPrfSupported","browserSupportsWebAuthn","window","isSecureContext","globalThis","PublicKeyCredential","navigator","credentials","get","preparePrfRequestOptions","optionsJSON","options","prfEval","extensions","eval","first","second","extractPasskeyPrfResult","credential","extensionResults","clientExtensionResults","results","output","id","outputBase64url","stripPrfResultsFromAssertion","toStepUpStatus","payload","expectedMethod","method","fresh","verifiedAt","expiresAt","maxAgeSeconds","buildAssertionStartInit","JSON","stringify","webAuthnFailure","logContext","thrown","failure","detail","console","createSeamlessAuthClient","opts","fetchWithAuth","authHost","init","url","replace","startsWith","hasBody","requestInit","headers","fetch","createFetchWithAuth","apiHost","getCurrentUser","login","loginWithPasskey","optionsInput","started","assertionResponse","startAuthentication","verified","logout","scope","logoutAllSessions","deleteUser","register","email","phone","requestPhoneOtp","verifyPhoneOtp","verificationToken","requestLoginPhoneOtp","verifyLoginPhoneOtp","requestEmailOtp","verifyEmailOtp","requestLoginEmailOtp","verifyLoginEmailOtp","requestMagicLink","checkMagicLink","verifyMagicLink","token","encodeURIComponent","listOAuthProviders","getPublicSystemConfig","startOAuthLogin","providerId","redirectUri","returnTo","finishOAuthLogin","state","registerPasskey","registerInput","metadata","normalizeRegisterPasskeyInput","challenge","query","URLSearchParams","requirePrf","requestPrf","queryString","toString","buildRegisterStartPath","attestationResponse","startRegistration","WebAuthnError","prfCapable","enabled","getRegistrationPrfCapable","getStepUpStatus","verifyStepUpWithPasskey","verifyStepUpWithPasskeyPrf","getTotpStatus","startTotpEnrollment","verifyTotpEnrollment","disableTotp","verifyStepUpWithTotp","updateCredential","deleteCredential","listOrganizations","createOrganization","getOrganization","organizationId","updateOrganization","switchOrganization","listOrganizationMembers","addOrganizationMember","updateOrganizationMember","userId","removeOrganizationMember","roleGrantsAccess","grantedRole","requiredRole","granted","trim","required","endsWith","prefix","slice","includes","grantedParts","split","requiredParts","grantedAction","length","requiredAction","grantedPrefix","requiredPrefix","every","part","index","hasScopedRole","grantedRoles","requiredRoles","Array","isArray","filter","role","some","createDefaultStorage","localStorage","values","Map","key","createMemoryStorage","getItem","setItem","PREVIOUS_SIGN_IN_KEY","SIGNED_OUT","user","organizations","activeOrganization","stepUpStatus","isAuthenticated","AuthContext","createContext","useAuth","context","useContext","AuthProvider","children","autoDetectPreviousSignin","session","useMemo","detectPreviousSignIn","client","storage","listeners","Set","destroyed","refreshGeneration","loading","hasSignedInBefore","setState","patch","next","keys","forEach","listener","markSignedIn","clearSession","refreshSession","generation","result","refreshAfter","run","getState","subscribe","add","delete","actions","identifier","passkeyAvailable","handlePasskeyLogin","friendlyName","updated","map","current","refreshStepUpStatus","hasRole","roles","rolesGrantScopedAccess","destroy","clear","createAuthSession","useSyncExternalStore","useEffect","_jsx","Provider","useAuthClient","FALLBACK_LOGIN_METHODS","useLoginMethods","authClient","loginMethods","setLoginMethods","useState","setLoading","active","read","hasNonPasskeyLoginMethod","Boolean","isValidEmail","normalized","parts","localPart","domainPart","test","isValidPhoneNumber","phoneNumber","parsePhoneNumberFromString","isValid","isPasskeySupported","isUserVerifyingPlatformAuthenticatorAvailable","isPlatformAuthenticatorAvailable","usePasskeySupport","passkeySupported","setPasskeySupported","supported","checkSupport","authRoutePaths","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","AuthFallbackOptions","onMagicLink","onEmailOtp","onPhoneOtp","onPasskeyRetry","allowedMethods","showMagicLink","has","showEmailOtp","showPhoneOtp","showPasskeyRetry","_jsxs","className","styles","onClick","OAUTH_PROVIDER_STORAGE_KEY","OAuthProviderButtons","callbackHref","useHref","providers","setProviders","setError","then","provider","sessionStorage","URL","location","origin","assign","authorizationUrl","handleSelect","Login","navigate","useNavigate","configuredMethods","setIdentifier","setEmail","mode","setMode","formErrors","setFormErrors","emailError","setEmailError","identifierError","setIdentifierError","showFallbackOptions","setShowFallbackOptions","_Fragment","onSubmit","e","preventDefault","loginStart","availableMethods","passkeyError","htmlFor","onChange","target","autoComplete","placeholder","onBlur","flow","disabled","PassKeyLogin","runPasskeyLogin","container","card","title","button","DeviceNameModal","isOpen","onCancel","onConfirm","setValue","autoFocus","PasskeyRegistration","passkeySupportLoading","loginMethodsLoading","setStatus","setMessage","showDeviceModal","setShowDeviceModal","pendingMetadata","setPendingMetadata","canSkip","finishWithoutPasskey","platform","browser","deviceInfo","ua","userAgent","toLowerCase","brave","parseUserAgent","OtpInput","inputMode","inputs","useRef","concat","fill","handleChange","char","handleBulkInput","newValueArr","newValue","join","focus","cleaned","chars","i","Math","min","onPaste","clipboardData","getData","el","maxLength","onKeyDown","handleKeyDown","PhoneRegistration","useLocation","isLoginFlow","phoneOtp","setPhoneOtp","phoneVerified","setPhoneVerified","resendMsg","setResendMsg","phoneTimeLeft","setPhoneTimeLeft","verifyPhoneOTP","handleResend","onResendPhone","interval","setInterval","prev","clearInterval","nextStep","seconds","floor","padStart","EmailRegistration","emailOtp","setEmailOtp","emailTimeLeft","setEmailTimeLeft","VerifyMagicLink","searchParams","useSearchParams","successMsg","setSuccessMsg","mounted","channel","redirectTimeout","BroadcastChannel","postMessage","setTimeout","verify","close","clearTimeout","verificationContent","spinner","successIcon","viewBox","checkIcon","stroke","strokeWidth","d","helperText","successText","CODE_ERRORS","OAuthCallback","startedRef","finishError","removeItem","MagicLinkSent","cooldown","setCooldown","timer","c","magicLinkCompleted","useCallback","onmessage","event","AuthRoutes","Routes","Route","path","element","Navigate","to"],"mappings":"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","x_google_ignoreList":[15]}
1
+ {"version":3,"file":"index.js","sources":["../src/client/errors.ts","../src/client/result.ts","../src/client/webauthnPrf.ts","../src/client/webauthnSupport.ts","../src/client/createSeamlessAuthClient.ts","../src/fetchWithAuth.ts","../src/scopedRoles.ts","../src/session/storage.ts","../src/session/createAuthSession.ts","../src/AuthProvider.tsx","../src/hooks/useAuthClient.ts","../src/hooks/useLoginMethods.ts","../src/utils.ts","../src/hooks/usePasskeySupport.ts","../src/routes.ts","../node_modules/style-inject/dist/style-inject.es.js","../src/components/AuthFallbackOptions.tsx","../src/components/OAuthProviderButtons.tsx","../src/views/Login.tsx","../src/views/PassKeyLogin.tsx","../src/views/PassKeyRegistration.tsx","../src/components/OtpInput.tsx","../src/views/PhoneRegistration.tsx","../src/views/EmailRegistration.tsx","../src/views/VerifyMagicLink.tsx","../src/views/OAuthCallback.tsx","../src/components/MagicLinkSent.tsx","../src/AuthRoutes.tsx"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n",null,null,null,null,null,null,null,null,null,null,null,null],"names":["SeamlessAuthError","Error","constructor","message","status","body","cause","super","this","name","OAUTH_ERROR_CODES","oauth_missing_email","oauth_email_not_verified","oauth_missing_subject","readCode","code","getOAuthErrorCode","error","details","Object","prototype","hasOwnProperty","call","undefined","PASSKEY_POLICY_ERROR_CODES","attachment_not_allowed","synced_passkey_not_allowed","authenticator_not_allowed","prf_required","readPolicyCode","getPasskeyPolicyErrorCode","getWebAuthnErrorDetail","value","async","toSeamlessAuthError","response","fallbackMessage","json","extractMessage","readBody","requestResult","request","data","ok","resultOf","resultError","toArrayBuffer","ArrayBuffer","source","Uint8Array","buffer","byteOffset","byteLength","copy","set","encodePrfSalt","salt","bufferToBase64URLString","saltToBufferSource","base64URLStringToBuffer","createPrfRequestBody","input","credentialId","prf","secondSalt","isPasskeyPrfSupported","browserSupportsWebAuthn","window","isSecureContext","globalThis","PublicKeyCredential","navigator","credentials","get","preparePrfRequestOptions","optionsJSON","options","prfEval","extensions","eval","first","second","extractPasskeyPrfResult","credential","extensionResults","clientExtensionResults","results","output","id","outputBase64url","stripPrfResultsFromAssertion","toStepUpStatus","payload","expectedMethod","method","fresh","verifiedAt","expiresAt","maxAgeSeconds","buildAssertionStartInit","JSON","stringify","webAuthnFailure","logContext","thrown","failure","detail","console","createSeamlessAuthClient","opts","fetchWithAuth","authHost","init","url","replace","startsWith","hasBody","requestInit","headers","fetch","createFetchWithAuth","apiHost","getCurrentUser","login","loginWithPasskey","optionsInput","started","assertionResponse","startAuthentication","verified","logout","scope","logoutAllSessions","deleteUser","register","email","phone","requestPhoneOtp","verifyPhoneOtp","verificationToken","requestLoginPhoneOtp","verifyLoginPhoneOtp","requestEmailOtp","verifyEmailOtp","requestLoginEmailOtp","verifyLoginEmailOtp","requestMagicLink","redirectUri","checkMagicLink","verifyMagicLink","token","encodeURIComponent","listOAuthProviders","getPublicSystemConfig","startOAuthLogin","providerId","returnTo","finishOAuthLogin","state","registerPasskey","registerInput","metadata","normalizeRegisterPasskeyInput","challenge","query","URLSearchParams","requirePrf","requestPrf","attachment","queryString","toString","buildRegisterStartPath","attestationResponse","startRegistration","WebAuthnError","prfCapable","enabled","getRegistrationPrfCapable","getStepUpStatus","verifyStepUpWithPasskey","verifyStepUpWithPasskeyPrf","getTotpStatus","startTotpEnrollment","verifyTotpEnrollment","disableTotp","verifyStepUpWithTotp","updateCredential","deleteCredential","listOrganizations","createOrganization","getOrganization","organizationId","updateOrganization","switchOrganization","listOrganizationMembers","addOrganizationMember","updateOrganizationMember","userId","removeOrganizationMember","roleGrantsAccess","grantedRole","requiredRole","granted","trim","required","endsWith","prefix","slice","includes","grantedParts","split","requiredParts","grantedAction","length","requiredAction","grantedPrefix","requiredPrefix","every","part","index","hasScopedRole","grantedRoles","requiredRoles","Array","isArray","filter","role","some","createDefaultStorage","localStorage","values","Map","key","createMemoryStorage","getItem","setItem","PREVIOUS_SIGN_IN_KEY","SIGNED_OUT","user","organizations","activeOrganization","stepUpStatus","isAuthenticated","AuthContext","createContext","useAuth","context","useContext","AuthProvider","children","autoDetectPreviousSignin","session","useMemo","detectPreviousSignIn","client","storage","listeners","Set","destroyed","refreshGeneration","loading","hasSignedInBefore","setState","patch","next","keys","forEach","listener","markSignedIn","clearSession","refreshSession","generation","result","refreshAfter","run","getState","subscribe","add","delete","actions","identifier","passkeyAvailable","handlePasskeyLogin","friendlyName","updated","map","current","refreshStepUpStatus","hasRole","roles","rolesGrantScopedAccess","destroy","clear","createAuthSession","useSyncExternalStore","useEffect","_jsx","Provider","useAuthClient","FALLBACK_LOGIN_METHODS","useLoginMethods","authClient","loginMethods","setLoginMethods","useState","setLoading","active","read","hasNonPasskeyLoginMethod","Boolean","isValidEmail","normalized","parts","localPart","domainPart","test","isValidPhoneNumber","phoneNumber","parsePhoneNumberFromString","isValid","isPasskeySupported","isUserVerifyingPlatformAuthenticatorAvailable","isPlatformAuthenticatorAvailable","usePasskeySupport","passkeySupported","setPasskeySupported","supported","checkSupport","authRoutePaths","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","AuthFallbackOptions","onMagicLink","onEmailOtp","onPhoneOtp","onPasskeyRetry","allowedMethods","showMagicLink","has","showEmailOtp","showPhoneOtp","showPasskeyRetry","_jsxs","className","styles","onClick","OAUTH_PROVIDER_STORAGE_KEY","OAuthProviderButtons","callbackHref","useHref","providers","setProviders","setError","then","provider","sessionStorage","URL","location","origin","assign","authorizationUrl","handleSelect","Login","navigate","useNavigate","configuredMethods","setIdentifier","setEmail","mode","setMode","formErrors","setFormErrors","emailError","setEmailError","identifierError","setIdentifierError","showFallbackOptions","setShowFallbackOptions","_Fragment","onSubmit","e","preventDefault","loginStart","availableMethods","passkeyError","htmlFor","onChange","target","autoComplete","placeholder","onBlur","flow","disabled","PassKeyLogin","runPasskeyLogin","container","card","title","button","POLICY_REFUSAL_MESSAGES","PasskeyRegistration","passkeySupportLoading","loginMethodsLoading","setStatus","setMessage","canSkip","finishWithoutPasskey","platform","browser","deviceInfo","ua","userAgent","toLowerCase","brave","parseUserAgent","policyRefusalMessage","OtpInput","inputMode","inputs","useRef","concat","fill","handleChange","char","handleBulkInput","newValueArr","newValue","join","focus","cleaned","chars","i","Math","min","onPaste","clipboardData","getData","el","maxLength","onKeyDown","handleKeyDown","PhoneRegistration","useLocation","isLoginFlow","phoneOtp","setPhoneOtp","phoneVerified","setPhoneVerified","resendMsg","setResendMsg","phoneTimeLeft","setPhoneTimeLeft","verifyPhoneOTP","handleResend","onResendPhone","interval","setInterval","prev","clearInterval","nextStep","seconds","floor","padStart","EmailRegistration","emailOtp","setEmailOtp","emailTimeLeft","setEmailTimeLeft","VerifyMagicLink","searchParams","useSearchParams","successMsg","setSuccessMsg","mounted","channel","redirectTimeout","BroadcastChannel","postMessage","setTimeout","verify","close","clearTimeout","verificationContent","spinner","successIcon","viewBox","checkIcon","stroke","strokeWidth","d","helperText","successText","CODE_ERRORS","OAuthCallback","startedRef","finishError","removeItem","MagicLinkSent","cooldown","setCooldown","timer","c","magicLinkCompleted","useCallback","onmessage","event","AuthRoutes","Routes","Route","path","element","Navigate","to"],"mappings":"8jBAeM,MAAOA,UAA0BC,MASrC,WAAAC,CAAYC,EAAiBC,EAAgBC,EAAgBC,GAC3DC,MAAMJ,GACNK,KAAKC,KAAO,oBACZD,KAAKJ,OAASA,EACdI,KAAKH,KAAOA,EACZG,KAAKF,MAAQA,CACf,EAeF,MAAMI,EAAkD,CACtDC,qBAAqB,EACrBC,0BAA0B,EAC1BC,uBAAuB,GAGzB,SAASC,EAAST,GAChB,GAAoB,iBAATA,GAA8B,OAATA,EAIhC,OAAQA,EAA4BU,IACtC,CAYM,SAAUC,EAAkBC,GAChC,KAAMA,aAAiBjB,GACrB,OAGF,GAA0B,iBAAfiB,EAAMZ,MAAoC,OAAfY,EAAMZ,KAC1C,OAGF,MAAMU,EACJD,EAASG,EAAMZ,OAASS,EAAUG,EAAMZ,KAA+Ba,SAEzE,MAAuB,iBAATH,GACZI,OAAOC,UAAUC,eAAeC,KAAKZ,EAAmBK,GACrDA,OACDQ,CACN,CA+BA,MAAMC,EAAmE,CACvEC,wBAAwB,EACxBC,4BAA4B,EAC5BC,2BAA2B,EAC3BC,cAAc,GAGhB,SAASC,EAAexB,GACtB,GAAoB,iBAATA,GAA8B,OAATA,EAC9B,OAGF,MAAMU,EAAQV,EAA6BY,MAE3C,MAAuB,iBAATF,GACZI,OAAOC,UAAUC,eAAeC,KAAKE,EAA4BT,GAC9DA,OACDQ,CACN,CAcM,SAAUO,EACdb,GAEA,GAAMA,aAAiBjB,GAIG,iBAAfiB,EAAMZ,MAAoC,OAAfY,EAAMZ,KAI5C,OACEwB,EAAeZ,EAAMZ,OACrBwB,EAAgBZ,EAAMZ,KAA+Ba,QAEzD,CAiCM,SAAUa,EAAuBd,GACrC,KAAMA,aAAiBjB,KAZJ,iBAHnBgC,EAe0Df,EAAMX,QAXpD,OAAV0B,GAC8C,iBAAtCA,EAA6BvB,MAWrC,OAjBJ,IACEuB,EAmBA,MAAMvB,KAAEA,EAAIM,KAAEA,EAAIZ,QAAEA,GAAYc,EAAMX,MAEtC,MAAO,CACLG,OACAM,KAAsB,iBAATA,EAAoBA,OAAOQ,EACxCpB,QAA4B,iBAAZA,EAAuBA,EAAU,GAErD,CAuBO8B,eAAeC,EACpBC,EACAC,GAEA,IAAI/B,EAEJ,IACEA,QAAa8B,EAASE,MACxB,CAAE,MACAhC,OAAOkB,CACT,CAEA,OAAO,IAAIvB,EAjCb,SAAwBK,GACtB,GAAoB,iBAATA,GAA8B,OAATA,EAC9B,OAKF,MAAMY,MAAEA,EAAKd,QAAEA,GAAYE,EAE3B,MAAqB,iBAAVY,GAAsBA,EACxBA,EAGiB,iBAAZd,GAAwBA,EAAUA,OAAUoB,CAC5D,CAoBIe,CAAejC,IAAS+B,EACxBD,EAAS/B,OACTC,EAEJ,CCxNA4B,eAAeM,EAASJ,GACtB,IACE,aAAaA,EAASE,MACxB,CAAE,MAEA,MACF,CACF,CAMOJ,eAAeO,EACpBC,EACAL,GAEA,IAAID,EAEJ,IACEA,QAAiBM,CACnB,CAAE,MACA,MAAO,CACLC,KAAM,KACNzB,MAAO,IAAIjB,EAAkBoC,EA1BC,GA4BlC,CAEA,OAAKD,EAASQ,GAIP,CAAED,WAAaH,EAASJ,GAAiBlB,MAAO,MAH9C,CAAEyB,KAAM,KAAMzB,YAAaiB,EAAoBC,EAAUC,GAIpE,CAGM,SAAUQ,EAAYF,GAC1B,MAAO,CAAEA,OAAMzB,MAAO,KACxB,CAGM,SAAU4B,EACd1C,EACAC,EA7CkC,EA8ClCC,EACAC,GAEA,MAAO,CAAEoC,KAAM,KAAMzB,MAAO,IAAIjB,EAAkBG,EAASC,EAAQC,EAAMC,GAC3E,CC5BA,SAASwC,EAAcd,GACrB,GAAIA,aAAiBe,YACnB,OAAOf,EAGT,MAAMgB,EAAS,IAAIC,WAAWjB,EAAMkB,OAAQlB,EAAMmB,WAAYnB,EAAMoB,YAC9DC,EAAO,IAAIJ,WAAWD,EAAOI,YAGnC,OAFAC,EAAKC,IAAIN,GAEFK,EAAKH,MACd,CAUM,SAAUK,EAAcC,GAC5B,MAAoB,iBAATA,EACFA,EAGFC,EAAwBX,EAAcU,GAC/C,CAEA,SAASE,EAAmBF,GAC1B,MAAoB,iBAATA,EACFG,EAAwBH,GAG1BA,CACT,CAEM,SAAUI,EAAqBC,GACnC,MAAO,IACDA,EAAMC,aAAe,CAAEA,aAAcD,EAAMC,cAAiB,GAChEC,IAAK,CACHP,KAAMD,EAAcM,EAAML,SACtBK,EAAMG,WAAa,CAAEA,WAAYT,EAAcM,EAAMG,aAAgB,IAG/E,CAEO/B,eAAegC,IACpB,QCtFKC,MAIiB,oBAAXC,SAAqD,IAA3BA,OAAOC,uBAKA,IAAnCC,WAAWC,qBACG,oBAAdC,WAC+B,mBAA/BA,UAAUC,aAAaC,GD4ElC,CAEM,SAAUC,EACdC,GAEA,MAAMC,EAAUD,EACVE,EAAUD,EAAQE,YAAYf,KAAKgB,KAEzC,OAAKF,EAIE,IACFD,EACHE,WAAY,IACPF,EAAQE,WACXf,IAAK,IACAa,EAAQE,YAAYf,IACvBgB,KAAM,IACDF,KACCA,EAAQG,MAAQ,CAAEA,MAAOtB,EAAmBmB,EAAQG,QAAW,MAC/DH,EAAQI,OAAS,CAAEA,OAAQvB,EAAmBmB,EAAQI,SAAY,OAZrEN,CAiBX,CAEM,SAAUO,EACdC,GAEA,MAAMC,EACJD,EAAWE,uBACPL,EAAQI,GAAkBrB,KAAKuB,SAASN,MAE9C,IAAKA,EACH,OAAO,KAGT,MAAMO,GA3EcvD,EA2EQgD,aA1EPjC,YACZ,IAAIE,WAAWjB,GAGjB,IAAIiB,WAAWjB,EAAMkB,OAAQlB,EAAMmB,WAAYnB,EAAMoB,YAL9D,IAAsBpB,EA6EpB,MAAO,CACL8B,aAAcqB,EAAWK,GACzBD,SACAE,gBAAiBhC,EAAwBX,EAAcyC,IAE3D,CAEM,SAAUG,EACdP,GAEA,MAAMC,EACJD,EAAWE,uBAEb,OAAKD,GAAkBrB,KAAKuB,QAIrB,IACFH,EACHE,uBAAwB,IACnBF,EAAWE,uBACdtB,IAAK,IACAqB,EAAiBrB,IACpBuB,aAAS/D,KATN4D,CAaX,CEwJA,SAASQ,EACPC,EACAC,GAEA,MAAMC,EAASF,EAAQE,SAAWD,EAAiBD,EAAQE,OAAS,KAIpE,MAFsB,YAApBF,EAAQzF,UAA2C,IAAlByF,EAAQG,OAA6B,OAAXD,EAMtDlD,EAAS,CACdmD,OAAO,EACPD,SACAE,WAAYJ,EAAQI,YAAc,KAClCC,UAAWL,EAAQK,WAAa,KAChCC,cAAeN,EAAQM,eAAiB,IARjCrD,EAAY+C,EAAQzF,SAAW,iCAU1C,CA8BA,SAASgG,EAAwBtC,GAC/B,OAAKA,EAIE,CACLiC,OAAQ,OACRzF,KAAM+F,KAAKC,UAAUzC,EAAqBC,KALnC,CAAEiC,OAAQ,OAOrB,CAQA,SAASQ,EACPC,EACApG,EACAqG,GAEA,MAAMC,EAAU5D,EAAe1C,EHzWG,OGyW4BoB,EAAWiF,GACnEE,EAAS3E,EAAuB0E,EAAQxF,OAI9C,OAFA0F,QAAQ1F,MAAMsF,EAAYG,GAAQjG,MAAQ,kBAEnCgG,CACT,CAEO,MAAMG,EACXC,IAEA,MAAMC,ECxY2B,CAACD,IAClC,MAAME,SAAEA,GAAaF,EAErB,OAAO5E,eACL4B,EACAmD,GAEA,MAGMC,EAAM,GAHCF,GAAUG,QAAQ,OAAQ,KAAO,UACjCrD,EAAMsD,WAAW,KAAOtD,EAAQ,IAAIA,MAM3CuD,EAAwB,MAAdJ,GAAM3G,KAEhBgH,EAA2B,IAC5BL,EACHxC,YAAa,UACb8C,QAAS,IACHF,EAAU,CAAE,eAAgB,oBAAuB,CAAA,KACpDJ,GAAMM,UAIb,OAAOC,MAAMN,EAAKI,EACpB,GD8WsBG,CAAoB,CACxCT,SAAUF,EAAKY,UAGjB,MAAO,CACLC,eAAgB,IACdlF,EACEsE,EAAc,WAAY,CAAEhB,OAAQ,QACpC,oCAGJ6B,MAAO9D,GACLrB,EACEsE,EAAc,SAAU,CACtBhB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAUxC,KAEvB,4BAGJ+D,iBAAkB3F,MAAM4F,IACtB,MAAMC,QAAgBtF,EACpBsE,EAAc,wBAAyB,IAClCX,EAAwB0B,GAAc9D,OAE3C,kCAGF,GAAI+D,EAAQ7G,MACV,OAAO6G,EAGT,IAAI/D,EACAgE,EAEJ,IACE,MAAM5C,QAAoB6C,EAAoB,CAC5CrD,YAAaD,EAAyBoD,EAAQpF,QAEhDqB,EAAMmB,EAAwBC,GAC9B4C,EAAoBrC,EAA6BP,EACnD,CAAE,MAAOlE,GAEP,OAAOqF,EAAgB,uBAAwB,wBAAyBrF,EAC1E,CAEA,MAAMgH,QAAiBzF,EACrBsE,EAAc,yBAA0B,CACtChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CAAE0B,wBAEzB,6BAGF,OAAIE,EAAShH,MACJgH,EAGsB,YAA3BA,EAASvF,MAAMvC,QACV0C,EAAYoF,EAASvF,MAAMvC,SAAW,yBAGxCyC,EAASmB,EAAM,CAAEA,OAAQ,CAAA,IAGlCmE,OAAQ,CAACtD,EAAU,KACjBpC,EACEsE,EAAgC,iBAAlBlC,EAAQuD,MAA2B,cAAgB,UAAW,CAC1ErC,OAAQ,WAEV,uBAGJsC,kBAAmB,IACjB5F,EACEsE,EAAc,cAAe,CAAEhB,OAAQ,WACvC,uCAGJuC,WAAY,IACV7F,EACEsE,EAAc,gBAAiB,CAAEhB,OAAQ,WACzC,iCAGJwC,SAAUzE,GACRrB,EACEsE,EAAc,yBAA0B,CACtChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CACnBkC,MAAO1E,EAAM0E,SACT1E,EAAM2E,MAAQ,CAAEA,MAAO3E,EAAM2E,OAAU,OAG/C,uBAGJC,gBAAiB,IACfjG,EAIEsE,EAAc,0BAA2B,CACvChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,MAEvB,gCAGJqC,eAAgBC,GACdnG,EACEsE,EAAc,wBAAyB,CACrChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CAAEsC,wBAEzB,kCAGJC,qBAAsB,IACpBpG,EAIEsE,EAAc,gCAAiC,CAC7ChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,MAEvB,gCAGJwC,oBAAqBF,GACnBnG,EACEsE,EAAc,8BAA+B,CAC3ChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CAAEsC,wBAEzB,kCAGJG,gBAAiB,IACftG,EAIEsE,EAAc,0BAA2B,CACvChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,MAEvB,kCAGJ0C,eAAgBJ,GACdnG,EACEsE,EAAc,wBAAyB,CACrChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CAAEsC,wBAEzB,oCAGJK,qBAAsB,IACpBxG,EAIEsE,EAAc,gCAAiC,CAC7ChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,MAEvB,kCAGJ4C,oBAAqBN,GACnBnG,EACEsE,EAAc,8BAA+B,CAC3ChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CAAEsC,wBAEzB,oCAMJO,iBAAkBC,GAChB3G,EACEsE,EAAc,cAAe,CAC3BhB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU8C,EAAc,CAAEA,eAAgB,MAEvD,kCAGJC,eAAgB,IACd5G,EACEsE,EAAc,oBAAqB,CAAEhB,OAAQ,QAC7C,mCAGJuD,gBAAiBC,GACf9G,EAIEsE,EAAc,sBAAsByC,mBAAmBD,KAAU,CAC/DxD,OAAQ,QAEV,oCAGJ0D,mBAAoB,IAClBhH,EACEsE,EAAc,mBAAoB,CAAEhB,OAAQ,QAC5C,mCAGJ2D,sBAAuB,IACrBjH,EACEsE,EAAc,wBAAyB,CAAEhB,OAAQ,QACjD,mDAGJ4D,gBAAiB7F,GACfrB,EACEsE,EAAc,UAAUyC,mBAAmB1F,EAAM8F,oBAAqB,CACpE7D,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,IACfxC,EAAMsF,YAAc,CAAEA,YAAatF,EAAMsF,aAAgB,MACzDtF,EAAM+F,SAAW,CAAEA,SAAU/F,EAAM+F,UAAa,OAGxD,gCAGJC,iBAAkBhG,GAChBrB,EACEsE,EAAc,UAAUyC,mBAAmB1F,EAAM8F,uBAAwB,CACvE7D,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CACnBtF,KAAM8C,EAAM9C,KACZ+I,MAAOjG,EAAMiG,UAGjB,iCAGJC,gBAAiB9H,MAAM4B,IACrB,MAAMmG,EApTZ,SACEnG,GAEA,MAAI,aAAcA,EACTA,EAGF,CAAEoG,SAAUpG,EACrB,CA4S4BqG,CAA8BrG,GAC9CsG,QAAkB3H,EACtBsE,EA5SR,SAAgCjD,GAC9B,MAAMuG,EAAQ,IAAIC,gBAEdxG,EAAMyG,WACRF,EAAM9G,IAAI,aAAc,QACfO,EAAM0G,YACfH,EAAM9G,IAAI,aAAc,QAGtBO,EAAM2G,YACRJ,EAAM9G,IAAI,aAAcO,EAAM2G,YAGhC,MAAMC,EAAcL,EAAMM,WAE1B,MAAO,4BAA2BD,EAAc,IAAIA,IAAgB,GACtE,CA4RsBE,CAAuBX,GAAgB,CAAElE,OAAQ,QAC/D,mDAGF,GAAIqE,EAAUlJ,MACZ,OAAOkJ,EAGT,IAAIS,EAEJ,IACEA,QAA4BC,EAAkB,CAAElG,YAAawF,EAAUzH,MACzE,CAAE,MAAOzB,GACP,OAAIA,aAAiB6J,EAGZjI,EAAY5B,EAAMR,KH7nBC,OG6nB2Bc,EAAWN,GAG3DqF,EACL,8BACA,+BACArF,EAEJ,CAEA,MAAM8J,EF3fN,SAAoCH,GAGxC,MAAMxF,EAAmBwF,EAAoBvF,uBAI7C,OAA0C,IAAnCD,GAAkBrB,KAAKiH,OAChC,CEmfyBC,CAA0BL,GAEvC3C,QAAiBzF,EACrBsE,EAAc,4BAA6B,CACzChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CACnBuE,sBACAX,SAAU,IAAKD,EAAcC,SAAUc,kBAG3C,wBAGF,OAAI9C,EAAShH,MACJgH,EAGFrF,EAAS,CAAEkB,aAAc8G,EAAoBpF,GAAIuF,gBAG1D9G,wBAEAiH,gBAAiB,IACf1I,EACEsE,EAAc,kBAAmB,CAAEhB,OAAQ,QAC3C,kCAGJqF,wBAAyBlJ,UACvB,MAAM6F,QAAgBtF,EACpBsE,EAAc,0BAA2B,CAAEhB,OAAQ,SACnD,2CAGF,GAAIgC,EAAQ7G,MACV,OAAO6G,EAGT,IAAIC,EAEJ,IAIEA,EAAoBrC,QAHMsC,EAAoB,CAC5CrD,YAAaD,EAAyBoD,EAAQpF,QAGlD,CAAE,MAAOzB,GACP,OAAOqF,EACL,gCACA,iCACArF,EAEJ,CAEA,MAAMgH,QAAiBzF,EACrBsE,EAAc,2BAA4B,CACxChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CAAE0B,wBAEzB,4CAGF,OAAIE,EAAShH,MACJgH,EAGFtC,EAAesC,EAASvF,MAAQ,CAAA,EAAI,aAG7C0I,2BAA4BnJ,MAAM4B,IAChC,MAAMiE,QAAgBtF,EACpBsE,EAAc,0BAA2B,IACpCX,EAAwBtC,KAE7B,2CAGF,GAAIiE,EAAQ7G,MACV,OAAO6G,EAGT,IAAI/D,EACAgE,EAEJ,IACE,MAAM5C,QAAoB6C,EAAoB,CAC5CrD,YAAaD,EAAyBoD,EAAQpF,QAEhDqB,EAAMmB,EAAwBC,GAC9B4C,EAAoBrC,EAA6BP,EACnD,CAAE,MAAOlE,GACP,OAAOqF,EACL,gCACA,iCACArF,EAEJ,CAEA,IAAK8C,EACH,OAAOlB,EAAY,sCAGrB,MAAMoF,QAAiBzF,EACrBsE,EAAc,2BAA4B,CACxChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CAAE0B,wBAEzB,4CAGF,GAAIE,EAAShH,MACX,OAAOgH,EAGT,MAAM7H,EAASuF,EAAesC,EAASvF,MAAQ,CAAA,EAAI,YAEnD,OAAItC,EAAOa,MACFb,EAGFwC,EAAS,IAAKxC,EAAOsC,KAAMoB,aAAcC,EAAID,aAAcC,SAGpEsH,cAAe,IACb7I,EACEsE,EAAc,eAAgB,CAAEhB,OAAQ,QACxC,wCAGJwF,oBAAqB,IACnB9I,EACEsE,EAAc,qBAAsB,CAAEhB,OAAQ,SAC9C,6CAGJyF,qBAAsBxK,GACpByB,EACEsE,EAAc,sBAAuB,CACnChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CAAEtF,WAEzB,4CAGJyK,YAAazK,GACXyB,EACEsE,EAAc,gBAAiB,CAC7BhB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CAAEtF,WAEzB,wCAGJ0K,qBAAsBxJ,MAAMlB,IAC1B,MAAMkH,QAAiBzF,EACrBsE,EAAc,mBAAoB,CAChChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAU,CAAEtF,WAEzB,4CAGF,OAAIkH,EAAShH,MACJgH,EAGFtC,EAAesC,EAASvF,MAAQ,CAAA,EAAI,SAG7CgJ,iBAAkB7H,GAChBrB,EACEsE,EAAc,oBAAqB,CACjChB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAUxC,KAEvB,gCAGJ8H,iBAAkBnG,GAChBhD,EACEsE,EAAc,oBAAqB,CACjChB,OAAQ,SACRzF,KAAM+F,KAAKC,UAAU,CAAEb,SAEzB,gCAGJoG,kBAAmB,IACjBpJ,EACEsE,EAAc,iBAAkB,CAAEhB,OAAQ,QAC1C,iCAGJ+F,mBAAoBhI,GAClBrB,EACEsE,EAAc,iBAAkB,CAC9BhB,OAAQ,OACRzF,KAAM+F,KAAKC,UAAUxC,KAEvB,kCAGJiI,gBAAiBC,GACfvJ,EACEsE,EAAc,kBAAkByC,mBAAmBwC,KAAmB,CACpEjG,OAAQ,QAEV,gCAGJkG,mBAAoB,CAACD,EAAgBlI,IACnCrB,EACEsE,EAAc,kBAAkByC,mBAAmBwC,KAAmB,CACpEjG,OAAQ,QACRzF,KAAM+F,KAAKC,UAAUxC,KAEvB,kCAGJoI,mBAAoBF,GAClBvJ,EACEsE,EAAc,kBAAkByC,mBAAmBwC,YAA0B,CAC3EjG,OAAQ,SAEV,kCAGJoG,wBAAyBH,GACvBvJ,EACEsE,EAAc,kBAAkByC,mBAAmBwC,aAA2B,CAC5EjG,OAAQ,QAEV,wCAGJqG,sBAAuB,CAACJ,EAAgBlI,IACtCrB,EACEsE,EAAc,kBAAkByC,mBAAmBwC,aAA2B,CAC5EjG,OAAQ,OACRzF,KAAM+F,KAAKC,UAAUxC,KAEvB,sCAGJuI,yBAA0B,CAACL,EAAgBM,EAAQxI,IACjDrB,EACEsE,EACE,kBAAkByC,mBAAmBwC,cAA2BxC,mBAAmB8C,KACnF,CACEvG,OAAQ,QACRzF,KAAM+F,KAAKC,UAAUxC,KAGzB,yCAGJyI,yBAA0B,CAACP,EAAgBM,IACzC7J,EACEsE,EACE,kBAAkByC,mBAAmBwC,cAA2BxC,mBAAmB8C,KACnF,CACEvG,OAAQ,WAGZ,2CEt6BF,SAAUyG,EAAiBC,EAAqBC,GACpD,MAAMC,EAAUF,EAAYG,OACtBC,EAAWH,EAAaE,OAE9B,IAAKD,IAAYE,EACf,OAAO,EAGT,GAAIF,IAAYE,EACd,OAAO,EAGT,GAAIF,EAAQG,SAAS,MAAO,CAC1B,MAAMC,EAASJ,EAAQK,MAAM,GAAG,GAChC,OAAOH,IAAaE,GAAUF,EAASzF,WAAW,GAAG2F,KACvD,CAEA,IAAKF,EAASI,SAAS,KACrB,OAAO,EAGT,IAAKN,EAAQM,SAAS,KACpB,OAAOJ,EAASzF,WAAW,GAAGuF,MAGhC,MAAMO,EAAeP,EAAQQ,MAAM,KAC7BC,EAAgBP,EAASM,MAAM,KAC/BE,EAAgBH,EAAaA,EAAaI,OAAS,GACnDC,EAAiBH,EAAcA,EAAcE,OAAS,GACtDE,EAAgBN,EAAaF,MAAM,GAAG,GACtCS,EAAiBL,EAAcJ,MAAM,GAAG,GAE9C,MACoB,UAAlBK,GACmB,SAAnBE,GACAC,EAAcF,SAAWG,EAAeH,QACxCE,EAAcE,MAAM,CAACC,EAAMC,IAAUD,IAASF,EAAeG,GAEjE,CAEM,SAAUC,EACdC,EACAC,GAEA,IAAKC,MAAMC,QAAQH,GACjB,OAAO,EAGT,MAAMnB,EAAUmB,EAAaI,OAAQC,GAAyC,iBAATA,GAGrE,OAFiBH,MAAMC,QAAQF,GAAiBA,EAAgB,CAACA,IAEjDK,KAAK1B,GACnBC,EAAQyB,KAAK3B,GAAeD,EAAiBC,EAAaC,IAE9D,UCTgB2B,IACd,MAA+B,oBAAjBC,wBAlCd,MAAMC,EAAS,IAAIC,IAEnB,MAAO,CACL9J,IAAK+J,GAAOF,EAAO7J,IAAI+J,IAAQ,KAC/BlL,IAAK,CAACkL,EAAKxM,KACTsM,EAAOhL,IAAIkL,EAAKxM,IAGtB,CA2BMyM,GAxBG,CACLhK,IAAK+J,IACH,IACE,OAAOH,aAAaK,QAAQF,EAC9B,CAAE,MACA,OAAO,IACT,GAEFlL,IAAK,CAACkL,EAAKxM,KACT,IACEqM,aAAaM,QAAQH,EAAKxM,EAC5B,CAAE,MAEF,GAaN,CC7BA,MAAM4M,EAAuB,oBAuEvBC,GAAa,CACjBC,KAAM,KACNtK,YAAa,GACbuK,cAAe,GACfC,mBAAoB,KACpBC,aAAc,KACdC,iBAAiB,GC7BnB,MAAMC,GAAcC,OAA2C7N,GAMlD8N,GAAU,KACrB,MAAMC,EAAUC,EAAWJ,IAC3B,IAAKG,EACH,MAAM,IAAIrP,MAAM,+CAElB,OAAOqP,GASIE,GAA4C,EACvDC,WACAhI,UACAiI,4BAA2B,MAE3B,MAAMC,EAAUC,EACd,IDME,SAA4BhL,GAChC,MAAM6C,QAAEA,EAAOoI,qBAAEA,GAAuB,GAASjL,EAC3CkL,EAASlJ,EAAyB,CAAEa,YACpCsI,EAAUnL,EAAQmL,SAAW3B,IAC7B4B,EAAY,IAAIC,IAEtB,IAAIC,GAAY,EAGZC,EAAoB,EAEpBrG,EAA0B,IACzB+E,GACHuB,SAAS,EACTC,kBACER,GAA8D,SAAtCE,EAAQtL,IAAImK,IAOxC,SAAS0B,EAASC,GAChB,MAAMC,EAAO,IAAK1G,KAAUyG,GACXpP,OAAOsP,KAAKF,GAAsCpC,KACjEK,GAAO1E,EAAM0E,KAASgC,EAAKhC,MAO7B1E,EAAQ0G,EACRR,EAAUU,QAAQC,GAAYA,KAChC,CAEA,SAASC,IACPb,EAAQzM,IAAIsL,EAAsB,QAE9BiB,GACFS,EAAS,CAAED,mBAAmB,GAElC,CAGA,SAASQ,IACPP,EAASzB,GACX,CAsBA5M,eAAe6O,IACb,MAAMC,IAAeZ,EAErBG,EAAS,CAAEF,SAAS,IAEpB,MAAMY,QAAelB,EAAOpI,iBAE5B,OAAIwI,GAAaa,IAAeZ,EACvBa,EAGLA,EAAO/P,OAIT4P,IACAP,EAAS,CAAEF,SAAS,IAEbY,IAGTV,EAAS,CACPxB,KAAMkC,EAAOtO,KAAKoM,KAClBtK,YAAawM,EAAOtO,KAAK8B,aAAe,GACxCuK,cAAeiC,EAAOtO,KAAKqM,eAAiB,GAC5CC,mBAAoBgC,EAAOtO,KAAKsM,oBAAsB,KACtDE,iBAAiB,EACjBkB,SAAS,IAGNtG,EAAMuG,mBACTO,IAGKI,EACT,CAEA/O,eAAegP,EACbC,GAEA,MAAMF,QAAeE,IAMrB,OAJKF,EAAO/P,aACJ6P,IAGDE,CACT,CAyHA,MAAO,CACLG,SAAU,IAAMrH,EAChBsH,UAAWT,IACTX,EAAUqB,IAAIV,GAEP,KACLX,EAAUsB,OAAOX,KAGrBY,QAhIkC,CAClC5J,MAAO,CAAC6J,EAAYC,IAClB3B,EAAOnI,MAAM,CAAE6J,aAAYC,qBAE7BC,mBAAoB,IAAMT,EAAa,IAAMnB,EAAOlI,oBAEpDkJ,iBACA5I,OA5EFjG,iBAKE,IACE,aAAa6N,EAAO5H,QACtB,SACE2I,GACF,CACF,EAmEEzI,kBAjEFnG,iBACE,IACE,aAAa6N,EAAO1H,mBACtB,SACEyI,GACF,CACF,EA6DExI,WAAYpG,UACV,MAAM+O,QAAelB,EAAOzH,aAM5B,OAJK2I,EAAO/P,OACV4P,IAGKG,GAGTtF,iBAAkBzJ,MAAMkD,IACtB,MAAMzC,KAAEA,EAAIzB,MAAEA,SAAgB6O,EAAOpE,iBAAiB,CAGpDiG,aAAcxM,EAAWwM,cAAgB,KACzCnM,GAAIL,EAAWK,KAGjB,GAAIvE,EACF,MAAO,CAAEyB,KAAM,KAAMzB,SAGvB,MAAM2Q,EAAUlP,EAAKyC,WASrB,OAPAmL,EAAS,CACP9L,YAAasF,EAAMtF,YAAYqN,IAAIC,GACjCA,EAAQtM,KAAOoM,EAAQpM,GAAK,IAAKsM,KAAYF,GAAYE,KAKtD,CAAEpP,KAAMkP,EAAS3Q,MAAO,OAGjC0K,iBAAkB1J,MAAM6B,IACtB,MAAMkN,QAAelB,EAAOnE,iBAAiB7H,GAU7C,OARKkN,EAAO/P,OACVqP,EAAS,CACP9L,YAAasF,EAAMtF,YAAYyJ,OAC7B9I,GAAcA,EAAWK,KAAO1B,KAK/BkN,GAGT/E,mBAAoBF,GAClBkF,EAAa,IAAMnB,EAAO7D,mBAAmBF,IAE/CvC,mBAAoB,IAAMsG,EAAOtG,qBACjCE,gBAAiB7F,GAASiM,EAAOpG,gBAAgB7F,GACjDgG,iBAAkBhG,GAASoN,EAAa,IAAMnB,EAAOjG,iBAAiBhG,IAEtEkO,oBAAqB9P,UACnB,MAAM+O,QAAelB,EAAO5E,kBAK5B,OAFAoF,EAAS,CAAErB,aAAc+B,EAAO/P,MAAQ,KAAO+P,EAAOtO,OAE/CsO,GAGT7F,wBAAyBlJ,UACvB,MAAM+O,QAAelB,EAAO3E,0BAM5B,OAJK6F,EAAO/P,OACVqP,EAAS,CAAErB,aAAc+B,EAAOtO,OAG3BsO,GAGT5F,2BAA4BnJ,MAAM4B,IAChC,MAAMmN,QAAelB,EAAO1E,2BAA2BvH,GAcvD,OAZKmN,EAAO/P,OACVqP,EAAS,CACPrB,aAAc,CACZlJ,MAAOiL,EAAOtO,KAAKqD,MACnBD,OAAQkL,EAAOtO,KAAKoD,OACpBE,WAAYgL,EAAOtO,KAAKsD,WACxBC,UAAW+K,EAAOtO,KAAKuD,UACvBC,cAAe8K,EAAOtO,KAAKwD,iBAK1B8K,GAGTvF,qBAAsBxJ,MAAMlB,IAC1B,MAAMiQ,QAAelB,EAAOrE,qBAAqB1K,GAMjD,OAJKiQ,EAAO/P,OACVqP,EAAS,CAAErB,aAAc+B,EAAOtO,OAG3BsO,GAGTgB,QAAS9D,GAAQpE,EAAMgF,MAAMmD,OAAOjF,SAASkB,GAC7CN,cAAeM,GACbpE,EAAMgF,KAAOoD,EAAuBpI,EAAMgF,KAAKmD,MAAO/D,QAAQ3M,EAEhEqP,gBAaAuB,QAAS,KACPjC,GAAY,EACZF,EAAUoC,SAGhB,CCjQMC,CAAkB,CAChB5K,UACAoI,qBAAsBH,IAE1B,CAACjI,EAASiI,IAMN5F,EAAQwI,EACZ3C,EAAQyB,UACRzB,EAAQwB,SACRxB,EAAQwB,UAcVoB,EAAU,KACH5C,EAAQ4B,QAAQT,kBACpB,CAACnB,IAEJ,MAAM3N,EAAQ4N,EACZ,KAAA,IAAY9F,KAAU6F,EAAQ4B,QAAS9J,YACvC,CAACqC,EAAO6F,EAASlI,IAGnB,OAAO+K,EAACrD,GAAYsD,SAAQ,CAACzQ,MAAOA,EAAKyN,SAAGA,KC9HjCiD,GAAgB,KAC3B,MAAMjL,QAAEA,GAAY4H,KAEpB,OAAOO,EACL,IACEhJ,EAAyB,CACvBa,YAEJ,CAACA,KCDQkL,GAAwC,CAAC,UAAW,cAWpDC,GAAkB,KAC7B,MAAMC,EAAaH,MACZI,EAAcC,GAAmBC,EAA+B,OAChE5C,EAAS6C,GAAcD,GAAS,GA8BvC,OA5BAT,EAAU,KACR,IAAIW,GAAS,EAsBb,MApBajR,WACX,IACE,MAAMS,KAAEA,EAAIzB,MAAEA,SAAgB4R,EAAWpJ,wBAErCyJ,IAAWjS,GAASyB,GAAMoQ,cAAczF,QAC1C0F,EAAgBrQ,EAAKoQ,aAEzB,CAAE,MAIF,SACMI,GACFD,GAAW,EAEf,GAGGE,GAEE,KACLD,GAAS,IAEV,CAACL,IAEG,CAAEC,eAAc1C,YAUZgD,GAA4BN,GACvCO,QAAQP,GAAc3E,KAAKrI,GAAqB,YAAXA,ICxD1BwN,GAAgB/K,IAC3B,GAAqB,iBAAVA,EAAoB,OAAO,EAGtC,MAAMgL,EAAahL,EAAMoE,OAGzB,GAAI4G,EAAWlG,OAAS,GAAKkG,EAAWlG,OAAS,IAAK,OAAO,EAG7D,MAAMmG,EAAQD,EAAWrG,MAAM,KAC/B,GAAqB,IAAjBsG,EAAMnG,OAAc,OAAO,EAE/B,MAAOoG,EAAWC,GAAcF,EAGhC,SACG,sBAAsBG,KAAKF,IAC5BA,EAAUtM,WAAW,MACrBsM,EAAU5G,SAAS,MACnB4G,EAAUzG,SAAS,WAOlB,iCAAiC2G,KAAKD,IACvCA,EAAWvM,WAAW,MACtBuM,EAAW7G,SAAS,MACpB6G,EAAWvM,WAAW,MACtBuM,EAAW7G,SAAS,MACpB6G,EAAW1G,SAAS,QAeX4G,GAAsBpL,IACjC,MAAMqL,EAAcC,EAA2BtL,GAC/C,OAAOqL,GAAaE,YAAa,GAO5B9R,eAAe+R,KACpB,OT1CK/R,iBACL,GAAsB,oBAAXkC,OACT,OAAO,EAGT,GACEA,OAAOG,qBAEL,mBADKH,OAAOG,oBAAoB2P,8CAGlC,IACE,aAAa3P,oBAAoB2P,+CACnC,CAAE,MAEA,OADAtN,QAAQ1F,MAAM,oCACP,CACT,CAGF,OAAO,CACT,CSuBSiT,EACT,CCjEO,MAAMC,GAAoB,KAC/B,MAAOC,EAAkBC,GAAuBrB,GAAS,IAClD5C,EAAS6C,GAAcD,GAAS,GA6BvC,OA3BAT,EAAU,KACR,IAAIW,GAAS,EAqBb,MAnBqBjR,WACnB,IACE,MAAMqS,QAAkBN,KACpBd,GACFmB,EAAoBC,EAExB,CAAE,MACIpB,GACFmB,GAAoB,EAExB,SACMnB,GACFD,GAAW,EAEf,GAGGsB,GAEE,KACLrB,GAAS,IAEV,IAEI,CAAEkB,mBAAkBhE,YCxBhBoE,GACJ,SADIA,GAEG,iBAFHA,GAGK,oBAHLA,GAIK,oBAJLA,GAKM,oBALNA,GAMI,kBANJA,GAOM,oBAPNA,GAQI,mBCzBjB,SAASC,GAAYC,EAAKC,YACnBA,IAAiBA,EAAM,CAAA,GAC5B,IAAIC,EAAWD,EAAIC,SAEnB,GAAKF,GAA2B,oBAAbG,SAAnB,CAEA,IAAIC,EAAOD,SAASC,MAAQD,SAASE,qBAAqB,QAAQ,GAC9DC,EAAQH,SAASI,cAAc,SACnCD,EAAME,KAAO,WAEI,QAAbN,GACEE,EAAKK,WACPL,EAAKM,aAAaJ,EAAOF,EAAKK,YAKhCL,EAAKO,YAAYL,GAGfA,EAAMM,WACRN,EAAMM,WAAWC,QAAUb,EAE3BM,EAAMK,YAAYR,SAASW,eAAed,GAnBW,CAqBzD,8wICJA,MAAMe,GAA0D,EAC9DjE,aACAkE,cACAC,aACAC,aACAC,iBACA/C,mBAKA,MAAMgD,EAAiB,IAAI7F,IACzB6C,GAAgB,CAAC,UAAW,aAAc,cAEtCiD,EAAgBD,EAAeE,IAAI,eAAiB1C,GAAa9B,GACjEyE,EACJH,EAAeE,IAAI,cAAgB3C,QAAQsC,IAAerC,GAAa9B,GACnE0E,EAAeJ,EAAeE,IAAI,cAAgBpC,GAAmBpC,GACrE2E,EAAmBL,EAAeE,IAAI,YAAc3C,QAAQwC,GAElE,OAAKE,GAAkBE,GAAiBC,GAAiBC,EAKvDC,EAAA,MAAA,CAAKC,UAAWC,GAAmB7G,SAAA,CACjC+C,EAAA,MAAA,CAAK6D,UAAWC,GAAqB7G,SAAA,4BAErC+C,EAAA,IAAA,CAAG6D,UAAWC,GAA0B7G,SAAA,0CAExC2G,EAAA,MAAA,CAAKC,UAAWC,aACbP,GACCK,EAAA,SAAA,CACElB,KAAK,SACLmB,UAAWC,GACXC,QAASb,EAAWjG,SAAA,CAEpB+C,EAAA,OAAA,CAAM6D,UAAWC,GAAkB7G,SAAA,qBACnC+C,EAAA,OAAA,CAAM6D,UAAWC,GAAoB7G,SAAA,gDAMxCwG,GACCG,EAAA,SAAA,CACElB,KAAK,SACLmB,UAAWC,GACXC,QAASZ,EAAUlG,SAAA,CAEnB+C,EAAA,OAAA,CAAM6D,UAAWC,GAAkB7G,SAAA,eACnC+C,EAAA,OAAA,CAAM6D,UAAWC,GAAoB7G,SAAA,wCAIxCyG,GACCE,EAAA,SAAA,CACElB,KAAK,SACLmB,UAAWC,GACXC,QAASX,EAAUnG,SAAA,CAEnB+C,EAAA,OAAA,CAAM6D,UAAWC,GAAkB7G,SAAA,sBACnC+C,EAAA,OAAA,CAAM6D,UAAWC,GAAoB7G,SAAA,0CAK1C0G,GACC3D,EAAA,SAAA,CAAQ0C,KAAK,SAASmB,UAAWC,GAAmBC,QAASV,qCA/C1D,MC7BEW,GAA6B,0BAEpCC,GAAiC,KACrC,MAAMjN,mBAAEA,EAAkBE,gBAAEA,GAAoB2F,KAG1CqH,EAAeC,EAAQ,oBACtBC,EAAWC,GAAgB7D,EAA0B,KACrD/R,EAAO6V,GAAY9D,EAAS,IAcnC,GAZAT,EAAU,KACR,IAAIW,GAAS,EAMb,OAJK1J,IAAqBuN,KAAK,EAAGrU,WAC5BwQ,GAAQ2D,EAAanU,GAAMkU,WAAa,MAGvC,KACL1D,GAAS,IAEV,CAAC1J,IAEqB,IAArBoN,EAAUvJ,OACZ,OAAO,KAsBT,OACE+I,EAAA,MAAA,CAAKC,UAAWC,GAAsB7G,SAAA,CACnCmH,EAAU/E,IAAImF,GACbxE,EAAA,SAAA,CAEE0C,KAAK,SACLmB,UAAWC,GACXC,QAAS,IA1BItU,OAAO0H,IAC1BmN,EAAS,IAGTG,eAAetI,QAAQ6H,GAA4B7M,GAEnD,MAAMjH,KAAEA,EAAIzB,MAAEA,SAAgByI,EAAgB,CAC5CC,aACAR,YAAa,IAAI+N,IAAIR,EAAcvS,OAAOgT,SAASC,QAAQ1M,aAGzDzJ,EACF6V,EAAS,+CAIX3S,OAAOgT,SAASE,OAAO3U,EAAK4U,mBAUPC,CAAaP,EAASxR,IAAGiK,SAExC2G,EAAA,OAAA,CAAMC,UAAWC,GAAkB7G,SAAA,CAAA,iBAAiBuH,EAASvW,SALxDuW,EAASxR,KASjBvE,GAASuR,OAAG6D,UAAWC,GAAY7G,SAAGxO,QCpDvCuW,GAAkB,KACtB,MAAMC,EAAWC,KACXrH,kBAAEA,EAAiB1I,MAAEA,EAAK+J,mBAAEA,GAAuBrC,KACnDwD,EAAaH,MACb0B,iBAAEA,GAAqBD,MACrBrB,aAAc6E,GAAsB/E,MACrCpB,EAAYoG,GAAiB5E,EAAiB,KAC9CzK,EAAOsP,GAAY7E,EAAiB,KACpC8E,EAAMC,GAAW/E,EAA+B,aAChDgF,EAAYC,GAAiBjF,EAAiB,KAC9CkF,EAAYC,GAAiBnF,EAAiB,KAC9CoF,EAAiBC,GAAsBrF,EAAiB,KACxDsF,EAAqBC,GAA0BvF,GAAS,IACxDF,EAAcC,GAAmBC,EAA+B,MAEvET,EAAU,KACJlC,GACF0H,EAAQ,UAET,CAAC1H,IAgIJ,OACEmC,SAAK6D,UAAWC,YACdF,EAAA,MAAA,CAAKC,UAAWC,GAAW7G,SAAA,CACzB+C,EAAA,KAAA,CAAI6D,UAAWC,GAAc7G,SACjB,UAATqI,EAAmB,UAAY,mBAGlC1B,EAAAoC,EAAA,CAAA/I,SAAA,CACE2G,UAAMqC,SA5DOxW,MAAOyW,IAC1BA,EAAEC,iBACFV,EAAc,IACdM,GAAuB,GAEvB,IACE,GAAa,UAATT,EAAkB,CACpB,MAAQpV,KAAMkW,EAAU3X,MAAEA,SAAgB0G,EAAM6J,EAAY4C,GAE5D,GAAInT,EAEF,YADAgX,EAAc,8CAOhB,MAAMY,EAAmBD,GAAY9F,cAAczF,OAC/CuL,EAAW9F,aACV6E,GAAqBhF,GAG1B,GAFAI,EAAgB8F,GAEZzE,GAAoByE,EAAiB7L,SAAS,WAAY,CAC5D,MAAQ/L,MAAO6X,SAAuBpH,IAEtC,OAAKoH,GAKLP,GAAuB,QACvBN,EACE,gFANAR,EAAS,IASb,CAGA,YADAc,GAAuB,EAEzB,CAEa,aAATT,QAhGS7V,WACfgW,EAAc,IAEd,MAAMvV,KAAEA,EAAIzB,MAAEA,SAAgB4R,EAAWvK,SAAS,CAChDC,UAGEtH,EACFgX,EAAc,yCAIK,YAAjBvV,EAAKvC,QAOTsX,EAASjD,IANPyD,EACE,uFAmFM3P,EAEV,CAAE,MAGA3B,QAAQ1F,MAAM,+BACdgX,EAAc,gDAChB,GAWkCxI,SAAA,CAChB,UAATqI,GACC1B,EAAA,MAAA,CAAKC,UAAWC,aACd9D,EAAA,QAAA,CAAOuG,QAAQ,aAAa1C,UAAWC,GAAY7G,SAAA,iCAGnD+C,WACEhN,GAAG,aACH0P,KAAK,OACLlT,MAAOwP,EACPwH,SA3IgBN,IAC9B,MAAM1W,EAAQ0W,EAAEO,OAAOjX,MACvB4V,EAAc5V,IA0IAkX,aAAa,MACbC,YAAY,wBACZ9C,UAAWC,GACX8C,OAAQ,KACN,GAAI5H,EAAY,CACd,MAAMuC,EACJT,GAAa9B,IAAeoC,GAAmBpC,GACjD6G,EACEtE,EAAU,GAAK,6CAEnB,GAEFnH,UAAQ,IAEV4F,EAAA,IAAA,CAAG6D,UAAWC,GAAiB7G,SAAA,sDAG9B6I,GACC9F,EAACiD,GAAmB,CAClBjE,WAAYA,EACZkE,YA5HIzT,UACpB,MAAMhB,MAAEA,SAAgB4R,EAAW3J,mBAE/BjI,EACFgX,EAAc,8BAIhBR,EAASjD,GAA8B,CAAE1K,MAAO,CAAE0H,iBAqHlCmE,WAvGG1T,UACnB,MAAMhB,MAAEA,SAAgB4R,EAAW7J,uBAE/B/H,EACFgX,EAAc,8BAIhBR,EAASjD,GAA+B,CAAE1K,MAAO,CAAEuP,KAAM,YAgGzCzD,WAnHG3T,UACnB,MAAMhB,MAAEA,SAAgB4R,EAAWjK,uBAE/B3H,EACFgX,EAAc,uBAIhBR,EAASjD,GAA+B,CAAE1K,MAAO,CAAEuP,KAAM,YA4GzCxD,eAAgBzB,EAAmB1C,OAAqBnQ,EACxDuR,aAAcA,IAIjBsF,GAAmB5F,EAAA,IAAA,CAAG6D,UAAWC,YAAe8B,OAG3C,aAATN,GACC1B,EAAA,MAAA,CAAKC,UAAWC,GAAiB7G,SAAA,CAC/B+C,EAAA,QAAA,CAAOuG,QAAQ,QAAQ1C,UAAWC,GAAY7G,SAAA,kBAG9C+C,EAAA,QAAA,CACEhN,GAAG,QACH0P,KAAK,QACLlT,MAAOuG,EACPyQ,SAzLWN,IACzB,MAAMnQ,EAAQmQ,EAAEO,OAAOjX,MACvB6V,EAAStP,IAwLK2Q,aAAa,MACb7C,UAAWC,GACX8C,OAAQ,KACN,GAAI7Q,EAAO,CACT,MAAMwL,EAAUT,GAAa/K,GAC7B4P,EAAcpE,EAAU,GAAK,6BAC/B,GAEFnH,UAAQ,IAETsL,GAAc1F,EAAA,IAAA,CAAG6D,UAAWC,GAAY7G,SAAGyI,OAGhD1F,EAAA,SAAA,CAAQ0C,KAAK,SAASmB,UAAWC,GAAegD,WA5L3C,UAATxB,GAAoBtG,EACf8B,GAAa9B,IAAeoC,GAAmBpC,GAIjD8B,GAAa/K,aAwLA,UAATuP,EAAmB,QAAU,aAE/BE,GAAcxF,EAAA,IAAA,CAAG6D,UAAWC,GAAY7G,SAAGuI,IAC5CxF,EAAA,SAAA,CACE0C,KAAK,SACLqB,QAAS,IAAMwB,EAAiB,UAATD,EAAmB,WAAa,SACvDzB,UAAWC,GAAa7G,SAEd,UAATqI,EACG,oCACA,wCAIRtF,EAACiE,GAAoB,CAAA,uuCClP/B,MAAM8C,GAAyB,KAC7B,MAAM9B,EAAWC,KACThG,mBAAoB8H,GAAoBnK,MACzCpO,EAAO6V,GAAY9D,EAAS,IAenC,OACER,SAAK6D,UAAWC,GAAOmD,UAAShK,SAC9B2G,EAAA,MAAA,CAAKC,UAAWC,GAAOoD,eACrBlH,EAAA,KAAA,CAAI6D,UAAWC,GAAOqD,MAAKlK,SAAA,uBAC3B+C,EAAA,SAAA,CAAQ+D,QAjBkBtU,UAC9B6U,EAAS,IAET,MAAQ7V,MAAO6X,SAAuBU,IAEjCV,EAKLhC,EAAS,uEAJPW,EAAS,MAWmCpB,UAAWC,GAAOsD,OAAMnK,SAAA,gBAGjExO,GAASuR,OAAG6D,UAAWC,GAAOrV,MAAKwO,SAAGxO,4zGCnB/C,MAAM4Y,GAAkE,CACtEpY,uBACE,qFACFC,2BACE,qIACFC,0BAA2B,uDAC3BC,aACE,4EASJ,MAAMkY,GAAgC,KACpC,MAAMhJ,eAAEA,GAAmBzB,KACrBwD,EAAaH,MACb0B,iBAAEA,EAAkBhE,QAAS2J,GAA0B5F,MACvDrB,aAAEA,EAAc1C,QAAS4J,GAAwBpH,KACjD6E,EAAWC,KAEVtX,EAAQ6Z,GAAajH,EAAmD,SACxE7S,EAAS+Z,GAAclH,EAAS,IASjCmH,EAAU/G,GAAyBN,GAEnCsH,EAAuBnY,gBACrB6O,IACN2G,EAAS,MAGL1N,EAAkB9H,MAAOuI,IAC7B,MAAM6P,SAAEA,EAAQC,QAAEA,EAAOC,WAAEA,cRqB7B,MAAMC,EAAKjW,UAAUkW,UAAUC,cAE/B,IAAIL,EAAW,UACXC,EAAU,UAuBd,MArBI,mBAAmB3G,KAAK6G,GAAKH,EAAW,MACnC,UAAU1G,KAAK6G,GAAKH,EAAW,UAC/B,SAAS1G,KAAK6G,GAAKH,EAAW,MAC9B,UAAU1G,KAAK6G,GAAKH,EAAW,UAC/B,QAAQ1G,KAAK6G,KAAKH,EAAW,SAMjC9V,UAAiCoW,MAAOL,EAAU,QAC9C,eAAe3G,KAAK6G,GAAKF,EAAU,OACnC,oBAAoB3G,KAAK6G,GAAKF,EAAU,QACxC,UAAU3G,KAAK6G,GAAKF,EAAU,UAC9B,iBAAiB3G,KAAK6G,GAAKF,EAAU,UACrC,gBAAgB3G,KAAK6G,GAAKF,EAAU,UACpC,eAAe3G,KAAK6G,GAAKF,EAAU,SACnC,SAAS3G,KAAK6G,KAAKF,EAAU,UAI/B,CAAED,WAAUC,UAASC,WAFT,GAAGF,OAAcC,IAGtC,CQhD8CM,GAEpC3Q,EAA4B,CAIhC0H,aAAc4I,EACdF,WACAC,UACAC,cAGFN,EAAU,WAEV,IACE,MAAMhZ,MAAEA,SAAgB4R,EAAW9I,gBAAgB,CAAEE,WAAUO,eAE/D,GAAIvJ,EACF,MAAMA,QAGF6P,IACNmJ,EAAU,WACVC,EAAW,oCACXzC,EAAS,IACX,CAAE,MAAOxW,GACP0F,QAAQ1F,MAAM,gCACdgZ,EAAU,SAGVC,EA7DN,SAA8BjZ,GAC5B,MAAMF,EAAOe,EAA0Bb,GAEvC,OAAOF,EAAO8Y,GAAwB9Y,QAAQQ,CAChD,CAyDiBsZ,CAAqB5Z,IAAU,6BAC5C,GAGF,OACEuR,SAAK6D,UAAWC,YACd9D,EAAA,MAAA,CAAK6D,UAAWC,GAAW7G,SAEvB2G,EAAA,MADD2D,GAAyBC,EACxB,CAAK3D,UAAWC,GAAc7G,SAAA,CAC5B+C,SAAK6D,UAAWC,KAChB9D,EAAA,OAAA,CAAA/C,SAAA,sCAEC2E,EAuBH,CAAKiC,UAAWC,GAAgB7G,SAAA,CAC9B+C,EAAA,KAAA,CAAI6D,UAAWC,GAAY7G,SAAA,uCAC3B+C,EAAA,IAAA,CAAG6D,UAAWC,GAAkB7G,SAAA,2EAIhC+C,EAAA,SAAA,CACE+D,QAAS,IAAMxM,IACfuP,SAAqB,YAAXlZ,EACViW,UAAWC,GAAa7G,SAEZ,YAAXrP,EAAuB,iBAAmB,qBAS7CoS,EAAA,SAAA,CACE0C,KAAK,SACLqB,QAAS,IAAMxM,EAAgB,kBAC/BuP,SAAqB,YAAXlZ,EACViW,UAAWC,2CAKZnW,GACCqS,EAAA,IAAA,CACE6D,UAAW,GAAGC,MACD,YAAXlW,EAAuBkW,GAAiBA,cAGzCnW,IAIJga,GACC3H,YACE0C,KAAK,SACLqB,QAAS6D,EACTd,SAAqB,YAAXlZ,EACViW,UAAWC,+BA/DjB,CAAKD,UAAWC,GAAgB7G,SAAA,CAC9B+C,EAAA,KAAA,CAAI6D,UAAWC,GAAY7G,SAAA,oCAC3B+C,EAAA,IAAA,CAAG6D,UAAWC,GAAkB7G,SAC7B0K,EACG,uHACA,gJAGLA,GACC3H,EAAA,SAAA,CACE0C,KAAK,SACLqB,QAAS6D,EACT/D,UAAWC,GAAa7G,SAAA,4wGCpGxC,MAAMqL,GAA4B,EAChCzN,SAAS,EACTrL,QACA+Y,YAAY,UACZ/B,WACAvY,OAAO,UAEP,MAAMua,EAASC,EAAuC,IAEhD3M,EAAStM,EAAMkL,MAAM,IAAIgO,OAAOnN,MAAMV,GAAQ8N,KAAK,KAAKpO,MAAM,EAAGM,GAOjE+N,EAAe,CAACzN,EAAe9J,KALjB,IAACwX,EAMnB,GAAIxX,EAAMwJ,OAAS,EACjBiO,EAAgB3N,EAAO9J,QAIzB,IAAKA,IAXcwX,EAWOxX,EAVR,YAAdkX,EAAgC,OAAOpH,KAAK0H,GACzC,aAAa1H,KAAK0H,IASS,CAChC,MAAME,EAAc,IAAIjN,GACxBiN,EAAY5N,GAAS9J,EAErB,MAAM2X,EAAWD,EAAYE,KAAK,IAClCzC,EAASwC,GAEL3X,GAASmX,EAAOlJ,QAAQnE,EAAQ,IAClCqN,EAAOlJ,QAAQnE,EAAQ,IAAI+N,OAE/B,GAGIJ,EAAkB,CAAC3N,EAAe9J,KACtC,IAAI8X,EAAU9X,EAGZ8X,EADgB,YAAdZ,EACQlX,EAAMqD,QAAQ,MAAO,IAErBrD,EAAMqD,QAAQ,aAAc,IAGxC,MAAM0U,EAAQD,EAAQ5O,MAAM,EAAGM,GAAQH,MAAM,IAEvCqO,EAAc,IAAIjN,GAExBsN,EAAMlL,QAAQ,CAAC2K,EAAMQ,KACflO,EAAQkO,EAAIxO,IACdkO,EAAY5N,EAAQkO,GAAKR,KAI7BrC,EAASuC,EAAYE,KAAK,KAC1BT,EAAOlJ,QAAQgK,KAAKC,IAAIpO,EAAQiO,EAAMvO,OAAQA,EAAS,KAAKqO,SAiC9D,OACElJ,EAAA,MAAA,CACE6D,UAAWC,GACXpI,KAAK,QAAO,aACD,0BACX8N,QAViBtD,IACnBA,EAAEC,iBACF2C,EAAgB,EAAG5C,EAAEuD,cAAcC,QAAQ,UAQrBzM,SAEnBnB,EAAOuD,IAAI,CAACwJ,EAAMQ,IACjBrJ,EAAA,QAAA,CAEEmC,IAAKwH,GAAOnB,EAAOlJ,QAAQ+J,GAAKM,EAChCjH,KAAK,OACL6F,UAAyB,YAAdA,EAA0B,UAAY,OACjD7B,aAAa,gBACbzY,KAAM,GAAGA,KAAQob,IACjBO,UAAW,EACXpa,MAAOqZ,EACPhF,UAAWC,GACX0C,SAAUN,GAAK0C,EAAaS,EAAGnD,EAAEO,OAAOjX,OACxCqa,UAAW3D,GAjDG,EAAC/K,EAAe+K,KACpC,GAAc,cAAVA,EAAElK,IAAqB,CACzBkK,EAAEC,iBAEF,MAAM4C,EAAc,IAAIjN,GAEpBA,EAAOX,IACT4N,EAAY5N,GAAS,GACrBqL,EAASuC,EAAYE,KAAK,MACjB9N,EAAQ,IACjB4N,EAAY5N,EAAQ,GAAK,GACzBqL,EAASuC,EAAYE,KAAK,KAC1BT,EAAOlJ,QAAQnE,EAAQ,IAAI+N,QAE/B,CAEc,cAAVhD,EAAElK,KAAuBb,EAAQ,GACnCqN,EAAOlJ,QAAQnE,EAAQ,IAAI+N,QAGf,eAAVhD,EAAElK,KAAwBb,EAAQN,EAAS,GAC7C2N,EAAOlJ,QAAQnE,EAAQ,IAAI+N,SA4BPY,CAAcT,EAAGnD,GAAE,aACvB,SAASmD,EAAI,KAXpBA,OCnGTU,GAA8B,KAClC,MAAM9E,EAAWC,IACXP,EAAWqF,KACX1L,eAAEA,GAAmBzB,KACrBoN,EAAqE,UAAtDtF,EAASrN,OAAoCuP,MAE3DqD,EAAUC,GAAe3J,EAAS,KAClC4J,EAAeC,GAAoB7J,EAAyB,OAC5D/R,EAAO6V,GAAY9D,EAAS,KAC5B5C,EAAS6C,GAAcD,GAAS,IAChC8J,EAAWC,GAAgB/J,EAAS,KACpCgK,EAAeC,GAAoBjK,EAAS,KAE7CH,EAAaH,KAuBbwK,EAAiBjb,UAGrB,GAFAgR,GAAW,IAEN2J,EAAe,CAClB,MAAM3b,MAAEA,GAAUwb,QACR5J,EAAWhK,oBAAoB6T,SAC/B7J,EAAWnK,eAAegU,GAEpC,GAAIzb,EACF6V,EAAS,4BACJ,CACL,GAAI2F,EAGF,aAFM3L,SACN2G,EAAS,KAIXoF,GAAiB,EACnB,CACF,CAEA5J,GAAW,IAmBPkK,EAAelb,UACnB8a,EAAa,SAjBO9a,WACpB6U,EAAS,IACT,MAAM7V,MAAEA,GAAUwb,QACR5J,EAAWjK,6BACXiK,EAAWpK,kBAEjBxH,EACF6V,EACE,8EAIFiG,EAAa,sCAMTK,GACNL,EAAa,sCA2Cf,OA1BAxK,EAAU,KACR,MAAM8K,EAAWC,YAAY,KAC3BL,EAAiBM,GAASA,EAAO,EAAIA,EAAO,EAAI,IAC/C,KAEH,MAAO,IAAMC,cAAcH,IAC1B,IAEH9K,EAAU,KAaJqK,IAAkBH,GAZLxa,WACf,MAAMhB,MAAEA,SAAgB4R,EAAW/J,kBAE/B7H,EACF6V,EACE,4FAIFW,EAASjD,KAIXiJ,IAED,CAACb,EAAeH,EAAahF,EAAU5E,IAGxCL,EAAA,MAAA,CAAK6D,UAAWC,GAAgB7G,SAC9B2G,EAAA,MAAA,CAAKC,UAAWC,GAAW7G,SAAA,CACzB+C,QAAI6D,UAAWC,GAAY7G,SAAA,6BAC3B+C,OAAG6D,UAAWC,0DAEbrV,GAASuR,EAAA,IAAA,CAAG6D,UAAWC,GAAY7G,SAAGxO,IACtC6b,GAAatK,EAAA,IAAA,CAAG6D,UAAWC,GAAc7G,SAAGqN,IAE7C1G,UAAMqC,SApHSxW,MAAOyW,IAI1B,GAHAA,EAAEC,iBACF7B,EAAS,IAEe,IAApB4F,EAASrP,OAAb,CAKA4F,GAAW,GACX,UACQiK,GACR,CAAE,MAGApG,EAAS,6BACX,SACE7D,GAAW,EACb,CAXA,MAFE6D,EAAS,+BA+GuBT,UAAWC,GAAW7G,SAAA,CAClD2G,EAAA,MAAA,CAAA3G,SAAA,CACE2G,WAAO2C,QAAQ,YAAY1C,UAAWC,GAAY7G,SAAA,CAAA,4BAnDrCxH,EAoD4B2U,GAnDhC,IAAb3U,EAA0BuK,EAAA,OAAA,CAAM6D,UAAU,sCAC7B,IAAbpO,EAA2BuK,EAAA,OAAA,CAAM6D,UAAU,mCACxC,WAiD4D,IACzDD,UAAMC,UAAWC,GAAY7G,SAAA,CAAA,qBA/CrBiO,EAgDuBV,EA3ClC,GAJGlB,KAAK6B,MAAMD,EAAU,IAC5BhT,WACAkT,SAAS,EAAG,SACJF,EAAU,IAAIhT,WAAWkT,SAAS,EAAG,cA+CxCpL,EAACsI,GAAQ,CAACzN,OAAQ,EAAGrL,MAAO0a,EAAU1D,SAAU2D,IAChDnK,EAAA,SAAA,CACE0C,KAAK,SACLqB,QAAS,IAAM4G,IACf9G,UAAWC,GAAa7G,SAAA,4BAM5B+C,EAAA,SAAA,CAAQ0C,KAAK,SAASmB,UAAWC,YAC9BlG,EAAU,eAAiB,sBAG9BoC,YACE0C,KAAK,SACLqB,QAAS,IAAMkB,EAAS,UACxBpB,UAAWC,GAAa7G,SAAA,0BApEf,IAACiO,EANGzV,GCjFnB4V,GAA8B,KAClC,MAAMpG,EAAWC,IACXP,EAAWqF,KACX1L,eAAEA,GAAmBzB,KACrBwD,EAAaH,MACb0B,iBAAEA,GAAqBD,KACvBsI,EAAqE,UAAtDtF,EAASrN,OAAoCuP,MAE3DjJ,EAAS6C,GAAcD,GAAS,IAChC8K,EAAUC,GAAe/K,EAAS,KAClCgL,EAAeC,GAAoBjL,EAAS,MAC5C/R,EAAO6V,GAAY9D,EAAS,KAC5B8J,EAAWC,GAAgB/J,EAAS,IA8E3C,OAPAT,EAAU,KACR,MAAM8K,EAAWC,YAAY,KAC3BW,EAAiBV,GAASA,EAAO,EAAIA,EAAO,EAAI,IAC/C,KAEH,MAAO,IAAMC,cAAcH,IAC1B,IAED7K,EAAA,MAAA,CAAK6D,UAAWC,GAAgB7G,SAC9B2G,EAAA,MAAA,CAAKC,UAAWC,GAAW7G,SAAA,CACzB+C,QAAI6D,UAAWC,GAAY7G,SAAA,sBAE3B+C,OAAG6D,UAAWC,wEAIbrV,GAASuR,EAAA,IAAA,CAAG6D,UAAWC,GAAY7G,SAAGxO,IACtC6b,GAAatK,EAAA,IAAA,CAAG6D,UAAWC,GAAc7G,SAAGqN,IAE7C1G,UAAMqC,SAtESxW,MAAOyW,IAI1B,GAHAA,EAAEC,iBACF7B,EAAS,IAEe,IAApBgH,EAASzQ,OAAb,CAKA4F,GAAW,GAEX,IACE,MAAMhS,MAAEA,GAAUwb,QACR5J,EAAW5J,oBAAoB6U,SAC/BjL,EAAW9J,eAAe+U,GAEpC,GAAI7c,EAEF,YADA6V,EAAS,wBAIX,GAAI2F,EAGF,aAFM3L,SACN2G,EAAS,KAIPrD,EACFqD,EAASjD,WAEH1D,IACN2G,EAAS,KAEb,CAAE,MAGA9Q,QAAQ1F,MAAM,kCACd6V,EAAS,uBACX,SACE7D,GAAW,EACb,CAjCA,MAFE6D,EAAS,+BAiEuBT,UAAWC,GAAW7G,SAAA,CAClD2G,EAAA,MAAA,CAAA3G,SAAA,CACE2G,WAAO2C,QAAQ,YAAY1C,UAAWC,GAAY7G,SAAA,CAAA,0BAEhD2G,EAAA,OAAA,CAAMC,UAAWC,GAAY7G,SAAA,CAC1B,IAAG,sBAhCEiO,EAiCwBM,EA5BnC,GAJGlC,KAAK6B,MAAMD,EAAU,IAC5BhT,WACAkT,SAAS,EAAG,SACJF,EAAU,IAAIhT,WAAWkT,SAAS,EAAG,cAgCxCpL,EAACsI,IACCzN,OAAQ,EACRrL,MAAO8b,EACP9E,SAAU+E,EACVhD,UAAU,SAGZvI,EAAA,SAAA,CAAQ0C,KAAK,SAASqB,QAxGVtU,UACpB6U,EAAS,IACTiG,EAAa,IAEb,MAAM9b,MAAEA,GAAUwb,QACR5J,EAAW7J,6BACX6J,EAAW/J,kBAEjB7H,EACF6V,EACE,gFAKJiG,EAAa,wCAyFyC1G,UAAWC,wCAK3D9D,YAAQ0C,KAAK,SAASmB,UAAWC,GAAegD,SAAUlJ,WACvDA,EAAU,eAAiB,sBAG9BoC,YACE0C,KAAK,SACLqB,QAAS,IAAMkB,EAAS,UACxBpB,UAAWC,GAAa7G,SAAA,0BAvDf,IAACiO,48DC9EtB,MAAMQ,GAA4B,KAChC,MAAOC,GAAgBC,IACjB3G,EAAWC,IACXpO,EAAQ6U,EAAa1Z,IAAI,UAExBxD,EAAO6V,GAAY9D,EAAS,KAC5BqL,EAAYC,GAAiBtL,EAAS,IAEvCH,EAAaH,MACb5B,eAAEA,GAAmBzB,KAiE3B,OA/DAkD,EAAU,KACR,IAAIgM,GAAU,EACVC,EAAmC,KACnCC,EAAwD,KAkD5D,MAhDexc,WACb,IAAKqH,EAKH,OAJIiV,GACFzH,EAAS,wCAEXnQ,QAAQ1F,MAAM,8BAIhB,MAAMA,MAAEA,SAAgB4R,EAAWxJ,gBAAgBC,GAEnD,GAAIrI,EAKF,OAJA0F,QAAQ1F,MAAM,+BACVsd,GACFzH,EAAS,iCAQPhG,IAEDyN,IAILC,EAAU,IAAIE,iBAAiB,iBAE/BF,EAAQG,YAAY,CAClBzJ,KAAM,4BAGRoJ,EACE,gFAGFG,EAAkBG,WAAW,KACtBL,GAIL9G,EAAS,MACR,OAELoH,GAEO,KACLN,GAAU,EACVC,GAASM,QAELL,GACFM,aAAaN,KAGhB,CAACnV,EAAOuJ,EAAY4E,EAAU3G,IAG/B0B,EAAA,MAAA,CAAK6D,UAAWC,GAAOmD,UAAShK,SAC9B2G,EAAA,MAAA,CAAKC,UAAWC,GAAOoD,KAAIjK,SAAA,CACzB+C,EAAA,KAAA,CAAI6D,UAAWC,GAAOqD,MAAKlK,SAAA,yBAE3B2G,EAAA,MAAA,CAAKC,UAAWC,GAAO0I,oBAAmBvP,SAAA,EACtC4O,IAAepd,GAASuR,EAAA,MAAA,CAAK6D,UAAWC,GAAO2I,UAEhDZ,GACC7L,EAAA,MAAA,CAAK6D,UAAWC,GAAO4I,YAAWzP,SAChC+C,EAAA,MAAA,CACE2M,QAAQ,YACR9I,UAAWC,GAAO8I,UAClBjE,KAAK,OACLkE,OAAO,eACPC,YAAY,IAAG7P,SAEf+C,EAAA,OAAA,CAAM+M,EAAE,wBAKZlB,IAAepd,GACfuR,EAAA,IAAA,CAAG6D,UAAWC,GAAOkJ,WAAU/P,SAAA,4DAKhC4O,GACC7L,EAAA,IAAA,CAAG6D,UAAWC,GAAOmJ,sDAGtBxe,GAASuR,EAAA,IAAA,CAAG6D,UAAWC,GAAOrV,MAAKwO,SAAGxO,aCvG3Cye,GAA8C,CAClD/e,oBACE,0HACFC,yBACE,4GACFC,sBACE,4GAGE8e,GAA0B,KAC9B,MAAM9V,iBAAEA,GAAqBwF,KACvBoI,EAAWC,KACVyG,GAAgBC,KAChBnd,EAAO6V,GAAY9D,EAAS,IAC7B4M,EAAa3E,GAAO,GA2B1B,OAzBA1I,EAAU,KACR,GAAIqN,EAAW9N,QAAS,OACxB8N,EAAW9N,SAAU,EAErB,MAAM/Q,EAAOod,EAAa1Z,IAAI,QACxBqF,EAAQqU,EAAa1Z,IAAI,SACzBkF,EAAasN,eAAevI,QAAQ8H,IAErCzV,GAAS+I,GAAUH,EAKnBE,EAAiB,CAAEF,aAAY5I,OAAM+I,UAASiN,KAAK,EAAG9V,MAAO4e,MAChE,GAAIA,EAAa,CACf,MAAM9e,EAAOC,EAAkB6e,GAE/B,YADA/I,EAAS/V,EAAO2e,GAAY3e,GAlCd,mDAoChB,CAEAkW,eAAe6I,WAAWtJ,IAC1BiB,EAAS,OAZTX,EAAS,uDAcV,CAACjN,EAAkB4N,EAAU0G,IAG9B/H,EAAA,MAAA,CAAKC,UAAWC,GAAOmD,UAAShK,SAAA,CAC9B+C,EAAA,KAAA,CAAI6D,UAAWC,GAAOqD,MAAKlK,SACxBxO,EAAQ,iBAAmB,0BAE7BA,GACCmV,EAAAoC,EAAA,CAAA/I,SAAA,CACE+C,EAAA,IAAA,CAAA/C,SAAIxO,IACJuR,EAAA,SAAA,CAAQ0C,KAAK,SAASqB,QAAS,IAAMkB,EAAS,UAAShI,SAAA,uyFCpDjE,MAAMsQ,GAA0B,KAC9B,MAAMjP,eAAEA,GAAmBzB,KACrBoI,EAAWC,IACXP,EAAWqF,IACX3J,EAAaH,KAEblB,EAAa2F,EAASrN,OAAO0H,YAE5BwO,EAAUC,GAAejN,EAAS,IAEzCT,EAAU,KACR,MAAM2N,EAAQ5C,YAAY,KACxB2C,EAAYE,GAAMA,EAAI,EAAIA,EAAI,EAAI,IACjC,KAEH,MAAO,IAAM3C,cAAc0C,IAC1B,IAEH,MAWME,EAAqBC,EAAYpe,UACrC,MAAMS,KAAEA,EAAIzB,MAAEA,SAAgB4R,EAAWzJ,iBAEzC,OAAQnI,GAA2B,YAAlByB,GAAMvC,SACtB,CAAC0S,IAmCJ,OAjCAN,EAAU,KACR,MAAMiM,EAAU,IAAIE,iBAAiB,iBAWrC,OATAF,EAAQ8B,UAAYre,MAAMse,IACC,4BAArBA,EAAM7d,MAAMwS,YACJkL,YACFtP,IACN2G,EAAS,OAKR,KACL+G,EAAQM,UAET,CAACsB,EAAoB3I,EAAU3G,IAElCyB,EAAU,KACR,MAAM8K,EAAWC,YAAYrb,UAC3B,UACYme,YACFtP,IACN2G,EAAS,KAEb,CAAE,MAGF,GACC,KAEH,MAAO,IAAM+F,cAAcH,IAC1B,CAAC+C,EAAoBtP,EAAgB2G,IAGtCjF,EAAA,MAAA,CAAK6D,UAAWC,GAAgB7G,SAC9B2G,EAAA,MAAA,CAAKC,UAAWC,aACdF,EAAA,MAAA,CAAKC,UAAWC,GAAkB7G,SAAA,CAChC+C,SAAK6D,UAAWC,KAEhBF,EAAA,MAAA,CACEC,UAAWC,GACX6I,QAAQ,YACRhE,KAAK,OACLkE,OAAO,eACPC,YAAY,MAAK7P,SAAA,CAEjB+C,EAAA,OAAA,CAAM+M,EAAE,kBACR/M,EAAA,OAAA,CAAM+M,EAAE,uBAIZ/M,EAAA,KAAA,CAAI6D,UAAWC,GAAc7G,SAAA,qBAE7B+C,EAAA,IAAA,CAAG6D,UAAWC,GAAc7G,SAAA,0EAI3B+B,GAAcgB,EAAA,MAAA,CAAK6D,UAAWC,YAAoB9E,IAEnDgB,EAAA,IAAA,CAAG6D,UAAWC,GAAiB7G,SAAA,4DAI/B+C,EAAA,IAAA,CAAG6D,UAAWC,GAAiB7G,SAAA,mFAI/B2G,EAAA,MAAA,CAAKC,UAAWC,GAAc7G,SAAA,CAC5B+C,EAAA,SAAA,CACE6D,UAAWC,GACXgD,SAAU0G,EAAW,EACrBzJ,QAxFKtU,UACT+d,EAAW,UAETnN,EAAW3J,mBAEjB+W,EAAY,MAmFWxQ,SAAA,gBAKhBuQ,EAAW,GACV5J,EAAA,MAAA,CAAKC,UAAWC,GAAe7G,SAAA,CAAA,gBAAgBuQ,SAGjDxN,EAAA,SAAA,CAAQ6D,UAAWC,GAAmBC,QAAS,IAAMkB,EAAS,UAAShI,SAAA,mCC9GpE+Q,GAAa,IACxBpK,EAACqK,aACCjO,EAACkO,EAAK,CAACC,KAAMnM,GAAsBoM,QAASpO,EAACgF,GAAK,CAAA,KAClDhF,EAACkO,EAAK,CAACC,KAAMnM,GAA6BoM,QAASpO,EAAC+G,GAAY,CAAA,KAChE/G,EAACkO,EAAK,CAACC,KAAMnM,GAA+BoM,QAASpO,EAAC+J,GAAiB,CAAA,KACvE/J,EAACkO,EAAK,CAACC,KAAMnM,GAA+BoM,QAASpO,EAACqL,SACtDrL,EAACkO,EAAK,CAACC,KAAMnM,GAAgCoM,QAASpO,EAAC0L,SACvD1L,EAACkO,GAAMC,KAAMnM,GAA8BoM,QAASpO,EAACmN,GAAa,CAAA,KAClEnN,EAACkO,EAAK,CAACC,KAAMnM,GAAgCoM,QAASpO,EAACsH,GAAmB,CAAA,KAC1EtH,EAACkO,EAAK,CAACC,KAAMnM,GAA8BoM,QAASpO,EAACuN,GAAa,CAAA,KAClEvN,EAACkO,EAAK,CAACC,KAAK,IAAIC,QAASpO,EAACqO,GAASC,GAAItM,GAAsBtN","x_google_ignoreList":[15]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seamless-auth/react",
3
- "version": "0.8.0",
3
+ "version": "0.10.0",
4
4
  "description": "A drop-in authentication solution for modern React applications.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -102,7 +102,7 @@
102
102
  "typescript-eslint": "^8.46.1"
103
103
  },
104
104
  "dependencies": {
105
- "@seamless-auth/types": "^0.5.0",
105
+ "@seamless-auth/types": "^0.16.0",
106
106
  "@simplewebauthn/browser": "^13.1.0",
107
107
  "eslint-plugin-license-header": "^0.9.0",
108
108
  "libphonenumber-js": "^1.12.7",
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- interface DeviceNameModalProps {
3
- isOpen: boolean;
4
- onCancel: () => void;
5
- onConfirm: (name: string) => void;
6
- }
7
- declare const DeviceNameModal: React.FC<DeviceNameModalProps>;
8
- export default DeviceNameModal;