@stackframe/stack 1.1.0 → 1.2.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.
Files changed (63) hide show
  1. package/dist/components/EmailVerification.d.ts +1 -0
  2. package/dist/components/ForgotPassword.d.ts +1 -0
  3. package/dist/components/OAuthCallback.d.ts +2 -0
  4. package/dist/components/OAuthCallback.d.ts.map +1 -0
  5. package/dist/components/{OauthCallback.js → OAuthCallback.js} +2 -2
  6. package/dist/components/PasswordReset.d.ts +1 -0
  7. package/dist/components/PasswordReset.d.ts.map +1 -1
  8. package/dist/components/PasswordReset.js +5 -5
  9. package/dist/components/SignIn.d.ts +1 -0
  10. package/dist/components/SignIn.d.ts.map +1 -1
  11. package/dist/components/SignIn.js +5 -3
  12. package/dist/components/SignOut.d.ts +1 -0
  13. package/dist/components/SignUp.d.ts +1 -0
  14. package/dist/components/SignUp.d.ts.map +1 -1
  15. package/dist/components/SignUp.js +4 -3
  16. package/dist/components/StackHandler.d.ts +1 -0
  17. package/dist/components/StackHandler.js +2 -2
  18. package/dist/elements/Button.d.ts +1 -0
  19. package/dist/elements/CardFrame.d.ts +1 -0
  20. package/dist/elements/CardHeader.d.ts +1 -0
  21. package/dist/elements/CredentialSignIn.d.ts +1 -0
  22. package/dist/elements/CredentialSignUp.d.ts +1 -0
  23. package/dist/elements/DividerWithText.d.ts +1 -0
  24. package/dist/elements/ForgotPassword.d.ts +1 -0
  25. package/dist/elements/FormWarning.d.ts +1 -0
  26. package/dist/elements/MessageCard.d.ts +1 -0
  27. package/dist/elements/{OauthButton.d.ts → OAuthButton.d.ts} +2 -1
  28. package/dist/elements/OAuthButton.d.ts.map +1 -0
  29. package/dist/elements/{OauthButton.js → OAuthButton.js} +2 -2
  30. package/dist/elements/OAuthGroup.d.ts +5 -0
  31. package/dist/elements/OAuthGroup.d.ts.map +1 -0
  32. package/dist/elements/OAuthGroup.js +8 -0
  33. package/dist/elements/PasswordField.d.ts +1 -0
  34. package/dist/elements/PasswordResetInner.d.ts +1 -0
  35. package/dist/elements/RedirectMessageCard.d.ts +1 -0
  36. package/dist/index.d.ts +1 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +0 -1
  39. package/dist/lib/auth.d.ts +3 -2
  40. package/dist/lib/auth.js +8 -8
  41. package/dist/lib/cookie.d.ts +1 -0
  42. package/dist/lib/hooks.d.ts +1 -0
  43. package/dist/lib/stack-app.d.ts +69 -34
  44. package/dist/lib/stack-app.d.ts.map +1 -1
  45. package/dist/lib/stack-app.js +252 -70
  46. package/dist/providers/StackProvider.d.ts +1 -0
  47. package/dist/providers/StackProviderClient.d.ts +1 -0
  48. package/dist/utils/email.d.ts +1 -0
  49. package/dist/utils/next.d.ts +1 -0
  50. package/dist/utils/react.d.ts +1 -0
  51. package/dist/utils/results.d.ts +1 -0
  52. package/dist/utils/types.d.ts +1 -0
  53. package/dist/utils/url.d.ts +1 -0
  54. package/package.json +3 -3
  55. package/dist/components/OauthCallback.d.ts +0 -1
  56. package/dist/components/OauthCallback.d.ts.map +0 -1
  57. package/dist/elements/OauthButton.d.ts.map +0 -1
  58. package/dist/elements/OauthGroup.d.ts +0 -4
  59. package/dist/elements/OauthGroup.d.ts.map +0 -1
  60. package/dist/elements/OauthGroup.js +0 -11
  61. package/dist/lib/cookie-server.d.ts +0 -2
  62. package/dist/lib/cookie-server.d.ts.map +0 -1
  63. package/dist/lib/cookie-server.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"stack-app.d.ts","sourceRoot":"","sources":["../../src/lib/stack-app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stack-app.d.ts","sourceRoot":"","sources":["../../src/lib/stack-app.ts"],"names":[],"mappings":"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"}
