@stackframe/stack 2.5.8 → 2.5.10

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 (92) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/components/credential-sign-in.d.mts +5 -0
  3. package/dist/components/credential-sign-in.d.ts +5 -0
  4. package/dist/components/{credential-sign-in-form.js → credential-sign-in.js} +8 -8
  5. package/dist/components/credential-sign-in.js.map +1 -0
  6. package/dist/components/credential-sign-up.d.mts +5 -0
  7. package/dist/components/credential-sign-up.d.ts +5 -0
  8. package/dist/components/{credential-sign-up-form.js → credential-sign-up.js} +8 -8
  9. package/dist/components/credential-sign-up.js.map +1 -0
  10. package/dist/components/elements/user-avatar.d.mts +1 -1
  11. package/dist/components/elements/user-avatar.d.ts +1 -1
  12. package/dist/components/magic-link-sign-in.d.mts +5 -0
  13. package/dist/components/magic-link-sign-in.d.ts +5 -0
  14. package/dist/components/{magic-link-sign-in-form.js → magic-link-sign-in.js} +8 -8
  15. package/dist/components/magic-link-sign-in.js.map +1 -0
  16. package/dist/components/message-cards/predefined-message-card.js +8 -8
  17. package/dist/components/message-cards/predefined-message-card.js.map +1 -1
  18. package/dist/components/selected-team-switcher.d.mts +1 -1
  19. package/dist/components/selected-team-switcher.d.ts +1 -1
  20. package/dist/components/user-button.js +3 -3
  21. package/dist/components/user-button.js.map +1 -1
  22. package/dist/components-page/account-settings.js +4 -4
  23. package/dist/components-page/account-settings.js.map +1 -1
  24. package/dist/components-page/auth-page.js +21 -8
  25. package/dist/components-page/auth-page.js.map +1 -1
  26. package/dist/components-page/stack-handler.d.mts +2 -2
  27. package/dist/components-page/stack-handler.d.ts +2 -2
  28. package/dist/components-page/stack-handler.js +8 -15
  29. package/dist/components-page/stack-handler.js.map +1 -1
  30. package/dist/esm/components/{credential-sign-in-form.js → credential-sign-in.js} +4 -4
  31. package/dist/esm/components/credential-sign-in.js.map +1 -0
  32. package/dist/esm/components/{credential-sign-up-form.js → credential-sign-up.js} +4 -4
  33. package/dist/esm/components/credential-sign-up.js.map +1 -0
  34. package/dist/esm/components/{magic-link-sign-in-form.js → magic-link-sign-in.js} +4 -4
  35. package/dist/esm/components/magic-link-sign-in.js.map +1 -0
  36. package/dist/esm/components/message-cards/predefined-message-card.js +8 -8
  37. package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
  38. package/dist/esm/components/user-button.js +3 -3
  39. package/dist/esm/components/user-button.js.map +1 -1
  40. package/dist/esm/components-page/account-settings.js +4 -4
  41. package/dist/esm/components-page/account-settings.js.map +1 -1
  42. package/dist/esm/components-page/auth-page.js +21 -8
  43. package/dist/esm/components-page/auth-page.js.map +1 -1
  44. package/dist/esm/components-page/stack-handler.js +8 -15
  45. package/dist/esm/components-page/stack-handler.js.map +1 -1
  46. package/dist/esm/index.js +7 -9
  47. package/dist/esm/index.js.map +1 -1
  48. package/dist/esm/lib/auth.js +3 -3
  49. package/dist/esm/lib/auth.js.map +1 -1
  50. package/dist/esm/lib/cookie.js +8 -6
  51. package/dist/esm/lib/cookie.js.map +1 -1
  52. package/dist/esm/lib/stack-app.js +143 -93
  53. package/dist/esm/lib/stack-app.js.map +1 -1
  54. package/dist/esm/providers/stack-provider-client.js +1 -3
  55. package/dist/esm/providers/stack-provider-client.js.map +1 -1
  56. package/dist/esm/utils/url.js +9 -1
  57. package/dist/esm/utils/url.js.map +1 -1
  58. package/dist/index.d.mts +5 -5
  59. package/dist/index.d.ts +5 -5
  60. package/dist/index.js +6 -8
  61. package/dist/index.js.map +1 -1
  62. package/dist/lib/auth.js +3 -3
  63. package/dist/lib/auth.js.map +1 -1
  64. package/dist/lib/cookie.js +6 -6
  65. package/dist/lib/cookie.js.map +1 -1
  66. package/dist/lib/hooks.d.mts +1 -1
  67. package/dist/lib/hooks.d.ts +1 -1
  68. package/dist/lib/stack-app.d.mts +59 -23
  69. package/dist/lib/stack-app.d.ts +59 -23
  70. package/dist/lib/stack-app.js +143 -93
  71. package/dist/lib/stack-app.js.map +1 -1
  72. package/dist/providers/stack-provider-client.d.mts +1 -1
  73. package/dist/providers/stack-provider-client.d.ts +1 -1
  74. package/dist/providers/stack-provider-client.js +1 -3
  75. package/dist/providers/stack-provider-client.js.map +1 -1
  76. package/dist/providers/stack-provider.d.mts +1 -1
  77. package/dist/providers/stack-provider.d.ts +1 -1
  78. package/dist/utils/url.js +9 -1
  79. package/dist/utils/url.js.map +1 -1
  80. package/package.json +6 -4
  81. package/dist/components/credential-sign-in-form.d.mts +0 -5
  82. package/dist/components/credential-sign-in-form.d.ts +0 -5
  83. package/dist/components/credential-sign-in-form.js.map +0 -1
  84. package/dist/components/credential-sign-up-form.d.mts +0 -5
  85. package/dist/components/credential-sign-up-form.d.ts +0 -5
  86. package/dist/components/credential-sign-up-form.js.map +0 -1
  87. package/dist/components/magic-link-sign-in-form.d.mts +0 -5
  88. package/dist/components/magic-link-sign-in-form.d.ts +0 -5
  89. package/dist/components/magic-link-sign-in-form.js.map +0 -1
  90. package/dist/esm/components/credential-sign-in-form.js.map +0 -1
  91. package/dist/esm/components/credential-sign-up-form.js.map +0 -1
  92. package/dist/esm/components/magic-link-sign-in-form.js.map +0 -1
