@stytch/react 20.0.0-next.2 → 20.0.0-next.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/StytchSSRProxy-Bz6LNYdq.js.map +1 -1
  3. package/dist/cjs/adminPortal/index.cjs +1 -1
  4. package/dist/cjs/b2b/index.cjs +14 -13
  5. package/dist/cjs/b2b/index.cjs.map +1 -1
  6. package/dist/cjs/compat.cjs +2 -0
  7. package/dist/cjs/compat.cjs.map +1 -1
  8. package/dist/cjs/{index-Ni_dyEsz.js → index-BIjXBvf_.js} +2 -2
  9. package/dist/cjs/index-BIjXBvf_.js.map +1 -0
  10. package/dist/cjs/index.cjs +508 -518
  11. package/dist/cjs/index.cjs.map +1 -1
  12. package/dist/cjs/{shadcn-B8TEzQMT.js → shadcn-Z4AvHriT.js} +247 -233
  13. package/dist/cjs/shadcn-Z4AvHriT.js.map +1 -0
  14. package/dist/cjs-dev/StytchSSRProxy-d553KgcY.js +438 -0
  15. package/dist/cjs-dev/StytchSSRProxy-d553KgcY.js.map +1 -0
  16. package/dist/cjs-dev/adminPortal/index.cjs +54 -53
  17. package/dist/cjs-dev/adminPortal/index.cjs.map +1 -1
  18. package/dist/cjs-dev/b2b/index.cjs +80 -68
  19. package/dist/cjs-dev/b2b/index.cjs.map +1 -1
  20. package/dist/cjs-dev/b2b/index.headless.cjs +89 -88
  21. package/dist/cjs-dev/b2b/index.headless.cjs.map +1 -1
  22. package/dist/cjs-dev/compat.cjs +15 -14
  23. package/dist/cjs-dev/compat.cjs.map +1 -1
  24. package/dist/cjs-dev/{StytchSSRProxy-CxXsyme4.js → dev-DaCGDI6V.js} +60 -426
  25. package/dist/cjs-dev/dev-DaCGDI6V.js.map +1 -0
  26. package/dist/cjs-dev/{idpHelpers-BVMUYvt1.js → idpHelpers-DOYYSxsX.js} +45 -102
  27. package/dist/cjs-dev/idpHelpers-DOYYSxsX.js.map +1 -0
  28. package/dist/cjs-dev/{index-DdK3Jt4u.js → index-rquGmIlv.js} +4 -4
  29. package/dist/cjs-dev/index-rquGmIlv.js.map +1 -0
  30. package/dist/cjs-dev/index.cjs +738 -727
  31. package/dist/cjs-dev/index.cjs.map +1 -1
  32. package/dist/cjs-dev/index.headless.cjs +70 -69
  33. package/dist/cjs-dev/index.headless.cjs.map +1 -1
  34. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-D70WyvIu.js → passwordManagerDisableAutofillProps-CgiK2M_U.js} +2 -2
  35. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-D70WyvIu.js.map → passwordManagerDisableAutofillProps-CgiK2M_U.js.map} +1 -1
  36. package/dist/cjs-dev/{shadcn-C9ClUju1.js → shadcn-DnNfms7-.js} +257 -242
  37. package/dist/cjs-dev/shadcn-DnNfms7-.js.map +1 -0
  38. package/dist/esm/b2b/StytchB2BContext.mjs +5 -5
  39. package/dist/esm/b2b/StytchB2BContext.mjs.map +1 -1
  40. package/dist/esm/packages/core/src/public/b2b/ui.mjs.map +1 -1
  41. package/dist/esm/packages/web/src/ui/b2b/App.mjs +2 -2
  42. package/dist/esm/packages/web/src/ui/b2b/App.mjs.map +1 -1
  43. package/dist/esm/packages/web/src/ui/b2b/components/Icons.mjs +3 -1
  44. package/dist/esm/packages/web/src/ui/b2b/components/Icons.mjs.map +1 -1
  45. package/dist/esm/packages/web/src/ui/b2c/AppContainer.mjs +1 -1
  46. package/dist/esm/packages/web/src/ui/b2c/AppContainer.mjs.map +1 -1
  47. package/dist/esm/packages/web/src/ui/b2c/IDPContainer.mjs +1 -1
  48. package/dist/esm/packages/web/src/ui/b2c/IDPContainer.mjs.map +1 -1
  49. package/dist/esm/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs +1 -1
  50. package/dist/esm/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs.map +1 -1
  51. package/dist/esm/packages/web/src/ui/b2c/ResetPasswordContainer.mjs +1 -1
  52. package/dist/esm/packages/web/src/ui/b2c/ResetPasswordContainer.mjs.map +1 -1
  53. package/dist/esm/packages/web/src/ui/b2c/screens/Crypto/SetupNewWallet.mjs +12 -11
  54. package/dist/esm/packages/web/src/ui/b2c/screens/Crypto/SetupNewWallet.mjs.map +1 -1
  55. package/dist/esm/packages/web/src/ui/b2c/screens/Crypto/WalletButtons.mjs +12 -14
  56. package/dist/esm/packages/web/src/ui/b2c/screens/Crypto/WalletButtons.mjs.map +1 -1
  57. package/dist/esm/packages/web/src/ui/compat/styleToTheme.mjs +2 -0
  58. package/dist/esm/packages/web/src/ui/compat/styleToTheme.mjs.map +1 -1
  59. package/dist/esm/packages/web/src/ui/components/PresentationConfig.mjs.map +1 -1
  60. package/dist/esm/packages/web/src/ui/components/atoms/Typography.module.css.mjs +2 -2
  61. package/dist/esm/packages/web/src/ui/react/b2b/B2BIdentityProvider.mjs +1 -1
  62. package/dist/esm/packages/web/src/ui/react/b2b/B2BIdentityProvider.mjs.map +1 -1
  63. package/dist/esm/packages/web/src/ui/react/b2b/Stytch.mjs +1 -1
  64. package/dist/esm/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  65. package/dist/esm/packages/web/src/ui/react/b2b/StytchB2BContext.mjs +1 -1
  66. package/dist/esm/packages/web/src/ui/react/b2b/StytchB2BContext.mjs.map +1 -1
  67. package/dist/esm/packages/web/src/ui/react/b2c/IdentityProvider.mjs +1 -1
  68. package/dist/esm/packages/web/src/ui/react/b2c/IdentityProvider.mjs.map +1 -1
  69. package/dist/esm/packages/web/src/ui/react/b2c/StytchContext.mjs +1 -1
  70. package/dist/esm/packages/web/src/ui/react/b2c/StytchContext.mjs.map +1 -1
  71. package/dist/esm/packages/web/src/ui/react/b2c/StytchLogin.mjs +1 -1
  72. package/dist/esm/packages/web/src/ui/react/b2c/StytchLogin.mjs.map +1 -1
  73. package/dist/esm/packages/web/src/ui/react/b2c/StytchPasskeyRegistration.mjs +1 -1
  74. package/dist/esm/packages/web/src/ui/react/b2c/StytchPasskeyRegistration.mjs.map +1 -1
  75. package/dist/esm/packages/web/src/ui/react/b2c/StytchPasswordReset.mjs +1 -1
  76. package/dist/esm/packages/web/src/ui/react/b2c/StytchPasswordReset.mjs.map +1 -1
  77. package/dist/esm/packages/web/src/ui/react/utils/errors.mjs.map +1 -1
  78. package/dist/esm/packages/web/src/utils/crypto.mjs +15 -14
  79. package/dist/esm/packages/web/src/utils/crypto.mjs.map +1 -1
  80. package/dist/esm/packages/web/src/utils/oauthProviderType.mjs +1 -1
  81. package/dist/esm/packages/web/src/utils/oauthProviderType.mjs.map +1 -1
  82. package/dist/esm-dev/b2b/StytchB2BContext.mjs +5 -5
  83. package/dist/esm-dev/b2b/StytchB2BContext.mjs.map +1 -1
  84. package/dist/esm-dev/packages/core/src/public/b2b/ui.mjs.map +1 -1
  85. package/dist/esm-dev/packages/core/src/utils/dev.mjs +7 -1
  86. package/dist/esm-dev/packages/core/src/utils/dev.mjs.map +1 -1
  87. package/dist/esm-dev/packages/web/src/ui/b2b/App.mjs +14 -2
  88. package/dist/esm-dev/packages/web/src/ui/b2b/App.mjs.map +1 -1
  89. package/dist/esm-dev/packages/web/src/ui/b2b/components/Icons.mjs +3 -1
  90. package/dist/esm-dev/packages/web/src/ui/b2b/components/Icons.mjs.map +1 -1
  91. package/dist/esm-dev/packages/web/src/ui/b2c/AppContainer.mjs +8 -1
  92. package/dist/esm-dev/packages/web/src/ui/b2c/AppContainer.mjs.map +1 -1
  93. package/dist/esm-dev/packages/web/src/ui/b2c/IDPContainer.mjs +8 -1
  94. package/dist/esm-dev/packages/web/src/ui/b2c/IDPContainer.mjs.map +1 -1
  95. package/dist/esm-dev/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs +8 -1
  96. package/dist/esm-dev/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs.map +1 -1
  97. package/dist/esm-dev/packages/web/src/ui/b2c/ResetPasswordContainer.mjs +8 -1
  98. package/dist/esm-dev/packages/web/src/ui/b2c/ResetPasswordContainer.mjs.map +1 -1
  99. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Crypto/SetupNewWallet.mjs +12 -11
  100. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Crypto/SetupNewWallet.mjs.map +1 -1
  101. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Crypto/WalletButtons.mjs +12 -14
  102. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Crypto/WalletButtons.mjs.map +1 -1
  103. package/dist/esm-dev/packages/web/src/ui/compat/styleToTheme.mjs +15 -14
  104. package/dist/esm-dev/packages/web/src/ui/compat/styleToTheme.mjs.map +1 -1
  105. package/dist/esm-dev/packages/web/src/ui/components/PresentationConfig.mjs +3 -2
  106. package/dist/esm-dev/packages/web/src/ui/components/PresentationConfig.mjs.map +1 -1
  107. package/dist/esm-dev/packages/web/src/ui/components/atoms/Typography.module.css.mjs +2 -2
  108. package/dist/esm-dev/packages/web/src/ui/react/b2b/B2BIdentityProvider.mjs +1 -1
  109. package/dist/esm-dev/packages/web/src/ui/react/b2b/B2BIdentityProvider.mjs.map +1 -1
  110. package/dist/esm-dev/packages/web/src/ui/react/b2b/Stytch.mjs +1 -1
  111. package/dist/esm-dev/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
  112. package/dist/esm-dev/packages/web/src/ui/react/b2b/StytchB2BContext.mjs +1 -1
  113. package/dist/esm-dev/packages/web/src/ui/react/b2b/StytchB2BContext.mjs.map +1 -1
  114. package/dist/esm-dev/packages/web/src/ui/react/b2c/IdentityProvider.mjs +1 -1
  115. package/dist/esm-dev/packages/web/src/ui/react/b2c/IdentityProvider.mjs.map +1 -1
  116. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchContext.mjs +1 -1
  117. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchContext.mjs.map +1 -1
  118. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchLogin.mjs +1 -1
  119. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchLogin.mjs.map +1 -1
  120. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchPasskeyRegistration.mjs +1 -1
  121. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchPasskeyRegistration.mjs.map +1 -1
  122. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchPasswordReset.mjs +1 -1
  123. package/dist/esm-dev/packages/web/src/ui/react/b2c/StytchPasswordReset.mjs.map +1 -1
  124. package/dist/esm-dev/packages/web/src/ui/react/utils/errors.mjs +8 -4
  125. package/dist/esm-dev/packages/web/src/ui/react/utils/errors.mjs.map +1 -1
  126. package/dist/esm-dev/packages/web/src/utils/crypto.mjs +15 -14
  127. package/dist/esm-dev/packages/web/src/utils/crypto.mjs.map +1 -1
  128. package/dist/esm-dev/packages/web/src/utils/oauthProviderType.mjs +1 -1
  129. package/dist/esm-dev/packages/web/src/utils/oauthProviderType.mjs.map +1 -1
  130. package/dist/types/{PresentationConfig-Bqzf8zr3.d.ts → PresentationConfig-CcNEXkjS.d.ts} +5 -1
  131. package/dist/types/{StytchB2BClient-CsY7ZNKh.d.ts → StytchB2BClient-D16e_lp1.d.ts} +2 -2
  132. package/dist/types/{StytchClient-DZRM_fM4.d.ts → StytchClient-BwQdJzdj.d.ts} +2 -2
  133. package/dist/types/adminPortal/index.d.ts +5 -5
  134. package/dist/types/b2b/index.d.ts +27 -19
  135. package/dist/types/b2b/index.headless.d.ts +5 -5
  136. package/dist/types/compat.d.ts +2 -2
  137. package/dist/types/{createAuthUrlHandler-BZoD2LDF.d.ts → createAuthUrlHandler-R1kNNQD_.d.ts} +2 -2
  138. package/dist/types/{idpHelpers-CD5sSDzA.d.ts → idpHelpers-BQP76WgZ.d.ts} +1 -1
  139. package/dist/types/index.d.ts +36 -16
  140. package/dist/types/index.headless.d.ts +5 -5
  141. package/dist/types/{shadcn-4-5byj93.d.ts → shadcn-B04UXoBD.d.ts} +9 -6
  142. package/dist/types/{ui-DXrQ-gA8.d.ts → ui-B7IvSGQf.d.ts} +1 -1
  143. package/package.json +1 -1
  144. package/dist/cjs/index-Ni_dyEsz.js.map +0 -1
  145. package/dist/cjs/shadcn-B8TEzQMT.js.map +0 -1
  146. package/dist/cjs-dev/StytchSSRProxy-CxXsyme4.js.map +0 -1
  147. package/dist/cjs-dev/idpHelpers-BVMUYvt1.js.map +0 -1
  148. package/dist/cjs-dev/index-DdK3Jt4u.js.map +0 -1
  149. package/dist/cjs-dev/shadcn-C9ClUju1.js.map +0 -1
