@stackframe/stack 2.6.38 → 2.7.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/dist/index.d.mts CHANGED
@@ -1,28 +1,26 @@
1
- export { default as StackProvider } from './providers/stack-provider.mjs';
2
- export { useStackApp, useUser } from './lib/hooks.mjs';
3
1
  export { default as StackHandler } from './components-page/stack-handler.mjs';
4
- export { StackTheme } from './providers/theme-provider.mjs';
2
+ export { useStackApp, useUser } from './lib/hooks.mjs';
5
3
  export { AdminDomainConfig, AdminEmailConfig, AdminOAuthProviderConfig, AdminOwnedProject, AdminProject, AdminProjectConfig, AdminProjectConfigUpdateOptions, AdminProjectCreateOptions, AdminProjectUpdateOptions, AdminTeamPermission, AdminTeamPermissionDefinition, AdminTeamPermissionDefinitionCreateOptions, AdminTeamPermissionDefinitionUpdateOptions, ApiKey, ApiKeyBase, ApiKeyBaseCrudRead, ApiKeyCreateOptions, ApiKeyFirstView, Connection, CurrentInternalServerUser, CurrentInternalUser, CurrentServerUser, CurrentUser, EditableTeamMemberProfile, GetUserOptions, HandlerUrls, OAuthConnection, OAuthProviderConfig, OAuthScopesOnSignIn, Project, ProjectConfig, ServerListUsersOptions, ServerTeam, ServerTeamCreateOptions, ServerTeamMemberProfile, ServerTeamUpdateOptions, ServerTeamUser, ServerUser, StackAdminApp, StackAdminAppConstructorOptions, StackClientApp, StackClientAppConstructorOptions, StackClientAppJson, StackServerApp, StackServerAppConstructorOptions, Team, TeamCreateOptions, TeamInvitation, TeamMemberProfile, TeamPermission, TeamUpdateOptions, TeamUser, TokenStoreInit, User, serverTeamPermissionDefinitionCreateOptionsToCrud, serverTeamPermissionDefinitionUpdateOptionsToCrud, stackAppInternalsSymbol } from './lib/stack-app.mjs';
6
- export { SignIn } from './components-page/sign-in.mjs';
7
- export { SignUp } from './components-page/sign-up.mjs';
8
- export { EmailVerification } from './components-page/email-verification.mjs';
9
- export { PasswordReset } from './components-page/password-reset.mjs';
10
- export { ForgotPassword } from './components-page/forgot-password.mjs';
11
- export { MessageCard } from './components/message-cards/message-card.mjs';
12
- export { UserButton } from './components/user-button.mjs';
4
+ export { default as StackProvider } from './providers/stack-provider.mjs';
5
+ export { StackTheme } from './providers/theme-provider.mjs';
13
6
  export { AccountSettings } from './components-page/account-settings.mjs';
14
7
  export { AuthPage } from './components-page/auth-page.mjs';
8
+ export { EmailVerification } from './components-page/email-verification.mjs';
9
+ export { ForgotPassword } from './components-page/forgot-password.mjs';
10
+ export { PasswordReset } from './components-page/password-reset.mjs';
11
+ export { SignIn } from './components-page/sign-in.mjs';
12
+ export { SignUp } from './components-page/sign-up.mjs';
15
13
  export { CredentialSignIn } from './components/credential-sign-in.mjs';
16
14
  export { CredentialSignUp } from './components/credential-sign-up.mjs';
15
+ export { UserAvatar } from './components/elements/user-avatar.mjs';
17
16
  export { MagicLinkSignIn } from './components/magic-link-sign-in.mjs';
17
+ export { MessageCard } from './components/message-cards/message-card.mjs';
18
18
  export { OAuthButton } from './components/oauth-button.mjs';
19
19
  export { OAuthButtonGroup } from './components/oauth-button-group.mjs';
