@kky42/pievo-server 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/.output/nitro.json +17 -0
  2. package/.output/public/assets/CodeField-dOzyFQNH.js +34 -0
  3. package/.output/public/assets/LoopView-B4H9QibC.js +55 -0
  4. package/.output/public/assets/Modal-D33gNSgx.js +1 -0
  5. package/.output/public/assets/SignIn-SHuRRyOv.js +1 -0
  6. package/.output/public/assets/actionUi-ChGGALzg.js +1 -0
  7. package/.output/public/assets/app-DElSo_jy.css +2 -0
  8. package/.output/public/assets/artifactView-DFuubXLJ.js +66 -0
  9. package/.output/public/assets/index-DfpTWRSz.js +12 -0
  10. package/.output/public/assets/invite._token-DJtd-XE2.js +1 -0
  11. package/.output/public/assets/invite._token-T8oo4Qtw.js +1 -0
  12. package/.output/public/assets/jsx-runtime-BseJUIpC.js +1 -0
  13. package/.output/public/assets/lifecycleUi-DKkChdnU.js +1 -0
  14. package/.output/public/assets/loopApi-BM2nj71x.js +3 -0
  15. package/.output/public/assets/loops._loopId-B19Jw7jC.js +5 -0
  16. package/.output/public/assets/loops._loopId_.runs._runId-_CflHV38.js +3 -0
  17. package/.output/public/assets/notifyFns-DCubjpRy.js +1 -0
  18. package/.output/public/assets/preload-helper-CKUiEq3b.js +3 -0
  19. package/.output/public/assets/routes-B9tgli5f.js +1 -0
  20. package/.output/public/assets/routes-CTtlM_qt.js +1 -0
  21. package/.output/public/assets/t._teamId-Bm21mngW.js +1 -0
  22. package/.output/public/assets/t._teamId-gR7BVKkR.js +1 -0
  23. package/.output/public/assets/ui-Dp88qUWh.js +1 -0
  24. package/.output/public/assets/useRouter-DsjH8G0p.js +1 -0
  25. package/.output/public/favicon.svg +12 -0
  26. package/.output/public/fonts/GeistPixel-Square.woff2 +0 -0
  27. package/.output/server/_chunks/ssr-renderer.mjs +26 -0
  28. package/.output/server/_libs/@aws-crypto/crc32+[...].mjs +419 -0
  29. package/.output/server/_libs/@aws-sdk/checksums+[...].mjs +10732 -0
  30. package/.output/server/_libs/@aws-sdk/client-s3+[...].mjs +9475 -0
  31. package/.output/server/_libs/@aws-sdk/credential-provider-http+[...].mjs +137 -0
  32. package/.output/server/_libs/@aws-sdk/credential-provider-ini+[...].mjs +440 -0
  33. package/.output/server/_libs/@aws-sdk/credential-provider-process+[...].mjs +62 -0
  34. package/.output/server/_libs/@aws-sdk/credential-provider-sso+[...].mjs +818 -0
  35. package/.output/server/_libs/@aws-sdk/credential-provider-web-identity+[...].mjs +59 -0
  36. package/.output/server/_libs/@base-ui/react+[...].mjs +11125 -0
  37. package/.output/server/_libs/@codemirror/autocomplete+[...].mjs +19713 -0
  38. package/.output/server/_libs/@codemirror/lang-css+[...].mjs +2636 -0
  39. package/.output/server/_libs/@codemirror/lang-html+[...].mjs +2247 -0
  40. package/.output/server/_libs/@codemirror/lang-json+[...].mjs +79 -0
  41. package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +1736 -0
  42. package/.output/server/_libs/@smithy/credential-provider-imds+[...].mjs +342 -0
  43. package/.output/server/_libs/@tanstack/react-router+[...].mjs +14300 -0
  44. package/.output/server/_libs/@uiw/codemirror-extensions-basic-setup+[...].mjs +76 -0
  45. package/.output/server/_libs/atomic-sleep.mjs +27 -0
  46. package/.output/server/_libs/aws-crypto__crc32c.mjs +314 -0
  47. package/.output/server/_libs/aws-sdk__nested-clients.mjs +2671 -0
  48. package/.output/server/_libs/babel__runtime.mjs +30 -0
  49. package/.output/server/_libs/clsx.mjs +16 -0
  50. package/.output/server/_libs/codemirror__commands.mjs +1725 -0
  51. package/.output/server/_libs/codemirror__lint.mjs +565 -0
  52. package/.output/server/_libs/codemirror__search.mjs +1138 -0
  53. package/.output/server/_libs/codemirror__theme-one-dark.mjs +161 -0
  54. package/.output/server/_libs/colorette.mjs +129 -0
  55. package/.output/server/_libs/croner.mjs +735 -0
  56. package/.output/server/_libs/d3-array.mjs +231 -0
  57. package/.output/server/_libs/d3-color.mjs +330 -0
  58. package/.output/server/_libs/d3-format.mjs +252 -0
  59. package/.output/server/_libs/d3-interpolate.mjs +163 -0
  60. package/.output/server/_libs/d3-path.mjs +77 -0
  61. package/.output/server/_libs/d3-scale+[...].mjs +1907 -0
  62. package/.output/server/_libs/d3-shape.mjs +689 -0
  63. package/.output/server/_libs/dateformat.mjs +341 -0
  64. package/.output/server/_libs/decimal.js-light.mjs +884 -0
  65. package/.output/server/_libs/diff.mjs +732 -0
  66. package/.output/server/_libs/dom-serializer+[...].mjs +708 -0
  67. package/.output/server/_libs/domhandler.mjs +461 -0
  68. package/.output/server/_libs/dompurify.mjs +2111 -0
  69. package/.output/server/_libs/domutils.mjs +868 -0
  70. package/.output/server/_libs/drizzle-orm+postgres.mjs +7689 -0
  71. package/.output/server/_libs/electric-sql__pglite.mjs +14674 -0
  72. package/.output/server/_libs/end-of-stream+once+wrappy.mjs +145 -0
  73. package/.output/server/_libs/es-toolkit.mjs +1737 -0
  74. package/.output/server/_libs/eventemitter3.mjs +236 -0
  75. package/.output/server/_libs/fast-copy.mjs +285 -0
  76. package/.output/server/_libs/fast-safe-stringify.mjs +172 -0
  77. package/.output/server/_libs/h3+rou3+srvx.mjs +1201 -0
  78. package/.output/server/_libs/html-dom-parser+htmlparser2.mjs +1560 -0
  79. package/.output/server/_libs/html-react-parser+[...].mjs +1360 -0
  80. package/.output/server/_libs/initdb.wasm +0 -0
  81. package/.output/server/_libs/marked.mjs +1548 -0
  82. package/.output/server/_libs/on-exit-leak-free.mjs +80 -0
  83. package/.output/server/_libs/pglite.data +37667 -8
  84. package/.output/server/_libs/pglite.wasm +0 -0
  85. package/.output/server/_libs/pino+[...].mjs +3196 -0
  86. package/.output/server/_libs/pino-abstract-transport+split2.mjs +194 -0
  87. package/.output/server/_libs/pino-pretty+[...].mjs +1623 -0
  88. package/.output/server/_libs/pinojs__redact.mjs +280 -0
  89. package/.output/server/_libs/react-redux+[...].mjs +205 -0
  90. package/.output/server/_libs/recharts+victory-vendor.mjs +15875 -0
  91. package/.output/server/_libs/tanstack__history.mjs +342 -0
  92. package/.output/server/_libs/ufo.mjs +64 -0
  93. package/.output/server/_libs/uiw__codemirror-themes.mjs +32 -0
  94. package/.output/server/_libs/uiw__react-codemirror.mjs +354 -0
  95. package/.output/server/_runtime.mjs +37 -0
  96. package/.output/server/_ssr/CodeField-tm4rr6G3.mjs +143 -0
  97. package/.output/server/_ssr/DashboardView-CC7htv28.mjs +2795 -0
  98. package/.output/server/_ssr/LoopPlaybook-BXH8mhiX.mjs +2105 -0
  99. package/.output/server/_ssr/LoopView-DCugEbHx.mjs +1106 -0
  100. package/.output/server/_ssr/Modal-DpKZHLZK.mjs +49 -0
  101. package/.output/server/_ssr/SignIn-dTndU6Hw.mjs +67 -0
  102. package/.output/server/_ssr/actionUi-CZbEixbf.mjs +119 -0
  103. package/.output/server/_ssr/adapters-BS8XosjF.mjs +130 -0
  104. package/.output/server/_ssr/artifactFiles-Cagtj7J0.mjs +61 -0
  105. package/.output/server/_ssr/artifactKind-BW0isV8L.mjs +37 -0
  106. package/.output/server/_ssr/artifactView-DS4O22wl.mjs +304 -0
  107. package/.output/server/_ssr/artifacts-DngKyW2u.mjs +2 -0
  108. package/.output/server/_ssr/auth-DY1DuYZd.mjs +38429 -0
  109. package/.output/server/_ssr/boot-BbtG0ImW.mjs +9010 -0
  110. package/.output/server/_ssr/boot-CMHTxQpJ.mjs +2 -0
  111. package/.output/server/_ssr/bun-sqlite-dialect-BW9W1_Ps-CU1Spd6z.mjs +162 -0
  112. package/.output/server/_ssr/core-RrmWoKne.mjs +5 -0
  113. package/.output/server/_ssr/createServerRpc-BD8Xn_0_.mjs +12 -0
  114. package/.output/server/_ssr/d1-sqlite-dialect-BLC8LXE6-DfG7tB8s.mjs +112 -0
  115. package/.output/server/_ssr/db-DWAuZq1o.mjs +2 -0
  116. package/.output/server/_ssr/dist-BIxFFVZg.mjs +342 -0
  117. package/.output/server/_ssr/empty-plugin-adapters-DKUlnwwl.mjs +5 -0
  118. package/.output/server/_ssr/factory-Blq0DYfT.mjs +6903 -0
  119. package/.output/server/_ssr/invite._token-BRCo9LGB.mjs +36 -0
  120. package/.output/server/_ssr/invite._token-DJxGLILJ.mjs +28 -0
  121. package/.output/server/_ssr/invite._token-NewFt27g.mjs +92 -0
  122. package/.output/server/_ssr/kysely-adapter-D3XTe64J.mjs +2 -0
  123. package/.output/server/_ssr/kysely-migration-tables-JkVUjPF_-bPAX9LR_.mjs +19 -0
  124. package/.output/server/_ssr/lifecycleUi-C9lg1r3r.mjs +38 -0
  125. package/.output/server/_ssr/logger-Dw82jNjH.mjs +2 -0
  126. package/.output/server/_ssr/loopApi-BtfkZQYK.mjs +532 -0
  127. package/.output/server/_ssr/loopApi-Cxe8WyOB.mjs +105 -0
  128. package/.output/server/_ssr/loops._loopId-7NQJPB9W.mjs +30 -0
  129. package/.output/server/_ssr/loops._loopId-DhnArGdL.mjs +1635 -0
  130. package/.output/server/_ssr/loops._loopId_.runs._runId-Bvuo2nki.mjs +29 -0
  131. package/.output/server/_ssr/loops._loopId_.runs._runId-Dip5Xk-q.mjs +674 -0
  132. package/.output/server/_ssr/machineFns-Dvr5ICUy.mjs +266 -0
  133. package/.output/server/_ssr/node-sqlite-dialect-DhyOpJTX.mjs +162 -0
  134. package/.output/server/_ssr/notifyFns-BcMRY5kP.mjs +118 -0
  135. package/.output/server/_ssr/notifyFns-Q458pZmE.mjs +580 -0
  136. package/.output/server/_ssr/router-J8KZ30xw.mjs +678 -0
  137. package/.output/server/_ssr/routes-Bcs4T1ox.mjs +28 -0
  138. package/.output/server/_ssr/routes-BoGrcf-b.mjs +43 -0
  139. package/.output/server/_ssr/routes-D4am3Zff.mjs +28 -0
  140. package/.output/server/_ssr/runDiff-CpEFqo7G.mjs +113 -0
  141. package/.output/server/_ssr/ssr.mjs +5837 -0
  142. package/.output/server/_ssr/start-4ifArtKx.mjs +4 -0
  143. package/.output/server/_ssr/store-b3JcQ08F.mjs +2 -0
  144. package/.output/server/_ssr/t._teamId-CeUhzgzT.mjs +32 -0
  145. package/.output/server/_ssr/t._teamId-DR-hQK7o.mjs +47 -0
  146. package/.output/server/_ssr/t._teamId-Dy_McbRt.mjs +31 -0
  147. package/.output/server/_ssr/teamCookie-B7hLOIie.mjs +10 -0
  148. package/.output/server/_ssr/teamFns-BIDnsg2A.mjs +473 -0
  149. package/.output/server/_ssr/teamFns-DA4ovI5g.mjs +33 -0
  150. package/.output/server/_ssr/tokens-ytd60FUt.mjs +2 -0
  151. package/.output/server/_ssr/ui-Dej2qjuS.mjs +267 -0
  152. package/.output/server/_tanstack-start-manifest_v-CVS6c7re.mjs +95 -0
  153. package/.output/server/drizzle/0000_round_marauders.sql +193 -0
  154. package/.output/server/drizzle/0001_naive_silver_fox.sql +25 -0
  155. package/.output/server/drizzle/0002_funny_sage.sql +12 -0
  156. package/.output/server/drizzle/0003_optimal_slapstick.sql +102 -0
  157. package/.output/server/drizzle/0004_remove_grok_agent.sql +5 -0
  158. package/.output/server/drizzle/0005_heavy_gauntlet.sql +8 -0
  159. package/.output/server/drizzle/0006_tranquil_sharon_carter.sql +1 -0
  160. package/.output/server/drizzle/0007_faulty_starbolt.sql +30 -0
  161. package/.output/server/drizzle/0008_durable_lifecycle_evidence.sql +15 -0
  162. package/.output/server/drizzle/meta/0000_snapshot.json +1333 -0
  163. package/.output/server/drizzle/meta/0001_snapshot.json +1498 -0
  164. package/.output/server/drizzle/meta/0002_snapshot.json +1576 -0
  165. package/.output/server/drizzle/meta/0003_snapshot.json +1666 -0
  166. package/.output/server/drizzle/meta/0005_snapshot.json +1666 -0
  167. package/.output/server/drizzle/meta/0006_snapshot.json +1672 -0
  168. package/.output/server/drizzle/meta/0007_snapshot.json +1787 -0
  169. package/.output/server/drizzle/meta/_journal.json +69 -0
  170. package/.output/server/index.mjs +464 -0
  171. package/.output/server/node_modules/tslib/modules/index.js +70 -0
  172. package/.output/server/node_modules/tslib/modules/package.json +3 -0
  173. package/.output/server/node_modules/tslib/package.json +47 -0
  174. package/.output/server/node_modules/tslib/tslib.js +484 -0
  175. package/.output/server/package.json +9 -0
  176. package/LICENSE +21 -0
  177. package/drizzle/0000_round_marauders.sql +193 -0
  178. package/drizzle/0001_naive_silver_fox.sql +25 -0
  179. package/drizzle/0002_funny_sage.sql +12 -0
  180. package/drizzle/0003_optimal_slapstick.sql +102 -0
  181. package/drizzle/0004_remove_grok_agent.sql +5 -0
  182. package/drizzle/0005_heavy_gauntlet.sql +8 -0
  183. package/drizzle/0006_tranquil_sharon_carter.sql +1 -0
  184. package/drizzle/0007_faulty_starbolt.sql +30 -0
  185. package/drizzle/0008_durable_lifecycle_evidence.sql +15 -0
  186. package/drizzle/meta/0000_snapshot.json +1333 -0
  187. package/drizzle/meta/0001_snapshot.json +1498 -0
  188. package/drizzle/meta/0002_snapshot.json +1576 -0
  189. package/drizzle/meta/0003_snapshot.json +1666 -0
  190. package/drizzle/meta/0005_snapshot.json +1666 -0
  191. package/drizzle/meta/0006_snapshot.json +1672 -0
  192. package/drizzle/meta/0007_snapshot.json +1787 -0
  193. package/drizzle/meta/_journal.json +69 -0
  194. package/package.json +84 -0
  195. package/scripts/pievo-server.mjs +390 -0
  196. package/scripts/prestart.mjs +66 -0
  197. package/scripts/server-cli-lib.mjs +451 -0
