@stackframe/stack 2.4.4 → 2.4.7
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/card-frame.d.mts +1 -1
- package/dist/components/card-frame.d.ts +1 -1
- package/dist/components/user-avatar.js +19 -1
- package/dist/components/user-avatar.js.map +1 -1
- package/dist/components-core/button.js +1 -1
- package/dist/components-core/button.js.map +1 -1
- package/dist/components-core/index.d.mts +4 -4
- package/dist/components-core/index.d.ts +4 -4
- package/dist/components-core/loading-indicator.d.mts +4 -6
- package/dist/components-core/loading-indicator.d.ts +4 -6
- package/dist/components-core/loading-indicator.js +9 -6
- package/dist/components-core/loading-indicator.js.map +1 -1
- package/dist/components-core-joy/text.d.mts +2 -2
- package/dist/components-core-joy/text.d.ts +2 -2
- package/dist/components-page/oauth-callback.js +21 -6
- package/dist/components-page/oauth-callback.js.map +1 -1
- package/dist/components-page/stack-handler.js +8 -0
- package/dist/components-page/stack-handler.js.map +1 -1
- package/dist/esm/components/user-avatar.js +9 -1
- package/dist/esm/components/user-avatar.js.map +1 -1
- package/dist/esm/components-core/button.js +1 -1
- package/dist/esm/components-core/button.js.map +1 -1
- package/dist/esm/components-core/loading-indicator.js +9 -6
- package/dist/esm/components-core/loading-indicator.js.map +1 -1
- package/dist/esm/components-page/oauth-callback.js +21 -6
- package/dist/esm/components-page/oauth-callback.js.map +1 -1
- package/dist/esm/components-page/stack-handler.js +10 -2
- package/dist/esm/components-page/stack-handler.js.map +1 -1
- package/dist/esm/lib/stack-app.js +56 -71
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/lib/stack-app.d.mts +9 -3
- package/dist/lib/stack-app.d.ts +9 -3
- package/dist/lib/stack-app.js +55 -70
- package/dist/lib/stack-app.js.map +1 -1
- package/dist/providers/component-provider.d.mts +6 -6
- package/dist/providers/component-provider.d.ts +6 -6
- package/dist/providers/joy-provider.d.mts +2 -2
- package/dist/providers/joy-provider.d.ts +2 -2
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/oauth-callback.tsx"],"sourcesContent":["'use client';\n\nimport { useRef, useEffect, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport MessageCard from \"../components/message-card\";\n\nexport default function OAuthCallback () {\n const app = useStackApp();\n const called = useRef(false);\n const [error, setError] = useState<unknown>(null);\n\n useEffect(() => runAsynchronously(async () => {\n if (called.current) return;\n called.current = true;\n try {\n await app.callOAuthCallback();\n } catch (e: any) {\n setError(e);\n }\n }), []);\n\n return <MessageCard title='Redirecting...' fullPage>\n {error ? <div>\n <p>Something went wrong while processing the OAuth callback:</p>\n <pre>{JSON.stringify(error, null, 2)}</pre>\n <p>This is most likely an error in Stack. Please report it.</p>\n </div> : null}\n </MessageCard>;\n}\n"],"mappings":";;;AAEA,SAAS,QAAQ,WAAW,gBAAgB;AAC5C,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAClC,OAAO,iBAAiB;
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/oauth-callback.tsx"],"sourcesContent":["'use client';\n\nimport { useRef, useEffect, useState } from \"react\";\nimport { useStackApp } from \"..\";\nimport { runAsynchronously } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport MessageCard from \"../components/message-card\";\n\nexport default function OAuthCallback () {\n const app = useStackApp();\n const called = useRef(false);\n const [error, setError] = useState<unknown>(null);\n const [showRedirectLink, setShowRedirectLink] = useState(false);\n\n useEffect(() => runAsynchronously(async () => {\n if (called.current) return;\n called.current = true;\n let hasRedirected = false;\n try {\n hasRedirected = await app.callOAuthCallback();\n } catch (e: any) {\n setError(e);\n }\n if (!hasRedirected) {\n await app.redirectToSignIn();\n }\n }), []);\n\n useEffect(() => {\n setTimeout(() => setShowRedirectLink(true), 3000);\n }, []);\n\n return <MessageCard title='Redirecting...' fullPage>\n {showRedirectLink ? <p>If you are not redirected automatically, <a href={app.urls.home}>click here</a>.</p> : null}\n {error ? <div>\n <p>Something went wrong while processing the OAuth callback:</p>\n <pre>{JSON.stringify(error, null, 2)}</pre>\n <p>This is most likely an error in Stack. Please report it.</p>\n </div> : null}\n </MessageCard>;\n}\n"],"mappings":";;;AAEA,SAAS,QAAQ,WAAW,gBAAgB;AAC5C,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAClC,OAAO,iBAAiB;AA2BA,SAA4C,KAA5C;AAzBT,SAAR,gBAAkC;AACvC,QAAM,MAAM,YAAY;AACxB,QAAM,SAAS,OAAO,KAAK;AAC3B,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAkB,IAAI;AAChD,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAS,KAAK;AAE9D,YAAU,MAAM,kBAAkB,YAAY;AAC5C,QAAI,OAAO;AAAS;AACpB,WAAO,UAAU;AACjB,QAAI,gBAAgB;AACpB,QAAI;AACF,sBAAgB,MAAM,IAAI,kBAAkB;AAAA,IAC9C,SAAS,GAAQ;AACf,eAAS,CAAC;AAAA,IACZ;AACA,QAAI,CAAC,eAAe;AAClB,YAAM,IAAI,iBAAiB;AAAA,IAC7B;AAAA,EACF,CAAC,GAAG,CAAC,CAAC;AAEN,YAAU,MAAM;AACd,eAAW,MAAM,oBAAoB,IAAI,GAAG,GAAI;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,SAAO,qBAAC,eAAY,OAAM,kBAAiB,UAAQ,MAChD;AAAA,uBAAmB,qBAAC,OAAE;AAAA;AAAA,MAAyC,oBAAC,OAAE,MAAM,IAAI,KAAK,MAAM,wBAAU;AAAA,MAAI;AAAA,OAAC,IAAO;AAAA,IAC7G,QAAQ,qBAAC,SACR;AAAA,0BAAC,OAAE,uEAAyD;AAAA,MAC5D,oBAAC,SAAK,eAAK,UAAU,OAAO,MAAM,CAAC,GAAE;AAAA,MACrC,oBAAC,OAAE,sEAAwD;AAAA,OAC7D,IAAS;AAAA,KACX;AACF;","names":[]}
|
|
@@ -5,7 +5,7 @@ import { RedirectType, notFound, redirect } from "next/navigation";
|
|
|
5
5
|
import EmailVerification from "./email-verification";
|
|
6
6
|
import { PasswordReset } from "..";
|
|
7
7
|
import MessageCard from "../components/message-card";
|
|
8
|
-
import
|
|
8
|
+
import SignOut from "./sign-out";
|
|
9
9
|
import ForgotPassword from "./forgot-password";
|
|
10
10
|
import OAuthCallback from "./oauth-callback";
|
|
11
11
|
import AccountSettings from "./account-settings";
|
|
@@ -27,14 +27,22 @@ async function StackHandler({
|
|
|
27
27
|
}
|
|
28
28
|
redirect(url, RedirectType.replace);
|
|
29
29
|
}
|
|
30
|
+
async function redirectIfHasUser() {
|
|
31
|
+
const user = await app.getServerUser();
|
|
32
|
+
if (user) {
|
|
33
|
+
redirect(app.urls.afterSignIn);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
30
36
|
const path = stack.join("/");
|
|
31
37
|
switch (path) {
|
|
32
38
|
case "signin": {
|
|
33
39
|
redirectIfNotHandler("signIn");
|
|
40
|
+
await redirectIfHasUser();
|
|
34
41
|
return /* @__PURE__ */ jsx(SignIn, { fullPage: true });
|
|
35
42
|
}
|
|
36
43
|
case "signup": {
|
|
37
44
|
redirectIfNotHandler("signUp");
|
|
45
|
+
await redirectIfHasUser();
|
|
38
46
|
return /* @__PURE__ */ jsx(SignUp, { fullPage: true });
|
|
39
47
|
}
|
|
40
48
|
case "email-verification": {
|
|
@@ -51,7 +59,7 @@ async function StackHandler({
|
|
|
51
59
|
}
|
|
52
60
|
case "signout": {
|
|
53
61
|
redirectIfNotHandler("signOut");
|
|
54
|
-
return /* @__PURE__ */ jsx(
|
|
62
|
+
return /* @__PURE__ */ jsx(SignOut, {});
|
|
55
63
|
}
|
|
56
64
|
case "oauth-callback": {
|
|
57
65
|
redirectIfNotHandler("oauthCallback");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components-page/stack-handler.tsx"],"sourcesContent":["import SignUp from \"./sign-up\";\nimport SignIn from \"./sign-in\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport EmailVerification from \"./email-verification\";\nimport { PasswordReset, StackServerApp } from \"..\";\nimport MessageCard from \"../components/message-card\";\nimport { HandlerUrls } from \"../lib/stack-app\";\nimport
|
|
1
|
+
{"version":3,"sources":["../../../src/components-page/stack-handler.tsx"],"sourcesContent":["import SignUp from \"./sign-up\";\nimport SignIn from \"./sign-in\";\nimport { RedirectType, notFound, redirect } from 'next/navigation';\nimport EmailVerification from \"./email-verification\";\nimport { PasswordReset, StackServerApp } from \"..\";\nimport MessageCard from \"../components/message-card\";\nimport { HandlerUrls } from \"../lib/stack-app\";\nimport SignOut from \"./sign-out\";\nimport ForgotPassword from \"./forgot-password\";\nimport OAuthCallback from \"./oauth-callback\";\nimport AccountSettings from \"./account-settings\";\nimport MagicLinkCallback from \"./magic-link-callback\";\n\nexport default async function StackHandler<HasTokenStore extends boolean>({\n app,\n params: { stack } = {},\n searchParams = {},\n}: { \n app: StackServerApp<HasTokenStore>,\n params?: { stack?: string[] }, \n searchParams?: Record<string, string>,\n}) {\n if (!stack) {\n return (\n <MessageCard title=\"Invalid Stack Handler Setup\" fullPage>\n <p>Can't use Stack handler at this location. Make sure that the file is in a folder called [...stack].</p>\n </MessageCard>\n );\n }\n\n function redirectIfNotHandler(name: keyof HandlerUrls) {\n const url = app.urls[name];\n const handlerUrl = app.urls.handler;\n\n if (url.startsWith(handlerUrl)) {\n // don't redirect if the url is a handler url\n return;\n }\n\n redirect(url, RedirectType.replace);\n }\n\n async function redirectIfHasUser() {\n const user = await app.getServerUser();\n if (user) {\n redirect(app.urls.afterSignIn);\n }\n }\n\n const path = stack.join('/');\n switch (path) {\n case 'signin': {\n redirectIfNotHandler('signIn');\n await redirectIfHasUser();\n return <SignIn fullPage/>;\n }\n case 'signup': {\n redirectIfNotHandler('signUp');\n await redirectIfHasUser();\n return <SignUp fullPage/>;\n }\n case 'email-verification': {\n redirectIfNotHandler('emailVerification');\n return <EmailVerification searchParams={searchParams} fullPage/>;\n }\n case 'password-reset': {\n redirectIfNotHandler('passwordReset');\n return <PasswordReset searchParams={searchParams} fullPage />;\n }\n case 'forgot-password': {\n redirectIfNotHandler('forgotPassword');\n return <ForgotPassword fullPage />;\n }\n case 'signout': {\n redirectIfNotHandler('signOut');\n return <SignOut/>;\n }\n case 'oauth-callback': {\n redirectIfNotHandler('oauthCallback');\n return <OAuthCallback />;\n }\n case 'account-settings': {\n redirectIfNotHandler('accountSettings');\n return <AccountSettings fullPage />;\n }\n case 'magic-link-callback': {\n redirectIfNotHandler('magicLinkCallback');\n return <MagicLinkCallback searchParams={searchParams} fullPage />;\n }\n default: {\n return notFound();\n }\n }\n}\n"],"mappings":";AAAA,OAAO,YAAY;AACnB,OAAO,YAAY;AACnB,SAAS,cAAc,UAAU,gBAAgB;AACjD,OAAO,uBAAuB;AAC9B,SAAS,qBAAqC;AAC9C,OAAO,iBAAiB;AAExB,OAAO,aAAa;AACpB,OAAO,oBAAoB;AAC3B,OAAO,mBAAmB;AAC1B,OAAO,qBAAqB;AAC5B,OAAO,uBAAuB;AActB;AAZR,eAAO,aAAmE;AAAA,EACxE;AAAA,EACA,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EACrB,eAAe,CAAC;AAClB,GAIG;AACD,MAAI,CAAC,OAAO;AACV,WACE,oBAAC,eAAY,OAAM,+BAA8B,UAAQ,MACvD,8BAAC,OAAE,iHAAmG,GACxG;AAAA,EAEJ;AAEA,WAAS,qBAAqB,MAAyB;AACrD,UAAM,MAAM,IAAI,KAAK,IAAI;AACzB,UAAM,aAAa,IAAI,KAAK;AAE5B,QAAI,IAAI,WAAW,UAAU,GAAG;AAE9B;AAAA,IACF;AAEA,aAAS,KAAK,aAAa,OAAO;AAAA,EACpC;AAEA,iBAAe,oBAAoB;AACjC,UAAM,OAAO,MAAM,IAAI,cAAc;AACrC,QAAI,MAAM;AACR,eAAS,IAAI,KAAK,WAAW;AAAA,IAC/B;AAAA,EACF;AAEA,QAAM,OAAO,MAAM,KAAK,GAAG;AAC3B,UAAQ,MAAM;AAAA,IACZ,KAAK,UAAU;AACb,2BAAqB,QAAQ;AAC7B,YAAM,kBAAkB;AACxB,aAAO,oBAAC,UAAO,UAAQ;AAAA,IACzB;AAAA,IACA,KAAK,UAAU;AACb,2BAAqB,QAAQ;AAC7B,YAAM,kBAAkB;AACxB,aAAO,oBAAC,UAAO,UAAQ;AAAA,IACzB;AAAA,IACA,KAAK,sBAAsB;AACzB,2BAAqB,mBAAmB;AACxC,aAAO,oBAAC,qBAAkB,cAA4B,UAAQ;AAAA,IAChE;AAAA,IACA,KAAK,kBAAkB;AACrB,2BAAqB,eAAe;AACpC,aAAO,oBAAC,iBAAc,cAA4B,UAAQ,MAAC;AAAA,IAC7D;AAAA,IACA,KAAK,mBAAmB;AACtB,2BAAqB,gBAAgB;AACrC,aAAO,oBAAC,kBAAe,UAAQ,MAAC;AAAA,IAClC;AAAA,IACA,KAAK,WAAW;AACd,2BAAqB,SAAS;AAC9B,aAAO,oBAAC,WAAO;AAAA,IACjB;AAAA,IACA,KAAK,kBAAkB;AACrB,2BAAqB,eAAe;AACpC,aAAO,oBAAC,iBAAc;AAAA,IACxB;AAAA,IACA,KAAK,oBAAoB;AACvB,2BAAqB,iBAAiB;AACtC,aAAO,oBAAC,mBAAgB,UAAQ,MAAC;AAAA,IACnC;AAAA,IACA,KAAK,uBAAuB;AAC1B,2BAAqB,mBAAmB;AACxC,aAAO,oBAAC,qBAAkB,cAA4B,UAAQ,MAAC;AAAA,IACjE;AAAA,IACA,SAAS;AACP,aAAO,SAAS;AAAA,IAClB;AAAA,EACF;AACF;","names":[]}
|
|
@@ -13,9 +13,10 @@ import { callOAuthCallback, signInWithOAuth } from "./auth";
|
|
|
13
13
|
import * as NextNavigation from "next/navigation";
|
|
14
14
|
import { constructRedirectUrl } from "../utils/url";
|
|
15
15
|
import { filterUndefined, omit } from "@stackframe/stack-shared/dist/utils/objects";
|
|
16
|
-
import {
|
|
16
|
+
import { resolved, runAsynchronously, wait } from "@stackframe/stack-shared/dist/utils/promises";
|
|
17
17
|
import { AsyncCache } from "@stackframe/stack-shared/dist/utils/caches";
|
|
18
18
|
import { suspend } from "@stackframe/stack-shared/dist/utils/react";
|
|
19
|
+
var clientVersion = "js @stackframe/stack@2.4.7";
|
|
19
20
|
function permissionDefinitionScopeToType(scope) {
|
|
20
21
|
return { "any-team": "team", "specific-team": "team", "global": "global" }[scope.type];
|
|
21
22
|
}
|
|
@@ -40,16 +41,16 @@ function getUrls(partial) {
|
|
|
40
41
|
};
|
|
41
42
|
}
|
|
42
43
|
function getDefaultProjectId() {
|
|
43
|
-
return process.env.NEXT_PUBLIC_STACK_PROJECT_ID || throwErr("Welcome to Stack! It seems that you haven't provided a project ID. Please create a project on the Stack dashboard at https://app.stack-auth.com and put it in the NEXT_PUBLIC_STACK_PROJECT_ID environment variable.");
|
|
44
|
+
return process.env.NEXT_PUBLIC_STACK_PROJECT_ID || throwErr(new Error("Welcome to Stack! It seems that you haven't provided a project ID. Please create a project on the Stack dashboard at https://app.stack-auth.com and put it in the NEXT_PUBLIC_STACK_PROJECT_ID environment variable."));
|
|
44
45
|
}
|
|
45
46
|
function getDefaultPublishableClientKey() {
|
|
46
|
-
return process.env.NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY || throwErr("Welcome to Stack! It seems that you haven't provided a publishable client key. Please create an API key for your project on the Stack dashboard at https://app.stack-auth.com and copy your publishable client key into the NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY environment variable.");
|
|
47
|
+
return process.env.NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY || throwErr(new Error("Welcome to Stack! It seems that you haven't provided a publishable client key. Please create an API key for your project on the Stack dashboard at https://app.stack-auth.com and copy your publishable client key into the NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY environment variable."));
|
|
47
48
|
}
|
|
48
49
|
function getDefaultSecretServerKey() {
|
|
49
|
-
return process.env.STACK_SECRET_SERVER_KEY || throwErr("No secret server key provided. Please copy your key from the Stack dashboard and put your it in the STACK_SECRET_SERVER_KEY environment variable.");
|
|
50
|
+
return process.env.STACK_SECRET_SERVER_KEY || throwErr(new Error("No secret server key provided. Please copy your key from the Stack dashboard and put your it in the STACK_SECRET_SERVER_KEY environment variable."));
|
|
50
51
|
}
|
|
51
52
|
function getDefaultSuperSecretAdminKey() {
|
|
52
|
-
return process.env.STACK_SUPER_SECRET_ADMIN_KEY || throwErr("No super secret admin key provided. Please copy your key from the Stack dashboard and put it in the STACK_SUPER_SECRET_ADMIN_KEY environment variable.");
|
|
53
|
+
return process.env.STACK_SUPER_SECRET_ADMIN_KEY || throwErr(new Error("No super secret admin key provided. Please copy your key from the Stack dashboard and put it in the STACK_SUPER_SECRET_ADMIN_KEY environment variable."));
|
|
53
54
|
}
|
|
54
55
|
function getDefaultBaseUrl() {
|
|
55
56
|
return process.env.NEXT_PUBLIC_STACK_URL || defaultBaseUrl;
|
|
@@ -195,6 +196,7 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
195
196
|
this._interface = new StackClientInterface({
|
|
196
197
|
baseUrl: options.baseUrl ?? getDefaultBaseUrl(),
|
|
197
198
|
projectId: options.projectId ?? getDefaultProjectId(),
|
|
199
|
+
clientVersion,
|
|
198
200
|
publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey()
|
|
199
201
|
});
|
|
200
202
|
}
|
|
@@ -262,6 +264,12 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
262
264
|
hasPassword: json.hasPassword,
|
|
263
265
|
authWithEmail: json.authWithEmail,
|
|
264
266
|
oauthProviders: json.oauthProviders,
|
|
267
|
+
async getSelectedTeam() {
|
|
268
|
+
return await this.getTeam(json.selectedTeamId || "");
|
|
269
|
+
},
|
|
270
|
+
useSelectedTeam() {
|
|
271
|
+
return this.useTeam(json.selectedTeamId || "");
|
|
272
|
+
},
|
|
265
273
|
async getTeam(teamId) {
|
|
266
274
|
const teams = await this.listTeams();
|
|
267
275
|
return teams.find((t) => t.id === teamId) ?? null;
|
|
@@ -308,8 +316,7 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
308
316
|
return permissions.find((p) => p.id === permissionId) ?? null;
|
|
309
317
|
},
|
|
310
318
|
async hasPermission(scope, permissionId) {
|
|
311
|
-
|
|
312
|
-
return permissions.some((p) => p.id === permissionId);
|
|
319
|
+
return await this.getPermission(scope, permissionId) !== null;
|
|
313
320
|
},
|
|
314
321
|
toJson() {
|
|
315
322
|
return json;
|
|
@@ -332,6 +339,9 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
332
339
|
const currentUser = {
|
|
333
340
|
...this._userFromJson(json),
|
|
334
341
|
tokenStore,
|
|
342
|
+
async updateSelectedTeam(team) {
|
|
343
|
+
await app._updateUser({ selectedTeamId: team?.id ?? null }, tokenStore);
|
|
344
|
+
},
|
|
335
345
|
update(update) {
|
|
336
346
|
return app._updateUser(update, tokenStore);
|
|
337
347
|
},
|
|
@@ -368,22 +378,6 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
368
378
|
return currentUser;
|
|
369
379
|
}
|
|
370
380
|
}
|
|
371
|
-
_userToJson(user) {
|
|
372
|
-
return {
|
|
373
|
-
projectId: user.projectId,
|
|
374
|
-
id: user.id,
|
|
375
|
-
displayName: user.displayName,
|
|
376
|
-
primaryEmail: user.primaryEmail,
|
|
377
|
-
primaryEmailVerified: user.primaryEmailVerified,
|
|
378
|
-
profileImageUrl: user.profileImageUrl,
|
|
379
|
-
signedUpAtMillis: user.signedUpAt.getTime(),
|
|
380
|
-
clientMetadata: user.clientMetadata,
|
|
381
|
-
authMethod: user.authMethod,
|
|
382
|
-
hasPassword: user.hasPassword,
|
|
383
|
-
authWithEmail: user.authWithEmail,
|
|
384
|
-
oauthProviders: user.oauthProviders
|
|
385
|
-
};
|
|
386
|
-
}
|
|
387
381
|
_projectAdminFromJson(data, adminInterface, onRefresh) {
|
|
388
382
|
if (data.id !== adminInterface.projectId) {
|
|
389
383
|
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.`);
|
|
@@ -421,6 +415,7 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
421
415
|
return new StackAdminInterface({
|
|
422
416
|
baseUrl: this._interface.options.baseUrl,
|
|
423
417
|
projectId: forProjectId,
|
|
418
|
+
clientVersion,
|
|
424
419
|
projectOwnerTokens: tokenStore
|
|
425
420
|
});
|
|
426
421
|
}
|
|
@@ -430,11 +425,16 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
430
425
|
get urls() {
|
|
431
426
|
return getUrls(this._urlOptions);
|
|
432
427
|
}
|
|
433
|
-
async _redirectTo(handlerName) {
|
|
434
|
-
|
|
428
|
+
async _redirectTo(handlerName, options) {
|
|
429
|
+
const url = this.urls[handlerName];
|
|
430
|
+
if (!url) {
|
|
435
431
|
throw new Error(`No URL for handler name ${handlerName}`);
|
|
436
432
|
}
|
|
437
|
-
|
|
433
|
+
if (options?.replace) {
|
|
434
|
+
window.location.replace(url);
|
|
435
|
+
} else {
|
|
436
|
+
window.location.assign(url);
|
|
437
|
+
}
|
|
438
438
|
return await wait(2e3);
|
|
439
439
|
}
|
|
440
440
|
async redirectToSignIn() {
|
|
@@ -561,7 +561,7 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
561
561
|
const tokenStore = getTokenStore(this._tokenStoreOptions);
|
|
562
562
|
const errorCode = await this._interface.signInWithCredential(options.email, options.password, tokenStore);
|
|
563
563
|
if (!errorCode) {
|
|
564
|
-
|
|
564
|
+
await this.redirectToAfterSignIn({ replace: true });
|
|
565
565
|
}
|
|
566
566
|
return errorCode;
|
|
567
567
|
}
|
|
@@ -576,7 +576,7 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
576
576
|
tokenStore
|
|
577
577
|
);
|
|
578
578
|
if (!errorCode) {
|
|
579
|
-
|
|
579
|
+
await this.redirectToAfterSignUp({ replace: true });
|
|
580
580
|
}
|
|
581
581
|
return errorCode;
|
|
582
582
|
}
|
|
@@ -588,11 +588,10 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
588
588
|
return result;
|
|
589
589
|
}
|
|
590
590
|
if (result.newUser) {
|
|
591
|
-
|
|
591
|
+
await this.redirectToAfterSignUp({ replace: true });
|
|
592
592
|
} else {
|
|
593
|
-
|
|
593
|
+
await this.redirectToAfterSignIn({ replace: true });
|
|
594
594
|
}
|
|
595
|
-
await neverResolve();
|
|
596
595
|
}
|
|
597
596
|
async callOAuthCallback() {
|
|
598
597
|
this._ensurePersistentTokenStore();
|
|
@@ -600,16 +599,18 @@ var _StackClientAppImpl = class __StackClientAppImpl {
|
|
|
600
599
|
const result = await callOAuthCallback(this._interface, tokenStore, this.urls.oauthCallback);
|
|
601
600
|
if (result) {
|
|
602
601
|
if (result.newUser) {
|
|
603
|
-
|
|
602
|
+
await this.redirectToAfterSignUp({ replace: true });
|
|
603
|
+
return true;
|
|
604
604
|
} else {
|
|
605
|
-
|
|
605
|
+
await this.redirectToAfterSignIn({ replace: true });
|
|
606
|
+
return true;
|
|
606
607
|
}
|
|
607
608
|
}
|
|
608
|
-
|
|
609
|
+
return false;
|
|
609
610
|
}
|
|
610
611
|
async _signOut(tokenStore) {
|
|
611
612
|
await this._interface.signOut(tokenStore);
|
|
612
|
-
|
|
613
|
+
await this.redirectToAfterSignOut();
|
|
613
614
|
}
|
|
614
615
|
async _sendVerificationEmail(tokenStore) {
|
|
615
616
|
const emailVerificationRedirectUrl = constructRedirectUrl(this.urls.emailVerification);
|
|
@@ -755,24 +756,21 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
|
|
|
755
756
|
return await this._interface.listTeamMemberPermissions({ teamId, userId, type, direct });
|
|
756
757
|
});
|
|
757
758
|
constructor(options) {
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
urls: options.urls ?? {}
|
|
774
|
-
});
|
|
775
|
-
}
|
|
759
|
+
super("interface" in options ? {
|
|
760
|
+
interface: options.interface,
|
|
761
|
+
tokenStore: options.tokenStore,
|
|
762
|
+
urls: options.urls
|
|
763
|
+
} : {
|
|
764
|
+
interface: new StackServerInterface({
|
|
765
|
+
baseUrl: options.baseUrl ?? getDefaultBaseUrl(),
|
|
766
|
+
projectId: options.projectId ?? getDefaultProjectId(),
|
|
767
|
+
clientVersion,
|
|
768
|
+
publishableClientKey: options.publishableClientKey ?? getDefaultPublishableClientKey(),
|
|
769
|
+
secretServerKey: options.secretServerKey ?? getDefaultSecretServerKey()
|
|
770
|
+
}),
|
|
771
|
+
tokenStore: options.tokenStore,
|
|
772
|
+
urls: options.urls ?? {}
|
|
773
|
+
});
|
|
776
774
|
}
|
|
777
775
|
_serverUserFromJson(json) {
|
|
778
776
|
if (json === null)
|
|
@@ -856,7 +854,7 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
|
|
|
856
854
|
return permissions.some((p) => p.id === permissionId);
|
|
857
855
|
},
|
|
858
856
|
toJson() {
|
|
859
|
-
return
|
|
857
|
+
return json;
|
|
860
858
|
}
|
|
861
859
|
};
|
|
862
860
|
}
|
|
@@ -873,6 +871,9 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
|
|
|
873
871
|
await app._refreshUser(tokenStore);
|
|
874
872
|
return res;
|
|
875
873
|
},
|
|
874
|
+
async updateSelectedTeam(team) {
|
|
875
|
+
await this.update({ selectedTeamId: team?.id ?? null });
|
|
876
|
+
},
|
|
876
877
|
async update(update) {
|
|
877
878
|
const res = await nonCurrentServerUser.update(update);
|
|
878
879
|
await app._refreshUser(tokenStore);
|
|
@@ -928,23 +929,6 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
|
|
|
928
929
|
}
|
|
929
930
|
};
|
|
930
931
|
}
|
|
931
|
-
_serverUserToJson(user) {
|
|
932
|
-
return {
|
|
933
|
-
projectId: user.projectId,
|
|
934
|
-
id: user.id,
|
|
935
|
-
displayName: user.displayName,
|
|
936
|
-
primaryEmail: user.primaryEmail,
|
|
937
|
-
primaryEmailVerified: user.primaryEmailVerified,
|
|
938
|
-
profileImageUrl: user.profileImageUrl,
|
|
939
|
-
signedUpAtMillis: user.signedUpAt.getTime(),
|
|
940
|
-
clientMetadata: user.clientMetadata,
|
|
941
|
-
serverMetadata: user.serverMetadata,
|
|
942
|
-
authMethod: user.authMethod,
|
|
943
|
-
hasPassword: user.hasPassword,
|
|
944
|
-
authWithEmail: user.authWithEmail,
|
|
945
|
-
oauthProviders: user.oauthProviders
|
|
946
|
-
};
|
|
947
|
-
}
|
|
948
932
|
_serverTeamFromJson(json) {
|
|
949
933
|
const app = this;
|
|
950
934
|
return {
|
|
@@ -1105,6 +1089,7 @@ var _StackAdminAppImpl = class extends _StackServerAppImpl {
|
|
|
1105
1089
|
interface: new StackAdminInterface({
|
|
1106
1090
|
baseUrl: options.baseUrl ?? getDefaultBaseUrl(),
|
|
1107
1091
|
projectId: options.projectId ?? getDefaultProjectId(),
|
|
1092
|
+
clientVersion,
|
|
1108
1093
|
..."projectOwnerTokens" in options ? {
|
|
1109
1094
|
projectOwnerTokens: options.projectOwnerTokens
|
|
1110
1095
|
} : {
|