@@ -1,155 +1,5 @@
1
1
  'use strict';
2
2
 
3
- /**
4
- * The OAuth providers we support in our OAuth product.
5
- * Currently we support `Amazon`, `Apple`, `Bitbucket`, `Discord`, `Facebook`, `Figma`, `Google`, `GitLab`,
6
- * `LinkedIn`, `Microsoft`, `Salesforce`, `Slack`, `Snapchat`, `TikTok`, `Twitch`, `Twitter`, and `Yahoo`.
7
- */ const OAuthProviders = {
8
- Google: 'google',
9
- Microsoft: 'microsoft',
10
- Apple: 'apple',
11
- Github: 'github',
12
- GitLab: 'gitlab',
13
- Facebook: 'facebook',
14
- Discord: 'discord',
15
- Salesforce: 'salesforce',
16
- Slack: 'slack',
17
- Amazon: 'amazon',
18
- Bitbucket: 'bitbucket',
19
- LinkedIn: 'linkedin',
20
- Coinbase: 'coinbase',
21
- Twitch: 'twitch',
22
- Twitter: 'twitter',
23
- TikTok: 'tiktok',
24
- Snapchat: 'snapchat',
25
- Figma: 'figma',
26
- Yahoo: 'yahoo'
27
- };
28
- /**
29
- * The Crypto Wallets we support in our crypto product.
30
- * Currently we support all ethereum and solana wallets.
31
- * We additionally detect and show popular wallets as distinct options.
32
- * The list of poular wallets include `Binance`, `Coinbase`, `Metamask`, and `Phantom`
33
- */ const Wallets = {
34
- Phantom: 'Phantom',
35
- Metamask: 'Metamask',
36
- Coinbase: 'Coinbase',
37
- Binance: 'Binance',
38
- GenericEthereumWallet: 'GenericEthereumWallet',
39
- GenericSolanaWallet: 'GenericSolanaWallet'
40
- };
41
- /**
42
- * Supported behaviors for positioning Google One Tap. The actual behavior
43
- * depends on browser support and Google's One Tap implementation.
44
- */ const OneTapPositions = {
45
- /**
46
- * Display Google One Tap using a native browser prompt if available, or
47
- * embedded in the existing SDK login form otherwise.
48
- * @deprecated This option has been renamed to `floatingOrEmbedded`
49
- */ embedded: 'embedded',
50
- /**
51
- * Display the One Tap prompt using a native browser prompt if available, or
52
- * in the top right corner otherwise. This is the default option.
53
- */ floating: 'floating',
54
- /**
55
- * Display the One Tap prompt embedded in the existing SDK login form if a
56
- * native browser prompt is not available, or not at all otherwise. This
57
- * option is not recommended for new applications.
58
- */ embeddedOnly: 'embeddedOnly',
59
- /**
60
- * Display the One Tap prompt using a native browser prompt if available, or
61
- * embedded in the existing SDK login form otherwise.
62
- */ floatingOrEmbedded: 'floatingOrEmbedded',
63
- /**
64
- * Attempt to display the One Tap prompt embedded in the existing SDK login
65
- * form, even if a native browser prompt is supported. This option is not
66
- * recommended. It disables native browser FedCM support even where it is
67
- * available, and will stop being honored by Google in the future.
68
- */ forceLegacyEmbedded: 'forceLegacyEmbedded'
69
- };
70
- /**
71
- * The methods array allows you to specify the authentication methods that you would like to expose
72
- * to your users. The order of the products that you include here will also be the order in which
73
- * they appear in the login form, with the first product specified appearing at the top of the login
74
- * form. We currently support passcodes on `email`, `sms` and `whatsapp`
75
- */ const OTPMethods = {
76
- SMS: 'sms',
77
- WhatsApp: 'whatsapp',
78
- Email: 'email'
79
- };
80
- var StytchEventType = /*#__PURE__*/ function(StytchEventType) {
81
- StytchEventType["MagicLinkLoginOrCreateEvent"] = "MAGIC_LINK_LOGIN_OR_CREATE";
82
- StytchEventType["OTPsLoginOrCreateEvent"] = "OTP_LOGIN_OR_CREATE";
83
- StytchEventType["OTPsAuthenticate"] = "OTP_AUTHENTICATE";
84
- StytchEventType["CryptoWalletAuthenticateStart"] = "CRYPTO_WALLET_AUTHENTICATE_START";
85
- StytchEventType["CryptoWalletAuthenticate"] = "CRYPTO_WALLET_AUTHENTICATE";
86
- StytchEventType["PasswordCreate"] = "PASSWORD_CREATE";
87
- StytchEventType["PasswordAuthenticate"] = "PASSWORD_AUTHENTICATE";
88
- StytchEventType["PasswordResetByEmailStart"] = "PASSWORD_RESET_BY_EMAIL_START";
89
- StytchEventType["PasswordResetByEmail"] = "PASSWORD_RESET_BY_EMAIL";
90
- StytchEventType["PasskeyRegister"] = "PASSKEY_REGISTER";
91
- StytchEventType["PasskeyAuthenticate"] = "PASSKEY_AUTHENTICATE";
92
- StytchEventType["PasskeySkip"] = "PASSKEY_SKIP";
93
- StytchEventType["PasskeyDone"] = "PASSKEY_DONE";
94
- /**
95
- * The authentication UI flow has completed successfully, including any steps
96
- * that take place after obtaining a valid session (such as saving recovery
97
- * codes).
98
- */ StytchEventType["AuthenticateFlowComplete"] = "AUTHENTICATE_FLOW_COMPLETE";
99
- /**
100
- * An OAuth Authorization flow has been initiated by a Connected Application.
101
- * The end-user may be prompted for consent to continue depending on the application
102
- * that is requesting access.
103
- */ StytchEventType["OAuthAuthorizeFlowStart"] = "OAUTH_AUTHORIZE_FLOW_START";
104
- /**
105
- * The end-user has completed the Authorization flow and is about to be redirected
106
- * back to the Connected Application
107
- */ StytchEventType["OAuthAuthorizeFlowComplete"] = "OAUTH_AUTHORIZE_FLOW_COMPLETE";
108
- /**
109
- * The end-user has denied the Authorization flow and is about to be redirected
110
- * back to the Connected Application with an error message
111
- */ StytchEventType["OAuthAuthorizeFlowConsentDenied"] = "OAUTH_AUTHORIZE_FLOW_CONSENT_DENIED";
112
- // More Events will go here ...
113
- // B2B Events
114
- StytchEventType["B2BMagicLinkEmailLoginOrSignup"] = "B2B_MAGIC_LINK_EMAIL_LOGIN_OR_SIGNUP";
115
- StytchEventType["B2BMagicLinkAuthenticate"] = "B2B_MAGIC_LINK_AUTHENTICATE";
116
- StytchEventType["B2BMagicLinkEmailDiscoverySend"] = "B2B_MAGIC_LINK_EMAIL_DISCOVERY_SEND";
117
- StytchEventType["B2BMagicLinkDiscoveryAuthenticate"] = "B2B_MAGIC_LINK_DISCOVERY_AUTHENTICATE";
118
- StytchEventType["B2BSSOStart"] = "B2B_SSO_START";
119
- StytchEventType["B2BSSOAuthenticate"] = "B2B_SSO_AUTHENTICATE";
120
- StytchEventType["B2BSSODiscoverConnections"] = "B2B_SSO_DISCOVER_CONNECTIONS";
121
- StytchEventType["B2BOAuthAuthenticate"] = "B2B_OAUTH_AUTHENTICATE";
122
- StytchEventType["B2BOAuthDiscoveryAuthenticate"] = "B2B_OAUTH_DISCOVERY_AUTHENTICATE";
123
- StytchEventType["B2BDiscoveryOrganizationsCreate"] = "B2B_DISCOVERY_ORGANIZATIONS_CREATE";
124
- StytchEventType["B2BDiscoveryIntermediateSessionExchange"] = "B2B_DISCOVERY_INTERMEDIATE_SESSION_EXCHANGE";
125
- StytchEventType["B2BPasswordAuthenticate"] = "B2B_PASSWORD_AUTHENTICATE";
126
- StytchEventType["B2BPasswordDiscoveryAuthenticate"] = "B2B_PASSWORD_DISCOVERY_AUTHENTICATE";
127
- StytchEventType["B2BPasswordResetByEmailStart"] = "B2B_PASSWORD_RESET_BY_EMAIL_START";
128
- StytchEventType["B2BPasswordResetByEmail"] = "B2B_PASSWORD_RESET_BY_EMAIL";
129
- StytchEventType["B2BPasswordResetBySession"] = "B2B_PASSWORD_RESET_BY_SESSION";
130
- StytchEventType["B2BSMSOTPSend"] = "B2B_SMS_OTP_SEND";
131
- StytchEventType["B2BSMSOTPAuthenticate"] = "B2B_SMS_OTP_AUTHENTICATE";
132
- StytchEventType["B2BTOTPCreate"] = "B2B_TOTP_CREATE";
133
- StytchEventType["B2BTOTPAuthenticate"] = "B2B_TOTP_AUTHENTICATE";
134
- StytchEventType["B2BRecoveryCodesRecover"] = "B2B_RECOVERY_CODES_RECOVER";
135
- StytchEventType["B2BPasswordDiscoveryResetStart"] = "B2B_PASSWORD_DISCOVERY_RESET_BY_EMAIL_START";
136
- StytchEventType["B2BDiscoveryPasswordReset"] = "B2B_PASSWORD_DISCOVERY_RESET_BY_EMAIL";
137
- StytchEventType["B2BImpersonationAuthenticate"] = "B2B_IMPERSONATION_AUTHENTICATE";
138
- StytchEventType["B2BOTPsEmailAuthenticate"] = "B2B_OTPS_EMAIL_AUTHENTICATE";
139
- StytchEventType["B2BOTPsEmailDiscoveryAuthenticate"] = "B2B_OTPS_EMAIL_DISCOVERY_AUTHENTICATE";
140
- StytchEventType["B2BOTPsEmailDiscoverySend"] = "B2B_OTPS_EMAIL_DISCOVERY_SEND";
141
- StytchEventType["B2BOTPsEmailLoginOrSignup"] = "B2B_OTPS_EMAIL_LOGIN_OR_SIGNUP";
142
- StytchEventType["B2BOrganizationsGetBySlug"] = "B2B_ORGANIZATIONS_GET_BY_SLUG";
143
- return StytchEventType;
144
- }({});
145
- var RNUIProducts = /*#__PURE__*/ function(RNUIProducts) {
146
- RNUIProducts[RNUIProducts["emailMagicLinks"] = 0] = "emailMagicLinks";
147
- RNUIProducts[RNUIProducts["oauth"] = 1] = "oauth";
148
- RNUIProducts[RNUIProducts["otp"] = 2] = "otp";
149
- RNUIProducts[RNUIProducts["passwords"] = 3] = "passwords";
150
- return RNUIProducts;
151
- }({});
152
-
153
3
  /* eslint-disable @typescript-eslint/no-explicit-any */ /**
154
4
  * An Error class thrown when the SDK is unable to reach the Stytch servers,
155
5
  * or when the Stytch servers return a value the SDK cannot understand.
@@ -654,266 +504,75 @@ function errorToStytchError(error) {
654
504
  }
655
505
 
656
506
  /**
657
- * The authentication methods we support through our UI.
658
- * Currently we support `emailMagicLinks`, `emailOtp`, `sso`, `passwords`, and `oauth`.
659
- */ const AuthFlowType = {
660
- Discovery: 'Discovery',
661
- Organization: 'Organization',
662
- PasswordReset: 'PasswordReset'
663
- };
664
- const RedirectURLType = {
665
- ResetPassword: 'reset_password'
666
- };
667
- /**
668
- * The OAuth providers we support in our B2B OAuth product.
669
- */ const B2BOAuthProviders = {
670
- Google: 'google',
671
- Microsoft: 'microsoft',
672
- HubSpot: 'hubspot',
673
- Slack: 'slack',
674
- GitHub: 'github'
675
- };
676
- const B2BMFAProducts = {
677
- smsOtp: 'smsOtp',
678
- totp: 'totp'
679
- };
680
-
681
- const createDeepEqual = ({ KEYS_TO_EXCLUDE = [] } = {})=>{
682
- // If comparing functions, this may need some work. Not sure the
683
- // best path for this: compare instance (what it currently does),
684
- // stringify and compare, etc.
685
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
686
- const deepEqual = (a, b)=>{
687
- // Ensures type is the same
688
- if (typeof a !== typeof b) return false;
689
- // arrays, null, and objects all have type 'object'
690
- if (a === null || b === null) return a === b;
691
- if (typeof a === 'object') {
692
- if (Object.keys(a).length !== Object.keys(b).length || Object.keys(a).some((k)=>!(k in b))) return false;
693
- return Object.entries(a).filter(([k])=>!KEYS_TO_EXCLUDE.includes(k)).every(([k, v])=>deepEqual(v, b[k]));
694
- }
695
- // boolean, string, number, undefined
696
- return a === b;
697
- };
698
- return deepEqual;
699
- };
700
-
701
- // You can't actually validate email just from regex. RFC 5322 is pretty complex and there are some *wild*
702
- // rules that we would never really expect to handle, but are technically valid like:
703
- // 1. Emails can contain comments -> cursed(comment)@example.com
704
- // 2. Emails can contain symbols -> cursed{email}@example.com != cursedemail@example.com
705
- // 3. Dots are allowed, but not consecutively -> ab.cd@example.com is okay, but not ab..cd@example.com
706
- // 4. ... unless quoted -> "ab..cd"@example.com is okay
707
- // because yes, emails can also contain quotes
708
- // but then they *can't* contain comments
709
- // 5. Emails can also consist of spaces and tabs if you use quoting
710
- //
711
- // TL;DR: it's really complicated. I once heard a joke that the only real way to validate an email is to check
712
- // for the presence of an @ symbol and then see if you can send an email without it bouncing. Anyway, the below
713
- // regex *attempts* to make some limitations on the regex to help end-users while not being overly constrained.
714
- // We relaxed it as part of https://linear.app/stytch/issue/OBACK-583/email-pattern-bug-in-fe-sdk if you want some
715
- // historical context here.
716
- const EMAIL_REGEX = /^[a-zA-Z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
717
- const convertMagicLinkOptions = (options = {})=>({
718
- signup_magic_link_url: options.signupRedirectURL,
719
- signup_expiration_minutes: options.signupExpirationMinutes,
720
- login_magic_link_url: options.loginRedirectURL,
721
- login_expiration_minutes: options.loginExpirationMinutes,
722
- login_template_id: options.loginTemplateId,
723
- signup_template_id: options.signupTemplateId,
724
- locale: options.locale
725
- });
726
- const convertPasswordResetOptions = (email, options = {})=>({
727
- email: email,
728
- login_redirect_url: options.loginRedirectURL,
729
- login_expiration_minutes: options.loginExpirationMinutes,
730
- reset_password_redirect_url: options.resetPasswordRedirectURL,
731
- reset_password_expiration_minutes: options.resetPasswordExpirationMinutes,
732
- reset_password_template_id: options.resetPasswordTemplateId,
733
- locale: options.locale
734
- });
735
- const debounce = (func, waitFor = 500)=>{
736
- let timeout;
737
- return (...args)=>{
738
- clearTimeout(timeout);
739
- timeout = window.setTimeout(()=>func(...args), waitFor);
740
- };
741
- };
742
- // Borrowed from Create React App's service worker registration logic
743
- const isLocalhost = ()=>Boolean(window.location.hostname === 'localhost' || // [::1] is the IPv6 localhost address.
744
- window.location.hostname === '[::1]' || // 127.0.0.1/8 is considered localhost for IPv4.
745
- window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));
746
- const hasMultipleCookies = (cookieName)=>{
747
- const cookiePairs = document.cookie ? document.cookie.split('; ') : [];
748
- const matchedCookies = cookiePairs.filter((pair)=>{
749
- const [name] = pair.split('=');
750
- return cookieName === name;
751
- });
752
- return matchedCookies.length > 1;
753
- };
754
- const noop = ()=>{
755
- // Noop
756
- };
757
-
758
- const PERSISTENT_STORAGE_KEY_PREFIX = 'stytch_sdk_state_';
759
- const getPersistentStorageKey = (publicToken, key)=>{
760
- return `${PERSISTENT_STORAGE_KEY_PREFIX}${publicToken}${key ? `::${key}` : ''}`;
761
- };
762
- function makeSafeStorage(storage) {
763
- if (storage == null) {
764
- return {
765
- getItem () {
766
- return null;
767
- },
768
- removeItem () {
769
- // Noop
770
- },
771
- setItem () {
772
- // Noop
773
- }
774
- };
775
- }
776
- return {
777
- getItem (publicKey, key) {
778
- const persistentStorageKey = getPersistentStorageKey(publicKey, key);
779
- try {
780
- return storage.getItem(persistentStorageKey);
781
- } catch {
782
- // Swallow error
783
- return null;
784
- }
785
- },
786
- setItem (publicKey, key, value) {
787
- const persistentStorageKey = getPersistentStorageKey(publicKey, key);
788
- try {
789
- if (value) storage.setItem(persistentStorageKey, value);
790
- } catch {
791
- // Swallow error
792
- }
793
- },
794
- removeItem (publicKey, key) {
795
- const persistentStorageKey = getPersistentStorageKey(publicKey, key);
796
- try {
797
- storage.removeItem(persistentStorageKey);
798
- } catch {
799
- // Swallow error
800
- }
801
- }
802
- };
803
- }
804
- const safeLocalStorage = makeSafeStorage(globalThis.localStorage);
805
- const safeSessionStorage = makeSafeStorage(globalThis.sessionStorage);
806
- function getKeyBoundStorage(storage, publicToken) {
807
- return {
808
- getItem (key) {
809
- return storage.getItem(publicToken, key);
810
- },
811
- setItem (key, value) {
812
- storage.setItem(publicToken, key, value);
813
- },
814
- removeItem (key) {
815
- storage.removeItem(publicToken, key);
507
+ * This function and its parameter is stripped in production builds using rollup plugin.
508
+ * NOTE: Be careful when wrapping render function return values. React before v18 do not allow undefined
509
+ * to be returned, so wrapping the entire return value will crash those runtimes.
510
+ */ const DEV = (input)=>input;
511
+ /**
512
+ * This function is stripped in production builds using rollup plugin. Useful for adding
513
+ * logging or validation in dev only
514
+ */ function RUN_IN_DEV(callback) {
515
+ callback();
516
+ }
517
+ const validateInDev = (methodName, obj, rules)=>{
518
+ const errors = [];
519
+ for (const [key, rule] of Object.entries(rules)){
520
+ if (rule == null) continue;
521
+ const val = obj[key];
522
+ if (rule.startsWith('optional') && val == null) continue;
523
+ switch(rule){
524
+ case 'object':
525
+ case 'optionalObject':
526
+ {
527
+ const isObject = typeof val === 'object' && !Array.isArray(val) && val !== null;
528
+ if (!isObject) {
529
+ errors.push(new StytchSDKUsageError(methodName, `${key} must be an object.`));
530
+ }
531
+ break;
532
+ }
533
+ case 'string':
534
+ case 'optionalString':
535
+ if (typeof val !== 'string') {
536
+ errors.push(new StytchSDKUsageError(methodName, `${key} must be a string.`));
537
+ }
538
+ break;
539
+ case 'number':
540
+ case 'optionalNumber':
541
+ if (typeof val !== 'number') {
542
+ errors.push(new StytchSDKUsageError(methodName, `${key} must be a number.`));
543
+ }
544
+ break;
545
+ case 'stringArray':
546
+ case 'optionalStringArray':
547
+ if (!Array.isArray(val) || !val.every((str)=>typeof str === 'string')) {
548
+ errors.push(new StytchSDKUsageError(methodName, `${key} must be an array of strings.`));
549
+ }
550
+ break;
551
+ case 'boolean':
552
+ case 'optionalBoolean':
553
+ if (typeof val !== 'boolean') {
554
+ errors.push(new StytchSDKUsageError(methodName, `${key} must be a boolean.`));
555
+ }
556
+ break;
816
557
  }
817
- };
818
- }
819
-
820
- const internalSymB2B = Symbol.for('stytch__internal_b2b');
821
- const internalSymB2C = Symbol.for('stytch__internal_b2c');
822
- const writeB2BInternals = (obj, internals)=>{
823
- Object.assign(obj, {
824
- [internalSymB2B]: internals
825
- });
826
- };
827
- const readB2BInternals = (obj)=>{
828
- const casted = obj;
829
- if (!casted[internalSymB2B]) {
830
- throw Error('Internals not found!');
831
- }
832
- return casted[internalSymB2B];
833
- };
834
- const writeB2CInternals = (obj, internals)=>{
835
- Object.assign(obj, {
836
- [internalSymB2C]: internals
837
- });
838
- };
839
- const readB2CInternals = (obj)=>{
840
- const casted = obj;
841
- if (!casted[internalSymB2C]) {
842
- throw Error('Internals not found!');
843
558
  }
844
- return casted[internalSymB2C];
845
- };
846
-
847
- // The strings in this file are only for developers
848
- /* eslint-disable lingui/no-unlocalized-strings */ function serverRenderError(name) {
849
- if (typeof window === 'undefined') {
850
- throw new Error(`<${name} /> cannot be rendered on the server. If you are using Next.js, use the @stytch/nextjs package or 'use client' directives`);
851
- }
852
- }
853
- const noProviderError = (item, provider = 'StytchProvider')=>`${item} can only be used inside <${provider}>.`;
854
- const providerMustBeUniqueError = 'You cannot render a <StytchProvider> inside another <StytchProvider>.';
855
- const cannotInvokeMethodOnServerError = (path)=>`[Stytch] Invalid server-side function call to ${path}.
856
- The Stytch JavaScript SDK is intended to only be used on the client side.
857
- Make sure to wrap your API calls in a hook to ensure they are executed on the client.
858
-
859
- \`\`\`
860
- const myComponent = () => {
861
- const stytch = useStytch();
862
- // This will error out on the server.
863
- stytch.magicLinks.authenticate(...);
864
- useEffect(() => {
865
- // This will work well
866
- stytch.magicLinks.authenticate(...);
867
- }, []);
868
- }
869
- \`\`\`
870
-
871
- If you want to make API calls from server environments, please use the Stytch Node Library
872
- https://www.npmjs.com/package/stytch.`;
873
-
874
- const SSRStubKey = Symbol('__stytch_SSRStubKey');
875
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
876
- const isStytchSSRProxy = (proxy)=>{
877
- return !!proxy[SSRStubKey];
878
- };
879
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
880
- const createProxy = (path)=>{
881
- // eslint-disable-next-line @typescript-eslint/no-empty-function
882
- const noop = ()=>{};
883
- return new Proxy(noop, {
884
- get (target, p) {
885
- if (p === SSRStubKey) {
886
- return true;
887
- }
888
- return createProxy(path + '.' + String(p));
889
- },
890
- apply () {
891
- throw new Error(cannotInvokeMethodOnServerError(path));
559
+ if (errors.length > 0) {
560
+ if (errors.length === 1) {
561
+ throw errors[0];
562
+ } else {
563
+ throw new AggregateError(errors);
892
564
  }
893
- });
565
+ }
894
566
  };
895
- // Exported for testing
896
- const createStytchSSRProxy = ()=>createProxy('stytch');
897
- function ssrSafeClientFactory(ClientConstructor) {
898
- return (...args)=>{
899
- if (typeof window === 'undefined') {
900
- return createStytchSSRProxy();
901
- }
902
- return new ClientConstructor(...args);
903
- };
904
- }
905
567
 
906
- exports.AuthFlowType = AuthFlowType;
907
- exports.B2BMFAProducts = B2BMFAProducts;
908
- exports.B2BOAuthProviders = B2BOAuthProviders;
909
568
  exports.BiometricRegistrationIdIsNullOrBlank = BiometricRegistrationIdIsNullOrBlank;
910
569
  exports.BiometricsAlreadyEnrolledError = BiometricsAlreadyEnrolledError;
911
570
  exports.BiometricsFailedError = BiometricsFailedError;
912
571
  exports.BiometricsUnavailableError = BiometricsUnavailableError;
913
572
  exports.ChallengeSigningFailedError = ChallengeSigningFailedError;
573
+ exports.DEV = DEV;
914
574
  exports.DFPNotConfigured = DFPNotConfigured;
915
575
  exports.DeviceCredentialsNotAllowedError = DeviceCredentialsNotAllowedError;
916
- exports.EMAIL_REGEX = EMAIL_REGEX;
917
576
  exports.FailedCodeChallengeError = FailedCodeChallengeError;
918
577
  exports.FailedToDecryptDataError = FailedToDecryptDataError;
919
578
  exports.IDPOAuthFlowMissingParamError = IDPOAuthFlowMissingParamError;
@@ -937,15 +596,11 @@ exports.NoBiometricsEnrolledError = NoBiometricsEnrolledError;
937
596
  exports.NoBiometricsRegistrationError = NoBiometricsRegistrationError;
938
597
  exports.NoCredentialsPresentError = NoCredentialsPresentError;
939
598
  exports.NoCurrentSessionError = NoCurrentSessionError;
940
- exports.OAuthProviders = OAuthProviders;
941
- exports.OTPMethods = OTPMethods;
942
- exports.OneTapPositions = OneTapPositions;
943
599
  exports.PasskeysInvalidEncoding = PasskeysInvalidEncoding;
944
600
  exports.PasskeysMisconfigured = PasskeysMisconfigured;
945
601
  exports.PasskeysUnsupportedError = PasskeysUnsupportedError;
946
- exports.RNUIProducts = RNUIProducts;
602
+ exports.RUN_IN_DEV = RUN_IN_DEV;
947
603
  exports.RandomNumberGenerationFailed = RandomNumberGenerationFailed;
948
- exports.RedirectURLType = RedirectURLType;
949
604
  exports.SDKAPIUnreachableError = SDKAPIUnreachableError;
950
605
  exports.SDKNotConfiguredError = SDKNotConfiguredError;
951
606
  exports.SignInWithAppleMisconfigured = SignInWithAppleMisconfigured;
@@ -953,7 +608,6 @@ exports.StytchAPIError = StytchAPIError;
953
608
  exports.StytchAPISchemaError = StytchAPISchemaError;
954
609
  exports.StytchAPIUnreachableError = StytchAPIUnreachableError;
955
610
  exports.StytchError = StytchError;
956
- exports.StytchEventType = StytchEventType;
957
611
  exports.StytchSDKAPIError = StytchSDKAPIError;
958
612
  exports.StytchSDKError = StytchSDKError;
959
613
  exports.StytchSDKSchemaError = StytchSDKSchemaError;
@@ -961,26 +615,6 @@ exports.StytchSDKUsageError = StytchSDKUsageError;
961
615
  exports.UNRECOVERABLE_ERROR_TYPES = UNRECOVERABLE_ERROR_TYPES;
962
616
  exports.UserCancellationError = UserCancellationError;
963
617
  exports.UserLockedOutError = UserLockedOutError;
964
- exports.Wallets = Wallets;
965
- exports.convertMagicLinkOptions = convertMagicLinkOptions;
966
- exports.convertPasswordResetOptions = convertPasswordResetOptions;
967
- exports.createDeepEqual = createDeepEqual;
968
- exports.debounce = debounce;
969
618
  exports.errorToStytchError = errorToStytchError;
970
- exports.getKeyBoundStorage = getKeyBoundStorage;
971
- exports.getPersistentStorageKey = getPersistentStorageKey;
972
- exports.hasMultipleCookies = hasMultipleCookies;
973
- exports.isLocalhost = isLocalhost;
974
- exports.isStytchSSRProxy = isStytchSSRProxy;
975
- exports.noProviderError = noProviderError;
976
- exports.noop = noop;
977
- exports.providerMustBeUniqueError = providerMustBeUniqueError;
978
- exports.readB2BInternals = readB2BInternals;
979
- exports.readB2CInternals = readB2CInternals;
980
- exports.safeLocalStorage = safeLocalStorage;
981
- exports.safeSessionStorage = safeSessionStorage;
982
- exports.serverRenderError = serverRenderError;
983
- exports.ssrSafeClientFactory = ssrSafeClientFactory;
984
- exports.writeB2BInternals = writeB2BInternals;
985
- exports.writeB2CInternals = writeB2CInternals;
986
- //# sourceMappingURL=StytchSSRProxy-CxXsyme4.js.map
619
+ exports.validateInDev = validateInDev;
620
+ //# sourceMappingURL=dev-DaCGDI6V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-DaCGDI6V.js","sources":["../../../core/src/public/SDKErrors.ts","../../../core/src/utils/dev.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { StytchAPIErrorType } from './StytchAPIErrorType';\n\n/**\n * An Error class thrown when the SDK is unable to reach the Stytch servers,\n * or when the Stytch servers return a value the SDK cannot understand.\n * Usually - it means that you're offline!\n */\nexport class SDKAPIUnreachableError extends Error {\n details: string;\n\n constructor(message: string, details: string) {\n super(message + '\\n' + details);\n this.message = message + '\\n' + details;\n this.name = 'SDKAPIUnreachableError';\n this.details = details;\n Object.setPrototypeOf(this, SDKAPIUnreachableError.prototype);\n }\n}\n\n/**\n * An Error class thrown when the provided input fails client-side validation -\n * for example if a field that was expected to be a number is instead a string.\n */\nexport class StytchSDKUsageError extends Error {\n constructor(methodName: string, message: string) {\n super();\n this.name = 'StytchSDKUsageError';\n this.message = `Invalid call to ${methodName}\\n` + message;\n }\n}\n\n// Example invalid schema error\n// {\n// body: [\n// {\n// keyword: 'type',\n// dataPath: '.session_duration_minutes',\n// schemaPath: '#/properties/session_duration_minutes/type',\n// params: { type: 'number' },\n// message: 'should be number',\n// },\n// ],\n// };\n// Taken from ajv/lib/ajv.d.ts\ninterface ErrorObject {\n keyword: string;\n dataPath: string;\n schemaPath: string;\n message?: string;\n}\n\n/**\n * An Error class thrown when the provided input does not adhere to the Stytch API schema -\n * for example if a field that was expected to be a number is instead a string.\n */\nexport class StytchSDKSchemaError extends Error {\n constructor(schemaError: { body?: ErrorObject[] }) {\n super();\n this.name = 'StytchSDKSchemaError';\n\n const messages = schemaError.body?.map((err) => `${err.dataPath}: ${err.message}`).join('\\n');\n\n this.message = `[400] Request does not match expected schema\\n${messages}`;\n }\n}\n\ninterface APIError {\n status_code: number;\n request_id?: string;\n error_type: StytchAPIErrorType;\n error_message: string;\n error_url: string;\n error_details?: object;\n}\n\n/**\n * An Error class wrapping a well-formed JSON error from the Stytch API.\n * The Stytch error should match one listed at {@link https://stytch.com/docs/api/errors}\n */\nexport class StytchSDKAPIError extends Error {\n error_type: StytchAPIErrorType;\n error_message: string;\n error_url: string;\n request_id?: string;\n status_code: number;\n error_details?: object;\n\n constructor(details: APIError) {\n super();\n this.name = 'StytchSDKAPIError';\n\n const { status_code, error_type, error_message, error_url, request_id, error_details } = details;\n this.error_type = error_type;\n this.error_message = error_message;\n this.error_url = error_url;\n this.request_id = request_id;\n this.status_code = status_code;\n this.error_details = error_details;\n\n this.message =\n `[${status_code}] ${error_type}\\n` +\n `${error_message}\\n` +\n `See ${error_url} for more information.\\n` +\n // Web-Backend doesn't have request IDs yet, so if a request fails there it won't have one.\n // We should figure out how returning tracing info should work\n (request_id ? `request_id: ${request_id}\\n` : '') +\n (this.error_details ? `Details: \\n` + JSON.stringify(this.error_details) + '\\n' : '');\n }\n}\n\n/**\n * If the SDK throws an error with an error type included in this array, the local session and\n * user state will be cleared locally.\n */\nexport const UNRECOVERABLE_ERROR_TYPES: StytchAPIErrorType[] = [\n 'unauthorized_credentials',\n 'user_unauthenticated',\n 'invalid_secret_authentication',\n 'session_not_found',\n];\n\n/**\n * An Error class representing an error within Stytch.\n */\nexport class StytchError extends Error {\n constructor(name: string, message: string) {\n super(message);\n this.name = name;\n }\n}\n\n/**\n * An Error class thrown when the SDK is unable to reach the Stytch servers,\n * or when the Stytch servers return a value the SDK cannot understand.\n * Usually - it means that you're offline!\n */\nexport class StytchAPIUnreachableError extends StytchError {\n constructor(details: string) {\n super('StytchAPIUnreachableError', details);\n Object.setPrototypeOf(this, StytchAPIUnreachableError.prototype);\n }\n}\n\n/**\n * An Error class thrown when the provided input does not adhere to the Stytch API schema -\n * for example if a field that was expected to be a number is instead a string.\n */\nexport class StytchAPISchemaError extends StytchError {\n constructor(schemaError: { body?: ErrorObject[] }) {\n const messages = schemaError.body?.map((err) => `${err.dataPath}: ${err.message}`).join('\\n');\n super('StytchAPISchemaError', `Request does not match expected schema\\n${messages}`);\n }\n}\n\n/**\n * An Error class wrapping a well-formed JSON error from the Stytch API.\n * The Stytch error should match one listed at {@link https://stytch.com/docs/api/errors}\n */\nexport class StytchAPIError extends StytchError {\n error_type: string;\n error_message: string;\n error_url: string;\n request_id?: string;\n status_code: number;\n error_details?: object;\n\n constructor(details: APIError) {\n const { status_code, error_type, error_message, error_url, request_id, error_details } = details;\n super(\n 'StytchAPIError',\n `[${status_code}] ${error_type}\\n` +\n `${error_message}\\n` +\n `See ${error_url} for more information.\\n` +\n // Web-Backend doesn't have request IDs yet, so if a request fails there it won't have one.\n // We should figure out how returning tracing info should work\n (request_id ? `request_id: ${request_id}\\n` : '') +\n (error_details ? `Details: \\n` + JSON.stringify(error_details) + '\\n' : ''),\n );\n this.error_type = error_type;\n this.error_message = error_message;\n this.error_url = error_url;\n this.request_id = request_id;\n this.status_code = status_code;\n this.error_details = error_details;\n }\n\n static from(err: unknown): StytchAPIError {\n if (err instanceof StytchAPIError) {\n return err;\n }\n if (err && typeof err === 'object') {\n const maybe = err as Partial<APIError>;\n if (\n typeof maybe.status_code === 'number' &&\n typeof maybe.error_type === 'string' &&\n typeof maybe.error_message === 'string' &&\n typeof maybe.error_url === 'string'\n ) {\n return new StytchAPIError({\n status_code: maybe.status_code,\n error_type: maybe.error_type,\n error_message: maybe.error_message,\n error_url: maybe.error_url,\n request_id: typeof maybe.request_id === 'string' ? maybe.request_id : undefined,\n error_details: typeof maybe.error_details === 'object' ? maybe.error_details : undefined,\n });\n }\n }\n const message = err instanceof Error ? err.message : 'Unknown error: ' + String(err);\n return new StytchAPIError({\n status_code: 400,\n error_type: 'unknown_error',\n error_message: message,\n error_url: '',\n request_id: undefined,\n error_details: undefined,\n });\n }\n}\n\nexport type StytchSDKErrorOptions = {\n url?: string;\n};\n\n/**\n * An Error class used in the Stytch SDK.\n */\nexport class StytchSDKError extends StytchError {\n options?: StytchSDKErrorOptions;\n\n constructor(name: string, description: string, options?: StytchSDKErrorOptions) {\n super(name, description);\n this.options = options;\n }\n}\n\nexport type StytchSDKUIError = {\n message: string;\n};\n\n/**\n * Thrown when you attempt to perform an action that requires a session, but no local session exists\n */\nexport class NoCurrentSessionError extends StytchSDKError {\n constructor() {\n super(\n 'NoCurrentSessionError',\n 'There is no session currently available. Make sure the user is authenticated with a valid session.',\n );\n }\n}\n\n/**\n * Thrown when an unrecognized error is thrown\n */\nexport class InternalError extends StytchSDKError {\n nativeStack?: unknown;\n\n constructor(error: any) {\n super(\n error.name ? error.name : 'Internal Error',\n error.message ? error.message : 'An internal error has occurred. Please contact Stytch if this occurs.',\n );\n this.nativeStack = error.nativeStackAndroid || error.nativeStackIOS;\n }\n}\n\n/**\n * Thrown when no biometric registration exists\n */\nexport class NoBiometricsRegistrationError extends StytchSDKError {\n constructor() {\n super(\n 'NoBiometricsRegistrationError',\n 'There is no biometric registration available. Authenticate with another method and add a new biometric registration first.',\n );\n }\n}\n\n/**\n * Thrown when biometrics are unavailable on the device\n */\nexport class BiometricsUnavailableError extends StytchSDKError {\n constructor() {\n super('BiometricsUnavailableError', 'Biometrics is not available on the device.');\n }\n}\n\n/**\n * Thrown when the biometrics enrollment has changed, and the underlying key is no longer usable\n */\nexport class KeyInvalidatedError extends StytchSDKError {\n constructor() {\n super('KeyInvalidatedError', 'The biometrics enrollment on the device has changed.');\n }\n}\n\n/**\n * Thrown when the Keystore is determined to be unavailable\n */\nexport class KeystoreUnavailableError extends StytchSDKError {\n constructor() {\n super(\n 'KeystoreUnavailableError',\n 'The Android keystore is unavailable on the device. Consider setting allowFallbackToCleartext to true.',\n );\n }\n}\n\n/**\n * Thrown when there is no biometric factor enrolled on device\n */\nexport class NoBiometricsEnrolledError extends StytchSDKError {\n constructor() {\n super(\n 'NoBiometricsEnrolledError',\n 'There is no biometric factor enrolled on the device. Add a biometric factor in the device settings.',\n );\n }\n}\n\n/**\n * Thrown when there is no biometric factor enrolled on device\n */\nexport class BiometricsAlreadyEnrolledError extends StytchSDKError {\n constructor() {\n super(\n 'BiometricsAlreadyEnrolledError',\n 'There is already a biometric factor enrolled on this device. Fully authenticate with all factors and remove the existing registration before attempting to register again.',\n );\n }\n}\n\n/**\n * Thrown when the user has cancelled the prompt\n */\nexport class UserCancellationError extends StytchSDKError {\n constructor() {\n super('UserCancellationError', 'The user canceled the prompt. Ask the user to try again.');\n }\n}\n\n/**\n * Thrown when the user has been locked out of biometrics\n */\nexport class UserLockedOutError extends StytchSDKError {\n constructor() {\n super(\n 'UserLockedOutError',\n 'The user has been locked out due to too many failed attempts. Ask the user to try again later.',\n );\n }\n}\n\n/**\n * Thrown when biometrics register/authenticate calls are made with mismatched `allowDeviceCredentials` parameter\n */\nexport class DeviceCredentialsNotAllowedError extends StytchSDKError {\n constructor() {\n super(\n 'DeviceCredentialsNotAllowedError',\n 'The device credentials allowment is mismatched. Change the allowDeviceCredentials parameter to be the same in both the register and authenticate methods.',\n );\n }\n}\n\n/**\n * Thrown when no Google client ID is found for the project\n */\nexport class MissingGoogleClientIDError extends StytchSDKError {\n constructor() {\n super('MissingGoogleClientIDError', 'No Google client ID was found in the project.');\n }\n}\n\n/**\n * Thrown when there was an error generating or retrieving a PKCE keypair\n */\nexport class MissingPKCEError extends StytchSDKError {\n constructor() {\n super('MissingPKCEError', 'Make sure this flow is completed on the same device on which it was started.');\n }\n}\n\n/**\n * Thrown when a native OAuth flow is missing the id_token\n */\nexport class MissingAuthorizationCredentialIDTokenError extends StytchSDKError {\n constructor() {\n super('MissingAuthorizationCredentialIDTokenError', 'The authorization credential is missing an ID token.');\n }\n}\n\n/**\n * Thrown when a native OAuth flow returns an invalid credential\n */\nexport class InvalidAuthorizationCredentialError extends StytchSDKError {\n constructor() {\n super(\n 'InvalidAuthorizationCredentialError',\n 'The authorization credential is invalid. Verify that OAuth is set up correctly in the developer console, and call the start flow method.',\n );\n }\n}\n\n/**\n * Thrown when a Google OneTap flow is not completed successfully\n */\nexport class NoCredentialsPresentError extends StytchSDKError {\n constructor() {\n super('NoCredentialsPresentError', 'The user did not provide credentials for a Google OneTap attempt');\n }\n}\n\n/**\n * Thrown when a public key was not found\n */\nexport class MissingPublicKeyError extends StytchSDKError {\n constructor() {\n super('MissingPublicKeyError', 'Failed to retrieve the public key. Add a new biometric registration.');\n }\n}\n\n/**\n * Thrown when the challenge string failed to be signed\n */\nexport class ChallengeSigningFailedError extends StytchSDKError {\n constructor() {\n super('ChallengeSigningFailedError', 'Failed to sign the challenge with the key.');\n }\n}\n\n/**\n * Thrown when the SDK has not been configured\n */\nexport class SDKNotConfiguredError extends StytchSDKError {\n constructor() {\n super(\n 'SDKNotConfiguredError',\n 'Stytch client is not confiured. You must call the configure method before using the SDK',\n );\n }\n}\n\n/**\n * Thrown when the code challenge failed to be generated\n */\nexport class FailedCodeChallengeError extends StytchSDKError {\n constructor() {\n super('FailedCodeChallengeError', 'Failed to create a code challenge');\n }\n}\n\n/**\n * Thrown when Passkeys are unsupported on a device\n */\nexport class PasskeysUnsupportedError extends StytchSDKError {\n constructor() {\n super('PasskeysUnsupportedError', 'Passkeys are not supported on this device');\n }\n}\n\n/**\n * Thrown when user data failed to be decrypted\n */\nexport class FailedToDecryptDataError extends StytchSDKError {\n constructor() {\n super('FailedToDecryptDataError', 'Failed to decrypt user data');\n }\n}\n\n/**\n * Thrown when Biometrics failed\n */\nexport class BiometricsFailedError extends StytchSDKError {\n constructor() {\n super('BiometricsFailedError', 'Biometric authentication failed');\n }\n}\n\n/**\n * Thrown when a start URL was invalid\n */\nexport class InvalidStartUrlError extends StytchSDKError {\n constructor() {\n super('InvalidStartUrlError', 'The start URL was invalid or improperly formatted.');\n }\n}\n\n/**\n * Thrown when a redirect url was invalid\n */\nexport class InvalidRedirectSchemeError extends StytchSDKError {\n constructor() {\n super(\n 'InvalidRedirectSchemeError',\n 'The scheme from the given redirect urls was invalid. Possible reasons include: nil scheme, non-custom scheme (using http or https), or differing schemes for login/signup urls.',\n );\n }\n}\n\n/**\n * Thrown when the underlying web authentication service failed to return a URL.\n */\nexport class MissingUrlError extends StytchSDKError {\n constructor() {\n super('MissingUrlError', 'The underlying web authentication service failed to return a URL.');\n }\n}\n\n/**\n * Thrown when the public key credential type was not of the expected type.\n */\nexport class InvalidCredentialTypeError extends StytchSDKError {\n constructor() {\n super('InvalidCredentialTypeError', 'The public key credential type was not of the expected type.');\n }\n}\n\n/**\n * Thrown when the public key credential is missing the attestation object\n */\nexport class MissingAttestationObjectError extends StytchSDKError {\n constructor() {\n super('MissingAttestationObjectError', 'The public key credential is missing the attestation object.');\n }\n}\n\n/**\n * Thrown when we received JSON data that could not be converted to a string\n */\nexport class JSONDataNotConvertibleToStringError extends StytchSDKError {\n constructor() {\n super('JSONDataNotConvertibleToStringError', 'JSON data unable to be converted to String type.');\n }\n}\n\n/**\n * Thrown when RNG fails\n */\nexport class RandomNumberGenerationFailed extends StytchSDKError {\n constructor() {\n super('RandomNumberGenerationFailed', 'Random number generation failed');\n }\n}\n\n/**\n * Thrown when there was an invalid encoding used for a Passkeys request\n */\nexport class PasskeysInvalidEncoding extends StytchSDKError {\n constructor() {\n super('PasskeysInvalidEncoding', 'Invalid passkey encoding');\n }\n}\n\n/**\n * Thrown when Passkeys support is misconfigured\n */\nexport class PasskeysMisconfigured extends StytchSDKError {\n constructor() {\n super(\n 'PasskeysMisconfigured',\n 'Passkeys are misconfigured. Verify that you have added the correct associated domain for your application, and that the signing information is correct.',\n );\n }\n}\n\n/**\n * Thrown when there was an invalid encoding used for a Passkeys request\n */\nexport class SignInWithAppleMisconfigured extends StytchSDKError {\n constructor() {\n super(\n 'SignInWithAppleMisconfigured',\n 'Sign In With Apple is misconfigured. Verify that you have correctly configured Apple OAuth in the Stytch Dashboard and added the Sign In With Apple capability to your project.',\n );\n }\n}\n\nexport class MissingCipherIv extends StytchSDKError {\n constructor() {\n super(\n 'MissingCipherIv',\n 'The expected cipher Iv was not found when attempting to decrypt an existing biometric key.',\n );\n }\n}\n\nexport class InvalidPrivateKeyLength extends StytchSDKError {\n constructor() {\n super('InvalidPrivateKeyLength', `The private key was of an incorrect length.`);\n }\n}\n\nexport class BiometricRegistrationIdIsNullOrBlank extends StytchSDKError {\n constructor() {\n super(\n 'BiometricRegistrationIdIsNullOrBlank',\n 'Attempted to set a blank or null biometric registration ID. This is not allowed, and indicates no registration was created on the server. Consider deleting any local keys that may have been generated.',\n );\n }\n}\n\nexport class DFPNotConfigured extends StytchSDKError {\n constructor() {\n super(\n 'DFPNotConfigured',\n 'You have attempted to retrieve a telemetry ID before the DFP client has been configured.',\n );\n }\n}\n\n/**\n * Thrown when a client attempts to start an OAuth flow but does not pass all required fields\n */\nexport class IDPOAuthFlowMissingParamError extends StytchSDKError {\n constructor(details: string) {\n super('IDPOAuthFlowMissingParamError', details);\n }\n}\n\nexport function errorToStytchError(error: any): StytchSDKError {\n if (error instanceof StytchSDKError) return error;\n\n switch (error.message) {\n case 'no_current_session':\n return new NoCurrentSessionError();\n case 'no_biometrics_registration':\n return new NoBiometricsRegistrationError();\n case 'biometrics_unavailable':\n return new BiometricsUnavailableError();\n case 'key_invalidated':\n return new KeyInvalidatedError();\n case 'device_hardware_error':\n return new BiometricsUnavailableError();\n case 'biometrics_not_available':\n return new BiometricsUnavailableError();\n case 'no_biometrics_enrolled':\n return new NoBiometricsEnrolledError();\n case 'keystore_unavailable':\n return new KeystoreUnavailableError();\n case 'no_biometric_key':\n return new KeyInvalidatedError();\n case 'device_credentials_not_allowed':\n return new DeviceCredentialsNotAllowedError();\n case 'user_cancellation':\n return new UserCancellationError();\n case 'user_locked_out':\n return new UserLockedOutError();\n case 'google_onetap_missing_id_token':\n return new MissingAuthorizationCredentialIDTokenError();\n case 'google_onetap_missing_member':\n return new InvalidAuthorizationCredentialError();\n case 'oauth_apple_missing_id_token':\n return new MissingAuthorizationCredentialIDTokenError();\n case 'oauth_apple_credential_invalid':\n return new InvalidAuthorizationCredentialError();\n case 'missing_public_key':\n return new MissingPublicKeyError();\n case 'challenge_signing_failed':\n return new ChallengeSigningFailedError();\n case 'missing_authorization_credential_id_token':\n return new MissingAuthorizationCredentialIDTokenError();\n case 'invalid_authorization_credential':\n return new InvalidAuthorizationCredentialError();\n case 'no_credentials_present':\n return new NoCredentialsPresentError();\n case 'sdk_not_configured':\n return new SDKNotConfiguredError();\n case 'failed_code_challenge':\n return new FailedCodeChallengeError();\n case 'passkeys_unsupported':\n return new PasskeysUnsupportedError();\n case 'failed_to_decrypt_data':\n return new FailedToDecryptDataError();\n case 'biometrics_failed':\n return new BiometricsFailedError();\n case 'invalid_start_url':\n return new InvalidStartUrlError();\n case 'invalid_redirect_scheme':\n return new InvalidRedirectSchemeError();\n case 'missing_url':\n return new MissingUrlError();\n case 'invalid_credential_type':\n return new InvalidCredentialTypeError();\n case 'missing_attestation_object':\n return new MissingAttestationObjectError();\n case 'json_data_not_convertible_to_string':\n return new JSONDataNotConvertibleToStringError();\n case 'random_number_generation_failed':\n return new RandomNumberGenerationFailed();\n case 'passkeys_invalid_encoding':\n return new PasskeysInvalidEncoding();\n case 'passkeys_misconfigured':\n return new PasskeysMisconfigured();\n case 'signinwithapple_misconfigured':\n return new SignInWithAppleMisconfigured();\n case 'missing_cipher_iv':\n return new MissingCipherIv();\n case 'invalid_private_key_length':\n return new InvalidPrivateKeyLength();\n case 'biometric_registration_id_is_null_or_blank':\n return new BiometricRegistrationIdIsNullOrBlank();\n case 'dfp_not_configured':\n return new DFPNotConfigured();\n default:\n return new InternalError(error);\n }\n}\n","import { StytchSDKUsageError } from '../public';\n\n/**\n * This function and its parameter is stripped in production builds using rollup plugin.\n * NOTE: Be careful when wrapping render function return values. React before v18 do not allow undefined\n * to be returned, so wrapping the entire return value will crash those runtimes.\n */\nexport const DEV = <T>(input: T): T | undefined => input;\n\n/**\n * This function is stripped in production builds using rollup plugin. Useful for adding\n * logging or validation in dev only\n */\nexport function RUN_IN_DEV(callback: () => void) {\n callback();\n}\n\nexport type ValidateRule =\n | 'object'\n | 'optionalObject'\n | 'string'\n | 'optionalString'\n | 'number'\n | 'optionalNumber'\n | 'stringArray'\n | 'optionalStringArray'\n | 'boolean'\n | 'optionalBoolean';\n\nexport const validateInDev = <T extends Record<string, unknown>>(\n methodName: string,\n obj: T,\n rules: Partial<Record<keyof T, ValidateRule>>,\n) => {\n const errors: StytchSDKUsageError[] = [];\n for (const [key, rule] of Object.entries(rules)) {\n if (rule == null) continue;\n\n const val = obj[key];\n if (rule.startsWith('optional') && val == null) continue;\n\n switch (rule) {\n case 'object':\n case 'optionalObject': {\n const isObject = typeof val === 'object' && !Array.isArray(val) && val !== null;\n if (!isObject) {\n errors.push(new StytchSDKUsageError(methodName, `${key} must be an object.`));\n }\n break;\n }\n\n case 'string':\n case 'optionalString':\n if (typeof val !== 'string') {\n errors.push(new StytchSDKUsageError(methodName, `${key} must be a string.`));\n }\n break;\n\n case 'number':\n case 'optionalNumber':\n if (typeof val !== 'number') {\n errors.push(new StytchSDKUsageError(methodName, `${key} must be a number.`));\n }\n break;\n\n case 'stringArray':\n case 'optionalStringArray':\n if (!Array.isArray(val) || !val.every((str) => typeof str === 'string')) {\n errors.push(new StytchSDKUsageError(methodName, `${key} must be an array of strings.`));\n }\n break;\n\n case 'boolean':\n case 'optionalBoolean':\n if (typeof val !== 'boolean') {\n errors.push(new StytchSDKUsageError(methodName, `${key} must be a boolean.`));\n }\n break;\n }\n }\n\n if (errors.length > 0) {\n if (errors.length === 1) {\n throw errors[0];\n } else {\n throw new AggregateError(errors);\n }\n }\n};\n"],"names":["SDKAPIUnreachableError","Error","details","constructor","message","name","Object","setPrototypeOf","prototype","StytchSDKUsageError","methodName","StytchSDKSchemaError","schemaError","messages","body","map","err","dataPath","join","StytchSDKAPIError","error_type","error_message","error_url","request_id","status_code","error_details","JSON","stringify","UNRECOVERABLE_ERROR_TYPES","StytchError","StytchAPIUnreachableError","StytchAPISchemaError","StytchAPIError","from","maybe","undefined","String","StytchSDKError","options","description","NoCurrentSessionError","InternalError","nativeStack","error","nativeStackAndroid","nativeStackIOS","NoBiometricsRegistrationError","BiometricsUnavailableError","KeyInvalidatedError","KeystoreUnavailableError","NoBiometricsEnrolledError","BiometricsAlreadyEnrolledError","UserCancellationError","UserLockedOutError","DeviceCredentialsNotAllowedError","MissingGoogleClientIDError","MissingPKCEError","MissingAuthorizationCredentialIDTokenError","InvalidAuthorizationCredentialError","NoCredentialsPresentError","MissingPublicKeyError","ChallengeSigningFailedError","SDKNotConfiguredError","FailedCodeChallengeError","PasskeysUnsupportedError","FailedToDecryptDataError","BiometricsFailedError","InvalidStartUrlError","InvalidRedirectSchemeError","MissingUrlError","InvalidCredentialTypeError","MissingAttestationObjectError","JSONDataNotConvertibleToStringError","RandomNumberGenerationFailed","PasskeysInvalidEncoding","PasskeysMisconfigured","SignInWithAppleMisconfigured","MissingCipherIv","InvalidPrivateKeyLength","BiometricRegistrationIdIsNullOrBlank","DFPNotConfigured","IDPOAuthFlowMissingParamError","errorToStytchError","DEV","input","RUN_IN_DEV","callback","validateInDev","obj","rules","errors","key","rule","entries","val","startsWith","isObject","Array","isArray","push","every","str","length","AggregateError"],"mappings":"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"}