@kky42/pievo-server 2.4.12 → 2.4.13
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/.output/nitro.json +1 -1
- package/.output/public/assets/SignIn-CDCdDD1a.js +1 -0
- package/.output/public/assets/{ui-s5IMg6RF.js → actionUi-D8m1FDHO.js} +1 -1
- package/.output/public/assets/app-PPhgN9iN.css +2 -0
- package/.output/public/assets/index-c0XPWXuz.js +10 -0
- package/.output/public/assets/loops._loopId-D7i_BGiE.js +67 -0
- package/.output/public/assets/loops._loopId_.runs._runId-CksSrEY7.js +3 -0
- package/.output/public/assets/{preload-helper-Bs7oCAsw.js → preload-helper-Zcmr31XG.js} +3 -3
- package/.output/public/assets/routes-79D939J4.js +1 -0
- package/.output/public/assets/routes-BYgl3Tmv.js +1 -0
- package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
- package/.output/server/_ssr/{MachinesModal-BhRw7oOx.mjs → MachinesModal-DBIP648Z.mjs} +18 -57
- package/.output/server/_ssr/{SignIn-BhoZIOUp.mjs → SignIn-Bp3uWaCQ.mjs} +3 -3
- package/.output/server/_ssr/{ui-DGz-q9MT.mjs → actionUi-C_WswNb1.mjs} +113 -2
- package/.output/server/_ssr/{artifactFiles-ChuJ4PzC.mjs → artifactFiles-BvVmixrs.mjs} +3 -3
- package/.output/server/_ssr/{artifactKind-DXumOv7c.mjs → artifactKind-DRCbYHZU.mjs} +6 -14
- package/.output/server/_ssr/artifacts-CzDJLaa6.mjs +2 -0
- package/.output/server/_ssr/{auth-LwPp_iim.mjs → auth-BV0MxVdo.mjs} +44 -124
- package/.output/server/_ssr/{SocialLinks-DVCLmql0.mjs → auth-client-RTpMpT4L.mjs} +143 -109
- package/.output/server/_ssr/boot-CsLXrLEa.mjs +2 -0
- package/.output/server/_ssr/{boot-BIxtZHU-.mjs → boot-U-CFI65B.mjs} +58 -331
- package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-CHMDkKqA.mjs → bun-sqlite-dialect-BW9W1_Ps-D9KUBJ-L.mjs} +2 -2
- package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-DYum6qky.mjs → d1-sqlite-dialect-BLC8LXE6-CVHRzH1n.mjs} +2 -2
- package/.output/server/_ssr/db-BTX-xORB.mjs +2 -0
- package/.output/server/_ssr/{dist-bWqs5sTy.mjs → dist-D7UDVZ5G.mjs} +2 -2
- package/.output/server/_ssr/{factory-pBwrjVTI.mjs → factory-DYFx1fg-.mjs} +2 -2
- package/.output/server/_ssr/{kysely-adapter-DMf5pFTf.mjs → kysely-adapter-CwdB7yBh.mjs} +1 -1
- package/.output/server/_ssr/logger-CwiKSMp6.mjs +2 -0
- package/.output/server/_ssr/{loopApi-Im6JSK0p.mjs → loopApi-C4nN0msL.mjs} +29 -90
- package/.output/server/_ssr/{loopProjection-DIpGR6rp.mjs → loopProjection-DMSNHux6.mjs} +2 -2
- package/.output/server/_ssr/{loops._loopId-B5iPseDG.mjs → loops._loopId-Q4pRYPip.mjs} +19 -45
- package/.output/server/_ssr/{loops._loopId_.runs._runId-DVtG0xYb.mjs → loops._loopId_.runs._runId-DNXVmCt5.mjs} +6 -13
- package/.output/server/_ssr/{loops._loopId_.runs._runId-BA-P6sGA.mjs → loops._loopId_.runs._runId-ty3AhkOi.mjs} +31 -23
- package/.output/server/_ssr/{machineFns-Bb9KNXun.mjs → machineFns-CkNms3zA.mjs} +41 -108
- package/.output/server/_ssr/{node-sqlite-dialect-Dho9YjXb.mjs → node-sqlite-dialect-B_g92oFK.mjs} +2 -2
- package/.output/server/_ssr/{router-C8iotXtk.mjs → router-DCNZ2xLm.mjs} +26 -40
- package/.output/server/_ssr/routes-8JSF7bX_.mjs +27 -0
- package/.output/server/_ssr/{routes-FO0MFfYK.mjs → routes-B3fulW5I.mjs} +4 -9
- package/.output/server/_ssr/routes-BaanDO41.mjs +367 -0
- package/.output/server/_ssr/runDiff-D7CxAgYL.mjs +2 -0
- package/.output/server/_ssr/ssr.mjs +28 -88
- package/.output/server/_ssr/store-DSNbXxqz.mjs +2 -0
- package/.output/server/_ssr/tokens-DzUv7CCp.mjs +2 -0
- package/.output/server/_tanstack-start-manifest_v-DkmxsHDK.mjs +52 -0
- package/.output/server/drizzle/0002_remove_teams.sql +15 -0
- package/.output/server/drizzle/meta/_journal.json +7 -0
- package/.output/server/index.mjs +49 -98
- package/drizzle/0002_remove_teams.sql +15 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +2 -2
- package/.output/public/assets/MachinesModal-ByHejech.js +0 -1
- package/.output/public/assets/SignIn-Cf4HOpdF.js +0 -1
- package/.output/public/assets/actionUi-yYVvoOTn.js +0 -1
- package/.output/public/assets/app-D5Hy4BcS.css +0 -2
- package/.output/public/assets/index-D504r3X9.js +0 -10
- package/.output/public/assets/invite._token-B0EKVyrU.js +0 -1
- package/.output/public/assets/invite._token-BSnGRyUw.js +0 -1
- package/.output/public/assets/lifecycleUi-C0DaC6NM.js +0 -1
- package/.output/public/assets/loops._loopId-j5EB2PLW.js +0 -67
- package/.output/public/assets/loops._loopId_.runs._runId-BICo_pRz.js +0 -3
- package/.output/public/assets/routes-4N6mrQK_.js +0 -1
- package/.output/public/assets/routes-DZU0Tqka.js +0 -1
- package/.output/public/assets/t._teamId-CAUjvMZ6.js +0 -1
- package/.output/public/assets/t._teamId-Cqzd69sO.js +0 -1
- package/.output/server/_ssr/DashboardView-DrKNkmcX.mjs +0 -867
- package/.output/server/_ssr/actionUi-Cf6DuEC2.mjs +0 -119
- package/.output/server/_ssr/artifacts-DOLHJHcd.mjs +0 -2
- package/.output/server/_ssr/boot-D8cj4uZj.mjs +0 -2
- package/.output/server/_ssr/db-BphSJs66.mjs +0 -2
- package/.output/server/_ssr/invite._token-CPSvdDox.mjs +0 -27
- package/.output/server/_ssr/invite._token-CRBsTSTZ.mjs +0 -84
- package/.output/server/_ssr/invite._token-CaTLt92a.mjs +0 -20
- package/.output/server/_ssr/lifecycleUi-DauKavgx.mjs +0 -50
- package/.output/server/_ssr/logger-EinA2J6y.mjs +0 -2
- package/.output/server/_ssr/routes-CsV1weub.mjs +0 -26
- package/.output/server/_ssr/routes-fiMzFtcP.mjs +0 -39
- package/.output/server/_ssr/runDiff-BLdot9mi.mjs +0 -2
- package/.output/server/_ssr/store-CFCp_ggC.mjs +0 -2
- package/.output/server/_ssr/t._teamId-BYA4Dnjp.mjs +0 -43
- package/.output/server/_ssr/t._teamId-CKsrgN86.mjs +0 -32
- package/.output/server/_ssr/t._teamId-D1BTwhWf.mjs +0 -31
- package/.output/server/_ssr/teamCookie-B7hLOIie.mjs +0 -10
- package/.output/server/_ssr/teamFns-DfqtuBW2.mjs +0 -451
- package/.output/server/_ssr/teamFns-cI_tsiCv.mjs +0 -32
- package/.output/server/_ssr/tokens-CUz4LDLm.mjs +0 -2
- package/.output/server/_tanstack-start-manifest_v-xSxVtI1J.mjs +0 -86
|
@@ -1,451 +0,0 @@
|
|
|
1
|
-
import { A as ensureServer, At as redeemInviteAtomic, Mt as removeTeamMemberGuarded, Nt as renameTeam$2, O as deleteInvite, S as createInvite$1, U as getInvite, X as getTeamMember, Y as getTeam, Yt as userByEmail, _t as listTeamsForUser, gt as listTeamMembers, k as deleteTeamCascade, m as addTeamMember$1, nt as isPersonalTeam, pt as listPendingInvites, v as countLoopsForTeam, w as createTeam$2, zt as setTeamMemberRoleGuarded } from "./boot-BIxtZHU-.mjs";
|
|
2
|
-
import { authEnabled, currentUserId } from "./auth-LwPp_iim.mjs";
|
|
3
|
-
import { n as createServerFn } from "./ssr.mjs";
|
|
4
|
-
import { t as createServerRpc } from "./createServerRpc-BD8Xn_0_.mjs";
|
|
5
|
-
import { randomUUID } from "node:crypto";
|
|
6
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/teamFns-DfqtuBW2.js
|
|
7
|
-
/** Framework-free team authorization and membership rules. Every operation uses an
|
|
8
|
-
* explicit team id; management is owner-only, personal teams cannot be left or
|
|
9
|
-
* deleted, each team retains an owner, loops block deletion, and invites never
|
|
10
|
-
* bypass the login gate. */
|
|
11
|
-
var INVITE_TTL_MS = 10080 * 60 * 1e3;
|
|
12
|
-
var NAME_MAX = 80;
|
|
13
|
-
function cleanName(raw) {
|
|
14
|
-
return (raw || "").trim().slice(0, NAME_MAX) || null;
|
|
15
|
-
}
|
|
16
|
-
function isRole(v) {
|
|
17
|
-
return v === "owner" || v === "member";
|
|
18
|
-
}
|
|
19
|
-
async function roleOf(teamId, userId) {
|
|
20
|
-
return (await getTeamMember(teamId, userId))?.role ?? null;
|
|
21
|
-
}
|
|
22
|
-
/** Every team the actor belongs to, with their role + member count (the settings
|
|
23
|
-
* master list; doubles as a richer switcher). */
|
|
24
|
-
async function listManagedTeams$1(userId) {
|
|
25
|
-
const teams = await listTeamsForUser(userId);
|
|
26
|
-
return Promise.all(teams.map(async (t) => {
|
|
27
|
-
const members = await listTeamMembers(t.id);
|
|
28
|
-
const me = members.find((m) => m.userId === userId);
|
|
29
|
-
return {
|
|
30
|
-
id: t.id,
|
|
31
|
-
name: t.name,
|
|
32
|
-
role: me?.role ?? "member",
|
|
33
|
-
memberCount: members.length,
|
|
34
|
-
personal: isPersonalTeam(t)
|
|
35
|
-
};
|
|
36
|
-
}));
|
|
37
|
-
}
|
|
38
|
-
/** Full settings detail for one team, authorized by membership (any member may
|
|
39
|
-
* view the roster; only an owner sees the pending invite links). Null ⇒ the
|
|
40
|
-
* actor is not a member (caller renders the generic not-found, no leak). */
|
|
41
|
-
async function getTeamDetail$1(userId, teamId) {
|
|
42
|
-
const team = await getTeam(teamId);
|
|
43
|
-
if (!team) return null;
|
|
44
|
-
const myRole = await roleOf(teamId, userId);
|
|
45
|
-
if (!myRole) return null;
|
|
46
|
-
const members = await listTeamMembers(teamId);
|
|
47
|
-
const loopCount = await countLoopsForTeam(teamId);
|
|
48
|
-
const invites = myRole === "owner" ? await listPendingInvites(teamId) : [];
|
|
49
|
-
return {
|
|
50
|
-
id: team.id,
|
|
51
|
-
name: team.name,
|
|
52
|
-
role: myRole,
|
|
53
|
-
personal: isPersonalTeam(team),
|
|
54
|
-
loopCount,
|
|
55
|
-
members: members.map((m) => ({
|
|
56
|
-
userId: m.userId,
|
|
57
|
-
email: m.email,
|
|
58
|
-
displayName: m.displayName,
|
|
59
|
-
role: m.role,
|
|
60
|
-
isSelf: m.userId === userId
|
|
61
|
-
})),
|
|
62
|
-
invites: invites.map(inviteView)
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
function inviteView(i) {
|
|
66
|
-
return {
|
|
67
|
-
token: i.token,
|
|
68
|
-
role: i.role,
|
|
69
|
-
expiresAt: i.expiresAt
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
/** Owner-gate helper: the actor must be an OWNER of the team. Returns the FAILURE
|
|
73
|
-
* result to bubble up (assignable to any `Result<T>`), or null when authorized. */
|
|
74
|
-
async function assertOwner(teamId, userId) {
|
|
75
|
-
const role = await roleOf(teamId, userId);
|
|
76
|
-
if (!role) return {
|
|
77
|
-
ok: false,
|
|
78
|
-
error: "This team does not exist, or you do not have access to it."
|
|
79
|
-
};
|
|
80
|
-
if (role !== "owner") return {
|
|
81
|
-
ok: false,
|
|
82
|
-
error: "Only a team owner can manage this team."
|
|
83
|
-
};
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
async function createTeam$1(userId, name) {
|
|
87
|
-
const clean = cleanName(name);
|
|
88
|
-
if (!clean) return {
|
|
89
|
-
ok: false,
|
|
90
|
-
error: "Team name is required."
|
|
91
|
-
};
|
|
92
|
-
return {
|
|
93
|
-
ok: true,
|
|
94
|
-
id: (await createTeam$2(clean, userId)).id
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
async function renameTeam$1(userId, teamId, name) {
|
|
98
|
-
const gate = await assertOwner(teamId, userId);
|
|
99
|
-
if (gate) return gate;
|
|
100
|
-
const clean = cleanName(name);
|
|
101
|
-
if (!clean) return {
|
|
102
|
-
ok: false,
|
|
103
|
-
error: "Team name is required."
|
|
104
|
-
};
|
|
105
|
-
await renameTeam$2(teamId, clean);
|
|
106
|
-
return { ok: true };
|
|
107
|
-
}
|
|
108
|
-
function blockedByLoops(loopCount) {
|
|
109
|
-
const one = loopCount === 1;
|
|
110
|
-
return {
|
|
111
|
-
ok: false,
|
|
112
|
-
error: `This team still owns ${loopCount} loop${one ? "" : "s"} — move or delete ${one ? "it" : "them"} first.`
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
async function deleteTeam$1(userId, teamId) {
|
|
116
|
-
const gate = await assertOwner(teamId, userId);
|
|
117
|
-
if (gate) return gate;
|
|
118
|
-
const team = await getTeam(teamId);
|
|
119
|
-
if (!team) return {
|
|
120
|
-
ok: false,
|
|
121
|
-
error: "This team no longer exists."
|
|
122
|
-
};
|
|
123
|
-
if (isPersonalTeam(team)) return {
|
|
124
|
-
ok: false,
|
|
125
|
-
error: "Your personal team can't be deleted."
|
|
126
|
-
};
|
|
127
|
-
const loopCount = await countLoopsForTeam(teamId);
|
|
128
|
-
if (loopCount > 0) return blockedByLoops(loopCount);
|
|
129
|
-
if (await deleteTeamCascade(teamId) === "has-loops") return blockedByLoops(await countLoopsForTeam(teamId));
|
|
130
|
-
return { ok: true };
|
|
131
|
-
}
|
|
132
|
-
/** Add an existing account directly; otherwise direct the owner to an invite. */
|
|
133
|
-
async function addMemberByEmail(userId, teamId, email, role) {
|
|
134
|
-
const gate = await assertOwner(teamId, userId);
|
|
135
|
-
if (gate) return gate;
|
|
136
|
-
if (!isRole(role)) return {
|
|
137
|
-
ok: false,
|
|
138
|
-
error: "Invalid role."
|
|
139
|
-
};
|
|
140
|
-
const addr = (email || "").trim();
|
|
141
|
-
if (!addr) return {
|
|
142
|
-
ok: false,
|
|
143
|
-
error: "An email address is required."
|
|
144
|
-
};
|
|
145
|
-
const target = await userByEmail(addr);
|
|
146
|
-
if (!target) return {
|
|
147
|
-
ok: false,
|
|
148
|
-
error: "No Pievo account uses that email yet. Generate an invite link they can redeem after signing in."
|
|
149
|
-
};
|
|
150
|
-
if (await getTeamMember(teamId, target.id)) return {
|
|
151
|
-
ok: false,
|
|
152
|
-
error: `${target.email} is already a member of this team.`
|
|
153
|
-
};
|
|
154
|
-
await addTeamMember$1(teamId, target.id, role);
|
|
155
|
-
return {
|
|
156
|
-
ok: true,
|
|
157
|
-
added: target.email
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
async function setMemberRole(userId, teamId, targetUserId, role) {
|
|
161
|
-
const gate = await assertOwner(teamId, userId);
|
|
162
|
-
if (gate) return gate;
|
|
163
|
-
if (!isRole(role)) return {
|
|
164
|
-
ok: false,
|
|
165
|
-
error: "Invalid role."
|
|
166
|
-
};
|
|
167
|
-
const outcome = await setTeamMemberRoleGuarded(teamId, targetUserId, role);
|
|
168
|
-
if (outcome === "not-member") return {
|
|
169
|
-
ok: false,
|
|
170
|
-
error: "That person is not a member of this team."
|
|
171
|
-
};
|
|
172
|
-
if (outcome === "last-owner") return {
|
|
173
|
-
ok: false,
|
|
174
|
-
error: "This is the team's only owner — promote another owner first."
|
|
175
|
-
};
|
|
176
|
-
return { ok: true };
|
|
177
|
-
}
|
|
178
|
-
async function removeMember(userId, teamId, targetUserId) {
|
|
179
|
-
const gate = await assertOwner(teamId, userId);
|
|
180
|
-
if (gate) return gate;
|
|
181
|
-
if (targetUserId === userId) return {
|
|
182
|
-
ok: false,
|
|
183
|
-
error: "Use “Leave team” to remove yourself."
|
|
184
|
-
};
|
|
185
|
-
const outcome = await removeTeamMemberGuarded(teamId, targetUserId);
|
|
186
|
-
if (outcome === "not-member") return {
|
|
187
|
-
ok: false,
|
|
188
|
-
error: "That person is not a member of this team."
|
|
189
|
-
};
|
|
190
|
-
if (outcome === "last-owner") return {
|
|
191
|
-
ok: false,
|
|
192
|
-
error: "This is the team's only owner — promote another owner first."
|
|
193
|
-
};
|
|
194
|
-
return { ok: true };
|
|
195
|
-
}
|
|
196
|
-
/** Leave a team (any member). The personal team can't be left; the last owner
|
|
197
|
-
* can't leave (transfer ownership or delete the team first). */
|
|
198
|
-
async function leaveTeam$1(userId, teamId) {
|
|
199
|
-
const team = await getTeam(teamId);
|
|
200
|
-
if (!team) return {
|
|
201
|
-
ok: false,
|
|
202
|
-
error: "This team no longer exists."
|
|
203
|
-
};
|
|
204
|
-
if (!await roleOf(teamId, userId)) return {
|
|
205
|
-
ok: false,
|
|
206
|
-
error: "You are not a member of this team."
|
|
207
|
-
};
|
|
208
|
-
if (isPersonalTeam(team)) return {
|
|
209
|
-
ok: false,
|
|
210
|
-
error: "You can't leave your personal team."
|
|
211
|
-
};
|
|
212
|
-
const outcome = await removeTeamMemberGuarded(teamId, userId);
|
|
213
|
-
if (outcome === "last-owner") return {
|
|
214
|
-
ok: false,
|
|
215
|
-
error: "You are the team's only owner — promote another owner or delete the team first."
|
|
216
|
-
};
|
|
217
|
-
if (outcome === "not-member") return {
|
|
218
|
-
ok: false,
|
|
219
|
-
error: "You are not a member of this team."
|
|
220
|
-
};
|
|
221
|
-
return { ok: true };
|
|
222
|
-
}
|
|
223
|
-
async function createInvite(userId, teamId, role, nowMs) {
|
|
224
|
-
const gate = await assertOwner(teamId, userId);
|
|
225
|
-
if (gate) return gate;
|
|
226
|
-
if (!isRole(role)) return {
|
|
227
|
-
ok: false,
|
|
228
|
-
error: "Invalid role."
|
|
229
|
-
};
|
|
230
|
-
const invite = await createInvite$1({
|
|
231
|
-
token: `inv_${randomUUID().replace(/-/g, "")}${randomUUID().replace(/-/g, "").slice(0, 8)}`,
|
|
232
|
-
teamId,
|
|
233
|
-
role,
|
|
234
|
-
invitedByUserId: userId,
|
|
235
|
-
expiresAt: new Date(nowMs + INVITE_TTL_MS).toISOString()
|
|
236
|
-
});
|
|
237
|
-
return {
|
|
238
|
-
ok: true,
|
|
239
|
-
token: invite.token,
|
|
240
|
-
expiresAt: invite.expiresAt,
|
|
241
|
-
role: invite.role
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
async function revokeInvite(userId, teamId, token) {
|
|
245
|
-
const gate = await assertOwner(teamId, userId);
|
|
246
|
-
if (gate) return gate;
|
|
247
|
-
const invite = await getInvite(token);
|
|
248
|
-
if (!invite || invite.teamId !== teamId) return {
|
|
249
|
-
ok: false,
|
|
250
|
-
error: "That invite no longer exists."
|
|
251
|
-
};
|
|
252
|
-
await deleteInvite(token);
|
|
253
|
-
return { ok: true };
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Redeem an invite as the signed-in actor. Any signed-in user may redeem (the
|
|
257
|
-
* link is the authority, not team membership); normal sign-in already applied the
|
|
258
|
-
* login allowlist. Outcomes:
|
|
259
|
-
* - invalid token / wrong shape → error;
|
|
260
|
-
* - already redeemed (single-use) → error;
|
|
261
|
-
* - expired → error;
|
|
262
|
-
* - already a member → success, no double-add (`alreadyMember`);
|
|
263
|
-
* - otherwise → membership granted at the invite's role.
|
|
264
|
-
*/
|
|
265
|
-
async function redeemInvite(userId, token, nowMs) {
|
|
266
|
-
const invite = await getInvite(token);
|
|
267
|
-
if (!invite) return {
|
|
268
|
-
ok: false,
|
|
269
|
-
error: "This invite link is invalid."
|
|
270
|
-
};
|
|
271
|
-
if (invite.redeemedAt) return {
|
|
272
|
-
ok: false,
|
|
273
|
-
error: "This invite link has already been used."
|
|
274
|
-
};
|
|
275
|
-
if (new Date(invite.expiresAt).getTime() <= nowMs) return {
|
|
276
|
-
ok: false,
|
|
277
|
-
error: "This invite link has expired."
|
|
278
|
-
};
|
|
279
|
-
const team = await getTeam(invite.teamId);
|
|
280
|
-
if (!team) return {
|
|
281
|
-
ok: false,
|
|
282
|
-
error: "The team for this invite no longer exists."
|
|
283
|
-
};
|
|
284
|
-
const already = !!await getTeamMember(invite.teamId, userId);
|
|
285
|
-
if (!await redeemInviteAtomic(token, userId, already ? null : {
|
|
286
|
-
teamId: invite.teamId,
|
|
287
|
-
role: invite.role
|
|
288
|
-
})) return {
|
|
289
|
-
ok: false,
|
|
290
|
-
error: "This invite link has already been used."
|
|
291
|
-
};
|
|
292
|
-
return {
|
|
293
|
-
ok: true,
|
|
294
|
-
teamId: invite.teamId,
|
|
295
|
-
teamName: team.name,
|
|
296
|
-
alreadyMember: already
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Team management server functions — the thin RPC surface over `teamAdmin`
|
|
301
|
-
* (which holds all the rules + authorization). Every mutating fn takes an
|
|
302
|
-
* EXPLICIT teamId and authorizes by membership + role inside teamAdmin, never the
|
|
303
|
-
* active-team cookie (the URL report's hard lesson: managing team B while browsing
|
|
304
|
-
* team A must work). Team management is a GATED feature — it needs a real
|
|
305
|
-
* signed-in user, so open mode (single shared workspace, no identities) returns a
|
|
306
|
-
* uniform "sign-in required" error.
|
|
307
|
-
*/
|
|
308
|
-
var SIGNIN_REQUIRED = {
|
|
309
|
-
ok: false,
|
|
310
|
-
error: "Team management requires signing in."
|
|
311
|
-
};
|
|
312
|
-
async function actor() {
|
|
313
|
-
if (!authEnabled) return null;
|
|
314
|
-
return currentUserId();
|
|
315
|
-
}
|
|
316
|
-
/** GET — every team the caller manages/belongs to (role + member count). Open
|
|
317
|
-
* mode / signed-out ⇒ empty (the settings surface is gated). */
|
|
318
|
-
var listManagedTeams_createServerFn_handler = createServerRpc({
|
|
319
|
-
id: "94d1108f156fa2273cb78140852e9c3e368de0b8321db0de932a16567671716f",
|
|
320
|
-
name: "listManagedTeams",
|
|
321
|
-
filename: "src/server/teamFns.ts"
|
|
322
|
-
}, (opts) => listManagedTeams.__executeServer(opts));
|
|
323
|
-
var listManagedTeams = createServerFn({ method: "GET" }).handler(listManagedTeams_createServerFn_handler, async () => {
|
|
324
|
-
await ensureServer();
|
|
325
|
-
const userId = await actor();
|
|
326
|
-
if (!userId) return [];
|
|
327
|
-
return listManagedTeams$1(userId);
|
|
328
|
-
});
|
|
329
|
-
var getTeamDetail_createServerFn_handler = createServerRpc({
|
|
330
|
-
id: "fc7a4775f418dde12f422ff9ca65d9e07428fb0dc35c9399592c0081467330bf",
|
|
331
|
-
name: "getTeamDetail",
|
|
332
|
-
filename: "src/server/teamFns.ts"
|
|
333
|
-
}, (opts) => getTeamDetail.__executeServer(opts));
|
|
334
|
-
var getTeamDetail = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(getTeamDetail_createServerFn_handler, async ({ data: teamId }) => {
|
|
335
|
-
await ensureServer();
|
|
336
|
-
const userId = await actor();
|
|
337
|
-
if (!userId) return { error: SIGNIN_REQUIRED.error };
|
|
338
|
-
return await getTeamDetail$1(userId, teamId) ?? { error: "This team does not exist, or you do not have access to it." };
|
|
339
|
-
});
|
|
340
|
-
var createTeam_createServerFn_handler = createServerRpc({
|
|
341
|
-
id: "0f279cfe81021a642289ce6e95622e7198aaeab4147880f85824a02ee9ebafcf",
|
|
342
|
-
name: "createTeam",
|
|
343
|
-
filename: "src/server/teamFns.ts"
|
|
344
|
-
}, (opts) => createTeam.__executeServer(opts));
|
|
345
|
-
var createTeam = createServerFn({ method: "POST" }).validator((name) => name).handler(createTeam_createServerFn_handler, async ({ data: name }) => {
|
|
346
|
-
await ensureServer();
|
|
347
|
-
const userId = await actor();
|
|
348
|
-
if (!userId) return SIGNIN_REQUIRED;
|
|
349
|
-
return createTeam$1(userId, name);
|
|
350
|
-
});
|
|
351
|
-
var renameTeam_createServerFn_handler = createServerRpc({
|
|
352
|
-
id: "5721e01d84c20ffde19d2191648d76a7e5ede3bbb4f44efa59107a786947cf27",
|
|
353
|
-
name: "renameTeam",
|
|
354
|
-
filename: "src/server/teamFns.ts"
|
|
355
|
-
}, (opts) => renameTeam.__executeServer(opts));
|
|
356
|
-
var renameTeam = createServerFn({ method: "POST" }).validator((d) => d).handler(renameTeam_createServerFn_handler, async ({ data }) => {
|
|
357
|
-
await ensureServer();
|
|
358
|
-
const userId = await actor();
|
|
359
|
-
if (!userId) return SIGNIN_REQUIRED;
|
|
360
|
-
return renameTeam$1(userId, data.teamId, data.name);
|
|
361
|
-
});
|
|
362
|
-
var deleteTeam_createServerFn_handler = createServerRpc({
|
|
363
|
-
id: "d2372a81af17eb3a7e4c1407d6ef26a8a9522b66fd6a94858cb35c864b270d77",
|
|
364
|
-
name: "deleteTeam",
|
|
365
|
-
filename: "src/server/teamFns.ts"
|
|
366
|
-
}, (opts) => deleteTeam.__executeServer(opts));
|
|
367
|
-
var deleteTeam = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(deleteTeam_createServerFn_handler, async ({ data: teamId }) => {
|
|
368
|
-
await ensureServer();
|
|
369
|
-
const userId = await actor();
|
|
370
|
-
if (!userId) return SIGNIN_REQUIRED;
|
|
371
|
-
return deleteTeam$1(userId, teamId);
|
|
372
|
-
});
|
|
373
|
-
var addTeamMember_createServerFn_handler = createServerRpc({
|
|
374
|
-
id: "284cb82b5e5cb37242d053b1b14449760d8334e9dadffc6dcbba11db2200a709",
|
|
375
|
-
name: "addTeamMember",
|
|
376
|
-
filename: "src/server/teamFns.ts"
|
|
377
|
-
}, (opts) => addTeamMember.__executeServer(opts));
|
|
378
|
-
var addTeamMember = createServerFn({ method: "POST" }).validator((d) => d).handler(addTeamMember_createServerFn_handler, async ({ data }) => {
|
|
379
|
-
await ensureServer();
|
|
380
|
-
const userId = await actor();
|
|
381
|
-
if (!userId) return SIGNIN_REQUIRED;
|
|
382
|
-
return addMemberByEmail(userId, data.teamId, data.email, data.role);
|
|
383
|
-
});
|
|
384
|
-
var setTeamMemberRole_createServerFn_handler = createServerRpc({
|
|
385
|
-
id: "c3762cecd4a15f7eca064bca295255e942d7c3dce65f66f8593ae145fd7859a0",
|
|
386
|
-
name: "setTeamMemberRole",
|
|
387
|
-
filename: "src/server/teamFns.ts"
|
|
388
|
-
}, (opts) => setTeamMemberRole.__executeServer(opts));
|
|
389
|
-
var setTeamMemberRole = createServerFn({ method: "POST" }).validator((d) => d).handler(setTeamMemberRole_createServerFn_handler, async ({ data }) => {
|
|
390
|
-
await ensureServer();
|
|
391
|
-
const userId = await actor();
|
|
392
|
-
if (!userId) return SIGNIN_REQUIRED;
|
|
393
|
-
return setMemberRole(userId, data.teamId, data.userId, data.role);
|
|
394
|
-
});
|
|
395
|
-
var removeTeamMember_createServerFn_handler = createServerRpc({
|
|
396
|
-
id: "a3326ed8ecd726fbcc28a439bf0012983cbe387d5062e0155096ee5a558e313b",
|
|
397
|
-
name: "removeTeamMember",
|
|
398
|
-
filename: "src/server/teamFns.ts"
|
|
399
|
-
}, (opts) => removeTeamMember.__executeServer(opts));
|
|
400
|
-
var removeTeamMember = createServerFn({ method: "POST" }).validator((d) => d).handler(removeTeamMember_createServerFn_handler, async ({ data }) => {
|
|
401
|
-
await ensureServer();
|
|
402
|
-
const userId = await actor();
|
|
403
|
-
if (!userId) return SIGNIN_REQUIRED;
|
|
404
|
-
return removeMember(userId, data.teamId, data.userId);
|
|
405
|
-
});
|
|
406
|
-
var leaveTeam_createServerFn_handler = createServerRpc({
|
|
407
|
-
id: "fe7cc1df829414194e9b0615b86584c8510369da18f4d8805ccd76468cadf2ff",
|
|
408
|
-
name: "leaveTeam",
|
|
409
|
-
filename: "src/server/teamFns.ts"
|
|
410
|
-
}, (opts) => leaveTeam.__executeServer(opts));
|
|
411
|
-
var leaveTeam = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(leaveTeam_createServerFn_handler, async ({ data: teamId }) => {
|
|
412
|
-
await ensureServer();
|
|
413
|
-
const userId = await actor();
|
|
414
|
-
if (!userId) return SIGNIN_REQUIRED;
|
|
415
|
-
return leaveTeam$1(userId, teamId);
|
|
416
|
-
});
|
|
417
|
-
var createTeamInvite_createServerFn_handler = createServerRpc({
|
|
418
|
-
id: "bbc1020c771335020ef51b326d74b1649966740f273913d32040fa2c3c9f5f0b",
|
|
419
|
-
name: "createTeamInvite",
|
|
420
|
-
filename: "src/server/teamFns.ts"
|
|
421
|
-
}, (opts) => createTeamInvite.__executeServer(opts));
|
|
422
|
-
var createTeamInvite = createServerFn({ method: "POST" }).validator((d) => d).handler(createTeamInvite_createServerFn_handler, async ({ data }) => {
|
|
423
|
-
await ensureServer();
|
|
424
|
-
const userId = await actor();
|
|
425
|
-
if (!userId) return SIGNIN_REQUIRED;
|
|
426
|
-
return createInvite(userId, data.teamId, data.role, Date.now());
|
|
427
|
-
});
|
|
428
|
-
var revokeTeamInvite_createServerFn_handler = createServerRpc({
|
|
429
|
-
id: "b92e9a08eda2d217bf4028f90dbc6bf7d7e8d7c148ebb8a8330286b5935a3fa1",
|
|
430
|
-
name: "revokeTeamInvite",
|
|
431
|
-
filename: "src/server/teamFns.ts"
|
|
432
|
-
}, (opts) => revokeTeamInvite.__executeServer(opts));
|
|
433
|
-
var revokeTeamInvite = createServerFn({ method: "POST" }).validator((d) => d).handler(revokeTeamInvite_createServerFn_handler, async ({ data }) => {
|
|
434
|
-
await ensureServer();
|
|
435
|
-
const userId = await actor();
|
|
436
|
-
if (!userId) return SIGNIN_REQUIRED;
|
|
437
|
-
return revokeInvite(userId, data.teamId, data.token);
|
|
438
|
-
});
|
|
439
|
-
var redeemTeamInvite_createServerFn_handler = createServerRpc({
|
|
440
|
-
id: "6f5fe23f6da1d4aecc198b6f71a041c0fe29cabb6ccad807bb3f16c23c5bd9cd",
|
|
441
|
-
name: "redeemTeamInvite",
|
|
442
|
-
filename: "src/server/teamFns.ts"
|
|
443
|
-
}, (opts) => redeemTeamInvite.__executeServer(opts));
|
|
444
|
-
var redeemTeamInvite = createServerFn({ method: "POST" }).validator((token) => token).handler(redeemTeamInvite_createServerFn_handler, async ({ data: token }) => {
|
|
445
|
-
await ensureServer();
|
|
446
|
-
const userId = await actor();
|
|
447
|
-
if (!userId) return SIGNIN_REQUIRED;
|
|
448
|
-
return redeemInvite(userId, token, Date.now());
|
|
449
|
-
});
|
|
450
|
-
//#endregion
|
|
451
|
-
export { addTeamMember_createServerFn_handler, createTeamInvite_createServerFn_handler, createTeam_createServerFn_handler, deleteTeam_createServerFn_handler, getTeamDetail_createServerFn_handler, leaveTeam_createServerFn_handler, listManagedTeams_createServerFn_handler, redeemTeamInvite_createServerFn_handler, removeTeamMember_createServerFn_handler, renameTeam_createServerFn_handler, revokeTeamInvite_createServerFn_handler, setTeamMemberRole_createServerFn_handler };
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { n as createServerFn } from "./ssr.mjs";
|
|
2
|
-
import { o as createSsrRpc } from "./SocialLinks-DVCLmql0.mjs";
|
|
3
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/teamFns-cI_tsiCv.js
|
|
4
|
-
/**
|
|
5
|
-
* Team management server functions — the thin RPC surface over `teamAdmin`
|
|
6
|
-
* (which holds all the rules + authorization). Every mutating fn takes an
|
|
7
|
-
* EXPLICIT teamId and authorizes by membership + role inside teamAdmin, never the
|
|
8
|
-
* active-team cookie (the URL report's hard lesson: managing team B while browsing
|
|
9
|
-
* team A must work). Team management is a GATED feature — it needs a real
|
|
10
|
-
* signed-in user, so open mode (single shared workspace, no identities) returns a
|
|
11
|
-
* uniform "sign-in required" error.
|
|
12
|
-
*/
|
|
13
|
-
/** GET — every team the caller manages/belongs to (role + member count). Open
|
|
14
|
-
* mode / signed-out ⇒ empty (the settings surface is gated). */
|
|
15
|
-
var listManagedTeams = createServerFn({ method: "GET" }).handler(createSsrRpc("94d1108f156fa2273cb78140852e9c3e368de0b8321db0de932a16567671716f"));
|
|
16
|
-
/** GET — one team's full settings detail (roster + invites), authorized by
|
|
17
|
-
* membership. Missing/non-member ⇒ the generic not-found error (no leak). */
|
|
18
|
-
var getTeamDetail = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(createSsrRpc("fc7a4775f418dde12f422ff9ca65d9e07428fb0dc35c9399592c0081467330bf"));
|
|
19
|
-
var createTeam = createServerFn({ method: "POST" }).validator((name) => name).handler(createSsrRpc("0f279cfe81021a642289ce6e95622e7198aaeab4147880f85824a02ee9ebafcf"));
|
|
20
|
-
var renameTeam = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("5721e01d84c20ffde19d2191648d76a7e5ede3bbb4f44efa59107a786947cf27"));
|
|
21
|
-
var deleteTeam = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(createSsrRpc("d2372a81af17eb3a7e4c1407d6ef26a8a9522b66fd6a94858cb35c864b270d77"));
|
|
22
|
-
var addTeamMember = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("284cb82b5e5cb37242d053b1b14449760d8334e9dadffc6dcbba11db2200a709"));
|
|
23
|
-
var setTeamMemberRole = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("c3762cecd4a15f7eca064bca295255e942d7c3dce65f66f8593ae145fd7859a0"));
|
|
24
|
-
var removeTeamMember = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("a3326ed8ecd726fbcc28a439bf0012983cbe387d5062e0155096ee5a558e313b"));
|
|
25
|
-
var leaveTeam = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(createSsrRpc("fe7cc1df829414194e9b0615b86584c8510369da18f4d8805ccd76468cadf2ff"));
|
|
26
|
-
var createTeamInvite = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("bbc1020c771335020ef51b326d74b1649966740f273913d32040fa2c3c9f5f0b"));
|
|
27
|
-
var revokeTeamInvite = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("b92e9a08eda2d217bf4028f90dbc6bf7d7e8d7c148ebb8a8330286b5935a3fa1"));
|
|
28
|
-
/** POST — redeem an invite link as the signed-in caller. Any signed-in user may
|
|
29
|
-
* redeem (the token is the authority); open mode / signed-out is refused. */
|
|
30
|
-
var redeemTeamInvite = createServerFn({ method: "POST" }).validator((token) => token).handler(createSsrRpc("6f5fe23f6da1d4aecc198b6f71a041c0fe29cabb6ccad807bb3f16c23c5bd9cd"));
|
|
31
|
-
//#endregion
|
|
32
|
-
export { getTeamDetail as a, redeemTeamInvite as c, revokeTeamInvite as d, setTeamMemberRole as f, deleteTeam as i, removeTeamMember as l, createTeam as n, leaveTeam as o, createTeamInvite as r, listManagedTeams as s, addTeamMember as t, renameTeam as u };
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/_tanstack-start-manifest_v-xSxVtI1J.js
|
|
2
|
-
var tsrStartManifest = () => ({ routes: {
|
|
3
|
-
__root__: {
|
|
4
|
-
filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/__root.tsx",
|
|
5
|
-
children: [
|
|
6
|
-
"/",
|
|
7
|
-
"/api/health",
|
|
8
|
-
"/api/ready",
|
|
9
|
-
"/invite/$token",
|
|
10
|
-
"/loops/$loopId",
|
|
11
|
-
"/machine/report",
|
|
12
|
-
"/t/$teamId",
|
|
13
|
-
"/api/auth/$",
|
|
14
|
-
"/api/machine/cli",
|
|
15
|
-
"/api/machine/poll",
|
|
16
|
-
"/api/machine/status",
|
|
17
|
-
"/api/machine/sync",
|
|
18
|
-
"/api/artifact/$loopId/$",
|
|
19
|
-
"/api/machine/blob/$hash",
|
|
20
|
-
"/loops/$loopId_/runs/$runId"
|
|
21
|
-
],
|
|
22
|
-
preloads: [
|
|
23
|
-
"/assets/index-D504r3X9.js",
|
|
24
|
-
"/assets/ui-s5IMg6RF.js",
|
|
25
|
-
"/assets/preload-helper-Bs7oCAsw.js",
|
|
26
|
-
"/assets/MachinesModal-ByHejech.js"
|
|
27
|
-
],
|
|
28
|
-
scripts: [{ attrs: {
|
|
29
|
-
type: "module",
|
|
30
|
-
async: !0,
|
|
31
|
-
src: "/assets/index-D504r3X9.js"
|
|
32
|
-
} }]
|
|
33
|
-
},
|
|
34
|
-
"/": {
|
|
35
|
-
filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/index.tsx",
|
|
36
|
-
children: void 0,
|
|
37
|
-
preloads: [
|
|
38
|
-
"/assets/routes-4N6mrQK_.js",
|
|
39
|
-
"/assets/actionUi-yYVvoOTn.js",
|
|
40
|
-
"/assets/routes-DZU0Tqka.js",
|
|
41
|
-
"/assets/SignIn-Cf4HOpdF.js"
|
|
42
|
-
]
|
|
43
|
-
},
|
|
44
|
-
"/invite/$token": {
|
|
45
|
-
filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/invite.$token.tsx",
|
|
46
|
-
children: void 0,
|
|
47
|
-
preloads: [
|
|
48
|
-
"/assets/invite._token-B0EKVyrU.js",
|
|
49
|
-
"/assets/actionUi-yYVvoOTn.js",
|
|
50
|
-
"/assets/invite._token-BSnGRyUw.js",
|
|
51
|
-
"/assets/SignIn-Cf4HOpdF.js"
|
|
52
|
-
]
|
|
53
|
-
},
|
|
54
|
-
"/loops/$loopId": {
|
|
55
|
-
filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/loops.$loopId.tsx",
|
|
56
|
-
children: void 0,
|
|
57
|
-
preloads: [
|
|
58
|
-
"/assets/loops._loopId-j5EB2PLW.js",
|
|
59
|
-
"/assets/SignIn-Cf4HOpdF.js",
|
|
60
|
-
"/assets/actionUi-yYVvoOTn.js",
|
|
61
|
-
"/assets/lifecycleUi-C0DaC6NM.js"
|
|
62
|
-
]
|
|
63
|
-
},
|
|
64
|
-
"/t/$teamId": {
|
|
65
|
-
filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/t.$teamId.tsx",
|
|
66
|
-
children: void 0,
|
|
67
|
-
preloads: [
|
|
68
|
-
"/assets/t._teamId-CAUjvMZ6.js",
|
|
69
|
-
"/assets/actionUi-yYVvoOTn.js",
|
|
70
|
-
"/assets/t._teamId-Cqzd69sO.js",
|
|
71
|
-
"/assets/SignIn-Cf4HOpdF.js"
|
|
72
|
-
]
|
|
73
|
-
},
|
|
74
|
-
"/loops/$loopId_/runs/$runId": {
|
|
75
|
-
filePath: "/home/runner/work/pievo/pievo/packages/server/src/routes/loops.$loopId_.runs.$runId.tsx",
|
|
76
|
-
children: void 0,
|
|
77
|
-
preloads: [
|
|
78
|
-
"/assets/loops._loopId_.runs._runId-BICo_pRz.js",
|
|
79
|
-
"/assets/SignIn-Cf4HOpdF.js",
|
|
80
|
-
"/assets/actionUi-yYVvoOTn.js",
|
|
81
|
-
"/assets/lifecycleUi-C0DaC6NM.js"
|
|
82
|
-
]
|
|
83
|
-
}
|
|
84
|
-
} });
|
|
85
|
-
//#endregion
|
|
86
|
-
export { tsrStartManifest };
|