@@ -11,9 +11,7 @@ var StackContext = React.createContext(null);
11
11
  function StackProviderClient(props) {
12
12
  const appJson = props.appJson;
13
13
  const app = StackClientApp[stackAppInternalsSymbol].fromClientJson(appJson);
14
- if (process.env.NODE_ENV === "development") {
15
- globalVar.stackApp = app;
16
- }
14
+ globalVar.__STACK_AUTH__ = { app };
17
15
  return /* @__PURE__ */ jsx(StackContext.Provider, { value: { app }, children: props.children });
18
16
  }
19
17
  function UserSetter(props) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/providers/stack-provider-client.tsx"],"sourcesContent":["\"use client\";\n\nimport { CurrentUserCrud } from \"@stackframe/stack-shared/dist/interface/crud/current-user\";\nimport { globalVar } from \"@stackframe/stack-shared/dist/utils/globals\";\nimport React, { useEffect } from \"react\";\nimport { useStackApp } from \"..\";\nimport { StackClientApp, StackClientAppJson, stackAppInternalsSymbol } from \"../lib/stack-app\";\n\nexport const StackContext = React.createContext<null | {\n app: StackClientApp<true>,\n}>(null);\n\nexport function StackProviderClient(props: {\n appJson: StackClientAppJson<true, string>,\n children?: React.ReactNode,\n}) {\n const appJson = props.appJson;\n const app = StackClientApp[stackAppInternalsSymbol].fromClientJson(appJson);\n\n if (process.env.NODE_ENV === \"development\") {\n globalVar.stackApp = app;\n }\n\n return (\n <StackContext.Provider value={{ app }}>\n {props.children}\n </StackContext.Provider>\n );\n}\n\nexport function UserSetter(props: { userJsonPromise: Promise<CurrentUserCrud['Client']['Read'] | null> }) {\n const app = useStackApp();\n useEffect(() => {\n const promise = (async () => await props.userJsonPromise)(); // there is a Next.js bug where Promises passed by server components return `undefined` as their `then` value, so wrap it in a normal promise\n app[stackAppInternalsSymbol].setCurrentUser(promise);\n }, []);\n return null;\n}\n"],"mappings":";;;AAGA,SAAS,iBAAiB;AAC1B,OAAO,SAAS,iBAAiB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,gBAAoC,+BAA+B;AAkBxE;AAhBG,IAAM,eAAe,MAAM,cAE/B,IAAI;AAEA,SAAS,oBAAoB,OAGjC;AACD,QAAM,UAAU,MAAM;AACtB,QAAM,MAAM,eAAe,uBAAuB,EAAE,eAAe,OAAO;AAE1E,MAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,cAAU,WAAW;AAAA,EACvB;AAEA,SACE,oBAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,IAAI,GACjC,gBAAM,UACT;AAEJ;AAEO,SAAS,WAAW,OAA+E;AACxG,QAAM,MAAM,YAAY;AACxB,YAAU,MAAM;AACd,UAAM,WAAW,YAAY,MAAM,MAAM,iBAAiB;AAC1D,QAAI,uBAAuB,EAAE,eAAe,OAAO;AAAA,EACrD,GAAG,CAAC,CAAC;AACL,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/providers/stack-provider-client.tsx"],"sourcesContent":["\"use client\";\n\nimport { CurrentUserCrud } from \"@stackframe/stack-shared/dist/interface/crud/current-user\";\nimport { globalVar } from \"@stackframe/stack-shared/dist/utils/globals\";\nimport React, { useEffect } from \"react\";\nimport { useStackApp } from \"..\";\nimport { StackClientApp, StackClientAppJson, stackAppInternalsSymbol } from \"../lib/stack-app\";\n\nexport const StackContext = React.createContext<null | {\n app: StackClientApp<true>,\n}>(null);\n\nexport function StackProviderClient(props: {\n appJson: StackClientAppJson<true, string>,\n children?: React.ReactNode,\n}) {\n const appJson = props.appJson;\n const app = StackClientApp[stackAppInternalsSymbol].fromClientJson(appJson);\n\n globalVar.__STACK_AUTH__ = { app };\n\n return (\n <StackContext.Provider value={{ app }}>\n {props.children}\n </StackContext.Provider>\n );\n}\n\nexport function UserSetter(props: { userJsonPromise: Promise<CurrentUserCrud['Client']['Read'] | null> }) {\n const app = useStackApp();\n useEffect(() => {\n const promise = (async () => await props.userJsonPromise)(); // there is a Next.js bug where Promises passed by server components return `undefined` as their `then` value, so wrap it in a normal promise\n app[stackAppInternalsSymbol].setCurrentUser(promise);\n }, []);\n return null;\n}\n"],"mappings":";;;AAGA,SAAS,iBAAiB;AAC1B,OAAO,SAAS,iBAAiB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,gBAAoC,+BAA+B;AAgBxE;AAdG,IAAM,eAAe,MAAM,cAE/B,IAAI;AAEA,SAAS,oBAAoB,OAGjC;AACD,QAAM,UAAU,MAAM;AACtB,QAAM,MAAM,eAAe,uBAAuB,EAAE,eAAe,OAAO;AAE1E,YAAU,iBAAiB,EAAE,IAAI;AAEjC,SACE,oBAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,IAAI,GACjC,gBAAM,UACT;AAEJ;AAEO,SAAS,WAAW,OAA+E;AACxG,QAAM,MAAM,YAAY;AACxB,YAAU,MAAM;AACd,UAAM,WAAW,YAAY,MAAM,MAAM,iBAAiB;AAC1D,QAAI,uBAAuB,EAAE,eAAe,OAAO;AAAA,EACrD,GAAG,CAAC,CAAC;AACL,SAAO;AACT;","names":[]}
