@stackframe/react 2.8.39 → 2.8.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/esm/index.js +3 -1
  3. package/dist/esm/index.js.map +1 -1
  4. package/dist/esm/integrations/convex.js +18 -0
  5. package/dist/esm/integrations/convex.js.map +1 -0
  6. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js +82 -1
  7. package/dist/esm/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  8. package/dist/esm/lib/stack-app/apps/implementations/common.js +1 -1
  9. package/dist/esm/lib/stack-app/apps/implementations/common.js.map +1 -1
  10. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js +34 -0
  11. package/dist/esm/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  12. package/dist/esm/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  13. package/dist/esm/lib/stack-app/apps/interfaces/server-app.js.map +1 -1
  14. package/dist/esm/lib/stack-app/common.js.map +1 -1
  15. package/dist/esm/lib/stack-app/index.js.map +1 -1
  16. package/dist/esm/lib/stack-app/users/index.js.map +1 -1
  17. package/dist/esm/providers/stack-provider-client.js.map +1 -1
  18. package/dist/index.d.mts +96 -19
  19. package/dist/index.d.ts +96 -19
  20. package/dist/index.js +4 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/integrations/convex.js +43 -0
  23. package/dist/integrations/convex.js.map +1 -0
  24. package/dist/lib/stack-app/apps/implementations/client-app-impl.js +82 -1
  25. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  26. package/dist/lib/stack-app/apps/implementations/common.js +1 -1
  27. package/dist/lib/stack-app/apps/implementations/common.js.map +1 -1
  28. package/dist/lib/stack-app/apps/implementations/server-app-impl.js +34 -0
  29. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  30. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  31. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +1 -1
  32. package/dist/lib/stack-app/common.js.map +1 -1
  33. package/dist/lib/stack-app/index.js.map +1 -1
  34. package/dist/lib/stack-app/users/index.js.map +1 -1
  35. package/dist/providers/stack-provider-client.js.map +1 -1
  36. package/package.json +5 -4
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ import { KnownErrors } from '@stackframe/stack-shared';
2
2
  import { CurrentUserCrud } from '@stackframe/stack-shared/dist/interface/crud/current-user';
3
3
  import { Result } from '@stackframe/stack-shared/dist/utils/results';
4
4
  import { ProviderType } from '@stackframe/stack-shared/dist/utils/oauth';
5
+ import { GenericQueryCtx, UserIdentity } from 'convex/server';
5
6
  import { inlineOfferSchema } from '@stackframe/stack-shared/dist/schema-fields';
6
7
  import * as yup from 'yup';
7
8
  import { ProductionModeError } from '@stackframe/stack-shared/dist/helpers/production-mode';
@@ -38,12 +39,28 @@ type RedirectMethod = "window" | "none" | {
38
39
  useNavigate: () => (to: string) => void;
39
40
  navigate?: (to: string) => void;
40
41
  };
