@stackframe/react 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 +5 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @stackframe/stack
2
2
 
3
+ ## 2.8.41
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @stackframe/stack-shared@2.8.41
9
+ - @stackframe/stack-ui@2.8.41
10
+ - @stackframe/stack-sc@2.8.41
11
+
12
+ ## 2.8.40
13
+
14
+ ### Patch Changes
15
+
16
+ - Various changes
17
+ - Updated dependencies
18
+ - @stackframe/stack-shared@2.8.40
19
+ - @stackframe/stack-ui@2.8.40
20
+ - @stackframe/stack-sc@2.8.40
21
+
3
22
  ## 2.8.39
4
23
 
5
24
  ### Patch Changes
package/dist/esm/index.js CHANGED
@@ -1,11 +1,13 @@
1
1
  // src/index.ts
2
2
  export * from "./lib/stack-app/index.js";
3
+ import { getConvexProvidersConfig } from "./integrations/convex.js";
3
4
  import { default as default2 } from "./components-page/stack-handler.js";
4
5
  import { useStackApp, useUser } from "./lib/hooks.js";
5
6
  import { default as default3 } from "./providers/stack-provider.js";
6
7
  import { StackTheme } from "./providers/theme-provider.js";
7
8
  import { AccountSettings } from "./components-page/account-settings.js";
8
9
  import { AuthPage } from "./components-page/auth-page.js";
10
+ import { CliAuthConfirmation } from "./components-page/cli-auth-confirm.js";
9
11
  import { EmailVerification } from "./components-page/email-verification.js";
10
12
  import { ForgotPassword } from "./components-page/forgot-password.js";
11
13
  import { PasswordReset } from "./components-page/password-reset.js";
@@ -21,7 +23,6 @@ import { OAuthButtonGroup } from "./components/oauth-button-group.js";
21
23
  import { SelectedTeamSwitcher } from "./components/selected-team-switcher.js";
22
24
  import { TeamSwitcher } from "./components/team-switcher.js";
23
25
  import { UserButton } from "./components/user-button.js";
24
- import { CliAuthConfirmation } from "./components-page/cli-auth-confirm.js";
25
26
  export {
26
27
  AccountSettings,
27
28
  AuthPage,
@@ -44,6 +45,7 @@ export {
44
45
  TeamSwitcher,
45
46
  UserAvatar,
46
47
  UserButton,
48
+ getConvexProvidersConfig,
47
49
  useStackApp,
48
50
  useUser
49
51
  };
@@ -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":";AAIA,cAAc;AAEd,SAAoB,WAAXA,gBAA+B;AACxC,SAAS,aAAa,eAAe;AACrC,SAAoB,WAAXA,gBAAgC;AACzC,SAAS,kBAAkB;AAE3B,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AACzB,SAAS,yBAAyB;AAClC,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAA6B,wBAAwB;AACrD,SAA6B,wBAAwB;AACrD,SAAS,kBAAkB;AAC3B,SAA4B,uBAAuB;AACnD,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;AAC3B,SAAS,2BAA2B;","names":["default"]}
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":";AAIA,cAAc;AAEd,SAAS,gCAAgC;AAEzC,SAAoB,WAAXA,gBAA+B;AACxC,SAAS,aAAa,eAAe;AACrC,SAAoB,WAAXA,gBAAgC;AACzC,SAAS,kBAAkB;AAE3B,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AACzB,SAAS,2BAA2B;AACpC,SAAS,yBAAyB;AAClC,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,SAAS,cAAc;AACvB,SAAS,cAAc;AACvB,SAA6B,wBAAwB;AACrD,SAA6B,wBAAwB;AACrD,SAAS,kBAAkB;AAC3B,SAA4B,uBAAuB;AACnD,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB;","names":["default"]}
@@ -0,0 +1,18 @@
1
+ // src/integrations/convex.ts
2
+ import { urlString } from "@stackframe/stack-shared/dist/utils/urls";
3
+ import { getDefaultProjectId } from "../lib/stack-app/apps/implementations/common.js";
4
+ function getConvexProvidersConfig(options) {
5
+ const projectId = options.projectId ?? getDefaultProjectId();
6
+ return [
7
+ {
8
+ type: "customJwt",
9
+ issuer: urlString`https://api.stack-auth.com/api/v1/projects/${projectId}`,
10
+ jwks: urlString`https://api.stack-auth.com/api/v1/projects/${projectId}/.well-known/jwks.json?include_anonymous=true`,
11
+ algorithm: "ES256"
12
+ }
13
+ ];
14
+ }
15
+ export {
16
+ getConvexProvidersConfig
17
+ };
18
+ //# 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":";AAIA,SAAS,iBAAiB;AAC1B,SAAS,2BAA2B;AAE7B,SAAS,yBAAyB,SAEtC;AACD,QAAM,YAAY,QAAQ,aAAa,oBAAoB;AAC3D,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,QAAQ,uDAAuD,SAAS;AAAA,MACxE,MAAM,uDAAuD,SAAS;AAAA,MACtE,WAAW;AAAA,IACb;AAAA,EACF;AACF;","names":[]}
@@ -143,6 +143,9 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
143
143
  return await this._interface.getItem({ customCustomerId, itemId }, session);
144
144
  }