20
+ export { UserButton } from './components/user-button.mjs';
20
21
  export { SelectedTeamSwitcher } from './components/selected-team-switcher.mjs';
21
- import 'react/jsx-runtime';
22
- import 'react';
23
- import './providers/translation-provider.mjs';
24
- import './generated/quetzal-translations.mjs';
25
22
  import './components-page/error-page.mjs';
23
+ import 'react/jsx-runtime';
26
24
  import './components-page/magic-link-callback.mjs';
27
25
  import './components-page/oauth-callback.mjs';
28
26
  import './components-page/sign-out.mjs';
@@ -37,4 +35,7 @@ import '@stackframe/stack-shared/dist/sessions';
37
35
  import '@stackframe/stack-shared/dist/utils/json';
38
36
  import '@stackframe/stack-shared/dist/utils/oauth';
39
37
  import '@stackframe/stack-shared/dist/utils/results';
38
+ import 'react';
39
+ import './providers/translation-provider.mjs';
40
+ import './generated/quetzal-translations.mjs';
40
41
  import 'lucide-react';
package/dist/index.d.ts CHANGED
@@ -1,28 +1,26 @@
1
- export { default as StackProvider } from './providers/stack-provider.js';
2
- export { useStackApp, useUser } from './lib/hooks.js';
3
1
  export { default as StackHandler } from './components-page/stack-handler.js';
4
- export { StackTheme } from './providers/theme-provider.js';
2
+ export { useStackApp, useUser } from './lib/hooks.js';
5
3
  export { AdminDomainConfig, AdminEmailConfig, AdminOAuthProviderConfig, AdminOwnedProject, AdminProject, AdminProjectConfig, AdminProjectConfigUpdateOptions, AdminProjectCreateOptions, AdminProjectUpdateOptions, AdminTeamPermission, AdminTeamPermissionDefinition, AdminTeamPermissionDefinitionCreateOptions, AdminTeamPermissionDefinitionUpdateOptions, ApiKey, ApiKeyBase, ApiKeyBaseCrudRead, ApiKeyCreateOptions, ApiKeyFirstView, Connection, CurrentInternalServerUser, CurrentInternalUser, CurrentServerUser, CurrentUser, EditableTeamMemberProfile, GetUserOptions, HandlerUrls, OAuthConnection, OAuthProviderConfig, OAuthScopesOnSignIn, Project, ProjectConfig, ServerListUsersOptions, ServerTeam, ServerTeamCreateOptions, ServerTeamMemberProfile, ServerTeamUpdateOptions, ServerTeamUser, ServerUser, StackAdminApp, StackAdminAppConstructorOptions, StackClientApp, StackClientAppConstructorOptions, StackClientAppJson, StackServerApp, StackServerAppConstructorOptions, Team, TeamCreateOptions, TeamInvitation, TeamMemberProfile, TeamPermission, TeamUpdateOptions, TeamUser, TokenStoreInit, User, serverTeamPermissionDefinitionCreateOptionsToCrud, serverTeamPermissionDefinitionUpdateOptionsToCrud, stackAppInternalsSymbol } from './lib/stack-app.js';
6
- export { SignIn } from './components-page/sign-in.js';
7
- export { SignUp } from './components-page/sign-up.js';
8
- export { EmailVerification } from './components-page/email-verification.js';
9
- export { PasswordReset } from './components-page/password-reset.js';
10
- export { ForgotPassword } from './components-page/forgot-password.js';
11
- export { MessageCard } from './components/message-cards/message-card.js';
12
- export { UserButton } from './components/user-button.js';
4
+ export { default as StackProvider } from './providers/stack-provider.js';
5
+ export { StackTheme } from './providers/theme-provider.js';
13
6
  export { AccountSettings } from './components-page/account-settings.js';
14
7
  export { AuthPage } from './components-page/auth-page.js';
