@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.
- package/dist/components/EmailVerification.d.ts +1 -0
- package/dist/components/ForgotPassword.d.ts +1 -0
- package/dist/components/OAuthCallback.d.ts +2 -0
- package/dist/components/OAuthCallback.d.ts.map +1 -0
- package/dist/components/{OauthCallback.js → OAuthCallback.js} +2 -2
- package/dist/components/PasswordReset.d.ts +1 -0
- package/dist/components/PasswordReset.d.ts.map +1 -1
- package/dist/components/PasswordReset.js +5 -5
- package/dist/components/SignIn.d.ts +1 -0
- package/dist/components/SignIn.d.ts.map +1 -1
- package/dist/components/SignIn.js +5 -3
- package/dist/components/SignOut.d.ts +1 -0
- package/dist/components/SignUp.d.ts +1 -0
- package/dist/components/SignUp.d.ts.map +1 -1
- package/dist/components/SignUp.js +4 -3
- package/dist/components/StackHandler.d.ts +1 -0
- package/dist/components/StackHandler.js +2 -2
- package/dist/elements/Button.d.ts +1 -0
- package/dist/elements/CardFrame.d.ts +1 -0
- package/dist/elements/CardHeader.d.ts +1 -0
- package/dist/elements/CredentialSignIn.d.ts +1 -0
- package/dist/elements/CredentialSignUp.d.ts +1 -0
- package/dist/elements/DividerWithText.d.ts +1 -0
- package/dist/elements/ForgotPassword.d.ts +1 -0
- package/dist/elements/FormWarning.d.ts +1 -0
- package/dist/elements/MessageCard.d.ts +1 -0
- package/dist/elements/{OauthButton.d.ts → OAuthButton.d.ts} +2 -1
- package/dist/elements/OAuthButton.d.ts.map +1 -0
- package/dist/elements/{OauthButton.js → OAuthButton.js} +2 -2
- package/dist/elements/OAuthGroup.d.ts +5 -0
- package/dist/elements/OAuthGroup.d.ts.map +1 -0
- package/dist/elements/OAuthGroup.js +8 -0
- package/dist/elements/PasswordField.d.ts +1 -0
- package/dist/elements/PasswordResetInner.d.ts +1 -0
- package/dist/elements/RedirectMessageCard.d.ts +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/lib/auth.d.ts +3 -2
- package/dist/lib/auth.js +8 -8
- package/dist/lib/cookie.d.ts +1 -0
- package/dist/lib/hooks.d.ts +1 -0
- package/dist/lib/stack-app.d.ts +69 -34
- package/dist/lib/stack-app.d.ts.map +1 -1
- package/dist/lib/stack-app.js +252 -70
- package/dist/providers/StackProvider.d.ts +1 -0
- package/dist/providers/StackProviderClient.d.ts +1 -0
- package/dist/utils/email.d.ts +1 -0
- package/dist/utils/next.d.ts +1 -0
- package/dist/utils/react.d.ts +1 -0
- package/dist/utils/results.d.ts +1 -0
- package/dist/utils/types.d.ts +1 -0
- package/dist/utils/url.d.ts +1 -0
- package/package.json +3 -3
- package/dist/components/OauthCallback.d.ts +0 -1
- package/dist/components/OauthCallback.d.ts.map +0 -1
- package/dist/elements/OauthButton.d.ts.map +0 -1
- package/dist/elements/OauthGroup.d.ts +0 -4
- package/dist/elements/OauthGroup.d.ts.map +0 -1
- package/dist/elements/OauthGroup.js +0 -11
- package/dist/lib/cookie-server.d.ts +0 -2
- package/dist/lib/cookie-server.d.ts.map +0 -1
- 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":"AACA,OAAO,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,cAAc,EAAmE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"stack-app.d.ts","sourceRoot":"","sources":["../../src/lib/stack-app.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/stack-app.js
CHANGED
|
@@ -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 {
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
|
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.
|
|
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 =
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
378
|
+
const res = await this._interface.setClientUserCustomizableData(update, tokenStore);
|
|
379
|
+
await this._refreshUser(tokenStore);
|
|
380
|
+
return res;
|
|
331
381
|
}
|
|
332
|
-
async
|
|
382
|
+
async signInWithOAuth(provider) {
|
|
333
383
|
this._ensurePersistentTokenStore();
|
|
334
|
-
await
|
|
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
|
|
402
|
+
async callOAuthCallback(options = {}) {
|
|
353
403
|
this._ensurePersistentTokenStore();
|
|
354
404
|
const tokenStore = getTokenStore(this._tokenStoreOptions);
|
|
355
|
-
await
|
|
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.
|
|
422
|
+
return await this._currentProjectCache.getOrWait([], "never");
|
|
373
423
|
}
|
|
374
424
|
useProject() {
|
|
375
|
-
return
|
|
425
|
+
return useCache(this._currentProjectCache, []);
|
|
376
426
|
}
|
|
377
427
|
onProjectChange(callback) {
|
|
378
|
-
return this.
|
|
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.
|
|
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
|
-
|
|
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
|
-
...
|
|
481
|
-
|
|
482
|
-
|
|
568
|
+
...nonCurrentServerUser,
|
|
569
|
+
tokenStore,
|
|
570
|
+
async delete() {
|
|
571
|
+
const res = await nonCurrentServerUser.delete();
|
|
572
|
+
await app._refreshUser(tokenStore);
|
|
573
|
+
return res;
|
|
483
574
|
},
|
|
484
|
-
|
|
485
|
-
|
|
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
|
-
|
|
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.
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
556
|
-
|
|
557
|
-
|
|
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.
|
|
717
|
+
return this._projectAdminFromJson(await this._adminProjectCache.getOrWait([], "never"), this._interface, () => this._refreshProject());
|
|
565
718
|
}
|
|
566
719
|
useProjectAdmin() {
|
|
567
|
-
return this._projectAdminFromJson(
|
|
720
|
+
return this._projectAdminFromJson(useCache(this._adminProjectCache, []), this._interface, () => this._refreshProject());
|
|
568
721
|
}
|
|
569
722
|
onProjectAdminChange(callback) {
|
|
570
|
-
return this.
|
|
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;
|
package/dist/utils/email.d.ts
CHANGED
package/dist/utils/next.d.ts
CHANGED
package/dist/utils/react.d.ts
CHANGED
package/dist/utils/results.d.ts
CHANGED
|
@@ -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
|
package/dist/utils/types.d.ts
CHANGED
package/dist/utils/url.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stackframe/stack",
|
|
3
|
-
"version": "1.
|
|
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-
|
|
17
|
-
"@stackframe/stack-
|
|
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"}
|