145
145
  );
146
+ this._convexPartialUserCache = createCache(
147
+ async ([ctx]) => await this._getPartialUserFromConvex(ctx)
148
+ );
146
149
  this._anonymousSignUpInProgress = null;
147
150
  this._memoryTokenStore = createEmptyTokenStore();
148
151
  this._nextServerCookiesTokenStores = /* @__PURE__ */ new WeakMap();
@@ -430,7 +433,8 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
430
433
  }
431
434
  async _getSession(overrideTokenStoreInit) {
432
435
  const tokenStore = this._getOrCreateTokenStore(await this._createCookieHelper(), overrideTokenStoreInit);
433
- return this._getSessionFromTokenStore(tokenStore);
436
+ const session = this._getSessionFromTokenStore(tokenStore);
437
+ return session;
434
438
  }
435
439
  _useSession(overrideTokenStoreInit) {
436
440
  const tokenStore = this._useTokenStore(overrideTokenStoreInit);
@@ -1316,6 +1320,83 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
1316
1320
  return crud && this._currentUserFromCrud(crud, session);
1317
1321
  }, [crud, session, options?.or]);
1318
1322
  }
1323
+ _getTokenPartialUserFromSession(session, options) {
1324
+ const accessToken = session.getAccessTokenIfNotExpiredYet(0);
1325
+ if (!accessToken) {
1326
+ return null;
1327
+ }
1328
+ const isAnonymous = accessToken.payload.is_anonymous;
1329
+ if (isAnonymous && options.or !== "anonymous") {
1330
+ return null;
1331
+ }
1332
+ return {
1333
+ id: accessToken.payload.sub,
1334
+ primaryEmail: accessToken.payload.email,
1335
+ displayName: accessToken.payload.name,
1336
+ primaryEmailVerified: accessToken.payload.email_verified,
1337
+ isAnonymous
1338
+ };
1339
+ }
1340
+ async _getPartialUserFromConvex(ctx) {
1341
+ const auth = await ctx.auth.getUserIdentity();
1342
+ if (!auth) {
1343
+ return null;
1344
+ }
1345
+ return {
1346
+ id: auth.subject,
1347
+ displayName: auth.name ?? null,
1348
+ primaryEmail: auth.email ?? null,
1349
+ primaryEmailVerified: auth.email_verified,
1350
+ isAnonymous: auth.is_anonymous
1351
+ };
1352
+ }
1353
+ async getPartialUser(options) {
1354
+ switch (options.from) {
1355
+ case "token": {
1356
+ this._ensurePersistentTokenStore(options.tokenStore ?? this._tokenStoreInit);
1357
+ const session = await this._getSession(options.tokenStore);
1358
+ return this._getTokenPartialUserFromSession(session, options);
1359
+ }
1360
+ case "convex": {
1361
+ return await this._getPartialUserFromConvex(options.ctx);
1362
+ }
1363
+ default: {
1364
+ throw new Error(`Invalid 'from' option: ${options.from}`);
1365
+ }
1366
+ }
1367
+ }
1368
+ usePartialUser(options) {
1369
+ switch (options.from) {
1370
+ case "token": {
1371
+ this._ensurePersistentTokenStore(options.tokenStore ?? this._tokenStoreInit);
1372
+ const session = this._useSession(options.tokenStore);
1373
+ return this._getTokenPartialUserFromSession(session, options);
1374
+ }
1375
+ case "convex": {
1376
+ const result = useAsyncCache(this._convexPartialUserCache, [options.ctx], "usePartialUser(convex)");
1377
+ return result;
1378
+ }
1379
+ default: {
1380
+ throw new Error(`Invalid 'from' option: ${options.from}`);
1381
+ }
1382
+ }
1383
+ }
1384
+ getConvexClientAuth(options) {
1385
+ return async (args) => {
1386
+ const session = await this._getSession(options.tokenStore);
1387
+ if (!args.forceRefreshToken) {
1388
+ const tokens2 = await session.getOrFetchLikelyValidTokens(2e4);
1389
+ return tokens2?.accessToken.token ?? null;
1390
+ }
1391
+ const tokens = await session.fetchNewTokens();
1392
+ return tokens?.accessToken.token ?? null;
1393
+ };
1394
+ }
1395
+ async getConvexHttpClientAuth(options) {
1396
+ const session = await this._getSession(options.tokenStore);
1397
+ const tokens = await session.getOrFetchLikelyValidTokens(2e4);
1398
+ return tokens?.accessToken.token ?? throwErr("No access token available");
1399
+ }
1319
1400
  async _updateClientUser(update, session) {
1320
1401
  const res = await this._interface.updateClientUser(userUpdateOptionsToCrud(update), session);
1321
1402
  await this._refreshUser(session);