@@ -12,8 +12,16 @@ function autoRedirect() {
12
12
  }
13
13
  }
14
14
  function constructRedirectUrl(redirectUrl) {
15
+ const retainedQueryParams = ["after_auth_return_to"];
16
+ const currentUrl = new URL(window.location.href);
15
17
  const url = redirectUrl ? new URL(redirectUrl, window.location.href) : new URL(window.location.href);
16
- return url.href.split("#")[0];
18
+ for (const param of retainedQueryParams) {
19
+ if (currentUrl.searchParams.has(param)) {
20
+ url.searchParams.set(param, currentUrl.searchParams.get(param));
21
+ }
22
+ }
23
+ url.hash = "";
24
+ return url.toString();
17
25
  }
18
26
  export {
19
27
  autoRedirect,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/url.tsx"],"sourcesContent":["export function autoRedirect() {\n const url = new URL(window.location.href);\n const redirectUrl = url.searchParams.get(\"auto-redirect-url\");\n if (redirectUrl) {\n const urlObject = new URL(redirectUrl);\n if (urlObject.origin !== window.location.origin) {\n throw new Error(\"auto-redirect-url is not same origin (\" + urlObject.origin + \" !== \" + window.location.origin + \")\");\n }\n url.searchParams.delete(\"auto-redirect-url\");\n window.location.replace(urlObject.href);\n }\n}\n\nexport function constructRedirectUrl(redirectUrl: URL | string | undefined) {\n const url = redirectUrl ? new URL(redirectUrl, window.location.href) : new URL(window.location.href);\n return url.href.split(\"#\")[0];\n}\n"],"mappings":";AAAO,SAAS,eAAe;AAC7B,QAAM,MAAM,IAAI,IAAI,OAAO,SAAS,IAAI;AACxC,QAAM,cAAc,IAAI,aAAa,IAAI,mBAAmB;AAC5D,MAAI,aAAa;AACf,UAAM,YAAY,IAAI,IAAI,WAAW;AACrC,QAAI,UAAU,WAAW,OAAO,SAAS,QAAQ;AAC/C,YAAM,IAAI,MAAM,2CAA2C,UAAU,SAAS,UAAU,OAAO,SAAS,SAAS,GAAG;AAAA,IACtH;AACA,QAAI,aAAa,OAAO,mBAAmB;AAC3C,WAAO,SAAS,QAAQ,UAAU,IAAI;AAAA,EACxC;AACF;AAEO,SAAS,qBAAqB,aAAuC;AAC1E,QAAM,MAAM,cAAc,IAAI,IAAI,aAAa,OAAO,SAAS,IAAI,IAAI,IAAI,IAAI,OAAO,SAAS,IAAI;AACnG,SAAO,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC;AAC9B;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/url.tsx"],"sourcesContent":["export function autoRedirect() {\n const url = new URL(window.location.href);\n const redirectUrl = url.searchParams.get(\"auto-redirect-url\");\n if (redirectUrl) {\n const urlObject = new URL(redirectUrl);\n if (urlObject.origin !== window.location.origin) {\n throw new Error(\"auto-redirect-url is not same origin (\" + urlObject.origin + \" !== \" + window.location.origin + \")\");\n }\n url.searchParams.delete(\"auto-redirect-url\");\n window.location.replace(urlObject.href);\n }\n}\n\nexport function constructRedirectUrl(redirectUrl: URL | string | undefined) {\n const retainedQueryParams = [\"after_auth_return_to\"];\n const currentUrl = new URL(window.location.href);\n const url = redirectUrl ? new URL(redirectUrl, window.location.href) : new URL(window.location.href);\n for (const param of retainedQueryParams) {\n if (currentUrl.searchParams.has(param)) {\n url.searchParams.set(param, currentUrl.searchParams.get(param)!);\n }\n }\n url.hash = \"\";\n return url.toString();\n}\n"],"mappings":";AAAO,SAAS,eAAe;AAC7B,QAAM,MAAM,IAAI,IAAI,OAAO,SAAS,IAAI;AACxC,QAAM,cAAc,IAAI,aAAa,IAAI,mBAAmB;AAC5D,MAAI,aAAa;AACf,UAAM,YAAY,IAAI,IAAI,WAAW;AACrC,QAAI,UAAU,WAAW,OAAO,SAAS,QAAQ;AAC/C,YAAM,IAAI,MAAM,2CAA2C,UAAU,SAAS,UAAU,OAAO,SAAS,SAAS,GAAG;AAAA,IACtH;AACA,QAAI,aAAa,OAAO,mBAAmB;AAC3C,WAAO,SAAS,QAAQ,UAAU,IAAI;AAAA,EACxC;AACF;AAEO,SAAS,qBAAqB,aAAuC;AAC1E,QAAM,sBAAsB,CAAC,sBAAsB;AACnD,QAAM,aAAa,IAAI,IAAI,OAAO,SAAS,IAAI;AAC/C,QAAM,MAAM,cAAc,IAAI,IAAI,aAAa,OAAO,SAAS,IAAI,IAAI,IAAI,IAAI,OAAO,SAAS,IAAI;AACnG,aAAW,SAAS,qBAAqB;AACvC,QAAI,WAAW,aAAa,IAAI,KAAK,GAAG;AACtC,UAAI,aAAa,IAAI,OAAO,WAAW,aAAa,IAAI,KAAK,CAAE;AAAA,IACjE;AAAA,EACF;AACA,MAAI,OAAO;AACX,SAAO,IAAI,SAAS;AACtB;","names":[]}