8
+ export { EmailVerification } from './components-page/email-verification.js';
9
+ export { ForgotPassword } from './components-page/forgot-password.js';
10
+ export { PasswordReset } from './components-page/password-reset.js';
11
+ export { SignIn } from './components-page/sign-in.js';
12
+ export { SignUp } from './components-page/sign-up.js';
15
13
  export { CredentialSignIn } from './components/credential-sign-in.js';
16
14
  export { CredentialSignUp } from './components/credential-sign-up.js';
15
+ export { UserAvatar } from './components/elements/user-avatar.js';
17
16
  export { MagicLinkSignIn } from './components/magic-link-sign-in.js';
17
+ export { MessageCard } from './components/message-cards/message-card.js';
18
18
  export { OAuthButton } from './components/oauth-button.js';
19
19
  export { OAuthButtonGroup } from './components/oauth-button-group.js';
20
+ export { UserButton } from './components/user-button.js';
20
21
  export { SelectedTeamSwitcher } from './components/selected-team-switcher.js';
21
- import 'react/jsx-runtime';
22
- import 'react';
23
- import './providers/translation-provider.js';
24
- import './generated/quetzal-translations.js';
25
22
  import './components-page/error-page.js';
23
+ import 'react/jsx-runtime';
26
24
  import './components-page/magic-link-callback.js';
27
25
  import './components-page/oauth-callback.js';
28
26
  import './components-page/sign-out.js';
@@ -37,4 +35,7 @@ import '@stackframe/stack-shared/dist/sessions';
37
35
  import '@stackframe/stack-shared/dist/utils/json';
38
36
  import '@stackframe/stack-shared/dist/utils/oauth';
39
37
  import '@stackframe/stack-shared/dist/utils/results';
38
+ import 'react';
39
+ import './providers/translation-provider.js';
40
+ import './generated/quetzal-translations.js';
40
41
  import 'lucide-react';
package/dist/index.js CHANGED
@@ -48,30 +48,32 @@ __export(src_exports, {
48
48
  StackHandler: () => import_stack_handler.default,
49
49
  StackProvider: () => import_stack_provider.default,
50
50
  StackTheme: () => import_theme_provider.StackTheme,
51
+ UserAvatar: () => import_user_avatar.UserAvatar,
51
52
  UserButton: () => import_user_button.UserButton,
52
53
  useStackApp: () => import_hooks.useStackApp,
53
54
  useUser: () => import_hooks.useUser
54
55
  });
55
56
  module.exports = __toCommonJS(src_exports);
56
- var import_stack_provider = __toESM(require("./providers/stack-provider"));
57
- var import_hooks = require("./lib/hooks");
58
57
  var import_stack_handler = __toESM(require("./components-page/stack-handler"));
59
- var import_theme_provider = require("./providers/theme-provider");
58
+ var import_hooks = require("./lib/hooks");
60
59
  __reExport(src_exports, require("./lib/stack-app"), module.exports);
61
- var import_sign_in = require("./components-page/sign-in");
62
- var import_sign_up = require("./components-page/sign-up");
63
- var import_email_verification = require("./components-page/email-verification");
64
- var import_password_reset = require("./components-page/password-reset");
65
- var import_forgot_password = require("./components-page/forgot-password");
66
- var import_message_card = require("./components/message-cards/message-card");
67
- var import_user_button = require("./components/user-button");
60
+ var import_stack_provider = __toESM(require("./providers/stack-provider"));
61
+ var import_theme_provider = require("./providers/theme-provider");
68
62
  var import_account_settings = require("./components-page/account-settings");
69
63
  var import_auth_page = require("./components-page/auth-page");
64
+ var import_email_verification = require("./components-page/email-verification");
65
+ var import_forgot_password = require("./components-page/forgot-password");
66
+ var import_password_reset = require("./components-page/password-reset");
67
+ var import_sign_in = require("./components-page/sign-in");
68
+ var import_sign_up = require("./components-page/sign-up");
70
69
  var import_credential_sign_in = require("./components/credential-sign-in");