@@ -3,15 +3,18 @@ import { StackAdminInterface, StackClientInterface, StackServerInterface } from
3
3
  import { getCookie, setOrDeleteCookie } from "./cookie";
4
4
  import { throwErr } from "@stackframe/stack-shared/dist/utils/errors";
5
5
  import { generateUuid } from "@stackframe/stack-shared/dist/utils/uuids";
6
- import { AsyncResult } from "@stackframe/stack-shared/dist/utils/results";
6
+ import { AsyncResult, Result } from "@stackframe/stack-shared/dist/utils/results";
7
7
  import { suspendIfSsr } from "@stackframe/stack-shared/dist/utils/react";
8
8
  import { AsyncStore } from "@stackframe/stack-shared/dist/utils/stores";
9
+ import { getProductionModeErrors } from "@stackframe/stack-shared/dist/interface/clientInterface";
9
10
  import { isClient } from "../utils/next";
10
- import { callOauthCallback, signInWithCredential, signInWithOauth, signUpWithCredential } from "./auth";
11
+ import { callOAuthCallback, signInWithCredential, signInWithOAuth, signUpWithCredential } from "./auth";
11
12
  import { RedirectType, redirect, useRouter } from "next/navigation";
12
13
  import { constructRedirectUrl } from "../utils/url";
13
14
  import { filterUndefined } from "@stackframe/stack-shared/dist/utils/objects";
14
15
  import { neverResolve, resolved } from "@stackframe/stack-shared/dist/utils/promises";
16
+ import { AsyncCache } from "@stackframe/stack-shared/dist/utils/caches";
17
+ import { suspend } from "../utils/react";
15
18
  function getUrls(partial) {
16
19
  const handler = partial.handler ?? "/handler";
17
20
  return {
@@ -119,34 +122,62 @@ function getTokenStore(tokenStoreOptions) {
119
122
  return (tokenStoreInitializers.get(tokenStoreOptions) ?? throwErr(`Invalid token store ${tokenStoreOptions}`))();
120
123
  }
121
124
  const loadingSentinel = Symbol("stackAppCacheLoadingSentinel");
122
- function useValueCache(cache) {
125
+ function useCache(cache, dependencies) {
123
126
  // we explicitly don't want to run this hook in SSR
124
127
  suspendIfSsr();
125
128
  const subscribe = useCallback((cb) => {
126
- const { unsubscribe } = cache.onChange(() => cb());
129
+ const { unsubscribe } = cache.onChange(dependencies, () => cb());
127
130
  return unsubscribe;
128
- }, [cache]);
131
+ }, [cache, ...dependencies]);
129
132
  const getSnapshot = useCallback(() => {
130
- return AsyncResult.or(cache.get(), loadingSentinel);
131
- }, [cache]);
133
+ return AsyncResult.or(cache.getIfCached(dependencies), loadingSentinel);
134
+ }, [cache, ...dependencies]);
132
135
  // note: we must use React.useSyncExternalStore instead of importing the function directly, as it will otherwise
133
136
  // throw an error ("can't import useSyncExternalStore from the server")
134
137
  const value = React.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
135
138
  if (value === loadingSentinel) {
136
- return use(cache.getOrWait());
139
+ return use(cache.getOrWait(dependencies, "read-write"));
137
140
  }
138
141
  else {
139
- // still need to call `use` because React expects the control flow to not change
142
+ // still need to call `use` because React expects the control flow to not change across two re-renders with the same props/state and it detects that by hook invocations (including `use`)
140
143
  return use(resolved(value));
141
144
  }
142
145
  }
143
146
  export const stackAppInternalsSymbol = Symbol.for("StackAppInternals");
144
147
  const allClientApps = new Map();
