@stackframe/stack 2.4.24 → 2.4.26
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/CHANGELOG.md +18 -0
- package/dist/components/selected-team-switcher.d.mts +8 -0
- package/dist/components/selected-team-switcher.d.ts +8 -0
- package/dist/components/{team-switcher.js → selected-team-switcher.js} +7 -7
- package/dist/components/selected-team-switcher.js.map +1 -0
- package/dist/components-core/index.d.mts +4 -4
- package/dist/components-core/index.d.ts +4 -4
- package/dist/components-page/oauth-callback.js +1 -2
- package/dist/components-page/oauth-callback.js.map +1 -1
- package/dist/esm/components/{team-switcher.js → selected-team-switcher.js} +4 -4
- package/dist/esm/components/selected-team-switcher.js.map +1 -0
- package/dist/esm/components-page/oauth-callback.js +1 -2
- package/dist/esm/components-page/oauth-callback.js.map +1 -1
- package/dist/esm/global.d.js +1 -0
- package/dist/esm/global.d.js.map +1 -0
- package/dist/esm/index.js +22 -18
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/auth.js +1 -2
- package/dist/esm/lib/auth.js.map +1 -1
- package/dist/esm/lib/cookie.js +2 -2
- package/dist/esm/lib/cookie.js.map +1 -1
- package/dist/esm/lib/stack-app.js +27 -27
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/esm/providers/styled-components-registry.js +1 -2
- package/dist/esm/providers/styled-components-registry.js.map +1 -1
- package/dist/esm/utils/email.js +1 -2
- package/dist/esm/utils/email.js.map +1 -1
- package/dist/global.d.d.mts +2 -0
- package/dist/global.d.d.ts +2 -0
- package/dist/global.d.js +2 -0
- package/dist/global.d.js.map +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/auth.js +1 -2
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/cookie.js +2 -2
- package/dist/lib/cookie.js.map +1 -1
- package/dist/lib/stack-app.js +25 -25
- 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/styled-components-registry.js +1 -2
- package/dist/providers/styled-components-registry.js.map +1 -1
- package/dist/utils/email.js +1 -2
- package/dist/utils/email.js.map +1 -1
- package/package.json +7 -5
- package/dist/components/team-switcher.d.mts +0 -8
- package/dist/components/team-switcher.d.ts +0 -8
- package/dist/components/team-switcher.js.map +0 -1
- package/dist/esm/components/team-switcher.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @stackframe/stack
|
|
2
2
|
|
|
3
|
+
## 2.4.26
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Improve docs
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @stackframe/stack-shared@2.4.26
|
|
10
|
+
- @stackframe/stack-sc@2.4.26
|
|
11
|
+
|
|
12
|
+
## 2.4.25
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Docs update
|
|
17
|
+
- Updated dependencies
|
|
18
|
+
- @stackframe/stack-shared@2.4.25
|
|
19
|
+
- @stackframe/stack-sc@2.4.25
|
|
20
|
+
|
|
3
21
|
## 2.4.24
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type SelectedTeamSwitcherProps = {
|
|
4
|
+
projectUrlMap?: (projectId: string) => string;
|
|
5
|
+
};
|
|
6
|
+
declare function SelectedTeamSwitcher(props: SelectedTeamSwitcherProps): react_jsx_runtime.JSX.Element;
|
|
7
|
+
|
|
8
|
+
export { SelectedTeamSwitcher as default };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
type SelectedTeamSwitcherProps = {
|
|
4
|
+
projectUrlMap?: (projectId: string) => string;
|
|
5
|
+
};
|
|
6
|
+
declare function SelectedTeamSwitcher(props: SelectedTeamSwitcherProps): react_jsx_runtime.JSX.Element;
|
|
7
|
+
|
|
8
|
+
export { SelectedTeamSwitcher as default };
|
|
@@ -19,12 +19,12 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
19
19
|
};
|
|
20
20
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
21
|
|
|
22
|
-
// src/components/team-switcher.tsx
|
|
23
|
-
var
|
|
24
|
-
__export(
|
|
25
|
-
default: () =>
|
|
22
|
+
// src/components/selected-team-switcher.tsx
|
|
23
|
+
var selected_team_switcher_exports = {};
|
|
24
|
+
__export(selected_team_switcher_exports, {
|
|
25
|
+
default: () => SelectedTeamSwitcher
|
|
26
26
|
});
|
|
27
|
-
module.exports = __toCommonJS(
|
|
27
|
+
module.exports = __toCommonJS(selected_team_switcher_exports);
|
|
28
28
|
var import__ = require("..");
|
|
29
29
|
var import_promises = require("@stackframe/stack-shared/dist/utils/promises");
|
|
30
30
|
var import_lucide_react = require("lucide-react");
|
|
@@ -34,7 +34,7 @@ var import_jsx_runtime = require("react/jsx-runtime");
|
|
|
34
34
|
function TeamIcon(props) {
|
|
35
35
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", width: "1.5rem", height: "1.5rem", marginRight: "0.5rem", borderRadius: "0.25rem", backgroundColor: "rgb(228 228 231)" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import__.Text, { style: { color: "black", fontWeight: 400 }, children: props.displayName.slice(0, 1).toUpperCase() }) });
|
|
36
36
|
}
|
|
37
|
-
function
|
|
37
|
+
function SelectedTeamSwitcher(props) {
|
|
38
38
|
const user = (0, import__.useUser)();
|
|
39
39
|
const router = (0, import_navigation.useRouter)();
|
|
40
40
|
const selectedTeam = user?.selectedTeam;
|
|
@@ -72,4 +72,4 @@ function TeamSwitcher(props) {
|
|
|
72
72
|
] })
|
|
73
73
|
] });
|
|
74
74
|
}
|
|
75
|
-
//# sourceMappingURL=team-switcher.js.map
|
|
75
|
+
//# sourceMappingURL=selected-team-switcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/selected-team-switcher.tsx"],"sourcesContent":["'use client';\n\nimport {\n useUser,\n Text,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuLabel,\n useStackApp,\n} from \"..\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Check } from \"lucide-react\";\nimport { useRouter } from \"next/navigation\";\nimport { useMemo } from \"react\";\n\ntype SelectedTeamSwitcherProps = {\n projectUrlMap?: (projectId: string) => string,\n};\n\nfunction TeamIcon(props: { displayName: string }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '1.5rem', height: '1.5rem', marginRight: '0.5rem', borderRadius: '0.25rem', backgroundColor: 'rgb(228 228 231)' }}>\n <Text style={{ color: 'black', fontWeight: 400 }}>{props.displayName.slice(0, 1).toUpperCase()}</Text>\n </div>\n );\n}\n\nexport default function SelectedTeamSwitcher(props: SelectedTeamSwitcherProps) {\n const user = useUser();\n const router = useRouter();\n const selectedTeam = user?.selectedTeam;\n const rawTeams = user?.useTeams();\n const teams = useMemo(() => rawTeams?.sort((a, b) => b.id === selectedTeam?.id ? 1 : -1), [rawTeams, selectedTeam]);\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <TeamIcon displayName={selectedTeam?.displayName || ''} />\n <Text>{selectedTeam?.displayName || 'Select team'}</Text>\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent style={{ zIndex: 1500 }}>\n <DropdownMenuLabel>Teams</DropdownMenuLabel>\n {teams && teams.map(team => (\n <DropdownMenuItem\n key={team.id}\n onClick={() => {\n runAsynchronouslyWithAlert(async () => {\n await user?.setSelectedTeam(team);\n if (props.projectUrlMap) {\n router.push(props.projectUrlMap(team.id));\n }\n });\n }}\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <TeamIcon displayName={team.displayName} />\n <Text>{team.displayName}</Text>\n </div>\n <Check style={{ marginLeft: '0.5rem', visibility: team.id === selectedTeam?.id ? 'visible' : 'hidden', height: '1rem', width: '1rem' }} />\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,eASO;AACP,sBAA2C;AAC3C,0BAAsB;AACtB,wBAA0B;AAC1B,mBAAwB;AASlB;AAHN,SAAS,SAAS,OAAgC;AAChD,SACE,4CAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,OAAO,UAAU,QAAQ,UAAU,aAAa,UAAU,cAAc,WAAW,iBAAiB,mBAAmB,GACpM,sDAAC,iBAAK,OAAO,EAAE,OAAO,SAAS,YAAY,IAAI,GAAI,gBAAM,YAAY,MAAM,GAAG,CAAC,EAAE,YAAY,GAAE,GACjG;AAEJ;AAEe,SAAR,qBAAsC,OAAkC;AAC7E,QAAM,WAAO,kBAAQ;AACrB,QAAM,aAAS,6BAAU;AACzB,QAAM,eAAe,MAAM;AAC3B,QAAM,WAAW,MAAM,SAAS;AAChC,QAAM,YAAQ,sBAAQ,MAAM,UAAU,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,cAAc,KAAK,IAAI,EAAE,GAAG,CAAC,UAAU,YAAY,CAAC;AAElH,SACE,6CAAC,yBACC;AAAA,gDAAC,gCACC,uDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,SAAS,GAClD;AAAA,kDAAC,YAAS,aAAa,cAAc,eAAe,IAAI;AAAA,MACxD,4CAAC,iBAAM,wBAAc,eAAe,eAAc;AAAA,OACpD,GACF;AAAA,IACA,6CAAC,gCAAoB,OAAO,EAAE,QAAQ,KAAK,GACzC;AAAA,kDAAC,8BAAkB,mBAAK;AAAA,MACvB,SAAS,MAAM,IAAI,UAClB;AAAA,QAAC;AAAA;AAAA,UAEC,SAAS,MAAM;AACb,4DAA2B,YAAY;AACrC,oBAAM,MAAM,gBAAgB,IAAI;AAChC,kBAAI,MAAM,eAAe;AACvB,uBAAO,KAAK,MAAM,cAAc,KAAK,EAAE,CAAC;AAAA,cAC1C;AAAA,YACF,CAAC;AAAA,UACH;AAAA,UACA,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,gBAAgB;AAAA,UAEhF;AAAA,yDAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,SAAS,GAClD;AAAA,0DAAC,YAAS,aAAa,KAAK,aAAa;AAAA,cACzC,4CAAC,iBAAM,eAAK,aAAY;AAAA,eAC1B;AAAA,YACA,4CAAC,6BAAM,OAAO,EAAE,YAAY,UAAU,YAAY,KAAK,OAAO,cAAc,KAAK,YAAY,UAAU,QAAQ,QAAQ,OAAO,OAAO,GAAG;AAAA;AAAA;AAAA,QAfnI,KAAK;AAAA,MAgBZ,CACD;AAAA,OACH;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -12,18 +12,18 @@ import React__default from 'react';
|
|
|
12
12
|
declare const Button: React__default.ForwardRefExoticComponent<Omit<Omit<ButtonProps, "ref"> & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
|
|
13
13
|
declare const Input: React__default.ForwardRefExoticComponent<Omit<Omit<React__default.InputHTMLAttributes<HTMLInputElement> & Pick<React__default.HTMLProps<HTMLInputElement>, "ref">, "ref"> & React__default.RefAttributes<HTMLInputElement>, "ref"> & React__default.RefAttributes<HTMLInputElement>>;
|
|
14
14
|
declare const Container: React__default.ForwardRefExoticComponent<Omit<{
|
|
15
|
-
size?: number | "
|
|
15
|
+
size?: number | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
16
16
|
} & Omit<React__default.HTMLProps<HTMLDivElement>, "size">, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
|
|
17
17
|
declare const Separator: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_separator.SeparatorProps & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
|
|
18
18
|
declare const Label: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_label.LabelProps & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>>;
|
|
19
19
|
declare const Link: React__default.ForwardRefExoticComponent<Omit<Omit<{
|
|
20
|
-
size?: "
|
|
20
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
21
21
|
href: string | url.Url;
|
|
22
22
|
} & Omit<React__default.HTMLProps<HTMLLinkElement>, "size" | "href">, "ref"> & React__default.RefAttributes<HTMLAnchorElement>, "ref"> & React__default.RefAttributes<HTMLAnchorElement>>;
|
|
23
23
|
declare const Text: React__default.ForwardRefExoticComponent<Omit<Omit<{
|
|
24
24
|
variant?: "primary" | "secondary" | "warning" | "success" | undefined;
|
|
25
|
-
as?: "
|
|
26
|
-
size?: "
|
|
25
|
+
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | undefined;
|
|
26
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
27
27
|
} & Omit<React__default.HTMLProps<HTMLParagraphElement>, "size">, "ref"> & React__default.RefAttributes<HTMLParagraphElement>, "ref"> & React__default.RefAttributes<HTMLParagraphElement>>;
|
|
28
28
|
declare const Popover: React__default.ForwardRefExoticComponent<_radix_ui_react_popover.PopoverProps & React__default.RefAttributes<never>>;
|
|
29
29
|
declare const PopoverTrigger: React__default.ForwardRefExoticComponent<Omit<_radix_ui_react_popover.PopoverTriggerProps & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
|
|
@@ -12,18 +12,18 @@ import React__default from 'react';
|
|
|
12
12
|
declare const Button: React__default.ForwardRefExoticComponent<Omit<Omit<ButtonProps, "ref"> & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
|
|
13
13
|
declare const Input: React__default.ForwardRefExoticComponent<Omit<Omit<React__default.InputHTMLAttributes<HTMLInputElement> & Pick<React__default.HTMLProps<HTMLInputElement>, "ref">, "ref"> & React__default.RefAttributes<HTMLInputElement>, "ref"> & React__default.RefAttributes<HTMLInputElement>>;
|
|
14
14
|
declare const Container: React__default.ForwardRefExoticComponent<Omit<{
|
|
15
|
-
size?: number | "
|
|
15
|
+
size?: number | "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
16
16
|
} & Omit<React__default.HTMLProps<HTMLDivElement>, "size">, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
|
|
17
17
|
declare const Separator: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_separator.SeparatorProps & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>, "ref"> & React__default.RefAttributes<HTMLDivElement>>;
|
|
18
18
|
declare const Label: React__default.ForwardRefExoticComponent<Omit<Omit<_radix_ui_react_label.LabelProps & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>, "ref"> & React__default.RefAttributes<HTMLLabelElement>>;
|
|
19
19
|
declare const Link: React__default.ForwardRefExoticComponent<Omit<Omit<{
|
|
20
|
-
size?: "
|
|
20
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
21
21
|
href: string | url.Url;
|
|
22
22
|
} & Omit<React__default.HTMLProps<HTMLLinkElement>, "size" | "href">, "ref"> & React__default.RefAttributes<HTMLAnchorElement>, "ref"> & React__default.RefAttributes<HTMLAnchorElement>>;
|
|
23
23
|
declare const Text: React__default.ForwardRefExoticComponent<Omit<Omit<{
|
|
24
24
|
variant?: "primary" | "secondary" | "warning" | "success" | undefined;
|
|
25
|
-
as?: "
|
|
26
|
-
size?: "
|
|
25
|
+
as?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "p" | undefined;
|
|
26
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
27
27
|
} & Omit<React__default.HTMLProps<HTMLParagraphElement>, "size">, "ref"> & React__default.RefAttributes<HTMLParagraphElement>, "ref"> & React__default.RefAttributes<HTMLParagraphElement>>;
|
|
28
28
|
declare const Popover: React__default.ForwardRefExoticComponent<_radix_ui_react_popover.PopoverProps & React__default.RefAttributes<never>>;
|
|
29
29
|
declare const PopoverTrigger: React__default.ForwardRefExoticComponent<Omit<_radix_ui_react_popover.PopoverTriggerProps & React__default.RefAttributes<HTMLButtonElement>, "ref"> & React__default.RefAttributes<HTMLButtonElement>>;
|
|
@@ -47,8 +47,7 @@ function OAuthCallback(props) {
|
|
|
47
47
|
const [error, setError] = (0, import_react.useState)(null);
|
|
48
48
|
const [showRedirectLink, setShowRedirectLink] = (0, import_react.useState)(false);
|
|
49
49
|
(0, import_react.useEffect)(() => (0, import_promises.runAsynchronously)(async () => {
|
|
50
|
-
if (called.current)
|
|
51
|
-
return;
|
|
50
|
+
if (called.current) return;
|
|
52
51
|
called.current = true;
|
|
53
52
|
let hasRedirected = false;
|
|
54
53
|
try {
|
|
@@ -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-cards/message-card\";\nimport { Link } from \"../components-core/link\";\n\nexport default function OAuthCallback(props: { fullPage?: boolean }) {\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 && process.env.NODE_ENV === 'production') {\n await app.redirectToSignIn();\n }\n }), []);\n\n useEffect(() => {\n setTimeout(() => setShowRedirectLink(true), 3000);\n }, []);\n\n return <MessageCard title='Redirecting...' fullPage={props.fullPage}>\n {showRedirectLink ? <p>If you are not redirected automatically, <Link href={app.urls.home}>click here</Link>.</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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA4C;AAC5C,eAA4B;AAC5B,sBAAkC;AAClC,0BAAwB;AACxB,kBAAqB;AA2BG;AAzBT,SAAR,cAA+B,OAA+B;AACnE,QAAM,UAAM,sBAAY;AACxB,QAAM,aAAS,qBAAO,KAAK;AAC3B,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAkB,IAAI;AAChD,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,uBAAS,KAAK;AAE9D,8BAAU,UAAM,mCAAkB,YAAY;AAC5C,QAAI,OAAO;
|
|
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-cards/message-card\";\nimport { Link } from \"../components-core/link\";\n\nexport default function OAuthCallback(props: { fullPage?: boolean }) {\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 && process.env.NODE_ENV === 'production') {\n await app.redirectToSignIn();\n }\n }), []);\n\n useEffect(() => {\n setTimeout(() => setShowRedirectLink(true), 3000);\n }, []);\n\n return <MessageCard title='Redirecting...' fullPage={props.fullPage}>\n {showRedirectLink ? <p>If you are not redirected automatically, <Link href={app.urls.home}>click here</Link>.</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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAA4C;AAC5C,eAA4B;AAC5B,sBAAkC;AAClC,0BAAwB;AACxB,kBAAqB;AA2BG;AAzBT,SAAR,cAA+B,OAA+B;AACnE,QAAM,UAAM,sBAAY;AACxB,QAAM,aAAS,qBAAO,KAAK;AAC3B,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAkB,IAAI;AAChD,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,uBAAS,KAAK;AAE9D,8BAAU,UAAM,mCAAkB,YAAY;AAC5C,QAAI,OAAO,QAAS;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,iBAAiB,QAAQ,IAAI,aAAa,cAAc;AAC3D,YAAM,IAAI,iBAAiB;AAAA,IAC7B;AAAA,EACF,CAAC,GAAG,CAAC,CAAC;AAEN,8BAAU,MAAM;AACd,eAAW,MAAM,oBAAoB,IAAI,GAAG,GAAI;AAAA,EAClD,GAAG,CAAC,CAAC;AAEL,SAAO,6CAAC,oBAAAA,SAAA,EAAY,OAAM,kBAAiB,UAAU,MAAM,UACxD;AAAA,uBAAmB,6CAAC,OAAE;AAAA;AAAA,MAAyC,4CAAC,oBAAK,MAAM,IAAI,KAAK,MAAM,wBAAU;AAAA,MAAO;AAAA,OAAC,IAAO;AAAA,IACnH,QAAQ,6CAAC,SACR;AAAA,kDAAC,OAAE,uEAAyD;AAAA,MAC5D,4CAAC,SAAK,eAAK,UAAU,OAAO,MAAM,CAAC,GAAE;AAAA,MACrC,4CAAC,OAAE,sEAAwD;AAAA,OAC7D,IAAS;AAAA,KACX;AACF;","names":["MessageCard"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
|
-
// src/components/team-switcher.tsx
|
|
4
|
+
// src/components/selected-team-switcher.tsx
|
|
5
5
|
import {
|
|
6
6
|
useUser,
|
|
7
7
|
Text,
|
|
@@ -19,7 +19,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
19
19
|
function TeamIcon(props) {
|
|
20
20
|
return /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", width: "1.5rem", height: "1.5rem", marginRight: "0.5rem", borderRadius: "0.25rem", backgroundColor: "rgb(228 228 231)" }, children: /* @__PURE__ */ jsx(Text, { style: { color: "black", fontWeight: 400 }, children: props.displayName.slice(0, 1).toUpperCase() }) });
|
|
21
21
|
}
|
|
22
|
-
function
|
|
22
|
+
function SelectedTeamSwitcher(props) {
|
|
23
23
|
const user = useUser();
|
|
24
24
|
const router = useRouter();
|
|
25
25
|
const selectedTeam = user?.selectedTeam;
|
|
@@ -58,6 +58,6 @@ function TeamSwitcher(props) {
|
|
|
58
58
|
] });
|
|
59
59
|
}
|
|
60
60
|
export {
|
|
61
|
-
|
|
61
|
+
SelectedTeamSwitcher as default
|
|
62
62
|
};
|
|
63
|
-
//# sourceMappingURL=team-switcher.js.map
|
|
63
|
+
//# sourceMappingURL=selected-team-switcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/selected-team-switcher.tsx"],"sourcesContent":["'use client';\n\nimport {\n useUser,\n Text,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n DropdownMenuLabel,\n useStackApp,\n} from \"..\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { Check } from \"lucide-react\";\nimport { useRouter } from \"next/navigation\";\nimport { useMemo } from \"react\";\n\ntype SelectedTeamSwitcherProps = {\n projectUrlMap?: (projectId: string) => string,\n};\n\nfunction TeamIcon(props: { displayName: string }) {\n return (\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center', width: '1.5rem', height: '1.5rem', marginRight: '0.5rem', borderRadius: '0.25rem', backgroundColor: 'rgb(228 228 231)' }}>\n <Text style={{ color: 'black', fontWeight: 400 }}>{props.displayName.slice(0, 1).toUpperCase()}</Text>\n </div>\n );\n}\n\nexport default function SelectedTeamSwitcher(props: SelectedTeamSwitcherProps) {\n const user = useUser();\n const router = useRouter();\n const selectedTeam = user?.selectedTeam;\n const rawTeams = user?.useTeams();\n const teams = useMemo(() => rawTeams?.sort((a, b) => b.id === selectedTeam?.id ? 1 : -1), [rawTeams, selectedTeam]);\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <TeamIcon displayName={selectedTeam?.displayName || ''} />\n <Text>{selectedTeam?.displayName || 'Select team'}</Text>\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent style={{ zIndex: 1500 }}>\n <DropdownMenuLabel>Teams</DropdownMenuLabel>\n {teams && teams.map(team => (\n <DropdownMenuItem\n key={team.id}\n onClick={() => {\n runAsynchronouslyWithAlert(async () => {\n await user?.setSelectedTeam(team);\n if (props.projectUrlMap) {\n router.push(props.projectUrlMap(team.id));\n }\n });\n }}\n style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}\n >\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <TeamIcon displayName={team.displayName} />\n <Text>{team.displayName}</Text>\n </div>\n <Check style={{ marginLeft: '0.5rem', visibility: team.id === selectedTeam?.id ? 'visible' : 'hidden', height: '1rem', width: '1rem' }} />\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"],"mappings":";;;AAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,kCAAkC;AAC3C,SAAS,aAAa;AACtB,SAAS,iBAAiB;AAC1B,SAAS,eAAe;AASlB,cAeE,YAfF;AAHN,SAAS,SAAS,OAAgC;AAChD,SACE,oBAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,UAAU,OAAO,UAAU,QAAQ,UAAU,aAAa,UAAU,cAAc,WAAW,iBAAiB,mBAAmB,GACpM,8BAAC,QAAK,OAAO,EAAE,OAAO,SAAS,YAAY,IAAI,GAAI,gBAAM,YAAY,MAAM,GAAG,CAAC,EAAE,YAAY,GAAE,GACjG;AAEJ;AAEe,SAAR,qBAAsC,OAAkC;AAC7E,QAAM,OAAO,QAAQ;AACrB,QAAM,SAAS,UAAU;AACzB,QAAM,eAAe,MAAM;AAC3B,QAAM,WAAW,MAAM,SAAS;AAChC,QAAM,QAAQ,QAAQ,MAAM,UAAU,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,cAAc,KAAK,IAAI,EAAE,GAAG,CAAC,UAAU,YAAY,CAAC;AAElH,SACE,qBAAC,gBACC;AAAA,wBAAC,uBACC,+BAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,SAAS,GAClD;AAAA,0BAAC,YAAS,aAAa,cAAc,eAAe,IAAI;AAAA,MACxD,oBAAC,QAAM,wBAAc,eAAe,eAAc;AAAA,OACpD,GACF;AAAA,IACA,qBAAC,uBAAoB,OAAO,EAAE,QAAQ,KAAK,GACzC;AAAA,0BAAC,qBAAkB,mBAAK;AAAA,MACvB,SAAS,MAAM,IAAI,UAClB;AAAA,QAAC;AAAA;AAAA,UAEC,SAAS,MAAM;AACb,uCAA2B,YAAY;AACrC,oBAAM,MAAM,gBAAgB,IAAI;AAChC,kBAAI,MAAM,eAAe;AACvB,uBAAO,KAAK,MAAM,cAAc,KAAK,EAAE,CAAC;AAAA,cAC1C;AAAA,YACF,CAAC;AAAA,UACH;AAAA,UACA,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,gBAAgB,gBAAgB;AAAA,UAEhF;AAAA,iCAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,SAAS,GAClD;AAAA,kCAAC,YAAS,aAAa,KAAK,aAAa;AAAA,cACzC,oBAAC,QAAM,eAAK,aAAY;AAAA,eAC1B;AAAA,YACA,oBAAC,SAAM,OAAO,EAAE,YAAY,UAAU,YAAY,KAAK,OAAO,cAAc,KAAK,YAAY,UAAU,QAAQ,QAAQ,OAAO,OAAO,GAAG;AAAA;AAAA;AAAA,QAfnI,KAAK;AAAA,MAgBZ,CACD;AAAA,OACH;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -14,8 +14,7 @@ function OAuthCallback(props) {
|
|
|
14
14
|
const [error, setError] = useState(null);
|
|
15
15
|
const [showRedirectLink, setShowRedirectLink] = useState(false);
|
|
16
16
|
useEffect(() => runAsynchronously(async () => {
|
|
17
|
-
if (called.current)
|
|
18
|
-
return;
|
|
17
|
+
if (called.current) return;
|
|
19
18
|
called.current = true;
|
|
20
19
|
let hasRedirected = false;
|
|
21
20
|
try {
|
|
@@ -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-cards/message-card\";\nimport { Link } from \"../components-core/link\";\n\nexport default function OAuthCallback(props: { fullPage?: boolean }) {\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 && process.env.NODE_ENV === 'production') {\n await app.redirectToSignIn();\n }\n }), []);\n\n useEffect(() => {\n setTimeout(() => setShowRedirectLink(true), 3000);\n }, []);\n\n return <MessageCard title='Redirecting...' fullPage={props.fullPage}>\n {showRedirectLink ? <p>If you are not redirected automatically, <Link href={app.urls.home}>click here</Link>.</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;AACxB,SAAS,YAAY;AA2BG,SAA4C,KAA5C;AAzBT,SAAR,cAA+B,OAA+B;AACnE,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;
|
|
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-cards/message-card\";\nimport { Link } from \"../components-core/link\";\n\nexport default function OAuthCallback(props: { fullPage?: boolean }) {\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 && process.env.NODE_ENV === 'production') {\n await app.redirectToSignIn();\n }\n }), []);\n\n useEffect(() => {\n setTimeout(() => setShowRedirectLink(true), 3000);\n }, []);\n\n return <MessageCard title='Redirecting...' fullPage={props.fullPage}>\n {showRedirectLink ? <p>If you are not redirected automatically, <Link href={app.urls.home}>click here</Link>.</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;AACxB,SAAS,YAAY;AA2BG,SAA4C,KAA5C;AAzBT,SAAR,cAA+B,OAA+B;AACnE,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,QAAS;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,iBAAiB,QAAQ,IAAI,aAAa,cAAc;AAC3D,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,UAAU,MAAM,UACxD;AAAA,uBAAmB,qBAAC,OAAE;AAAA;AAAA,MAAyC,oBAAC,QAAK,MAAM,IAAI,KAAK,MAAM,wBAAU;AAAA,MAAO;AAAA,OAAC,IAAO;AAAA,IACnH,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":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=global.d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/esm/index.js
CHANGED
|
@@ -9,31 +9,35 @@ import { default as default6 } from "./components-page/email-verification";
|
|
|
9
9
|
import { default as default7 } from "./components-page/password-reset";
|
|
10
10
|
import { default as default8 } from "./components-page/forgot-password";
|
|
11
11
|
import { default as default9 } from "./components/message-cards/message-card";
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
import { default as
|
|
17
|
-
import { default as
|
|
18
|
-
import { default as
|
|
19
|
-
import { default as
|
|
20
|
-
import { default as
|
|
12
|
+
import {
|
|
13
|
+
default as default10,
|
|
14
|
+
default as default11
|
|
15
|
+
} from "./components/selected-team-switcher";
|
|
16
|
+
import { default as default12 } from "./components/credential-sign-in";
|
|
17
|
+
import { default as default13 } from "./components/credential-sign-up";
|
|
18
|
+
import { default as default14 } from "./components/oauth-button";
|
|
19
|
+
import { default as default15 } from "./components/oauth-group";
|
|
20
|
+
import { default as default16 } from "./components/password-field";
|
|
21
|
+
import { default as default17 } from "./components/user-button";
|
|
22
|
+
import { default as default18 } from "./components-page/account-settings";
|
|
23
|
+
import { default as default19 } from "./components-page/auth-page";
|
|
21
24
|
import { useDesign } from "./providers/design-provider";
|
|
22
25
|
import { useComponents } from "./providers/component-provider";
|
|
23
26
|
import { StackTheme } from "./providers/theme-provider";
|
|
24
27
|
export * from "./components-core";
|
|
25
28
|
export {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
29
|
+
default18 as AccountSettings,
|
|
30
|
+
default19 as AuthPage,
|
|
31
|
+
default12 as CredentialSignIn,
|
|
32
|
+
default13 as CredentialSignUp,
|
|
30
33
|
default6 as EmailVerification,
|
|
31
34
|
default8 as ForgotPassword,
|
|
32
35
|
default9 as MessageCard,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
+
default14 as OAuthButton,
|
|
37
|
+
default15 as OAuthGroup,
|
|
38
|
+
default16 as PasswordField,
|
|
36
39
|
default7 as PasswordReset,
|
|
40
|
+
default10 as SelectedTeamSwitcher,
|
|
37
41
|
default4 as SignIn,
|
|
38
42
|
default5 as SignUp,
|
|
39
43
|
StackAdminApp,
|
|
@@ -42,8 +46,8 @@ export {
|
|
|
42
46
|
default2 as StackProvider,
|
|
43
47
|
StackServerApp,
|
|
44
48
|
StackTheme,
|
|
45
|
-
|
|
46
|
-
|
|
49
|
+
default11 as TeamSwitcher,
|
|
50
|
+
default17 as UserButton,
|
|
47
51
|
useComponents,
|
|
48
52
|
useDesign,
|
|
49
53
|
useStackApp,
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.tsx"],"sourcesContent":["export { default as StackProvider } from \"./providers/stack-provider\";\n\nexport { useUser, useStackApp } from \"./lib/hooks\";\nexport { StackClientApp, StackServerApp, StackAdminApp } from \"./lib/stack-app\";\n\nexport { default as StackHandler } from \"./components-page/stack-handler\";\nexport { default as SignIn } from \"./components-page/sign-in\";\nexport { default as SignUp } from \"./components-page/sign-up\";\nexport { default as EmailVerification } from \"./components-page/email-verification\";\nexport { default as PasswordReset } from \"./components-page/password-reset\";\nexport { default as ForgotPassword } from \"./components-page/forgot-password\";\nexport { default as MessageCard } from \"./components/message-cards/message-card\";\nexport { default as TeamSwitcher
|
|
1
|
+
{"version":3,"sources":["../../src/index.tsx"],"sourcesContent":["export { default as StackProvider } from \"./providers/stack-provider\";\n\nexport { useUser, useStackApp } from \"./lib/hooks\";\nexport { StackClientApp, StackServerApp, StackAdminApp } from \"./lib/stack-app\";\n\nexport { default as StackHandler } from \"./components-page/stack-handler\";\nexport { default as SignIn } from \"./components-page/sign-in\";\nexport { default as SignUp } from \"./components-page/sign-up\";\nexport { default as EmailVerification } from \"./components-page/email-verification\";\nexport { default as PasswordReset } from \"./components-page/password-reset\";\nexport { default as ForgotPassword } from \"./components-page/forgot-password\";\nexport { default as MessageCard } from \"./components/message-cards/message-card\";\nexport {\n default as SelectedTeamSwitcher,\n /**\n * @deprecated This was renamed to `SelectedTeamSwitcher`.\n */\n default as TeamSwitcher\n} from \"./components/selected-team-switcher\";\n\n\nexport { default as CredentialSignIn } from \"./components/credential-sign-in\";\nexport { default as CredentialSignUp } from \"./components/credential-sign-up\";\nexport { default as OAuthButton } from \"./components/oauth-button\";\nexport { default as OAuthGroup } from \"./components/oauth-group\";\nexport { default as PasswordField } from \"./components/password-field\";\nexport { default as UserButton } from \"./components/user-button\";\nexport { default as AccountSettings } from \"./components-page/account-settings\";\nexport { default as AuthPage } from \"./components-page/auth-page\";\n\nexport { useDesign } from './providers/design-provider';\nexport type { ColorPalette } from './providers/design-provider';\nexport { useComponents } from './providers/component-provider';\nexport { StackTheme } from './providers/theme-provider';\nexport type { ThemeConfig } from './providers/theme-provider';\n\nexport type { \n CurrentUser, \n Project, \n ServerUser as ServerUser, \n ApiKeySetFirstView, \n ApiKeySet, \n ServerTeam, \n Team, \n TeamMember,\n ServerTeamMember,\n ServerPermission as Permission,\n ServerPermission,\n} from './lib/stack-app';\n\nexport * from './components-core';\n"],"mappings":";AAAA,SAAoB,WAAXA,gBAAgC;AAEzC,SAAS,SAAS,mBAAmB;AACrC,SAAS,gBAAgB,gBAAgB,qBAAqB;AAE9D,SAAoB,WAAXA,gBAA+B;AACxC,SAAoB,WAAXA,gBAAyB;AAClC,SAAoB,WAAXA,gBAAyB;AAClC,SAAoB,WAAXA,gBAAoC;AAC7C,SAAoB,WAAXA,gBAAgC;AACzC,SAAoB,WAAXA,gBAAiC;AAC1C,SAAoB,WAAXA,gBAA8B;AACvC;AAAA,EACa,WAAXA;AAAA,EAIW,WAAXA;AAAA,OACK;AAGP,SAAoB,WAAXA,iBAAmC;AAC5C,SAAoB,WAAXA,iBAAmC;AAC5C,SAAoB,WAAXA,iBAA8B;AACvC,SAAoB,WAAXA,iBAA6B;AACtC,SAAoB,WAAXA,iBAAgC;AACzC,SAAoB,WAAXA,iBAA6B;AACtC,SAAoB,WAAXA,iBAAkC;AAC3C,SAAoB,WAAXA,iBAA2B;AAEpC,SAAS,iBAAiB;AAE1B,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAiB3B,cAAc;","names":["default"]}
|
package/dist/esm/lib/auth.js
CHANGED
|
@@ -57,8 +57,7 @@ async function callOAuthCallback(iface, redirectUrl) {
|
|
|
57
57
|
throw new Error("Invalid OAuth callback URL parameters. It seems like the OAuth flow was interrupted, so please try again.");
|
|
58
58
|
}
|
|
59
59
|
const originalUrl = consumeOAuthCallbackQueryParams(state);
|
|
60
|
-
if (!originalUrl)
|
|
61
|
-
return null;
|
|
60
|
+
if (!originalUrl) return null;
|
|
62
61
|
try {
|
|
63
62
|
return await iface.callOAuthCallback({
|
|
64
63
|
oauthParams: originalUrl.searchParams,
|
package/dist/esm/lib/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/auth.ts"],"sourcesContent":["import { StackClientInterface } from \"@stackframe/stack-shared\";\nimport { saveVerifierAndState, getVerifierAndState } from \"./cookie\";\nimport { constructRedirectUrl } from \"../utils/url\";\nimport { neverResolve } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { StackAssertionError } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { InternalSession } from \"@stackframe/stack-shared/dist/sessions\";\n\nexport async function signInWithOAuth(\n iface: StackClientInterface,\n options: { \n provider: string,\n redirectUrl: string,\n errorRedirectUrl: string,\n providerScope?: string,\n }\n) {\n const { codeChallenge, state } = await saveVerifierAndState();\n const location = await iface.getOAuthUrl({\n provider: options.provider,\n redirectUrl: constructRedirectUrl(options.redirectUrl),\n errorRedirectUrl: constructRedirectUrl(options.errorRedirectUrl),\n codeChallenge,\n state,\n type: \"authenticate\",\n providerScope: options.providerScope,\n });\n window.location.assign(location);\n await neverResolve();\n}\n\nexport async function addNewOAuthProviderOrScope(\n iface: StackClientInterface,\n options: { \n provider: string,\n redirectUrl: string,\n errorRedirectUrl: string,\n providerScope?: string,\n },\n session: InternalSession,\n) {\n const { codeChallenge, state } = await saveVerifierAndState();\n const location = await iface.getOAuthUrl({\n provider: options.provider,\n redirectUrl: constructRedirectUrl(options.redirectUrl),\n errorRedirectUrl: constructRedirectUrl(options.errorRedirectUrl),\n afterCallbackRedirectUrl: constructRedirectUrl(window.location.href),\n codeChallenge,\n state,\n type: \"link\",\n session,\n providerScope: options.providerScope,\n });\n window.location.assign(location);\n await neverResolve();\n}\n\n/**\n * Checks if the current URL has the query parameters for an OAuth callback, and if so, removes them.\n * \n * Must be synchronous for the logic in callOAuthCallback to work without race conditions.\n */\nfunction consumeOAuthCallbackQueryParams(expectedState: string): null | URL {\n const requiredParams = [\"code\", \"state\"];\n const originalUrl = new URL(window.location.href);\n for (const param of requiredParams) {\n if (!originalUrl.searchParams.has(param)) {\n return null;\n }\n }\n\n if (expectedState !== originalUrl.searchParams.get(\"state\")) {\n // If the state doesn't match, then the callback wasn't meant for us.\n // Maybe the website uses another OAuth library?\n return null;\n }\n\n\n const newUrl = new URL(originalUrl);\n for (const param of requiredParams) {\n newUrl.searchParams.delete(param);\n }\n\n // let's get rid of the authorization code in the history as we\n // don't redirect to `redirectUrl` if there's a validation error\n // (as the redirectUrl might be malicious!).\n //\n // We use history.replaceState instead of location.assign(...) to\n // prevent an unnecessary reload\n window.history.replaceState({}, \"\", newUrl.toString());\n\n return originalUrl; \n}\n\nexport async function callOAuthCallback(\n iface: StackClientInterface,\n redirectUrl: string,\n) {\n // note: this part of the function (until the return) needs\n // to be synchronous, to prevent race conditions when\n // callOAuthCallback is called multiple times in parallel\n const { codeVerifier, state } = getVerifierAndState();\n if (!codeVerifier || !state) {\n throw new Error(\"Invalid OAuth callback URL parameters. It seems like the OAuth flow was interrupted, so please try again.\");\n }\n const originalUrl = consumeOAuthCallbackQueryParams(state);\n if (!originalUrl) return null;\n\n // the rest can be asynchronous (we now know that we are the\n // intended recipient of the callback)\n try {\n return await iface.callOAuthCallback({\n oauthParams: originalUrl.searchParams,\n redirectUri: constructRedirectUrl(redirectUrl),\n codeVerifier,\n state,\n });\n } catch (e) {\n throw new StackAssertionError(\"Error signing in during OAuth callback. Please try again.\", { cause: e });\n }\n}\n"],"mappings":";AACA,SAAS,sBAAsB,2BAA2B;AAC1D,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AAGpC,eAAsB,gBACpB,OACA,SAMA;AACA,QAAM,EAAE,eAAe,MAAM,IAAI,MAAM,qBAAqB;AAC5D,QAAM,WAAW,MAAM,MAAM,YAAY;AAAA,IACvC,UAAU,QAAQ;AAAA,IAClB,aAAa,qBAAqB,QAAQ,WAAW;AAAA,IACrD,kBAAkB,qBAAqB,QAAQ,gBAAgB;AAAA,IAC/D;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,SAAO,SAAS,OAAO,QAAQ;AAC/B,QAAM,aAAa;AACrB;AAEA,eAAsB,2BACpB,OACA,SAMA,SACA;AACA,QAAM,EAAE,eAAe,MAAM,IAAI,MAAM,qBAAqB;AAC5D,QAAM,WAAW,MAAM,MAAM,YAAY;AAAA,IACvC,UAAU,QAAQ;AAAA,IAClB,aAAa,qBAAqB,QAAQ,WAAW;AAAA,IACrD,kBAAkB,qBAAqB,QAAQ,gBAAgB;AAAA,IAC/D,0BAA0B,qBAAqB,OAAO,SAAS,IAAI;AAAA,IACnE;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,SAAO,SAAS,OAAO,QAAQ;AAC/B,QAAM,aAAa;AACrB;AAOA,SAAS,gCAAgC,eAAmC;AAC1E,QAAM,iBAAiB,CAAC,QAAQ,OAAO;AACvC,QAAM,cAAc,IAAI,IAAI,OAAO,SAAS,IAAI;AAChD,aAAW,SAAS,gBAAgB;AAClC,QAAI,CAAC,YAAY,aAAa,IAAI,KAAK,GAAG;AACxC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,kBAAkB,YAAY,aAAa,IAAI,OAAO,GAAG;AAG3D,WAAO;AAAA,EACT;AAGA,QAAM,SAAS,IAAI,IAAI,WAAW;AAClC,aAAW,SAAS,gBAAgB;AAClC,WAAO,aAAa,OAAO,KAAK;AAAA,EAClC;AAQA,SAAO,QAAQ,aAAa,CAAC,GAAG,IAAI,OAAO,SAAS,CAAC;AAErD,SAAO;AACT;AAEA,eAAsB,kBACpB,OACA,aACA;AAIA,QAAM,EAAE,cAAc,MAAM,IAAI,oBAAoB;AACpD,MAAI,CAAC,gBAAgB,CAAC,OAAO;AAC3B,UAAM,IAAI,MAAM,2GAA2G;AAAA,EAC7H;AACA,QAAM,cAAc,gCAAgC,KAAK;AACzD,MAAI,CAAC
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/auth.ts"],"sourcesContent":["import { StackClientInterface } from \"@stackframe/stack-shared\";\nimport { saveVerifierAndState, getVerifierAndState } from \"./cookie\";\nimport { constructRedirectUrl } from \"../utils/url\";\nimport { neverResolve } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { StackAssertionError } from \"@stackframe/stack-shared/dist/utils/errors\";\nimport { InternalSession } from \"@stackframe/stack-shared/dist/sessions\";\n\nexport async function signInWithOAuth(\n iface: StackClientInterface,\n options: { \n provider: string,\n redirectUrl: string,\n errorRedirectUrl: string,\n providerScope?: string,\n }\n) {\n const { codeChallenge, state } = await saveVerifierAndState();\n const location = await iface.getOAuthUrl({\n provider: options.provider,\n redirectUrl: constructRedirectUrl(options.redirectUrl),\n errorRedirectUrl: constructRedirectUrl(options.errorRedirectUrl),\n codeChallenge,\n state,\n type: \"authenticate\",\n providerScope: options.providerScope,\n });\n window.location.assign(location);\n await neverResolve();\n}\n\nexport async function addNewOAuthProviderOrScope(\n iface: StackClientInterface,\n options: { \n provider: string,\n redirectUrl: string,\n errorRedirectUrl: string,\n providerScope?: string,\n },\n session: InternalSession,\n) {\n const { codeChallenge, state } = await saveVerifierAndState();\n const location = await iface.getOAuthUrl({\n provider: options.provider,\n redirectUrl: constructRedirectUrl(options.redirectUrl),\n errorRedirectUrl: constructRedirectUrl(options.errorRedirectUrl),\n afterCallbackRedirectUrl: constructRedirectUrl(window.location.href),\n codeChallenge,\n state,\n type: \"link\",\n session,\n providerScope: options.providerScope,\n });\n window.location.assign(location);\n await neverResolve();\n}\n\n/**\n * Checks if the current URL has the query parameters for an OAuth callback, and if so, removes them.\n * \n * Must be synchronous for the logic in callOAuthCallback to work without race conditions.\n */\nfunction consumeOAuthCallbackQueryParams(expectedState: string): null | URL {\n const requiredParams = [\"code\", \"state\"];\n const originalUrl = new URL(window.location.href);\n for (const param of requiredParams) {\n if (!originalUrl.searchParams.has(param)) {\n return null;\n }\n }\n\n if (expectedState !== originalUrl.searchParams.get(\"state\")) {\n // If the state doesn't match, then the callback wasn't meant for us.\n // Maybe the website uses another OAuth library?\n return null;\n }\n\n\n const newUrl = new URL(originalUrl);\n for (const param of requiredParams) {\n newUrl.searchParams.delete(param);\n }\n\n // let's get rid of the authorization code in the history as we\n // don't redirect to `redirectUrl` if there's a validation error\n // (as the redirectUrl might be malicious!).\n //\n // We use history.replaceState instead of location.assign(...) to\n // prevent an unnecessary reload\n window.history.replaceState({}, \"\", newUrl.toString());\n\n return originalUrl; \n}\n\nexport async function callOAuthCallback(\n iface: StackClientInterface,\n redirectUrl: string,\n) {\n // note: this part of the function (until the return) needs\n // to be synchronous, to prevent race conditions when\n // callOAuthCallback is called multiple times in parallel\n const { codeVerifier, state } = getVerifierAndState();\n if (!codeVerifier || !state) {\n throw new Error(\"Invalid OAuth callback URL parameters. It seems like the OAuth flow was interrupted, so please try again.\");\n }\n const originalUrl = consumeOAuthCallbackQueryParams(state);\n if (!originalUrl) return null;\n\n // the rest can be asynchronous (we now know that we are the\n // intended recipient of the callback)\n try {\n return await iface.callOAuthCallback({\n oauthParams: originalUrl.searchParams,\n redirectUri: constructRedirectUrl(redirectUrl),\n codeVerifier,\n state,\n });\n } catch (e) {\n throw new StackAssertionError(\"Error signing in during OAuth callback. Please try again.\", { cause: e });\n }\n}\n"],"mappings":";AACA,SAAS,sBAAsB,2BAA2B;AAC1D,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AAGpC,eAAsB,gBACpB,OACA,SAMA;AACA,QAAM,EAAE,eAAe,MAAM,IAAI,MAAM,qBAAqB;AAC5D,QAAM,WAAW,MAAM,MAAM,YAAY;AAAA,IACvC,UAAU,QAAQ;AAAA,IAClB,aAAa,qBAAqB,QAAQ,WAAW;AAAA,IACrD,kBAAkB,qBAAqB,QAAQ,gBAAgB;AAAA,IAC/D;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,SAAO,SAAS,OAAO,QAAQ;AAC/B,QAAM,aAAa;AACrB;AAEA,eAAsB,2BACpB,OACA,SAMA,SACA;AACA,QAAM,EAAE,eAAe,MAAM,IAAI,MAAM,qBAAqB;AAC5D,QAAM,WAAW,MAAM,MAAM,YAAY;AAAA,IACvC,UAAU,QAAQ;AAAA,IAClB,aAAa,qBAAqB,QAAQ,WAAW;AAAA,IACrD,kBAAkB,qBAAqB,QAAQ,gBAAgB;AAAA,IAC/D,0BAA0B,qBAAqB,OAAO,SAAS,IAAI;AAAA,IACnE;AAAA,IACA;AAAA,IACA,MAAM;AAAA,IACN;AAAA,IACA,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,SAAO,SAAS,OAAO,QAAQ;AAC/B,QAAM,aAAa;AACrB;AAOA,SAAS,gCAAgC,eAAmC;AAC1E,QAAM,iBAAiB,CAAC,QAAQ,OAAO;AACvC,QAAM,cAAc,IAAI,IAAI,OAAO,SAAS,IAAI;AAChD,aAAW,SAAS,gBAAgB;AAClC,QAAI,CAAC,YAAY,aAAa,IAAI,KAAK,GAAG;AACxC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,kBAAkB,YAAY,aAAa,IAAI,OAAO,GAAG;AAG3D,WAAO;AAAA,EACT;AAGA,QAAM,SAAS,IAAI,IAAI,WAAW;AAClC,aAAW,SAAS,gBAAgB;AAClC,WAAO,aAAa,OAAO,KAAK;AAAA,EAClC;AAQA,SAAO,QAAQ,aAAa,CAAC,GAAG,IAAI,OAAO,SAAS,CAAC;AAErD,SAAO;AACT;AAEA,eAAsB,kBACpB,OACA,aACA;AAIA,QAAM,EAAE,cAAc,MAAM,IAAI,oBAAoB;AACpD,MAAI,CAAC,gBAAgB,CAAC,OAAO;AAC3B,UAAM,IAAI,MAAM,2GAA2G;AAAA,EAC7H;AACA,QAAM,cAAc,gCAAgC,KAAK;AACzD,MAAI,CAAC,YAAa,QAAO;AAIzB,MAAI;AACF,WAAO,MAAM,MAAM,kBAAkB;AAAA,MACnC,aAAa,YAAY;AAAA,MACzB,aAAa,qBAAqB,WAAW;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH,SAAS,GAAG;AACV,UAAM,IAAI,oBAAoB,6DAA6D,EAAE,OAAO,EAAE,CAAC;AAAA,EACzG;AACF;","names":[]}
|
package/dist/esm/lib/cookie.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
// ../../node_modules/.pnpm/oauth4webapi@2.10.
|
|
1
|
+
// ../../node_modules/.pnpm/oauth4webapi@2.10.4/node_modules/oauth4webapi/build/index.js
|
|
2
2
|
var USER_AGENT;
|
|
3
3
|
if (typeof navigator === "undefined" || !navigator.userAgent?.startsWith?.("Mozilla/5.0 ")) {
|
|
4
4
|
const NAME = "oauth4webapi";
|
|
5
|
-
const VERSION = "v2.10.
|
|
5
|
+
const VERSION = "v2.10.4";
|
|
6
6
|
USER_AGENT = `${NAME}/${VERSION}`;
|
|
7
7
|
}
|
|
8
8
|
var clockSkew = Symbol();
|