@stackframe/stack 2.5.17 → 2.5.19

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 (108) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/components/credential-sign-in.js +4 -1
  3. package/dist/components/credential-sign-in.js.map +1 -1
  4. package/dist/components/elements/sidebar-layout.d.mts +21 -0
  5. package/dist/components/elements/sidebar-layout.d.ts +21 -0
  6. package/dist/components/elements/sidebar-layout.js +125 -0
  7. package/dist/components/elements/sidebar-layout.js.map +1 -0
  8. package/dist/components/elements/user-avatar.d.mts +5 -11
  9. package/dist/components/elements/user-avatar.d.ts +5 -11
  10. package/dist/components/elements/user-avatar.js.map +1 -1
  11. package/dist/components/message-cards/predefined-message-card.d.mts +1 -1
  12. package/dist/components/message-cards/predefined-message-card.d.ts +1 -1
  13. package/dist/components/message-cards/predefined-message-card.js +8 -0
  14. package/dist/components/message-cards/predefined-message-card.js.map +1 -1
  15. package/dist/components/selected-team-switcher.d.mts +1 -0
  16. package/dist/components/selected-team-switcher.d.ts +1 -0
  17. package/dist/components/selected-team-switcher.js +35 -5
  18. package/dist/components/selected-team-switcher.js.map +1 -1
  19. package/dist/components-page/account-settings.js +123 -31
  20. package/dist/components-page/account-settings.js.map +1 -1
  21. package/dist/components-page/auth-page.d.mts +1 -0
  22. package/dist/components-page/auth-page.d.ts +1 -0
  23. package/dist/components-page/auth-page.js +4 -1
  24. package/dist/components-page/auth-page.js.map +1 -1
  25. package/dist/components-page/forgot-password.d.mts +4 -1
  26. package/dist/components-page/forgot-password.d.ts +4 -1
  27. package/dist/components-page/forgot-password.js +55 -7
  28. package/dist/components-page/forgot-password.js.map +1 -1
  29. package/dist/components-page/password-reset.d.mts +6 -2
  30. package/dist/components-page/password-reset.d.ts +6 -2
  31. package/dist/components-page/password-reset.js +100 -8
  32. package/dist/components-page/password-reset.js.map +1 -1
  33. package/dist/components-page/stack-handler.d.mts +1 -0
  34. package/dist/components-page/stack-handler.d.ts +1 -0
  35. package/dist/components-page/stack-handler.js +32 -6
  36. package/dist/components-page/stack-handler.js.map +1 -1
  37. package/dist/{components/password-reset-form.d.mts → components-page/team-creation.d.mts} +2 -3
  38. package/dist/{components/password-reset-form.d.ts → components-page/team-creation.d.ts} +2 -3
  39. package/dist/components-page/team-creation.js +92 -0
  40. package/dist/components-page/team-creation.js.map +1 -0
  41. package/dist/components-page/team-invitation.d.mts +8 -0
  42. package/dist/components-page/team-invitation.d.ts +8 -0
  43. package/dist/components-page/team-invitation.js +141 -0
  44. package/dist/components-page/team-invitation.js.map +1 -0
  45. package/dist/components-page/team-settings.d.mts +8 -0
  46. package/dist/components-page/team-settings.d.ts +8 -0
  47. package/dist/components-page/team-settings.js +139 -0
  48. package/dist/components-page/team-settings.js.map +1 -0
  49. package/dist/esm/components/credential-sign-in.js +4 -1
  50. package/dist/esm/components/credential-sign-in.js.map +1 -1
  51. package/dist/esm/components/elements/sidebar-layout.js +90 -0
  52. package/dist/esm/components/elements/sidebar-layout.js.map +1 -0
  53. package/dist/esm/components/elements/user-avatar.js.map +1 -1
  54. package/dist/esm/components/message-cards/predefined-message-card.js +8 -0
  55. package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
  56. package/dist/esm/components/selected-team-switcher.js +39 -7
  57. package/dist/esm/components/selected-team-switcher.js.map +1 -1
  58. package/dist/esm/components-page/account-settings.js +114 -32
  59. package/dist/esm/components-page/account-settings.js.map +1 -1
  60. package/dist/esm/components-page/auth-page.js +4 -1
  61. package/dist/esm/components-page/auth-page.js.map +1 -1
  62. package/dist/esm/components-page/forgot-password.js +52 -5
  63. package/dist/esm/components-page/forgot-password.js.map +1 -1
  64. package/dist/esm/components-page/password-reset.js +101 -9
  65. package/dist/esm/components-page/password-reset.js.map +1 -1
  66. package/dist/esm/components-page/stack-handler.js +32 -6
  67. package/dist/esm/components-page/stack-handler.js.map +1 -1
  68. package/dist/esm/components-page/team-creation.js +68 -0
  69. package/dist/esm/components-page/team-creation.js.map +1 -0
  70. package/dist/esm/components-page/team-invitation.js +107 -0
  71. package/dist/esm/components-page/team-invitation.js.map +1 -0
  72. package/dist/esm/components-page/team-settings.js +115 -0
  73. package/dist/esm/components-page/team-settings.js.map +1 -0
  74. package/dist/esm/generated/global-css.js +1 -1
  75. package/dist/esm/generated/global-css.js.map +1 -1
  76. package/dist/esm/lib/auth.js +5 -1
  77. package/dist/esm/lib/auth.js.map +1 -1
  78. package/dist/esm/lib/stack-app.js +272 -25
  79. package/dist/esm/lib/stack-app.js.map +1 -1
  80. package/dist/generated/global-css.d.mts +1 -1
  81. package/dist/generated/global-css.d.ts +1 -1
  82. package/dist/generated/global-css.js +1 -1
  83. package/dist/generated/global-css.js.map +1 -1
  84. package/dist/index.d.mts +2 -1
  85. package/dist/index.d.ts +2 -1
  86. package/dist/lib/auth.js +5 -1
  87. package/dist/lib/auth.js.map +1 -1
  88. package/dist/lib/hooks.d.mts +1 -0
  89. package/dist/lib/hooks.d.ts +1 -0
  90. package/dist/lib/stack-app.d.mts +64 -5
  91. package/dist/lib/stack-app.d.ts +64 -5
  92. package/dist/lib/stack-app.js +272 -25
  93. package/dist/lib/stack-app.js.map +1 -1
  94. package/dist/providers/stack-provider-client.d.mts +1 -0
  95. package/dist/providers/stack-provider-client.d.ts +1 -0
  96. package/dist/providers/stack-provider.d.mts +1 -0
  97. package/dist/providers/stack-provider.d.ts +1 -0
  98. package/package.json +10 -6
  99. package/dist/components/forgot-password-form.d.mts +0 -7
  100. package/dist/components/forgot-password-form.d.ts +0 -7
  101. package/dist/components/forgot-password-form.js +0 -83
  102. package/dist/components/forgot-password-form.js.map +0 -1
  103. package/dist/components/password-reset-form.js +0 -135
  104. package/dist/components/password-reset-form.js.map +0 -1
  105. package/dist/esm/components/forgot-password-form.js +0 -59
  106. package/dist/esm/components/forgot-password-form.js.map +0 -1
  107. package/dist/esm/components/password-reset-form.js +0 -105
  108. package/dist/esm/components/password-reset-form.js.map +0 -1