148
+ const createCache = (fetcher) => {
149
+ return new AsyncCache(async (dependencies) => await fetcher(dependencies), {});
150
+ };
151
+ // note that we intentionally use TokenStore (a reference type) as a key instead of a stringified version of it, as different token stores with the same tokens should be treated differently
152
+ // (if we wouldn't , we would cache users across requests, which may cause issues)
153
+ const createCacheByTokenStore = (fetcher) => {
154
+ return new AsyncCache(async ([tokenStore, ...extraDependencies]) => await fetcher(tokenStore, extraDependencies), {
155
+ onSubscribe: ([tokenStore], refresh) => {
156
+ // TODO find a *clean* way to not refresh when the token change was made inside the fetcher (for example due to expired access token)
157
+ const handlerObj = tokenStore.onChange((newValue, oldValue) => {
158
+ if (JSON.stringify(newValue) === JSON.stringify(oldValue))
159
+ return;
160
+ refresh();
161
+ });
162
+ return () => handlerObj.unsubscribe();
163
+ },
164
+ });
165
+ };
145
166
  class _StackClientAppImpl {
146
167
  _uniqueIdentifier;
147
168
  _interface;
148
169
  _tokenStoreOptions;
149
170
  _urlOptions;
171
+ _currentUserCache = createCacheByTokenStore(async (tokenStore) => {
172
+ const user = await this._interface.getClientUserByToken(tokenStore);
173
+ return Result.or(user, null);
174
+ });
175
+ _currentProjectCache = createCache(async () => {
176
+ return Result.orThrow(await this._interface.getClientProject());
177
+ });
178
+ _ownedProjectsCache = createCacheByTokenStore(async (tokenStore) => {
179
+ return await this._interface.listProjects(tokenStore);
180
+ });
150
181
  constructor(options) {
151
182
  if ("interface" in options) {
152
183
  this._interface = options.interface;
@@ -197,12 +228,7 @@ class _StackClientAppImpl {
197
228
  const app = this;
198
229
  const res = {
199
230
  ...this._userFromJson(json),
200
- get accessToken() {
201
- return AsyncResult.or(tokenStore.get(), null)?.accessToken ?? null;
202
- },
203
- get refreshToken() {
204
- return AsyncResult.or(tokenStore.get(), null)?.refreshToken ?? null;
205
- },
231
+ tokenStore,
206
232
  update(update) {
207
233
  return app._updateUser(update, tokenStore);
208
234
  },
@@ -225,7 +251,10 @@ class _StackClientAppImpl {
225
251
  clientMetadata: user.clientMetadata,
226
252
  };
227
253
  }
228
- _projectAdminFromJson(data) {
254
+ _projectAdminFromJson(data, adminInterface, onRefresh) {
255
+ if (data.id !== adminInterface.projectId) {
256
+ throw new Error(`The project ID of the provided project JSON (${data.id}) does not match the project ID of the app (${adminInterface.projectId})! This is a Stack bug.`);
257
+ }
229
258
  return {
230
259
  id: data.id,
231
260
  displayName: data.displayName,
@@ -235,13 +264,31 @@ class _StackClientAppImpl {
235
264
  isProductionMode: data.isProductionMode,
236
265
  evaluatedConfig: {
237
266
  id: data.evaluatedConfig.id,
267
+ credentialEnabled: data.evaluatedConfig.credentialEnabled,
238
268
  allowLocalhost: data.evaluatedConfig.allowLocalhost,
239
269
  oauthProviders: data.evaluatedConfig.oauthProviders,
240
270
  emailConfig: data.evaluatedConfig.emailConfig,
241
271
  domains: data.evaluatedConfig.domains,
242
272
  },
273
+ async update(update) {
274
+ await adminInterface.updateProject(update);
275
+ await onRefresh();
276
+ },
277
+ toJson() {
278
+ return data;
279
+ },
280
+ getProductionModeErrors() {
281
+ return getProductionModeErrors(this.toJson());
282
+ },
243
283
  };
244
284
  }
285
+ _createAdminInterface(forProjectId, tokenStore) {
286
+ return new StackAdminInterface({
287
+ baseUrl: this._interface.options.baseUrl,
288
+ projectId: forProjectId,
289
+ projectOwnerTokens: tokenStore,
290
+ });
291
+ }
245
292
  get projectId() {
246
293
  return this._interface.projectId;
247
294
  }
@@ -264,7 +311,7 @@ class _StackClientAppImpl {
264
311
  async redirectToForgotPassword() { return await this._redirectTo("forgotPassword"); }
265
312
  async redirectToHome() { return await this._redirectTo("home"); }
266
313
  async redirectToUserHome() { return await this._redirectTo("userHome"); }
267
- async redirectToOauthCallback() { return await this._redirectTo("oauthCallback"); }
314
+ async redirectToOAuthCallback() { return await this._redirectTo("oauthCallback"); }
268
315
  async sendForgotPasswordEmail(email) {
269
316
  const redirectUrl = constructRedirectUrl(this.urls.passwordReset);
270
317
  await this._interface.sendForgotPasswordEmail(email, redirectUrl);
@@ -281,7 +328,7 @@ class _StackClientAppImpl {
281
328
  async getUser(options) {
282
329
  this._ensurePersistentTokenStore();
283
330
  const tokenStore = getTokenStore(this._tokenStoreOptions);
284
- const userJson = await this._interface.currentUserCache.getOrWait(tokenStore);
331
+ const userJson = await this._currentUserCache.getOrWait([tokenStore], "never");
285
332
  if (userJson === null) {
286
333
  switch (options?.or) {
287
334
  case 'redirect': {
@@ -289,7 +336,7 @@ class _StackClientAppImpl {
289
336
  throw new Error("redirect should never return!");
290
337
  }
291
338
  case 'throw': {
292
- throw new Error("User is not signed in");
339
+ throw new Error("User is not signed in but getUser was called with { or: 'throw' }");
293
340
  }
294
341
  default: {
295
342
  return null;
@@ -302,15 +349,16 @@ class _StackClientAppImpl {
302
349
  this._ensurePersistentTokenStore();
303
350
  const router = useRouter();
304
351
  const tokenStore = getTokenStore(this._tokenStoreOptions);
305
- const userJson = useValueCache(this._interface.currentUserCache.getValueCache(tokenStore));
352
+ const userJson = useCache(this._currentUserCache, [tokenStore]);
306
353
  if (userJson === null) {
307
354
  switch (options?.or) {
308
355
  case 'redirect': {
309
356
  router.replace(this.urls.signIn);
310
- break;
357
+ suspend();
358
+ throw new Error("suspend should never return!");
311
359
  }
312
360
  case 'throw': {
313
- throw new Error("User is not signed in");
361
+ throw new Error("User is not signed in but useUser was called with { or: 'throw' }");
314
362
  }
315
363
  default: {
316
364
  return null;
@@ -322,16 +370,18 @@ class _StackClientAppImpl {
322
370
  onUserChange(callback) {
323
371
  this._ensurePersistentTokenStore();
324
372
  const tokenStore = getTokenStore(this._tokenStoreOptions);
325
- return this._interface.currentUserCache.getValueCache(tokenStore).onChange((userJson) => {
373
+ return this._currentUserCache.onChange([tokenStore], (userJson) => {
326
374
  callback(this._currentUserFromJson(userJson, tokenStore));
327
375
  });
328
376
  }
329
377
  async _updateUser(update, tokenStore) {
330
- return await this._interface.setClientUserCustomizableData(update, tokenStore);
378
+ const res = await this._interface.setClientUserCustomizableData(update, tokenStore);
379
+ await this._refreshUser(tokenStore);
380
+ return res;
331
381
  }
332
- async signInWithOauth(provider) {
382
+ async signInWithOAuth(provider) {
333
383
  this._ensurePersistentTokenStore();
334
- await signInWithOauth(this._interface, { provider, redirectUrl: this.urls.oauthCallback });
384
+ await signInWithOAuth(this._interface, { provider, redirectUrl: this.urls.oauthCallback });
335
385
  }
336
386
  async signInWithCredential(options) {
337
387
  if (!options.redirectUrl) {
@@ -349,10 +399,10 @@ class _StackClientAppImpl {
349
399
  const tokenStore = getTokenStore(this._tokenStoreOptions);
350
400
  return await signUpWithCredential(this._interface, tokenStore, options);
351
401
  }
352
- async callOauthCallback(options = {}) {
402
+ async callOAuthCallback(options = {}) {
353
403
  this._ensurePersistentTokenStore();
354
404
  const tokenStore = getTokenStore(this._tokenStoreOptions);
355
- await callOauthCallback(this._interface, tokenStore, options.redirectUrl);
405
+ await callOAuthCallback(this._interface, tokenStore, options.redirectUrl);
356
406
  }
357
407
  async _signOut(tokenStore, redirectUrl) {
358
408
  redirectUrl = constructRedirectUrl(redirectUrl);
@@ -369,25 +419,52 @@ class _StackClientAppImpl {
369
419
  return await neverResolve();
370
420
  }
371
421
  async getProject() {
372
- return await this._interface.clientProjectCache.getOrWait();
422
+ return await this._currentProjectCache.getOrWait([], "never");
373
423
  }
374
424
  useProject() {
375
- return useValueCache(this._interface.clientProjectCache);
425
+ return useCache(this._currentProjectCache, []);
376
426
  }
377
427
  onProjectChange(callback) {
378
- return this._interface.clientProjectCache.onChange(callback);
428
+ return this._currentProjectCache.onChange([], callback);
379
429
  }
380
430
  async listOwnedProjects() {
381
431
  this._ensureInternalProject();
382
432
  const tokenStore = getTokenStore(this._tokenStoreOptions);
383
- const json = await this._interface.listProjects(tokenStore);
384
- return json.map((j) => this._projectAdminFromJson(j));
433
+ const json = await this._ownedProjectsCache.getOrWait([tokenStore], "never");
434
+ return json.map((j) => this._projectAdminFromJson(j, this._createAdminInterface(j.id, tokenStore), () => this._refreshOwnedProjects(tokenStore)));
435
+ }
436
+ useOwnedProjects() {
437
+ this._ensureInternalProject();
438
+ const tokenStore = getTokenStore(this._tokenStoreOptions);
439
+ const json = useCache(this._ownedProjectsCache, [tokenStore]);
440
+ return json.map((j) => this._projectAdminFromJson(j, this._createAdminInterface(j.id, tokenStore), () => this._refreshOwnedProjects(tokenStore)));
441
+ }
442
+ onOwnedProjectsChange(callback) {
443
+ this._ensureInternalProject();
444
+ const tokenStore = getTokenStore(this._tokenStoreOptions);
445
+ return this._ownedProjectsCache.onChange([tokenStore], (projects) => {
446
+ callback(projects.map((j) => this._projectAdminFromJson(j, this._createAdminInterface(j.id, tokenStore), () => this._refreshOwnedProjects(tokenStore))));
447
+ });
385
448
  }
386
449
  async createProject(newProject) {
387
450
  this._ensureInternalProject();
388
451
  const tokenStore = getTokenStore(this._tokenStoreOptions);
389
452
  const json = await this._interface.createProject(newProject, tokenStore);
390
- return this._projectAdminFromJson(json);
453
+ const res = this._projectAdminFromJson(json, this._createAdminInterface(json.id, tokenStore), () => this._refreshOwnedProjects(tokenStore));
454
+ await this._refreshOwnedProjects(tokenStore);
455
+ return res;
456
+ }
457
+ async _refreshUser(tokenStore) {
458
+ await this._currentUserCache.refresh([tokenStore]);
459
+ }
460
+ async _refreshUsers() {
461
+ // nothing yet
462
+ }
463
+ async _refreshProject() {
464
+ await this._currentProjectCache.refresh([]);
465
+ }
466
+ async _refreshOwnedProjects(tokenStore) {
467
+ await this._ownedProjectsCache.refresh([tokenStore]);
391
468
  }
392
469
  static get [stackAppInternalsSymbol]() {
393
470
  return {
@@ -428,6 +505,14 @@ class _StackClientAppImpl {
428
505
  ;
429
506
  }
430
507
  class _StackServerAppImpl extends _StackClientAppImpl {
508
+ // TODO override the client user cache to use the server user cache, so we save some requests
509
+ _currentServerUserCache = createCacheByTokenStore(async (tokenStore) => {
510
+ const user = await this._interface.getServerUserByToken(tokenStore);
511
+ return Result.or(user, null);
512
+ });
513
+ _serverUsersCache = createCache(async () => {
514
+ return await this._interface.listUsers();
515
+ });
431
516
  constructor(options) {
432
517
  if ("interface" in options) {
433
518
  super({
@@ -457,15 +542,17 @@ class _StackServerAppImpl extends _StackClientAppImpl {
457
542
  ...this._userFromJson(json),
458
543
  serverMetadata: json.serverMetadata,
459
544
  async delete() {
460
- await app._interface.deleteServerUser(this.id);
545
+ const res = await app._interface.deleteServerUser(this.id);
546
+ await app._refreshUsers();
547
+ return res;
461
548
  },
462
549
  async update(update) {
463
- await app._interface.setServerUserCustomizableData(this.id, update);
550
+ const res = await app._interface.setServerUserCustomizableData(this.id, update);
551
+ await app._refreshUsers();
552
+ return res;
464
553
  },
465
554
  getClientUser() {
466
- return {
467
- ...app._userFromJson(json),
468
- };
555
+ return app._userFromJson(json);
469
556
  },
470
557
  toJson() {
471
558
  return app._serverUserToJson(this);
@@ -476,34 +563,25 @@ class _StackServerAppImpl extends _StackClientAppImpl {
476
563
  if (json === null)
477
564
  return null;
478
565
  const app = this;
566
+ const nonCurrentServerUser = this._serverUserFromJson(json);
479
567
  const res = {
480
- ...this._serverUserFromJson(json),
481
- get accessToken() {
482
- return AsyncResult.or(tokenStore.get(), null)?.accessToken ?? null;
568
+ ...nonCurrentServerUser,
569
+ tokenStore,
570
+ async delete() {
571
+ const res = await nonCurrentServerUser.delete();
572
+ await app._refreshUser(tokenStore);
573
+ return res;
483
574
  },
484
- get refreshToken() {
485
- return AsyncResult.or(tokenStore.get(), null)?.refreshToken ?? null;
575
+ async update(update) {
576
+ const res = await nonCurrentServerUser.update(update);
577
+ await app._refreshUser(tokenStore);
578
+ return res;
486
579
  },
487
580
  signOut(redirectUrl) {
488
581
  return app._signOut(tokenStore, redirectUrl);
489
582
  },
490
583
  getClientUser() {
491
- const serverUser = this;
492
- return {
493
- ...app._userFromJson(json),
494
- get accessToken() {
495
- return serverUser.accessToken;
496
- },
497
- get refreshToken() {
498
- return serverUser.refreshToken;
499
- },
500
- update(update) {
501
- return serverUser.update(update);
502
- },
503
- signOut(redirectUrl) {
504
- return serverUser.signOut(redirectUrl);
505
- },
506
- };
584
+ return app._currentUserFromJson(json, tokenStore);
507
585
  },
508
586
  };
509
587
  Object.freeze(res);
@@ -525,14 +603,13 @@ class _StackServerAppImpl extends _StackClientAppImpl {
525
603
  async getServerUser() {
526
604
  this._ensurePersistentTokenStore();
527
605
  const tokenStore = getTokenStore(this._tokenStoreOptions);
528
- const userJson = await this._interface.currentServerUserCache.getOrWait(tokenStore);
606
+ const userJson = await this._currentServerUserCache.getOrWait([tokenStore], "never");
529
607
  return this._currentServerUserFromJson(userJson, tokenStore);
530
608
  }
531
609
  useServerUser(options) {
532
610
  this._ensurePersistentTokenStore();
533
- const router = useRouter();
534
611
  const tokenStore = getTokenStore(this._tokenStoreOptions);
535
- const userJson = useValueCache(this._interface.currentServerUserCache.getValueCache(tokenStore));
612
+ const userJson = useCache(this._currentServerUserCache, [tokenStore]);
536
613
  if (options?.required && userJson === null) {
537
614
  use(this.redirectToSignIn());
538
615
  }
@@ -541,33 +618,138 @@ class _StackServerAppImpl extends _StackClientAppImpl {
541
618
  onServerUserChange(callback) {
542
619
  this._ensurePersistentTokenStore();
543
620
  const tokenStore = getTokenStore(this._tokenStoreOptions);
544
- return this._interface.currentServerUserCache.getValueCache(tokenStore).onChange((userJson) => {
621
+ return this._currentServerUserCache.onChange([tokenStore], (userJson) => {
545
622
  callback(this._currentServerUserFromJson(userJson, tokenStore));
546
623
  });
547
624
  }
625
+ async listServerUsers() {
626
+ const json = await this._serverUsersCache.getOrWait([], "never");
627
+ return json.map((j) => this._serverUserFromJson(j));
628
+ }
629
+ useServerUsers() {
630
+ const json = useCache(this._serverUsersCache, []);
631
+ return json.map((j) => this._serverUserFromJson(j));
632
+ }
633
+ onServerUsersChange(callback) {
634
+ return this._serverUsersCache.onChange([], (users) => {
635
+ callback(users.map((j) => this._serverUserFromJson(j)));
636
+ });
637
+ }
638
+ async _refreshUser(tokenStore) {
639
+ await Promise.all([
640
+ super._refreshUser(tokenStore),
641
+ this._currentServerUserCache.refresh([tokenStore]),
642
+ ]);
643
+ }
644
+ async _refreshUsers() {
645
+ await Promise.all([
646
+ super._refreshUsers(),
647
+ this._serverUsersCache.refresh([]),
648
+ ]);
649
+ }
548
650
  }
549
651
  class _StackAdminAppImpl extends _StackServerAppImpl {
652
+ _adminProjectCache = createCache(async () => {
653
+ return await this._interface.getProject();
654
+ });
655
+ _apiKeySetsCache = createCache(async () => {
656
+ return await this._interface.listApiKeySets();
657
+ });
550
658
  constructor(options) {
551
659
  super({
552
660
  interface: new StackAdminInterface({
553
661
  baseUrl: options.baseUrl ?? getDefaultBaseUrl(),
554
662
  projectId: options.projectId ?? getDefaultProjectId(),
555
- publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey(),
556
- secretServerKey: options.secretServerKey ?? getDefaultSecretServerKey(),
557
- superSecretAdminKey: options.superSecretAdminKey ?? getDefaultSuperSecretAdminKey(),
663
+ ..."projectOwnerTokens" in options ? {
664
+ projectOwnerTokens: options.projectOwnerTokens,
665
+ } : {
666
+ publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey(),
667
+ secretServerKey: options.secretServerKey ?? getDefaultSecretServerKey(),
668
+ superSecretAdminKey: options.superSecretAdminKey ?? getDefaultSuperSecretAdminKey(),
669
+ },
558
670
  }),
559
671
  tokenStore: options.tokenStore,
560
672
  urls: options.urls,
561
673
  });
562
674
  }
675
+ _createApiKeySetBaseFromJson(data) {
676
+ const app = this;
677
+ return {
678
+ id: data.id,
679
+ description: data.description,
680
+ expiresAt: new Date(data.expiresAtMillis),
681
+ manuallyRevokedAt: data.manuallyRevokedAtMillis ? new Date(data.manuallyRevokedAtMillis) : null,
682
+ createdAt: new Date(data.createdAtMillis),
683
+ isValid() {
684
+ return this.whyInvalid() === null;
685
+ },
686
+ whyInvalid() {
687
+ if (this.expiresAt.getTime() < Date.now())
688
+ return "expired";
689
+ if (this.manuallyRevokedAt)
690
+ return "manually-revoked";
691
+ return null;
692
+ },
693
+ async revoke() {
694
+ const res = await app._interface.revokeApiKeySetById(data.id);
695
+ await app._refreshApiKeySets();
696
+ return res;
697
+ }
698
+ };
699
+ }
700
+ _createApiKeySetFromJson(data) {
701
+ return {
702
+ ...this._createApiKeySetBaseFromJson(data),
703
+ publishableClientKey: data.publishableClientKey ? { lastFour: data.publishableClientKey.lastFour } : null,
704
+ secretServerKey: data.secretServerKey ? { lastFour: data.secretServerKey.lastFour } : null,
705
+ superSecretAdminKey: data.superSecretAdminKey ? { lastFour: data.superSecretAdminKey.lastFour } : null,
706
+ };
707
+ }
708
+ _createApiKeySetFirstViewFromJson(data) {
709
+ return {
710
+ ...this._createApiKeySetBaseFromJson(data),
711
+ publishableClientKey: data.publishableClientKey,
712
+ secretServerKey: data.secretServerKey,
713
+ superSecretAdminKey: data.superSecretAdminKey,
714
+ };
715
+ }
563
716
  async getProjectAdmin() {
564
- return this._projectAdminFromJson(await this._interface.projectCache.getOrWait());
717
+ return this._projectAdminFromJson(await this._adminProjectCache.getOrWait([], "never"), this._interface, () => this._refreshProject());
565
718
  }
566
719
  useProjectAdmin() {
567
- return this._projectAdminFromJson(useValueCache(this._interface.projectCache));
720
+ return this._projectAdminFromJson(useCache(this._adminProjectCache, []), this._interface, () => this._refreshProject());
568
721
  }
569
722
  onProjectAdminChange(callback) {
570
- return this._interface.projectCache.onChange((j) => callback(this._projectAdminFromJson(j)));
723
+ return this._adminProjectCache.onChange([], (project) => {
724
+ callback(this._projectAdminFromJson(project, this._interface, () => this._refreshProject()));
725
+ });
726
+ }
727
+ async listApiKeySets() {
728
+ const json = await this._apiKeySetsCache.getOrWait([], "never");
729
+ return json.map((j) => this._createApiKeySetFromJson(j));
730
+ }
731
+ useApiKeySets() {
732
+ const json = useCache(this._apiKeySetsCache, []);
733
+ return json.map((j) => this._createApiKeySetFromJson(j));
734
+ }
735
+ onApiKeySetsChange(callback) {
736
+ return this._apiKeySetsCache.onChange([], (apiKeySets) => {
737
+ callback(apiKeySets.map((j) => this._createApiKeySetFromJson(j)));
738
+ });
739
+ }
740
+ async createApiKeySet(options) {
741
+ const json = await this._interface.createApiKeySet(options);
742
+ await this._refreshApiKeySets();
743
+ return this._createApiKeySetFirstViewFromJson(json);
744
+ }
745
+ async _refreshProject() {
746
+ await Promise.all([
747
+ super._refreshProject(),
748
+ this._adminProjectCache.refresh([]),
749
+ ]);
750
+ }
751
+ async _refreshApiKeySets() {
752
+ await this._apiKeySetsCache.refresh([]);
571
753
  }
572
754
  }
573
755
  export const StackClientApp = _StackClientAppImpl;
@@ -4,3 +4,4 @@ export default function StackProvider({ children, app, }: {
4
4
  children: ReactNode;
5
5
  app: StackClientApp<true>;
6
6
  }): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=StackProvider.d.ts.map
@@ -7,3 +7,4 @@ export declare function StackProviderClient(props: {
7
7
  appJsonPromise: Promise<StackClientAppJson<true, string>>;
8
8
  children?: React.ReactNode;
9
9
  }): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=StackProviderClient.d.ts.map
@@ -1 +1,2 @@
1
1
  export declare function validateEmail(email: string): RegExpMatchArray | null;
2
+ //# sourceMappingURL=email.d.ts.map
@@ -1 +1,2 @@
1
1
  export declare function isClient(): boolean;
2
+ //# sourceMappingURL=next.d.ts.map
@@ -1 +1,2 @@
1
1
  export declare function suspend(): never;
2
+ //# sourceMappingURL=react.d.ts.map
@@ -22,3 +22,4 @@ declare function promiseToResult<T, E = unknown>(promise: Promise<T>): Promise<R
22
22
  declare function mapResult<T, U, E = unknown, P = unknown>(result: Result<T, E>, fn: (data: T) => U): Result<U, E>;
23
23
  declare function mapResult<T, U, E = unknown, P = unknown>(result: AsyncResult<T, E, P>, fn: (data: T) => U): AsyncResult<U, E, P>;
24
24
  export {};
25
+ //# sourceMappingURL=results.d.ts.map
@@ -1,3 +1,4 @@
1
1
  export type ReadonlyJson = null | boolean | number | string | readonly ReadonlyJson[] | {
2
2
  readonly [key: string]: ReadonlyJson;
3
3
  };
4
+ //# sourceMappingURL=types.d.ts.map
@@ -1,2 +1,3 @@
1
1
  export declare function autoRedirect(): void;
2
2
  export declare function constructRedirectUrl(redirectUrl: URL | string | undefined): string;
3
+ //# sourceMappingURL=url.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stackframe/stack",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "type": "module",
@@ -13,8 +13,8 @@
13
13
  "react-icons": "^5.0.1",
14
14
  "tailwindcss-scoped-preflight": "^2.1.0",
15
15
  "server-only": "^0.0.1",
16
- "@stackframe/stack-shared": "1.1.0",
17
- "@stackframe/stack-sc": "1.1.0"
16
+ "@stackframe/stack-sc": "1.2.0",
17
+ "@stackframe/stack-shared": "1.2.0"
18
18
  },
19
19
  "peerDependencies": {
20
20
  "next": "^14",
@@ -1 +0,0 @@
1
- export default function OauthCallback(): import("react/jsx-runtime").JSX.Element;
@@ -1 +0,0 @@
1
- {"version":3,"file":"OauthCallback.d.ts","sourceRoot":"","sources":["../../src/components/OauthCallback.tsx"],"names":[],"mappings":"AAOA,MAAM,CAAC,OAAO,UAAU,aAAa,4CAapC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"OauthButton.d.ts","sourceRoot":"","sources":["../../src/elements/OauthButton.tsx"],"names":[],"mappings":"AASA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAClC,QAAQ,EACR,IAAI,EACJ,WAAW,EACZ,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,2CAuGA"}
@@ -1,4 +0,0 @@
1
- export default function OauthGroup({ type, redirectUrl }: {
2
- type: 'signin' | 'signup';
3
- redirectUrl?: string;
4
- }): import("react/jsx-runtime").JSX.Element | null;