package/dist/index.d.mts CHANGED
@@ -12,20 +12,20 @@ export { MessageCard } from './components/message-cards/message-card.mjs';
12
12
  export { UserButton } from './components/user-button.mjs';
13
13
  export { AccountSettings } from './components-page/account-settings.mjs';
14
14
  export { AuthPage } from './components-page/auth-page.mjs';
15
- export { CredentialSignInForm as CredentialSignIn } from './components/credential-sign-in-form.mjs';
16
- export { CredentialSignUpForm as CredentialSignUp } from './components/credential-sign-up-form.mjs';
17
- export { MagicLinkSignInForm as MagicLinkSignIn } from './components/magic-link-sign-in-form.mjs';
15
+ export { CredentialSignIn } from './components/credential-sign-in.mjs';
16
+ export { CredentialSignUp } from './components/credential-sign-up.mjs';
17
+ export { MagicLinkSignIn } from './components/magic-link-sign-in.mjs';
18
18
  export { OAuthButton } from './components/oauth-button.mjs';
19
19
  export { OAuthButtonGroup } from './components/oauth-button-group.mjs';
20
- export { SelectedTeamSwitcher, SelectedTeamSwitcher as TeamSwitcher } from './components/selected-team-switcher.mjs';
20
+ export { SelectedTeamSwitcher } from './components/selected-team-switcher.mjs';
21
21
  import 'react/jsx-runtime';
22
22
  import 'react';
23
23
  import '@stackframe/stack-shared';
24
24
  import '@stackframe/stack-shared/dist/helpers/production-mode';
25
- import '@stackframe/stack-shared/dist/interface/clientInterface';
26
25
  import '@stackframe/stack-shared/dist/interface/crud/api-keys';
27
26
  import '@stackframe/stack-shared/dist/interface/crud/current-user';
28
27
  import '@stackframe/stack-shared/dist/interface/crud/email-templates';
29
28
  import '@stackframe/stack-shared/dist/interface/crud/team-permissions';
30
29
  import '@stackframe/stack-shared/dist/sessions';
31
30
  import '@stackframe/stack-shared/dist/utils/json';
31
+ import '@stackframe/stack-shared/dist/utils/oauth';
package/dist/index.d.ts CHANGED
@@ -12,20 +12,20 @@ export { MessageCard } from './components/message-cards/message-card.js';
12
12
  export { UserButton } from './components/user-button.js';
13
13
  export { AccountSettings } from './components-page/account-settings.js';
14
14
  export { AuthPage } from './components-page/auth-page.js';
15
- export { CredentialSignInForm as CredentialSignIn } from './components/credential-sign-in-form.js';
16
- export { CredentialSignUpForm as CredentialSignUp } from './components/credential-sign-up-form.js';
17
- export { MagicLinkSignInForm as MagicLinkSignIn } from './components/magic-link-sign-in-form.js';
15
+ export { CredentialSignIn } from './components/credential-sign-in.js';
16
+ export { CredentialSignUp } from './components/credential-sign-up.js';
17
+ export { MagicLinkSignIn } from './components/magic-link-sign-in.js';
18
18
  export { OAuthButton } from './components/oauth-button.js';
19
19
  export { OAuthButtonGroup } from './components/oauth-button-group.js';
20
- export { SelectedTeamSwitcher, SelectedTeamSwitcher as TeamSwitcher } from './components/selected-team-switcher.js';
20
+ export { SelectedTeamSwitcher } from './components/selected-team-switcher.js';
21
21
  import 'react/jsx-runtime';
22
22
  import 'react';
23
23
  import '@stackframe/stack-shared';
24
24
  import '@stackframe/stack-shared/dist/helpers/production-mode';
25
- import '@stackframe/stack-shared/dist/interface/clientInterface';
26
25
  import '@stackframe/stack-shared/dist/interface/crud/api-keys';
27
26
  import '@stackframe/stack-shared/dist/interface/crud/current-user';
28
27
  import '@stackframe/stack-shared/dist/interface/crud/email-templates';
29
28
  import '@stackframe/stack-shared/dist/interface/crud/team-permissions';
30
29
  import '@stackframe/stack-shared/dist/sessions';
31
30
  import '@stackframe/stack-shared/dist/utils/json';