@@ -1 +1 @@
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, captureError } 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 captureError(\"consumeOAuthCallbackQueryParams\", new Error(`Missing required query parameter on OAuth callback: ${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 captureError(\"consumeOAuthCallbackQueryParams\", new Error(`Invalid OAuth callback state: Was this meant for someone else, or did cookies fail?`));\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,oBAAkD;AAClD,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,sCAAa,mCAAmC,IAAI,MAAM,uDAAuD,KAAK,EAAE,CAAC;AACzH,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,kBAAkB,YAAY,aAAa,IAAI,OAAO,GAAG;AAG3D,oCAAa,mCAAmC,IAAI,MAAM,qFAAqF,CAAC;AAChJ,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 { KnownError, StackClientInterface } from \"@stackframe/stack-shared\";\nimport { InternalSession } from \"@stackframe/stack-shared/dist/sessions\";\nimport { StackAssertionError, captureError } 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 captureError(\"consumeOAuthCallbackQueryParams\", new Error(`Missing required query parameter on OAuth callback: ${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 captureError(\"consumeOAuthCallbackQueryParams\", new Error(`Invalid OAuth callback state: Are you using another OAuth authentication with the same callback URL as Stack, or did your cookies reset?`));\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 if (e instanceof KnownError) {\n throw e;\n }\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;AAAA,0BAAiD;AAEjD,oBAAkD;AAClD,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,sCAAa,mCAAmC,IAAI,MAAM,uDAAuD,KAAK,EAAE,CAAC;AACzH,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,kBAAkB,YAAY,aAAa,IAAI,OAAO,GAAG;AAG3D,oCAAa,mCAAmC,IAAI,MAAM,0IAA0I,CAAC;AACrM,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,QAAI,aAAa,gCAAY;AAC3B,YAAM;AAAA,IACR;AACA,UAAM,IAAI,kCAAoB,6DAA6D,EAAE,OAAO,EAAE,CAAC;AAAA,EACzG;AACF;","names":[]}
@@ -8,6 +8,7 @@ import '@stackframe/stack-shared/dist/interface/crud/team-permissions';
8
8
  import '@stackframe/stack-shared/dist/sessions';
