@stackframe/stack 2.8.39 → 2.8.41

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 +19 -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 +6 -5
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" | "nextjs" | "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>>;
@@ -1345,7 +1422,7 @@ declare function NextStackHandler<HasTokenStore extends boolean>(props: BaseHand
1345
1422
  routeProps: RouteProps | unknown;
1346
1423
  })): Promise<any>;
1347
1424
 
1348
- type GetUserOptions = GetUserOptions$1<true> & {
1425
+ type GetUserOptions = GetCurrentUserOptions<true> & {
1349
1426
  projectIdMustMatch?: string;
1350
1427
  };
1351
1428
  /**
@@ -1587,4 +1664,4 @@ type UserButtonProps = {
1587
1664
  };
1588
1665
  declare function UserButton(props: UserButtonProps): react_jsx_runtime.JSX.Element;
1589
1666
 
1590
- 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, NextStackHandler as StackHandler, NextStackProvider 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 };
1667
+ 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, NextStackHandler as StackHandler, NextStackProvider 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(src_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(src_exports);
59
60
  __reExport(src_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,wBAAc,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,wBAAc,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":[]}
@@ -182,6 +182,9 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
182
182
  return await this._interface.getItem({ customCustomerId, itemId }, session);
183
183
  }
184
184
  );
185
+ this._convexPartialUserCache = (0, import_common2.createCache)(
186
+ async ([ctx]) => await this._getPartialUserFromConvex(ctx)
187
+ );
185
188
  this._anonymousSignUpInProgress = null;
186
189
  this._memoryTokenStore = (0, import_common2.createEmptyTokenStore)();
187
190
  this._nextServerCookiesTokenStores = /* @__PURE__ */ new WeakMap();
@@ -471,7 +474,8 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
471
474
  }
472
475
  async _getSession(overrideTokenStoreInit) {
473
476
  const tokenStore = this._getOrCreateTokenStore(await this._createCookieHelper(), overrideTokenStoreInit);
474
- return this._getSessionFromTokenStore(tokenStore);
477
+ const session = this._getSessionFromTokenStore(tokenStore);
478
+ return session;
475
479
  }
476
480
  _useSession(overrideTokenStoreInit) {
477
481
  const tokenStore = this._useTokenStore(overrideTokenStoreInit);
@@ -1362,6 +1366,83 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
1362
1366
  return crud && this._currentUserFromCrud(crud, session);
1363
1367
  }, [crud, session, options?.or]);
1364
1368
  }
1369
+ _getTokenPartialUserFromSession(session, options) {
1370
+ const accessToken = session.getAccessTokenIfNotExpiredYet(0);
1371
+ if (!accessToken) {
1372
+ return null;
1373
+ }
1374
+ const isAnonymous = accessToken.payload.is_anonymous;
1375
+ if (isAnonymous && options.or !== "anonymous") {
1376
+ return null;
1377
+ }
1378
+ return {
1379
+ id: accessToken.payload.sub,
1380
+ primaryEmail: accessToken.payload.email,
1381
+ displayName: accessToken.payload.name,
1382
+ primaryEmailVerified: accessToken.payload.email_verified,
1383
+ isAnonymous
1384
+ };
1385
+ }
1386
+ async _getPartialUserFromConvex(ctx) {
1387
+ const auth = await ctx.auth.getUserIdentity();
1388
+ if (!auth) {
1389
+ return null;
1390
+ }
1391
+ return {
1392
+ id: auth.subject,
1393
+ displayName: auth.name ?? null,
1394
+ primaryEmail: auth.email ?? null,
1395
+ primaryEmailVerified: auth.email_verified,
1396
+ isAnonymous: auth.is_anonymous
1397
+ };
1398
+ }
1399
+ async getPartialUser(options) {
1400
+ switch (options.from) {
1401
+ case "token": {
1402
+ this._ensurePersistentTokenStore(options.tokenStore ?? this._tokenStoreInit);
1403
+ const session = await this._getSession(options.tokenStore);
1404
+ return this._getTokenPartialUserFromSession(session, options);
1405
+ }
1406
+ case "convex": {
1407
+ return await this._getPartialUserFromConvex(options.ctx);
1408
+ }
1409
+ default: {
1410
+ throw new Error(`Invalid 'from' option: ${options.from}`);
1411
+ }
1412
+ }
1413
+ }
1414
+ usePartialUser(options) {
1415
+ switch (options.from) {
1416
+ case "token": {
1417
+ this._ensurePersistentTokenStore(options.tokenStore ?? this._tokenStoreInit);
1418
+ const session = this._useSession(options.tokenStore);
1419
+ return this._getTokenPartialUserFromSession(session, options);
1420
+ }
1421
+ case "convex": {
1422
+ const result = (0, import_common3.useAsyncCache)(this._convexPartialUserCache, [options.ctx], "usePartialUser(convex)");
1423
+ return result;
1424
+ }
1425
+ default: {
1426
+ throw new Error(`Invalid 'from' option: ${options.from}`);
1427
+ }
1428
+ }
1429
+ }
1430
+ getConvexClientAuth(options) {
1431
+ return async (args) => {
1432
+ const session = await this._getSession(options.tokenStore);
1433
+ if (!args.forceRefreshToken) {
1434
+ const tokens2 = await session.getOrFetchLikelyValidTokens(2e4);
1435
+ return tokens2?.accessToken.token ?? null;
1436
+ }
1437
+ const tokens = await session.fetchNewTokens();
1438
+ return tokens?.accessToken.token ?? null;
1439
+ };
1440
+ }
1441
+ async getConvexHttpClientAuth(options) {
1442
+ const session = await this._getSession(options.tokenStore);
1443
+ const tokens = await session.getOrFetchLikelyValidTokens(2e4);
1444
+ return tokens?.accessToken.token ?? (0, import_errors.throwErr)("No access token available");
1445
+ }
1365
1446
  async _updateClientUser(update, session) {
1366
1447
  const res = await this._interface.updateClientUser((0, import_users.userUpdateOptionsToCrud)(update), session);
1367
1448
  await this._refreshUser(session);