31
+ import '@stackframe/stack-shared/dist/utils/oauth';
package/dist/index.js CHANGED
@@ -33,11 +33,11 @@ var src_exports = {};
33
33
  __export(src_exports, {
34
34
  AccountSettings: () => import_account_settings.AccountSettings,
35
35
  AuthPage: () => import_auth_page.AuthPage,
36
- CredentialSignIn: () => import_credential_sign_in_form.CredentialSignInForm,
37
- CredentialSignUp: () => import_credential_sign_up_form.CredentialSignUpForm,
36
+ CredentialSignIn: () => import_credential_sign_in.CredentialSignIn,
37
+ CredentialSignUp: () => import_credential_sign_up.CredentialSignUp,
38
38
  EmailVerification: () => import_email_verification.EmailVerification,
39
39
  ForgotPassword: () => import_forgot_password.ForgotPassword,
40
- MagicLinkSignIn: () => import_magic_link_sign_in_form.MagicLinkSignInForm,
40
+ MagicLinkSignIn: () => import_magic_link_sign_in.MagicLinkSignIn,
41
41
  MessageCard: () => import_message_card.MessageCard,
42
42
  OAuthButton: () => import_oauth_button.OAuthButton,
43
43
  OAuthButtonGroup: () => import_oauth_button_group.OAuthButtonGroup,
@@ -48,7 +48,6 @@ __export(src_exports, {
48
48
  StackHandler: () => import_stack_handler.default,
49
49
  StackProvider: () => import_stack_provider.default,
50
50
  StackTheme: () => import_theme_provider.StackTheme,
51
- TeamSwitcher: () => import_selected_team_switcher.SelectedTeamSwitcher,
52
51
  UserButton: () => import_user_button.UserButton,
53
52
  useStackApp: () => import_hooks.useStackApp,
54
53
  useUser: () => import_hooks.useUser
@@ -68,9 +67,9 @@ var import_message_card = require("./components/message-cards/message-card");
68
67
  var import_user_button = require("./components/user-button");
69
68
  var import_account_settings = require("./components-page/account-settings");
70
69
  var import_auth_page = require("./components-page/auth-page");
71
- var import_credential_sign_in_form = require("./components/credential-sign-in-form");
72
- var import_credential_sign_up_form = require("./components/credential-sign-up-form");
73
- var import_magic_link_sign_in_form = require("./components/magic-link-sign-in-form");
70
+ var import_credential_sign_in = require("./components/credential-sign-in");
71
+ var import_credential_sign_up = require("./components/credential-sign-up");
72
+ var import_magic_link_sign_in = require("./components/magic-link-sign-in");
74
73
  var import_oauth_button = require("./components/oauth-button");
75
74
  var import_oauth_button_group = require("./components/oauth-button-group");
76
75
  var import_selected_team_switcher = require("./components/selected-team-switcher");
@@ -93,7 +92,6 @@ var import_selected_team_switcher = require("./components/selected-team-switcher
93
92
  StackHandler,
94
93
  StackProvider,
95
94
  StackTheme,
96
- TeamSwitcher,
97
95
  UserButton,
98
96
  useStackApp,
99
97
  useUser,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx"],"sourcesContent":["export { default as StackProvider } from \"./providers/stack-provider\";\nexport { useUser, useStackApp } from \"./lib/hooks\";\nexport { default as StackHandler } from \"./components-page/stack-handler\";\nexport { StackTheme } from './providers/theme-provider';\nexport * from './lib/stack-app';\n\nexport { SignIn } from \"./components-page/sign-in\";\nexport { SignUp } from \"./components-page/sign-up\";\nexport { EmailVerification } from \"./components-page/email-verification\";\nexport { PasswordReset } from \"./components-page/password-reset\";\nexport { ForgotPassword } from \"./components-page/forgot-password\";\nexport { MessageCard } from \"./components/message-cards/message-card\";\nexport { UserButton } from \"./components/user-button\";\nexport { AccountSettings } from \"./components-page/account-settings\";\nexport { AuthPage } from \"./components-page/auth-page\";\nexport { CredentialSignInForm as CredentialSignIn } from \"./components/credential-sign-in-form\";\nexport { CredentialSignUpForm as CredentialSignUp } from \"./components/credential-sign-up-form\";\nexport { MagicLinkSignInForm as MagicLinkSignIn } from \"./components/magic-link-sign-in-form\";\nexport { OAuthButton } from \"./components/oauth-button\";\nexport { OAuthButtonGroup } from \"./components/oauth-button-group\";\n\nexport {\n SelectedTeamSwitcher,\n /**\n * @deprecated This was renamed to `SelectedTeamSwitcher`.\n */\n SelectedTeamSwitcher as TeamSwitcher,\n} from \"./components/selected-team-switcher\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAyC;AACzC,mBAAqC;AACrC,2BAAwC;AACxC,4BAA2B;AAC3B,wBAAc,4BAJd;AAMA,qBAAuB;AACvB,qBAAuB;AACvB,gCAAkC;AAClC,4BAA8B;AAC9B,6BAA+B;AAC/B,0BAA4B;AAC5B,yBAA2B;AAC3B,8BAAgC;AAChC,uBAAyB;AACzB,qCAAyD;AACzD,qCAAyD;AACzD,qCAAuD;AACvD,0BAA4B;AAC5B,gCAAiC;AAEjC,oCAMO;","names":[]}
1
+ {"version":3,"sources":["../src/index.tsx"],"sourcesContent":["export { default as StackProvider } from \"./providers/stack-provider\";\nexport { useUser, useStackApp } from \"./lib/hooks\";\nexport { default as StackHandler } from \"./components-page/stack-handler\";\nexport { StackTheme } from './providers/theme-provider';\nexport * from './lib/stack-app';\n\nexport { SignIn } from \"./components-page/sign-in\";\nexport { SignUp } from \"./components-page/sign-up\";\nexport { EmailVerification } from \"./components-page/email-verification\";\nexport { PasswordReset } from \"./components-page/password-reset\";\nexport { ForgotPassword } from \"./components-page/forgot-password\";\nexport { MessageCard } from \"./components/message-cards/message-card\";\nexport { UserButton } from \"./components/user-button\";\nexport { AccountSettings } from \"./components-page/account-settings\";\nexport { AuthPage } from \"./components-page/auth-page\";\nexport { CredentialSignIn as CredentialSignIn } from \"./components/credential-sign-in\";\nexport { CredentialSignUp as CredentialSignUp } from \"./components/credential-sign-up\";\nexport { MagicLinkSignIn as MagicLinkSignIn } from \"./components/magic-link-sign-in\";\nexport { OAuthButton } from \"./components/oauth-button\";\nexport { OAuthButtonGroup } from \"./components/oauth-button-group\";\n\nexport {\n SelectedTeamSwitcher,\n} from \"./components/selected-team-switcher\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAyC;AACzC,mBAAqC;AACrC,2BAAwC;AACxC,4BAA2B;AAC3B,wBAAc,4BAJd;AAMA,qBAAuB;AACvB,qBAAuB;AACvB,gCAAkC;AAClC,4BAA8B;AAC9B,6BAA+B;AAC/B,0BAA4B;AAC5B,yBAA2B;AAC3B,8BAAgC;AAChC,uBAAyB;AACzB,gCAAqD;AACrD,gCAAqD;AACrD,gCAAmD;AACnD,0BAA4B;AAC5B,gCAAiC;AAEjC,oCAEO;","names":[]}
package/dist/lib/auth.js CHANGED
@@ -25,10 +25,10 @@ __export(auth_exports, {
25
25
  signInWithOAuth: () => signInWithOAuth
26
26
  });
27
27
  module.exports = __toCommonJS(auth_exports);
28
- var import_cookie = require("./cookie");
29
- var import_url = require("../utils/url");
30
- var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
31
28
  var import_errors = require("@stackframe/stack-shared/dist/utils/errors");
29
+ var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
30
+ var import_url = require("../utils/url");
31
+ var import_cookie = require("./cookie");
32
32
  async function signInWithOAuth(iface, options) {
33
33
  const { codeChallenge, state } = await (0, import_cookie.saveVerifierAndState)();
34
34
  const location = await iface.getOAuthUrl({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/auth.ts"],"sourcesContent":["import { StackClientInterface } from \"@stackframe/stack-shared\";\nimport { saveVerifierAndState, getVerifierAndState } from \"./cookie\";\nimport { constructRedirectUrl } from \"../utils/url\";\nimport { neverResolve } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { StackAssertionError } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { InternalSession } from \"@stackframe/stack-shared/dist/sessions\";\n\nexport async function signInWithOAuth(\n iface: StackClientInterface,\n options: {\n provider: string,\n redirectUrl: string,\n errorRedirectUrl: string,\n providerScope?: string,\n }\n) {\n const { codeChallenge, state } = await saveVerifierAndState();\n const location = await iface.getOAuthUrl({\n provider: options.provider,\n redirectUrl: constructRedirectUrl(options.redirectUrl),\n errorRedirectUrl: constructRedirectUrl(options.errorRedirectUrl),\n codeChallenge,\n state,\n type: \"authenticate\",\n providerScope: options.providerScope,\n });\n window.location.assign(location);\n await neverResolve();\n}\n\nexport async function addNewOAuthProviderOrScope(\n iface: StackClientInterface,\n options: {\n provider: string,\n redirectUrl: string,\n errorRedirectUrl: string,\n providerScope?: string,\n },\n session: InternalSession,\n) {\n const { codeChallenge, state } = await saveVerifierAndState();\n const location = await iface.getOAuthUrl({\n provider: options.provider,\n redirectUrl: constructRedirectUrl(options.redirectUrl),\n errorRedirectUrl: constructRedirectUrl(options.errorRedirectUrl),\n afterCallbackRedirectUrl: constructRedirectUrl(window.location.href),\n codeChallenge,\n state,\n type: \"link\",\n session,\n providerScope: options.providerScope,\n });\n window.location.assign(location);\n await neverResolve();\n}\n\n/**\n * Checks if the current URL has the query parameters for an OAuth callback, and if so, removes them.\n *\n * Must be synchronous for the logic in callOAuthCallback to work without race conditions.\n */\nfunction consumeOAuthCallbackQueryParams(expectedState: string): null | URL {\n const requiredParams = [\"code\", \"state\"];\n const originalUrl = new URL(window.location.href);\n for (const param of requiredParams) {\n if (!originalUrl.searchParams.has(param)) {\n return null;\n }\n }\n\n if (expectedState !== originalUrl.searchParams.get(\"state\")) {\n // If the state doesn't match, then the callback wasn't meant for us.\n // Maybe the website uses another OAuth library?\n return null;\n }\n\n\n const newUrl = new URL(originalUrl);\n for (const param of requiredParams) {\n newUrl.searchParams.delete(param);\n }\n\n // let's get rid of the authorization code in the history as we\n // don't redirect to `redirectUrl` if there's a validation error\n // (as the redirectUrl might be malicious!).\n //\n // We use history.replaceState instead of location.assign(...) to\n // prevent an unnecessary reload\n window.history.replaceState({}, \"\", newUrl.toString());\n\n return originalUrl;\n}\n\nexport async function callOAuthCallback(\n iface: StackClientInterface,\n redirectUrl: string,\n) {\n // note: this part of the function (until the return) needs\n // to be synchronous, to prevent race conditions when\n // callOAuthCallback is called multiple times in parallel\n const { codeVerifier, state } = getVerifierAndState();\n if (!codeVerifier || !state) {\n throw new Error(\"Invalid OAuth callback URL parameters. It seems like the OAuth flow was interrupted, so please try again.\");\n }\n const originalUrl = consumeOAuthCallbackQueryParams(state);\n if (!originalUrl) return null;\n\n // the rest can be asynchronous (we now know that we are the\n // intended recipient of the callback)\n try {\n return await iface.callOAuthCallback({\n oauthParams: originalUrl.searchParams,\n redirectUri: constructRedirectUrl(redirectUrl),\n codeVerifier,\n state,\n });\n } catch (e) {\n throw new StackAssertionError(\"Error signing in during OAuth callback. Please try again.\", { cause: e });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA0D;AAC1D,iBAAqC;AACrC,sBAA6B;AAC7B,oBAAoC;AAGpC,eAAsB,gBACpB,OACA,SAMA;AACA,QAAM,EAAE,eAAe,MAAM,IAAI,UAAM,oCAAqB;AAC5D,QAAM,WAAW,MAAM,MAAM,YAAY;AAAA,IACvC,UAAU,QAAQ;AAAA,IAClB,iBAAa,iCAAqB,QAAQ,WAAW;AAAA,IACrD,sBAAkB,iCAAqB,QAAQ,gBAAgB;AAAA,IAC/D;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,SAAO,SAAS,OAAO,QAAQ;AAC/B,YAAM,8BAAa;AACrB;AAEA,eAAsB,2BACpB,OACA,SAMA,SACA;AACA,QAAM,EAAE,eAAe,MAAM,IAAI,UAAM,oCAAqB;AAC5D,QAAM,WAAW,MAAM,MAAM,YAAY;AAAA,IACvC,UAAU,QAAQ;AAAA,IAClB,iBAAa,iCAAqB,QAAQ,WAAW;AAAA,IACrD,sBAAkB,iCAAqB,QAAQ,gBAAgB;AAAA,IAC/D,8BAA0B,iCAAqB,OAAO,SAAS,IAAI;AAAA,IACnE;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,SAAO,SAAS,OAAO,QAAQ;AAC/B,YAAM,8BAAa;AACrB;AAOA,SAAS,gCAAgC,eAAmC;AAC1E,QAAM,iBAAiB,CAAC,QAAQ,OAAO;AACvC,QAAM,cAAc,IAAI,IAAI,OAAO,SAAS,IAAI;AAChD,aAAW,SAAS,gBAAgB;AAClC,QAAI,CAAC,YAAY,aAAa,IAAI,KAAK,GAAG;AACxC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,kBAAkB,YAAY,aAAa,IAAI,OAAO,GAAG;AAG3D,WAAO;AAAA,EACT;AAGA,QAAM,SAAS,IAAI,IAAI,WAAW;AAClC,aAAW,SAAS,gBAAgB;AAClC,WAAO,aAAa,OAAO,KAAK;AAAA,EAClC;AAQA,SAAO,QAAQ,aAAa,CAAC,GAAG,IAAI,OAAO,SAAS,CAAC;AAErD,SAAO;AACT;AAEA,eAAsB,kBACpB,OACA,aACA;AAIA,QAAM,EAAE,cAAc,MAAM,QAAI,mCAAoB;AACpD,MAAI,CAAC,gBAAgB,CAAC,OAAO;AAC3B,UAAM,IAAI,MAAM,2GAA2G;AAAA,EAC7H;AACA,QAAM,cAAc,gCAAgC,KAAK;AACzD,MAAI,CAAC,YAAa,QAAO;AAIzB,MAAI;AACF,WAAO,MAAM,MAAM,kBAAkB;AAAA,MACnC,aAAa,YAAY;AAAA,MACzB,iBAAa,iCAAqB,WAAW;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,SAAS,GAAG;AACV,UAAM,IAAI,kCAAoB,6DAA6D,EAAE,OAAO,EAAE,CAAC;AAAA,EACzG;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/lib/auth.ts"],"sourcesContent":["import { StackClientInterface } from \"@stackframe/stack-shared\";\nimport { InternalSession } from \"@stackframe/stack-shared/dist/sessions\";\nimport { StackAssertionError } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { neverResolve } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { constructRedirectUrl } from \"../utils/url\";\nimport { getVerifierAndState, saveVerifierAndState } from \"./cookie\";\n\nexport async function signInWithOAuth(\n iface: StackClientInterface,\n options: {\n provider: string,\n redirectUrl: string,\n errorRedirectUrl: string,\n providerScope?: string,\n }\n) {\n const { codeChallenge, state } = await saveVerifierAndState();\n const location = await iface.getOAuthUrl({\n provider: options.provider,\n redirectUrl: constructRedirectUrl(options.redirectUrl),\n errorRedirectUrl: constructRedirectUrl(options.errorRedirectUrl),\n codeChallenge,\n state,\n type: \"authenticate\",\n providerScope: options.providerScope,\n });\n window.location.assign(location);\n await neverResolve();\n}\n\nexport async function addNewOAuthProviderOrScope(\n iface: StackClientInterface,\n options: {\n provider: string,\n redirectUrl: string,\n errorRedirectUrl: string,\n providerScope?: string,\n },\n session: InternalSession,\n) {\n const { codeChallenge, state } = await saveVerifierAndState();\n const location = await iface.getOAuthUrl({\n provider: options.provider,\n redirectUrl: constructRedirectUrl(options.redirectUrl),\n errorRedirectUrl: constructRedirectUrl(options.errorRedirectUrl),\n afterCallbackRedirectUrl: constructRedirectUrl(window.location.href),\n codeChallenge,\n state,\n type: \"link\",\n session,\n providerScope: options.providerScope,\n });\n window.location.assign(location);\n await neverResolve();\n}\n\n/**\n * Checks if the current URL has the query parameters for an OAuth callback, and if so, removes them.\n *\n * Must be synchronous for the logic in callOAuthCallback to work without race conditions.\n */\nfunction consumeOAuthCallbackQueryParams(expectedState: string): null | URL {\n const requiredParams = [\"code\", \"state\"];\n const originalUrl = new URL(window.location.href);\n for (const param of requiredParams) {\n if (!originalUrl.searchParams.has(param)) {\n return null;\n }\n }\n\n if (expectedState !== originalUrl.searchParams.get(\"state\")) {\n // If the state doesn't match, then the callback wasn't meant for us.\n // Maybe the website uses another OAuth library?\n return null;\n }\n\n\n const newUrl = new URL(originalUrl);\n for (const param of requiredParams) {\n newUrl.searchParams.delete(param);\n }\n\n // let's get rid of the authorization code in the history as we\n // don't redirect to `redirectUrl` if there's a validation error\n // (as the redirectUrl might be malicious!).\n //\n // We use history.replaceState instead of location.assign(...) to\n // prevent an unnecessary reload\n window.history.replaceState({}, \"\", newUrl.toString());\n\n return originalUrl;\n}\n\nexport async function callOAuthCallback(\n iface: StackClientInterface,\n redirectUrl: string,\n) {\n // note: this part of the function (until the return) needs\n // to be synchronous, to prevent race conditions when\n // callOAuthCallback is called multiple times in parallel\n const { codeVerifier, state } = getVerifierAndState();\n if (!codeVerifier || !state) {\n throw new Error(\"Invalid OAuth callback URL parameters. It seems like the OAuth flow was interrupted, so please try again.\");\n }\n const originalUrl = consumeOAuthCallbackQueryParams(state);\n if (!originalUrl) return null;\n\n // the rest can be asynchronous (we now know that we are the\n // intended recipient of the callback)\n try {\n return await iface.callOAuthCallback({\n oauthParams: originalUrl.searchParams,\n redirectUri: constructRedirectUrl(redirectUrl),\n codeVerifier,\n state,\n });\n } catch (e) {\n throw new StackAssertionError(\"Error signing in during OAuth callback. Please try again.\", { cause: e });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,oBAAoC;AACpC,sBAA6B;AAC7B,iBAAqC;AACrC,oBAA0D;AAE1D,eAAsB,gBACpB,OACA,SAMA;AACA,QAAM,EAAE,eAAe,MAAM,IAAI,UAAM,oCAAqB;AAC5D,QAAM,WAAW,MAAM,MAAM,YAAY;AAAA,IACvC,UAAU,QAAQ;AAAA,IAClB,iBAAa,iCAAqB,QAAQ,WAAW;AAAA,IACrD,sBAAkB,iCAAqB,QAAQ,gBAAgB;AAAA,IAC/D;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,SAAO,SAAS,OAAO,QAAQ;AAC/B,YAAM,8BAAa;AACrB;AAEA,eAAsB,2BACpB,OACA,SAMA,SACA;AACA,QAAM,EAAE,eAAe,MAAM,IAAI,UAAM,oCAAqB;AAC5D,QAAM,WAAW,MAAM,MAAM,YAAY;AAAA,IACvC,UAAU,QAAQ;AAAA,IAClB,iBAAa,iCAAqB,QAAQ,WAAW;AAAA,IACrD,sBAAkB,iCAAqB,QAAQ,gBAAgB;AAAA,IAC/D,8BAA0B,iCAAqB,OAAO,SAAS,IAAI;AAAA,IACnE;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,SAAO,SAAS,OAAO,QAAQ;AAC/B,YAAM,8BAAa;AACrB;AAOA,SAAS,gCAAgC,eAAmC;AAC1E,QAAM,iBAAiB,CAAC,QAAQ,OAAO;AACvC,QAAM,cAAc,IAAI,IAAI,OAAO,SAAS,IAAI;AAChD,aAAW,SAAS,gBAAgB;AAClC,QAAI,CAAC,YAAY,aAAa,IAAI,KAAK,GAAG;AACxC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,kBAAkB,YAAY,aAAa,IAAI,OAAO,GAAG;AAG3D,WAAO;AAAA,EACT;AAGA,QAAM,SAAS,IAAI,IAAI,WAAW;AAClC,aAAW,SAAS,gBAAgB;AAClC,WAAO,aAAa,OAAO,KAAK;AAAA,EAClC;AAQA,SAAO,QAAQ,aAAa,CAAC,GAAG,IAAI,OAAO,SAAS,CAAC;AAErD,SAAO;AACT;AAEA,eAAsB,kBACpB,OACA,aACA;AAIA,QAAM,EAAE,cAAc,MAAM,QAAI,mCAAoB;AACpD,MAAI,CAAC,gBAAgB,CAAC,OAAO;AAC3B,UAAM,IAAI,MAAM,2GAA2G;AAAA,EAC7H;AACA,QAAM,cAAc,gCAAgC,KAAK;AACzD,MAAI,CAAC,YAAa,QAAO;AAIzB,MAAI;AACF,WAAO,MAAM,MAAM,kBAAkB;AAAA,MACnC,aAAa,YAAY;AAAA,MACzB,iBAAa,iCAAqB,WAAW;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,SAAS,GAAG;AACV,UAAM,IAAI,kCAAoB,6DAA6D,EAAE,OAAO,EAAE,CAAC;AAAA,EACzG;AACF;","names":[]}
@@ -38,6 +38,8 @@ __export(cookie_exports, {
38
38
  setOrDeleteCookie: () => setOrDeleteCookie
39
39
  });
40
40
  module.exports = __toCommonJS(cookie_exports);
41
+ var import_force_react_server = require("@stackframe/stack-sc/force-react-server");
42
+ var import_js_cookie = __toESM(require("js-cookie"));
41
43
 
42
44
  // ../../node_modules/.pnpm/oauth4webapi@2.10.4/node_modules/oauth4webapi/build/index.js
43
45
  var USER_AGENT;
@@ -167,8 +169,6 @@ var skipStateCheck = Symbol();
167
169
  var expectNoState = Symbol();
168
170
 
169
171
  // src/lib/cookie.ts
170
- var import_js_cookie = __toESM(require("js-cookie"));
171
- var import_force_react_server = require("@stackframe/stack-sc/force-react-server");
172
172
  function isRscCookieUnavailableError(e) {
173
173
  const allowedMessageSnippets = ["was called outside a request scope", "cookies() expects to have requestAsyncStorage"];
174
174
  return typeof e?.message === "string" && allowedMessageSnippets.some((msg) => e.message.includes(msg));
@@ -227,16 +227,16 @@ async function saveVerifierAndState() {
227
227
  const codeVerifier = generateRandomCodeVerifier();
228
228
  const codeChallenge = await calculatePKCECodeChallenge(codeVerifier);
229
229
  const state = generateRandomState();
230
- setCookie("stack-code-verifier", codeVerifier, { maxAge: 60 * 10 });
231
- setCookie("stack-state", state, { maxAge: 60 * 10 });
230
+ setCookie("stack-outer-code-verifier", codeVerifier, { maxAge: 60 * 10 });
231
+ setCookie("stack-outer-state", state, { maxAge: 60 * 10 });
232
232
  return {
233
233
  codeChallenge,
234
234
  state
235
235
  };
236
236
  }
237
237
  function getVerifierAndState() {
238
- const codeVerifier = getCookie("stack-code-verifier");
239
- const state = getCookie("stack-state");
238
+ const codeVerifier = getCookie("stack-outer-code-verifier");
239
+ const state = getCookie("stack-outer-state");
240
240
  return {
241
241
  codeVerifier,
242
242
  state