41
- type GetUserOptions$1<HasTokenStore> = {
42
+ type GetCurrentUserOptions<HasTokenStore> = {
42
43
  or?: 'redirect' | 'throw' | 'return-null' | 'anonymous' | /** @deprecated */ 'anonymous-if-exists[deprecated]';
43
44
  tokenStore?: TokenStoreInit;
44
45
  } & (HasTokenStore extends false ? {
45
46
  tokenStore: TokenStoreInit;
46
47
  } : {});
48
+ type ConvexCtx = GenericQueryCtx<any> | {
49
+ auth: {
50
+ getUserIdentity: () => Promise<UserIdentity | null>;
51
+ };
52
+ };
53
+ type GetCurrentPartialUserOptions<HasTokenStore> = {
54
+ or?: 'return-null' | 'anonymous';
55
+ tokenStore?: TokenStoreInit;
56
+ } & ({
57
+ from: 'token';
58
+ } | {
59
+ from: 'convex';
60
+ ctx: ConvexCtx;
61
+ }) & (HasTokenStore extends false ? {
62
+ tokenStore: TokenStoreInit;
63
+ } : {});
47
64
  type RequestLike = {
48
65
  headers: {
49
66
  get: (name: string) => string | null;
@@ -577,6 +594,8 @@ type User = BaseUser;
577
594
  type CurrentUser = BaseUser & Auth & UserExtra & Customer;
578
595
  type CurrentInternalUser = CurrentUser & InternalUserExtra;
579
596
  type ProjectCurrentUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalUser : CurrentUser;
597
+ type TokenPartialUser = Pick<User, "id" | "displayName" | "primaryEmail" | "primaryEmailVerified" | "isAnonymous">;
598
+ type SyncedPartialUser = TokenPartialUser & Pick<User, "id" | "displayName" | "primaryEmail" | "primaryEmailVerified" | "profileImageUrl" | "signedUpAt" | "clientMetadata" | "clientReadOnlyMetadata" | "isAnonymous" | "hasPassword">;
580
599
  type ActiveSession = {
581
600
  id: string;
582
601
  userId: string;
@@ -654,6 +673,7 @@ type ServerUser = ServerBaseUser & BaseUser & UserExtra & Customer<true>;
654
673
  type CurrentServerUser = Auth & ServerUser;
655
674
  type CurrentInternalServerUser = CurrentServerUser & InternalUserExtra;
656
675
  type ProjectCurrentServerUser<ProjectId> = ProjectId extends "internal" ? CurrentInternalServerUser : CurrentServerUser;
676
+ type SyncedPartialServerUser = SyncedPartialUser & Pick<ServerUser, "serverMetadata">;
657
677
  type ServerUserUpdateOptions = {
658
678
  primaryEmail?: string | null;
659
679
  primaryEmailVerified?: boolean;
@@ -770,34 +790,60 @@ type StackServerApp<HasTokenStore extends boolean = boolean, ProjectId extends s
770
790
  */
771
791
  getServerUser(): Promise<ProjectCurrentServerUser<ProjectId> | null>;
772
792
  createUser(options: ServerUserCreateOptions): Promise<ServerUser>;
773
- useUser(options: GetUserOptions$1<HasTokenStore> & {
793
+ useUser(options: GetCurrentUserOptions<HasTokenStore> & {
774
794
  or: 'redirect';
775
795
  }): ProjectCurrentServerUser<ProjectId>;
776
- useUser(options: GetUserOptions$1<HasTokenStore> & {
796
+ useUser(options: GetCurrentUserOptions<HasTokenStore> & {
777
797
  or: 'throw';
778
798
  }): ProjectCurrentServerUser<ProjectId>;
779
- useUser(options: GetUserOptions$1<HasTokenStore> & {
799
+ useUser(options: GetCurrentUserOptions<HasTokenStore> & {
780
800
  or: 'anonymous';
781
801
  }): ProjectCurrentServerUser<ProjectId>;
782
- useUser(options?: GetUserOptions$1<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null;
802
+ useUser(options?: GetCurrentUserOptions<HasTokenStore>): ProjectCurrentServerUser<ProjectId> | null;
783
803
  useUser(id: string): ServerUser | null;
784
804
  useUser(options: {
785
805
  apiKey: string;
806
+ or?: "return-null" | "anonymous";
807
+ }): ServerUser | null;
808
+ useUser(options: {
809
+ from: "convex";
810
+ ctx: GenericQueryCtx<any>;
811
+ or?: "return-null" | "anonymous";
786
812
  }): ServerUser | null;
787
- getUser(options: GetUserOptions$1<HasTokenStore> & {
813
+ getUser(options: GetCurrentUserOptions<HasTokenStore> & {
788
814
  or: 'redirect';
789
815
  }): Promise<ProjectCurrentServerUser<ProjectId>>;
790
- getUser(options: GetUserOptions$1<HasTokenStore> & {
816
+ getUser(options: GetCurrentUserOptions<HasTokenStore> & {
791
817
  or: 'throw';
792
818
  }): Promise<ProjectCurrentServerUser<ProjectId>>;
793
- getUser(options: GetUserOptions$1<HasTokenStore> & {
819
+ getUser(options: GetCurrentUserOptions<HasTokenStore> & {
794
820
  or: 'anonymous';
795
821
  }): Promise<ProjectCurrentServerUser<ProjectId>>;
796
- getUser(options?: GetUserOptions$1<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>;
822
+ getUser(options?: GetCurrentUserOptions<HasTokenStore>): Promise<ProjectCurrentServerUser<ProjectId> | null>;
797
823
  getUser(id: string): Promise<ServerUser | null>;
798
824
  getUser(options: {
799
825
  apiKey: string;
826
+ or?: "return-null" | "anonymous";
800
827
  }): Promise<ServerUser | null>;
828
+ getUser(options: {
829
+ from: "convex";
830
+ ctx: GenericQueryCtx<any>;
831
+ or?: "return-null" | "anonymous";
832
+ }): Promise<ServerUser | null>;
833
+ getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & {
834
+ from: 'token';
835
+ }): Promise<TokenPartialUser | null>;
836
+ getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & {
837
+ from: 'convex';
838
+ }): Promise<TokenPartialUser | null>;
839
+ getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): Promise<SyncedPartialServerUser | TokenPartialUser | null>;
840
+ usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & {
841
+ from: 'token';
842
+ }): TokenPartialUser | null;
843
+ usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & {
844
+ from: 'convex';
845
+ }): TokenPartialUser | null;
846
+ usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): SyncedPartialServerUser | TokenPartialUser | null;
801
847
  useTeam(id: string): ServerTeam | null;
802
848
  useTeam(options: {
803
849
  apiKey: string;
@@ -1172,26 +1218,48 @@ type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends s
1172
1218
  noRedirect?: boolean;
1173
1219
  }): Promise<Result<undefined, KnownErrors["VerificationCodeError"] | KnownErrors["InvalidTotpCode"]>>;
1174
1220
  redirectToOAuthCallback(): Promise<void>;
1175
- useUser(options: GetUserOptions$1<HasTokenStore> & {
1221
+ getConvexClientAuth(options: {
1222
+ tokenStore: TokenStoreInit;
1223
+ }): (args: {
1224
+ forceRefreshToken: boolean;
1225
+ }) => Promise<string | null>;
1226
+ getConvexHttpClientAuth(options: {
1227
+ tokenStore: TokenStoreInit;
1228
+ }): Promise<string>;
1229
+ useUser(options: GetCurrentUserOptions<HasTokenStore> & {
1176
1230
  or: 'redirect';
1177
1231
  }): ProjectCurrentUser<ProjectId>;
1178
- useUser(options: GetUserOptions$1<HasTokenStore> & {
1232
+ useUser(options: GetCurrentUserOptions<HasTokenStore> & {
1179
1233
  or: 'throw';
1180
1234
  }): ProjectCurrentUser<ProjectId>;
1181
- useUser(options: GetUserOptions$1<HasTokenStore> & {
1235
+ useUser(options: GetCurrentUserOptions<HasTokenStore> & {
1182
1236
  or: 'anonymous';
1183
1237
  }): ProjectCurrentUser<ProjectId>;
1184
- useUser(options?: GetUserOptions$1<HasTokenStore>): ProjectCurrentUser<ProjectId> | null;
1185
- getUser(options: GetUserOptions$1<HasTokenStore> & {
1238
+ useUser(options?: GetCurrentUserOptions<HasTokenStore>): ProjectCurrentUser<ProjectId> | null;
1239
+ getUser(options: GetCurrentUserOptions<HasTokenStore> & {
1186
1240
  or: 'redirect';
1187
1241
  }): Promise<ProjectCurrentUser<ProjectId>>;
1188
- getUser(options: GetUserOptions$1<HasTokenStore> & {
1242
+ getUser(options: GetCurrentUserOptions<HasTokenStore> & {
1189
1243
  or: 'throw';
1190
1244
  }): Promise<ProjectCurrentUser<ProjectId>>;
1191
- getUser(options: GetUserOptions$1<HasTokenStore> & {
1245
+ getUser(options: GetCurrentUserOptions<HasTokenStore> & {
1192
1246
  or: 'anonymous';
1193
1247
  }): Promise<ProjectCurrentUser<ProjectId>>;
1194
- getUser(options?: GetUserOptions$1<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>;
1248
+ getUser(options?: GetCurrentUserOptions<HasTokenStore>): Promise<ProjectCurrentUser<ProjectId> | null>;
1249
+ getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & {
1250
+ from: 'token';
1251
+ }): Promise<TokenPartialUser | null>;
1252
+ getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & {
1253
+ from: 'convex';
1254
+ }): Promise<TokenPartialUser | null>;
1255
+ getPartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): Promise<SyncedPartialUser | TokenPartialUser | null>;
1256
+ usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & {
1257
+ from: 'token';
1258
+ }): TokenPartialUser | null;
1259
+ usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore> & {
1260
+ from: 'convex';
1261
+ }): TokenPartialUser | null;
1262
+ usePartialUser(options: GetCurrentPartialUserOptions<HasTokenStore>): SyncedPartialUser | TokenPartialUser | null;
1195
1263
  useNavigate(): (to: string) => void;
1196
1264
  [stackAppInternalsSymbol]: {
1197
1265
  toClientJson(): StackClientAppJson<HasTokenStore, ProjectId>;
@@ -1213,6 +1281,15 @@ type StackClientApp<HasTokenStore extends boolean = boolean, ProjectId extends s
1213
1281
  });
1214
1282
  declare const StackClientApp: StackClientAppConstructor;
1215
1283
 
1284
+ declare function getConvexProvidersConfig(options: {
1285
+ projectId?: string;
1286
+ }): {
1287
+ type: string;
1288
+ issuer: string;
1289
+ jwks: string;
1290
+ algorithm: string;
1291
+ }[];
1292
+
1216
1293
  declare const iconMap: {
1217
1294
  readonly Contact: React$1.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
1218
1295
  readonly ShieldCheck: React$1.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
@@ -1336,7 +1413,7 @@ declare function ReactStackHandler<HasTokenStore extends boolean>(props: BaseHan
1336
1413
  location: string;
1337
1414
  }): any;
1338
1415
 
1339
- type GetUserOptions = GetUserOptions$1<true> & {
1416
+ type GetUserOptions = GetCurrentUserOptions<true> & {
1340
1417
  projectIdMustMatch?: string;
1341
1418
  };
1342
1419
  /**
@@ -1578,4 +1655,4 @@ type UserButtonProps = {
1578
1655
  };
1579
1656
  declare function UserButton(props: UserButtonProps): react_jsx_runtime.JSX.Element;
1580
1657
 
1581
- export { AccountSettings, type AdminDomainConfig, type AdminEmailConfig, type AdminOAuthProviderConfig, type AdminOwnedProject, type AdminProject, type AdminProjectConfig, type AdminProjectConfigUpdateOptions, type AdminProjectCreateOptions, type AdminProjectPermission, type AdminProjectPermissionDefinition, type AdminProjectPermissionDefinitionCreateOptions, type AdminProjectPermissionDefinitionUpdateOptions, type AdminProjectUpdateOptions, type AdminSentEmail, type AdminTeamPermission, type AdminTeamPermissionDefinition, type AdminTeamPermissionDefinitionCreateOptions, type AdminTeamPermissionDefinitionUpdateOptions, type Auth, AuthPage, CliAuthConfirmation, type Connection, type ContactChannel, CredentialSignIn, CredentialSignUp, type CurrentInternalServerUser, type CurrentInternalUser, type CurrentServerUser, type CurrentUser, type EditableTeamMemberProfile, EmailVerification, ForgotPassword, type GetUserOptions$1 as GetUserOptions, type HandlerUrls, type InternalApiKey, type InternalApiKeyBase, type InternalApiKeyBaseCrudRead, type InternalApiKeyCreateOptions, type InternalApiKeyFirstView, MagicLinkSignIn, MessageCard, OAuthButton, OAuthButtonGroup, type OAuthConnection, type OAuthProvider, type OAuthProviderConfig, type OAuthScopesOnSignIn, PasswordReset, type Project, type ProjectConfig, SelectedTeamSwitcher, type ServerContactChannel, type ServerListUsersOptions, type ServerOAuthProvider, type ServerTeam, type ServerTeamCreateOptions, type ServerTeamMemberProfile, type ServerTeamUpdateOptions, type ServerTeamUser, type ServerUser, type Session, SignIn, SignUp, StackAdminApp, type StackAdminAppConstructor, type StackAdminAppConstructorOptions, StackClientApp, type StackClientAppConstructor, type StackClientAppConstructorOptions, type StackClientAppJson, ReactStackHandler as StackHandler, ReactStackProvider as StackProvider, StackServerApp, type StackServerAppConstructor, type StackServerAppConstructorOptions, StackTheme, type Team, type TeamCreateOptions, type TeamInvitation$1 as TeamInvitation, type TeamMemberProfile, TeamSwitcher, type TeamUpdateOptions, type TeamUser, type User, UserAvatar, UserButton, stackAppInternalsSymbol, useStackApp, useUser };
1658
+ export { AccountSettings, type AdminDomainConfig, type AdminEmailConfig, type AdminOAuthProviderConfig, type AdminOwnedProject, type AdminProject, type AdminProjectConfig, type AdminProjectConfigUpdateOptions, type AdminProjectCreateOptions, type AdminProjectPermission, type AdminProjectPermissionDefinition, type AdminProjectPermissionDefinitionCreateOptions, type AdminProjectPermissionDefinitionUpdateOptions, type AdminProjectUpdateOptions, type AdminSentEmail, type AdminTeamPermission, type AdminTeamPermissionDefinition, type AdminTeamPermissionDefinitionCreateOptions, type AdminTeamPermissionDefinitionUpdateOptions, type Auth, AuthPage, CliAuthConfirmation, type Connection, type ContactChannel, CredentialSignIn, CredentialSignUp, type CurrentInternalServerUser, type CurrentInternalUser, type CurrentServerUser, type CurrentUser, type EditableTeamMemberProfile, EmailVerification, ForgotPassword, type GetCurrentUserOptions, type GetCurrentUserOptions as GetUserOptions, type HandlerUrls, type InternalApiKey, type InternalApiKeyBase, type InternalApiKeyBaseCrudRead, type InternalApiKeyCreateOptions, type InternalApiKeyFirstView, MagicLinkSignIn, MessageCard, OAuthButton, OAuthButtonGroup, type OAuthConnection, type OAuthProvider, type OAuthProviderConfig, type OAuthScopesOnSignIn, PasswordReset, type Project, type ProjectConfig, SelectedTeamSwitcher, type ServerContactChannel, type ServerListUsersOptions, type ServerOAuthProvider, type ServerTeam, type ServerTeamCreateOptions, type ServerTeamMemberProfile, type ServerTeamUpdateOptions, type ServerTeamUser, type ServerUser, type Session, SignIn, SignUp, StackAdminApp, type StackAdminAppConstructor, type StackAdminAppConstructorOptions, StackClientApp, type StackClientAppConstructor, type StackClientAppConstructorOptions, type StackClientAppJson, ReactStackHandler as StackHandler, ReactStackProvider as StackProvider, StackServerApp, type StackServerAppConstructor, type StackServerAppConstructorOptions, StackTheme, type Team, type TeamCreateOptions, type TeamInvitation$1 as TeamInvitation, type TeamMemberProfile, TeamSwitcher, type TeamUpdateOptions, type TeamUser, type User, UserAvatar, UserButton, getConvexProvidersConfig, stackAppInternalsSymbol, useStackApp, useUser };
package/dist/index.js CHANGED
@@ -52,17 +52,20 @@ __export(index_exports, {
52
52
  TeamSwitcher: () => import_team_switcher.TeamSwitcher,
53
53
  UserAvatar: () => import_user_avatar.UserAvatar,
54
54
  UserButton: () => import_user_button.UserButton,
55
+ getConvexProvidersConfig: () => import_convex.getConvexProvidersConfig,
55
56
  useStackApp: () => import_hooks.useStackApp,
56
57
  useUser: () => import_hooks.useUser
57
58
  });
58
59
  module.exports = __toCommonJS(index_exports);
59
60
  __reExport(index_exports, require("./lib/stack-app/index.js"), module.exports);
61
+ var import_convex = require("./integrations/convex.js");
60
62
  var import_stack_handler = __toESM(require("./components-page/stack-handler.js"));
61
63
  var import_hooks = require("./lib/hooks.js");
62
64
  var import_stack_provider = __toESM(require("./providers/stack-provider.js"));
63
65
  var import_theme_provider = require("./providers/theme-provider.js");
64
66
  var import_account_settings = require("./components-page/account-settings.js");
65
67
  var import_auth_page = require("./components-page/auth-page.js");
68
+ var import_cli_auth_confirm = require("./components-page/cli-auth-confirm.js");
66
69
  var import_email_verification = require("./components-page/email-verification.js");
67
70
  var import_forgot_password = require("./components-page/forgot-password.js");
68
71
  var import_password_reset = require("./components-page/password-reset.js");
@@ -78,7 +81,6 @@ var import_oauth_button_group = require("./components/oauth-button-group.js");
78
81
  var import_selected_team_switcher = require("./components/selected-team-switcher.js");
79
82
  var import_team_switcher = require("./components/team-switcher.js");
80
83
  var import_user_button = require("./components/user-button.js");
81
- var import_cli_auth_confirm = require("./components-page/cli-auth-confirm.js");
82
84
  // Annotate the CommonJS export names for ESM import in node:
83
85
  0 && (module.exports = {
84
86
  AccountSettings,
@@ -102,6 +104,7 @@ var import_cli_auth_confirm = require("./components-page/cli-auth-confirm.js");
102
104
  TeamSwitcher,
103
105
  UserAvatar,
104
106
  UserButton,
107
+ getConvexProvidersConfig,
105
108
  useStackApp,
106
109
  useUser,
107
110
  ...require("./lib/stack-app/index.js")
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\nexport * from './lib/stack-app';\n\nexport { default as StackHandler } from \"./components-page/stack-handler\";\nexport { useStackApp, useUser } from \"./lib/hooks\";\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 { SelectedTeamSwitcher } from \"./components/selected-team-switcher\";\nexport { TeamSwitcher } from \"./components/team-switcher\";\nexport { UserButton } from \"./components/user-button\";\nexport { CliAuthConfirmation } from \"./components-page/cli-auth-confirm\";\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;AAIA,0BAAc,qCAJd;AAMA,2BAAwC;AACxC,mBAAqC;AACrC,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,oCAAqC;AACrC,2BAA6B;AAC7B,yBAA2B;AAC3B,8BAAoC;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\nexport * from './lib/stack-app';\n\nexport { getConvexProvidersConfig } from \"./integrations/convex\";\n\nexport { default as StackHandler } from \"./components-page/stack-handler\";\nexport { useStackApp, useUser } from \"./lib/hooks\";\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 { CliAuthConfirmation } from \"./components-page/cli-auth-confirm\";\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 { SelectedTeamSwitcher } from \"./components/selected-team-switcher\";\nexport { TeamSwitcher } from \"./components/team-switcher\";\nexport { UserButton } from \"./components/user-button\";\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;AAIA,0BAAc,qCAJd;AAMA,oBAAyC;AAEzC,2BAAwC;AACxC,mBAAqC;AACrC,4BAAyC;AACzC,4BAA2B;AAE3B,8BAAgC;AAChC,uBAAyB;AACzB,8BAAoC;AACpC,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,oCAAqC;AACrC,2BAA6B;AAC7B,yBAA2B;","names":[]}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/integrations/convex.ts
21
+ var convex_exports = {};
22
+ __export(convex_exports, {
23
+ getConvexProvidersConfig: () => getConvexProvidersConfig
24
+ });
25
+ module.exports = __toCommonJS(convex_exports);
26
+ var import_urls = require("@stackframe/stack-shared/dist/utils/urls");
27
+ var import_common = require("../lib/stack-app/apps/implementations/common.js");
28
+ function getConvexProvidersConfig(options) {
29
+ const projectId = options.projectId ?? (0, import_common.getDefaultProjectId)();
30
+ return [
31
+ {
32
+ type: "customJwt",
33
+ issuer: import_urls.urlString`https://api.stack-auth.com/api/v1/projects/${projectId}`,
34
+ jwks: import_urls.urlString`https://api.stack-auth.com/api/v1/projects/${projectId}/.well-known/jwks.json?include_anonymous=true`,
35
+ algorithm: "ES256"
36
+ }
37
+ ];
38
+ }
39
+ // Annotate the CommonJS export names for ESM import in node:
40
+ 0 && (module.exports = {
41
+ getConvexProvidersConfig
42
+ });
43
+ //# sourceMappingURL=convex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/integrations/convex.ts"],"sourcesContent":["\n//===========================================\n// THIS FILE IS AUTO-GENERATED FROM TEMPLATE. DO NOT EDIT IT DIRECTLY\n//===========================================\nimport { urlString } from \"@stackframe/stack-shared/dist/utils/urls\";\nimport { getDefaultProjectId } from \"../lib/stack-app/apps/implementations/common\";\n\nexport function getConvexProvidersConfig(options: {\n projectId?: string,\n}) {\n const projectId = options.projectId ?? getDefaultProjectId();\n return [\n {\n type: \"customJwt\",\n issuer: urlString`https://api.stack-auth.com/api/v1/projects/${projectId}`,\n jwks: urlString`https://api.stack-auth.com/api/v1/projects/${projectId}/.well-known/jwks.json?include_anonymous=true`,\n algorithm: \"ES256\",\n },\n ];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,kBAA0B;AAC1B,oBAAoC;AAE7B,SAAS,yBAAyB,SAEtC;AACD,QAAM,YAAY,QAAQ,iBAAa,mCAAoB;AAC3D,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,QAAQ,mEAAuD,SAAS;AAAA,MACxE,MAAM,mEAAuD,SAAS;AAAA,MACtE,WAAW;AAAA,IACb;AAAA,EACF;AACF;","names":[]}
@@ -177,6 +177,9 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
177
177
  return await this._interface.getItem({ customCustomerId, itemId }, session);
178
178
  }
179
179
  );
180
+ this._convexPartialUserCache = (0, import_common2.createCache)(
181
+ async ([ctx]) => await this._getPartialUserFromConvex(ctx)
182
+ );
180
183
  this._anonymousSignUpInProgress = null;
181
184
  this._memoryTokenStore = (0, import_common2.createEmptyTokenStore)();
182
185
  this._nextServerCookiesTokenStores = /* @__PURE__ */ new WeakMap();
@@ -464,7 +467,8 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
464
467
  }
465
468
  async _getSession(overrideTokenStoreInit) {
466
469
  const tokenStore = this._getOrCreateTokenStore(await this._createCookieHelper(), overrideTokenStoreInit);
467
- return this._getSessionFromTokenStore(tokenStore);
470
+ const session = this._getSessionFromTokenStore(tokenStore);
471
+ return session;
468
472
  }
469
473
  _useSession(overrideTokenStoreInit) {
470
474
  const tokenStore = this._useTokenStore(overrideTokenStoreInit);
@@ -1350,6 +1354,83 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
1350
1354
  return crud && this._currentUserFromCrud(crud, session);
1351
1355
  }, [crud, session, options?.or]);
1352
1356
  }
1357
+ _getTokenPartialUserFromSession(session, options) {
1358
+ const accessToken = session.getAccessTokenIfNotExpiredYet(0);
1359
+ if (!accessToken) {
1360
+ return null;
1361
+ }
1362
+ const isAnonymous = accessToken.payload.is_anonymous;
1363
+ if (isAnonymous && options.or !== "anonymous") {
1364
+ return null;
1365
+ }
1366
+ return {
1367
+ id: accessToken.payload.sub,
1368
+ primaryEmail: accessToken.payload.email,
1369
+ displayName: accessToken.payload.name,
1370
+ primaryEmailVerified: accessToken.payload.email_verified,
1371
+ isAnonymous
1372
+ };
1373
+ }
1374
+ async _getPartialUserFromConvex(ctx) {
1375
+ const auth = await ctx.auth.getUserIdentity();
1376
+ if (!auth) {
1377
+ return null;
1378
+ }
1379
+ return {
1380
+ id: auth.subject,
1381
+ displayName: auth.name ?? null,
1382
+ primaryEmail: auth.email ?? null,
1383
+ primaryEmailVerified: auth.email_verified,
1384
+ isAnonymous: auth.is_anonymous
1385
+ };
1386
+ }
1387
+ async getPartialUser(options) {
1388
+ switch (options.from) {
1389
+ case "token": {
1390
+ this._ensurePersistentTokenStore(options.tokenStore ?? this._tokenStoreInit);
1391
+ const session = await this._getSession(options.tokenStore);
1392
+ return this._getTokenPartialUserFromSession(session, options);
1393
+ }
1394
+ case "convex": {
1395
+ return await this._getPartialUserFromConvex(options.ctx);
1396
+ }
1397
+ default: {
1398
+ throw new Error(`Invalid 'from' option: ${options.from}`);
1399
+ }
1400
+ }
1401
+ }
1402
+ usePartialUser(options) {
1403
+ switch (options.from) {
1404
+ case "token": {
1405
+ this._ensurePersistentTokenStore(options.tokenStore ?? this._tokenStoreInit);
1406
+ const session = this._useSession(options.tokenStore);
1407
+ return this._getTokenPartialUserFromSession(session, options);
1408
+ }
1409
+ case "convex": {
1410
+ const result = (0, import_common3.useAsyncCache)(this._convexPartialUserCache, [options.ctx], "usePartialUser(convex)");
1411
+ return result;
1412
+ }
1413
+ default: {
1414
+ throw new Error(`Invalid 'from' option: ${options.from}`);
1415
+ }
1416
+ }
1417
+ }
1418
+ getConvexClientAuth(options) {
1419
+ return async (args) => {
1420
+ const session = await this._getSession(options.tokenStore);
1421
+ if (!args.forceRefreshToken) {
1422
+ const tokens2 = await session.getOrFetchLikelyValidTokens(2e4);
1423
+ return tokens2?.accessToken.token ?? null;
1424
+ }
1425
+ const tokens = await session.fetchNewTokens();
1426
+ return tokens?.accessToken.token ?? null;
1427
+ };
1428
+ }
1429
+ async getConvexHttpClientAuth(options) {
1430
+ const session = await this._getSession(options.tokenStore);
1431
+ const tokens = await session.getOrFetchLikelyValidTokens(2e4);
1432
+ return tokens?.accessToken.token ?? (0, import_errors.throwErr)("No access token available");
1433
+ }
1353
1434
  async _updateClientUser(update, session) {
1354
1435
  const res = await this._interface.updateClientUser((0, import_users.userUpdateOptionsToCrud)(update), session);
1355
1436
  await this._refreshUser(session);