@@ -0,0 +1,4 @@
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/start-4ifArtKx.js
2
+ var startInstance = void 0;
3
+ //#endregion
4
+ export { startInstance };
@@ -0,0 +1,2 @@
1
+ import { X as getLoop } from "./boot-BbtG0ImW.mjs";
2
+ export { getLoop };
@@ -0,0 +1,32 @@
1
+ import { C as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { s as useSession } from "./LoopPlaybook-BXH8mhiX.mjs";
3
+ import { t as SignIn } from "./SignIn-dTndU6Hw.mjs";
4
+ import { t as DashboardView } from "./DashboardView-CC7htv28.mjs";
5
+ import { t as Route } from "./t._teamId-DR-hQK7o.mjs";
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/t._teamId-CeUhzgzT.js
7
+ var import_jsx_runtime = require_jsx_runtime();
8
+ /**
9
+ * The explicit-team dashboard (`/t/<teamId>`, Phase 2): the same dashboard scoped
10
+ * to the team in the PATH, so a view is bookmarkable and each browser tab keeps
11
+ * its own team (the list server fns take an explicit `teamId`, independent of the
12
+ * shared last-used cookie). A team id rides the URL verbatim.
13
+ *
14
+ * The loader validates membership (`canViewTeam`) and, on failure, throws the SAME
15
+ * generic not-found as a missing loop — never confirming a team exists to a
16
+ * non-member (enumeration safety). Open mode has no gate: any `/t/<x>` renders the
17
+ * single shared workspace.
18
+ */
19
+ /** Load-failure screen (a non-member's generic not-found, or a first-load blip).
20
+ * Retry re-runs the loader; harmless for the not-found case, self-heals a blip. */
21
+ function TeamDashboard() {
22
+ const loaded = Route.useLoaderData();
23
+ const { data: session, isPending } = useSession();
24
+ if (loaded?.auth?.enabled && !isPending && !session) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SignIn, {});
25
+ if (loaded?.mode === "signin") return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SignIn, {});
26
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DashboardView, {
27
+ teamId: loaded.teamId,
28
+ initial: loaded.initial
29
+ }, loaded.teamId);
30
+ }
31
+ //#endregion
32
+ export { TeamDashboard as component };
@@ -0,0 +1,47 @@
1
+ import { c as createFileRoute, s as lazyRouteComponent } from "../_libs/@tanstack/react-router+[...].mjs";
2
+ import { g as listTemplates, l as getAuthState, t as canViewTeam } from "./loopApi-Cxe8WyOB.mjs";
3
+ import { a as authClient } from "./LoopPlaybook-BXH8mhiX.mjs";
4
+ import { n as fetchLiveData } from "./DashboardView-CC7htv28.mjs";
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/t._teamId-DR-hQK7o.js
6
+ var $$splitErrorComponentImporter = () => import("./t._teamId-Dy_McbRt.mjs");
7
+ var $$splitComponentImporter = () => import("./t._teamId-CeUhzgzT.mjs");
8
+ /**
9
+ * The explicit-team dashboard (`/t/<teamId>`, Phase 2): the same dashboard scoped
10
+ * to the team in the PATH, so a view is bookmarkable and each browser tab keeps
11
+ * its own team (the list server fns take an explicit `teamId`, independent of the
12
+ * shared last-used cookie). A team id rides the URL verbatim.
13
+ *
14
+ * The loader validates membership (`canViewTeam`) and, on failure, throws the SAME
15
+ * generic not-found as a missing loop — never confirming a team exists to a
16
+ * non-member (enumeration safety). Open mode has no gate: any `/t/<x>` renders the
17
+ * single shared workspace.
18
+ */
19
+ var Route = createFileRoute("/t/$teamId")({
20
+ ssr: false,
21
+ loader: async ({ params }) => {
22
+ const teamId = params.teamId;
23
+ const auth = await getAuthState();
24
+ if (auth.enabled) {
25
+ const { data: session } = await authClient.getSession();
26
+ if (!session) return {
27
+ mode: "signin",
28
+ auth,
29
+ teamId
30
+ };
31
+ if (!await canViewTeam({ data: teamId })) throw new Error("This team does not exist, or you do not have access to it.");
32
+ }
33
+ return {
34
+ mode: "dashboard",
35
+ auth,
36
+ teamId,
37
+ initial: {
38
+ ...await fetchLiveData(teamId),
39
+ templates: await listTemplates()
40
+ }
41
+ };
42
+ },
43
+ component: lazyRouteComponent($$splitComponentImporter, "component"),
44
+ errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent")
45
+ });
46
+ //#endregion
47
+ export { Route as t };
@@ -0,0 +1,31 @@
1
+ import { C as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
+ import { f as useRouter } from "../_libs/@tanstack/react-router+[...].mjs";
3
+ import { r as LoadErrorCard } from "./actionUi-CZbEixbf.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/t._teamId-Dy_McbRt.js
5
+ var import_jsx_runtime = require_jsx_runtime();
6
+ /**
7
+ * The explicit-team dashboard (`/t/<teamId>`, Phase 2): the same dashboard scoped
8
+ * to the team in the PATH, so a view is bookmarkable and each browser tab keeps
9
+ * its own team (the list server fns take an explicit `teamId`, independent of the
10
+ * shared last-used cookie). A team id rides the URL verbatim.
11
+ *
12
+ * The loader validates membership (`canViewTeam`) and, on failure, throws the SAME
13
+ * generic not-found as a missing loop — never confirming a team exists to a
14
+ * non-member (enumeration safety). Open mode has no gate: any `/t/<x>` renders the
15
+ * single shared workspace.
16
+ */
17
+ /** Load-failure screen (a non-member's generic not-found, or a first-load blip).
18
+ * Retry re-runs the loader; harmless for the not-found case, self-heals a blip. */
19
+ function LoadError({ error }) {
20
+ const router = useRouter();
21
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("main", {
22
+ className: "mx-auto max-w-[1180px] px-8 pt-12",
23
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoadErrorCard, {
24
+ title: "Couldn't open this team.",
25
+ detail: String(error),
26
+ onRetry: () => void router.invalidate()
27
+ })
28
+ });
29
+ }
30
+ //#endregion
31
+ export { LoadError as errorComponent };
@@ -0,0 +1,10 @@
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/teamCookie-B7hLOIie.js
2
+ /** The single writer of the `pievo.team` active-team cookie. Both switch
3
+ * surfaces (the header TeamSwitcher and the cross-team loop banner) call this so
4
+ * they can't drift on cookie name/encoding/max-age/samesite. Client-set is fine:
5
+ * the server never trusts it blind (requestScope re-checks membership/admin). */
6
+ function setActiveTeamCookie(id) {
7
+ document.cookie = `pievo.team=${encodeURIComponent(id)}; path=/; max-age=31536000; samesite=lax`;
8
+ }
9
+ //#endregion
10
+ export { setActiveTeamCookie as t };
@@ -0,0 +1,473 @@
1
+ import { Bt as renameTeam$2, E as createInvite$1, Et as listTeamsForUser, F as ensureServer, Gt as setTeamMemberRoleGuarded, Lt as redeemInviteAtomic, M as deleteInvite, O as createTeam$2, P as deleteTeamCascade, St as listPendingInvites, Tt as listTeamMembers, Y as getInvite, ct as isPersonalTeam, en as userByEmail, nt as getTeam, p as addTeamMember$1, rt as getTeamMember, x as countLoopsForTeam, zt as removeTeamMemberGuarded } from "./boot-BbtG0ImW.mjs";
2
+ import { n as createServerFn } from "./ssr.mjs";
3
+ import { authEnabled, currentUserId } from "./auth-DY1DuYZd.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-BIDnsg2A.js
7
+ /**
8
+ * Team lifecycle + membership logic (design report §2/§4/§5, all six §7 decisions
9
+ * approved as recommended). This module is the ONE authorization + rules
10
+ * chokepoint; the `teamFns` server fns are thin wrappers that resolve the caller's
11
+ * user id and delegate here. Keeping the logic framework-free (plain async
12
+ * functions over the store, `(actorUserId, ...)` in) makes every rule directly
13
+ * testable against a real pglite store without mocking the Start runtime.
14
+ *
15
+ * The non-negotiable invariants, enforced here + transactionally in the store:
16
+ * - every fn takes an EXPLICIT teamId and authorizes by MEMBERSHIP + ROLE, never
17
+ * the active-team cookie (the URL report's hard lesson — managing team B while
18
+ * browsing team A must work);
19
+ * - team MANAGEMENT (rename/delete/members/invites) is owner-only; any member may
20
+ * still create loops (decision 4, unchanged elsewhere);
21
+ * - the personal team is undeletable + un-leavable but renamable (decision 5);
22
+ * - a team always keeps ≥1 owner (decision 6, the last-owner guard);
23
+ * - deleting a team that still owns loops is BLOCKED, never cascaded (decision 1);
24
+ * - an invite grants membership within the app but never bypasses the login
25
+ * allowlist (decision 3 — the redeemer already signed in through the gate).
26
+ */
27
+ /** Invite link lifetime (design §4 "short TTL, e.g. 7 days"). */
28
+ var INVITE_TTL_MS = 10080 * 60 * 1e3;
29
+ var NAME_MAX = 80;
30
+ function cleanName(raw) {
31
+ return (raw || "").trim().slice(0, NAME_MAX) || null;
32
+ }
33
+ function isRole(v) {
34
+ return v === "owner" || v === "member";
35
+ }
36
+ /** Resolve the actor's role in a team (null ⇒ not a member). */
37
+ async function roleOf(teamId, userId) {
38
+ return (await getTeamMember(teamId, userId))?.role ?? null;
39
+ }
40
+ /** Every team the actor belongs to, with their role + member count (the settings
41
+ * master list; doubles as a richer switcher). */
42
+ async function listManagedTeams$1(userId) {
43
+ const teams = await listTeamsForUser(userId);
44
+ return Promise.all(teams.map(async (t) => {
45
+ const members = await listTeamMembers(t.id);
46
+ const me = members.find((m) => m.userId === userId);
47
+ return {
48
+ id: t.id,
49
+ name: t.name,
50
+ role: me?.role ?? "member",
51
+ memberCount: members.length,
52
+ personal: isPersonalTeam(t)
53
+ };
54
+ }));
55
+ }
56
+ /** Full settings detail for one team, authorized by membership (any member may
57
+ * view the roster; only an owner sees the pending invite links). Null ⇒ the
58
+ * actor is not a member (caller renders the generic not-found, no leak). */
59
+ async function getTeamDetail$1(userId, teamId) {
60
+ const team = await getTeam(teamId);
61
+ if (!team) return null;
62
+ const myRole = await roleOf(teamId, userId);
63
+ if (!myRole) return null;
64
+ const members = await listTeamMembers(teamId);
65
+ const loopCount = await countLoopsForTeam(teamId);
66
+ const invites = myRole === "owner" ? await listPendingInvites(teamId) : [];
67
+ return {
68
+ id: team.id,
69
+ name: team.name,
70
+ role: myRole,
71
+ personal: isPersonalTeam(team),
72
+ loopCount,
73
+ members: members.map((m) => ({
74
+ userId: m.userId,
75
+ email: m.email,
76
+ displayName: m.displayName,
77
+ role: m.role,
78
+ isSelf: m.userId === userId
79
+ })),
80
+ invites: invites.map(inviteView)
81
+ };
82
+ }
83
+ function inviteView(i) {
84
+ return {
85
+ token: i.token,
86
+ role: i.role,
87
+ expiresAt: i.expiresAt
88
+ };
89
+ }
90
+ /** Owner-gate helper: the actor must be an OWNER of the team. Returns the FAILURE
91
+ * result to bubble up (assignable to any `Result<T>`), or null when authorized. */
92
+ async function assertOwner(teamId, userId) {
93
+ const role = await roleOf(teamId, userId);
94
+ if (!role) return {
95
+ ok: false,
96
+ error: "This team does not exist, or you do not have access to it."
97
+ };
98
+ if (role !== "owner") return {
99
+ ok: false,
100
+ error: "Only a team owner can manage this team."
101
+ };
102
+ return null;
103
+ }
104
+ async function createTeam$1(userId, name) {
105
+ const clean = cleanName(name);
106
+ if (!clean) return {
107
+ ok: false,
108
+ error: "Team name is required."
109
+ };
110
+ return {
111
+ ok: true,
112
+ id: (await createTeam$2(clean, userId)).id
113
+ };
114
+ }
115
+ async function renameTeam$1(userId, teamId, name) {
116
+ const gate = await assertOwner(teamId, userId);
117
+ if (gate) return gate;
118
+ const clean = cleanName(name);
119
+ if (!clean) return {
120
+ ok: false,
121
+ error: "Team name is required."
122
+ };
123
+ await renameTeam$2(teamId, clean);
124
+ return { ok: true };
125
+ }
126
+ function blockedByLoops(loopCount) {
127
+ const one = loopCount === 1;
128
+ return {
129
+ ok: false,
130
+ error: `This team still owns ${loopCount} loop${one ? "" : "s"} — move or delete ${one ? "it" : "them"} first.`
131
+ };
132
+ }
133
+ async function deleteTeam$1(userId, teamId) {
134
+ const gate = await assertOwner(teamId, userId);
135
+ if (gate) return gate;
136
+ const team = await getTeam(teamId);
137
+ if (!team) return {
138
+ ok: false,
139
+ error: "This team no longer exists."
140
+ };
141
+ if (isPersonalTeam(team)) return {
142
+ ok: false,
143
+ error: "Your personal team can't be deleted."
144
+ };
145
+ const loopCount = await countLoopsForTeam(teamId);
146
+ if (loopCount > 0) return blockedByLoops(loopCount);
147
+ if (await deleteTeamCascade(teamId) === "has-loops") return blockedByLoops(await countLoopsForTeam(teamId));
148
+ return { ok: true };
149
+ }
150
+ /** Direct-add-by-email fast path (design §4 option A): add an EXISTING account to
151
+ * the team immediately. No account yet ⇒ steer the owner to an invite link. */
152
+ async function addMemberByEmail(userId, teamId, email, role) {
153
+ const gate = await assertOwner(teamId, userId);
154
+ if (gate) return gate;
155
+ if (!isRole(role)) return {
156
+ ok: false,
157
+ error: "Invalid role."
158
+ };
159
+ const addr = (email || "").trim();
160
+ if (!addr) return {
161
+ ok: false,
162
+ error: "An email address is required."
163
+ };
164
+ const target = await userByEmail(addr);
165
+ if (!target) return {
166
+ ok: false,
167
+ error: "No Pievo account uses that email yet. Generate an invite link they can redeem after signing in."
168
+ };
169
+ if (await getTeamMember(teamId, target.id)) return {
170
+ ok: false,
171
+ error: `${target.email} is already a member of this team.`
172
+ };
173
+ await addTeamMember$1(teamId, target.id, role);
174
+ return {
175
+ ok: true,
176
+ added: target.email
177
+ };
178
+ }
179
+ async function setMemberRole(userId, teamId, targetUserId, role) {
180
+ const gate = await assertOwner(teamId, userId);
181
+ if (gate) return gate;
182
+ if (!isRole(role)) return {
183
+ ok: false,
184
+ error: "Invalid role."
185
+ };
186
+ const outcome = await setTeamMemberRoleGuarded(teamId, targetUserId, role);
187
+ if (outcome === "not-member") return {
188
+ ok: false,
189
+ error: "That person is not a member of this team."
190
+ };
191
+ if (outcome === "last-owner") return {
192
+ ok: false,
193
+ error: "This is the team's only owner — promote another owner first."
194
+ };
195
+ return { ok: true };
196
+ }
197
+ async function removeMember(userId, teamId, targetUserId) {
198
+ const gate = await assertOwner(teamId, userId);
199
+ if (gate) return gate;
200
+ if (targetUserId === userId) return {
201
+ ok: false,
202
+ error: "Use “Leave team” to remove yourself."
203
+ };
204
+ const outcome = await removeTeamMemberGuarded(teamId, targetUserId);
205
+ if (outcome === "not-member") return {
206
+ ok: false,
207
+ error: "That person is not a member of this team."
208
+ };
209
+ if (outcome === "last-owner") return {
210
+ ok: false,
211
+ error: "This is the team's only owner — promote another owner first."
212
+ };
213
+ return { ok: true };
214
+ }
215
+ /** Leave a team (any member). The personal team can't be left; the last owner
216
+ * can't leave (transfer ownership or delete the team first). */
217
+ async function leaveTeam$1(userId, teamId) {
218
+ const team = await getTeam(teamId);
219
+ if (!team) return {
220
+ ok: false,
221
+ error: "This team no longer exists."
222
+ };
223
+ if (!await roleOf(teamId, userId)) return {
224
+ ok: false,
225
+ error: "You are not a member of this team."
226
+ };
227
+ if (isPersonalTeam(team)) return {
228
+ ok: false,
229
+ error: "You can't leave your personal team."
230
+ };
231
+ const outcome = await removeTeamMemberGuarded(teamId, userId);
232
+ if (outcome === "last-owner") return {
233
+ ok: false,
234
+ error: "You are the team's only owner — promote another owner or delete the team first."
235
+ };
236
+ if (outcome === "not-member") return {
237
+ ok: false,
238
+ error: "You are not a member of this team."
239
+ };
240
+ return { ok: true };
241
+ }
242
+ /** Mint a single-use, short-lived invite link (owner-only). `role` is capped at
243
+ * the inviter's role — an owner may mint member or owner links (decision 6). */
244
+ async function createInvite(userId, teamId, role, nowMs) {
245
+ const gate = await assertOwner(teamId, userId);
246
+ if (gate) return gate;
247
+ if (!isRole(role)) return {
248
+ ok: false,
249
+ error: "Invalid role."
250
+ };
251
+ const invite = await createInvite$1({
252
+ token: `inv_${randomUUID().replace(/-/g, "")}${randomUUID().replace(/-/g, "").slice(0, 8)}`,
253
+ teamId,
254
+ role,
255
+ invitedByUserId: userId,
256
+ expiresAt: new Date(nowMs + INVITE_TTL_MS).toISOString()
257
+ });
258
+ return {
259
+ ok: true,
260
+ token: invite.token,
261
+ expiresAt: invite.expiresAt,
262
+ role: invite.role
263
+ };
264
+ }
265
+ async function revokeInvite(userId, teamId, token) {
266
+ const gate = await assertOwner(teamId, userId);
267
+ if (gate) return gate;
268
+ const invite = await getInvite(token);
269
+ if (!invite || invite.teamId !== teamId) return {
270
+ ok: false,
271
+ error: "That invite no longer exists."
272
+ };
273
+ await deleteInvite(token);
274
+ return { ok: true };
275
+ }
276
+ /**
277
+ * Redeem an invite as the signed-in actor. Any signed-in user may redeem (the
278
+ * link is the authority, not team membership); the login allowlist already gated
279
+ * their sign-in, so this never widens who can sign in (decision 3). Outcomes:
280
+ * - invalid token / wrong shape → error;
281
+ * - already redeemed (single-use) → error;
282
+ * - expired → error;
283
+ * - already a member → success, no double-add (`alreadyMember`);
284
+ * - otherwise → membership granted at the invite's role.
285
+ */
286
+ async function redeemInvite(userId, token, nowMs) {
287
+ const invite = await getInvite(token);
288
+ if (!invite) return {
289
+ ok: false,
290
+ error: "This invite link is invalid."
291
+ };
292
+ if (invite.redeemedAt) return {
293
+ ok: false,
294
+ error: "This invite link has already been used."
295
+ };
296
+ if (new Date(invite.expiresAt).getTime() <= nowMs) return {
297
+ ok: false,
298
+ error: "This invite link has expired."
299
+ };
300
+ const team = await getTeam(invite.teamId);
301
+ if (!team) return {
302
+ ok: false,
303
+ error: "The team for this invite no longer exists."
304
+ };
305
+ const already = !!await getTeamMember(invite.teamId, userId);
306
+ if (!await redeemInviteAtomic(token, userId, already ? null : {
307
+ teamId: invite.teamId,
308
+ role: invite.role
309
+ })) return {
310
+ ok: false,
311
+ error: "This invite link has already been used."
312
+ };
313
+ return {
314
+ ok: true,
315
+ teamId: invite.teamId,
316
+ teamName: team.name,
317
+ alreadyMember: already
318
+ };
319
+ }
320
+ /**
321
+ * Team management server functions — the thin RPC surface over `teamAdmin`
322
+ * (which holds all the rules + authorization). Every mutating fn takes an
323
+ * EXPLICIT teamId and authorizes by membership + role inside teamAdmin, never the
324
+ * active-team cookie (the URL report's hard lesson: managing team B while browsing
325
+ * team A must work). Team management is a GATED feature — it needs a real
326
+ * signed-in user, so open mode (single shared workspace, no identities) returns a
327
+ * uniform "sign-in required" error.
328
+ */
329
+ var SIGNIN_REQUIRED = {
330
+ ok: false,
331
+ error: "Team management requires signing in."
332
+ };
333
+ /** Resolve the signed-in user id, or null when the gate is off / no session. */
334
+ async function actor() {
335
+ if (!authEnabled) return null;
336
+ return currentUserId();
337
+ }
338
+ /** GET — every team the caller manages/belongs to (role + member count). Open
339
+ * mode / signed-out ⇒ empty (the settings surface is gated). */
340
+ var listManagedTeams_createServerFn_handler = createServerRpc({
341
+ id: "94d1108f156fa2273cb78140852e9c3e368de0b8321db0de932a16567671716f",
342
+ name: "listManagedTeams",
343
+ filename: "src/server/teamFns.ts"
344
+ }, (opts) => listManagedTeams.__executeServer(opts));
345
+ var listManagedTeams = createServerFn({ method: "GET" }).handler(listManagedTeams_createServerFn_handler, async () => {
346
+ await ensureServer();
347
+ const userId = await actor();
348
+ if (!userId) return [];
349
+ return listManagedTeams$1(userId);
350
+ });
351
+ var getTeamDetail_createServerFn_handler = createServerRpc({
352
+ id: "fc7a4775f418dde12f422ff9ca65d9e07428fb0dc35c9399592c0081467330bf",
353
+ name: "getTeamDetail",
354
+ filename: "src/server/teamFns.ts"
355
+ }, (opts) => getTeamDetail.__executeServer(opts));
356
+ var getTeamDetail = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(getTeamDetail_createServerFn_handler, async ({ data: teamId }) => {
357
+ await ensureServer();
358
+ const userId = await actor();
359
+ if (!userId) return { error: SIGNIN_REQUIRED.error };
360
+ return await getTeamDetail$1(userId, teamId) ?? { error: "This team does not exist, or you do not have access to it." };
361
+ });
362
+ var createTeam_createServerFn_handler = createServerRpc({
363
+ id: "0f279cfe81021a642289ce6e95622e7198aaeab4147880f85824a02ee9ebafcf",
364
+ name: "createTeam",
365
+ filename: "src/server/teamFns.ts"
366
+ }, (opts) => createTeam.__executeServer(opts));
367
+ var createTeam = createServerFn({ method: "POST" }).validator((name) => name).handler(createTeam_createServerFn_handler, async ({ data: name }) => {
368
+ await ensureServer();
369
+ const userId = await actor();
370
+ if (!userId) return SIGNIN_REQUIRED;
371
+ return createTeam$1(userId, name);
372
+ });
373
+ var renameTeam_createServerFn_handler = createServerRpc({
374
+ id: "5721e01d84c20ffde19d2191648d76a7e5ede3bbb4f44efa59107a786947cf27",
375
+ name: "renameTeam",
376
+ filename: "src/server/teamFns.ts"
377
+ }, (opts) => renameTeam.__executeServer(opts));
378
+ var renameTeam = createServerFn({ method: "POST" }).validator((d) => d).handler(renameTeam_createServerFn_handler, async ({ data }) => {
379
+ await ensureServer();
380
+ const userId = await actor();
381
+ if (!userId) return SIGNIN_REQUIRED;
382
+ return renameTeam$1(userId, data.teamId, data.name);
383
+ });
384
+ var deleteTeam_createServerFn_handler = createServerRpc({
385
+ id: "d2372a81af17eb3a7e4c1407d6ef26a8a9522b66fd6a94858cb35c864b270d77",
386
+ name: "deleteTeam",
387
+ filename: "src/server/teamFns.ts"
388
+ }, (opts) => deleteTeam.__executeServer(opts));
389
+ var deleteTeam = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(deleteTeam_createServerFn_handler, async ({ data: teamId }) => {
390
+ await ensureServer();
391
+ const userId = await actor();
392
+ if (!userId) return SIGNIN_REQUIRED;
393
+ return deleteTeam$1(userId, teamId);
394
+ });
395
+ var addTeamMember_createServerFn_handler = createServerRpc({
396
+ id: "284cb82b5e5cb37242d053b1b14449760d8334e9dadffc6dcbba11db2200a709",
397
+ name: "addTeamMember",
398
+ filename: "src/server/teamFns.ts"
399
+ }, (opts) => addTeamMember.__executeServer(opts));
400
+ var addTeamMember = createServerFn({ method: "POST" }).validator((d) => d).handler(addTeamMember_createServerFn_handler, async ({ data }) => {
401
+ await ensureServer();
402
+ const userId = await actor();
403
+ if (!userId) return SIGNIN_REQUIRED;
404
+ return addMemberByEmail(userId, data.teamId, data.email, data.role);
405
+ });
406
+ var setTeamMemberRole_createServerFn_handler = createServerRpc({
407
+ id: "c3762cecd4a15f7eca064bca295255e942d7c3dce65f66f8593ae145fd7859a0",
408
+ name: "setTeamMemberRole",
409
+ filename: "src/server/teamFns.ts"
410
+ }, (opts) => setTeamMemberRole.__executeServer(opts));
411
+ var setTeamMemberRole = createServerFn({ method: "POST" }).validator((d) => d).handler(setTeamMemberRole_createServerFn_handler, async ({ data }) => {
412
+ await ensureServer();
413
+ const userId = await actor();
414
+ if (!userId) return SIGNIN_REQUIRED;
415
+ return setMemberRole(userId, data.teamId, data.userId, data.role);
416
+ });
417
+ var removeTeamMember_createServerFn_handler = createServerRpc({
418
+ id: "a3326ed8ecd726fbcc28a439bf0012983cbe387d5062e0155096ee5a558e313b",
419
+ name: "removeTeamMember",
420
+ filename: "src/server/teamFns.ts"
421
+ }, (opts) => removeTeamMember.__executeServer(opts));
422
+ var removeTeamMember = createServerFn({ method: "POST" }).validator((d) => d).handler(removeTeamMember_createServerFn_handler, async ({ data }) => {
423
+ await ensureServer();
424
+ const userId = await actor();
425
+ if (!userId) return SIGNIN_REQUIRED;
426
+ return removeMember(userId, data.teamId, data.userId);
427
+ });
428
+ var leaveTeam_createServerFn_handler = createServerRpc({
429
+ id: "fe7cc1df829414194e9b0615b86584c8510369da18f4d8805ccd76468cadf2ff",
430
+ name: "leaveTeam",
431
+ filename: "src/server/teamFns.ts"
432
+ }, (opts) => leaveTeam.__executeServer(opts));
433
+ var leaveTeam = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(leaveTeam_createServerFn_handler, async ({ data: teamId }) => {
434
+ await ensureServer();
435
+ const userId = await actor();
436
+ if (!userId) return SIGNIN_REQUIRED;
437
+ return leaveTeam$1(userId, teamId);
438
+ });
439
+ var createTeamInvite_createServerFn_handler = createServerRpc({
440
+ id: "bbc1020c771335020ef51b326d74b1649966740f273913d32040fa2c3c9f5f0b",
441
+ name: "createTeamInvite",
442
+ filename: "src/server/teamFns.ts"
443
+ }, (opts) => createTeamInvite.__executeServer(opts));
444
+ var createTeamInvite = createServerFn({ method: "POST" }).validator((d) => d).handler(createTeamInvite_createServerFn_handler, async ({ data }) => {
445
+ await ensureServer();
446
+ const userId = await actor();
447
+ if (!userId) return SIGNIN_REQUIRED;
448
+ return createInvite(userId, data.teamId, data.role, Date.now());
449
+ });
450
+ var revokeTeamInvite_createServerFn_handler = createServerRpc({
451
+ id: "b92e9a08eda2d217bf4028f90dbc6bf7d7e8d7c148ebb8a8330286b5935a3fa1",
452
+ name: "revokeTeamInvite",
453
+ filename: "src/server/teamFns.ts"
454
+ }, (opts) => revokeTeamInvite.__executeServer(opts));
455
+ var revokeTeamInvite = createServerFn({ method: "POST" }).validator((d) => d).handler(revokeTeamInvite_createServerFn_handler, async ({ data }) => {
456
+ await ensureServer();
457
+ const userId = await actor();
458
+ if (!userId) return SIGNIN_REQUIRED;
459
+ return revokeInvite(userId, data.teamId, data.token);
460
+ });
461
+ var redeemTeamInvite_createServerFn_handler = createServerRpc({
462
+ id: "6f5fe23f6da1d4aecc198b6f71a041c0fe29cabb6ccad807bb3f16c23c5bd9cd",
463
+ name: "redeemTeamInvite",
464
+ filename: "src/server/teamFns.ts"
465
+ }, (opts) => redeemTeamInvite.__executeServer(opts));
466
+ var redeemTeamInvite = createServerFn({ method: "POST" }).validator((token) => token).handler(redeemTeamInvite_createServerFn_handler, async ({ data: token }) => {
467
+ await ensureServer();
468
+ const userId = await actor();
469
+ if (!userId) return SIGNIN_REQUIRED;
470
+ return redeemInvite(userId, token, Date.now());
471
+ });
472
+ //#endregion
473
+ 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 };
@@ -0,0 +1,33 @@
1
+ import { n as createServerFn } from "./ssr.mjs";
2
+ import { r as createSsrRpc } from "./loopApi-Cxe8WyOB.mjs";
3
+ //#region node_modules/.nitro/vite/services/ssr/assets/teamFns-DA4ovI5g.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
+ /** Resolve the signed-in user id, or null when the gate is off / no session. */
14
+ /** GET — every team the caller manages/belongs to (role + member count). Open
15
+ * mode / signed-out ⇒ empty (the settings surface is gated). */
16
+ var listManagedTeams = createServerFn({ method: "GET" }).handler(createSsrRpc("94d1108f156fa2273cb78140852e9c3e368de0b8321db0de932a16567671716f"));
17
+ /** GET — one team's full settings detail (roster + invites), authorized by
18
+ * membership. Missing/non-member ⇒ the generic not-found error (no leak). */
19
+ var getTeamDetail = createServerFn({ method: "GET" }).validator((teamId) => teamId).handler(createSsrRpc("fc7a4775f418dde12f422ff9ca65d9e07428fb0dc35c9399592c0081467330bf"));
20
+ var createTeam = createServerFn({ method: "POST" }).validator((name) => name).handler(createSsrRpc("0f279cfe81021a642289ce6e95622e7198aaeab4147880f85824a02ee9ebafcf"));
21
+ var renameTeam = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("5721e01d84c20ffde19d2191648d76a7e5ede3bbb4f44efa59107a786947cf27"));
22
+ var deleteTeam = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(createSsrRpc("d2372a81af17eb3a7e4c1407d6ef26a8a9522b66fd6a94858cb35c864b270d77"));
23
+ var addTeamMember = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("284cb82b5e5cb37242d053b1b14449760d8334e9dadffc6dcbba11db2200a709"));
24
+ var setTeamMemberRole = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("c3762cecd4a15f7eca064bca295255e942d7c3dce65f66f8593ae145fd7859a0"));
25
+ var removeTeamMember = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("a3326ed8ecd726fbcc28a439bf0012983cbe387d5062e0155096ee5a558e313b"));
26
+ var leaveTeam = createServerFn({ method: "POST" }).validator((teamId) => teamId).handler(createSsrRpc("fe7cc1df829414194e9b0615b86584c8510369da18f4d8805ccd76468cadf2ff"));
27
+ var createTeamInvite = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("bbc1020c771335020ef51b326d74b1649966740f273913d32040fa2c3c9f5f0b"));
28
+ var revokeTeamInvite = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("b92e9a08eda2d217bf4028f90dbc6bf7d7e8d7c148ebb8a8330286b5935a3fa1"));
29
+ /** POST — redeem an invite link as the signed-in caller. Any signed-in user may
30
+ * redeem (the token is the authority); open mode / signed-out is refused. */
31
+ var redeemTeamInvite = createServerFn({ method: "POST" }).validator((token) => token).handler(createSsrRpc("6f5fe23f6da1d4aecc198b6f71a041c0fe29cabb6ccad807bb3f16c23c5bd9cd"));
32
+ //#endregion
33
+ 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 };
@@ -0,0 +1,2 @@
1
+ import { Mt as mintDeviceToken, Rt as rememberConnectKey } from "./boot-BbtG0ImW.mjs";
2
+ export { mintDeviceToken, rememberConnectKey };