@stackframe/js 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 (34) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/esm/index.js +4 -0
  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 +66 -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 +20 -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/index.d.mts +67 -10
  18. package/dist/index.d.ts +67 -10
  19. package/dist/index.js +9 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/integrations/convex.js +43 -0
  22. package/dist/integrations/convex.js.map +1 -0
  23. package/dist/lib/stack-app/apps/implementations/client-app-impl.js +66 -1
  24. package/dist/lib/stack-app/apps/implementations/client-app-impl.js.map +1 -1
  25. package/dist/lib/stack-app/apps/implementations/common.js +1 -1
  26. package/dist/lib/stack-app/apps/implementations/common.js.map +1 -1
  27. package/dist/lib/stack-app/apps/implementations/server-app-impl.js +20 -0
  28. package/dist/lib/stack-app/apps/implementations/server-app-impl.js.map +1 -1
  29. package/dist/lib/stack-app/apps/interfaces/client-app.js.map +1 -1
  30. package/dist/lib/stack-app/apps/interfaces/server-app.js.map +1 -1
  31. package/dist/lib/stack-app/common.js.map +1 -1
  32. package/dist/lib/stack-app/index.js.map +1 -1
  33. package/dist/lib/stack-app/users/index.js.map +1 -1
  34. package/package.json +4 -3
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,3 +1,7 @@
1
1
  // src/index.ts
2
2
  export * from "./lib/stack-app/index.js";
3
+ import { getConvexProvidersConfig } from "./integrations/convex.js";
4
+ export {
5
+ getConvexProvidersConfig
6
+ };
3
7
  //# sourceMappingURL=index.js.map
@@ -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\n"],"mappings":";AAIA,cAAc;","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\n"],"mappings":";AAIA,cAAc;AAEd,SAAS,gCAAgC;","names":[]}
@@ -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":[]}
@@ -139,6 +139,9 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
139
139
  return await this._interface.getItem({ customCustomerId, itemId }, session);
140
140
  }
141
141
  );
142
+ this._convexPartialUserCache = createCache(
143
+ async ([ctx]) => await this._getPartialUserFromConvex(ctx)
144
+ );
142
145
  this._anonymousSignUpInProgress = null;
143
146
  this._memoryTokenStore = createEmptyTokenStore();
144
147
  this._nextServerCookiesTokenStores = /* @__PURE__ */ new WeakMap();
@@ -413,7 +416,8 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
413
416
  }
414
417
  async _getSession(overrideTokenStoreInit) {
415
418
  const tokenStore = this._getOrCreateTokenStore(await this._createCookieHelper(), overrideTokenStoreInit);
416
- return this._getSessionFromTokenStore(tokenStore);
419
+ const session = this._getSessionFromTokenStore(tokenStore);
420
+ return session;
417
421
  }
418
422
  async _signInToAccountWithTokens(tokens) {
419
423
  if (!("accessToken" in tokens) || !("refreshToken" in tokens)) {
@@ -1152,6 +1156,67 @@ var __StackClientAppImplIncomplete = class __StackClientAppImplIncomplete {
1152
1156
  }
1153
1157
  return crud && this._currentUserFromCrud(crud, session);
1154
1158
  }
1159
+ _getTokenPartialUserFromSession(session, options) {
1160
+ const accessToken = session.getAccessTokenIfNotExpiredYet(0);
1161
+ if (!accessToken) {
1162
+ return null;
1163
+ }
1164
+ const isAnonymous = accessToken.payload.is_anonymous;
1165
+ if (isAnonymous && options.or !== "anonymous") {
1166
+ return null;
1167
+ }
1168
+ return {
1169
+ id: accessToken.payload.sub,
1170
+ primaryEmail: accessToken.payload.email,
1171
+ displayName: accessToken.payload.name,
1172
+ primaryEmailVerified: accessToken.payload.email_verified,
1173
+ isAnonymous
1174
+ };
1175
+ }
1176
+ async _getPartialUserFromConvex(ctx) {
1177
+ const auth = await ctx.auth.getUserIdentity();
1178
+ if (!auth) {
1179
+ return null;
1180
+ }
1181
+ return {
1182
+ id: auth.subject,
1183
+ displayName: auth.name ?? null,
1184
+ primaryEmail: auth.email ?? null,
1185
+ primaryEmailVerified: auth.email_verified,
1186
+ isAnonymous: auth.is_anonymous
1187
+ };
1188
+ }
1189
+ async getPartialUser(options) {
1190
+ switch (options.from) {
1191
+ case "token": {
1192
+ this._ensurePersistentTokenStore(options.tokenStore ?? this._tokenStoreInit);
1193
+ const session = await this._getSession(options.tokenStore);
1194
+ return this._getTokenPartialUserFromSession(session, options);
1195
+ }
1196
+ case "convex": {
1197
+ return await this._getPartialUserFromConvex(options.ctx);
1198
+ }
1199
+ default: {
1200
+ throw new Error(`Invalid 'from' option: ${options.from}`);
1201
+ }
1202
+ }
1203
+ }
1204
+ getConvexClientAuth(options) {
1205
+ return async (args) => {
1206
+ const session = await this._getSession(options.tokenStore);
1207
+ if (!args.forceRefreshToken) {
1208
+ const tokens2 = await session.getOrFetchLikelyValidTokens(2e4);
1209
+ return tokens2?.accessToken.token ?? null;
1210
+ }
1211
+ const tokens = await session.fetchNewTokens();
1212
+ return tokens?.accessToken.token ?? null;
1213
+ };
1214
+ }
1215
+ async getConvexHttpClientAuth(options) {
1216
+ const session = await this._getSession(options.tokenStore);
1217
+ const tokens = await session.getOrFetchLikelyValidTokens(2e4);
1218
+ return tokens?.accessToken.token ?? throwErr("No access token available");
1219
+ }
1155
1220
  async _updateClientUser(update, session) {
1156
1221
  const res = await this._interface.updateClientUser(userUpdateOptionsToCrud(update), session);
1157
1222
  await this._refreshUser(session);