71
70
  var import_credential_sign_up = require("./components/credential-sign-up");
71
+ var import_user_avatar = require("./components/elements/user-avatar");
72
72
  var import_magic_link_sign_in = require("./components/magic-link-sign-in");
73
+ var import_message_card = require("./components/message-cards/message-card");
73
74
  var import_oauth_button = require("./components/oauth-button");
74
75
  var import_oauth_button_group = require("./components/oauth-button-group");
76
+ var import_user_button = require("./components/user-button");
75
77
  var import_selected_team_switcher = require("./components/selected-team-switcher");
76
78
  // Annotate the CommonJS export names for ESM import in node:
77
79
  0 && (module.exports = {
@@ -92,6 +94,7 @@ var import_selected_team_switcher = require("./components/selected-team-switcher
92
94
  StackHandler,
93
95
  StackProvider,
94
96
  StackTheme,
97
+ UserAvatar,
95
98
  UserButton,
96
99
  useStackApp,
97
100
  useUser,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx"],"sourcesContent":["export { default as StackProvider } from \"./providers/stack-provider\";\nexport { useUser, useStackApp } from \"./lib/hooks\";\nexport { default as StackHandler } from \"./components-page/stack-handler\";\nexport { StackTheme } from './providers/theme-provider';\nexport * from './lib/stack-app';\n\nexport { SignIn } from \"./components-page/sign-in\";\nexport { SignUp } from \"./components-page/sign-up\";\nexport { EmailVerification } from \"./components-page/email-verification\";\nexport { PasswordReset } from \"./components-page/password-reset\";\nexport { ForgotPassword } from \"./components-page/forgot-password\";\nexport { MessageCard } from \"./components/message-cards/message-card\";\nexport { UserButton } from \"./components/user-button\";\nexport { AccountSettings } from \"./components-page/account-settings\";\nexport { AuthPage } from \"./components-page/auth-page\";\nexport { CredentialSignIn as CredentialSignIn } from \"./components/credential-sign-in\";\nexport { CredentialSignUp as CredentialSignUp } from \"./components/credential-sign-up\";\nexport { MagicLinkSignIn as MagicLinkSignIn } from \"./components/magic-link-sign-in\";\nexport { OAuthButton } from \"./components/oauth-button\";\nexport { OAuthButtonGroup } from \"./components/oauth-button-group\";\n\nexport {\n SelectedTeamSwitcher,\n} from \"./components/selected-team-switcher\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAyC;AACzC,mBAAqC;AACrC,2BAAwC;AACxC,4BAA2B;AAC3B,wBAAc,4BAJd;AAMA,qBAAuB;AACvB,qBAAuB;AACvB,gCAAkC;AAClC,4BAA8B;AAC9B,6BAA+B;AAC/B,0BAA4B;AAC5B,yBAA2B;AAC3B,8BAAgC;AAChC,uBAAyB;AACzB,gCAAqD;AACrD,gCAAqD;AACrD,gCAAmD;AACnD,0BAA4B;AAC5B,gCAAiC;AAEjC,oCAEO;","names":[]}
1
+ {"version":3,"sources":["../src/index.tsx"],"sourcesContent":["export { default as StackHandler } from \"./components-page/stack-handler\";\nexport { useStackApp, useUser } from \"./lib/hooks\";\nexport * from './lib/stack-app';\nexport { default as StackProvider } from \"./providers/stack-provider\";\nexport { StackTheme } from './providers/theme-provider';\n\nexport { AccountSettings } from \"./components-page/account-settings\";\nexport { AuthPage } from \"./components-page/auth-page\";\nexport { EmailVerification } from \"./components-page/email-verification\";\nexport { ForgotPassword } from \"./components-page/forgot-password\";\nexport { PasswordReset } from \"./components-page/password-reset\";\nexport { SignIn } from \"./components-page/sign-in\";\nexport { SignUp } from \"./components-page/sign-up\";\nexport { CredentialSignIn as CredentialSignIn } from \"./components/credential-sign-in\";\nexport { CredentialSignUp as CredentialSignUp } from \"./components/credential-sign-up\";\nexport { UserAvatar } from \"./components/elements/user-avatar\";\nexport { MagicLinkSignIn as MagicLinkSignIn } from \"./components/magic-link-sign-in\";\nexport { MessageCard } from \"./components/message-cards/message-card\";\nexport { OAuthButton } from \"./components/oauth-button\";\nexport { OAuthButtonGroup } from \"./components/oauth-button-group\";\nexport { UserButton } from \"./components/user-button\";\n\nexport {\n SelectedTeamSwitcher\n} from \"./components/selected-team-switcher\";\n\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,2BAAwC;AACxC,mBAAqC;AACrC,wBAAc,4BAFd;AAGA,4BAAyC;AACzC,4BAA2B;AAE3B,8BAAgC;AAChC,uBAAyB;AACzB,gCAAkC;AAClC,6BAA+B;AAC/B,4BAA8B;AAC9B,qBAAuB;AACvB,qBAAuB;AACvB,gCAAqD;AACrD,gCAAqD;AACrD,yBAA2B;AAC3B,gCAAmD;AACnD,0BAA4B;AAC5B,0BAA4B;AAC5B,gCAAiC;AACjC,yBAA2B;AAE3B,oCAEO;","names":[]}
@@ -66,6 +66,7 @@ type StackAdminAppConstructorOptions<HasTokenStore extends boolean, ProjectId ex
66
66
  type StackClientAppJson<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & {
67
67
  uniqueIdentifier: string;
68
68
  };
69
+ /** @internal */
69
70
  declare const stackAppInternalsSymbol: unique symbol;
70
71
  type ContactChannel = {
71
72
  id: string;
@@ -720,6 +721,12 @@ type StackAdminApp<HasTokenStore extends boolean = boolean, ProjectId extends st
720
721
  updateTeamPermissionDefinition(permissionId: string, data: AdminTeamPermissionDefinitionUpdateOptions): Promise<void>;
721
722
  deleteTeamPermissionDefinition(permissionId: string): Promise<void>;
722
723
  useSvixToken(): string;
724
+ sendTestEmail(options: {
725
+ recipientEmail: string;
726
+ emailConfig: EmailConfig;
727
+ }): Promise<Result<undefined, {
728
+ errorMessage: string;
729
+ }>>;
723
730
  } & StackServerApp<HasTokenStore, ProjectId>);
724
731
  declare const StackAdminApp: StackAdminAppConstructor;
725
732
  type AdminEmailTemplate = {
@@ -741,5 +748,13 @@ type AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultip
741
748
  } & {
742
749
  [key in `use${Capitalize<Name>}`]: (...args: Args) => Value;
743
750
  };
751
+ type EmailConfig = {
752
+ host: string;
753
+ port: number;
754
+ username: string;
755
+ password: string;
756
+ senderEmail: string;
757
+ senderName: string;
758
+ };
744
759
 
745
760
  export { type AdminDomainConfig, type AdminEmailConfig, type AdminOAuthProviderConfig, type AdminOwnedProject, type AdminProject, type AdminProjectConfig, type AdminProjectConfigUpdateOptions, type AdminProjectCreateOptions, type AdminProjectUpdateOptions, type AdminTeamPermission, type AdminTeamPermissionDefinition, type AdminTeamPermissionDefinitionCreateOptions, type AdminTeamPermissionDefinitionUpdateOptions, type ApiKey, type ApiKeyBase, type ApiKeyBaseCrudRead, type ApiKeyCreateOptions, type ApiKeyFirstView, type Connection, type CurrentInternalServerUser, type CurrentInternalUser, type CurrentServerUser, type CurrentUser, type EditableTeamMemberProfile, type GetUserOptions, type HandlerUrls, type OAuthConnection, type OAuthProviderConfig, type OAuthScopesOnSignIn, type Project, type ProjectConfig, type ServerListUsersOptions, type ServerTeam, type ServerTeamCreateOptions, type ServerTeamMemberProfile, type ServerTeamUpdateOptions, type ServerTeamUser, type ServerUser, StackAdminApp, type StackAdminAppConstructorOptions, StackClientApp, type StackClientAppConstructorOptions, type StackClientAppJson, StackServerApp, type StackServerAppConstructorOptions, type Team, type TeamCreateOptions, type TeamInvitation, type TeamMemberProfile, type TeamPermission, type TeamUpdateOptions, type TeamUser, type TokenStoreInit, type User, serverTeamPermissionDefinitionCreateOptionsToCrud, serverTeamPermissionDefinitionUpdateOptionsToCrud, stackAppInternalsSymbol };
@@ -66,6 +66,7 @@ type StackAdminAppConstructorOptions<HasTokenStore extends boolean, ProjectId ex
66
66
  type StackClientAppJson<HasTokenStore extends boolean, ProjectId extends string> = StackClientAppConstructorOptions<HasTokenStore, ProjectId> & {
67
67
  uniqueIdentifier: string;
68
68
  };
69
+ /** @internal */
69
70
  declare const stackAppInternalsSymbol: unique symbol;
70
71
  type ContactChannel = {
71
72
  id: string;
@@ -720,6 +721,12 @@ type StackAdminApp<HasTokenStore extends boolean = boolean, ProjectId extends st
720
721
  updateTeamPermissionDefinition(permissionId: string, data: AdminTeamPermissionDefinitionUpdateOptions): Promise<void>;
721
722
  deleteTeamPermissionDefinition(permissionId: string): Promise<void>;
722
723
  useSvixToken(): string;
724
+ sendTestEmail(options: {
725
+ recipientEmail: string;
726
+ emailConfig: EmailConfig;
727
+ }): Promise<Result<undefined, {
728
+ errorMessage: string;
729
+ }>>;
723
730
  } & StackServerApp<HasTokenStore, ProjectId>);
724
731
  declare const StackAdminApp: StackAdminAppConstructor;
725
732
  type AdminEmailTemplate = {
@@ -741,5 +748,13 @@ type AsyncStoreProperty<Name extends string, Args extends any[], Value, IsMultip
741
748
  } & {
742
749
  [key in `use${Capitalize<Name>}`]: (...args: Args) => Value;
743
750
  };
751
+ type EmailConfig = {
752
+ host: string;
753
+ port: number;
754
+ username: string;
755
+ password: string;
756
+ senderEmail: string;
757
+ senderName: string;
758
+ };
744
759
 
745
760
  export { type AdminDomainConfig, type AdminEmailConfig, type AdminOAuthProviderConfig, type AdminOwnedProject, type AdminProject, type AdminProjectConfig, type AdminProjectConfigUpdateOptions, type AdminProjectCreateOptions, type AdminProjectUpdateOptions, type AdminTeamPermission, type AdminTeamPermissionDefinition, type AdminTeamPermissionDefinitionCreateOptions, type AdminTeamPermissionDefinitionUpdateOptions, type ApiKey, type ApiKeyBase, type ApiKeyBaseCrudRead, type ApiKeyCreateOptions, type ApiKeyFirstView, type Connection, type CurrentInternalServerUser, type CurrentInternalUser, type CurrentServerUser, type CurrentUser, type EditableTeamMemberProfile, type GetUserOptions, type HandlerUrls, type OAuthConnection, type OAuthProviderConfig, type OAuthScopesOnSignIn, type Project, type ProjectConfig, type ServerListUsersOptions, type ServerTeam, type ServerTeamCreateOptions, type ServerTeamMemberProfile, type ServerTeamUpdateOptions, type ServerTeamUser, type ServerUser, StackAdminApp, type StackAdminAppConstructorOptions, StackClientApp, type StackClientAppConstructorOptions, type StackClientAppJson, StackServerApp, type StackServerAppConstructorOptions, type Team, type TeamCreateOptions, type TeamInvitation, type TeamMemberProfile, type TeamPermission, type TeamUpdateOptions, type TeamUser, type TokenStoreInit, type User, serverTeamPermissionDefinitionCreateOptionsToCrud, serverTeamPermissionDefinitionUpdateOptionsToCrud, stackAppInternalsSymbol };
@@ -64,7 +64,7 @@ var import_url = require("../utils/url");
64
64
  var import_auth = require("./auth");
65
65
  var import_cookie = require("./cookie");
66
66
  var NextNavigation = (0, import_compile_time.scrambleDuringCompileTime)(NextNavigationUnscrambled);
67
- var clientVersion = "js @stackframe/stack@2.6.38";
67
+ var clientVersion = "js @stackframe/stack@2.7.0";
68
68
  function getUrls(partial) {
69
69
  const handler = partial.handler ?? "/handler";
70
70
  const home = partial.home ?? "/";
@@ -1291,12 +1291,14 @@ var _StackClientAppImpl = class __StackClientAppImpl {
1291
1291
  return false;
1292
1292
  }
1293
1293
  async _signOut(session, options) {
1294
- await this._interface.signOut(session);
1295
- if (options?.redirectUrl) {
1296
- await _redirectTo(options.redirectUrl);
1297
- } else {
1298
- await this.redirectToAfterSignOut();
1299
- }
1294
+ await import_stores.storeLock.withWriteLock(async () => {
1295
+ await this._interface.signOut(session);
1296
+ if (options?.redirectUrl) {
1297
+ await _redirectTo(options.redirectUrl);
1298
+ } else {
1299
+ await this.redirectToAfterSignOut();
1300
+ }
1301
+ });
1300
1302
  }
1301
1303
  async signOut(options) {
1302
1304
  const user = await this.getUser();
@@ -1938,6 +1940,9 @@ var _StackAdminAppImpl = class extends _StackServerAppImpl {
1938
1940
  this._svixTokenCache = createCache(async () => {
1939
1941
  return await this._interface.getSvixToken();
1940
1942
  });
1943
+ this._metricsCache = createCache(async () => {
1944
+ return await this._interface.getMetrics();
1945
+ });
1941
1946
  }
1942
1947
  _adminOwnedProjectFromCrud(data, onRefresh) {
1943
1948
  if (this._tokenStoreInit !== null) {
@@ -2147,6 +2152,29 @@ var _StackAdminAppImpl = class extends _StackServerAppImpl {
2147
2152
  async _refreshApiKeys() {
2148
2153
  await this._apiKeysCache.refresh([]);
2149
2154
  }
2155
+ get [stackAppInternalsSymbol]() {
2156
+ return {
2157
+ ...super[stackAppInternalsSymbol],
2158
+ useMetrics: () => {
2159
+ return useAsyncCache(this._metricsCache, [], "useMetrics()");
2160
+ }
2161
+ };
2162
+ }
2163
+ async sendTestEmail(options) {
2164
+ const response = await this._interface.sendTestEmail({
2165
+ recipient_email: options.recipientEmail,
2166
+ email_config: {
2167
+ ...options.emailConfig,
2168
+ sender_email: options.emailConfig.senderEmail,
2169
+ sender_name: options.emailConfig.senderName
2170
+ }
2171
+ });
2172
+ if (response.success) {
2173
+ return import_results.Result.ok(void 0);
2174
+ } else {
2175
+ return import_results.Result.error({ errorMessage: response.error_message ?? (0, import_errors.throwErr)("Email test error not specified") });
2176
+ }
2177
+ }
2150
2178
  };
2151
2179
  function contactChannelCreateOptionsToCrud(userId, options) {
2152
2180
  return {