@stackframe/stack 2.4.23 → 2.4.25
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 +18 -0
- package/dist/components/magic-link-sign-in.js +1 -1
- package/dist/components/magic-link-sign-in.js.map +1 -1
- package/dist/components/selected-team-switcher.d.mts +8 -0
- package/dist/components/selected-team-switcher.d.ts +8 -0
- package/dist/components/selected-team-switcher.js +75 -0
- package/dist/components/selected-team-switcher.js.map +1 -0
- package/dist/components-page/stack-handler.js +1 -1
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components/magic-link-sign-in.js +1 -1
- package/dist/esm/components/magic-link-sign-in.js.map +1 -1
- package/dist/esm/components/selected-team-switcher.js +63 -0
- package/dist/esm/components/selected-team-switcher.js.map +1 -0
- package/dist/esm/components-page/stack-handler.js +1 -1
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/index.js +22 -16
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/hooks.js.map +1 -1
- package/dist/esm/lib/stack-app.js +285 -282
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/esm/providers/stack-provider.js +1 -1
- package/dist/esm/providers/stack-provider.js.map +1 -1
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/hooks.d.mts +3 -3
- package/dist/lib/hooks.d.ts +3 -3
- package/dist/lib/hooks.js.map +1 -1
- package/dist/lib/stack-app.d.mts +100 -81
- package/dist/lib/stack-app.d.ts +100 -81
- package/dist/lib/stack-app.js +283 -280
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/providers/stack-provider.js +1 -1
- package/dist/providers/stack-provider.js.map +1 -1
- package/package.json +3 -3
|
@@ -13,7 +13,7 @@ function StackProvider({
|
|
|
13
13
|
] });
|
|
14
14
|
}
|
|
15
15
|
function UserFetcher(props) {
|
|
16
|
-
const userPromise = props.app.getUser().then((user) => user?.
|
|
16
|
+
const userPromise = props.app.getUser().then((user) => user?.toClientJson() ?? null);
|
|
17
17
|
return /* @__PURE__ */ jsx(UserSetter, { userJsonPromise: userPromise });
|
|
18
18
|
}
|
|
19
19
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/providers/stack-provider.tsx"],"sourcesContent":["import React, { Suspense } from 'react';\nimport { StackClientApp, stackAppInternalsSymbol } from '../lib/stack-app';\nimport { StackProviderClient, UserSetter } from './stack-provider-client';\n\n\nexport default function StackProvider({\n children,\n app,\n}: {\n children: React.ReactNode,\n app: StackClientApp<true>,\n}) {\n return (\n <StackProviderClient appJson={app[stackAppInternalsSymbol].toClientJson()}>\n <Suspense fallback={null}>\n <UserFetcher app={app} />\n </Suspense>\n {children}\n </StackProviderClient>\n );\n}\n\nfunction UserFetcher(props: { app: StackClientApp<true> }) {\n const userPromise = props.app.getUser().then((user) => user?.
|
|
1
|
+
{"version":3,"sources":["../../../src/providers/stack-provider.tsx"],"sourcesContent":["import React, { Suspense } from 'react';\nimport { StackClientApp, stackAppInternalsSymbol } from '../lib/stack-app';\nimport { StackProviderClient, UserSetter } from './stack-provider-client';\n\n\nexport default function StackProvider({\n children,\n app,\n}: {\n children: React.ReactNode,\n app: StackClientApp<true>,\n}) {\n return (\n <StackProviderClient appJson={app[stackAppInternalsSymbol].toClientJson()}>\n <Suspense fallback={null}>\n <UserFetcher app={app} />\n </Suspense>\n {children}\n </StackProviderClient>\n );\n}\n\nfunction UserFetcher(props: { app: StackClientApp<true> }) {\n const userPromise = props.app.getUser().then((user) => user?.toClientJson() ?? null);\n return <UserSetter userJsonPromise={userPromise} />;\n}\n"],"mappings":";AAAA,SAAgB,gBAAgB;AAChC,SAAyB,+BAA+B;AACxD,SAAS,qBAAqB,kBAAkB;AAW5C,SAEI,KAFJ;AARW,SAAR,cAA+B;AAAA,EACpC;AAAA,EACA;AACF,GAGG;AACD,SACE,qBAAC,uBAAoB,SAAS,IAAI,uBAAuB,EAAE,aAAa,GACtE;AAAA,wBAAC,YAAS,UAAU,MAClB,8BAAC,eAAY,KAAU,GACzB;AAAA,IACC;AAAA,KACH;AAEJ;AAEA,SAAS,YAAY,OAAsC;AACzD,QAAM,cAAc,MAAM,IAAI,QAAQ,EAAE,KAAK,CAAC,SAAS,MAAM,aAAa,KAAK,IAAI;AACnF,SAAO,oBAAC,cAAW,iBAAiB,aAAa;AACnD;","names":[]}
|
package/dist/index.d.mts
CHANGED
|
@@ -8,6 +8,7 @@ export { default as EmailVerification } from './components-page/email-verificati
|
|
|
8
8
|
export { default as PasswordReset } from './components-page/password-reset.mjs';
|
|
9
9
|
export { default as ForgotPassword } from './components-page/forgot-password.mjs';
|
|
10
10
|
export { default as MessageCard } from './components/message-cards/message-card.mjs';
|
|
11
|
+
export { default as SelectedTeamSwitcher, default as TeamSwitcher } from './components/selected-team-switcher.mjs';
|
|
11
12
|
export { default as CredentialSignIn } from './components/credential-sign-in.mjs';
|
|
12
13
|
export { default as CredentialSignUp } from './components/credential-sign-up.mjs';
|
|
13
14
|
export { default as OAuthButton } from './components/oauth-button.mjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export { default as EmailVerification } from './components-page/email-verificati
|
|
|
8
8
|
export { default as PasswordReset } from './components-page/password-reset.js';
|
|
9
9
|
export { default as ForgotPassword } from './components-page/forgot-password.js';
|
|
10
10
|
export { default as MessageCard } from './components/message-cards/message-card.js';
|
|
11
|
+
export { default as SelectedTeamSwitcher, default as TeamSwitcher } from './components/selected-team-switcher.js';
|
|
11
12
|
export { default as CredentialSignIn } from './components/credential-sign-in.js';
|
|
12
13
|
export { default as CredentialSignUp } from './components/credential-sign-up.js';
|
|
13
14
|
export { default as OAuthButton } from './components/oauth-button.js';
|
package/dist/index.js
CHANGED
|
@@ -42,6 +42,7 @@ __export(src_exports, {
|
|
|
42
42
|
OAuthGroup: () => import_oauth_group.default,
|
|
43
43
|
PasswordField: () => import_password_field.default,
|
|
44
44
|
PasswordReset: () => import_password_reset.default,
|
|
45
|
+
SelectedTeamSwitcher: () => import_selected_team_switcher.default,
|
|
45
46
|
SignIn: () => import_sign_in.default,
|
|
46
47
|
SignUp: () => import_sign_up.default,
|
|
47
48
|
StackAdminApp: () => import_stack_app.StackAdminApp,
|
|
@@ -50,6 +51,7 @@ __export(src_exports, {
|
|
|
50
51
|
StackProvider: () => import_stack_provider.default,
|
|
51
52
|
StackServerApp: () => import_stack_app.StackServerApp,
|
|
52
53
|
StackTheme: () => import_theme_provider.StackTheme,
|
|
54
|
+
TeamSwitcher: () => import_selected_team_switcher.default,
|
|
53
55
|
UserButton: () => import_user_button.default,
|
|
54
56
|
useComponents: () => import_component_provider.useComponents,
|
|
55
57
|
useDesign: () => import_design_provider.useDesign,
|
|
@@ -67,6 +69,7 @@ var import_email_verification = __toESM(require("./components-page/email-verific
|
|
|
67
69
|
var import_password_reset = __toESM(require("./components-page/password-reset"));
|
|
68
70
|
var import_forgot_password = __toESM(require("./components-page/forgot-password"));
|
|
69
71
|
var import_message_card = __toESM(require("./components/message-cards/message-card"));
|
|
72
|
+
var import_selected_team_switcher = __toESM(require("./components/selected-team-switcher"));
|
|
70
73
|
var import_credential_sign_in = __toESM(require("./components/credential-sign-in"));
|
|
71
74
|
var import_credential_sign_up = __toESM(require("./components/credential-sign-up"));
|
|
72
75
|
var import_oauth_button = __toESM(require("./components/oauth-button"));
|
|
@@ -92,6 +95,7 @@ __reExport(src_exports, require("./components-core"), module.exports);
|
|
|
92
95
|
OAuthGroup,
|
|
93
96
|
PasswordField,
|
|
94
97
|
PasswordReset,
|
|
98
|
+
SelectedTeamSwitcher,
|
|
95
99
|
SignIn,
|
|
96
100
|
SignUp,
|
|
97
101
|
StackAdminApp,
|
|
@@ -100,6 +104,7 @@ __reExport(src_exports, require("./components-core"), module.exports);
|
|
|
100
104
|
StackProvider,
|
|
101
105
|
StackServerApp,
|
|
102
106
|
StackTheme,
|
|
107
|
+
TeamSwitcher,
|
|
103
108
|
UserButton,
|
|
104
109
|
useComponents,
|
|
105
110
|
useDesign,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["export { default as StackProvider } from \"./providers/stack-provider\";\n\nexport { useUser, useStackApp } from \"./lib/hooks\";\nexport { StackClientApp, StackServerApp, StackAdminApp } from \"./lib/stack-app\";\n\nexport { default as StackHandler } from \"./components-page/stack-handler\";\nexport { default as SignIn } from \"./components-page/sign-in\";\nexport { default as SignUp } from \"./components-page/sign-up\";\nexport { default as EmailVerification } from \"./components-page/email-verification\";\nexport { default as PasswordReset } from \"./components-page/password-reset\";\nexport { default as ForgotPassword } from \"./components-page/forgot-password\";\nexport { default as MessageCard } from \"./components/message-cards/message-card\";\n\nexport { default as CredentialSignIn } from \"./components/credential-sign-in\";\nexport { default as CredentialSignUp } from \"./components/credential-sign-up\";\nexport { default as OAuthButton } from \"./components/oauth-button\";\nexport { default as OAuthGroup } from \"./components/oauth-group\";\nexport { default as PasswordField } from \"./components/password-field\";\nexport { default as UserButton } from \"./components/user-button\";\nexport { default as AccountSettings } from \"./components-page/account-settings\";\nexport { default as AuthPage } from \"./components-page/auth-page\";\n\nexport { useDesign } from './providers/design-provider';\nexport type { ColorPalette } from './providers/design-provider';\nexport { useComponents } from './providers/component-provider';\nexport { StackTheme } from './providers/theme-provider';\nexport type { ThemeConfig } from './providers/theme-provider';\n\nexport type { \n CurrentUser, \n Project, \n ServerUser as ServerUser, \n ApiKeySetFirstView, \n ApiKeySet, \n ServerTeam, \n Team, \n TeamMember,\n ServerTeamMember,\n ServerPermission as Permission,\n ServerPermission,\n} from './lib/stack-app';\n\nexport * from './components-core';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAyC;AAEzC,mBAAqC;AACrC,uBAA8D;AAE9D,2BAAwC;AACxC,qBAAkC;AAClC,qBAAkC;AAClC,gCAA6C;AAC7C,4BAAyC;AACzC,6BAA0C;AAC1C,0BAAuC;
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx"],"sourcesContent":["export { default as StackProvider } from \"./providers/stack-provider\";\n\nexport { useUser, useStackApp } from \"./lib/hooks\";\nexport { StackClientApp, StackServerApp, StackAdminApp } from \"./lib/stack-app\";\n\nexport { default as StackHandler } from \"./components-page/stack-handler\";\nexport { default as SignIn } from \"./components-page/sign-in\";\nexport { default as SignUp } from \"./components-page/sign-up\";\nexport { default as EmailVerification } from \"./components-page/email-verification\";\nexport { default as PasswordReset } from \"./components-page/password-reset\";\nexport { default as ForgotPassword } from \"./components-page/forgot-password\";\nexport { default as MessageCard } from \"./components/message-cards/message-card\";\nexport {\n default as SelectedTeamSwitcher,\n /**\n * @deprecated This was renamed to `SelectedTeamSwitcher`.\n */\n default as TeamSwitcher\n} from \"./components/selected-team-switcher\";\n\n\nexport { default as CredentialSignIn } from \"./components/credential-sign-in\";\nexport { default as CredentialSignUp } from \"./components/credential-sign-up\";\nexport { default as OAuthButton } from \"./components/oauth-button\";\nexport { default as OAuthGroup } from \"./components/oauth-group\";\nexport { default as PasswordField } from \"./components/password-field\";\nexport { default as UserButton } from \"./components/user-button\";\nexport { default as AccountSettings } from \"./components-page/account-settings\";\nexport { default as AuthPage } from \"./components-page/auth-page\";\n\nexport { useDesign } from './providers/design-provider';\nexport type { ColorPalette } from './providers/design-provider';\nexport { useComponents } from './providers/component-provider';\nexport { StackTheme } from './providers/theme-provider';\nexport type { ThemeConfig } from './providers/theme-provider';\n\nexport type { \n CurrentUser, \n Project, \n ServerUser as ServerUser, \n ApiKeySetFirstView, \n ApiKeySet, \n ServerTeam, \n Team, \n TeamMember,\n ServerTeamMember,\n ServerPermission as Permission,\n ServerPermission,\n} from './lib/stack-app';\n\nexport * from './components-core';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAyC;AAEzC,mBAAqC;AACrC,uBAA8D;AAE9D,2BAAwC;AACxC,qBAAkC;AAClC,qBAAkC;AAClC,gCAA6C;AAC7C,4BAAyC;AACzC,6BAA0C;AAC1C,0BAAuC;AACvC,oCAMO;AAGP,gCAA4C;AAC5C,gCAA4C;AAC5C,0BAAuC;AACvC,yBAAsC;AACtC,4BAAyC;AACzC,yBAAsC;AACtC,8BAA2C;AAC3C,uBAAoC;AAEpC,6BAA0B;AAE1B,gCAA8B;AAC9B,4BAA2B;AAiB3B,wBAAc,8BAlDd;","names":[]}
|
package/dist/lib/hooks.d.mts
CHANGED
|
@@ -7,14 +7,14 @@ import '@stackframe/stack-shared/dist/interface/serverInterface';
|
|
|
7
7
|
import '@stackframe/stack-shared/dist/interface/crud/email-templates';
|
|
8
8
|
import '@stackframe/stack-shared/dist/sessions';
|
|
9
9
|
|
|
10
|
+
type GetUserOptions = GetUserOptions$1<true> & {
|
|
11
|
+
projectIdMustMatch?: string;
|
|
12
|
+
};
|
|
10
13
|
/**
|
|
11
14
|
* Returns the current user object. Equivalent to `useStackApp().useUser()`.
|
|
12
15
|
*
|
|
13
16
|
* @returns the current user
|
|
14
17
|
*/
|
|
15
|
-
type GetUserOptions = GetUserOptions$1 & {
|
|
16
|
-
projectIdMustMatch?: string;
|
|
17
|
-
};
|
|
18
18
|
declare function useUser(options: GetUserOptions & {
|
|
19
19
|
or: 'redirect' | 'throw';
|
|
20
20
|
projectIdMustMatch: "internal";
|
package/dist/lib/hooks.d.ts
CHANGED
|
@@ -7,14 +7,14 @@ import '@stackframe/stack-shared/dist/interface/serverInterface';
|
|
|
7
7
|
import '@stackframe/stack-shared/dist/interface/crud/email-templates';
|
|
8
8
|
import '@stackframe/stack-shared/dist/sessions';
|
|
9
9
|
|
|
10
|
+
type GetUserOptions = GetUserOptions$1<true> & {
|
|
11
|
+
projectIdMustMatch?: string;
|
|
12
|
+
};
|
|
10
13
|
/**
|
|
11
14
|
* Returns the current user object. Equivalent to `useStackApp().useUser()`.
|
|
12
15
|
*
|
|
13
16
|
* @returns the current user
|
|
14
17
|
*/
|
|
15
|
-
type GetUserOptions = GetUserOptions$1 & {
|
|
16
|
-
projectIdMustMatch?: string;
|
|
17
|
-
};
|
|
18
18
|
declare function useUser(options: GetUserOptions & {
|
|
19
19
|
or: 'redirect' | 'throw';
|
|
20
20
|
projectIdMustMatch: "internal";
|
package/dist/lib/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/hooks.ts"],"sourcesContent":["import { CurrentUser, GetUserOptions as AppGetUserOptions, StackClientApp, CurrentInternalUser } from \"./stack-app\";\nimport { StackContext } from \"../providers/stack-provider-client\";\nimport { useContext } from \"react\";\n\n/**\n * Returns the current user object. Equivalent to `useStackApp().useUser()`.\n * \n * @returns the current user\n */\
|
|
1
|
+
{"version":3,"sources":["../../src/lib/hooks.ts"],"sourcesContent":["import { CurrentUser, GetUserOptions as AppGetUserOptions, StackClientApp, CurrentInternalUser } from \"./stack-app\";\nimport { StackContext } from \"../providers/stack-provider-client\";\nimport { useContext } from \"react\";\n\ntype GetUserOptions = AppGetUserOptions<true> & {\n projectIdMustMatch?: string,\n};\n\n/**\n * Returns the current user object. Equivalent to `useStackApp().useUser()`.\n * \n * @returns the current user\n */\nexport function useUser(options: GetUserOptions & { or: 'redirect' | 'throw', projectIdMustMatch: \"internal\" }): CurrentInternalUser;\nexport function useUser(options: GetUserOptions & { or: 'redirect' | 'throw' }): CurrentUser;\nexport function useUser(options: GetUserOptions & { projectIdMustMatch: \"internal\" }): CurrentInternalUser | null;\nexport function useUser(options?: GetUserOptions): CurrentUser | CurrentInternalUser | null;\nexport function useUser(options: GetUserOptions = {}): CurrentUser | CurrentInternalUser | null {\n const stackApp = useStackApp(options);\n if (options.projectIdMustMatch && stackApp.projectId !== options.projectIdMustMatch) {\n throw new Error(\"Unexpected project ID in useStackApp: \" + stackApp.projectId);\n }\n if (options.projectIdMustMatch === \"internal\") {\n return stackApp.useUser(options) as CurrentInternalUser;\n } else {\n return stackApp.useUser(options) as CurrentUser;\n }\n}\n\n/**\n * Returns the current Stack app associated with the StackProvider.\n * \n * @returns the current Stack app\n */\nexport function useStackApp<ProjectId extends string>(options: { projectIdMustMatch?: ProjectId } = {}): StackClientApp<true, ProjectId> {\n const context = useContext(StackContext);\n if (context === null) {\n throw new Error(\"useStackApp must be used within a StackProvider\");\n }\n const stackApp = context.app;\n if (options.projectIdMustMatch && stackApp.projectId !== options.projectIdMustMatch) {\n throw new Error(\"Unexpected project ID in useStackApp: \" + stackApp.projectId);\n }\n return stackApp as StackClientApp<true, ProjectId>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mCAA6B;AAC7B,mBAA2B;AAepB,SAAS,QAAQ,UAA0B,CAAC,GAA6C;AAC9F,QAAM,WAAW,YAAY,OAAO;AACpC,MAAI,QAAQ,sBAAsB,SAAS,cAAc,QAAQ,oBAAoB;AACnF,UAAM,IAAI,MAAM,2CAA2C,SAAS,SAAS;AAAA,EAC/E;AACA,MAAI,QAAQ,uBAAuB,YAAY;AAC7C,WAAO,SAAS,QAAQ,OAAO;AAAA,EACjC,OAAO;AACL,WAAO,SAAS,QAAQ,OAAO;AAAA,EACjC;AACF;AAOO,SAAS,YAAsC,UAA8C,CAAC,GAAoC;AACvI,QAAM,cAAU,yBAAW,yCAAY;AACvC,MAAI,YAAY,MAAM;AACpB,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AACA,QAAM,WAAW,QAAQ;AACzB,MAAI,QAAQ,sBAAsB,SAAS,cAAc,QAAQ,oBAAoB;AACnF,UAAM,IAAI,MAAM,2CAA2C,SAAS,SAAS;AAAA,EAC/E;AACA,SAAO;AACT;","names":[]}
|
package/dist/lib/stack-app.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ServerUserJson, OAuthProviderConfigJson
|
|
2
|
-
import { StandardProvider,
|
|
1
|
+
import { KnownErrors, ServerUserJson, OAuthProviderConfigJson } from '@stackframe/stack-shared';
|
|
2
|
+
import { StandardProvider, UserUpdateJson, UserJson, ProjectJson, ProductionModeError, TeamJson, EmailConfigJson, DomainConfigJson, ClientProjectJson } from '@stackframe/stack-shared/dist/interface/clientInterface';
|
|
3
3
|
import { ReadonlyJson } from '@stackframe/stack-shared/dist/utils/json';
|
|
4
4
|
import { ProjectUpdateOptions, ApiKeySetCreateOptions } from '@stackframe/stack-shared/dist/interface/adminInterface';
|
|
5
5
|
import { ServerUserUpdateJson, ServerTeamCustomizableJson, ServerPermissionDefinitionCustomizableJson, ServerPermissionDefinitionJson, EmailTemplateType } from '@stackframe/stack-shared/dist/interface/serverInterface';
|
|
@@ -36,6 +36,7 @@ type OAuthScopesOnSignIn = {
|
|
|
36
36
|
[key in StandardProvider]: string[];
|
|
37
37
|
};
|
|
38
38
|
type ProjectCurrentUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalUser : CurrentUser;
|
|
39
|
+
type ProjectCurrentServerUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalServerUser : CurrentServerUser;
|
|
39
40
|
type StackClientAppConstructorOptions<HasTokenStore extends boolean, ProjectId extends string> = {
|
|
40
41
|
baseUrl?: string;
|
|
41
42
|
projectId?: ProjectId;
|
|
@@ -68,10 +69,10 @@ type Session = {
|
|
|
68
69
|
/**
|
|
69
70
|
* Contains everything related to the current user session.
|
|
70
71
|
*/
|
|
71
|
-
type Auth
|
|
72
|
+
type Auth = {
|
|
72
73
|
readonly _internalSession: InternalSession;
|
|
73
74
|
readonly currentSession: Session;
|
|
74
|
-
signOut(
|
|
75
|
+
signOut(): Promise<void>;
|
|
75
76
|
/**
|
|
76
77
|
* Returns headers for sending authenticated HTTP requests to external servers. Most commonly used in cross-origin
|
|
77
78
|
* requests. Similar to `getAuthJson`, but specifically for HTTP requests.
|
|
@@ -143,26 +144,12 @@ type Auth<T, C> = {
|
|
|
143
144
|
accessToken: string | null;
|
|
144
145
|
refreshToken: string | null;
|
|
145
146
|
}>;
|
|
146
|
-
update(this: T, user: C): Promise<void>;
|
|
147
|
-
updateSelectedTeam(this: T, team: Team | null): Promise<void>;
|
|
148
|
-
sendVerificationEmail(this: T): Promise<KnownErrors["EmailAlreadyVerified"] | void>;
|
|
149
|
-
updatePassword(this: T, options: {
|
|
150
|
-
oldPassword: string;
|
|
151
|
-
newPassword: string;
|
|
152
|
-
}): Promise<KnownErrors["PasswordMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
|
|
153
147
|
};
|
|
154
|
-
type
|
|
155
|
-
createProject(this: T, newProject: ProjectUpdateOptions & {
|
|
156
|
-
displayName: string;
|
|
157
|
-
}): Promise<Project>;
|
|
158
|
-
listOwnedProjects(this: T): Promise<Project[]>;
|
|
159
|
-
useOwnedProjects(this: T): Project[];
|
|
160
|
-
onOwnedProjectsChange(this: T, callback: (projects: Project[]) => void): void;
|
|
161
|
-
};
|
|
162
|
-
type User = ({
|
|
148
|
+
type User = {
|
|
163
149
|
readonly projectId: string;
|
|
164
150
|
readonly id: string;
|
|
165
151
|
readonly displayName: string | null;
|
|
152
|
+
setDisplayName(displayName: string): Promise<void>;
|
|
166
153
|
/**
|
|
167
154
|
* The user's email address.
|
|
168
155
|
*
|
|
@@ -170,71 +157,87 @@ type User = ({
|
|
|
170
157
|
*/
|
|
171
158
|
readonly primaryEmail: string | null;
|
|
172
159
|
readonly primaryEmailVerified: boolean;
|
|
160
|
+
sendVerificationEmail(): Promise<KnownErrors["EmailAlreadyVerified"] | void>;
|
|
173
161
|
readonly profileImageUrl: string | null;
|
|
174
162
|
readonly signedUpAt: Date;
|
|
175
163
|
readonly clientMetadata: ReadonlyJson;
|
|
176
|
-
|
|
177
|
-
|
|
164
|
+
setClientMetadata(metadata: ReadonlyJson): Promise<void>;
|
|
165
|
+
/**
|
|
166
|
+
* Whether the primary e-mail can be used for authentication.
|
|
167
|
+
*/
|
|
178
168
|
readonly authWithEmail: boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Whether the user has a password set.
|
|
171
|
+
*/
|
|
172
|
+
readonly hasPassword: boolean;
|
|
179
173
|
readonly oauthProviders: readonly string[];
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
174
|
+
updatePassword(options: {
|
|
175
|
+
oldPassword: string;
|
|
176
|
+
newPassword: string;
|
|
177
|
+
}): Promise<KnownErrors["PasswordMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
|
|
178
|
+
/**
|
|
179
|
+
* A shorthand method to update multiple fields of the user at once.
|
|
180
|
+
*/
|
|
181
|
+
update(update: UserUpdateJson): Promise<void>;
|
|
182
|
+
hasPermission(scope: Team, permissionId: string): Promise<boolean>;
|
|
183
|
+
readonly selectedTeam: Team | null;
|
|
184
|
+
setSelectedTeam(team: Team | null): Promise<void>;
|
|
185
|
+
getConnectedAccount(id: StandardProvider, options: {
|
|
187
186
|
or: 'redirect';
|
|
188
187
|
scopes?: string[];
|
|
189
188
|
}): Promise<OAuthConnection>;
|
|
190
|
-
|
|
191
|
-
or?: 'redirect';
|
|
189
|
+
getConnectedAccount(id: StandardProvider, options?: {
|
|
190
|
+
or?: 'redirect' | 'throw' | 'return-null';
|
|
192
191
|
scopes?: string[];
|
|
193
192
|
}): Promise<OAuthConnection | null>;
|
|
194
|
-
|
|
195
|
-
scopes?: string[];
|
|
196
|
-
}): OAuthConnection | null;
|
|
197
|
-
useConnection(id: StandardProvider, options: {
|
|
193
|
+
useConnectedAccount(id: StandardProvider, options: {
|
|
198
194
|
or: 'redirect';
|
|
199
195
|
scopes?: string[];
|
|
200
196
|
}): OAuthConnection;
|
|
201
|
-
|
|
202
|
-
or?: 'redirect';
|
|
197
|
+
useConnectedAccount(id: StandardProvider, options?: {
|
|
198
|
+
or?: 'redirect' | 'throw' | 'return-null';
|
|
203
199
|
scopes?: string[];
|
|
204
200
|
}): OAuthConnection | null;
|
|
205
|
-
|
|
206
|
-
} & AsyncStoreProperty<"team", [id: string], Team | null, false> & AsyncStoreProperty<"teams", [], Team[], true> &
|
|
201
|
+
toClientJson(): UserJson;
|
|
202
|
+
} & AsyncStoreProperty<"team", [id: string], Team | null, false> & AsyncStoreProperty<"teams", [], Team[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
|
|
207
203
|
direct?: boolean;
|
|
208
|
-
}], Permission | null, false
|
|
204
|
+
}], Permission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
|
|
209
205
|
direct?: boolean;
|
|
210
|
-
}], Permission[], true
|
|
211
|
-
type
|
|
212
|
-
|
|
206
|
+
}], Permission[], true>;
|
|
207
|
+
type InternalUserExtra = {
|
|
208
|
+
createProject(newProject: ProjectUpdateOptions & {
|
|
209
|
+
displayName: string;
|
|
210
|
+
}): Promise<Project>;
|
|
211
|
+
} & AsyncStoreProperty<"ownedProjects", [], Project[], true>;
|
|
212
|
+
type CurrentUser = Auth & User;
|
|
213
|
+
type CurrentInternalUser = CurrentUser & InternalUserExtra;
|
|
213
214
|
/**
|
|
214
215
|
* A user including sensitive fields that should only be used on the server, never sent to the client
|
|
215
216
|
* (such as sensitive information and serverMetadata).
|
|
216
217
|
*/
|
|
217
|
-
type ServerUser =
|
|
218
|
+
type ServerUser = {
|
|
219
|
+
setPrimaryEmail(email: string, options?: {
|
|
220
|
+
verified?: boolean | undefined;
|
|
221
|
+
}): Promise<void>;
|
|
218
222
|
readonly serverMetadata: ReadonlyJson;
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
223
|
+
setServerMetadata(metadata: ReadonlyJson): Promise<void>;
|
|
224
|
+
updatePassword(options: {
|
|
225
|
+
oldPassword?: string;
|
|
226
|
+
newPassword: string;
|
|
227
|
+
}): Promise<KnownErrors["PasswordMismatch"] | KnownErrors["PasswordRequirementsNotMet"] | void>;
|
|
228
|
+
update(user: Partial<ServerUserUpdateJson>): Promise<void>;
|
|
229
|
+
delete(): Promise<void>;
|
|
225
230
|
grantPermission(scope: Team, permissionId: string): Promise<void>;
|
|
226
231
|
revokePermission(scope: Team, permissionId: string): Promise<void>;
|
|
227
232
|
hasPermission(scope: Team, permissionId: string): Promise<boolean>;
|
|
228
|
-
|
|
229
|
-
} & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [], ServerTeam[], true> &
|
|
233
|
+
toServerJson(): ServerUserJson;
|
|
234
|
+
} & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [], ServerTeam[], true> & AsyncStoreProperty<"permission", [scope: Team, permissionId: string, options?: {
|
|
230
235
|
direct?: boolean;
|
|
231
|
-
}], ServerPermission | null, false
|
|
236
|
+
}], ServerPermission | null, false> & AsyncStoreProperty<"permissions", [scope: Team, options?: {
|
|
232
237
|
direct?: boolean;
|
|
233
|
-
}], ServerPermission[], true
|
|
234
|
-
type CurrentServerUser = Auth
|
|
235
|
-
|
|
236
|
-
};
|
|
237
|
-
type CurrentInternalServerUser = CurrentServerUser & InternalAuth<CurrentServerUser>;
|
|
238
|
+
}], ServerPermission[], true> & User;
|
|
239
|
+
type CurrentServerUser = Auth & ServerUser;
|
|
240
|
+
type CurrentInternalServerUser = CurrentServerUser & InternalUserExtra;
|
|
238
241
|
type Project = {
|
|
239
242
|
readonly id: string;
|
|
240
243
|
readonly displayName: string;
|
|
@@ -260,7 +263,7 @@ type Team = {
|
|
|
260
263
|
id: string;
|
|
261
264
|
displayName: string;
|
|
262
265
|
createdAt: Date;
|
|
263
|
-
toJson(
|
|
266
|
+
toJson(): TeamJson;
|
|
264
267
|
};
|
|
265
268
|
type ServerTeam = Team & {
|
|
266
269
|
listMembers(): Promise<ServerTeamMember[]>;
|
|
@@ -276,7 +279,7 @@ type TeamMember = {
|
|
|
276
279
|
displayName: string | null;
|
|
277
280
|
};
|
|
278
281
|
type ServerTeamMember = TeamMember & {
|
|
279
|
-
|
|
282
|
+
user: ServerUser;
|
|
280
283
|
};
|
|
281
284
|
type Permission = {
|
|
282
285
|
id: string;
|
|
@@ -331,14 +334,14 @@ type ApiKeySet = ApiKeySetBase & {
|
|
|
331
334
|
type EmailConfig = EmailConfigJson;
|
|
332
335
|
type DomainConfig = DomainConfigJson;
|
|
333
336
|
type OAuthProviderConfig = OAuthProviderConfigJson;
|
|
334
|
-
type GetUserOptions = {
|
|
337
|
+
type GetUserOptions<HasTokenStore> = {
|
|
335
338
|
or?: 'redirect' | 'throw' | 'return-null';
|
|
336
339
|
tokenStore?: TokenStoreInit;
|
|
337
|
-
}
|
|
340
|
+
} & (HasTokenStore extends false ? {
|
|
341
|
+
tokenStore: TokenStoreInit;
|
|
342
|
+
} : {});
|
|
338
343
|
type AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultiple extends boolean> = {
|
|
339
344
|
[key in `${IsMultiple extends true ? "list" : "get"}${Capitalize<Name>}`]: (...args: Args) => Promise<Value>;
|
|
340
|
-
} & {
|
|
341
|
-
[key in `on${Capitalize<Name>}Change`]: (...tupleArgs: [...args: Args, callback: (value: Value) => void]) => void;
|
|
342
345
|
} & {
|
|
343
346
|
[key in `use${Capitalize<Name>}`]: (...args: Args) => Value;
|
|
344
347
|
};
|
|
@@ -371,36 +374,34 @@ type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends s
|
|
|
371
374
|
verifyPasswordResetCode(code: string): Promise<KnownErrors["PasswordResetCodeError"] | void>;
|
|
372
375
|
verifyEmail(code: string): Promise<KnownErrors["EmailVerificationError"] | void>;
|
|
373
376
|
signInWithMagicLink(code: string): Promise<KnownErrors["MagicLinkError"] | void>;
|
|
374
|
-
[stackAppInternalsSymbol]: {
|
|
375
|
-
toClientJson(): StackClientAppJson<HasTokenStore, ProjectId>;
|
|
376
|
-
setCurrentUser(userJsonPromise: Promise<UserJson | null>): void;
|
|
377
|
-
};
|
|
378
|
-
} & AsyncStoreProperty<"project", [], ClientProjectJson, false> & {
|
|
379
|
-
[K in `redirectTo${Capitalize<keyof Omit<HandlerUrls, 'handler' | 'oauthCallback'>>}`]: (options?: RedirectToOptions) => Promise<void>;
|
|
380
|
-
} & (HasTokenStore extends false ? {} : {
|
|
381
377
|
redirectToOAuthCallback(): Promise<void>;
|
|
382
|
-
useUser(options: GetUserOptions & {
|
|
378
|
+
useUser(options: GetUserOptions<HasTokenStore> & {
|
|
383
379
|
or: 'redirect';
|
|
384
380
|
}): ProjectCurrentUser<ProjectId>;
|
|
385
|
-
useUser(options: GetUserOptions & {
|
|
381
|
+
useUser(options: GetUserOptions<HasTokenStore> & {
|
|
386
382
|
or: 'throw';
|
|
387
383
|
}): ProjectCurrentUser<ProjectId>;
|
|
388
|
-
useUser(options?: GetUserOptions): ProjectCurrentUser<ProjectId> | null;
|
|
389
|
-
getUser(options: GetUserOptions & {
|
|
384
|
+
useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentUser<ProjectId> | null;
|
|
385
|
+
getUser(options: GetUserOptions<HasTokenStore> & {
|
|
390
386
|
or: 'redirect';
|
|
391
387
|
}): Promise<ProjectCurrentUser<ProjectId>>;
|
|
392
|
-
getUser(options: GetUserOptions & {
|
|
388
|
+
getUser(options: GetUserOptions<HasTokenStore> & {
|
|
393
389
|
or: 'throw';
|
|
394
390
|
}): Promise<ProjectCurrentUser<ProjectId>>;
|
|
395
|
-
getUser(options?: GetUserOptions): Promise<ProjectCurrentUser<ProjectId> | null>;
|
|
396
|
-
|
|
397
|
-
|
|
391
|
+
getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>;
|
|
392
|
+
[stackAppInternalsSymbol]: {
|
|
393
|
+
toClientJson(): StackClientAppJson<HasTokenStore, ProjectId>;
|
|
394
|
+
setCurrentUser(userJsonPromise: Promise<UserJson | null>): void;
|
|
395
|
+
};
|
|
396
|
+
} & AsyncStoreProperty<"project", [], ClientProjectJson, false> & {
|
|
397
|
+
[K in `redirectTo${Capitalize<keyof Omit<HandlerUrls, 'handler' | 'oauthCallback'>>}`]: (options?: RedirectToOptions) => Promise<void>;
|
|
398
|
+
});
|
|
398
399
|
declare const StackClientApp: StackClientAppConstructor;
|
|
399
400
|
type StackServerAppConstructor = {
|
|
400
401
|
new <TokenStoreType extends string, HasTokenStore extends (TokenStoreType extends {} ? true : boolean), ProjectId extends string>(options: StackServerAppConstructorOptions<HasTokenStore, ProjectId>): StackServerApp<HasTokenStore, ProjectId>;
|
|
401
402
|
new (options: StackServerAppConstructorOptions<boolean, string>): StackServerApp<boolean, string>;
|
|
402
403
|
};
|
|
403
|
-
type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = (
|
|
404
|
+
type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends string = string> = ({
|
|
404
405
|
createTeam(data: ServerTeamCustomizableJson): Promise<ServerTeam>;
|
|
405
406
|
createPermissionDefinition(data: ServerPermissionDefinitionCustomizableJson): Promise<ServerPermission>;
|
|
406
407
|
updatePermissionDefinition(permissionId: string, data: Partial<ServerPermissionDefinitionCustomizableJson>): Promise<void>;
|
|
@@ -411,7 +412,25 @@ type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends s
|
|
|
411
412
|
listEmailTemplates(): Promise<ListEmailTemplatesCrud['Server']['Read']>;
|
|
412
413
|
updateEmailTemplate(type: EmailTemplateType, data: EmailTemplateCrud['Server']['Update']): Promise<void>;
|
|
413
414
|
resetEmailTemplate(type: EmailTemplateType): Promise<void>;
|
|
414
|
-
|
|
415
|
+
/**
|
|
416
|
+
* @deprecated use `getUser()` instead
|
|
417
|
+
*/
|
|
418
|
+
getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null>;
|
|
419
|
+
useUser(options: GetUserOptions<HasTokenStore> & {
|
|
420
|
+
or: 'redirect';
|
|
421
|
+
}): ProjectCurrentServerUser<ProjectId>;
|
|
422
|
+
useUser(options: GetUserOptions<HasTokenStore> & {
|
|
423
|
+
or: 'throw';
|
|
424
|
+
}): ProjectCurrentServerUser<ProjectId>;
|
|
425
|
+
useUser(options?: GetUserOptions<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null;
|
|
426
|
+
getUser(options: GetUserOptions<HasTokenStore> & {
|
|
427
|
+
or: 'redirect';
|
|
428
|
+
}): Promise<ProjectCurrentServerUser<ProjectId>>;
|
|
429
|
+
getUser(options: GetUserOptions<HasTokenStore> & {
|
|
430
|
+
or: 'throw';
|
|
431
|
+
}): Promise<ProjectCurrentServerUser<ProjectId>>;
|
|
432
|
+
getUser(options?: GetUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>;
|
|
433
|
+
} & StackClientApp<HasTokenStore, ProjectId> & AsyncStoreProperty<"users", [], ServerUser[], true> & AsyncStoreProperty<"team", [id: string], ServerTeam | null, false> & AsyncStoreProperty<"teams", [], ServerTeam[], true>);
|
|
415
434
|
declare const StackServerApp: StackServerAppConstructor;
|
|
416
435
|
type StackAdminAppConstructor = {
|
|
417
436
|
new <HasTokenStore extends boolean, ProjectId extends string>(options: StackAdminAppConstructorOptions<HasTokenStore, ProjectId>): StackAdminApp<HasTokenStore, ProjectId>;
|