@stackframe/stack 2.5.9 → 2.5.11
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 +19 -0
- package/dist/components/user-button.js +2 -2
- package/dist/components/user-button.js.map +1 -1
- package/dist/esm/components/user-button.js +2 -2
- package/dist/esm/components/user-button.js.map +1 -1
- package/dist/esm/lib/stack-app.js +25 -31
- package/dist/esm/lib/stack-app.js.map +1 -1
- package/dist/lib/stack-app.d.mts +1 -0
- package/dist/lib/stack-app.d.ts +1 -0
- package/dist/lib/stack-app.js +25 -31
- package/dist/lib/stack-app.js.map +1 -1
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @stackframe/stack
|
|
2
2
|
|
|
3
|
+
## 2.5.11
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Update descriptions & docs
|
|
8
|
+
- @stackframe/stack-sc@2.5.11
|
|
9
|
+
- @stackframe/stack-shared@2.5.11
|
|
10
|
+
- @stackframe/stack-ui@2.5.11
|
|
11
|
+
|
|
12
|
+
## 2.5.10
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Facebook Business support
|
|
17
|
+
- Updated dependencies
|
|
18
|
+
- @stackframe/stack-shared@2.5.10
|
|
19
|
+
- @stackframe/stack-ui@2.5.10
|
|
20
|
+
- @stackframe/stack-sc@2.5.10
|
|
21
|
+
|
|
3
22
|
## 2.5.9
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
|
@@ -95,7 +95,7 @@ function UserButtonInnerInner(props) {
|
|
|
95
95
|
Item,
|
|
96
96
|
{
|
|
97
97
|
text: "Sign in",
|
|
98
|
-
onClick: async () => await app.
|
|
98
|
+
onClick: async () => await app.redirectToSignIn(),
|
|
99
99
|
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.LogIn, { ...iconProps })
|
|
100
100
|
}
|
|
101
101
|
),
|
|
@@ -103,7 +103,7 @@ function UserButtonInnerInner(props) {
|
|
|
103
103
|
Item,
|
|
104
104
|
{
|
|
105
105
|
text: "Sign up",
|
|
106
|
-
onClick: async () => await app.
|
|
106
|
+
onClick: async () => await app.redirectToSignUp(),
|
|
107
107
|
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.UserPlus, { ...iconProps })
|
|
108
108
|
}
|
|
109
109
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/user-button.tsx"],"sourcesContent":["'use client';\n\nimport React, { Suspense } from \"react\";\nimport {\n useUser,\n useStackApp,\n CurrentUser,\n} from \"..\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { UserAvatar } from \"./elements/user-avatar\";\nimport { useRouter } from \"next/navigation\";\nimport { CircleUser, LogIn, SunMoon, UserPlus, LogOut } from \"lucide-react\";\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, Skeleton, Typography } from \"@stackframe/stack-ui\";\n\nfunction Item(props: { text: string, icon: React.ReactNode, onClick: () => void | Promise<void> }) {\n return (\n <DropdownMenuItem\n onClick={() => runAsynchronouslyWithAlert(props.onClick)}\n className=\"flex gap-2 items-center\"\n >\n {props.icon}\n <Typography>{props.text}</Typography>\n </DropdownMenuItem>\n );\n}\n\ntype UserButtonProps = {\n showUserInfo?: boolean,\n colorModeToggle?: () => void | Promise<void>,\n extraItems?: {\n text: string,\n icon: React.ReactNode,\n onClick: () => void | Promise<void>,\n }[],\n};\n\nexport function UserButton(props: UserButtonProps) {\n return (\n <Suspense\n fallback={\n <Skeleton>\n <UserButtonInnerInner {...props} user={null} />\n </Skeleton>\n }\n >\n <UserButtonInner {...props} />\n </Suspense>\n );\n}\n\nfunction UserButtonInner(props: UserButtonProps) {\n const user = useUser();\n return <UserButtonInnerInner {...props} user={user} />;\n}\n\n\nfunction UserButtonInnerInner(props: UserButtonProps & { user: CurrentUser | null }) {\n const user = props.user;\n const app = useStackApp();\n const router = useRouter();\n\n const iconProps = { size: 20, className: 'h-4 w-4' };\n const textClasses = 'text-ellipsis whitespace-nowrap overflow-hidden';\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger className=\"outline-none stack-scope\">\n <div className=\"flex gap-2 items-center\">\n <UserAvatar user={user} />\n {user && props.showUserInfo &&\n <div className=\"flex flex-col justify-center\">\n <Typography className={textClasses}>{user.displayName}</Typography>\n <Typography className={textClasses} variant=\"secondary\" type='label'>{user.primaryEmail}</Typography>\n </div>\n }\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"stack-scope\">\n <DropdownMenuLabel>\n <div className=\"flex gap-2 items-center\">\n <UserAvatar user={user} />\n <div>\n {user && <Typography>{user.displayName}</Typography>}\n {user && <Typography variant=\"secondary\" type='label'>{user.primaryEmail}</Typography>}\n {!user && <Typography>Not signed in</Typography>}\n </div>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {user && <Item\n text=\"Account settings\"\n onClick={async () => await app.redirectToAccountSettings()}\n icon={<CircleUser {...iconProps} />}\n />}\n {!user && <Item\n text=\"Sign in\"\n onClick={async () => await app.
|
|
1
|
+
{"version":3,"sources":["../../src/components/user-button.tsx"],"sourcesContent":["'use client';\n\nimport React, { Suspense } from \"react\";\nimport {\n useUser,\n useStackApp,\n CurrentUser,\n} from \"..\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { UserAvatar } from \"./elements/user-avatar\";\nimport { useRouter } from \"next/navigation\";\nimport { CircleUser, LogIn, SunMoon, UserPlus, LogOut } from \"lucide-react\";\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, Skeleton, Typography } from \"@stackframe/stack-ui\";\n\nfunction Item(props: { text: string, icon: React.ReactNode, onClick: () => void | Promise<void> }) {\n return (\n <DropdownMenuItem\n onClick={() => runAsynchronouslyWithAlert(props.onClick)}\n className=\"flex gap-2 items-center\"\n >\n {props.icon}\n <Typography>{props.text}</Typography>\n </DropdownMenuItem>\n );\n}\n\ntype UserButtonProps = {\n showUserInfo?: boolean,\n colorModeToggle?: () => void | Promise<void>,\n extraItems?: {\n text: string,\n icon: React.ReactNode,\n onClick: () => void | Promise<void>,\n }[],\n};\n\nexport function UserButton(props: UserButtonProps) {\n return (\n <Suspense\n fallback={\n <Skeleton>\n <UserButtonInnerInner {...props} user={null} />\n </Skeleton>\n }\n >\n <UserButtonInner {...props} />\n </Suspense>\n );\n}\n\nfunction UserButtonInner(props: UserButtonProps) {\n const user = useUser();\n return <UserButtonInnerInner {...props} user={user} />;\n}\n\n\nfunction UserButtonInnerInner(props: UserButtonProps & { user: CurrentUser | null }) {\n const user = props.user;\n const app = useStackApp();\n const router = useRouter();\n\n const iconProps = { size: 20, className: 'h-4 w-4' };\n const textClasses = 'text-ellipsis whitespace-nowrap overflow-hidden';\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger className=\"outline-none stack-scope\">\n <div className=\"flex gap-2 items-center\">\n <UserAvatar user={user} />\n {user && props.showUserInfo &&\n <div className=\"flex flex-col justify-center\">\n <Typography className={textClasses}>{user.displayName}</Typography>\n <Typography className={textClasses} variant=\"secondary\" type='label'>{user.primaryEmail}</Typography>\n </div>\n }\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"stack-scope\">\n <DropdownMenuLabel>\n <div className=\"flex gap-2 items-center\">\n <UserAvatar user={user} />\n <div>\n {user && <Typography>{user.displayName}</Typography>}\n {user && <Typography variant=\"secondary\" type='label'>{user.primaryEmail}</Typography>}\n {!user && <Typography>Not signed in</Typography>}\n </div>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {user && <Item\n text=\"Account settings\"\n onClick={async () => await app.redirectToAccountSettings()}\n icon={<CircleUser {...iconProps} />}\n />}\n {!user && <Item\n text=\"Sign in\"\n onClick={async () => await app.redirectToSignIn()}\n icon={<LogIn {...iconProps} />}\n />}\n {!user && <Item\n text=\"Sign up\"\n onClick={async () => await app.redirectToSignUp()}\n icon={<UserPlus {...iconProps}/> }\n />}\n {user && props.extraItems && props.extraItems.map((item, index) => (\n <Item key={index} {...item} />\n ))}\n {props.colorModeToggle && (\n <Item\n text=\"Toggle theme\"\n onClick={props.colorModeToggle}\n icon={<SunMoon {...iconProps} />}\n />\n )}\n {user && <Item\n text=\"Sign out\"\n onClick={() => user.signOut()}\n icon={<LogOut {...iconProps} />}\n />}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -75,7 +75,7 @@ function UserButtonInnerInner(props) {
|
|
|
75
75
|
Item,
|
|
76
76
|
{
|
|
77
77
|
text: "Sign in",
|
|
78
|
-
onClick: async () => await app.
|
|
78
|
+
onClick: async () => await app.redirectToSignIn(),
|
|
79
79
|
icon: /* @__PURE__ */ jsx(LogIn, { ...iconProps })
|
|
80
80
|
}
|
|
81
81
|
),
|
|
@@ -83,7 +83,7 @@ function UserButtonInnerInner(props) {
|
|
|
83
83
|
Item,
|
|
84
84
|
{
|
|
85
85
|
text: "Sign up",
|
|
86
|
-
onClick: async () => await app.
|
|
86
|
+
onClick: async () => await app.redirectToSignUp(),
|
|
87
87
|
icon: /* @__PURE__ */ jsx(UserPlus, { ...iconProps })
|
|
88
88
|
}
|
|
89
89
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/user-button.tsx"],"sourcesContent":["'use client';\n\nimport React, { Suspense } from \"react\";\nimport {\n useUser,\n useStackApp,\n CurrentUser,\n} from \"..\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { UserAvatar } from \"./elements/user-avatar\";\nimport { useRouter } from \"next/navigation\";\nimport { CircleUser, LogIn, SunMoon, UserPlus, LogOut } from \"lucide-react\";\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, Skeleton, Typography } from \"@stackframe/stack-ui\";\n\nfunction Item(props: { text: string, icon: React.ReactNode, onClick: () => void | Promise<void> }) {\n return (\n <DropdownMenuItem\n onClick={() => runAsynchronouslyWithAlert(props.onClick)}\n className=\"flex gap-2 items-center\"\n >\n {props.icon}\n <Typography>{props.text}</Typography>\n </DropdownMenuItem>\n );\n}\n\ntype UserButtonProps = {\n showUserInfo?: boolean,\n colorModeToggle?: () => void | Promise<void>,\n extraItems?: {\n text: string,\n icon: React.ReactNode,\n onClick: () => void | Promise<void>,\n }[],\n};\n\nexport function UserButton(props: UserButtonProps) {\n return (\n <Suspense\n fallback={\n <Skeleton>\n <UserButtonInnerInner {...props} user={null} />\n </Skeleton>\n }\n >\n <UserButtonInner {...props} />\n </Suspense>\n );\n}\n\nfunction UserButtonInner(props: UserButtonProps) {\n const user = useUser();\n return <UserButtonInnerInner {...props} user={user} />;\n}\n\n\nfunction UserButtonInnerInner(props: UserButtonProps & { user: CurrentUser | null }) {\n const user = props.user;\n const app = useStackApp();\n const router = useRouter();\n\n const iconProps = { size: 20, className: 'h-4 w-4' };\n const textClasses = 'text-ellipsis whitespace-nowrap overflow-hidden';\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger className=\"outline-none stack-scope\">\n <div className=\"flex gap-2 items-center\">\n <UserAvatar user={user} />\n {user && props.showUserInfo &&\n <div className=\"flex flex-col justify-center\">\n <Typography className={textClasses}>{user.displayName}</Typography>\n <Typography className={textClasses} variant=\"secondary\" type='label'>{user.primaryEmail}</Typography>\n </div>\n }\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"stack-scope\">\n <DropdownMenuLabel>\n <div className=\"flex gap-2 items-center\">\n <UserAvatar user={user} />\n <div>\n {user && <Typography>{user.displayName}</Typography>}\n {user && <Typography variant=\"secondary\" type='label'>{user.primaryEmail}</Typography>}\n {!user && <Typography>Not signed in</Typography>}\n </div>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {user && <Item\n text=\"Account settings\"\n onClick={async () => await app.redirectToAccountSettings()}\n icon={<CircleUser {...iconProps} />}\n />}\n {!user && <Item\n text=\"Sign in\"\n onClick={async () => await app.
|
|
1
|
+
{"version":3,"sources":["../../../src/components/user-button.tsx"],"sourcesContent":["'use client';\n\nimport React, { Suspense } from \"react\";\nimport {\n useUser,\n useStackApp,\n CurrentUser,\n} from \"..\";\nimport { runAsynchronouslyWithAlert } from \"@stackframe/stack-shared/dist/utils/promises\";\nimport { UserAvatar } from \"./elements/user-avatar\";\nimport { useRouter } from \"next/navigation\";\nimport { CircleUser, LogIn, SunMoon, UserPlus, LogOut } from \"lucide-react\";\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, Skeleton, Typography } from \"@stackframe/stack-ui\";\n\nfunction Item(props: { text: string, icon: React.ReactNode, onClick: () => void | Promise<void> }) {\n return (\n <DropdownMenuItem\n onClick={() => runAsynchronouslyWithAlert(props.onClick)}\n className=\"flex gap-2 items-center\"\n >\n {props.icon}\n <Typography>{props.text}</Typography>\n </DropdownMenuItem>\n );\n}\n\ntype UserButtonProps = {\n showUserInfo?: boolean,\n colorModeToggle?: () => void | Promise<void>,\n extraItems?: {\n text: string,\n icon: React.ReactNode,\n onClick: () => void | Promise<void>,\n }[],\n};\n\nexport function UserButton(props: UserButtonProps) {\n return (\n <Suspense\n fallback={\n <Skeleton>\n <UserButtonInnerInner {...props} user={null} />\n </Skeleton>\n }\n >\n <UserButtonInner {...props} />\n </Suspense>\n );\n}\n\nfunction UserButtonInner(props: UserButtonProps) {\n const user = useUser();\n return <UserButtonInnerInner {...props} user={user} />;\n}\n\n\nfunction UserButtonInnerInner(props: UserButtonProps & { user: CurrentUser | null }) {\n const user = props.user;\n const app = useStackApp();\n const router = useRouter();\n\n const iconProps = { size: 20, className: 'h-4 w-4' };\n const textClasses = 'text-ellipsis whitespace-nowrap overflow-hidden';\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger className=\"outline-none stack-scope\">\n <div className=\"flex gap-2 items-center\">\n <UserAvatar user={user} />\n {user && props.showUserInfo &&\n <div className=\"flex flex-col justify-center\">\n <Typography className={textClasses}>{user.displayName}</Typography>\n <Typography className={textClasses} variant=\"secondary\" type='label'>{user.primaryEmail}</Typography>\n </div>\n }\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"stack-scope\">\n <DropdownMenuLabel>\n <div className=\"flex gap-2 items-center\">\n <UserAvatar user={user} />\n <div>\n {user && <Typography>{user.displayName}</Typography>}\n {user && <Typography variant=\"secondary\" type='label'>{user.primaryEmail}</Typography>}\n {!user && <Typography>Not signed in</Typography>}\n </div>\n </div>\n </DropdownMenuLabel>\n <DropdownMenuSeparator />\n {user && <Item\n text=\"Account settings\"\n onClick={async () => await app.redirectToAccountSettings()}\n icon={<CircleUser {...iconProps} />}\n />}\n {!user && <Item\n text=\"Sign in\"\n onClick={async () => await app.redirectToSignIn()}\n icon={<LogIn {...iconProps} />}\n />}\n {!user && <Item\n text=\"Sign up\"\n onClick={async () => await app.redirectToSignUp()}\n icon={<UserPlus {...iconProps}/> }\n />}\n {user && props.extraItems && props.extraItems.map((item, index) => (\n <Item key={index} {...item} />\n ))}\n {props.colorModeToggle && (\n <Item\n text=\"Toggle theme\"\n onClick={props.colorModeToggle}\n icon={<SunMoon {...iconProps} />}\n />\n )}\n {user && <Item\n text=\"Sign out\"\n onClick={() => user.signOut()}\n icon={<LogOut {...iconProps} />}\n />}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -23,7 +23,7 @@ import { constructRedirectUrl } from "../utils/url";
|
|
|
23
23
|
import { addNewOAuthProviderOrScope, callOAuthCallback, signInWithOAuth } from "./auth";
|
|
24
24
|
import { deleteCookie, getCookie, setOrDeleteCookie } from "./cookie";
|
|
25
25
|
var NextNavigation = scrambleDuringCompileTime(NextNavigationUnscrambled);
|
|
26
|
-
var clientVersion = "js @stackframe/stack@2.5.
|
|
26
|
+
var clientVersion = "js @stackframe/stack@2.5.11";
|
|
27
27
|
function getUrls(partial) {
|
|
28
28
|
const handler = partial.handler ?? "/handler";
|
|
29
29
|
const home = partial.home ?? "/";
|
|
@@ -1033,24 +1033,15 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
|
|
|
1033
1033
|
});
|
|
1034
1034
|
}
|
|
1035
1035
|
async _updateServerUser(userId, update) {
|
|
1036
|
-
const result = await this._interface.updateServerUser(userId,
|
|
1036
|
+
const result = await this._interface.updateServerUser(userId, serverUserUpdateOptionsToCrud(update));
|
|
1037
1037
|
await this._refreshUsers();
|
|
1038
1038
|
return result;
|
|
1039
1039
|
}
|
|
1040
|
-
|
|
1040
|
+
_serverUserFromCrud(crud) {
|
|
1041
1041
|
const app = this;
|
|
1042
|
-
if (!crud) {
|
|
1043
|
-
throw new StackAssertionError("User not found");
|
|
1044
|
-
}
|
|
1045
1042
|
return {
|
|
1046
1043
|
...super._createBaseUser(crud),
|
|
1047
|
-
|
|
1048
|
-
// server user
|
|
1049
|
-
serverMetadata: crud.server_metadata
|
|
1050
|
-
} : {},
|
|
1051
|
-
async setServerMetadata(metadata) {
|
|
1052
|
-
await app._updateServerUser(crud.id, { serverMetadata: metadata });
|
|
1053
|
-
},
|
|
1044
|
+
serverMetadata: crud.server_metadata,
|
|
1054
1045
|
async setPrimaryEmail(email, options) {
|
|
1055
1046
|
await app._updateServerUser(crud.id, { primaryEmail: email, primaryEmailVerified: options?.verified });
|
|
1056
1047
|
},
|
|
@@ -1078,21 +1069,16 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
|
|
|
1078
1069
|
return tokens;
|
|
1079
1070
|
}
|
|
1080
1071
|
};
|
|
1081
|
-
}
|
|
1082
|
-
};
|
|
1083
|
-
}
|
|
1084
|
-
_createUserExtra(crud) {
|
|
1085
|
-
if (!crud) {
|
|
1086
|
-
throw new StackAssertionError("User not found");
|
|
1087
|
-
}
|
|
1088
|
-
const app = this;
|
|
1089
|
-
return {
|
|
1072
|
+
},
|
|
1090
1073
|
async setDisplayName(displayName) {
|
|
1091
1074
|
return await this.update({ displayName });
|
|
1092
1075
|
},
|
|
1093
1076
|
async setClientMetadata(metadata) {
|
|
1094
1077
|
return await this.update({ clientMetadata: metadata });
|
|
1095
1078
|
},
|
|
1079
|
+
async setServerMetadata(metadata) {
|
|
1080
|
+
return await this.update({ serverMetadata: metadata });
|
|
1081
|
+
},
|
|
1096
1082
|
async setSelectedTeam(team) {
|
|
1097
1083
|
return await this.update({ selectedTeamId: team?.id ?? null });
|
|
1098
1084
|
},
|
|
@@ -1153,12 +1139,6 @@ var _StackServerAppImpl = class extends _StackClientAppImpl {
|
|
|
1153
1139
|
}
|
|
1154
1140
|
};
|
|
1155
1141
|
}
|
|
1156
|
-
_serverUserFromCrud(crud) {
|
|
1157
|
-
return {
|
|
1158
|
-
...this._createUserExtra(crud),
|
|
1159
|
-
...this._createBaseUser(crud)
|
|
1160
|
-
};
|
|
1161
|
-
}
|
|
1162
1142
|
_currentUserFromCrud(crud, session) {
|
|
1163
1143
|
const app = this;
|
|
1164
1144
|
const currentUser = {
|
|
@@ -1393,7 +1373,8 @@ var _StackAdminAppImpl = class extends _StackServerAppImpl {
|
|
|
1393
1373
|
enabled: p.enabled,
|
|
1394
1374
|
type: "standard",
|
|
1395
1375
|
clientId: p.client_id ?? throwErr("Client ID is missing"),
|
|
1396
|
-
clientSecret: p.client_secret ?? throwErr("Client secret is missing")
|
|
1376
|
+
clientSecret: p.client_secret ?? throwErr("Client secret is missing"),
|
|
1377
|
+
facebookConfigId: p.facebook_config_id
|
|
1397
1378
|
}),
|
|
1398
1379
|
emailConfig: data.config.email_config.type === "shared" ? {
|
|
1399
1380
|
type: "shared"
|
|
@@ -1525,7 +1506,7 @@ var _StackAdminAppImpl = class extends _StackServerAppImpl {
|
|
|
1525
1506
|
return this._serverTeamPermissionDefinitionFromCrud(crud);
|
|
1526
1507
|
}
|
|
1527
1508
|
async updateTeamPermissionDefinition(permissionId, data) {
|
|
1528
|
-
await this._interface.updatePermissionDefinition(permissionId, data);
|
|
1509
|
+
await this._interface.updatePermissionDefinition(permissionId, serverTeamPermissionDefinitionUpdateOptionsToCrud(data));
|
|
1529
1510
|
await this._adminTeamPermissionDefinitionsCache.refresh([]);
|
|
1530
1511
|
}
|
|
1531
1512
|
async deleteTeamPermissionDefinition(permissionId) {
|
|
@@ -1559,6 +1540,18 @@ function userUpdateOptionsToCrud(options) {
|
|
|
1559
1540
|
selected_team_id: options.selectedTeamId
|
|
1560
1541
|
};
|
|
1561
1542
|
}
|
|
1543
|
+
function serverUserUpdateOptionsToCrud(options) {
|
|
1544
|
+
return {
|
|
1545
|
+
display_name: options.displayName,
|
|
1546
|
+
primary_email: options.primaryEmail,
|
|
1547
|
+
client_metadata: options.clientMetadata,
|
|
1548
|
+
server_metadata: options.serverMetadata,
|
|
1549
|
+
selected_team_id: options.selectedTeamId,
|
|
1550
|
+
primary_email_auth_enabled: options.primaryEmailAuthEnabled,
|
|
1551
|
+
primary_email_verified: options.primaryEmailVerified,
|
|
1552
|
+
password: options.password
|
|
1553
|
+
};
|
|
1554
|
+
}
|
|
1562
1555
|
function adminProjectUpdateOptionsToCrud(options) {
|
|
1563
1556
|
return {
|
|
1564
1557
|
display_name: options.displayName,
|
|
@@ -1575,7 +1568,8 @@ function adminProjectUpdateOptionsToCrud(options) {
|
|
|
1575
1568
|
type: p.type,
|
|
1576
1569
|
...p.type === "standard" && {
|
|
1577
1570
|
client_id: p.clientId,
|
|
1578
|
-
client_secret: p.clientSecret
|
|
1571
|
+
client_secret: p.clientSecret,
|
|
1572
|
+
facebook_config_id: p.facebookConfigId
|
|
1579
1573
|
}
|
|
1580
1574
|
})),
|
|
1581
1575
|
email_config: options.config?.emailConfig && (options.config.emailConfig.type === "shared" ? {
|