@stackframe/stack 2.4.27 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/dist/components/credential-sign-in-form.d.mts +5 -0
- package/dist/components/credential-sign-in-form.d.ts +5 -0
- package/dist/components/{credential-sign-in.js → credential-sign-in-form.js} +33 -23
- package/dist/components/credential-sign-in-form.js.map +1 -0
- package/dist/components/credential-sign-up-form.d.mts +5 -0
- package/dist/components/credential-sign-up-form.d.ts +5 -0
- package/dist/components/{credential-sign-up.js → credential-sign-up-form.js} +34 -24
- package/dist/components/credential-sign-up-form.js.map +1 -0
- package/dist/components/{form-warning.d.mts → elements/form-warning.d.mts} +1 -1
- package/dist/components/{form-warning.d.ts → elements/form-warning.d.ts} +1 -1
- package/dist/components/{form-warning.js → elements/form-warning.js} +7 -4
- package/dist/components/elements/form-warning.js.map +1 -0
- package/dist/components/{maybe-full-page.d.mts → elements/maybe-full-page.d.mts} +3 -3
- package/dist/components/{maybe-full-page.d.ts → elements/maybe-full-page.d.ts} +3 -3
- package/dist/components/{maybe-full-page.js → elements/maybe-full-page.js} +11 -10
- package/dist/components/elements/maybe-full-page.js.map +1 -0
- package/dist/components/{separator-with-text.d.mts → elements/separator-with-text.d.mts} +1 -1
- package/dist/components/{separator-with-text.d.ts → elements/separator-with-text.d.ts} +1 -1
- package/dist/components/{separator-with-text.js → elements/separator-with-text.js} +11 -7
- package/dist/components/elements/separator-with-text.js.map +1 -0
- package/dist/components/elements/ssr-layout-effect.d.mts +7 -0
- package/dist/components/elements/ssr-layout-effect.d.ts +7 -0
- package/dist/{joy.js → components/elements/ssr-layout-effect.js} +17 -8
- package/dist/components/elements/ssr-layout-effect.js.map +1 -0
- package/dist/components/{user-avatar.d.mts → elements/user-avatar.d.mts} +2 -2
- package/dist/components/{user-avatar.d.ts → elements/user-avatar.d.ts} +2 -2
- package/dist/components/elements/user-avatar.js +40 -0
- package/dist/components/elements/user-avatar.js.map +1 -0
- package/dist/components/{forgot-password.d.mts → forgot-password-form.d.mts} +2 -2
- package/dist/components/{forgot-password.d.ts → forgot-password-form.d.ts} +2 -2
- package/dist/components/{forgot-password.js → forgot-password-form.js} +28 -24
- package/dist/components/forgot-password-form.js.map +1 -0
- package/dist/components/magic-link-sign-in-form.d.mts +5 -0
- package/dist/components/magic-link-sign-in-form.d.ts +5 -0
- package/dist/components/{magic-link-sign-in.js → magic-link-sign-in-form.js} +30 -20
- package/dist/components/magic-link-sign-in-form.js.map +1 -0
- package/dist/components/message-cards/known-error-message-card.d.mts +1 -1
- package/dist/components/message-cards/known-error-message-card.d.ts +1 -1
- package/dist/components/message-cards/known-error-message-card.js +10 -16
- package/dist/components/message-cards/known-error-message-card.js.map +1 -1
- package/dist/components/message-cards/message-card.d.mts +3 -3
- package/dist/components/message-cards/message-card.d.ts +3 -3
- package/dist/components/message-cards/message-card.js +11 -17
- package/dist/components/message-cards/message-card.js.map +1 -1
- package/dist/components/message-cards/predefined-message-card.d.mts +1 -1
- package/dist/components/message-cards/predefined-message-card.d.ts +1 -1
- package/dist/components/message-cards/predefined-message-card.js +9 -15
- package/dist/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/components/{oauth-group.d.mts → oauth-button-group.d.mts} +2 -2
- package/dist/components/{oauth-group.d.ts → oauth-button-group.d.ts} +2 -2
- package/dist/components/oauth-button-group.js +43 -0
- package/dist/components/oauth-button-group.js.map +1 -0
- package/dist/components/oauth-button.d.mts +1 -1
- package/dist/components/oauth-button.d.ts +1 -1
- package/dist/components/oauth-button.js +40 -7
- package/dist/components/oauth-button.js.map +1 -1
- package/dist/components/{password-reset-inner.d.mts → password-reset-form.d.mts} +2 -2
- package/dist/components/{password-reset-inner.d.ts → password-reset-form.d.ts} +2 -2
- package/dist/components/{password-reset-inner.js → password-reset-form.js} +35 -30
- package/dist/components/password-reset-form.js.map +1 -0
- package/dist/components/selected-team-switcher.d.mts +12 -2
- package/dist/components/selected-team-switcher.d.ts +12 -2
- package/dist/components/selected-team-switcher.js +43 -35
- package/dist/components/selected-team-switcher.js.map +1 -1
- package/dist/components/user-button.d.mts +3 -3
- package/dist/components/user-button.d.ts +3 -3
- package/dist/components/user-button.js +32 -59
- package/dist/components/user-button.js.map +1 -1
- package/dist/components-page/account-settings.d.mts +1 -1
- package/dist/components-page/account-settings.d.ts +1 -1
- package/dist/components-page/account-settings.js +39 -45
- package/dist/components-page/account-settings.js.map +1 -1
- package/dist/components-page/auth-page.d.mts +1 -1
- package/dist/components-page/auth-page.d.ts +1 -1
- package/dist/components-page/auth-page.js +31 -36
- package/dist/components-page/auth-page.js.map +1 -1
- package/dist/components-page/email-verification.d.mts +1 -1
- package/dist/components-page/email-verification.d.ts +1 -1
- package/dist/components-page/email-verification.js +10 -16
- package/dist/components-page/email-verification.js.map +1 -1
- package/dist/components-page/error-page.d.mts +1 -1
- package/dist/components-page/error-page.d.ts +1 -1
- package/dist/components-page/error-page.js +15 -20
- package/dist/components-page/error-page.js.map +1 -1
- package/dist/components-page/forgot-password.d.mts +1 -1
- package/dist/components-page/forgot-password.d.ts +1 -1
- package/dist/components-page/forgot-password.js +17 -23
- package/dist/components-page/forgot-password.js.map +1 -1
- package/dist/components-page/magic-link-callback.d.mts +1 -1
- package/dist/components-page/magic-link-callback.d.ts +1 -1
- package/dist/components-page/magic-link-callback.js +11 -17
- package/dist/components-page/magic-link-callback.js.map +1 -1
- package/dist/components-page/oauth-callback.d.mts +1 -1
- package/dist/components-page/oauth-callback.d.ts +1 -1
- package/dist/components-page/oauth-callback.js +10 -16
- package/dist/components-page/oauth-callback.js.map +1 -1
- package/dist/components-page/password-reset.d.mts +1 -1
- package/dist/components-page/password-reset.d.ts +1 -1
- package/dist/components-page/password-reset.js +12 -8
- package/dist/components-page/password-reset.js.map +1 -1
- package/dist/components-page/sign-in.d.mts +1 -1
- package/dist/components-page/sign-in.d.ts +1 -1
- package/dist/components-page/sign-in.js +7 -13
- package/dist/components-page/sign-in.js.map +1 -1
- package/dist/components-page/sign-out.d.mts +1 -1
- package/dist/components-page/sign-out.d.ts +1 -1
- package/dist/components-page/sign-out.js +7 -13
- package/dist/components-page/sign-out.js.map +1 -1
- package/dist/components-page/sign-up.d.mts +1 -1
- package/dist/components-page/sign-up.d.ts +1 -1
- package/dist/components-page/sign-up.js +7 -13
- package/dist/components-page/sign-up.js.map +1 -1
- package/dist/components-page/stack-handler.js +22 -32
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components/{credential-sign-in.js → credential-sign-in-form.js} +23 -17
- package/dist/esm/components/credential-sign-in-form.js.map +1 -0
- package/dist/esm/components/{credential-sign-up.js → credential-sign-up-form.js} +23 -17
- package/dist/esm/components/credential-sign-up-form.js.map +1 -0
- package/dist/esm/components/elements/form-warning.js +15 -0
- package/dist/esm/components/elements/form-warning.js.map +1 -0
- package/dist/esm/components/{maybe-full-page.js → elements/maybe-full-page.js} +7 -10
- package/dist/esm/components/elements/maybe-full-page.js.map +1 -0
- package/dist/esm/components/elements/separator-with-text.js +17 -0
- package/dist/esm/components/elements/separator-with-text.js.map +1 -0
- package/dist/esm/components/elements/ssr-layout-effect.js +16 -0
- package/dist/esm/components/elements/ssr-layout-effect.js.map +1 -0
- package/dist/esm/components/elements/user-avatar.js +15 -0
- package/dist/esm/components/elements/user-avatar.js.map +1 -0
- package/dist/esm/components/{forgot-password.js → forgot-password-form.js} +19 -19
- package/dist/esm/components/forgot-password-form.js.map +1 -0
- package/dist/esm/components/{magic-link-sign-in.js → magic-link-sign-in-form.js} +21 -15
- package/dist/esm/components/magic-link-sign-in-form.js.map +1 -0
- package/dist/esm/components/message-cards/known-error-message-card.js +5 -5
- package/dist/esm/components/message-cards/known-error-message-card.js.map +1 -1
- package/dist/esm/components/message-cards/message-card.js +4 -4
- package/dist/esm/components/message-cards/message-card.js.map +1 -1
- package/dist/esm/components/message-cards/predefined-message-card.js +4 -4
- package/dist/esm/components/message-cards/predefined-message-card.js.map +1 -1
- package/dist/esm/components/oauth-button-group.js +19 -0
- package/dist/esm/components/oauth-button-group.js.map +1 -0
- package/dist/esm/components/oauth-button.js +26 -7
- package/dist/esm/components/oauth-button.js.map +1 -1
- package/dist/esm/components/{password-reset-inner.js → password-reset-form.js} +28 -23
- package/dist/esm/components/password-reset-form.js.map +1 -0
- package/dist/esm/components/selected-team-switcher.js +50 -45
- package/dist/esm/components/selected-team-switcher.js.map +1 -1
- package/dist/esm/components/user-button.js +23 -52
- package/dist/esm/components/user-button.js.map +1 -1
- package/dist/esm/components-page/account-settings.js +29 -29
- package/dist/esm/components-page/account-settings.js.map +1 -1
- package/dist/esm/components-page/auth-page.js +25 -24
- package/dist/esm/components-page/auth-page.js.map +1 -1
- package/dist/esm/components-page/email-verification.js +3 -3
- package/dist/esm/components-page/email-verification.js.map +1 -1
- package/dist/esm/components-page/error-page.js +8 -7
- package/dist/esm/components-page/error-page.js.map +1 -1
- package/dist/esm/components-page/forgot-password.js +10 -10
- package/dist/esm/components-page/forgot-password.js.map +1 -1
- package/dist/esm/components-page/magic-link-callback.js +3 -3
- package/dist/esm/components-page/magic-link-callback.js.map +1 -1
- package/dist/esm/components-page/oauth-callback.js +5 -5
- package/dist/esm/components-page/oauth-callback.js.map +1 -1
- package/dist/esm/components-page/password-reset.js +8 -8
- package/dist/esm/components-page/password-reset.js.map +1 -1
- package/dist/esm/components-page/sign-in.js +2 -2
- package/dist/esm/components-page/sign-in.js.map +1 -1
- package/dist/esm/components-page/sign-out.js +3 -3
- package/dist/esm/components-page/sign-out.js.map +1 -1
- package/dist/esm/components-page/sign-up.js +2 -2
- package/dist/esm/components-page/sign-up.js.map +1 -1
- package/dist/esm/components-page/stack-handler.js +11 -11
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/generated/global-css.js +6 -0
- package/dist/esm/generated/global-css.js.map +1 -0
- package/dist/esm/index.js +33 -40
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/stack-app.js +29 -21
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/esm/providers/theme-provider.js +43 -4
- package/dist/esm/providers/theme-provider.js.map +1 -1
- package/dist/esm/utils/browser-script.js +2 -1
- package/dist/esm/utils/browser-script.js.map +1 -1
- package/dist/esm/utils/constants.js +43 -12
- package/dist/esm/utils/constants.js.map +1 -1
- package/dist/generated/global-css.d.mts +3 -0
- package/dist/generated/global-css.d.ts +3 -0
- package/dist/generated/global-css.js +31 -0
- package/dist/generated/global-css.js.map +1 -0
- package/dist/index.d.mts +16 -30
- package/dist/index.d.ts +16 -30
- package/dist/index.js +33 -45
- package/dist/index.js.map +1 -1
- package/dist/lib/stack-app.d.mts +4 -1
- package/dist/lib/stack-app.d.ts +4 -1
- package/dist/lib/stack-app.js +29 -21
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/providers/stack-provider-client.d.mts +3 -3
- package/dist/providers/stack-provider-client.d.ts +3 -3
- package/dist/providers/stack-provider.d.mts +2 -2
- package/dist/providers/stack-provider.d.ts +2 -2
- package/dist/providers/styled-components-registry.d.mts +2 -2
- package/dist/providers/styled-components-registry.d.ts +2 -2
- package/dist/providers/theme-provider.d.mts +34 -17
- package/dist/providers/theme-provider.d.ts +34 -17
- package/dist/providers/theme-provider.js +43 -4
- package/dist/providers/theme-provider.js.map +1 -1
- package/dist/utils/browser-script.js +2 -1
- package/dist/utils/browser-script.js.map +1 -1
- package/dist/utils/constants.d.mts +43 -12
- package/dist/utils/constants.d.ts +43 -12
- package/dist/utils/constants.js +44 -13
- package/dist/utils/constants.js.map +1 -1
- package/package.json +25 -32
- package/dist/components/credential-sign-in.d.mts +0 -5
- package/dist/components/credential-sign-in.d.ts +0 -5
- package/dist/components/credential-sign-in.js.map +0 -1
- package/dist/components/credential-sign-up.d.mts +0 -5
- package/dist/components/credential-sign-up.d.ts +0 -5
- package/dist/components/credential-sign-up.js.map +0 -1
- package/dist/components/forgot-password.js.map +0 -1
- package/dist/components/form-warning.js.map +0 -1
- package/dist/components/magic-link-sign-in.d.mts +0 -5
- package/dist/components/magic-link-sign-in.d.ts +0 -5
- package/dist/components/magic-link-sign-in.js.map +0 -1
- package/dist/components/maybe-full-page.js.map +0 -1
- package/dist/components/oauth-group.js +0 -49
- package/dist/components/oauth-group.js.map +0 -1
- package/dist/components/password-field.d.mts +0 -5
- package/dist/components/password-field.d.ts +0 -5
- package/dist/components/password-field.js +0 -111
- package/dist/components/password-field.js.map +0 -1
- package/dist/components/password-reset-inner.js.map +0 -1
- package/dist/components/separator-with-text.js.map +0 -1
- package/dist/components/user-avatar.js +0 -56
- package/dist/components/user-avatar.js.map +0 -1
- package/dist/components-core/avatar.d.mts +0 -8
- package/dist/components-core/avatar.d.ts +0 -8
- package/dist/components-core/avatar.js +0 -94
- package/dist/components-core/avatar.js.map +0 -1
- package/dist/components-core/button.d.mts +0 -13
- package/dist/components-core/button.d.ts +0 -13
- package/dist/components-core/button.js +0 -217
- package/dist/components-core/button.js.map +0 -1
- package/dist/components-core/card.d.mts +0 -8
- package/dist/components-core/card.d.ts +0 -8
- package/dist/components-core/card.js +0 -89
- package/dist/components-core/card.js.map +0 -1
- package/dist/components-core/collapsible.d.mts +0 -8
- package/dist/components-core/collapsible.d.ts +0 -8
- package/dist/components-core/collapsible.js +0 -50
- package/dist/components-core/collapsible.js.map +0 -1
- package/dist/components-core/container.d.mts +0 -8
- package/dist/components-core/container.d.ts +0 -8
- package/dist/components-core/container.js +0 -70
- package/dist/components-core/container.js.map +0 -1
- package/dist/components-core/dropdown.d.mts +0 -15
- package/dist/components-core/dropdown.d.ts +0 -15
- package/dist/components-core/dropdown.js +0 -149
- package/dist/components-core/dropdown.js.map +0 -1
- package/dist/components-core/index.d.mts +0 -59
- package/dist/components-core/index.d.ts +0 -59
- package/dist/components-core/index.js +0 -148
- package/dist/components-core/index.js.map +0 -1
- package/dist/components-core/input.d.mts +0 -6
- package/dist/components-core/input.d.ts +0 -6
- package/dist/components-core/input.js +0 -119
- package/dist/components-core/input.js.map +0 -1
- package/dist/components-core/label.d.mts +0 -6
- package/dist/components-core/label.d.ts +0 -6
- package/dist/components-core/label.js +0 -72
- package/dist/components-core/label.js.map +0 -1
- package/dist/components-core/link.d.mts +0 -10
- package/dist/components-core/link.d.ts +0 -10
- package/dist/components-core/link.js +0 -73
- package/dist/components-core/link.js.map +0 -1
- package/dist/components-core/popover.d.mts +0 -8
- package/dist/components-core/popover.d.ts +0 -8
- package/dist/components-core/popover.js +0 -81
- package/dist/components-core/popover.js.map +0 -1
- package/dist/components-core/separator.d.mts +0 -6
- package/dist/components-core/separator.d.ts +0 -6
- package/dist/components-core/separator.js +0 -71
- package/dist/components-core/separator.js.map +0 -1
- package/dist/components-core/skeleton.d.mts +0 -7
- package/dist/components-core/skeleton.d.ts +0 -7
- package/dist/components-core/skeleton.js +0 -87
- package/dist/components-core/skeleton.js.map +0 -1
- package/dist/components-core/tabs.d.mts +0 -9
- package/dist/components-core/tabs.d.ts +0 -9
- package/dist/components-core/tabs.js +0 -124
- package/dist/components-core/tabs.js.map +0 -1
- package/dist/components-core/text.d.mts +0 -10
- package/dist/components-core/text.d.ts +0 -10
- package/dist/components-core/text.js +0 -98
- package/dist/components-core/text.js.map +0 -1
- package/dist/components-core-joy/button.d.mts +0 -6
- package/dist/components-core-joy/button.d.ts +0 -6
- package/dist/components-core-joy/button.js +0 -88
- package/dist/components-core-joy/button.js.map +0 -1
- package/dist/components-core-joy/input.d.mts +0 -5
- package/dist/components-core-joy/input.d.ts +0 -5
- package/dist/components-core-joy/input.js +0 -53
- package/dist/components-core-joy/input.js.map +0 -1
- package/dist/components-core-joy/separator.d.mts +0 -6
- package/dist/components-core-joy/separator.d.ts +0 -6
- package/dist/components-core-joy/separator.js +0 -52
- package/dist/components-core-joy/separator.js.map +0 -1
- package/dist/components-core-joy/tabs.d.mts +0 -9
- package/dist/components-core-joy/tabs.d.ts +0 -9
- package/dist/components-core-joy/tabs.js +0 -67
- package/dist/components-core-joy/tabs.js.map +0 -1
- package/dist/components-core-joy/text.d.mts +0 -9
- package/dist/components-core-joy/text.d.ts +0 -9
- package/dist/components-core-joy/text.js +0 -70
- package/dist/components-core-joy/text.js.map +0 -1
- package/dist/esm/components/credential-sign-in.js.map +0 -1
- package/dist/esm/components/credential-sign-up.js.map +0 -1
- package/dist/esm/components/forgot-password.js.map +0 -1
- package/dist/esm/components/form-warning.js +0 -16
- package/dist/esm/components/form-warning.js.map +0 -1
- package/dist/esm/components/magic-link-sign-in.js.map +0 -1
- package/dist/esm/components/maybe-full-page.js.map +0 -1
- package/dist/esm/components/oauth-group.js +0 -19
- package/dist/esm/components/oauth-group.js.map +0 -1
- package/dist/esm/components/password-field.js +0 -81
- package/dist/esm/components/password-field.js.map +0 -1
- package/dist/esm/components/password-reset-inner.js.map +0 -1
- package/dist/esm/components/separator-with-text.js +0 -17
- package/dist/esm/components/separator-with-text.js.map +0 -1
- package/dist/esm/components/user-avatar.js +0 -25
- package/dist/esm/components/user-avatar.js.map +0 -1
- package/dist/esm/components-core/avatar.js +0 -57
- package/dist/esm/components-core/avatar.js.map +0 -1
- package/dist/esm/components-core/button.js +0 -183
- package/dist/esm/components-core/button.js.map +0 -1
- package/dist/esm/components-core/card.js +0 -52
- package/dist/esm/components-core/card.js.map +0 -1
- package/dist/esm/components-core/collapsible.js +0 -14
- package/dist/esm/components-core/collapsible.js.map +0 -1
- package/dist/esm/components-core/container.js +0 -36
- package/dist/esm/components-core/container.js.map +0 -1
- package/dist/esm/components-core/dropdown.js +0 -110
- package/dist/esm/components-core/dropdown.js.map +0 -1
- package/dist/esm/components-core/index.js +0 -94
- package/dist/esm/components-core/index.js.map +0 -1
- package/dist/esm/components-core/input.js +0 -85
- package/dist/esm/components-core/input.js.map +0 -1
- package/dist/esm/components-core/label.js +0 -38
- package/dist/esm/components-core/label.js.map +0 -1
- package/dist/esm/components-core/link.js +0 -39
- package/dist/esm/components-core/link.js.map +0 -1
- package/dist/esm/components-core/popover.js +0 -44
- package/dist/esm/components-core/popover.js.map +0 -1
- package/dist/esm/components-core/separator.js +0 -37
- package/dist/esm/components-core/separator.js.map +0 -1
- package/dist/esm/components-core/skeleton.js +0 -53
- package/dist/esm/components-core/skeleton.js.map +0 -1
- package/dist/esm/components-core/tabs.js +0 -86
- package/dist/esm/components-core/tabs.js.map +0 -1
- package/dist/esm/components-core/text.js +0 -64
- package/dist/esm/components-core/text.js.map +0 -1
- package/dist/esm/components-core-joy/button.js +0 -54
- package/dist/esm/components-core-joy/button.js.map +0 -1
- package/dist/esm/components-core-joy/input.js +0 -19
- package/dist/esm/components-core-joy/input.js.map +0 -1
- package/dist/esm/components-core-joy/separator.js +0 -18
- package/dist/esm/components-core-joy/separator.js.map +0 -1
- package/dist/esm/components-core-joy/tabs.js +0 -30
- package/dist/esm/components-core-joy/tabs.js.map +0 -1
- package/dist/esm/components-core-joy/text.js +0 -36
- package/dist/esm/components-core-joy/text.js.map +0 -1
- package/dist/esm/joy.js +0 -6
- package/dist/esm/joy.js.map +0 -1
- package/dist/esm/providers/component-provider.js +0 -77
- package/dist/esm/providers/component-provider.js.map +0 -1
- package/dist/esm/providers/design-provider.js +0 -37
- package/dist/esm/providers/design-provider.js.map +0 -1
- package/dist/esm/providers/joy-provider.js +0 -36
- package/dist/esm/providers/joy-provider.js.map +0 -1
- package/dist/joy.d.mts +0 -16
- package/dist/joy.d.ts +0 -16
- package/dist/joy.js.map +0 -1
- package/dist/providers/component-provider.d.mts +0 -113
- package/dist/providers/component-provider.d.ts +0 -113
- package/dist/providers/component-provider.js +0 -96
- package/dist/providers/component-provider.js.map +0 -1
- package/dist/providers/design-provider.d.mts +0 -34
- package/dist/providers/design-provider.d.ts +0 -34
- package/dist/providers/design-provider.js +0 -62
- package/dist/providers/design-provider.js.map +0 -1
- package/dist/providers/joy-provider.d.mts +0 -36
- package/dist/providers/joy-provider.d.ts +0 -36
- package/dist/providers/joy-provider.js +0 -61
- package/dist/providers/joy-provider.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/stack-app.ts"],"sourcesContent":["import React, { use, useCallback, useMemo } from \"react\";\nimport { KnownError, KnownErrors, OAuthProviderConfigJson, ServerUserJson, StackAdminInterface, StackClientInterface, StackServerInterface } from \"@stackframe/stack-shared\";\nimport { deleteCookie, getCookie, setOrDeleteCookie } from \"./cookie\";\nimport { StackAssertionError, throwErr } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { generateUuid } from \"@stackframe/stack-shared/dist/utils/uuids\";\nimport { AsyncResult, Result } from \"@stackframe/stack-shared/dist/utils/results\";\nimport { suspendIfSsr } from \"@stackframe/stack-shared/dist/utils/react\";\nimport { Store } from \"@stackframe/stack-shared/dist/utils/stores\";\nimport { ClientProjectJson, UserJson, ProjectJson, EmailConfigJson, DomainConfigJson, getProductionModeErrors, ProductionModeError, UserUpdateJson, TeamJson, PermissionDefinitionJson, PermissionDefinitionScopeJson, TeamMemberJson, StandardProvider } from \"@stackframe/stack-shared/dist/interface/clientInterface\";\nimport { isBrowserLike } from \"@stackframe/stack-shared/dist/utils/env\";\nimport { addNewOAuthProviderOrScope, callOAuthCallback, signInWithOAuth } from \"./auth\";\nimport * as NextNavigationUnscrambled from \"next/navigation\"; // import the entire module to get around some static compiler warnings emitted by Next.js in some cases\nimport { ReadonlyJson } from \"@stackframe/stack-shared/dist/utils/json\";\nimport { constructRedirectUrl } from \"../utils/url\";\nimport { deepPlainEquals, filterUndefined, omit, pick } from \"@stackframe/stack-shared/dist/utils/objects\";\nimport { ReactPromise, neverResolve, resolved, runAsynchronously, wait } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { AsyncCache } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { ApiKeySetBaseJson, ApiKeySetCreateOptions, ApiKeySetFirstViewJson, ApiKeySetJson, ProjectUpdateOptions } from \"@stackframe/stack-shared/dist/interface/adminInterface\";\nimport { suspend } from \"@stackframe/stack-shared/dist/utils/react\";\nimport { EmailTemplateType, ServerPermissionDefinitionCustomizableJson, ServerPermissionDefinitionJson, ServerTeamCustomizableJson, ServerTeamJson, ServerTeamMemberJson, ServerUserUpdateJson } from \"@stackframe/stack-shared/dist/interface/serverInterface\";\nimport { EmailTemplateCrud, ListEmailTemplatesCrud } from \"@stackframe/stack-shared/dist/interface/crud/email-templates\";\nimport { scrambleDuringCompileTime } from \"@stackframe/stack-shared/dist/utils/compile-time\";\nimport { isReactServer } from \"@stackframe/stack-sc\";\nimport * as cookie from \"cookie\";\nimport { InternalSession } from \"@stackframe/stack-shared/dist/sessions\";\nimport { useTrigger } from \"@stackframe/stack-shared/dist/hooks/use-trigger\";\nimport { mergeScopeStrings } from \"@stackframe/stack-shared/dist/utils/strings\";\n\n\n// NextNavigation.useRouter does not exist in react-server environments and some bundlers try to be helpful and throw a warning. Ignore the warning.\nconst NextNavigation = scrambleDuringCompileTime(NextNavigationUnscrambled);\n\nconst clientVersion = process.env.STACK_COMPILE_TIME_CLIENT_PACKAGE_VERSION ?? throwErr(\"Missing STACK_COMPILE_TIME_CLIENT_PACKAGE_VERSION. This should be a compile-time variable set by Stack's build system.\");\n\ntype RequestLike = {\n headers: {\n get: (name: string) => string | null,\n },\n};\n\nexport type TokenStoreInit<HasTokenStore extends boolean = boolean> =\n HasTokenStore extends true ? (\n | \"cookie\"\n | \"nextjs-cookie\"\n | \"memory\"\n | RequestLike\n | { accessToken: string, refreshToken: string }\n )\n : HasTokenStore extends false ? null\n : TokenStoreInit<true> | TokenStoreInit<false>;\n\nexport type HandlerUrls = {\n handler: string,\n signIn: string,\n afterSignIn: string,\n signUp: string,\n afterSignUp: string,\n signOut: string,\n afterSignOut: string,\n emailVerification: string,\n passwordReset: string,\n forgotPassword: string,\n home: string,\n oauthCallback: string,\n magicLinkCallback: string,\n accountSettings: string,\n error: string,\n}\n\nexport type OAuthScopesOnSignIn = {\n [key in StandardProvider]: string[];\n};\n\n\ntype ProjectCurrentUser<ProjectId> = ProjectId extends \"internal\" ? CurrentInternalUser : CurrentUser;\ntype ProjectCurrentServerUser<ProjectId> = ProjectId extends \"internal\" ? CurrentInternalServerUser : CurrentServerUser;\n\nfunction permissionDefinitionScopeToType(scope: PermissionDefinitionScopeJson): 'team' | 'global' {\n return ({\"any-team\": \"team\", \"specific-team\": \"team\", \"global\": \"global\"} as const)[scope.type];\n}\n\nfunction getUrls(partial: Partial<HandlerUrls>): HandlerUrls {\n const handler = partial.handler ?? \"/handler\";\n return {\n handler,\n signIn: `${handler}/signin`,\n afterSignIn: \"/\",\n signUp: `${handler}/signup`,\n afterSignUp: \"/\",\n signOut: `${handler}/signout`,\n afterSignOut: \"/\",\n emailVerification: `${handler}/email-verification`,\n passwordReset: `${handler}/password-reset`,\n forgotPassword: `${handler}/forgot-password`,\n oauthCallback: `${handler}/oauth-callback`,\n magicLinkCallback: `${handler}/magic-link-callback`,\n home: \"/\",\n accountSettings: `${handler}/account-settings`,\n error: `${handler}/error`,\n ...filterUndefined(partial),\n };\n}\n\nasync function _redirectTo(url: string, options?: { replace?: boolean }) {\n if (isReactServer) {\n NextNavigation.redirect(url, options?.replace ? NextNavigation.RedirectType.replace : NextNavigation.RedirectType.push);\n } else {\n if (options?.replace) {\n window.location.replace(url);\n } else {\n window.location.assign(url);\n }\n await wait(2000);\n }\n}\n\nfunction getDefaultProjectId() {\n return process.env.NEXT_PUBLIC_STACK_PROJECT_ID || throwErr(new Error(\"Welcome to Stack! It seems that you haven't provided a project ID. Please create a project on the Stack dashboard at https://app.stack-auth.com and put it in the NEXT_PUBLIC_STACK_PROJECT_ID environment variable.\"));\n}\n\nfunction getDefaultPublishableClientKey() {\n return process.env.NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY || throwErr(new Error(\"Welcome to Stack! It seems that you haven't provided a publishable client key. Please create an API key for your project on the Stack dashboard at https://app.stack-auth.com and copy your publishable client key into the NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY environment variable.\"));\n}\n\nfunction getDefaultSecretServerKey() {\n return process.env.STACK_SECRET_SERVER_KEY || throwErr(new Error(\"No secret server key provided. Please copy your key from the Stack dashboard and put your it in the STACK_SECRET_SERVER_KEY environment variable.\"));\n}\n\nfunction getDefaultSuperSecretAdminKey() {\n return process.env.STACK_SUPER_SECRET_ADMIN_KEY || throwErr(new Error(\"No super secret admin key provided. Please copy your key from the Stack dashboard and put it in the STACK_SUPER_SECRET_ADMIN_KEY environment variable.\"));\n}\n\nfunction getDefaultBaseUrl() {\n return process.env.NEXT_PUBLIC_STACK_URL || defaultBaseUrl;\n}\n\nexport type StackClientAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = {\n baseUrl?: string,\n projectId?: ProjectId,\n publishableClientKey?: string,\n urls?: Partial<HandlerUrls>,\n oauthScopesOnSignIn?: Partial<OAuthScopesOnSignIn>,\n\n // we intersect with TokenStoreInit in the beginning to make TypeScript error messages easier to read\n tokenStore: TokenStoreInit<HasTokenStore>,\n};\n\nexport type StackServerAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & {\n secretServerKey?: string,\n};\n\nexport type StackAdminAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = (\n | (\n & StackServerAppConstructorOptions<HasTokenStore, ProjectId>\n & {\n superSecretAdminKey?: string,\n }\n )\n | (\n & Omit<StackServerAppConstructorOptions<HasTokenStore, ProjectId>, \"publishableClientKey\" | \"secretServerKey\">\n & {\n projectOwnerSession: InternalSession,\n }\n )\n);\n\nexport type StackClientAppJson<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & {\n uniqueIdentifier: string,\n // note: if you add more fields here, make sure to ensure the checkString in the constructor has/doesn't have them\n};\n\nconst defaultBaseUrl = \"https://app.stack-auth.com\";\n\ntype TokenObject = {\n accessToken: string | null,\n refreshToken: string | null,\n};\n\nfunction createEmptyTokenStore() {\n return new Store<TokenObject>({\n refreshToken: null,\n accessToken: null,\n });\n}\n\nconst loadingSentinel = Symbol(\"stackAppCacheLoadingSentinel\");\nconst cachePromiseByComponentId = new Map<string, Promise<unknown>>();\nfunction useAsyncCache<D extends any[], T>(cache: AsyncCache<D, T>, dependencies: D, caller: string): T {\n // we explicitly don't want to run this hook in SSR\n suspendIfSsr(caller);\n\n const id = React.useId();\n\n const subscribe = useCallback((cb: () => void) => {\n const { unsubscribe } = cache.onStateChange(dependencies, () => {\n cachePromiseByComponentId.delete(id);\n cb();\n });\n return unsubscribe;\n }, [cache, ...dependencies]);\n const getSnapshot = useCallback(() => {\n // React checks whether a promise passed to `use` is still the same as the previous one by comparing the reference.\n // If we didn't cache here, this wouldn't work because the promise would be recreated every time the value changes.\n if (!cachePromiseByComponentId.has(id)) {\n cachePromiseByComponentId.set(id, cache.getOrWait(dependencies, \"read-write\"));\n }\n return cachePromiseByComponentId.get(id) as ReactPromise<T>;\n }, [cache, ...dependencies]);\n\n // note: we must use React.useSyncExternalStore instead of importing the function directly, as it will otherwise\n // throw an error (\"can't import useSyncExternalStore from the server\")\n const promise = React.useSyncExternalStore(\n subscribe,\n getSnapshot,\n () => throwErr(new Error(\"getServerSnapshot should never be called in useAsyncCache because we restrict to CSR earlier\"))\n );\n\n return use(promise);\n}\n\nfunction useStore<T>(store: Store<T>): T {\n const subscribe = useCallback((cb: () => void) => {\n const { unsubscribe } = store.onChange(() => cb());\n return unsubscribe;\n }, [store]);\n const getSnapshot = useCallback(() => store.get(), [store]);\n\n return React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n\nexport const stackAppInternalsSymbol = Symbol.for(\"StackAppInternals\");\n\nconst allClientApps = new Map<string, [checkString: string, app: StackClientApp<any, any>]>();\n\nconst createCache = <D extends any[], T>(fetcher: (dependencies: D) => Promise<T>) => {\n return new AsyncCache<D, T>(\n async (dependencies) => await fetcher(dependencies),\n {},\n );\n};\n\nconst createCacheBySession = <D extends any[], T>(fetcher: (session: InternalSession, extraDependencies: D) => Promise<T> ) => {\n return new AsyncCache<[InternalSession, ...D], T>(\n async ([session, ...extraDependencies]) => await fetcher(session, extraDependencies),\n {\n onSubscribe: ([session], refresh) => {\n const handler = session.onInvalidate(() => refresh());\n return () => handler.unsubscribe();\n },\n },\n );\n};\n\nlet numberOfAppsCreated = 0;\n\nclass _StackClientAppImpl<HasTokenStore extends boolean, ProjectId extends string = string> {\n protected _uniqueIdentifier: string | undefined = undefined;\n protected _interface: StackClientInterface;\n protected readonly _tokenStoreInit: TokenStoreInit<HasTokenStore>;\n protected readonly _urlOptions: Partial<HandlerUrls>;\n protected readonly _oauthScopesOnSignIn: Partial<OAuthScopesOnSignIn>;\n\n private __DEMO_ENABLE_SLIGHT_FETCH_DELAY = false;\n\n private readonly _currentUserCache = createCacheBySession(async (session) => {\n if (this.__DEMO_ENABLE_SLIGHT_FETCH_DELAY) {\n await wait(2000);\n }\n const user = await this._interface.getClientUserByToken(session);\n return Result.or(user, null);\n });\n private readonly _currentProjectCache = createCache(async () => {\n return Result.orThrow(await this._interface.getClientProject());\n });\n private readonly _ownedProjectsCache = createCacheBySession(async (session) => {\n return await this._interface.listProjects(session);\n });\n private readonly _currentUserPermissionsCache = createCacheBySession<\n [string, 'team' | 'global', boolean], \n PermissionDefinitionJson[]\n >(async (session, [teamId, type, direct]) => {\n return await this._interface.listClientUserTeamPermissions({ teamId, type, direct }, session);\n });\n private readonly _currentUserTeamsCache = createCacheBySession(async (session) => {\n return await this._interface.listClientUserTeams(session);\n });\n private readonly _currentUserOAuthConnectionAccessTokensCache = createCacheBySession<[string, string], { accessToken: string } | null>(\n async (session, [accountId, scope]) => {\n try {\n return await this._interface.getAccessToken(accountId, scope || \"\", session);\n } catch (err) {\n if (!(err instanceof KnownErrors.OAuthConnectionDoesNotHaveRequiredScope || err instanceof KnownErrors.OAuthConnectionNotConnectedToUser)) {\n throw err;\n }\n }\n return null;\n }\n );\n private readonly _currentUserOAuthConnectionCache = createCacheBySession<[StandardProvider, string, boolean], OAuthConnection | null>(\n async (session, [connectionId, scope, redirect]) => {\n const user = await this._currentUserCache.getOrWait([session], \"write-only\");\n\n let hasConnection = true;\n if (!user || !user.oauthProviders.find((p) => p === connectionId)) {\n hasConnection = false;\n }\n const token = await this._currentUserOAuthConnectionAccessTokensCache.getOrWait([session, connectionId, scope || \"\"], \"write-only\");\n if (!token) {\n hasConnection = false;\n }\n\n if (!hasConnection && redirect) {\n await addNewOAuthProviderOrScope(\n this._interface, \n { \n provider: connectionId, \n redirectUrl: this.urls.oauthCallback,\n errorRedirectUrl: this.urls.error, \n providerScope: mergeScopeStrings(scope || \"\", (this._oauthScopesOnSignIn[connectionId] ?? []).join(\" \")),\n },\n session,\n );\n return await neverResolve();\n } else if (!hasConnection) {\n return null;\n }\n\n const app = this;\n return {\n id: connectionId,\n async getAccessToken() {\n const result = await app._currentUserOAuthConnectionAccessTokensCache.getOrWait([session, connectionId, scope || \"\"], \"write-only\");\n if (!result) {\n throw new StackAssertionError(\"No access token available\");\n }\n return result;\n },\n useAccessToken() {\n const result = useAsyncCache(app._currentUserOAuthConnectionAccessTokensCache, [session, connectionId, scope || \"\"], \"oauthAccount.useAccessToken()\");\n if (!result) {\n throw new StackAssertionError(\"No access token available\");\n }\n return result;\n }\n };\n }\n );\n\n\n constructor(protected readonly _options:\n & {\n uniqueIdentifier?: string,\n checkString?: string,\n }\n & (\n | StackClientAppConstructorOptions<HasTokenStore, ProjectId>\n | Pick<StackClientAppConstructorOptions<HasTokenStore, ProjectId>, \"tokenStore\" | \"urls\" | \"oauthScopesOnSignIn\"> & {\n interface: StackClientInterface,\n }\n )\n ) {\n if (\"interface\" in _options) {\n this._interface = _options.interface;\n } else {\n this._interface = new StackClientInterface({\n baseUrl: _options.baseUrl ?? getDefaultBaseUrl(),\n projectId: _options.projectId ?? getDefaultProjectId(),\n clientVersion,\n publishableClientKey: _options.publishableClientKey ?? getDefaultPublishableClientKey(),\n });\n }\n\n this._tokenStoreInit = _options.tokenStore;\n this._urlOptions = _options.urls ?? {};\n this._oauthScopesOnSignIn = _options.oauthScopesOnSignIn ?? {};\n\n if (_options.uniqueIdentifier) {\n this._uniqueIdentifier = _options.uniqueIdentifier;\n this._initUniqueIdentifier();\n }\n\n numberOfAppsCreated++;\n if (numberOfAppsCreated > 10) {\n (process.env.NODE_ENV === \"development\" ? console.log : console.warn)(`You have created more than 10 Stack apps (${numberOfAppsCreated}). This is usually a sign of a memory leak, but can sometimes be caused by hot reload of your tech stack. In production, make sure to minimize the number of Stack apps per page (usually, one per project).`);\n }\n }\n\n protected _initUniqueIdentifier() {\n if (!this._uniqueIdentifier) {\n throw new StackAssertionError(\"Unique identifier not initialized\");\n }\n if (allClientApps.has(this._uniqueIdentifier)) {\n throw new StackAssertionError(\"A Stack client app with the same unique identifier already exists\");\n }\n allClientApps.set(this._uniqueIdentifier, [this._options.checkString ?? \"default check string\", this]);\n }\n\n /**\n * Cloudflare workers does not allow use of randomness on the global scope (on which the Stack app is probably\n * initialized). For that reason, we generate the unique identifier lazily when it is first needed.\n */\n protected _getUniqueIdentifier() {\n if (!this._uniqueIdentifier) {\n this._uniqueIdentifier = generateUuid();\n this._initUniqueIdentifier();\n }\n return this._uniqueIdentifier!;\n }\n\n protected async _checkFeatureSupport(featureName: string, options: any) {\n return await this._interface.checkFeatureSupport({ ...options, featureName });\n }\n\n protected _useCheckFeatureSupport(featureName: string, options: any): never {\n runAsynchronously(this._checkFeatureSupport(featureName, options));\n throw new StackAssertionError(`${featureName} is not currently supported. Please reach out to Stack support for more information.`);\n }\n\n protected _memoryTokenStore = createEmptyTokenStore();\n protected _requestTokenStores = new WeakMap<RequestLike, Store<TokenObject>>();\n protected _storedCookieTokenStore: Store<TokenObject> | null = null;\n protected get _refreshTokenCookieName() {\n return `stack-refresh-${this.projectId}`;\n }\n protected _getTokensFromCookies(cookies: { refreshTokenCookie: string | null, accessTokenCookie: string | null }): TokenObject {\n const refreshToken = cookies.refreshTokenCookie;\n const accessTokenObject = cookies.accessTokenCookie?.startsWith('[\\\"') ? JSON.parse(cookies.accessTokenCookie) : null; // gotta check for validity first for backwards-compat, and also in case someone messes with the cookie value\n const accessToken = accessTokenObject && refreshToken === accessTokenObject[0] ? accessTokenObject[1] : null; // if the refresh token has changed, the access token is invalid\n return {\n refreshToken,\n accessToken,\n };\n }\n protected get _accessTokenCookieName() {\n // The access token, unlike the refresh token, should not depend on the project ID. We never want to store the\n // access token in cookies more than once because of how big it is (there's a limit of 4096 bytes for all cookies\n // together). This means that, if you have multiple projects on the same domain, some of them will need to refetch\n // the access token on page reload.\n return `stack-access`;\n }\n protected _getCookieTokenStore(): Store<TokenObject> {\n if (!isBrowserLike()) {\n throw new Error(\"Cannot use cookie token store on the server!\");\n }\n\n if (this._storedCookieTokenStore === null) {\n const getCurrentValue = (old: TokenObject | null) => { \n const tokens = this._getTokensFromCookies({\n refreshTokenCookie: getCookie(this._refreshTokenCookieName) ?? getCookie('stack-refresh'), // keep old cookie name for backwards-compatibility\n accessTokenCookie: getCookie(this._accessTokenCookieName),\n });\n return {\n refreshToken: tokens.refreshToken,\n accessToken: tokens.accessToken ?? (old?.refreshToken === tokens.refreshToken ? old.accessToken : null),\n };\n };\n this._storedCookieTokenStore = new Store<TokenObject>(getCurrentValue(null));\n let hasSucceededInWriting = true;\n\n setInterval(() => {\n if (hasSucceededInWriting) {\n const oldValue = this._storedCookieTokenStore!.get();\n const currentValue = getCurrentValue(oldValue);\n if (!deepPlainEquals(currentValue, oldValue)) {\n this._storedCookieTokenStore!.set(currentValue);\n }\n }\n }, 100);\n this._storedCookieTokenStore.onChange((value) => {\n try {\n setOrDeleteCookie(this._refreshTokenCookieName, value.refreshToken, { maxAge: 60 * 60 * 24 * 365 });\n setOrDeleteCookie(this._accessTokenCookieName, value.accessToken ? JSON.stringify([value.refreshToken, value.accessToken]) : null, { maxAge: 60 * 60 * 24 });\n deleteCookie('stack-refresh'); // delete cookie name from previous versions (for backwards-compatibility)\n hasSucceededInWriting = true;\n } catch (e) {\n if (!isBrowserLike()) {\n // Setting cookies inside RSCs is not allowed, so we just ignore it\n hasSucceededInWriting = false;\n } else {\n throw e;\n }\n }\n });\n }\n\n return this._storedCookieTokenStore;\n };\n protected _getOrCreateTokenStore(overrideTokenStoreInit?: TokenStoreInit): Store<TokenObject> {\n const tokenStoreInit = overrideTokenStoreInit === undefined ? this._tokenStoreInit : overrideTokenStoreInit;\n\n switch (tokenStoreInit) {\n case \"cookie\": {\n return this._getCookieTokenStore();\n }\n case \"nextjs-cookie\": {\n if (isBrowserLike()) {\n return this._getCookieTokenStore();\n } else {\n const tokens = this._getTokensFromCookies({\n refreshTokenCookie: getCookie(this._refreshTokenCookieName) ?? getCookie('stack-refresh'), // keep old cookie name for backwards-compatibility\n accessTokenCookie: getCookie(this._accessTokenCookieName),\n });\n const store = new Store<TokenObject>(tokens);\n store.onChange((value) => {\n try {\n setOrDeleteCookie(this._refreshTokenCookieName, value.refreshToken, { maxAge: 60 * 60 * 24 * 365 });\n setOrDeleteCookie(this._accessTokenCookieName, value.accessToken ? JSON.stringify([value.refreshToken, value.accessToken]) : null, { maxAge: 60 * 60 * 24 });\n } catch (e) {\n // ignore\n }\n });\n return store;\n }\n }\n case \"memory\": {\n return this._memoryTokenStore;\n }\n default: {\n if (tokenStoreInit === null) {\n return createEmptyTokenStore();\n } else if (typeof tokenStoreInit === \"object\" && \"headers\" in tokenStoreInit) {\n if (this._requestTokenStores.has(tokenStoreInit)) return this._requestTokenStores.get(tokenStoreInit)!;\n\n // x-stack-auth header\n const stackAuthHeader = tokenStoreInit.headers.get(\"x-stack-auth\");\n if (stackAuthHeader) {\n let parsed;\n try {\n parsed = JSON.parse(stackAuthHeader);\n if (typeof parsed !== \"object\") throw new Error(\"x-stack-auth header must be a JSON object\");\n if (parsed === null) throw new Error(\"x-stack-auth header must not be null\");\n } catch (e) {\n throw new Error(`Invalid x-stack-auth header: ${stackAuthHeader}`, { cause: e });\n }\n return this._getOrCreateTokenStore({\n accessToken: parsed.accessToken ?? null,\n refreshToken: parsed.refreshToken ?? null,\n });\n }\n\n // read from cookies\n const cookieHeader = tokenStoreInit.headers.get(\"cookie\");\n const parsed = cookie.parse(cookieHeader || \"\");\n const res = new Store<TokenObject>({\n refreshToken: parsed[this._refreshTokenCookieName] || parsed['stack-refresh'] || null, // keep old cookie name for backwards-compatibility\n accessToken: parsed[this._accessTokenCookieName] || null,\n });\n this._requestTokenStores.set(tokenStoreInit, res);\n return res;\n } else if (\"accessToken\" in tokenStoreInit || \"refreshToken\" in tokenStoreInit) {\n return new Store<TokenObject>({\n refreshToken: tokenStoreInit.refreshToken,\n accessToken: tokenStoreInit.accessToken,\n });\n }\n \n throw new Error(`Invalid token store ${tokenStoreInit}`);\n }\n }\n }\n\n /**\n * A map from token stores and session keys to sessions.\n * \n * This isn't just a map from session keys to sessions for two reasons:\n * \n * - So we can garbage-collect Session objects when the token store is garbage-collected\n * - So different token stores are separated and don't leak information between each other, eg. if the same user sends two requests to the same server they should get a different session object\n */\n private _sessionsByTokenStoreAndSessionKey = new WeakMap<Store<TokenObject>, Map<string, InternalSession>>();\n protected _getSessionFromTokenStore(tokenStore: Store<TokenObject>): InternalSession {\n const tokenObj = tokenStore.get();\n const sessionKey = InternalSession.calculateSessionKey(tokenObj);\n const existing = sessionKey ? this._sessionsByTokenStoreAndSessionKey.get(tokenStore)?.get(sessionKey) : null;\n if (existing) return existing;\n\n const session = this._interface.createSession({\n refreshToken: tokenObj.refreshToken,\n accessToken: tokenObj.accessToken,\n });\n session.onAccessTokenChange((newAccessToken) => {\n tokenStore.update((old) => ({\n ...old,\n accessToken: newAccessToken?.token ?? null\n }));\n });\n session.onInvalidate(() => {\n tokenStore.update((old) => ({\n ...old,\n accessToken: null,\n refreshToken: null,\n }));\n });\n\n let sessionsBySessionKey = this._sessionsByTokenStoreAndSessionKey.get(tokenStore) ?? new Map();\n this._sessionsByTokenStoreAndSessionKey.set(tokenStore, sessionsBySessionKey);\n sessionsBySessionKey.set(sessionKey, session);\n return session;\n }\n protected _getSession(overrideTokenStoreInit?: TokenStoreInit): InternalSession {\n const tokenStore = this._getOrCreateTokenStore(overrideTokenStoreInit);\n return this._getSessionFromTokenStore(tokenStore);\n }\n protected _useSession(overrideTokenStoreInit?: TokenStoreInit): InternalSession {\n const tokenStore = this._getOrCreateTokenStore(overrideTokenStoreInit);\n const subscribe = useCallback((cb: () => void) => {\n const { unsubscribe } = tokenStore.onChange(() => {\n cb();\n });\n return unsubscribe;\n }, [tokenStore]);\n const getSnapshot = useCallback(() => this._getSessionFromTokenStore(tokenStore), [tokenStore]);\n return React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n }\n\n protected async _signInToAccountWithTokens(tokens: { accessToken: string | null, refreshToken: string }) {\n const tokenStore = this._getOrCreateTokenStore();\n tokenStore.set(tokens);\n }\n\n protected _hasPersistentTokenStore(overrideTokenStoreInit?: TokenStoreInit): this is StackClientApp<true, ProjectId> {\n return (overrideTokenStoreInit !== undefined ? overrideTokenStoreInit : this._tokenStoreInit) !== null;\n }\n\n protected _ensurePersistentTokenStore(overrideTokenStoreInit?: TokenStoreInit): asserts this is StackClientApp<true, ProjectId> {\n if (!this._hasPersistentTokenStore(overrideTokenStoreInit)) {\n throw new Error(\"Cannot call this function on a Stack app without a persistent token store. Make sure the tokenStore option on the constructor is set to a non-null value when initializing Stack.\\n\\nStack uses token stores to access access tokens of the current user. For example, on web frontends it is commonly the string value 'cookies' for cookie storage.\");\n }\n }\n\n protected _isInternalProject(): this is { projectId: \"internal\" } {\n return this.projectId === \"internal\";\n }\n\n protected _ensureInternalProject(): asserts this is { projectId: \"internal\" } {\n if (!this._isInternalProject()) {\n throw new Error(\"Cannot call this function on a Stack app with a project ID other than 'internal'.\");\n }\n }\n\n protected _permissionFromJson(json: PermissionDefinitionJson): Permission {\n const type = permissionDefinitionScopeToType(json.scope);\n \n if (type === 'team') {\n return {\n id: json.id,\n type,\n teamId: (json.scope as { teamId: string }).teamId,\n };\n } else {\n return {\n id: json.id,\n type,\n };\n }\n }\n\n protected _teamFromJson(json: TeamJson): Team {\n return {\n id: json.id,\n displayName: json.displayName,\n createdAt: new Date(json.createdAtMillis),\n toJson() {\n return json;\n },\n };\n }\n\n protected _teamMemberFromJson(json: TeamMemberJson): TeamMember;\n protected _teamMemberFromJson(json: TeamMemberJson | null): TeamMember | null;\n protected _teamMemberFromJson(json: TeamMemberJson | null): TeamMember | null {\n if (json === null) return null;\n return {\n teamId: json.teamId,\n userId: json.userId,\n displayName: json.displayName,\n };\n }\n\n protected _createAuth(session: InternalSession): Auth {\n const app = this;\n return {\n _internalSession: session,\n currentSession: {\n async getTokens() {\n const tokens = await session.getPotentiallyExpiredTokens();\n return {\n accessToken: tokens?.accessToken.token ?? null,\n refreshToken: tokens?.refreshToken?.token ?? null,\n };\n },\n },\n async getAuthHeaders(): Promise<{ \"x-stack-auth\": string }> {\n return {\n \"x-stack-auth\": JSON.stringify(await this.getAuthJson()),\n };\n },\n async getAuthJson(): Promise<{ accessToken: string | null, refreshToken: string | null }> {\n const tokens = await this.currentSession.getTokens();\n return tokens;\n },\n signOut() {\n return app._signOut(session);\n },\n };\n }\n\n protected _createBaseUser(json: UserJson): BaseUser {\n return {\n projectId: json.projectId,\n id: json.id,\n displayName: json.displayName,\n primaryEmail: json.primaryEmail,\n primaryEmailVerified: json.primaryEmailVerified,\n profileImageUrl: json.profileImageUrl,\n signedUpAt: new Date(json.signedUpAtMillis),\n clientMetadata: json.clientMetadata,\n hasPassword: json.hasPassword,\n authWithEmail: json.authWithEmail,\n oauthProviders: json.oauthProviders,\n selectedTeam: json.selectedTeam && this._teamFromJson(json.selectedTeam),\n toClientJson(): UserJson {\n return pick(json, [\n \"projectId\",\n \"id\",\n \"displayName\",\n \"primaryEmail\",\n \"primaryEmailVerified\",\n \"profileImageUrl\",\n \"signedUpAtMillis\",\n \"clientMetadata\",\n \"hasPassword\",\n \"authMethod\",\n \"authWithEmail\",\n \"selectedTeamId\",\n \"selectedTeam\",\n \"oauthProviders\",\n ]);\n },\n };\n }\n\n protected _createUserExtra(json: UserJson, session: InternalSession): UserExtra {\n const app = this;\n async function getConnectedAccount(id: StandardProvider, options?: { scopes?: string[] }): Promise<OAuthConnection | null>;\n async function getConnectedAccount(id: StandardProvider, options: { or: 'redirect', scopes?: string[] }): Promise<OAuthConnection>;\n async function getConnectedAccount(id: StandardProvider, options?: { or?: 'redirect', scopes?: string[] }): Promise<OAuthConnection | null> {\n const scopeString = options?.scopes?.join(\" \");\n return await app._currentUserOAuthConnectionCache.getOrWait([session, id, scopeString || \"\", options?.or === 'redirect'], \"write-only\");\n }\n\n function useConnectedAccount(id: StandardProvider, options?: { scopes?: string[] }): OAuthConnection | null;\n function useConnectedAccount(id: StandardProvider, options: { or: 'redirect', scopes?: string[] }): OAuthConnection;\n function useConnectedAccount(id: StandardProvider, options?: { or?: 'redirect', scopes?: string[] }): OAuthConnection | null {\n const scopeString = options?.scopes?.join(\" \");\n return useAsyncCache(app._currentUserOAuthConnectionCache, [session, id, scopeString || \"\", options?.or === 'redirect'], \"user.useConnectedAccount()\");\n }\n\n return {\n setDisplayName(displayName: string) {\n return this.update({ displayName });\n },\n setClientMetadata(metadata: Record<string, any>) {\n return this.update({ clientMetadata: metadata });\n },\n async setSelectedTeam(team: Team | null) {\n await this.update({ selectedTeamId: team?.id ?? null });\n },\n getConnectedAccount: getConnectedAccount,\n useConnectedAccount: useConnectedAccount,\n async getTeam(teamId: string) {\n const teams = await this.listTeams();\n return teams.find((t) => t.id === teamId) ?? null;\n },\n useTeam(teamId: string) {\n const teams = this.useTeams();\n return useMemo(() => {\n return teams.find((t) => t.id === teamId) ?? null;\n }, [teams, teamId]);\n },\n async listTeams() {\n const teams = await app._currentUserTeamsCache.getOrWait([session], \"write-only\");\n return teams.map((json) => app._teamFromJson(json));\n },\n useTeams() {\n const teams = useAsyncCache(app._currentUserTeamsCache, [session], \"user.useTeams()\");\n return useMemo(() => teams.map((json) => app._teamFromJson(json)), [teams]);\n },\n async listPermissions(scope: Team, options?: { direct?: boolean }): Promise<Permission[]> {\n const permissions = await app._currentUserPermissionsCache.getOrWait([session, scope.id, 'team', !!options?.direct], \"write-only\");\n return permissions.map((json) => app._permissionFromJson(json));\n },\n usePermissions(scope: Team, options?: { direct?: boolean }): Permission[] {\n const permissions = useAsyncCache(app._currentUserPermissionsCache, [session, scope.id, 'team', !!options?.direct], \"user.usePermissions()\");\n return useMemo(() => permissions.map((json) => app._permissionFromJson(json)), [permissions]);\n },\n usePermission(scope: Team, permissionId: string): Permission | null {\n const permissions = this.usePermissions(scope);\n return useMemo(() => permissions.find((p) => p.id === permissionId) ?? null, [permissions, permissionId]);\n },\n async getPermission(scope: Team, permissionId: string): Promise<Permission | null> {\n const permissions = await this.listPermissions(scope);\n return permissions.find((p) => p.id === permissionId) ?? null;\n },\n async hasPermission(scope: Team, permissionId: string): Promise<boolean> {\n return (await this.getPermission(scope, permissionId)) !== null;\n },\n update(update) {\n return app._updateUser(update, session);\n },\n sendVerificationEmail() {\n return app._sendVerificationEmail(session);\n },\n updatePassword(options: { oldPassword: string, newPassword: string}) {\n return app._updatePassword(options, session);\n },\n };\n }\n\n protected _createInternalUserExtra(session: InternalSession): InternalUserExtra {\n const app = this;\n this._ensureInternalProject();\n return {\n createProject(newProject: ProjectUpdateOptions & { displayName: string }) {\n return app._createProject(session, newProject);\n },\n listOwnedProjects() {\n return app._listOwnedProjects(session);\n },\n useOwnedProjects() {\n return app._useOwnedProjects(session);\n },\n };\n }\n\n protected _createCurrentUser(json: UserJson, session: InternalSession): ProjectCurrentUser<ProjectId> {\n const currentUser = {\n ...this._createBaseUser(json),\n ...this._createAuth(session),\n ...this._createUserExtra(json, session),\n ...this._isInternalProject() ? this._createInternalUserExtra(session) : {},\n } satisfies CurrentUser;\n\n Object.freeze(currentUser);\n return currentUser as ProjectCurrentUser<ProjectId>;\n }\n\n protected _projectAdminFromJson(data: ProjectJson, adminInterface: StackAdminInterface, onRefresh: () => Promise<void>): Project {\n if (data.id !== adminInterface.projectId) {\n throw new Error(`The project ID of the provided project JSON (${data.id}) does not match the project ID of the app (${adminInterface.projectId})! This is a Stack bug.`);\n }\n\n return {\n id: data.id,\n displayName: data.displayName,\n description: data.description,\n createdAt: new Date(data.createdAtMillis),\n userCount: data.userCount,\n isProductionMode: data.isProductionMode,\n evaluatedConfig: {\n id: data.evaluatedConfig.id,\n credentialEnabled: data.evaluatedConfig.credentialEnabled,\n magicLinkEnabled: data.evaluatedConfig.magicLinkEnabled,\n allowLocalhost: data.evaluatedConfig.allowLocalhost,\n oauthProviders: data.evaluatedConfig.oauthProviders,\n emailConfig: data.evaluatedConfig.emailConfig,\n domains: data.evaluatedConfig.domains,\n createTeamOnSignUp: data.evaluatedConfig.createTeamOnSignUp,\n },\n\n async update(update: ProjectUpdateOptions) {\n await adminInterface.updateProject(update);\n await onRefresh();\n },\n\n toJson() {\n return data;\n },\n\n getProductionModeErrors() {\n return getProductionModeErrors(this.toJson());\n },\n };\n }\n\n protected _createAdminInterface(forProjectId: string, session: InternalSession): StackAdminInterface {\n return new StackAdminInterface({\n baseUrl: this._interface.options.baseUrl,\n projectId: forProjectId,\n clientVersion,\n projectOwnerSession: session,\n });\n }\n\n get projectId(): ProjectId {\n return this._interface.projectId as ProjectId;\n }\n\n get urls(): Readonly<HandlerUrls> {\n return getUrls(this._urlOptions);\n }\n\n protected async _redirectTo(handlerName: keyof HandlerUrls, options?: RedirectToOptions) {\n const url = this.urls[handlerName];\n if (!url) {\n throw new Error(`No URL for handler name ${handlerName}`);\n }\n\n await _redirectTo(url, options);\n }\n\n async redirectToSignIn() { return await this._redirectTo(\"signIn\"); }\n async redirectToSignUp() { return await this._redirectTo(\"signUp\"); }\n async redirectToSignOut() { return await this._redirectTo(\"signOut\"); }\n async redirectToEmailVerification() { return await this._redirectTo(\"emailVerification\"); }\n async redirectToPasswordReset() { return await this._redirectTo(\"passwordReset\"); }\n async redirectToForgotPassword() { return await this._redirectTo(\"forgotPassword\"); }\n async redirectToHome() { return await this._redirectTo(\"home\"); }\n async redirectToOAuthCallback() { return await this._redirectTo(\"oauthCallback\"); }\n async redirectToMagicLinkCallback() { return await this._redirectTo(\"magicLinkCallback\"); }\n async redirectToAfterSignIn() { return await this._redirectTo(\"afterSignIn\"); }\n async redirectToAfterSignUp() { return await this._redirectTo(\"afterSignUp\"); }\n async redirectToAfterSignOut() { return await this._redirectTo(\"afterSignOut\"); }\n async redirectToAccountSettings() { return await this._redirectTo(\"accountSettings\"); }\n async redirectToError() { return await this._redirectTo(\"error\"); }\n\n async sendForgotPasswordEmail(email: string): Promise<KnownErrors[\"UserNotFound\"] | void> {\n const redirectUrl = constructRedirectUrl(this.urls.passwordReset);\n const error = await this._interface.sendForgotPasswordEmail(email, redirectUrl);\n return error;\n }\n\n async sendMagicLinkEmail(email: string): Promise<KnownErrors[\"RedirectUrlNotWhitelisted\"] | void> {\n const magicLinkRedirectUrl = constructRedirectUrl(this.urls.magicLinkCallback);\n const error = await this._interface.sendMagicLinkEmail(email, magicLinkRedirectUrl);\n return error;\n }\n\n async resetPassword(options: { password: string, code: string }): Promise<KnownErrors[\"PasswordResetError\"] | void> {\n const error = await this._interface.resetPassword(options);\n return error;\n }\n\n async verifyPasswordResetCode(code: string): Promise<KnownErrors[\"PasswordResetCodeError\"] | void> {\n return await this._interface.verifyPasswordResetCode(code);\n }\n\n async verifyEmail(code: string): Promise<KnownErrors[\"EmailVerificationError\"] | void> {\n return await this._interface.verifyEmail(code);\n }\n\n async getUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): Promise<ProjectCurrentUser<ProjectId>>;\n async getUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): Promise<ProjectCurrentUser<ProjectId>>;\n async getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>;\n async getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null> {\n this._ensurePersistentTokenStore(options?.tokenStore);\n const session = this._getSession(options?.tokenStore);\n const userJson = await this._currentUserCache.getOrWait([session], \"write-only\");\n\n if (userJson === null) {\n switch (options?.or) {\n case 'redirect': {\n await this.redirectToSignIn();\n break;\n }\n case 'throw': {\n throw new Error(\"User is not signed in but getUser was called with { or: 'throw' }\");\n }\n default: {\n return null;\n }\n }\n }\n\n return userJson && this._createCurrentUser(userJson, session);\n }\n\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): ProjectCurrentUser<ProjectId>;\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): ProjectCurrentUser<ProjectId>;\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentUser<ProjectId> | null;\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentUser<ProjectId> | null {\n this._ensurePersistentTokenStore(options?.tokenStore);\n\n const router = NextNavigation.useRouter();\n const session = this._useSession(options?.tokenStore);\n const userJson = useAsyncCache(this._currentUserCache, [session], \"useUser()\");\n const triggerRedirectToSignIn = useTrigger(() => router.replace(this.urls.signIn));\n\n if (userJson === null) {\n switch (options?.or) {\n case 'redirect': {\n // Updating the router is not allowed during the component render function, so we do it in a different async tick\n // The error would be: \"Cannot update a component (`Router`) while rendering a different component.\"\n triggerRedirectToSignIn();\n suspend();\n throw new StackAssertionError(\"suspend should never return\");\n }\n case 'throw': {\n throw new Error(\"User is not signed in but useUser was called with { or: 'throw' }\");\n }\n case undefined:\n case \"return-null\": {\n // do nothing\n }\n }\n }\n\n return useMemo(() => {\n return userJson && this._createCurrentUser(userJson, session);\n }, [userJson, session, options?.or]);\n }\n\n protected async _updateUser(update: UserUpdateJson, session: InternalSession) {\n const res = await this._interface.setClientUserCustomizableData(update, session);\n await this._refreshUser(session);\n return res;\n }\n\n async signInWithOAuth(provider: StandardProvider) {\n this._ensurePersistentTokenStore();\n await signInWithOAuth(\n this._interface, { \n provider, \n redirectUrl: this.urls.oauthCallback, \n errorRedirectUrl: this.urls.error,\n providerScope: this._oauthScopesOnSignIn[provider]?.join(\" \"),\n }\n );\n }\n\n async signInWithCredential(options: {\n email: string,\n password: string,\n }): Promise<KnownErrors[\"EmailPasswordMismatch\"] | void> {\n this._ensurePersistentTokenStore();\n const session = this._getSession();\n const result = await this._interface.signInWithCredential(options.email, options.password, session);\n if (!(result instanceof KnownError)) {\n await this._signInToAccountWithTokens(result);\n return await this.redirectToAfterSignIn({ replace: true });\n }\n return result;\n }\n\n async signUpWithCredential(options: {\n email: string,\n password: string,\n }): Promise<KnownErrors[\"UserEmailAlreadyExists\"] | KnownErrors['PasswordRequirementsNotMet'] | void> {\n this._ensurePersistentTokenStore();\n const session = this._getSession();\n const emailVerificationRedirectUrl = constructRedirectUrl(this.urls.emailVerification);\n const result = await this._interface.signUpWithCredential(\n options.email, \n options.password, \n emailVerificationRedirectUrl, \n session\n );\n if (!(result instanceof KnownError)) {\n await this._signInToAccountWithTokens(result);\n return await this.redirectToAfterSignUp({ replace: true });\n }\n return result;\n }\n\n async signInWithMagicLink(code: string): Promise<KnownErrors[\"MagicLinkError\"] | void> {\n this._ensurePersistentTokenStore();\n const session = this._getSession();\n const result = await this._interface.signInWithMagicLink(code, session);\n if (result instanceof KnownError) {\n return result;\n }\n await this._signInToAccountWithTokens(result);\n if (result.newUser) {\n await this.redirectToAfterSignUp({ replace: true });\n } else {\n await this.redirectToAfterSignIn({ replace: true });\n }\n }\n\n async callOAuthCallback() {\n this._ensurePersistentTokenStore();\n const result = await callOAuthCallback(this._interface, this.urls.oauthCallback);\n if (result) {\n await this._signInToAccountWithTokens(result);\n if (result.afterCallbackRedirectUrl) {\n await _redirectTo(result.afterCallbackRedirectUrl, { replace: true });\n return true;\n } else if (result.newUser) {\n await this.redirectToAfterSignUp({ replace: true });\n return true;\n } else {\n await this.redirectToAfterSignIn({ replace: true });\n return true;\n }\n }\n return false;\n }\n\n protected async _signOut(session: InternalSession): Promise<void> {\n await this._interface.signOut(session);\n await this.redirectToAfterSignOut();\n }\n\n protected async _sendVerificationEmail(session: InternalSession): Promise<KnownErrors[\"EmailAlreadyVerified\"] | void> {\n const emailVerificationRedirectUrl = constructRedirectUrl(this.urls.emailVerification);\n return await this._interface.sendVerificationEmail(emailVerificationRedirectUrl, session);\n }\n\n protected async _updatePassword(\n options: { oldPassword: string, newPassword: string }, \n session: InternalSession\n ): Promise<KnownErrors[\"PasswordMismatch\"] | KnownErrors[\"PasswordRequirementsNotMet\"] | void> {\n return await this._interface.updatePassword(options, session);\n }\n\n async signOut(): Promise<void> {\n const user = await this.getUser();\n if (user) {\n await user.signOut();\n }\n }\n\n async getProject(): Promise<ClientProjectJson> {\n return await this._currentProjectCache.getOrWait([], \"write-only\");\n }\n\n useProject(): ClientProjectJson {\n return useAsyncCache(this._currentProjectCache, [], \"useProject()\");\n }\n\n protected async _listOwnedProjects(session: InternalSession): Promise<Project[]> {\n this._ensureInternalProject();\n const json = await this._ownedProjectsCache.getOrWait([session], \"write-only\");\n return json.map((j) => this._projectAdminFromJson(\n j,\n this._createAdminInterface(j.id, session),\n () => this._refreshOwnedProjects(session),\n ));\n }\n\n protected _useOwnedProjects(session: InternalSession): Project[] {\n this._ensureInternalProject();\n const json = useAsyncCache(this._ownedProjectsCache, [session], \"useOwnedProjects()\");\n return useMemo(() => json.map((j) => this._projectAdminFromJson(\n j,\n this._createAdminInterface(j.id, session),\n () => this._refreshOwnedProjects(session),\n )), [json]);\n }\n\n protected async _createProject(session: InternalSession, newProject: ProjectUpdateOptions & { displayName: string }): Promise<Project> {\n this._ensureInternalProject();\n const json = await this._interface.createProject(newProject, session);\n const res = this._projectAdminFromJson(\n json,\n this._createAdminInterface(json.id, session),\n () => this._refreshOwnedProjects(session),\n );\n await this._refreshOwnedProjects(session);\n return res;\n }\n\n protected async _refreshUser(session: InternalSession) {\n // TODO this should take a user ID instead of a session, and automatically refresh all sessions with that user ID\n await this._refreshSession(session);\n }\n\n protected async _refreshSession(session: InternalSession) {\n await this._currentUserCache.refresh([session]);\n }\n\n protected async _refreshUsers() {\n // nothing yet\n }\n \n protected async _refreshProject() {\n await this._currentProjectCache.refresh([]);\n }\n\n protected async _refreshOwnedProjects(session: InternalSession) {\n await this._ownedProjectsCache.refresh([session]);\n }\n\n static get [stackAppInternalsSymbol]() {\n return {\n fromClientJson: <HasTokenStore extends boolean, ProjectId extends string>(\n json: StackClientAppJson<HasTokenStore, ProjectId>\n ): StackClientApp<HasTokenStore, ProjectId> => {\n const providedCheckString = JSON.stringify(omit(json, [/* none currently */]));\n const existing = allClientApps.get(json.uniqueIdentifier);\n if (existing) {\n const [existingCheckString, clientApp] = existing;\n if (existingCheckString !== providedCheckString) {\n throw new StackAssertionError(\"The provided app JSON does not match the configuration of the existing client app with the same unique identifier\", { providedObj: json, existingString: existingCheckString });\n }\n return clientApp as any;\n }\n\n return new _StackClientAppImpl<HasTokenStore, ProjectId>({\n ...json,\n checkString: providedCheckString,\n });\n }\n };\n }\n\n get [stackAppInternalsSymbol]() {\n return {\n toClientJson: (): StackClientAppJson<HasTokenStore, ProjectId> => {\n if (!(\"publishableClientKey\" in this._interface.options)) {\n // TODO find a way to do this\n throw Error(\"Cannot serialize to JSON from an application without a publishable client key\");\n }\n\n return {\n baseUrl: this._interface.options.baseUrl,\n projectId: this.projectId,\n publishableClientKey: this._interface.options.publishableClientKey,\n tokenStore: this._tokenStoreInit,\n urls: this._urlOptions,\n oauthScopesOnSignIn: this._oauthScopesOnSignIn,\n uniqueIdentifier: this._getUniqueIdentifier(),\n };\n },\n setCurrentUser: (userJsonPromise: Promise<UserJson | null>) => {\n runAsynchronously(this._currentUserCache.forceSetCachedValueAsync([this._getSession()], userJsonPromise));\n },\n };\n };\n}\n\nclass _StackServerAppImpl<HasTokenStore extends boolean, ProjectId extends string> extends _StackClientAppImpl<HasTokenStore, ProjectId>\n{\n declare protected _interface: StackServerInterface;\n\n // TODO override the client user cache to use the server user cache, so we save some requests\n private readonly _currentServerUserCache = createCacheBySession(async (session) => {\n const user = await this._interface.getServerUserByToken(session);\n return Result.or(user, null);\n });\n private readonly _serverUsersCache = createCache(async () => {\n return await this._interface.listUsers();\n });\n private readonly _serverUserCache = createCache<string[], ServerUserJson | null>(async ([userId]) => {\n const user = await this._interface.getServerUserById(userId);\n return Result.or(user, null);\n });\n private readonly _serverTeamsCache = createCache(async () => {\n return await this._interface.listTeams();\n });\n private readonly _serverTeamMembersCache = createCache<string[], ServerTeamMemberJson[]>(async ([teamId]) => {\n return await this._interface.listTeamMembers(teamId);\n });\n private readonly _serverTeamPermissionDefinitionsCache = createCache(async () => {\n return await this._interface.listPermissionDefinitions();\n });\n private readonly _serverTeamUserPermissionsCache = createCache<\n [string, string, 'team' | 'global', boolean], \n ServerPermissionDefinitionJson[]\n >(async ([teamId, userId, type, direct]) => {\n return await this._interface.listTeamMemberPermissions({ teamId, userId, type, direct });\n });\n private readonly _serverEmailTemplatesCache = createCache(async () => {\n return await this._interface.listEmailTemplates();\n });\n\n\n constructor(options: \n | StackServerAppConstructorOptions<HasTokenStore, ProjectId>\n | {\n interface: StackServerInterface,\n tokenStore: TokenStoreInit<HasTokenStore>,\n urls: Partial<HandlerUrls> | undefined,\n oauthScopesOnSignIn?: Partial<OAuthScopesOnSignIn> | undefined,\n }\n ) {\n super(\"interface\" in options ? {\n interface: options.interface,\n tokenStore: options.tokenStore,\n urls: options.urls,\n oauthScopesOnSignIn: options.oauthScopesOnSignIn,\n } : {\n interface: new StackServerInterface({\n baseUrl: options.baseUrl ?? getDefaultBaseUrl(),\n projectId: options.projectId ?? getDefaultProjectId(),\n clientVersion,\n publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey(),\n secretServerKey: options.secretServerKey ?? getDefaultSecretServerKey(),\n }),\n tokenStore: options.tokenStore,\n urls: options.urls ?? {},\n oauthScopesOnSignIn: options.oauthScopesOnSignIn ?? {},\n });\n }\n\n protected override _createBaseUser(json: ServerUserJson): ServerBaseUser;\n protected override _createBaseUser(json: UserJson): BaseUser;\n protected override _createBaseUser(json: UserJson | ServerUserJson): BaseUser | ServerBaseUser {\n return {\n ...super._createBaseUser(json),\n ...\"serverMetadata\" in json ? {\n serverMetadata: json.serverMetadata,\n toServerJson() {\n return {\n ...this.toClientJson(),\n ...pick(json, [\n \"serverMetadata\"\n ]),\n };\n },\n } : {},\n };\n }\n\n protected override _createUserExtra(json: ServerUserJson): ServerUserExtra;\n protected override _createUserExtra(json: UserJson): UserExtra;\n protected override _createUserExtra(json: UserJson | ServerUserJson): ServerUserExtra {\n const app = this;\n return {\n async setDisplayName(displayName: string) {\n return await this.update({ displayName });\n },\n async setClientMetadata(metadata: Record<string, any>) {\n return await this.update({ clientMetadata: metadata });\n },\n async setServerMetadata(metadata: Record<string, any>) {\n return await this.update({ serverMetadata: metadata });\n },\n async setSelectedTeam(team: Team | null) {\n return await this.update({ selectedTeamId: team?.id ?? null });\n },\n async setPrimaryEmail(email: string, options?: { verified?: boolean }) {\n return await this.update({ primaryEmail: email });\n },\n getConnectedAccount: async () => {\n return await app._checkFeatureSupport(\"getConnectedAccount() on ServerUser\", {});\n },\n useConnectedAccount: () => {\n return app._useCheckFeatureSupport(\"useConnectedAccount() on ServerUser\", {});\n },\n async getTeam(teamId: string) {\n const teams = await this.listTeams();\n return teams.find((t) => t.id === teamId) ?? null;\n },\n useTeam(teamId: string) {\n const teams = this.useTeams();\n return useMemo(() => {\n return teams.find((t) => t.id === teamId) ?? null;\n }, [teams, teamId]);\n },\n async listTeams() {\n const teams = await app.listTeams();\n const withMembers = await Promise.all(teams.map(async (t) => [t, await t.listMembers()] as const));\n return withMembers.filter(([_, members]) => members.find((m) => m.userId === json.id)).map(([t]) => t);\n },\n useTeams() {\n return app._useCheckFeatureSupport(\"useTeams() on ServerUser\", {});\n },\n async listPermissions(scope: Team, options?: { direct?: boolean }): Promise<ServerPermission[]> {\n const permissions = await app._serverTeamUserPermissionsCache.getOrWait([scope.id, json.id, 'team', !!options?.direct], \"write-only\");\n return permissions.map((json) => app._serverPermissionFromJson(json));\n },\n usePermissions(scope: Team, options?: { direct?: boolean }): ServerPermission[] {\n const permissions = useAsyncCache(app._serverTeamUserPermissionsCache, [scope.id, json.id, 'team', !!options?.direct], \"user.usePermissions()\");\n return useMemo(() => permissions.map((json) => app._serverPermissionFromJson(json)), [permissions]);\n },\n async getPermission(scope: Team, permissionId: string): Promise<ServerPermission | null> {\n const permissions = await this.listPermissions(scope);\n return permissions.find((p) => p.id === permissionId) ?? null;\n },\n usePermission(scope: Team, permissionId: string): ServerPermission | null {\n const permissions = this.usePermissions(scope);\n return useMemo(() => permissions.find((p) => p.id === permissionId) ?? null, [permissions, permissionId]);\n },\n async hasPermission(scope: Team, permissionId: string): Promise<boolean> {\n return await this.getPermission(scope, permissionId) !== null;\n },\n async grantPermission(scope: Team, permissionId: string): Promise<void> {\n await app._interface.grantTeamUserPermission(scope.id, json.id, permissionId, 'team');\n for (const direct of [true, false]) {\n await app._serverTeamUserPermissionsCache.refresh([scope.id, json.id, 'team', direct]);\n }\n },\n async revokePermission(scope: Team, permissionId: string): Promise<void> {\n await app._interface.revokeTeamUserPermission(scope.id, json.id, permissionId, 'team');\n for (const direct of [true, false]) {\n await app._serverTeamUserPermissionsCache.refresh([scope.id, json.id, 'team', direct]);\n }\n },\n async delete() {\n const res = await app._interface.deleteServerUser(json.id);\n await app._refreshUsers();\n return res;\n },\n async update(update: ServerUserUpdateJson) {\n const res = await app._interface.setServerUserCustomizableData(json.id, update);\n await app._refreshUsers();\n return res;\n },\n async sendVerificationEmail() {\n return await app._checkFeatureSupport(\"sendVerificationEmail() on ServerUser\", {});\n },\n async updatePassword(options: { oldPassword?: string, newPassword: string}) {\n return await app._checkFeatureSupport(\"updatePassword() on ServerUser\", {});\n },\n };\n }\n\n protected _createUser(json: ServerUserJson): ServerUser {\n return {\n ...this._createBaseUser(json),\n ...this._createUserExtra(json),\n };\n }\n\n protected override _createCurrentUser(json: ServerUserJson, session: InternalSession): ProjectCurrentServerUser<ProjectId> {\n const app = this;\n const currentUser = {\n ...this._createUser(json),\n ...this._createAuth(session),\n ...this._isInternalProject() ? this._createInternalUserExtra(session) : {},\n } satisfies ServerUser;\n\n Object.freeze(currentUser);\n return currentUser as ProjectCurrentServerUser<ProjectId>;\n }\n\n protected _serverTeamMemberFromJson(json: ServerTeamMemberJson): ServerTeamMember;\n protected _serverTeamMemberFromJson(json: ServerTeamMemberJson | null): ServerTeamMember | null;\n protected _serverTeamMemberFromJson(json: ServerTeamMemberJson | null): ServerTeamMember | null {\n if (json === null) return null;\n const app = this;\n return {\n ...app._teamMemberFromJson(json),\n user: app._createUser(json.user),\n };\n }\n\n protected _serverTeamFromJson(json: ServerTeamJson): ServerTeam {\n const app = this;\n return {\n id: json.id,\n displayName: json.displayName,\n createdAt: new Date(json.createdAtMillis),\n async listMembers() {\n return (await app._interface.listTeamMembers(json.id)).map((u) => app._serverTeamMemberFromJson(u));\n },\n async update(update: Partial<ServerTeamCustomizableJson>) {\n await app._interface.updateTeam(json.id, update);\n await app._serverTeamsCache.refresh([]);\n },\n async delete() {\n await app._interface.deleteTeam(json.id);\n await app._serverTeamsCache.refresh([]);\n },\n useMembers() {\n const result = useAsyncCache(app._serverTeamMembersCache, [json.id], \"team.useUsers()\");\n return useMemo(() => result.map((u) => app._serverTeamMemberFromJson(u)), [result]);\n },\n async addUser(userId) {\n await app._interface.addUserToTeam({\n teamId: json.id,\n userId,\n });\n await app._serverTeamMembersCache.refresh([json.id]);\n },\n async removeUser(userId) {\n await app._interface.removeUserFromTeam({\n teamId: json.id,\n userId,\n });\n await app._serverTeamMembersCache.refresh([json.id]);\n },\n toJson() {\n return json;\n },\n };\n }\n\n\n async getUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): Promise<ProjectCurrentServerUser<ProjectId>>;\n async getUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): Promise<ProjectCurrentServerUser<ProjectId>>;\n async getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>;\n async getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null> {\n // TODO this code is duplicated from the client app; fix that\n this._ensurePersistentTokenStore(options?.tokenStore);\n const session = this._getSession(options?.tokenStore);\n const userJson = await this._currentServerUserCache.getOrWait([session], \"write-only\");\n\n if (userJson === null) {\n switch (options?.or) {\n case 'redirect': {\n await this.redirectToSignIn();\n break;\n }\n case 'throw': {\n throw new Error(\"User is not signed in but getUser was called with { or: 'throw' }\");\n }\n default: {\n return null;\n }\n }\n }\n\n return userJson && this._createCurrentUser(userJson, session);\n }\n\n async getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null> {\n console.warn(\"stackServerApp.getServerUser is deprecated; use stackServerApp.getUser instead\");\n return await this.getUser();\n }\n\n async getServerUserById(userId: string): Promise<ServerUser | null> {\n const json = await this._serverUserCache.getOrWait([userId], \"write-only\");\n return json && this._createUser(json);\n }\n\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): ProjectCurrentServerUser<ProjectId>;\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): ProjectCurrentServerUser<ProjectId>;\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null;\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null {\n // TODO this code is duplicated from the client app; fix that\n this._ensurePersistentTokenStore(options?.tokenStore);\n\n const router = NextNavigation.useRouter();\n const session = this._getSession(options?.tokenStore);\n const userJson = useAsyncCache(this._currentServerUserCache, [session], \"useUser()\");\n const triggerRedirectToSignIn = useTrigger(() => router.replace(this.urls.signIn));\n\n if (userJson === null) {\n switch (options?.or) {\n case 'redirect': {\n // Updating the router is not allowed during the component render function, so we do it in a different async tick\n // The error would be: \"Cannot update a component (`Router`) while rendering a different component.\"\n triggerRedirectToSignIn();\n suspend();\n throw new StackAssertionError(\"suspend should never return\");\n }\n case 'throw': {\n throw new Error(\"User is not signed in but useUser was called with { or: 'throw' }\");\n }\n case undefined:\n case \"return-null\": {\n // do nothing\n }\n }\n }\n\n return useMemo(() => {\n return userJson && this._createCurrentUser(userJson, session);\n }, [userJson, session, options?.or]);\n }\n\n useUserById(userId: string): ServerUser | null {\n const json = useAsyncCache(this._serverUserCache, [userId], \"useUserById()\");\n return useMemo(() => {\n return json && this._createUser(json);\n }, [json]);\n }\n\n async listUsers(): Promise<ServerUser[]> {\n const json = await this._serverUsersCache.getOrWait([], \"write-only\");\n return json.map((j) => this._createUser(j));\n }\n\n useUsers(): ServerUser[] {\n const json = useAsyncCache(this._serverUsersCache, [], \"useServerUsers()\");\n return useMemo(() => {\n return json.map((j) => this._createUser(j));\n }, [json]);\n }\n\n async listPermissionDefinitions(): Promise<ServerPermissionDefinitionJson[]> {\n return await this._serverTeamPermissionDefinitionsCache.getOrWait([], \"write-only\");\n }\n\n usePermissionDefinitions(): ServerPermissionDefinitionJson[] {\n return useAsyncCache(this._serverTeamPermissionDefinitionsCache, [], \"usePermissions()\");\n }\n\n _serverPermissionFromJson(json: ServerPermissionDefinitionJson): ServerPermission {\n return {\n ...this._permissionFromJson(json),\n __databaseUniqueId: json.__databaseUniqueId,\n description: json.description,\n containPermissionIds: json.containPermissionIds,\n };\n }\n\n async createPermissionDefinition(data: ServerPermissionDefinitionCustomizableJson): Promise<ServerPermission>{\n const permission = this._serverPermissionFromJson(await this._interface.createPermissionDefinition(data));\n await this._serverTeamPermissionDefinitionsCache.refresh([]);\n return permission;\n }\n\n async updatePermissionDefinition(permissionId: string, data: Partial<ServerPermissionDefinitionCustomizableJson>) {\n await this._interface.updatePermissionDefinition(permissionId, data);\n await this._serverTeamPermissionDefinitionsCache.refresh([]);\n }\n\n async deletePermissionDefinition(permissionId: string): Promise<void> {\n await this._interface.deletePermissionDefinition(permissionId);\n await this._serverTeamPermissionDefinitionsCache.refresh([]);\n }\n\n async listTeams(): Promise<ServerTeam[]> {\n const teams = await this._serverTeamsCache.getOrWait([], \"write-only\");\n return teams.map((t) => this._serverTeamFromJson(t));\n }\n\n async createTeam(data: ServerTeamCustomizableJson) : Promise<ServerTeam> {\n const team = await this._interface.createTeam(data);\n await this._serverTeamsCache.refresh([]);\n return this._serverTeamFromJson(team);\n }\n\n useTeams(): ServerTeam[] {\n const teams = useAsyncCache(this._serverTeamsCache, [], \"useServerTeams()\");\n return useMemo(() => {\n return teams.map((t) => this._serverTeamFromJson(t));\n }, [teams]);\n }\n\n async getTeam(teamId: string): Promise<ServerTeam | null> {\n const teams = await this.listTeams();\n return teams.find((t) => t.id === teamId) ?? null;\n }\n\n useTeam(teamId: string): ServerTeam | null {\n const teams = this.useTeams();\n return useMemo(() => {\n return teams.find((t) => t.id === teamId) ?? null;\n }, [teams, teamId]);\n }\n\n protected override async _refreshSession(session: InternalSession) {\n await Promise.all([\n super._refreshUser(session),\n this._currentServerUserCache.refresh([session]),\n ]);\n }\n\n protected override async _refreshUsers() {\n await Promise.all([\n super._refreshUsers(),\n this._serverUsersCache.refresh([]),\n ]);\n }\n\n useEmailTemplates(): ListEmailTemplatesCrud['Server']['Read'] {\n return useAsyncCache(this._serverEmailTemplatesCache, [], \"useEmailTemplates()\");\n }\n\n async listEmailTemplates(): Promise<ListEmailTemplatesCrud['Server']['Read']> {\n return await this._serverEmailTemplatesCache.getOrWait([], \"write-only\");\n }\n\n async updateEmailTemplate(type: EmailTemplateType, data: EmailTemplateCrud['Server']['Update']): Promise<void> {\n await this._interface.updateEmailTemplate(type, data);\n await this._serverEmailTemplatesCache.refresh([]);\n }\n\n async resetEmailTemplate(type: EmailTemplateType) {\n await this._interface.resetEmailTemplate(type);\n await this._serverEmailTemplatesCache.refresh([]);\n }\n}\n\nclass _StackAdminAppImpl<HasTokenStore extends boolean, ProjectId extends string> extends _StackServerAppImpl<HasTokenStore, ProjectId>\n{\n declare protected _interface: StackAdminInterface;\n \n private readonly _adminProjectCache = createCache(async () => {\n return await this._interface.getProject();\n });\n private readonly _apiKeySetsCache = createCache(async () => {\n return await this._interface.listApiKeySets();\n });\n\n constructor(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>) {\n super({\n interface: new StackAdminInterface({\n baseUrl: options.baseUrl ?? getDefaultBaseUrl(),\n projectId: options.projectId ?? getDefaultProjectId(),\n clientVersion,\n ...\"projectOwnerSession\" in options ? {\n projectOwnerSession: options.projectOwnerSession,\n } : {\n publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey(),\n secretServerKey: options.secretServerKey ?? getDefaultSecretServerKey(),\n superSecretAdminKey: options.superSecretAdminKey ?? getDefaultSuperSecretAdminKey(),\n },\n }),\n tokenStore: options.tokenStore,\n urls: options.urls,\n oauthScopesOnSignIn: options.oauthScopesOnSignIn,\n });\n }\n\n\n protected _createApiKeySetBaseFromJson(data: ApiKeySetBaseJson): ApiKeySetBase {\n const app = this;\n return {\n id: data.id,\n description: data.description,\n expiresAt: new Date(data.expiresAtMillis),\n manuallyRevokedAt: data.manuallyRevokedAtMillis ? new Date(data.manuallyRevokedAtMillis) : null,\n createdAt: new Date(data.createdAtMillis),\n isValid() {\n return this.whyInvalid() === null;\n },\n whyInvalid() {\n if (this.expiresAt.getTime() < Date.now()) return \"expired\";\n if (this.manuallyRevokedAt) return \"manually-revoked\";\n return null;\n },\n async revoke() {\n const res = await app._interface.revokeApiKeySetById(data.id);\n await app._refreshApiKeySets();\n return res;\n }\n };\n }\n\n protected _createApiKeySetFromJson(data: ApiKeySetJson): ApiKeySet {\n return {\n ...this._createApiKeySetBaseFromJson(data),\n publishableClientKey: data.publishableClientKey ? { lastFour: data.publishableClientKey.lastFour } : null,\n secretServerKey: data.secretServerKey ? { lastFour: data.secretServerKey.lastFour } : null,\n superSecretAdminKey: data.superSecretAdminKey ? { lastFour: data.superSecretAdminKey.lastFour } : null,\n };\n }\n\n protected _createApiKeySetFirstViewFromJson(data: ApiKeySetFirstViewJson): ApiKeySetFirstView {\n return {\n ...this._createApiKeySetBaseFromJson(data),\n publishableClientKey: data.publishableClientKey,\n secretServerKey: data.secretServerKey,\n superSecretAdminKey: data.superSecretAdminKey,\n };\n }\n\n async getProjectAdmin(): Promise<Project> {\n return this._projectAdminFromJson(\n await this._adminProjectCache.getOrWait([], \"write-only\"),\n this._interface,\n () => this._refreshProject()\n );\n }\n\n useProjectAdmin(): Project {\n const json = useAsyncCache(this._adminProjectCache, [], \"useProjectAdmin()\");\n return useMemo(() => this._projectAdminFromJson(\n json,\n this._interface,\n () => this._refreshProject()\n ), [json]);\n }\n\n async listApiKeySets(): Promise<ApiKeySet[]> {\n const json = await this._apiKeySetsCache.getOrWait([], \"write-only\");\n return json.map((j) => this._createApiKeySetFromJson(j));\n }\n\n useApiKeySets(): ApiKeySet[] {\n const json = useAsyncCache(this._apiKeySetsCache, [], \"useApiKeySets()\");\n return useMemo(() => {\n return json.map((j) => this._createApiKeySetFromJson(j));\n }, [json]);\n }\n\n async createApiKeySet(options: ApiKeySetCreateOptions): Promise<ApiKeySetFirstView> {\n const json = await this._interface.createApiKeySet(options);\n await this._refreshApiKeySets();\n return this._createApiKeySetFirstViewFromJson(json);\n }\n\n protected override async _refreshProject() {\n await Promise.all([\n super._refreshProject(),\n this._adminProjectCache.refresh([]),\n ]);\n }\n\n protected async _refreshApiKeySets() {\n await this._apiKeySetsCache.refresh([]);\n }\n}\n\ntype RedirectToOptions = {\n replace?: boolean,\n};\n\ntype Session = {\n getTokens(): Promise<{ accessToken: string | null, refreshToken: string | null }>,\n};\n\n/**\n * Contains everything related to the current user session.\n */\ntype Auth = {\n readonly _internalSession: InternalSession,\n readonly currentSession: Session,\n signOut(): Promise<void>,\n\n /**\n * Returns headers for sending authenticated HTTP requests to external servers. Most commonly used in cross-origin\n * requests. Similar to `getAuthJson`, but specifically for HTTP requests.\n * \n * If you are using `tokenStore: \"cookie\"`, you don't need this for same-origin requests. However, most\n * browsers now disable third-party cookies by default, so we must pass authentication tokens by header instead\n * if the client and server are on different hostnames.\n *\n * This function returns a header object that can be used with `fetch` or other HTTP request libraries to send\n * authenticated requests.\n * \n * On the server, you can then pass in the `Request` object to the `tokenStore` option\n * of your Stack app. Please note that CORS does not allow most headers by default, so you\n * must include `x-stack-auth` in the [`Access-Control-Allow-Headers` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)\n * of the CORS preflight response.\n * \n * If you are not using HTTP (and hence cannot set headers), you will need to use the `getAuthJson()` function\n * instead.\n * \n * Example:\n * \n * ```ts\n * // client\n * const res = await fetch(\"https://api.example.com\", {\n * headers: {\n * ...await stackApp.getAuthHeaders()\n * // you can also add your own headers here\n * },\n * });\n * \n * // server\n * function handleRequest(req: Request) {\n * const user = await stackServerApp.getUser({ tokenStore: req });\n * return new Response(\"Welcome, \" + user.displayName);\n * }\n * ```\n */\n getAuthHeaders(): Promise<{ \"x-stack-auth\": string }>,\n\n /**\n * Creates a JSON-serializable object containing the information to authenticate a user on an external server.\n * Similar to `getAuthHeaders`, but returns an object that can be sent over any protocol instead of just\n * HTTP headers.\n * \n * While `getAuthHeaders` is the recommended way to send authentication tokens over HTTP, your app may use\n * a different protocol, for example WebSockets or gRPC. This function returns a token object that can be JSON-serialized and sent to the server in any way you like.\n * \n * On the server, you can pass in this token object into the `tokenStore` option to fetch user details.\n * \n * Example:\n * \n * ```ts\n * // client\n * const res = await rpcCall(rpcEndpoint, {\n * data: {\n * auth: await stackApp.getAuthJson(),\n * },\n * });\n * \n * // server\n * function handleRequest(data) {\n * const user = await stackServerApp.getUser({ tokenStore: data.auth });\n * return new Response(\"Welcome, \" + user.displayName);\n * }\n * ```\n */\n getAuthJson(): Promise<{ accessToken: string | null, refreshToken: string | null }>,\n};\n\nexport type User =\n & {\n readonly projectId: string,\n readonly id: string,\n\n readonly displayName: string | null,\n setDisplayName(displayName: string): Promise<void>,\n\n /**\n * The user's email address.\n *\n * Note: This might NOT be unique across multiple users, so always use `id` for unique identification.\n */\n readonly primaryEmail: string | null,\n readonly primaryEmailVerified: boolean,\n sendVerificationEmail(): Promise<KnownErrors[\"EmailAlreadyVerified\"] | void>,\n\n readonly profileImageUrl: string | null,\n\n readonly signedUpAt: Date,\n\n readonly clientMetadata: ReadonlyJson,\n setClientMetadata(metadata: ReadonlyJson): Promise<void>,\n\n /**\n * Whether the primary e-mail can be used for authentication.\n */\n readonly authWithEmail: boolean,\n /**\n * Whether the user has a password set.\n */\n readonly hasPassword: boolean,\n readonly oauthProviders: readonly string[],\n updatePassword(options: { oldPassword: string, newPassword: string}): Promise<KnownErrors[\"PasswordMismatch\"] | KnownErrors[\"PasswordRequirementsNotMet\"] | void>,\n\n /**\n * A shorthand method to update multiple fields of the user at once.\n */\n update(update: UserUpdateJson): Promise<void>,\n\n hasPermission(scope: Team, permissionId: string): Promise<boolean>,\n\n readonly selectedTeam: Team | null,\n setSelectedTeam(team: Team | null): Promise<void>,\n\n getConnectedAccount(id: StandardProvider, options: { or: 'redirect', scopes?: string[] }): Promise<OAuthConnection>,\n getConnectedAccount(id: StandardProvider, options?: { or?: 'redirect' | 'throw' | 'return-null', scopes?: string[] }): Promise<OAuthConnection | null>,\n useConnectedAccount(id: StandardProvider, options: { or: 'redirect', scopes?: string[] }): OAuthConnection,\n useConnectedAccount(id: StandardProvider, options?: { or?: 'redirect' | 'throw' | 'return-null', scopes?: string[] }): OAuthConnection | null,\n\n toClientJson(): UserJson,\n }\n & AsyncStoreProperty<\"team\", [id: string], Team | null, false>\n & AsyncStoreProperty<\"teams\", [], Team[], true>\n & AsyncStoreProperty<\"permission\", [scope: Team, permissionId: string, options?: { direct?: boolean }], Permission | null, false>\n & AsyncStoreProperty<\"permissions\", [scope: Team, options?: { direct?: boolean }], Permission[], true>;\n\ntype BaseUser = Pick<User,\n | \"projectId\"\n | \"id\"\n | \"displayName\"\n | \"primaryEmail\"\n | \"primaryEmailVerified\"\n | \"profileImageUrl\"\n | \"signedUpAt\"\n | \"clientMetadata\"\n | \"hasPassword\"\n | \"authWithEmail\"\n | \"oauthProviders\"\n | \"selectedTeam\"\n | \"toClientJson\"\n>;\n\ntype UserExtra = Omit<User, keyof BaseUser>;\n\ntype InternalUserExtra =\n & {\n createProject(newProject: ProjectUpdateOptions & { displayName: string }): Promise<Project>,\n }\n & AsyncStoreProperty<\"ownedProjects\", [], Project[], true>\n\nexport type CurrentUser = Auth & User;\n\nexport type CurrentInternalUser = CurrentUser & InternalUserExtra;\n\n/**\n * A user including sensitive fields that should only be used on the server, never sent to the client\n * (such as sensitive information and serverMetadata).\n */\nexport type ServerUser =\n & {\n setPrimaryEmail(email: string, options?: { verified?: boolean | undefined }): Promise<void>,\n\n readonly serverMetadata: ReadonlyJson,\n setServerMetadata(metadata: ReadonlyJson): Promise<void>,\n\n updatePassword(options: { oldPassword?: string, newPassword: string}): Promise<KnownErrors[\"PasswordMismatch\"] | KnownErrors[\"PasswordRequirementsNotMet\"] | void>,\n\n update(user: Partial<ServerUserUpdateJson>): Promise<void>,\n delete(): Promise<void>,\n\n grantPermission(scope: Team, permissionId: string): Promise<void>,\n revokePermission(scope: Team, permissionId: string): Promise<void>,\n\n hasPermission(scope: Team, permissionId: string): Promise<boolean>,\n\n toServerJson(): ServerUserJson,\n }\n & AsyncStoreProperty<\"team\", [id: string], ServerTeam | null, false>\n & AsyncStoreProperty<\"teams\", [], ServerTeam[], true>\n & AsyncStoreProperty<\"permission\", [scope: Team, permissionId: string, options?: { direct?: boolean }], ServerPermission | null, false>\n & AsyncStoreProperty<\"permissions\", [scope: Team, options?: { direct?: boolean }], ServerPermission[], true>\n & User;\n\ntype ServerBaseUser = Pick<ServerUser,\n | keyof BaseUser\n | \"serverMetadata\"\n | \"toServerJson\"\n>;\n\ntype ServerUserExtra = Omit<ServerUser, keyof ServerBaseUser>;\n\nexport type CurrentServerUser = Auth & ServerUser;\n\nexport type CurrentInternalServerUser = CurrentServerUser & InternalUserExtra;\n\nexport type Project = {\n readonly id: string,\n readonly displayName: string,\n readonly description?: string,\n readonly createdAt: Date,\n readonly userCount: number,\n readonly isProductionMode: boolean,\n readonly evaluatedConfig: {\n readonly id: string,\n readonly allowLocalhost: boolean,\n readonly credentialEnabled: boolean,\n readonly magicLinkEnabled: boolean,\n readonly oauthProviders: OAuthProviderConfig[],\n readonly emailConfig?: EmailConfig,\n readonly domains: DomainConfig[],\n readonly createTeamOnSignUp: boolean,\n },\n\n update(this: Project, update: ProjectUpdateOptions): Promise<void>,\n\n toJson(this: Project): ProjectJson,\n\n getProductionModeErrors(this: Project): ProductionModeError[],\n};\n\nexport type Team = {\n id: string,\n displayName: string,\n createdAt: Date,\n\n toJson(): TeamJson,\n};\n\nexport type ServerTeam = Team & {\n listMembers(): Promise<ServerTeamMember[]>,\n useMembers(): ServerTeamMember[],\n update(update: Partial<ServerTeamCustomizableJson>): Promise<void>,\n delete(): Promise<void>,\n addUser(userId: string): Promise<void>,\n removeUser(userId: string): Promise<void>,\n};\n\nexport type TeamMember = {\n userId: string,\n teamId: string,\n displayName: string | null,\n}\n\nexport type ServerTeamMember = TeamMember & {\n user: ServerUser,\n}\n\nexport type Permission = {\n id: string,\n} & (\n | { type: \"global\" }\n | { type: \"team\", teamId: string }\n);\n\nexport type ServerPermission = Permission & {\n readonly __databaseUniqueId: string,\n readonly description?: string,\n readonly containPermissionIds: string[],\n};\n\n\nexport type Connection = {\n id: string,\n}\n\nexport type OAuthConnection = Connection & {\n getAccessToken(): Promise<{ accessToken: string }>,\n useAccessToken(): { accessToken: string },\n}\n\n\nexport type ApiKeySetBase = {\n id: string,\n description: string,\n expiresAt: Date,\n manuallyRevokedAt: Date | null,\n createdAt: Date,\n isValid(): boolean,\n whyInvalid(): \"expired\" | \"manually-revoked\" | null,\n revoke(): Promise<void>,\n};\n\nexport type ApiKeySetFirstView = ApiKeySetBase & {\n publishableClientKey?: string,\n secretServerKey?: string,\n superSecretAdminKey?: string,\n};\n\nexport type ApiKeySet = ApiKeySetBase & {\n publishableClientKey: null | {\n lastFour: string,\n },\n secretServerKey: null | {\n lastFour: string,\n },\n superSecretAdminKey: null | {\n lastFour: string,\n },\n};\n\n\nexport type EmailConfig = EmailConfigJson;\n\nexport type DomainConfig = DomainConfigJson;\n\nexport type OAuthProviderConfig = OAuthProviderConfigJson;\n\nexport type GetUserOptions<HasTokenStore> =\n & {\n or?: 'redirect' | 'throw' | 'return-null',\n tokenStore?: TokenStoreInit,\n }\n & (HasTokenStore extends false ? {\n tokenStore: TokenStoreInit,\n } : {});\n\ntype AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultiple extends boolean> =\n & { [key in `${IsMultiple extends true ? \"list\" : \"get\"}${Capitalize<Name>}`]: (...args: Args) => Promise<Value> }\n & { [key in `use${Capitalize<Name>}`]: (...args: Args) => Value }\n\nexport type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & {\n readonly projectId: ProjectId,\n\n readonly urls: Readonly<HandlerUrls>,\n\n signInWithOAuth(provider: string): Promise<void>,\n signInWithCredential(options: { email: string, password: string }): Promise<KnownErrors[\"EmailPasswordMismatch\"] | void>,\n signUpWithCredential(options: { email: string, password: string }): Promise<KnownErrors[\"UserEmailAlreadyExists\"] | KnownErrors[\"PasswordRequirementsNotMet\"] | void>,\n callOAuthCallback(): Promise<boolean>,\n sendForgotPasswordEmail(email: string): Promise<KnownErrors[\"UserNotFound\"] | void>,\n sendMagicLinkEmail(email: string): Promise<KnownErrors[\"RedirectUrlNotWhitelisted\"] | void>,\n resetPassword(options: { code: string, password: string }): Promise<KnownErrors[\"PasswordResetError\"] | void>,\n verifyPasswordResetCode(code: string): Promise<KnownErrors[\"PasswordResetCodeError\"] | void>,\n verifyEmail(code: string): Promise<KnownErrors[\"EmailVerificationError\"] | void>,\n signInWithMagicLink(code: string): Promise<KnownErrors[\"MagicLinkError\"] | void>,\n\n redirectToOAuthCallback(): Promise<void>,\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): ProjectCurrentUser<ProjectId>,\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): ProjectCurrentUser<ProjectId>,\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentUser<ProjectId> | null,\n getUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): Promise<ProjectCurrentUser<ProjectId>>,\n getUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): Promise<ProjectCurrentUser<ProjectId>>,\n getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>,\n\n [stackAppInternalsSymbol]: {\n toClientJson(): StackClientAppJson<HasTokenStore, ProjectId>,\n setCurrentUser(userJsonPromise: Promise<UserJson | null>): void,\n },\n }\n & AsyncStoreProperty<\"project\", [], ClientProjectJson, false>\n & { [K in `redirectTo${Capitalize<keyof Omit<HandlerUrls, 'handler' | 'oauthCallback'>>}`]: (options?: RedirectToOptions) => Promise<void> }\n);\ntype StackClientAppConstructor = {\n new <\n TokenStoreType extends string,\n HasTokenStore extends (TokenStoreType extends {} ? true : boolean),\n ProjectId extends string\n >(options: StackClientAppConstructorOptions<HasTokenStore, ProjectId>): StackClientApp<HasTokenStore, ProjectId>,\n new (options: StackClientAppConstructorOptions<boolean, string>): StackClientApp<boolean, string>,\n\n [stackAppInternalsSymbol]: {\n fromClientJson<HasTokenStore extends boolean, ProjectId extends string>(\n json: StackClientAppJson<HasTokenStore, ProjectId>\n ): StackClientApp<HasTokenStore, ProjectId>,\n },\n};\nexport const StackClientApp: StackClientAppConstructor = _StackClientAppImpl;\n\nexport type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & {\n createTeam(data: ServerTeamCustomizableJson): Promise<ServerTeam>,\n createPermissionDefinition(data: ServerPermissionDefinitionCustomizableJson): Promise<ServerPermission>,\n updatePermissionDefinition(permissionId: string, data: Partial<ServerPermissionDefinitionCustomizableJson>): Promise<void>,\n deletePermissionDefinition(permissionId: string): Promise<void>,\n listPermissionDefinitions(): Promise<ServerPermissionDefinitionJson[]>,\n usePermissionDefinitions(): ServerPermissionDefinitionJson[],\n useEmailTemplates(): ListEmailTemplatesCrud['Server']['Read'],\n listEmailTemplates(): Promise<ListEmailTemplatesCrud['Server']['Read']>,\n updateEmailTemplate(type: EmailTemplateType, data: EmailTemplateCrud['Server']['Update']): Promise<void>,\n resetEmailTemplate(type: EmailTemplateType): Promise<void>,\n\n /**\n * @deprecated use `getUser()` instead\n */\n getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null>,\n\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): ProjectCurrentServerUser<ProjectId>,\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): ProjectCurrentServerUser<ProjectId>,\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null,\n getUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): Promise<ProjectCurrentServerUser<ProjectId>>,\n getUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): Promise<ProjectCurrentServerUser<ProjectId>>,\n getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>,\n }\n & StackClientApp<HasTokenStore, ProjectId>\n & AsyncStoreProperty<\"users\", [], ServerUser[], true>\n & AsyncStoreProperty<\"team\", [id: string], ServerTeam | null, false>\n & AsyncStoreProperty<\"teams\", [], ServerTeam[], true>\n);\ntype StackServerAppConstructor = {\n new <\n TokenStoreType extends string,\n HasTokenStore extends (TokenStoreType extends {} ? true : boolean),\n ProjectId extends string\n >(options: StackServerAppConstructorOptions<HasTokenStore, ProjectId>): StackServerApp<HasTokenStore, ProjectId>,\n new (options: StackServerAppConstructorOptions<boolean, string>): StackServerApp<boolean, string>,\n};\nexport const StackServerApp: StackServerAppConstructor = _StackServerAppImpl;\n\nexport type StackAdminApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & StackServerApp<HasTokenStore, ProjectId>\n & AsyncStoreProperty<\"projectAdmin\", [], Project, false>\n & AsyncStoreProperty<\"apiKeySets\", [], ApiKeySet[], true>\n & {\n createApiKeySet(options: ApiKeySetCreateOptions): Promise<ApiKeySetFirstView>,\n }\n);\ntype StackAdminAppConstructor = {\n new <\n HasTokenStore extends boolean,\n ProjectId extends string\n >(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>): StackAdminApp<HasTokenStore, ProjectId>,\n new (options: StackAdminAppConstructorOptions<boolean, string>): StackAdminApp<boolean, string>,\n};\nexport const StackAdminApp: StackAdminAppConstructor = _StackAdminAppImpl;\n"],"mappings":"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","names":["parsed","json"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/stack-app.ts"],"sourcesContent":["import React, { use, useCallback, useMemo } from \"react\";\nimport { KnownError, KnownErrors, OAuthProviderConfigJson, ServerUserJson, StackAdminInterface, StackClientInterface, StackServerInterface } from \"@stackframe/stack-shared\";\nimport { deleteCookie, getCookie, setOrDeleteCookie } from \"./cookie\";\nimport { StackAssertionError, throwErr } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { generateUuid } from \"@stackframe/stack-shared/dist/utils/uuids\";\nimport { Result } from \"@stackframe/stack-shared/dist/utils/results\";\nimport { suspendIfSsr } from \"@stackframe/stack-shared/dist/utils/react\";\nimport { Store } from \"@stackframe/stack-shared/dist/utils/stores\";\nimport { ClientProjectJson, UserJson, ProjectJson, EmailConfigJson, DomainConfigJson, getProductionModeErrors, ProductionModeError, UserUpdateJson, TeamJson, PermissionDefinitionJson, PermissionDefinitionScopeJson, TeamMemberJson, StandardProvider, TeamCustomizableJson } from \"@stackframe/stack-shared/dist/interface/clientInterface\";\nimport { isBrowserLike } from \"@stackframe/stack-shared/dist/utils/env\";\nimport { addNewOAuthProviderOrScope, callOAuthCallback, signInWithOAuth } from \"./auth\";\nimport * as NextNavigationUnscrambled from \"next/navigation\"; // import the entire module to get around some static compiler warnings emitted by Next.js in some cases\nimport { ReadonlyJson } from \"@stackframe/stack-shared/dist/utils/json\";\nimport { constructRedirectUrl } from \"../utils/url\";\nimport { deepPlainEquals, filterUndefined, omit, pick } from \"@stackframe/stack-shared/dist/utils/objects\";\nimport { ReactPromise, neverResolve, resolved, runAsynchronously, wait } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { AsyncCache } from \"@stackframe/stack-shared/dist/utils/caches\";\nimport { ApiKeySetBaseJson, ApiKeySetCreateOptions, ApiKeySetFirstViewJson, ApiKeySetJson, ProjectUpdateOptions } from \"@stackframe/stack-shared/dist/interface/adminInterface\";\nimport { suspend } from \"@stackframe/stack-shared/dist/utils/react\";\nimport { EmailTemplateType, ServerPermissionDefinitionCustomizableJson, ServerPermissionDefinitionJson, ServerTeamCustomizableJson, ServerTeamJson, ServerTeamMemberJson, ServerUserUpdateJson } from \"@stackframe/stack-shared/dist/interface/serverInterface\";\nimport { EmailTemplateCrud, ListEmailTemplatesCrud } from \"@stackframe/stack-shared/dist/interface/crud/email-templates\";\nimport { scrambleDuringCompileTime } from \"@stackframe/stack-shared/dist/utils/compile-time\";\nimport { isReactServer } from \"@stackframe/stack-sc\";\nimport * as cookie from \"cookie\";\nimport { InternalSession } from \"@stackframe/stack-shared/dist/sessions\";\nimport { mergeScopeStrings } from \"@stackframe/stack-shared/dist/utils/strings\";\n\n\n// NextNavigation.useRouter does not exist in react-server environments and some bundlers try to be helpful and throw a warning. Ignore the warning.\nconst NextNavigation = scrambleDuringCompileTime(NextNavigationUnscrambled);\n\nconst clientVersion = process.env.STACK_COMPILE_TIME_CLIENT_PACKAGE_VERSION ?? throwErr(\"Missing STACK_COMPILE_TIME_CLIENT_PACKAGE_VERSION. This should be a compile-time variable set by Stack's build system.\");\n\ntype RequestLike = {\n headers: {\n get: (name: string) => string | null,\n },\n};\n\nexport type TokenStoreInit<HasTokenStore extends boolean = boolean> =\n HasTokenStore extends true ? (\n | \"cookie\"\n | \"nextjs-cookie\"\n | \"memory\"\n | RequestLike\n | { accessToken: string, refreshToken: string }\n )\n : HasTokenStore extends false ? null\n : TokenStoreInit<true> | TokenStoreInit<false>;\n\nexport type HandlerUrls = {\n handler: string,\n signIn: string,\n afterSignIn: string,\n signUp: string,\n afterSignUp: string,\n signOut: string,\n afterSignOut: string,\n emailVerification: string,\n passwordReset: string,\n forgotPassword: string,\n home: string,\n oauthCallback: string,\n magicLinkCallback: string,\n accountSettings: string,\n error: string,\n}\n\nexport type OAuthScopesOnSignIn = {\n [key in StandardProvider]: string[];\n};\n\n\ntype ProjectCurrentUser<ProjectId> = ProjectId extends \"internal\" ? CurrentInternalUser : CurrentUser;\ntype ProjectCurrentServerUser<ProjectId> = ProjectId extends \"internal\" ? CurrentInternalServerUser : CurrentServerUser;\n\nfunction permissionDefinitionScopeToType(scope: PermissionDefinitionScopeJson): 'team' | 'global' {\n return ({\"any-team\": \"team\", \"specific-team\": \"team\", \"global\": \"global\"} as const)[scope.type];\n}\n\nfunction getUrls(partial: Partial<HandlerUrls>): HandlerUrls {\n const handler = partial.handler ?? \"/handler\";\n return {\n handler,\n signIn: `${handler}/signin`,\n afterSignIn: \"/\",\n signUp: `${handler}/signup`,\n afterSignUp: \"/\",\n signOut: `${handler}/signout`,\n afterSignOut: \"/\",\n emailVerification: `${handler}/email-verification`,\n passwordReset: `${handler}/password-reset`,\n forgotPassword: `${handler}/forgot-password`,\n oauthCallback: `${handler}/oauth-callback`,\n magicLinkCallback: `${handler}/magic-link-callback`,\n home: \"/\",\n accountSettings: `${handler}/account-settings`,\n error: `${handler}/error`,\n ...filterUndefined(partial),\n };\n}\n\nasync function _redirectTo(url: string, options?: { replace?: boolean }) {\n if (isReactServer) {\n NextNavigation.redirect(url, options?.replace ? NextNavigation.RedirectType.replace : NextNavigation.RedirectType.push);\n } else {\n if (options?.replace) {\n window.location.replace(url);\n } else {\n window.location.assign(url);\n }\n await wait(2000);\n }\n}\n\nfunction getDefaultProjectId() {\n return process.env.NEXT_PUBLIC_STACK_PROJECT_ID || throwErr(new Error(\"Welcome to Stack! It seems that you haven't provided a project ID. Please create a project on the Stack dashboard at https://app.stack-auth.com and put it in the NEXT_PUBLIC_STACK_PROJECT_ID environment variable.\"));\n}\n\nfunction getDefaultPublishableClientKey() {\n return process.env.NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY || throwErr(new Error(\"Welcome to Stack! It seems that you haven't provided a publishable client key. Please create an API key for your project on the Stack dashboard at https://app.stack-auth.com and copy your publishable client key into the NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY environment variable.\"));\n}\n\nfunction getDefaultSecretServerKey() {\n return process.env.STACK_SECRET_SERVER_KEY || throwErr(new Error(\"No secret server key provided. Please copy your key from the Stack dashboard and put your it in the STACK_SECRET_SERVER_KEY environment variable.\"));\n}\n\nfunction getDefaultSuperSecretAdminKey() {\n return process.env.STACK_SUPER_SECRET_ADMIN_KEY || throwErr(new Error(\"No super secret admin key provided. Please copy your key from the Stack dashboard and put it in the STACK_SUPER_SECRET_ADMIN_KEY environment variable.\"));\n}\n\nfunction getDefaultBaseUrl() {\n return process.env.NEXT_PUBLIC_STACK_URL || defaultBaseUrl;\n}\n\nexport type StackClientAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = {\n baseUrl?: string,\n projectId?: ProjectId,\n publishableClientKey?: string,\n urls?: Partial<HandlerUrls>,\n oauthScopesOnSignIn?: Partial<OAuthScopesOnSignIn>,\n\n // we intersect with TokenStoreInit in the beginning to make TypeScript error messages easier to read\n tokenStore: TokenStoreInit<HasTokenStore>,\n};\n\nexport type StackServerAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & {\n secretServerKey?: string,\n};\n\nexport type StackAdminAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = (\n | (\n & StackServerAppConstructorOptions<HasTokenStore, ProjectId>\n & {\n superSecretAdminKey?: string,\n }\n )\n | (\n & Omit<StackServerAppConstructorOptions<HasTokenStore, ProjectId>, \"publishableClientKey\" | \"secretServerKey\">\n & {\n projectOwnerSession: InternalSession,\n }\n )\n);\n\nexport type StackClientAppJson<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & {\n uniqueIdentifier: string,\n // note: if you add more fields here, make sure to ensure the checkString in the constructor has/doesn't have them\n};\n\nconst defaultBaseUrl = \"https://app.stack-auth.com\";\n\ntype TokenObject = {\n accessToken: string | null,\n refreshToken: string | null,\n};\n\nfunction createEmptyTokenStore() {\n return new Store<TokenObject>({\n refreshToken: null,\n accessToken: null,\n });\n}\n\nconst cachePromiseByComponentId = new Map<string, Promise<unknown>>();\nfunction useAsyncCache<D extends any[], T>(cache: AsyncCache<D, T>, dependencies: D, caller: string): T {\n // we explicitly don't want to run this hook in SSR\n suspendIfSsr(caller);\n\n const id = React.useId();\n\n const subscribe = useCallback((cb: () => void) => {\n const { unsubscribe } = cache.onStateChange(dependencies, () => {\n cachePromiseByComponentId.delete(id);\n cb();\n });\n return unsubscribe;\n }, [cache, ...dependencies]);\n const getSnapshot = useCallback(() => {\n // React checks whether a promise passed to `use` is still the same as the previous one by comparing the reference.\n // If we didn't cache here, this wouldn't work because the promise would be recreated every time the value changes.\n if (!cachePromiseByComponentId.has(id)) {\n cachePromiseByComponentId.set(id, cache.getOrWait(dependencies, \"read-write\"));\n }\n return cachePromiseByComponentId.get(id) as ReactPromise<T>;\n }, [cache, ...dependencies]);\n\n // note: we must use React.useSyncExternalStore instead of importing the function directly, as it will otherwise\n // throw an error (\"can't import useSyncExternalStore from the server\")\n const promise = React.useSyncExternalStore(\n subscribe,\n getSnapshot,\n () => throwErr(new Error(\"getServerSnapshot should never be called in useAsyncCache because we restrict to CSR earlier\"))\n );\n\n return use(promise);\n}\n\nfunction useStore<T>(store: Store<T>): T {\n const subscribe = useCallback((cb: () => void) => {\n const { unsubscribe } = store.onChange(() => cb());\n return unsubscribe;\n }, [store]);\n const getSnapshot = useCallback(() => store.get(), [store]);\n\n return React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n\nexport const stackAppInternalsSymbol = Symbol.for(\"StackAppInternals\");\n\nconst allClientApps = new Map<string, [checkString: string, app: StackClientApp<any, any>]>();\n\nconst createCache = <D extends any[], T>(fetcher: (dependencies: D) => Promise<T>) => {\n return new AsyncCache<D, T>(\n async (dependencies) => await fetcher(dependencies),\n {},\n );\n};\n\nconst createCacheBySession = <D extends any[], T>(fetcher: (session: InternalSession, extraDependencies: D) => Promise<T> ) => {\n return new AsyncCache<[InternalSession, ...D], T>(\n async ([session, ...extraDependencies]) => await fetcher(session, extraDependencies),\n {\n onSubscribe: ([session], refresh) => {\n const handler = session.onInvalidate(() => refresh());\n return () => handler.unsubscribe();\n },\n },\n );\n};\n\nlet numberOfAppsCreated = 0;\n\nclass _StackClientAppImpl<HasTokenStore extends boolean, ProjectId extends string = string> {\n protected _uniqueIdentifier: string | undefined = undefined;\n protected _interface: StackClientInterface;\n protected readonly _tokenStoreInit: TokenStoreInit<HasTokenStore>;\n protected readonly _urlOptions: Partial<HandlerUrls>;\n protected readonly _oauthScopesOnSignIn: Partial<OAuthScopesOnSignIn>;\n\n private __DEMO_ENABLE_SLIGHT_FETCH_DELAY = false;\n\n private readonly _currentUserCache = createCacheBySession(async (session) => {\n if (this.__DEMO_ENABLE_SLIGHT_FETCH_DELAY) {\n await wait(2000);\n }\n const user = await this._interface.getClientUserByToken(session);\n return Result.or(user, null);\n });\n private readonly _currentProjectCache = createCache(async () => {\n return Result.orThrow(await this._interface.getClientProject());\n });\n private readonly _ownedProjectsCache = createCacheBySession(async (session) => {\n return await this._interface.listProjects(session);\n });\n private readonly _currentUserPermissionsCache = createCacheBySession<\n [string, 'team' | 'global', boolean], \n PermissionDefinitionJson[]\n >(async (session, [teamId, type, direct]) => {\n return await this._interface.listClientUserTeamPermissions({ teamId, type, direct }, session);\n });\n private readonly _currentUserTeamsCache = createCacheBySession(async (session) => {\n return await this._interface.listClientUserTeams(session);\n });\n private readonly _currentUserOAuthConnectionAccessTokensCache = createCacheBySession<[string, string], { accessToken: string } | null>(\n async (session, [accountId, scope]) => {\n try {\n return await this._interface.getAccessToken(accountId, scope || \"\", session);\n } catch (err) {\n if (!(err instanceof KnownErrors.OAuthConnectionDoesNotHaveRequiredScope || err instanceof KnownErrors.OAuthConnectionNotConnectedToUser)) {\n throw err;\n }\n }\n return null;\n }\n );\n private readonly _currentUserOAuthConnectionCache = createCacheBySession<[StandardProvider, string, boolean], OAuthConnection | null>(\n async (session, [connectionId, scope, redirect]) => {\n const user = await this._currentUserCache.getOrWait([session], \"write-only\");\n\n let hasConnection = true;\n if (!user || !user.oauthProviders.find((p) => p === connectionId)) {\n hasConnection = false;\n }\n const token = await this._currentUserOAuthConnectionAccessTokensCache.getOrWait([session, connectionId, scope || \"\"], \"write-only\");\n if (!token) {\n hasConnection = false;\n }\n\n if (!hasConnection && redirect) {\n await addNewOAuthProviderOrScope(\n this._interface, \n { \n provider: connectionId, \n redirectUrl: this.urls.oauthCallback,\n errorRedirectUrl: this.urls.error, \n providerScope: mergeScopeStrings(scope || \"\", (this._oauthScopesOnSignIn[connectionId] ?? []).join(\" \")),\n },\n session,\n );\n return await neverResolve();\n } else if (!hasConnection) {\n return null;\n }\n\n const app = this;\n return {\n id: connectionId,\n async getAccessToken() {\n const result = await app._currentUserOAuthConnectionAccessTokensCache.getOrWait([session, connectionId, scope || \"\"], \"write-only\");\n if (!result) {\n throw new StackAssertionError(\"No access token available\");\n }\n return result;\n },\n useAccessToken() {\n const result = useAsyncCache(app._currentUserOAuthConnectionAccessTokensCache, [session, connectionId, scope || \"\"], \"oauthAccount.useAccessToken()\");\n if (!result) {\n throw new StackAssertionError(\"No access token available\");\n }\n return result;\n }\n };\n }\n );\n\n\n constructor(protected readonly _options:\n & {\n uniqueIdentifier?: string,\n checkString?: string,\n }\n & (\n | StackClientAppConstructorOptions<HasTokenStore, ProjectId>\n | Pick<StackClientAppConstructorOptions<HasTokenStore, ProjectId>, \"tokenStore\" | \"urls\" | \"oauthScopesOnSignIn\"> & {\n interface: StackClientInterface,\n }\n )\n ) {\n if (\"interface\" in _options) {\n this._interface = _options.interface;\n } else {\n this._interface = new StackClientInterface({\n baseUrl: _options.baseUrl ?? getDefaultBaseUrl(),\n projectId: _options.projectId ?? getDefaultProjectId(),\n clientVersion,\n publishableClientKey: _options.publishableClientKey ?? getDefaultPublishableClientKey(),\n });\n }\n\n this._tokenStoreInit = _options.tokenStore;\n this._urlOptions = _options.urls ?? {};\n this._oauthScopesOnSignIn = _options.oauthScopesOnSignIn ?? {};\n\n if (_options.uniqueIdentifier) {\n this._uniqueIdentifier = _options.uniqueIdentifier;\n this._initUniqueIdentifier();\n }\n\n numberOfAppsCreated++;\n if (numberOfAppsCreated > 10) {\n (process.env.NODE_ENV === \"development\" ? console.log : console.warn)(`You have created more than 10 Stack apps (${numberOfAppsCreated}). This is usually a sign of a memory leak, but can sometimes be caused by hot reload of your tech stack. In production, make sure to minimize the number of Stack apps per page (usually, one per project).`);\n }\n }\n\n protected _initUniqueIdentifier() {\n if (!this._uniqueIdentifier) {\n throw new StackAssertionError(\"Unique identifier not initialized\");\n }\n if (allClientApps.has(this._uniqueIdentifier)) {\n throw new StackAssertionError(\"A Stack client app with the same unique identifier already exists\");\n }\n allClientApps.set(this._uniqueIdentifier, [this._options.checkString ?? \"default check string\", this]);\n }\n\n /**\n * Cloudflare workers does not allow use of randomness on the global scope (on which the Stack app is probably\n * initialized). For that reason, we generate the unique identifier lazily when it is first needed.\n */\n protected _getUniqueIdentifier() {\n if (!this._uniqueIdentifier) {\n this._uniqueIdentifier = generateUuid();\n this._initUniqueIdentifier();\n }\n return this._uniqueIdentifier!;\n }\n\n protected async _checkFeatureSupport(featureName: string, options: any) {\n return await this._interface.checkFeatureSupport({ ...options, featureName });\n }\n\n protected _useCheckFeatureSupport(featureName: string, options: any): never {\n runAsynchronously(this._checkFeatureSupport(featureName, options));\n throw new StackAssertionError(`${featureName} is not currently supported. Please reach out to Stack support for more information.`);\n }\n\n protected _memoryTokenStore = createEmptyTokenStore();\n protected _requestTokenStores = new WeakMap<RequestLike, Store<TokenObject>>();\n protected _storedCookieTokenStore: Store<TokenObject> | null = null;\n protected get _refreshTokenCookieName() {\n return `stack-refresh-${this.projectId}`;\n }\n protected _getTokensFromCookies(cookies: { refreshTokenCookie: string | null, accessTokenCookie: string | null }): TokenObject {\n const refreshToken = cookies.refreshTokenCookie;\n const accessTokenObject = cookies.accessTokenCookie?.startsWith('[\\\"') ? JSON.parse(cookies.accessTokenCookie) : null; // gotta check for validity first for backwards-compat, and also in case someone messes with the cookie value\n const accessToken = accessTokenObject && refreshToken === accessTokenObject[0] ? accessTokenObject[1] : null; // if the refresh token has changed, the access token is invalid\n return {\n refreshToken,\n accessToken,\n };\n }\n protected get _accessTokenCookieName() {\n // The access token, unlike the refresh token, should not depend on the project ID. We never want to store the\n // access token in cookies more than once because of how big it is (there's a limit of 4096 bytes for all cookies\n // together). This means that, if you have multiple projects on the same domain, some of them will need to refetch\n // the access token on page reload.\n return `stack-access`;\n }\n protected _getCookieTokenStore(): Store<TokenObject> {\n if (!isBrowserLike()) {\n throw new Error(\"Cannot use cookie token store on the server!\");\n }\n\n if (this._storedCookieTokenStore === null) {\n const getCurrentValue = (old: TokenObject | null) => { \n const tokens = this._getTokensFromCookies({\n refreshTokenCookie: getCookie(this._refreshTokenCookieName) ?? getCookie('stack-refresh'), // keep old cookie name for backwards-compatibility\n accessTokenCookie: getCookie(this._accessTokenCookieName),\n });\n return {\n refreshToken: tokens.refreshToken,\n accessToken: tokens.accessToken ?? (old?.refreshToken === tokens.refreshToken ? old.accessToken : null),\n };\n };\n this._storedCookieTokenStore = new Store<TokenObject>(getCurrentValue(null));\n let hasSucceededInWriting = true;\n\n setInterval(() => {\n if (hasSucceededInWriting) {\n const oldValue = this._storedCookieTokenStore!.get();\n const currentValue = getCurrentValue(oldValue);\n if (!deepPlainEquals(currentValue, oldValue)) {\n this._storedCookieTokenStore!.set(currentValue);\n }\n }\n }, 100);\n this._storedCookieTokenStore.onChange((value) => {\n try {\n setOrDeleteCookie(this._refreshTokenCookieName, value.refreshToken, { maxAge: 60 * 60 * 24 * 365 });\n setOrDeleteCookie(this._accessTokenCookieName, value.accessToken ? JSON.stringify([value.refreshToken, value.accessToken]) : null, { maxAge: 60 * 60 * 24 });\n deleteCookie('stack-refresh'); // delete cookie name from previous versions (for backwards-compatibility)\n hasSucceededInWriting = true;\n } catch (e) {\n if (!isBrowserLike()) {\n // Setting cookies inside RSCs is not allowed, so we just ignore it\n hasSucceededInWriting = false;\n } else {\n throw e;\n }\n }\n });\n }\n\n return this._storedCookieTokenStore;\n };\n protected _getOrCreateTokenStore(overrideTokenStoreInit?: TokenStoreInit): Store<TokenObject> {\n const tokenStoreInit = overrideTokenStoreInit === undefined ? this._tokenStoreInit : overrideTokenStoreInit;\n\n switch (tokenStoreInit) {\n case \"cookie\": {\n return this._getCookieTokenStore();\n }\n case \"nextjs-cookie\": {\n if (isBrowserLike()) {\n return this._getCookieTokenStore();\n } else {\n const tokens = this._getTokensFromCookies({\n refreshTokenCookie: getCookie(this._refreshTokenCookieName) ?? getCookie('stack-refresh'), // keep old cookie name for backwards-compatibility\n accessTokenCookie: getCookie(this._accessTokenCookieName),\n });\n const store = new Store<TokenObject>(tokens);\n store.onChange((value) => {\n try {\n setOrDeleteCookie(this._refreshTokenCookieName, value.refreshToken, { maxAge: 60 * 60 * 24 * 365 });\n setOrDeleteCookie(this._accessTokenCookieName, value.accessToken ? JSON.stringify([value.refreshToken, value.accessToken]) : null, { maxAge: 60 * 60 * 24 });\n } catch (e) {\n // ignore\n }\n });\n return store;\n }\n }\n case \"memory\": {\n return this._memoryTokenStore;\n }\n default: {\n if (tokenStoreInit === null) {\n return createEmptyTokenStore();\n } else if (typeof tokenStoreInit === \"object\" && \"headers\" in tokenStoreInit) {\n if (this._requestTokenStores.has(tokenStoreInit)) return this._requestTokenStores.get(tokenStoreInit)!;\n\n // x-stack-auth header\n const stackAuthHeader = tokenStoreInit.headers.get(\"x-stack-auth\");\n if (stackAuthHeader) {\n let parsed;\n try {\n parsed = JSON.parse(stackAuthHeader);\n if (typeof parsed !== \"object\") throw new Error(\"x-stack-auth header must be a JSON object\");\n if (parsed === null) throw new Error(\"x-stack-auth header must not be null\");\n } catch (e) {\n throw new Error(`Invalid x-stack-auth header: ${stackAuthHeader}`, { cause: e });\n }\n return this._getOrCreateTokenStore({\n accessToken: parsed.accessToken ?? null,\n refreshToken: parsed.refreshToken ?? null,\n });\n }\n\n // read from cookies\n const cookieHeader = tokenStoreInit.headers.get(\"cookie\");\n const parsed = cookie.parse(cookieHeader || \"\");\n const res = new Store<TokenObject>({\n refreshToken: parsed[this._refreshTokenCookieName] || parsed['stack-refresh'] || null, // keep old cookie name for backwards-compatibility\n accessToken: parsed[this._accessTokenCookieName] || null,\n });\n this._requestTokenStores.set(tokenStoreInit, res);\n return res;\n } else if (\"accessToken\" in tokenStoreInit || \"refreshToken\" in tokenStoreInit) {\n return new Store<TokenObject>({\n refreshToken: tokenStoreInit.refreshToken,\n accessToken: tokenStoreInit.accessToken,\n });\n }\n \n throw new Error(`Invalid token store ${tokenStoreInit}`);\n }\n }\n }\n\n /**\n * A map from token stores and session keys to sessions.\n * \n * This isn't just a map from session keys to sessions for two reasons:\n * \n * - So we can garbage-collect Session objects when the token store is garbage-collected\n * - So different token stores are separated and don't leak information between each other, eg. if the same user sends two requests to the same server they should get a different session object\n */\n private _sessionsByTokenStoreAndSessionKey = new WeakMap<Store<TokenObject>, Map<string, InternalSession>>();\n protected _getSessionFromTokenStore(tokenStore: Store<TokenObject>): InternalSession {\n const tokenObj = tokenStore.get();\n const sessionKey = InternalSession.calculateSessionKey(tokenObj);\n const existing = sessionKey ? this._sessionsByTokenStoreAndSessionKey.get(tokenStore)?.get(sessionKey) : null;\n if (existing) return existing;\n\n const session = this._interface.createSession({\n refreshToken: tokenObj.refreshToken,\n accessToken: tokenObj.accessToken,\n });\n session.onAccessTokenChange((newAccessToken) => {\n tokenStore.update((old) => ({\n ...old,\n accessToken: newAccessToken?.token ?? null\n }));\n });\n session.onInvalidate(() => {\n tokenStore.update((old) => ({\n ...old,\n accessToken: null,\n refreshToken: null,\n }));\n });\n\n let sessionsBySessionKey = this._sessionsByTokenStoreAndSessionKey.get(tokenStore) ?? new Map();\n this._sessionsByTokenStoreAndSessionKey.set(tokenStore, sessionsBySessionKey);\n sessionsBySessionKey.set(sessionKey, session);\n return session;\n }\n protected _getSession(overrideTokenStoreInit?: TokenStoreInit): InternalSession {\n const tokenStore = this._getOrCreateTokenStore(overrideTokenStoreInit);\n return this._getSessionFromTokenStore(tokenStore);\n }\n protected _useSession(overrideTokenStoreInit?: TokenStoreInit): InternalSession {\n const tokenStore = this._getOrCreateTokenStore(overrideTokenStoreInit);\n const subscribe = useCallback((cb: () => void) => {\n const { unsubscribe } = tokenStore.onChange(() => {\n cb();\n });\n return unsubscribe;\n }, [tokenStore]);\n const getSnapshot = useCallback(() => this._getSessionFromTokenStore(tokenStore), [tokenStore]);\n return React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n }\n\n protected async _signInToAccountWithTokens(tokens: { accessToken: string | null, refreshToken: string }) {\n const tokenStore = this._getOrCreateTokenStore();\n tokenStore.set(tokens);\n }\n\n protected _hasPersistentTokenStore(overrideTokenStoreInit?: TokenStoreInit): this is StackClientApp<true, ProjectId> {\n return (overrideTokenStoreInit !== undefined ? overrideTokenStoreInit : this._tokenStoreInit) !== null;\n }\n\n protected _ensurePersistentTokenStore(overrideTokenStoreInit?: TokenStoreInit): asserts this is StackClientApp<true, ProjectId> {\n if (!this._hasPersistentTokenStore(overrideTokenStoreInit)) {\n throw new Error(\"Cannot call this function on a Stack app without a persistent token store. Make sure the tokenStore option on the constructor is set to a non-null value when initializing Stack.\\n\\nStack uses token stores to access access tokens of the current user. For example, on web frontends it is commonly the string value 'cookies' for cookie storage.\");\n }\n }\n\n protected _isInternalProject(): this is { projectId: \"internal\" } {\n return this.projectId === \"internal\";\n }\n\n protected _ensureInternalProject(): asserts this is { projectId: \"internal\" } {\n if (!this._isInternalProject()) {\n throw new Error(\"Cannot call this function on a Stack app with a project ID other than 'internal'.\");\n }\n }\n\n protected _permissionFromJson(json: PermissionDefinitionJson): Permission {\n const type = permissionDefinitionScopeToType(json.scope);\n \n if (type === 'team') {\n return {\n id: json.id,\n type,\n teamId: (json.scope as { teamId: string }).teamId,\n };\n } else {\n return {\n id: json.id,\n type,\n };\n }\n }\n\n protected _teamFromJson(json: TeamJson): Team {\n return {\n id: json.id,\n displayName: json.displayName,\n createdAt: new Date(json.createdAtMillis),\n toJson() {\n return json;\n },\n };\n }\n\n protected _teamMemberFromJson(json: TeamMemberJson): TeamMember;\n protected _teamMemberFromJson(json: TeamMemberJson | null): TeamMember | null;\n protected _teamMemberFromJson(json: TeamMemberJson | null): TeamMember | null {\n if (json === null) return null;\n return {\n teamId: json.teamId,\n userId: json.userId,\n displayName: json.displayName,\n };\n }\n\n protected _createAuth(session: InternalSession): Auth {\n const app = this;\n return {\n _internalSession: session,\n currentSession: {\n async getTokens() {\n const tokens = await session.getPotentiallyExpiredTokens();\n return {\n accessToken: tokens?.accessToken.token ?? null,\n refreshToken: tokens?.refreshToken?.token ?? null,\n };\n },\n },\n async getAuthHeaders(): Promise<{ \"x-stack-auth\": string }> {\n return {\n \"x-stack-auth\": JSON.stringify(await this.getAuthJson()),\n };\n },\n async getAuthJson(): Promise<{ accessToken: string | null, refreshToken: string | null }> {\n const tokens = await this.currentSession.getTokens();\n return tokens;\n },\n signOut() {\n return app._signOut(session);\n },\n };\n }\n\n protected _createBaseUser(json: UserJson): BaseUser {\n return {\n projectId: json.projectId,\n id: json.id,\n displayName: json.displayName,\n primaryEmail: json.primaryEmail,\n primaryEmailVerified: json.primaryEmailVerified,\n profileImageUrl: json.profileImageUrl,\n signedUpAt: new Date(json.signedUpAtMillis),\n clientMetadata: json.clientMetadata,\n hasPassword: json.hasPassword,\n authWithEmail: json.authWithEmail,\n oauthProviders: json.oauthProviders,\n selectedTeam: json.selectedTeam && this._teamFromJson(json.selectedTeam),\n toClientJson(): UserJson {\n return pick(json, [\n \"projectId\",\n \"id\",\n \"displayName\",\n \"primaryEmail\",\n \"primaryEmailVerified\",\n \"profileImageUrl\",\n \"signedUpAtMillis\",\n \"clientMetadata\",\n \"hasPassword\",\n \"authMethod\",\n \"authWithEmail\",\n \"selectedTeamId\",\n \"selectedTeam\",\n \"oauthProviders\",\n ]);\n },\n };\n }\n\n protected _createUserExtra(json: UserJson, session: InternalSession): UserExtra {\n const app = this;\n async function getConnectedAccount(id: StandardProvider, options?: { scopes?: string[] }): Promise<OAuthConnection | null>;\n async function getConnectedAccount(id: StandardProvider, options: { or: 'redirect', scopes?: string[] }): Promise<OAuthConnection>;\n async function getConnectedAccount(id: StandardProvider, options?: { or?: 'redirect', scopes?: string[] }): Promise<OAuthConnection | null> {\n const scopeString = options?.scopes?.join(\" \");\n return await app._currentUserOAuthConnectionCache.getOrWait([session, id, scopeString || \"\", options?.or === 'redirect'], \"write-only\");\n }\n\n function useConnectedAccount(id: StandardProvider, options?: { scopes?: string[] }): OAuthConnection | null;\n function useConnectedAccount(id: StandardProvider, options: { or: 'redirect', scopes?: string[] }): OAuthConnection;\n function useConnectedAccount(id: StandardProvider, options?: { or?: 'redirect', scopes?: string[] }): OAuthConnection | null {\n const scopeString = options?.scopes?.join(\" \");\n return useAsyncCache(app._currentUserOAuthConnectionCache, [session, id, scopeString || \"\", options?.or === 'redirect'], \"user.useConnectedAccount()\");\n }\n\n return {\n setDisplayName(displayName: string) {\n return this.update({ displayName });\n },\n setClientMetadata(metadata: Record<string, any>) {\n return this.update({ clientMetadata: metadata });\n },\n async setSelectedTeam(team: Team | null) {\n await this.update({ selectedTeamId: team?.id ?? null });\n },\n getConnectedAccount: getConnectedAccount,\n useConnectedAccount: useConnectedAccount,\n async getTeam(teamId: string) {\n const teams = await this.listTeams();\n return teams.find((t) => t.id === teamId) ?? null;\n },\n useTeam(teamId: string) {\n const teams = this.useTeams();\n return useMemo(() => {\n return teams.find((t) => t.id === teamId) ?? null;\n }, [teams, teamId]);\n },\n async listTeams() {\n const teams = await app._currentUserTeamsCache.getOrWait([session], \"write-only\");\n return teams.map((json) => app._teamFromJson(json));\n },\n useTeams() {\n const teams = useAsyncCache(app._currentUserTeamsCache, [session], \"user.useTeams()\");\n return useMemo(() => teams.map((json) => app._teamFromJson(json)), [teams]);\n },\n async createTeam(data: TeamCustomizableJson) {\n const teamJson = await app._interface.createTeamForCurrentUser(data, session);\n await app._currentUserTeamsCache.refresh([session]);\n return app._teamFromJson(teamJson);\n },\n async listPermissions(scope: Team, options?: { direct?: boolean }): Promise<Permission[]> {\n const permissions = await app._currentUserPermissionsCache.getOrWait([session, scope.id, 'team', !!options?.direct], \"write-only\");\n return permissions.map((json) => app._permissionFromJson(json));\n },\n usePermissions(scope: Team, options?: { direct?: boolean }): Permission[] {\n const permissions = useAsyncCache(app._currentUserPermissionsCache, [session, scope.id, 'team', !!options?.direct], \"user.usePermissions()\");\n return useMemo(() => permissions.map((json) => app._permissionFromJson(json)), [permissions]);\n },\n usePermission(scope: Team, permissionId: string): Permission | null {\n const permissions = this.usePermissions(scope);\n return useMemo(() => permissions.find((p) => p.id === permissionId) ?? null, [permissions, permissionId]);\n },\n async getPermission(scope: Team, permissionId: string): Promise<Permission | null> {\n const permissions = await this.listPermissions(scope);\n return permissions.find((p) => p.id === permissionId) ?? null;\n },\n async hasPermission(scope: Team, permissionId: string): Promise<boolean> {\n return (await this.getPermission(scope, permissionId)) !== null;\n },\n update(update) {\n return app._updateUser(update, session);\n },\n sendVerificationEmail() {\n return app._sendVerificationEmail(session);\n },\n updatePassword(options: { oldPassword: string, newPassword: string}) {\n return app._updatePassword(options, session);\n },\n };\n }\n\n protected _createInternalUserExtra(session: InternalSession): InternalUserExtra {\n const app = this;\n this._ensureInternalProject();\n return {\n createProject(newProject: ProjectUpdateOptions & { displayName: string }) {\n return app._createProject(session, newProject);\n },\n listOwnedProjects() {\n return app._listOwnedProjects(session);\n },\n useOwnedProjects() {\n return app._useOwnedProjects(session);\n },\n };\n }\n\n protected _createCurrentUser(json: UserJson, session: InternalSession): ProjectCurrentUser<ProjectId> {\n const currentUser = {\n ...this._createBaseUser(json),\n ...this._createAuth(session),\n ...this._createUserExtra(json, session),\n ...this._isInternalProject() ? this._createInternalUserExtra(session) : {},\n } satisfies CurrentUser;\n\n Object.freeze(currentUser);\n return currentUser as ProjectCurrentUser<ProjectId>;\n }\n\n protected _projectAdminFromJson(data: ProjectJson, adminInterface: StackAdminInterface, onRefresh: () => Promise<void>): Project {\n if (data.id !== adminInterface.projectId) {\n throw new Error(`The project ID of the provided project JSON (${data.id}) does not match the project ID of the app (${adminInterface.projectId})! This is a Stack bug.`);\n }\n\n return {\n id: data.id,\n displayName: data.displayName,\n description: data.description,\n createdAt: new Date(data.createdAtMillis),\n userCount: data.userCount,\n isProductionMode: data.isProductionMode,\n evaluatedConfig: {\n id: data.evaluatedConfig.id,\n credentialEnabled: data.evaluatedConfig.credentialEnabled,\n magicLinkEnabled: data.evaluatedConfig.magicLinkEnabled,\n allowLocalhost: data.evaluatedConfig.allowLocalhost,\n oauthProviders: data.evaluatedConfig.oauthProviders,\n emailConfig: data.evaluatedConfig.emailConfig,\n domains: data.evaluatedConfig.domains,\n createTeamOnSignUp: data.evaluatedConfig.createTeamOnSignUp,\n teamCreatorDefaultPermissions: data.evaluatedConfig.teamCreatorDefaultPermissions,\n teamMemberDefaultPermissions: data.evaluatedConfig.teamMemberDefaultPermissions,\n },\n\n async update(update: ProjectUpdateOptions) {\n await adminInterface.updateProject(update);\n await onRefresh();\n },\n\n toJson() {\n return data;\n },\n\n getProductionModeErrors() {\n return getProductionModeErrors(this.toJson());\n },\n };\n }\n\n protected _createAdminInterface(forProjectId: string, session: InternalSession): StackAdminInterface {\n return new StackAdminInterface({\n baseUrl: this._interface.options.baseUrl,\n projectId: forProjectId,\n clientVersion,\n projectOwnerSession: session,\n });\n }\n\n get projectId(): ProjectId {\n return this._interface.projectId as ProjectId;\n }\n\n get urls(): Readonly<HandlerUrls> {\n return getUrls(this._urlOptions);\n }\n\n protected async _redirectTo(handlerName: keyof HandlerUrls, options?: RedirectToOptions) {\n const url = this.urls[handlerName];\n if (!url) {\n throw new Error(`No URL for handler name ${handlerName}`);\n }\n\n await _redirectTo(url, options);\n }\n\n async redirectToSignIn() { return await this._redirectTo(\"signIn\"); }\n async redirectToSignUp() { return await this._redirectTo(\"signUp\"); }\n async redirectToSignOut() { return await this._redirectTo(\"signOut\"); }\n async redirectToEmailVerification() { return await this._redirectTo(\"emailVerification\"); }\n async redirectToPasswordReset() { return await this._redirectTo(\"passwordReset\"); }\n async redirectToForgotPassword() { return await this._redirectTo(\"forgotPassword\"); }\n async redirectToHome() { return await this._redirectTo(\"home\"); }\n async redirectToOAuthCallback() { return await this._redirectTo(\"oauthCallback\"); }\n async redirectToMagicLinkCallback() { return await this._redirectTo(\"magicLinkCallback\"); }\n async redirectToAfterSignIn() { return await this._redirectTo(\"afterSignIn\"); }\n async redirectToAfterSignUp() { return await this._redirectTo(\"afterSignUp\"); }\n async redirectToAfterSignOut() { return await this._redirectTo(\"afterSignOut\"); }\n async redirectToAccountSettings() { return await this._redirectTo(\"accountSettings\"); }\n async redirectToError() { return await this._redirectTo(\"error\"); }\n\n async sendForgotPasswordEmail(email: string): Promise<KnownErrors[\"UserNotFound\"] | void> {\n const redirectUrl = constructRedirectUrl(this.urls.passwordReset);\n const error = await this._interface.sendForgotPasswordEmail(email, redirectUrl);\n return error;\n }\n\n async sendMagicLinkEmail(email: string): Promise<KnownErrors[\"RedirectUrlNotWhitelisted\"] | void> {\n const magicLinkRedirectUrl = constructRedirectUrl(this.urls.magicLinkCallback);\n const error = await this._interface.sendMagicLinkEmail(email, magicLinkRedirectUrl);\n return error;\n }\n\n async resetPassword(options: { password: string, code: string }): Promise<KnownErrors[\"PasswordResetError\"] | void> {\n const error = await this._interface.resetPassword(options);\n return error;\n }\n\n async verifyPasswordResetCode(code: string): Promise<KnownErrors[\"PasswordResetCodeError\"] | void> {\n return await this._interface.verifyPasswordResetCode(code);\n }\n\n async verifyEmail(code: string): Promise<KnownErrors[\"EmailVerificationError\"] | void> {\n return await this._interface.verifyEmail(code);\n }\n\n async getUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): Promise<ProjectCurrentUser<ProjectId>>;\n async getUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): Promise<ProjectCurrentUser<ProjectId>>;\n async getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>;\n async getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null> {\n this._ensurePersistentTokenStore(options?.tokenStore);\n const session = this._getSession(options?.tokenStore);\n const userJson = await this._currentUserCache.getOrWait([session], \"write-only\");\n\n if (userJson === null) {\n switch (options?.or) {\n case 'redirect': {\n await this.redirectToSignIn();\n break;\n }\n case 'throw': {\n throw new Error(\"User is not signed in but getUser was called with { or: 'throw' }\");\n }\n default: {\n return null;\n }\n }\n }\n\n return userJson && this._createCurrentUser(userJson, session);\n }\n\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): ProjectCurrentUser<ProjectId>;\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): ProjectCurrentUser<ProjectId>;\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentUser<ProjectId> | null;\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentUser<ProjectId> | null {\n this._ensurePersistentTokenStore(options?.tokenStore);\n\n const router = NextNavigation.useRouter();\n const session = this._useSession(options?.tokenStore);\n const userJson = useAsyncCache(this._currentUserCache, [session], \"useUser()\");\n\n if (userJson === null) {\n switch (options?.or) {\n case 'redirect': {\n // Updating the router is not allowed during the component render function, so we do it in a different async tick\n // The error would be: \"Cannot update a component (`Router`) while rendering a different component.\"\n setTimeout(() => router.replace(this.urls.signIn), 0);\n suspend();\n throw new StackAssertionError(\"suspend should never return\");\n }\n case 'throw': {\n throw new Error(\"User is not signed in but useUser was called with { or: 'throw' }\");\n }\n case undefined:\n case \"return-null\": {\n // do nothing\n }\n }\n }\n\n return useMemo(() => {\n return userJson && this._createCurrentUser(userJson, session);\n }, [userJson, session, options?.or]);\n }\n\n protected async _updateUser(update: UserUpdateJson, session: InternalSession) {\n const res = await this._interface.setClientUserCustomizableData(update, session);\n await this._refreshUser(session);\n return res;\n }\n\n async signInWithOAuth(provider: StandardProvider) {\n this._ensurePersistentTokenStore();\n await signInWithOAuth(\n this._interface, { \n provider, \n redirectUrl: this.urls.oauthCallback, \n errorRedirectUrl: this.urls.error,\n providerScope: this._oauthScopesOnSignIn[provider]?.join(\" \"),\n }\n );\n }\n\n async signInWithCredential(options: {\n email: string,\n password: string,\n }): Promise<KnownErrors[\"EmailPasswordMismatch\"] | void> {\n this._ensurePersistentTokenStore();\n const session = this._getSession();\n const result = await this._interface.signInWithCredential(options.email, options.password, session);\n if (!(result instanceof KnownError)) {\n await this._signInToAccountWithTokens(result);\n return await this.redirectToAfterSignIn({ replace: true });\n }\n return result;\n }\n\n async signUpWithCredential(options: {\n email: string,\n password: string,\n }): Promise<KnownErrors[\"UserEmailAlreadyExists\"] | KnownErrors['PasswordRequirementsNotMet'] | void> {\n this._ensurePersistentTokenStore();\n const session = this._getSession();\n const emailVerificationRedirectUrl = constructRedirectUrl(this.urls.emailVerification);\n const result = await this._interface.signUpWithCredential(\n options.email, \n options.password, \n emailVerificationRedirectUrl, \n session\n );\n if (!(result instanceof KnownError)) {\n await this._signInToAccountWithTokens(result);\n return await this.redirectToAfterSignUp({ replace: true });\n }\n return result;\n }\n\n async signInWithMagicLink(code: string): Promise<KnownErrors[\"MagicLinkError\"] | void> {\n this._ensurePersistentTokenStore();\n const session = this._getSession();\n const result = await this._interface.signInWithMagicLink(code, session);\n if (result instanceof KnownError) {\n return result;\n }\n await this._signInToAccountWithTokens(result);\n if (result.newUser) {\n await this.redirectToAfterSignUp({ replace: true });\n } else {\n await this.redirectToAfterSignIn({ replace: true });\n }\n }\n\n async callOAuthCallback() {\n this._ensurePersistentTokenStore();\n const result = await callOAuthCallback(this._interface, this.urls.oauthCallback);\n if (result) {\n await this._signInToAccountWithTokens(result);\n if (result.afterCallbackRedirectUrl) {\n await _redirectTo(result.afterCallbackRedirectUrl, { replace: true });\n return true;\n } else if (result.newUser) {\n await this.redirectToAfterSignUp({ replace: true });\n return true;\n } else {\n await this.redirectToAfterSignIn({ replace: true });\n return true;\n }\n }\n return false;\n }\n\n protected async _signOut(session: InternalSession): Promise<void> {\n await this._interface.signOut(session);\n await this.redirectToAfterSignOut();\n }\n\n protected async _sendVerificationEmail(session: InternalSession): Promise<KnownErrors[\"EmailAlreadyVerified\"] | void> {\n const emailVerificationRedirectUrl = constructRedirectUrl(this.urls.emailVerification);\n return await this._interface.sendVerificationEmail(emailVerificationRedirectUrl, session);\n }\n\n protected async _updatePassword(\n options: { oldPassword: string, newPassword: string }, \n session: InternalSession\n ): Promise<KnownErrors[\"PasswordMismatch\"] | KnownErrors[\"PasswordRequirementsNotMet\"] | void> {\n return await this._interface.updatePassword(options, session);\n }\n\n async signOut(): Promise<void> {\n const user = await this.getUser();\n if (user) {\n await user.signOut();\n }\n }\n\n async getProject(): Promise<ClientProjectJson> {\n return await this._currentProjectCache.getOrWait([], \"write-only\");\n }\n\n useProject(): ClientProjectJson {\n return useAsyncCache(this._currentProjectCache, [], \"useProject()\");\n }\n\n protected async _listOwnedProjects(session: InternalSession): Promise<Project[]> {\n this._ensureInternalProject();\n const json = await this._ownedProjectsCache.getOrWait([session], \"write-only\");\n return json.map((j) => this._projectAdminFromJson(\n j,\n this._createAdminInterface(j.id, session),\n () => this._refreshOwnedProjects(session),\n ));\n }\n\n protected _useOwnedProjects(session: InternalSession): Project[] {\n this._ensureInternalProject();\n const json = useAsyncCache(this._ownedProjectsCache, [session], \"useOwnedProjects()\");\n return useMemo(() => json.map((j) => this._projectAdminFromJson(\n j,\n this._createAdminInterface(j.id, session),\n () => this._refreshOwnedProjects(session),\n )), [json]);\n }\n\n protected async _createProject(session: InternalSession, newProject: ProjectUpdateOptions & { displayName: string }): Promise<Project> {\n this._ensureInternalProject();\n const json = await this._interface.createProject(newProject, session);\n const res = this._projectAdminFromJson(\n json,\n this._createAdminInterface(json.id, session),\n () => this._refreshOwnedProjects(session),\n );\n await this._refreshOwnedProjects(session);\n return res;\n }\n\n protected async _refreshUser(session: InternalSession) {\n // TODO this should take a user ID instead of a session, and automatically refresh all sessions with that user ID\n await this._refreshSession(session);\n }\n\n protected async _refreshSession(session: InternalSession) {\n await this._currentUserCache.refresh([session]);\n }\n\n protected async _refreshUsers() {\n // nothing yet\n }\n \n protected async _refreshProject() {\n await this._currentProjectCache.refresh([]);\n }\n\n protected async _refreshOwnedProjects(session: InternalSession) {\n await this._ownedProjectsCache.refresh([session]);\n }\n\n static get [stackAppInternalsSymbol]() {\n return {\n fromClientJson: <HasTokenStore extends boolean, ProjectId extends string>(\n json: StackClientAppJson<HasTokenStore, ProjectId>\n ): StackClientApp<HasTokenStore, ProjectId> => {\n const providedCheckString = JSON.stringify(omit(json, [/* none currently */]));\n const existing = allClientApps.get(json.uniqueIdentifier);\n if (existing) {\n const [existingCheckString, clientApp] = existing;\n if (existingCheckString !== providedCheckString) {\n throw new StackAssertionError(\"The provided app JSON does not match the configuration of the existing client app with the same unique identifier\", { providedObj: json, existingString: existingCheckString });\n }\n return clientApp as any;\n }\n\n return new _StackClientAppImpl<HasTokenStore, ProjectId>({\n ...json,\n checkString: providedCheckString,\n });\n }\n };\n }\n\n get [stackAppInternalsSymbol]() {\n return {\n toClientJson: (): StackClientAppJson<HasTokenStore, ProjectId> => {\n if (!(\"publishableClientKey\" in this._interface.options)) {\n // TODO find a way to do this\n throw Error(\"Cannot serialize to JSON from an application without a publishable client key\");\n }\n\n return {\n baseUrl: this._interface.options.baseUrl,\n projectId: this.projectId,\n publishableClientKey: this._interface.options.publishableClientKey,\n tokenStore: this._tokenStoreInit,\n urls: this._urlOptions,\n oauthScopesOnSignIn: this._oauthScopesOnSignIn,\n uniqueIdentifier: this._getUniqueIdentifier(),\n };\n },\n setCurrentUser: (userJsonPromise: Promise<UserJson | null>) => {\n runAsynchronously(this._currentUserCache.forceSetCachedValueAsync([this._getSession()], userJsonPromise));\n },\n };\n };\n}\n\nclass _StackServerAppImpl<HasTokenStore extends boolean, ProjectId extends string> extends _StackClientAppImpl<HasTokenStore, ProjectId>\n{\n declare protected _interface: StackServerInterface;\n\n // TODO override the client user cache to use the server user cache, so we save some requests\n private readonly _currentServerUserCache = createCacheBySession(async (session) => {\n const user = await this._interface.getServerUserByToken(session);\n return Result.or(user, null);\n });\n private readonly _serverUsersCache = createCache(async () => {\n return await this._interface.listServerUsers();\n });\n private readonly _serverUserCache = createCache<string[], ServerUserJson | null>(async ([userId]) => {\n const user = await this._interface.getServerUserById(userId);\n return Result.or(user, null);\n });\n private readonly _serverTeamsCache = createCache(async () => {\n return await this._interface.listServerTeams();\n });\n private readonly _serverTeamMembersCache = createCache<string[], ServerTeamMemberJson[]>(async ([teamId]) => {\n return await this._interface.listServerTeamMembers(teamId);\n });\n private readonly _serverTeamPermissionDefinitionsCache = createCache(async () => {\n return await this._interface.listPermissionDefinitions();\n });\n private readonly _serverTeamUserPermissionsCache = createCache<\n [string, string, 'team' | 'global', boolean], \n ServerPermissionDefinitionJson[]\n >(async ([teamId, userId, type, direct]) => {\n return await this._interface.listServerTeamMemberPermissions({ teamId, userId, type, direct });\n });\n private readonly _serverEmailTemplatesCache = createCache(async () => {\n return await this._interface.listEmailTemplates();\n });\n\n constructor(options: \n | StackServerAppConstructorOptions<HasTokenStore, ProjectId>\n | {\n interface: StackServerInterface,\n tokenStore: TokenStoreInit<HasTokenStore>,\n urls: Partial<HandlerUrls> | undefined,\n oauthScopesOnSignIn?: Partial<OAuthScopesOnSignIn> | undefined,\n }\n ) {\n super(\"interface\" in options ? {\n interface: options.interface,\n tokenStore: options.tokenStore,\n urls: options.urls,\n oauthScopesOnSignIn: options.oauthScopesOnSignIn,\n } : {\n interface: new StackServerInterface({\n baseUrl: options.baseUrl ?? getDefaultBaseUrl(),\n projectId: options.projectId ?? getDefaultProjectId(),\n clientVersion,\n publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey(),\n secretServerKey: options.secretServerKey ?? getDefaultSecretServerKey(),\n }),\n tokenStore: options.tokenStore,\n urls: options.urls ?? {},\n oauthScopesOnSignIn: options.oauthScopesOnSignIn ?? {},\n });\n }\n\n protected override _createBaseUser(json: ServerUserJson): ServerBaseUser;\n protected override _createBaseUser(json: UserJson): BaseUser;\n protected override _createBaseUser(json: UserJson | ServerUserJson): BaseUser | ServerBaseUser {\n return {\n ...super._createBaseUser(json),\n ...\"serverMetadata\" in json ? {\n serverMetadata: json.serverMetadata,\n toServerJson() {\n return {\n ...this.toClientJson(),\n ...pick(json, [\n \"serverMetadata\"\n ]),\n };\n },\n } : {},\n };\n }\n\n protected override _createUserExtra(json: ServerUserJson): ServerUserExtra;\n protected override _createUserExtra(json: UserJson): UserExtra;\n protected override _createUserExtra(json: UserJson | ServerUserJson): ServerUserExtra {\n const app = this;\n return {\n async setDisplayName(displayName: string) {\n return await this.update({ displayName });\n },\n async setClientMetadata(metadata: Record<string, any>) {\n return await this.update({ clientMetadata: metadata });\n },\n async setServerMetadata(metadata: Record<string, any>) {\n return await this.update({ serverMetadata: metadata });\n },\n async setSelectedTeam(team: Team | null) {\n return await this.update({ selectedTeamId: team?.id ?? null });\n },\n async setPrimaryEmail(email: string, options?: { verified?: boolean }) {\n return await this.update({ primaryEmail: email });\n },\n getConnectedAccount: async () => {\n return await app._checkFeatureSupport(\"getConnectedAccount() on ServerUser\", {});\n },\n useConnectedAccount: () => {\n return app._useCheckFeatureSupport(\"useConnectedAccount() on ServerUser\", {});\n },\n async getTeam(teamId: string) {\n const teams = await this.listTeams();\n return teams.find((t) => t.id === teamId) ?? null;\n },\n useTeam(teamId: string) {\n const teams = this.useTeams();\n return useMemo(() => {\n return teams.find((t) => t.id === teamId) ?? null;\n }, [teams, teamId]);\n },\n async listTeams() {\n const teams = await app.listTeams();\n const withMembers = await Promise.all(teams.map(async (t) => [t, await t.listMembers()] as const));\n return withMembers.filter(([_, members]) => members.find((m) => m.userId === json.id)).map(([t]) => t);\n },\n useTeams() {\n return app._useCheckFeatureSupport(\"useTeams() on ServerUser\", {});\n },\n createTeam: async (data: ServerTeamCustomizableJson) => {\n const team = await app._interface.createServerTeamForUser(json.id, data, app._getSession());\n await app._serverTeamsCache.refresh([]);\n return app._serverTeamFromJson(team);\n },\n async listPermissions(scope: Team, options?: { direct?: boolean }): Promise<ServerPermission[]> {\n const permissions = await app._serverTeamUserPermissionsCache.getOrWait([scope.id, json.id, 'team', !!options?.direct], \"write-only\");\n return permissions.map((json) => app._serverPermissionFromJson(json));\n },\n usePermissions(scope: Team, options?: { direct?: boolean }): ServerPermission[] {\n const permissions = useAsyncCache(app._serverTeamUserPermissionsCache, [scope.id, json.id, 'team', !!options?.direct], \"user.usePermissions()\");\n return useMemo(() => permissions.map((json) => app._serverPermissionFromJson(json)), [permissions]);\n },\n async getPermission(scope: Team, permissionId: string): Promise<ServerPermission | null> {\n const permissions = await this.listPermissions(scope);\n return permissions.find((p) => p.id === permissionId) ?? null;\n },\n usePermission(scope: Team, permissionId: string): ServerPermission | null {\n const permissions = this.usePermissions(scope);\n return useMemo(() => permissions.find((p) => p.id === permissionId) ?? null, [permissions, permissionId]);\n },\n async hasPermission(scope: Team, permissionId: string): Promise<boolean> {\n return await this.getPermission(scope, permissionId) !== null;\n },\n async grantPermission(scope: Team, permissionId: string): Promise<void> {\n await app._interface.grantServerTeamUserPermission(scope.id, json.id, permissionId, 'team');\n for (const direct of [true, false]) {\n await app._serverTeamUserPermissionsCache.refresh([scope.id, json.id, 'team', direct]);\n }\n },\n async revokePermission(scope: Team, permissionId: string): Promise<void> {\n await app._interface.revokeServerTeamUserPermission(scope.id, json.id, permissionId, 'team');\n for (const direct of [true, false]) {\n await app._serverTeamUserPermissionsCache.refresh([scope.id, json.id, 'team', direct]);\n }\n },\n async delete() {\n const res = await app._interface.deleteServerServerUser(json.id);\n await app._refreshUsers();\n return res;\n },\n async update(update: ServerUserUpdateJson) {\n const res = await app._interface.setServerUserCustomizableData(json.id, update);\n await app._refreshUsers();\n return res;\n },\n async sendVerificationEmail() {\n return await app._checkFeatureSupport(\"sendVerificationEmail() on ServerUser\", {});\n },\n async updatePassword(options: { oldPassword?: string, newPassword: string}) {\n return await app._checkFeatureSupport(\"updatePassword() on ServerUser\", {});\n },\n };\n }\n\n protected _createUser(json: ServerUserJson): ServerUser {\n return {\n ...this._createBaseUser(json),\n ...this._createUserExtra(json),\n };\n }\n\n protected override _createCurrentUser(json: ServerUserJson, session: InternalSession): ProjectCurrentServerUser<ProjectId> {\n const app = this;\n const currentUser = {\n ...this._createUser(json),\n ...this._createAuth(session),\n ...this._isInternalProject() ? this._createInternalUserExtra(session) : {},\n } satisfies ServerUser;\n\n Object.freeze(currentUser);\n return currentUser as ProjectCurrentServerUser<ProjectId>;\n }\n\n protected _serverTeamMemberFromJson(json: ServerTeamMemberJson): ServerTeamMember;\n protected _serverTeamMemberFromJson(json: ServerTeamMemberJson | null): ServerTeamMember | null;\n protected _serverTeamMemberFromJson(json: ServerTeamMemberJson | null): ServerTeamMember | null {\n if (json === null) return null;\n const app = this;\n return {\n ...app._teamMemberFromJson(json),\n user: app._createUser(json.user),\n };\n }\n\n protected _serverTeamFromJson(json: ServerTeamJson): ServerTeam {\n const app = this;\n return {\n id: json.id,\n displayName: json.displayName,\n createdAt: new Date(json.createdAtMillis),\n async listMembers() {\n return (await app._interface.listServerTeamMembers(json.id)).map((u) => app._serverTeamMemberFromJson(u));\n },\n async update(update: Partial<ServerTeamCustomizableJson>) {\n await app._interface.updateServerTeam(json.id, update);\n await app._serverTeamsCache.refresh([]);\n },\n async delete() {\n await app._interface.deleteServerTeam(json.id);\n await app._serverTeamsCache.refresh([]);\n },\n useMembers() {\n const result = useAsyncCache(app._serverTeamMembersCache, [json.id], \"team.useUsers()\");\n return useMemo(() => result.map((u) => app._serverTeamMemberFromJson(u)), [result]);\n },\n async addUser(userId) {\n await app._interface.addServerUserToTeam({\n teamId: json.id,\n userId,\n });\n await app._serverTeamMembersCache.refresh([json.id]);\n },\n async removeUser(userId) {\n await app._interface.removeServerUserFromTeam({\n teamId: json.id,\n userId,\n });\n await app._serverTeamMembersCache.refresh([json.id]);\n },\n toJson() {\n return json;\n },\n };\n }\n\n\n async getUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): Promise<ProjectCurrentServerUser<ProjectId>>;\n async getUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): Promise<ProjectCurrentServerUser<ProjectId>>;\n async getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>;\n async getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null> {\n // TODO this code is duplicated from the client app; fix that\n this._ensurePersistentTokenStore(options?.tokenStore);\n const session = this._getSession(options?.tokenStore);\n const userJson = await this._currentServerUserCache.getOrWait([session], \"write-only\");\n\n if (userJson === null) {\n switch (options?.or) {\n case 'redirect': {\n await this.redirectToSignIn();\n break;\n }\n case 'throw': {\n throw new Error(\"User is not signed in but getUser was called with { or: 'throw' }\");\n }\n default: {\n return null;\n }\n }\n }\n\n return userJson && this._createCurrentUser(userJson, session);\n }\n\n async getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null> {\n console.warn(\"stackServerApp.getServerUser is deprecated; use stackServerApp.getUser instead\");\n return await this.getUser();\n }\n\n async getServerUserById(userId: string): Promise<ServerUser | null> {\n const json = await this._serverUserCache.getOrWait([userId], \"write-only\");\n return json && this._createUser(json);\n }\n\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): ProjectCurrentServerUser<ProjectId>;\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): ProjectCurrentServerUser<ProjectId>;\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null;\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null {\n // TODO this code is duplicated from the client app; fix that\n this._ensurePersistentTokenStore(options?.tokenStore);\n\n const router = NextNavigation.useRouter();\n const session = this._getSession(options?.tokenStore);\n const userJson = useAsyncCache(this._currentServerUserCache, [session], \"useUser()\");\n\n if (userJson === null) {\n switch (options?.or) {\n case 'redirect': {\n // Updating the router is not allowed during the component render function, so we do it in a different async tick\n // The error would be: \"Cannot update a component (`Router`) while rendering a different component.\"\n setTimeout(() => router.replace(this.urls.signIn), 0);\n suspend();\n throw new StackAssertionError(\"suspend should never return\");\n }\n case 'throw': {\n throw new Error(\"User is not signed in but useUser was called with { or: 'throw' }\");\n }\n case undefined:\n case \"return-null\": {\n // do nothing\n }\n }\n }\n\n return useMemo(() => {\n return userJson && this._createCurrentUser(userJson, session);\n }, [userJson, session, options?.or]);\n }\n\n useUserById(userId: string): ServerUser | null {\n const json = useAsyncCache(this._serverUserCache, [userId], \"useUserById()\");\n return useMemo(() => {\n return json && this._createUser(json);\n }, [json]);\n }\n\n async listUsers(): Promise<ServerUser[]> {\n const json = await this._serverUsersCache.getOrWait([], \"write-only\");\n return json.map((j) => this._createUser(j));\n }\n\n useUsers(): ServerUser[] {\n const json = useAsyncCache(this._serverUsersCache, [], \"useServerUsers()\");\n return useMemo(() => {\n return json.map((j) => this._createUser(j));\n }, [json]);\n }\n\n async listPermissionDefinitions(): Promise<ServerPermissionDefinitionJson[]> {\n return await this._serverTeamPermissionDefinitionsCache.getOrWait([], \"write-only\");\n }\n\n usePermissionDefinitions(): ServerPermissionDefinitionJson[] {\n return useAsyncCache(this._serverTeamPermissionDefinitionsCache, [], \"usePermissions()\");\n }\n\n _serverPermissionFromJson(json: ServerPermissionDefinitionJson): ServerPermission {\n return {\n ...this._permissionFromJson(json),\n __databaseUniqueId: json.__databaseUniqueId,\n description: json.description,\n containPermissionIds: json.containPermissionIds,\n };\n }\n\n async createPermissionDefinition(data: ServerPermissionDefinitionCustomizableJson): Promise<ServerPermission>{\n const permission = this._serverPermissionFromJson(await this._interface.createPermissionDefinition(data));\n await this._serverTeamPermissionDefinitionsCache.refresh([]);\n return permission;\n }\n\n async updatePermissionDefinition(permissionId: string, data: Partial<ServerPermissionDefinitionCustomizableJson>) {\n await this._interface.updatePermissionDefinition(permissionId, data);\n await this._serverTeamPermissionDefinitionsCache.refresh([]);\n }\n\n async deletePermissionDefinition(permissionId: string): Promise<void> {\n await this._interface.deletePermissionDefinition(permissionId);\n await this._serverTeamPermissionDefinitionsCache.refresh([]);\n }\n\n async listTeams(): Promise<ServerTeam[]> {\n const teams = await this._serverTeamsCache.getOrWait([], \"write-only\");\n return teams.map((t) => this._serverTeamFromJson(t));\n }\n\n async createTeam(data: ServerTeamCustomizableJson) : Promise<ServerTeam> {\n const team = await this._interface.createServerTeam(data);\n await this._serverTeamsCache.refresh([]);\n return this._serverTeamFromJson(team);\n }\n\n useTeams(): ServerTeam[] {\n const teams = useAsyncCache(this._serverTeamsCache, [], \"useServerTeams()\");\n return useMemo(() => {\n return teams.map((t) => this._serverTeamFromJson(t));\n }, [teams]);\n }\n\n async getTeam(teamId: string): Promise<ServerTeam | null> {\n const teams = await this.listTeams();\n return teams.find((t) => t.id === teamId) ?? null;\n }\n\n useTeam(teamId: string): ServerTeam | null {\n const teams = this.useTeams();\n return useMemo(() => {\n return teams.find((t) => t.id === teamId) ?? null;\n }, [teams, teamId]);\n }\n\n protected override async _refreshSession(session: InternalSession) {\n await Promise.all([\n super._refreshUser(session),\n this._currentServerUserCache.refresh([session]),\n ]);\n }\n\n protected override async _refreshUsers() {\n await Promise.all([\n super._refreshUsers(),\n this._serverUsersCache.refresh([]),\n ]);\n }\n\n useEmailTemplates(): ListEmailTemplatesCrud['Server']['Read'] {\n return useAsyncCache(this._serverEmailTemplatesCache, [], \"useEmailTemplates()\");\n }\n\n async listEmailTemplates(): Promise<ListEmailTemplatesCrud['Server']['Read']> {\n return await this._serverEmailTemplatesCache.getOrWait([], \"write-only\");\n }\n\n async updateEmailTemplate(type: EmailTemplateType, data: EmailTemplateCrud['Server']['Update']): Promise<void> {\n await this._interface.updateEmailTemplate(type, data);\n await this._serverEmailTemplatesCache.refresh([]);\n }\n\n async resetEmailTemplate(type: EmailTemplateType) {\n await this._interface.resetEmailTemplate(type);\n await this._serverEmailTemplatesCache.refresh([]);\n }\n}\n\nclass _StackAdminAppImpl<HasTokenStore extends boolean, ProjectId extends string> extends _StackServerAppImpl<HasTokenStore, ProjectId>\n{\n declare protected _interface: StackAdminInterface;\n \n private readonly _adminProjectCache = createCache(async () => {\n return await this._interface.getProject();\n });\n private readonly _apiKeySetsCache = createCache(async () => {\n return await this._interface.listApiKeySets();\n });\n\n constructor(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>) {\n super({\n interface: new StackAdminInterface({\n baseUrl: options.baseUrl ?? getDefaultBaseUrl(),\n projectId: options.projectId ?? getDefaultProjectId(),\n clientVersion,\n ...\"projectOwnerSession\" in options ? {\n projectOwnerSession: options.projectOwnerSession,\n } : {\n publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey(),\n secretServerKey: options.secretServerKey ?? getDefaultSecretServerKey(),\n superSecretAdminKey: options.superSecretAdminKey ?? getDefaultSuperSecretAdminKey(),\n },\n }),\n tokenStore: options.tokenStore,\n urls: options.urls,\n oauthScopesOnSignIn: options.oauthScopesOnSignIn,\n });\n }\n\n\n protected _createApiKeySetBaseFromJson(data: ApiKeySetBaseJson): ApiKeySetBase {\n const app = this;\n return {\n id: data.id,\n description: data.description,\n expiresAt: new Date(data.expiresAtMillis),\n manuallyRevokedAt: data.manuallyRevokedAtMillis ? new Date(data.manuallyRevokedAtMillis) : null,\n createdAt: new Date(data.createdAtMillis),\n isValid() {\n return this.whyInvalid() === null;\n },\n whyInvalid() {\n if (this.expiresAt.getTime() < Date.now()) return \"expired\";\n if (this.manuallyRevokedAt) return \"manually-revoked\";\n return null;\n },\n async revoke() {\n const res = await app._interface.revokeApiKeySetById(data.id);\n await app._refreshApiKeySets();\n return res;\n }\n };\n }\n\n protected _createApiKeySetFromJson(data: ApiKeySetJson): ApiKeySet {\n return {\n ...this._createApiKeySetBaseFromJson(data),\n publishableClientKey: data.publishableClientKey ? { lastFour: data.publishableClientKey.lastFour } : null,\n secretServerKey: data.secretServerKey ? { lastFour: data.secretServerKey.lastFour } : null,\n superSecretAdminKey: data.superSecretAdminKey ? { lastFour: data.superSecretAdminKey.lastFour } : null,\n };\n }\n\n protected _createApiKeySetFirstViewFromJson(data: ApiKeySetFirstViewJson): ApiKeySetFirstView {\n return {\n ...this._createApiKeySetBaseFromJson(data),\n publishableClientKey: data.publishableClientKey,\n secretServerKey: data.secretServerKey,\n superSecretAdminKey: data.superSecretAdminKey,\n };\n }\n\n async getProjectAdmin(): Promise<Project> {\n return this._projectAdminFromJson(\n await this._adminProjectCache.getOrWait([], \"write-only\"),\n this._interface,\n () => this._refreshProject()\n );\n }\n\n useProjectAdmin(): Project {\n const json = useAsyncCache(this._adminProjectCache, [], \"useProjectAdmin()\");\n return useMemo(() => this._projectAdminFromJson(\n json,\n this._interface,\n () => this._refreshProject()\n ), [json]);\n }\n\n async listApiKeySets(): Promise<ApiKeySet[]> {\n const json = await this._apiKeySetsCache.getOrWait([], \"write-only\");\n return json.map((j) => this._createApiKeySetFromJson(j));\n }\n\n useApiKeySets(): ApiKeySet[] {\n const json = useAsyncCache(this._apiKeySetsCache, [], \"useApiKeySets()\");\n return useMemo(() => {\n return json.map((j) => this._createApiKeySetFromJson(j));\n }, [json]);\n }\n\n async createApiKeySet(options: ApiKeySetCreateOptions): Promise<ApiKeySetFirstView> {\n const json = await this._interface.createApiKeySet(options);\n await this._refreshApiKeySets();\n return this._createApiKeySetFirstViewFromJson(json);\n }\n\n protected override async _refreshProject() {\n await Promise.all([\n super._refreshProject(),\n this._adminProjectCache.refresh([]),\n ]);\n }\n\n protected async _refreshApiKeySets() {\n await this._apiKeySetsCache.refresh([]);\n }\n}\n\ntype RedirectToOptions = {\n replace?: boolean,\n};\n\ntype Session = {\n getTokens(): Promise<{ accessToken: string | null, refreshToken: string | null }>,\n};\n\n/**\n * Contains everything related to the current user session.\n */\ntype Auth = {\n readonly _internalSession: InternalSession,\n readonly currentSession: Session,\n signOut(): Promise<void>,\n\n /**\n * Returns headers for sending authenticated HTTP requests to external servers. Most commonly used in cross-origin\n * requests. Similar to `getAuthJson`, but specifically for HTTP requests.\n * \n * If you are using `tokenStore: \"cookie\"`, you don't need this for same-origin requests. However, most\n * browsers now disable third-party cookies by default, so we must pass authentication tokens by header instead\n * if the client and server are on different hostnames.\n *\n * This function returns a header object that can be used with `fetch` or other HTTP request libraries to send\n * authenticated requests.\n * \n * On the server, you can then pass in the `Request` object to the `tokenStore` option\n * of your Stack app. Please note that CORS does not allow most headers by default, so you\n * must include `x-stack-auth` in the [`Access-Control-Allow-Headers` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)\n * of the CORS preflight response.\n * \n * If you are not using HTTP (and hence cannot set headers), you will need to use the `getAuthJson()` function\n * instead.\n * \n * Example:\n * \n * ```ts\n * // client\n * const res = await fetch(\"https://api.example.com\", {\n * headers: {\n * ...await stackApp.getAuthHeaders()\n * // you can also add your own headers here\n * },\n * });\n * \n * // server\n * function handleRequest(req: Request) {\n * const user = await stackServerApp.getUser({ tokenStore: req });\n * return new Response(\"Welcome, \" + user.displayName);\n * }\n * ```\n */\n getAuthHeaders(): Promise<{ \"x-stack-auth\": string }>,\n\n /**\n * Creates a JSON-serializable object containing the information to authenticate a user on an external server.\n * Similar to `getAuthHeaders`, but returns an object that can be sent over any protocol instead of just\n * HTTP headers.\n * \n * While `getAuthHeaders` is the recommended way to send authentication tokens over HTTP, your app may use\n * a different protocol, for example WebSockets or gRPC. This function returns a token object that can be JSON-serialized and sent to the server in any way you like.\n * \n * On the server, you can pass in this token object into the `tokenStore` option to fetch user details.\n * \n * Example:\n * \n * ```ts\n * // client\n * const res = await rpcCall(rpcEndpoint, {\n * data: {\n * auth: await stackApp.getAuthJson(),\n * },\n * });\n * \n * // server\n * function handleRequest(data) {\n * const user = await stackServerApp.getUser({ tokenStore: data.auth });\n * return new Response(\"Welcome, \" + user.displayName);\n * }\n * ```\n */\n getAuthJson(): Promise<{ accessToken: string | null, refreshToken: string | null }>,\n};\n\nexport type User =\n & {\n readonly projectId: string,\n readonly id: string,\n\n readonly displayName: string | null,\n setDisplayName(displayName: string): Promise<void>,\n\n /**\n * The user's email address.\n *\n * Note: This might NOT be unique across multiple users, so always use `id` for unique identification.\n */\n readonly primaryEmail: string | null,\n readonly primaryEmailVerified: boolean,\n sendVerificationEmail(): Promise<KnownErrors[\"EmailAlreadyVerified\"] | void>,\n\n readonly profileImageUrl: string | null,\n\n readonly signedUpAt: Date,\n\n readonly clientMetadata: ReadonlyJson,\n setClientMetadata(metadata: ReadonlyJson): Promise<void>,\n\n /**\n * Whether the primary e-mail can be used for authentication.\n */\n readonly authWithEmail: boolean,\n /**\n * Whether the user has a password set.\n */\n readonly hasPassword: boolean,\n readonly oauthProviders: readonly string[],\n updatePassword(options: { oldPassword: string, newPassword: string}): Promise<KnownErrors[\"PasswordMismatch\"] | KnownErrors[\"PasswordRequirementsNotMet\"] | void>,\n\n /**\n * A shorthand method to update multiple fields of the user at once.\n */\n update(update: UserUpdateJson): Promise<void>,\n\n hasPermission(scope: Team, permissionId: string): Promise<boolean>,\n\n readonly selectedTeam: Team | null,\n setSelectedTeam(team: Team | null): Promise<void>,\n\n createTeam(data: TeamCustomizableJson): Promise<Team>,\n\n getConnectedAccount(id: StandardProvider, options: { or: 'redirect', scopes?: string[] }): Promise<OAuthConnection>,\n getConnectedAccount(id: StandardProvider, options?: { or?: 'redirect' | 'throw' | 'return-null', scopes?: string[] }): Promise<OAuthConnection | null>,\n useConnectedAccount(id: StandardProvider, options: { or: 'redirect', scopes?: string[] }): OAuthConnection,\n useConnectedAccount(id: StandardProvider, options?: { or?: 'redirect' | 'throw' | 'return-null', scopes?: string[] }): OAuthConnection | null,\n\n toClientJson(): UserJson,\n }\n & AsyncStoreProperty<\"team\", [id: string], Team | null, false>\n & AsyncStoreProperty<\"teams\", [], Team[], true>\n & AsyncStoreProperty<\"permission\", [scope: Team, permissionId: string, options?: { direct?: boolean }], Permission | null, false>\n & AsyncStoreProperty<\"permissions\", [scope: Team, options?: { direct?: boolean }], Permission[], true>;\n\ntype BaseUser = Pick<User,\n | \"projectId\"\n | \"id\"\n | \"displayName\"\n | \"primaryEmail\"\n | \"primaryEmailVerified\"\n | \"profileImageUrl\"\n | \"signedUpAt\"\n | \"clientMetadata\"\n | \"hasPassword\"\n | \"authWithEmail\"\n | \"oauthProviders\"\n | \"selectedTeam\"\n | \"toClientJson\"\n>;\n\ntype UserExtra = Omit<User, keyof BaseUser>;\n\ntype InternalUserExtra =\n & {\n createProject(newProject: ProjectUpdateOptions & { displayName: string }): Promise<Project>,\n }\n & AsyncStoreProperty<\"ownedProjects\", [], Project[], true>\n\nexport type CurrentUser = Auth & User;\n\nexport type CurrentInternalUser = CurrentUser & InternalUserExtra;\n\n/**\n * A user including sensitive fields that should only be used on the server, never sent to the client\n * (such as sensitive information and serverMetadata).\n */\nexport type ServerUser =\n & {\n setPrimaryEmail(email: string, options?: { verified?: boolean | undefined }): Promise<void>,\n\n readonly serverMetadata: ReadonlyJson,\n setServerMetadata(metadata: ReadonlyJson): Promise<void>,\n\n updatePassword(options: { oldPassword?: string, newPassword: string}): Promise<KnownErrors[\"PasswordMismatch\"] | KnownErrors[\"PasswordRequirementsNotMet\"] | void>,\n\n update(user: Partial<ServerUserUpdateJson>): Promise<void>,\n delete(): Promise<void>,\n\n grantPermission(scope: Team, permissionId: string): Promise<void>,\n revokePermission(scope: Team, permissionId: string): Promise<void>,\n\n hasPermission(scope: Team, permissionId: string): Promise<boolean>,\n\n toServerJson(): ServerUserJson,\n }\n & AsyncStoreProperty<\"team\", [id: string], ServerTeam | null, false>\n & AsyncStoreProperty<\"teams\", [], ServerTeam[], true>\n & AsyncStoreProperty<\"permission\", [scope: Team, permissionId: string, options?: { direct?: boolean }], ServerPermission | null, false>\n & AsyncStoreProperty<\"permissions\", [scope: Team, options?: { direct?: boolean }], ServerPermission[], true>\n & User;\n\ntype ServerBaseUser = Pick<ServerUser,\n | keyof BaseUser\n | \"serverMetadata\"\n | \"toServerJson\"\n>;\n\ntype ServerUserExtra = Omit<ServerUser, keyof ServerBaseUser>;\n\nexport type CurrentServerUser = Auth & ServerUser;\n\nexport type CurrentInternalServerUser = CurrentServerUser & InternalUserExtra;\n\nexport type Project = {\n readonly id: string,\n readonly displayName: string,\n readonly description?: string,\n readonly createdAt: Date,\n readonly userCount: number,\n readonly isProductionMode: boolean,\n readonly evaluatedConfig: {\n readonly id: string,\n readonly allowLocalhost: boolean,\n readonly credentialEnabled: boolean,\n readonly magicLinkEnabled: boolean,\n readonly oauthProviders: OAuthProviderConfig[],\n readonly emailConfig?: EmailConfig,\n readonly domains: DomainConfig[],\n readonly createTeamOnSignUp: boolean,\n readonly teamCreatorDefaultPermissions: PermissionDefinitionJson[],\n readonly teamMemberDefaultPermissions: PermissionDefinitionJson[],\n },\n\n update(this: Project, update: ProjectUpdateOptions): Promise<void>,\n\n toJson(this: Project): ProjectJson,\n\n getProductionModeErrors(this: Project): ProductionModeError[],\n};\n\nexport type Team = {\n id: string,\n displayName: string,\n createdAt: Date,\n\n toJson(): TeamJson,\n};\n\nexport type ServerTeam = Team & {\n listMembers(): Promise<ServerTeamMember[]>,\n useMembers(): ServerTeamMember[],\n update(update: Partial<ServerTeamCustomizableJson>): Promise<void>,\n delete(): Promise<void>,\n addUser(userId: string): Promise<void>,\n removeUser(userId: string): Promise<void>,\n};\n\nexport type TeamMember = {\n userId: string,\n teamId: string,\n displayName: string | null,\n}\n\nexport type ServerTeamMember = TeamMember & {\n user: ServerUser,\n}\n\nexport type Permission = {\n id: string,\n} & (\n | { type: \"global\" }\n | { type: \"team\", teamId: string }\n);\n\nexport type ServerPermission = Permission & {\n readonly __databaseUniqueId: string,\n readonly description?: string,\n readonly containPermissionIds: string[],\n};\n\n\nexport type Connection = {\n id: string,\n}\n\nexport type OAuthConnection = Connection & {\n getAccessToken(): Promise<{ accessToken: string }>,\n useAccessToken(): { accessToken: string },\n}\n\n\nexport type ApiKeySetBase = {\n id: string,\n description: string,\n expiresAt: Date,\n manuallyRevokedAt: Date | null,\n createdAt: Date,\n isValid(): boolean,\n whyInvalid(): \"expired\" | \"manually-revoked\" | null,\n revoke(): Promise<void>,\n};\n\nexport type ApiKeySetFirstView = ApiKeySetBase & {\n publishableClientKey?: string,\n secretServerKey?: string,\n superSecretAdminKey?: string,\n};\n\nexport type ApiKeySet = ApiKeySetBase & {\n publishableClientKey: null | {\n lastFour: string,\n },\n secretServerKey: null | {\n lastFour: string,\n },\n superSecretAdminKey: null | {\n lastFour: string,\n },\n};\n\n\nexport type EmailConfig = EmailConfigJson;\n\nexport type DomainConfig = DomainConfigJson;\n\nexport type OAuthProviderConfig = OAuthProviderConfigJson;\n\nexport type GetUserOptions<HasTokenStore> =\n & {\n or?: 'redirect' | 'throw' | 'return-null',\n tokenStore?: TokenStoreInit,\n }\n & (HasTokenStore extends false ? {\n tokenStore: TokenStoreInit,\n } : {});\n\ntype AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultiple extends boolean> =\n & { [key in `${IsMultiple extends true ? \"list\" : \"get\"}${Capitalize<Name>}`]: (...args: Args) => Promise<Value> }\n & { [key in `use${Capitalize<Name>}`]: (...args: Args) => Value }\n\nexport type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & {\n readonly projectId: ProjectId,\n\n readonly urls: Readonly<HandlerUrls>,\n\n signInWithOAuth(provider: string): Promise<void>,\n signInWithCredential(options: { email: string, password: string }): Promise<KnownErrors[\"EmailPasswordMismatch\"] | void>,\n signUpWithCredential(options: { email: string, password: string }): Promise<KnownErrors[\"UserEmailAlreadyExists\"] | KnownErrors[\"PasswordRequirementsNotMet\"] | void>,\n callOAuthCallback(): Promise<boolean>,\n sendForgotPasswordEmail(email: string): Promise<KnownErrors[\"UserNotFound\"] | void>,\n sendMagicLinkEmail(email: string): Promise<KnownErrors[\"RedirectUrlNotWhitelisted\"] | void>,\n resetPassword(options: { code: string, password: string }): Promise<KnownErrors[\"PasswordResetError\"] | void>,\n verifyPasswordResetCode(code: string): Promise<KnownErrors[\"PasswordResetCodeError\"] | void>,\n verifyEmail(code: string): Promise<KnownErrors[\"EmailVerificationError\"] | void>,\n signInWithMagicLink(code: string): Promise<KnownErrors[\"MagicLinkError\"] | void>,\n\n redirectToOAuthCallback(): Promise<void>,\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): ProjectCurrentUser<ProjectId>,\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): ProjectCurrentUser<ProjectId>,\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentUser<ProjectId> | null,\n getUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): Promise<ProjectCurrentUser<ProjectId>>,\n getUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): Promise<ProjectCurrentUser<ProjectId>>,\n getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>,\n\n [stackAppInternalsSymbol]: {\n toClientJson(): StackClientAppJson<HasTokenStore, ProjectId>,\n setCurrentUser(userJsonPromise: Promise<UserJson | null>): void,\n },\n }\n & AsyncStoreProperty<\"project\", [], ClientProjectJson, false>\n & { [K in `redirectTo${Capitalize<keyof Omit<HandlerUrls, 'handler' | 'oauthCallback'>>}`]: (options?: RedirectToOptions) => Promise<void> }\n);\ntype StackClientAppConstructor = {\n new <\n TokenStoreType extends string,\n HasTokenStore extends (TokenStoreType extends {} ? true : boolean),\n ProjectId extends string\n >(options: StackClientAppConstructorOptions<HasTokenStore, ProjectId>): StackClientApp<HasTokenStore, ProjectId>,\n new (options: StackClientAppConstructorOptions<boolean, string>): StackClientApp<boolean, string>,\n\n [stackAppInternalsSymbol]: {\n fromClientJson<HasTokenStore extends boolean, ProjectId extends string>(\n json: StackClientAppJson<HasTokenStore, ProjectId>\n ): StackClientApp<HasTokenStore, ProjectId>,\n },\n};\nexport const StackClientApp: StackClientAppConstructor = _StackClientAppImpl;\n\nexport type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & {\n createTeam(data: ServerTeamCustomizableJson): Promise<ServerTeam>,\n createPermissionDefinition(data: ServerPermissionDefinitionCustomizableJson): Promise<ServerPermission>,\n updatePermissionDefinition(permissionId: string, data: Partial<ServerPermissionDefinitionCustomizableJson>): Promise<void>,\n deletePermissionDefinition(permissionId: string): Promise<void>,\n listPermissionDefinitions(): Promise<ServerPermissionDefinitionJson[]>,\n usePermissionDefinitions(): ServerPermissionDefinitionJson[],\n useEmailTemplates(): ListEmailTemplatesCrud['Server']['Read'],\n listEmailTemplates(): Promise<ListEmailTemplatesCrud['Server']['Read']>,\n updateEmailTemplate(type: EmailTemplateType, data: EmailTemplateCrud['Server']['Update']): Promise<void>,\n resetEmailTemplate(type: EmailTemplateType): Promise<void>,\n\n /**\n * @deprecated use `getUser()` instead\n */\n getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null>,\n\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): ProjectCurrentServerUser<ProjectId>,\n useUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): ProjectCurrentServerUser<ProjectId>,\n useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null,\n getUser(options: GetUserOptions<HasTokenStore> & { or: 'redirect' }): Promise<ProjectCurrentServerUser<ProjectId>>,\n getUser(options: GetUserOptions<HasTokenStore> & { or: 'throw' }): Promise<ProjectCurrentServerUser<ProjectId>>,\n getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>,\n }\n & StackClientApp<HasTokenStore, ProjectId>\n & AsyncStoreProperty<\"users\", [], ServerUser[], true>\n & AsyncStoreProperty<\"team\", [id: string], ServerTeam | null, false>\n & AsyncStoreProperty<\"teams\", [], ServerTeam[], true>\n);\ntype StackServerAppConstructor = {\n new <\n TokenStoreType extends string,\n HasTokenStore extends (TokenStoreType extends {} ? true : boolean),\n ProjectId extends string\n >(options: StackServerAppConstructorOptions<HasTokenStore, ProjectId>): StackServerApp<HasTokenStore, ProjectId>,\n new (options: StackServerAppConstructorOptions<boolean, string>): StackServerApp<boolean, string>,\n};\nexport const StackServerApp: StackServerAppConstructor = _StackServerAppImpl;\n\nexport type StackAdminApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (\n & StackServerApp<HasTokenStore, ProjectId>\n & AsyncStoreProperty<\"projectAdmin\", [], Project, false>\n & AsyncStoreProperty<\"apiKeySets\", [], ApiKeySet[], true>\n & {\n createApiKeySet(options: ApiKeySetCreateOptions): Promise<ApiKeySetFirstView>,\n }\n);\ntype StackAdminAppConstructor = {\n new <\n HasTokenStore extends boolean,\n ProjectId extends string\n >(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>): StackAdminApp<HasTokenStore, ProjectId>,\n new (options: StackAdminAppConstructorOptions<boolean, string>): StackAdminApp<boolean, string>,\n};\nexport const StackAdminApp: StackAdminAppConstructor = _StackAdminAppImpl;\n"],"mappings":"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","names":["parsed","json"]}
|