9
9
  import '@stackframe/stack-shared/dist/utils/json';
10
10
  import '@stackframe/stack-shared/dist/utils/oauth';
11
+ import '@stackframe/stack-shared/dist/utils/results';
11
12
 
12
13
  type GetUserOptions = GetUserOptions$1<true> & {
13
14
  projectIdMustMatch?: string;
@@ -8,6 +8,7 @@ import '@stackframe/stack-shared/dist/interface/crud/team-permissions';
8
8
  import '@stackframe/stack-shared/dist/sessions';
9
9
  import '@stackframe/stack-shared/dist/utils/json';
10
10
  import '@stackframe/stack-shared/dist/utils/oauth';
11
+ import '@stackframe/stack-shared/dist/utils/results';
11
12
 
12
13
  type GetUserOptions = GetUserOptions$1<true> & {
13
14
  projectIdMustMatch?: string;
@@ -7,6 +7,7 @@ import { TeamPermissionDefinitionsCrud } from '@stackframe/stack-shared/dist/int
7
7
  import { InternalSession } from '@stackframe/stack-shared/dist/sessions';
8
8
  import { ReadonlyJson } from '@stackframe/stack-shared/dist/utils/json';
9
9
  import { ProviderType } from '@stackframe/stack-shared/dist/utils/oauth';
10
+ import { Result } from '@stackframe/stack-shared/dist/utils/results';
10
11
 
11
12
  type RequestLike = {
12
13
  headers: {
@@ -32,6 +33,8 @@ type HandlerUrls = {
32
33
  oauthCallback: string;
33
34
  magicLinkCallback: string;
34
35
  accountSettings: string;
36
+ teamInvitation: string;
37
+ teamCreation: string;
35
38
  error: string;
36
39
  };
37
40
  type OAuthScopesOnSignIn = {
@@ -193,9 +196,13 @@ type BaseUser = {
193
196
  * Whether the user has a password set.
194
197
  */
195
198
  readonly hasPassword: boolean;
199
+ /**
200
+ * @deprecated
201
+ */
196
202
  readonly oauthProviders: readonly {
197
203
  id: string;
198
204
  }[];
205
+ readonly isMultiFactorRequired: boolean;
199
206
  /**
200
207
  * A shorthand method to update multiple fields of the user at once.
201
208
  */
@@ -233,6 +240,9 @@ type UserExtra = {
233
240
  hasPermission(scope: Team, permissionId: string): Promise<boolean>;
234
241
  setSelectedTeam(team: Team | null): Promise<void>;
235
242
  createTeam(data: TeamCreateOptions): Promise<Team>;
243
+ leaveTeam(team: Team): Promise<void>;
244
+ getTeamProfile(team: Team): Promise<EditableTeamMemberProfile>;
245
+ useTeamProfile(team: Team): EditableTeamMemberProfile;
236
246
  } & AsyncStoreProperty<"team", [id: string], Team | null, false> & AsyncStoreProperty<"teams", [], Team[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
237
247
  recursive?: boolean;
238
248
  }], TeamPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
@@ -250,6 +260,7 @@ type UserUpdateOptions = {
250
260
  displayName?: string;
251
261
  clientMetadata?: ReadonlyJson;
252
262
  selectedTeamId?: string | null;
263
+ totpMultiFactorSecret?: Uint8Array | null;
253
264
  };
254
265
  type ServerBaseUser = {
255
266
  setPrimaryEmail(email: string, options?: {
@@ -291,8 +302,15 @@ type ServerUserUpdateOptions = {
291
302
  serverMetadata?: ReadonlyJson;
292
303
  password?: string;
293
304
  } & UserUpdateOptions;
305
+ type ServerUserCreateOptions = {
306
+ primaryEmail: string;
307
+ password: string;
308
+ displayName?: string;
309
+ primaryEmailVerified?: boolean;
310
+ };
294
311
  type Project = {
295
312
  readonly id: string;
313
+ readonly displayName: string;
296
314
  readonly config: ProjectConfig;
297
315
  };
298
316
  type AdminProject = {
@@ -304,6 +322,7 @@ type AdminProject = {
304
322
  readonly isProductionMode: boolean;
305
323
  readonly config: AdminProjectConfig;
306
324
  update(this: AdminProject, update: AdminProjectUpdateOptions): Promise<void>;
325
+ delete(this: AdminProject): Promise<void>;
307
326
  getProductionModeErrors(this: AdminProject): Promise<ProductionModeError[]>;
308
327
  useProductionModeErrors(this: AdminProject): ProductionModeError[];
309
328
  } & Project;
@@ -320,16 +339,21 @@ type AdminProjectCreateOptions = Omit<AdminProjectUpdateOptions, 'displayName'>
320
339
  displayName: string;
321
340
  };
322
341
  type ProjectConfig = {
342
+ readonly signUpEnabled: boolean;
323
343
  readonly credentialEnabled: boolean;
324
344
  readonly magicLinkEnabled: boolean;
345
+ readonly clientTeamCreationEnabled: boolean;
325
346
  readonly oauthProviders: OAuthProviderConfig[];
326
347
  };
327
348
  type OAuthProviderConfig = {
328
349
  readonly id: string;
329
350
  };
330
351
  type AdminProjectConfig = {
352
+ readonly id: string;
353
+ readonly signUpEnabled: boolean;
331
354
  readonly credentialEnabled: boolean;
332
355
  readonly magicLinkEnabled: boolean;
356
+ readonly clientTeamCreationEnabled: boolean;
333
357
  readonly allowLocalhost: boolean;
334
358
  readonly oauthProviders: AdminOAuthProviderConfig[];
335
359
  readonly emailConfig?: AdminEmailConfig;
@@ -337,7 +361,7 @@ type AdminProjectConfig = {
337
361
  readonly createTeamOnSignUp: boolean;
338
362
  readonly teamCreatorDefaultPermissions: AdminTeamPermission[];
339
363
  readonly teamMemberDefaultPermissions: AdminTeamPermission[];
340
- } & OAuthProviderConfig;
364
+ };
341
365
  type AdminEmailConfig = ({
342
366
  type: "standard";
343
367
  senderName: string;
@@ -370,8 +394,10 @@ type AdminProjectConfigUpdateOptions = {
370
394
  handlerPath: string;
371
395
  }[];
372
396
  oauthProviders?: AdminOAuthProviderConfig[];
397
+ signUpEnabled?: boolean;
373
398
  credentialEnabled?: boolean;
374
399
  magicLinkEnabled?: boolean;
400
+ clientTeamCreationEnabled?: boolean;
375
401
  allowLocalhost?: boolean;
376
402
  createTeamOnSignUp?: boolean;
377
403
  emailConfig?: AdminEmailConfig;
@@ -416,22 +442,49 @@ type ApiKeyCreateOptions = {
416
442
  hasSecretServerKey: boolean;
417
443
  hasSuperSecretAdminKey: boolean;
418
444
  };
445
+ type TeamMemberProfile = {
446
+ displayName: string | null;
447
+ profileImageUrl: string | null;
448
+ };
449
+ type TeamMemberProfileUpdateOptions = {
450
+ displayName?: string;
451
+ profileImageUrl?: string | null;
452
+ };
453
+ type EditableTeamMemberProfile = TeamMemberProfile & {
454
+ update(update: TeamMemberProfileUpdateOptions): Promise<void>;
455
+ };
456
+ type TeamUser = {
457
+ id: string;
458
+ teamProfile: TeamMemberProfile;
459
+ };
419
460
  type Team = {
420
461
  id: string;
421
462
  displayName: string;
422
463
  profileImageUrl: string | null;
464
+ inviteUser(options: {
465
+ email: string;
466
+ }): Promise<Result<undefined, KnownErrors["TeamPermissionRequired"]>>;
467
+ listUsers(): Promise<TeamUser[]>;
468
+ useUsers(): TeamUser[];
423
469
  };
424
470
  type TeamCreateOptions = {
425
471
  displayName: string;
426
472
  profileImageUrl?: string;
427
473
  };
474
+ type ServerTeamMemberProfile = TeamMemberProfile;
475
+ type ServerTeamUser = ServerUser & {
476
+ teamProfile: ServerTeamMemberProfile;
477
+ };
428
478
  type ServerTeam = {
429
479
  createdAt: Date;
430
- listUsers(): Promise<ServerUser[]>;
480
+ listUsers(): Promise<ServerTeamUser[]>;
431
481
  useUsers(): ServerUser[];
432
482
  update(update: ServerTeamUpdateOptions): Promise<void>;
433
483
  delete(): Promise<void>;
434
484
  addUser(userId: string): Promise<void>;
485
+ inviteUser(options: {
486
+ email: string;
487
+ }): Promise<Result<undefined, KnownErrors["TeamPermissionRequired"]>>;
435
488
  removeUser(userId: string): Promise<void>;
436
489
  } & Team;
437
490
  type ServerTeamCreateOptions = TeamCreateOptions;
@@ -487,7 +540,7 @@ type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends s
487
540
  signInWithCredential(options: {
488
541
  email: string;
489
542
  password: string;
490
- }): Promise<KnownErrors["EmailPasswordMismatch"] | void>;
543
+ }): Promise<KnownErrors["EmailPasswordMismatch"] | KnownErrors["InvalidTotpCode"] | void>;
491
544
  signUpWithCredential(options: {
492
545
  email: string;
493
546
  password: string;
@@ -500,8 +553,13 @@ type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends s
500
553
  password: string;
501
554
  }): Promise<KnownErrors["VerificationCodeError"] | void>;
502
555
  verifyPasswordResetCode(code: string): Promise<KnownErrors["VerificationCodeError"] | void>;
556
+ verifyTeamInvitationCode(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>;
557
+ acceptTeamInvitation(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>;
558
+ getTeamInvitationDetails(code: string): Promise<Result<{
559
+ teamDisplayName: string;
560
+ }, KnownErrors["VerificationCodeError"]>>;
503
561
  verifyEmail(code: string): Promise<KnownErrors["VerificationCodeError"] | void>;
504
- signInWithMagicLink(code: string): Promise<KnownErrors["VerificationCodeError"] | void>;
562
+ signInWithMagicLink(code: string): Promise<KnownErrors["VerificationCodeError"] | KnownErrors["InvalidTotpCode"] | void>;
505
563
  redirectToOAuthCallback(): Promise<void>;
506
564
  useUser(options: GetUserOptions<HasTokenStore> & {
507
565
  or: 'redirect';
@@ -535,6 +593,7 @@ type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends s
535
593
  * @deprecated use `getUser()` instead
536
594
  */
537
595
  getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null>;
596
+ createUser(options: ServerUserCreateOptions): Promise<ServerUser>;
538
597
  useUser(options: GetUserOptions<HasTokenStore> & {
539
598
  or: 'redirect';
540
599
  }): ProjectCurrentServerUser<ProjectId>;
@@ -587,4 +646,4 @@ type AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultip
587
646
  [key in `use${Capitalize<Name>}`]: (...args: Args) => Value;
588
647
  };
589
648
 
590
- export { type AdminDomainConfig, type AdminEmailConfig, type AdminOAuthProviderConfig, type AdminOwnedProject, type AdminProject, type AdminProjectConfig, type AdminProjectConfigUpdateOptions, type AdminProjectCreateOptions, type AdminProjectUpdateOptions, type AdminTeamPermission, type AdminTeamPermissionDefinition, type AdminTeamPermissionDefinitionCreateOptions, type AdminTeamPermissionDefinitionUpdateOptions, type ApiKey, type ApiKeyBase, type ApiKeyBaseCrudRead, type ApiKeyCreateOptions, type ApiKeyFirstView, type Connection, type CurrentInternalServerUser, type CurrentInternalUser, type CurrentServerUser, type CurrentUser, type GetUserOptions, type HandlerUrls, type OAuthConnection, type OAuthProviderConfig, type OAuthScopesOnSignIn, type Project, type ProjectConfig, type ServerTeam, type ServerTeamCreateOptions, type ServerTeamUpdateOptions, type ServerUser, StackAdminApp, type StackAdminAppConstructorOptions, StackClientApp, type StackClientAppConstructorOptions, type StackClientAppJson, StackServerApp, type StackServerAppConstructorOptions, type Team, type TeamCreateOptions, type TeamPermission, type TokenStoreInit, type User, serverTeamPermissionDefinitionCreateOptionsToCrud, serverTeamPermissionDefinitionUpdateOptionsToCrud, stackAppInternalsSymbol };
649
+ export { type AdminDomainConfig, type AdminEmailConfig, type AdminOAuthProviderConfig, type AdminOwnedProject, type AdminProject, type AdminProjectConfig, type AdminProjectConfigUpdateOptions, type AdminProjectCreateOptions, type AdminProjectUpdateOptions, type AdminTeamPermission, type AdminTeamPermissionDefinition, type AdminTeamPermissionDefinitionCreateOptions, type AdminTeamPermissionDefinitionUpdateOptions, type ApiKey, type ApiKeyBase, type ApiKeyBaseCrudRead, type ApiKeyCreateOptions, type ApiKeyFirstView, type Connection, type CurrentInternalServerUser, type CurrentInternalUser, type CurrentServerUser, type CurrentUser, type EditableTeamMemberProfile, type GetUserOptions, type HandlerUrls, type OAuthConnection, type OAuthProviderConfig, type OAuthScopesOnSignIn, type Project, type ProjectConfig, type ServerTeam, type ServerTeamCreateOptions, type ServerTeamMemberProfile, type ServerTeamUpdateOptions, type ServerTeamUser, type ServerUser, StackAdminApp, type StackAdminAppConstructorOptions, StackClientApp, type StackClientAppConstructorOptions, type StackClientAppJson, StackServerApp, type StackServerAppConstructorOptions, type Team, type TeamCreateOptions, type TeamMemberProfile, type TeamPermission, type TeamUser, type TokenStoreInit, type User, serverTeamPermissionDefinitionCreateOptionsToCrud, serverTeamPermissionDefinitionUpdateOptionsToCrud, stackAppInternalsSymbol };
@@ -7,6 +7,7 @@ import { TeamPermissionDefinitionsCrud } from '@stackframe/stack-shared/dist/int
7
7
  import { InternalSession } from '@stackframe/stack-shared/dist/sessions';
8
8
  import { ReadonlyJson } from '@stackframe/stack-shared/dist/utils/json';
9
9
  import { ProviderType } from '@stackframe/stack-shared/dist/utils/oauth';
10
+ import { Result } from '@stackframe/stack-shared/dist/utils/results';
10
11
 
11
12
  type RequestLike = {
12
13
  headers: {
@@ -32,6 +33,8 @@ type HandlerUrls = {
32
33
  oauthCallback: string;
33
34
  magicLinkCallback: string;
34
35
  accountSettings: string;
36
+ teamInvitation: string;
37
+ teamCreation: string;
35
38
  error: string;
36
39
  };
37
40
  type OAuthScopesOnSignIn = {
@@ -193,9 +196,13 @@ type BaseUser = {
193
196
  * Whether the user has a password set.
194
197
  */
195
198
  readonly hasPassword: boolean;
199
+ /**
200
+ * @deprecated
201
+ */
196
202
  readonly oauthProviders: readonly {
197
203
  id: string;
198
204
  }[];
205
+ readonly isMultiFactorRequired: boolean;
199
206
  /**
200
207
  * A shorthand method to update multiple fields of the user at once.
201
208
  */
@@ -233,6 +240,9 @@ type UserExtra = {
233
240
  hasPermission(scope: Team, permissionId: string): Promise<boolean>;
234
241
  setSelectedTeam(team: Team | null): Promise<void>;
235
242
  createTeam(data: TeamCreateOptions): Promise<Team>;
243
+ leaveTeam(team: Team): Promise<void>;
244
+ getTeamProfile(team: Team): Promise<EditableTeamMemberProfile>;
245
+ useTeamProfile(team: Team): EditableTeamMemberProfile;
236
246
  } & AsyncStoreProperty<"team", [id: string], Team | null, false> & AsyncStoreProperty<"teams", [], Team[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
237
247
  recursive?: boolean;
238
248
  }], TeamPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
@@ -250,6 +260,7 @@ type UserUpdateOptions = {
250
260
  displayName?: string;
251
261
  clientMetadata?: ReadonlyJson;
252
262
  selectedTeamId?: string | null;
263
+ totpMultiFactorSecret?: Uint8Array | null;
253
264
  };
254
265
  type ServerBaseUser = {
255
266
  setPrimaryEmail(email: string, options?: {
@@ -291,8 +302,15 @@ type ServerUserUpdateOptions = {
291
302
  serverMetadata?: ReadonlyJson;
292
303
  password?: string;
293
304
  } & UserUpdateOptions;
305
+ type ServerUserCreateOptions = {
306
+ primaryEmail: string;
307
+ password: string;
308
+ displayName?: string;
309
+ primaryEmailVerified?: boolean;
310
+ };
294
311
  type Project = {
295
312
  readonly id: string;
313
+ readonly displayName: string;
296
314
  readonly config: ProjectConfig;
297
315
  };
298
316
  type AdminProject = {
@@ -304,6 +322,7 @@ type AdminProject = {
304
322
  readonly isProductionMode: boolean;
305
323
  readonly config: AdminProjectConfig;
306
324
  update(this: AdminProject, update: AdminProjectUpdateOptions): Promise<void>;
325
+ delete(this: AdminProject): Promise<void>;
307
326
  getProductionModeErrors(this: AdminProject): Promise<ProductionModeError[]>;
308
327
  useProductionModeErrors(this: AdminProject): ProductionModeError[];
309
328
  } & Project;
@@ -320,16 +339,21 @@ type AdminProjectCreateOptions = Omit<AdminProjectUpdateOptions, 'displayName'>
320
339
  displayName: string;
321
340
  };
322
341
  type ProjectConfig = {
342
+ readonly signUpEnabled: boolean;
323
343
  readonly credentialEnabled: boolean;
324
344
  readonly magicLinkEnabled: boolean;
345
+ readonly clientTeamCreationEnabled: boolean;
325
346
  readonly oauthProviders: OAuthProviderConfig[];
326
347
  };
327
348
  type OAuthProviderConfig = {
328
349
  readonly id: string;
329
350
  };
330
351
  type AdminProjectConfig = {
352
+ readonly id: string;
353
+ readonly signUpEnabled: boolean;
331
354
  readonly credentialEnabled: boolean;
332
355
  readonly magicLinkEnabled: boolean;
356
+ readonly clientTeamCreationEnabled: boolean;
333
357
  readonly allowLocalhost: boolean;
334
358
  readonly oauthProviders: AdminOAuthProviderConfig[];
335
359
  readonly emailConfig?: AdminEmailConfig;
@@ -337,7 +361,7 @@ type AdminProjectConfig = {
337
361
  readonly createTeamOnSignUp: boolean;
338
362
  readonly teamCreatorDefaultPermissions: AdminTeamPermission[];
339
363
  readonly teamMemberDefaultPermissions: AdminTeamPermission[];
340
- } & OAuthProviderConfig;
364
+ };
341
365
  type AdminEmailConfig = ({
342
366
  type: "standard";
343
367
  senderName: string;
@@ -370,8 +394,10 @@ type AdminProjectConfigUpdateOptions = {
370
394
  handlerPath: string;
371
395
  }[];
372
396
  oauthProviders?: AdminOAuthProviderConfig[];
397
+ signUpEnabled?: boolean;
373
398
  credentialEnabled?: boolean;
374
399
  magicLinkEnabled?: boolean;
400
+ clientTeamCreationEnabled?: boolean;
375
401
  allowLocalhost?: boolean;
376
402
  createTeamOnSignUp?: boolean;
377
403
  emailConfig?: AdminEmailConfig;
@@ -416,22 +442,49 @@ type ApiKeyCreateOptions = {
416
442
  hasSecretServerKey: boolean;
417
443
  hasSuperSecretAdminKey: boolean;
418
444
  };
445
+ type TeamMemberProfile = {
446
+ displayName: string | null;
447
+ profileImageUrl: string | null;
448
+ };
449
+ type TeamMemberProfileUpdateOptions = {
450
+ displayName?: string;
451
+ profileImageUrl?: string | null;
452
+ };
453
+ type EditableTeamMemberProfile = TeamMemberProfile & {
454
+ update(update: TeamMemberProfileUpdateOptions): Promise<void>;
455
+ };
456
+ type TeamUser = {
457
+ id: string;
458
+ teamProfile: TeamMemberProfile;
459
+ };
419
460
  type Team = {
420
461
  id: string;
421
462
  displayName: string;
422
463
  profileImageUrl: string | null;
464
+ inviteUser(options: {
465
+ email: string;
466
+ }): Promise<Result<undefined, KnownErrors["TeamPermissionRequired"]>>;
467
+ listUsers(): Promise<TeamUser[]>;
468
+ useUsers(): TeamUser[];
423
469
  };
424
470
  type TeamCreateOptions = {
425
471
  displayName: string;
426
472
  profileImageUrl?: string;
427
473
  };
474
+ type ServerTeamMemberProfile = TeamMemberProfile;
475
+ type ServerTeamUser = ServerUser & {
476
+ teamProfile: ServerTeamMemberProfile;
477
+ };
428
478
  type ServerTeam = {
429
479
  createdAt: Date;
430
- listUsers(): Promise<ServerUser[]>;
480
+ listUsers(): Promise<ServerTeamUser[]>;
431
481
  useUsers(): ServerUser[];
432
482
  update(update: ServerTeamUpdateOptions): Promise<void>;
433
483
  delete(): Promise<void>;
434
484
  addUser(userId: string): Promise<void>;
485
+ inviteUser(options: {
486
+ email: string;
487
+ }): Promise<Result<undefined, KnownErrors["TeamPermissionRequired"]>>;
435
488
  removeUser(userId: string): Promise<void>;
436
489
  } & Team;
437
490
  type ServerTeamCreateOptions = TeamCreateOptions;
@@ -487,7 +540,7 @@ type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends s
487
540
  signInWithCredential(options: {
488
541
  email: string;
489
542
  password: string;
490
- }): Promise<KnownErrors["EmailPasswordMismatch"] | void>;
543
+ }): Promise<KnownErrors["EmailPasswordMismatch"] | KnownErrors["InvalidTotpCode"] | void>;
491
544
  signUpWithCredential(options: {
492
545
  email: string;
493
546
  password: string;
@@ -500,8 +553,13 @@ type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends s
500
553
  password: string;
501
554
  }): Promise<KnownErrors["VerificationCodeError"] | void>;
502
555
  verifyPasswordResetCode(code: string): Promise<KnownErrors["VerificationCodeError"] | void>;
556
+ verifyTeamInvitationCode(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>;
557
+ acceptTeamInvitation(code: string): Promise<Result<undefined, KnownErrors["VerificationCodeError"]>>;
558
+ getTeamInvitationDetails(code: string): Promise<Result<{
559
+ teamDisplayName: string;
560
+ }, KnownErrors["VerificationCodeError"]>>;
503
561
  verifyEmail(code: string): Promise<KnownErrors["VerificationCodeError"] | void>;
504
- signInWithMagicLink(code: string): Promise<KnownErrors["VerificationCodeError"] | void>;
562
+ signInWithMagicLink(code: string): Promise<KnownErrors["VerificationCodeError"] | KnownErrors["InvalidTotpCode"] | void>;
505
563
  redirectToOAuthCallback(): Promise<void>;
506
564
  useUser(options: GetUserOptions<HasTokenStore> & {
507
565
  or: 'redirect';
@@ -535,6 +593,7 @@ type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends s
535
593
  * @deprecated use `getUser()` instead
536
594
  */
537
595
  getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null>;
596
+ createUser(options: ServerUserCreateOptions): Promise<ServerUser>;
538
597
  useUser(options: GetUserOptions<HasTokenStore> & {
539
598
  or: 'redirect';
540
599
  }): ProjectCurrentServerUser<ProjectId>;
@@ -587,4 +646,4 @@ type AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultip
587
646
  [key in `use${Capitalize<Name>}`]: (...args: Args) => Value;
588
647
  };
589
648
 
590
- export { type AdminDomainConfig, type AdminEmailConfig, type AdminOAuthProviderConfig, type AdminOwnedProject, type AdminProject, type AdminProjectConfig, type AdminProjectConfigUpdateOptions, type AdminProjectCreateOptions, type AdminProjectUpdateOptions, type AdminTeamPermission, type AdminTeamPermissionDefinition, type AdminTeamPermissionDefinitionCreateOptions, type AdminTeamPermissionDefinitionUpdateOptions, type ApiKey, type ApiKeyBase, type ApiKeyBaseCrudRead, type ApiKeyCreateOptions, type ApiKeyFirstView, type Connection, type CurrentInternalServerUser, type CurrentInternalUser, type CurrentServerUser, type CurrentUser, type GetUserOptions, type HandlerUrls, type OAuthConnection, type OAuthProviderConfig, type OAuthScopesOnSignIn, type Project, type ProjectConfig, type ServerTeam, type ServerTeamCreateOptions, type ServerTeamUpdateOptions, type ServerUser, StackAdminApp, type StackAdminAppConstructorOptions, StackClientApp, type StackClientAppConstructorOptions, type StackClientAppJson, StackServerApp, type StackServerAppConstructorOptions, type Team, type TeamCreateOptions, type TeamPermission, type TokenStoreInit, type User, serverTeamPermissionDefinitionCreateOptionsToCrud, serverTeamPermissionDefinitionUpdateOptionsToCrud, stackAppInternalsSymbol };
649
+ export { type AdminDomainConfig, type AdminEmailConfig, type AdminOAuthProviderConfig, type AdminOwnedProject, type AdminProject, type AdminProjectConfig, type AdminProjectConfigUpdateOptions, type AdminProjectCreateOptions, type AdminProjectUpdateOptions, type AdminTeamPermission, type AdminTeamPermissionDefinition, type AdminTeamPermissionDefinitionCreateOptions, type AdminTeamPermissionDefinitionUpdateOptions, type ApiKey, type ApiKeyBase, type ApiKeyBaseCrudRead, type ApiKeyCreateOptions, type ApiKeyFirstView, type Connection, type CurrentInternalServerUser, type CurrentInternalUser, type CurrentServerUser, type CurrentUser, type EditableTeamMemberProfile, type GetUserOptions, type HandlerUrls, type OAuthConnection, type OAuthProviderConfig, type OAuthScopesOnSignIn, type Project, type ProjectConfig, type ServerTeam, type ServerTeamCreateOptions, type ServerTeamMemberProfile, type ServerTeamUpdateOptions, type ServerTeamUser, type ServerUser, StackAdminApp, type StackAdminAppConstructorOptions, StackClientApp, type StackClientAppConstructorOptions, type StackClientAppJson, StackServerApp, type StackServerAppConstructorOptions, type Team, type TeamCreateOptions, type TeamMemberProfile, type TeamPermission, type TeamUser, type TokenStoreInit, type User, serverTeamPermissionDefinitionCreateOptionsToCrud, serverTeamPermissionDefinitionUpdateOptionsToCrud, stackAppInternalsSymbol };