@snagset/server 0.0.4 → 0.1.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 (135) hide show
  1. package/README.md +4 -3
  2. package/dist/app.js +82 -9
  3. package/dist/app.js.map +1 -1
  4. package/dist/bin.js +46 -9
  5. package/dist/bin.js.map +1 -1
  6. package/dist/boot.js +67 -51
  7. package/dist/boot.js.map +1 -1
  8. package/dist/config.generated.js +5 -2
  9. package/dist/config.generated.js.map +1 -1
  10. package/dist/db/connect.js +7 -0
  11. package/dist/db/connect.js.map +1 -1
  12. package/dist/db/migrations/0005_studio_reviewers.sql +45 -0
  13. package/dist/db/migrations/0006_instance_settings.sql +69 -0
  14. package/dist/db/migrations/0007_jira_provider.no-txn.sql +13 -0
  15. package/dist/domain.js +129 -0
  16. package/dist/domain.js.map +1 -0
  17. package/dist/instance/settings.js +54 -0
  18. package/dist/instance/settings.js.map +1 -0
  19. package/dist/integrations/github.js +112 -0
  20. package/dist/integrations/github.js.map +1 -0
  21. package/dist/integrations/inbound.js +88 -0
  22. package/dist/integrations/inbound.js.map +1 -0
  23. package/dist/integrations/jira.js +129 -0
  24. package/dist/integrations/jira.js.map +1 -0
  25. package/dist/integrations/linear.js +111 -0
  26. package/dist/integrations/linear.js.map +1 -0
  27. package/dist/integrations/outbox.js +305 -0
  28. package/dist/integrations/outbox.js.map +1 -0
  29. package/dist/integrations/slack.js +135 -0
  30. package/dist/integrations/slack.js.map +1 -0
  31. package/dist/integrations/store.js +101 -0
  32. package/dist/integrations/store.js.map +1 -0
  33. package/dist/mail/index.js +21 -11
  34. package/dist/mail/index.js.map +1 -1
  35. package/dist/mail/resolve.js +80 -0
  36. package/dist/mail/resolve.js.map +1 -0
  37. package/dist/projectCache.js +3 -2
  38. package/dist/projectCache.js.map +1 -1
  39. package/dist/projects.js +8 -2
  40. package/dist/projects.js.map +1 -1
  41. package/dist/routes/account.js +59 -0
  42. package/dist/routes/account.js.map +1 -0
  43. package/dist/routes/activity.js +111 -0
  44. package/dist/routes/activity.js.map +1 -0
  45. package/dist/routes/assignees.js +139 -0
  46. package/dist/routes/assignees.js.map +1 -0
  47. package/dist/routes/attachments.js +2 -2
  48. package/dist/routes/attachments.js.map +1 -1
  49. package/dist/routes/comments.js +27 -17
  50. package/dist/routes/comments.js.map +1 -1
  51. package/dist/routes/cors.js +10 -1
  52. package/dist/routes/cors.js.map +1 -1
  53. package/dist/routes/instance.js +164 -0
  54. package/dist/routes/instance.js.map +1 -0
  55. package/dist/routes/integrations.js +610 -0
  56. package/dist/routes/integrations.js.map +1 -0
  57. package/dist/routes/jobs.js +15 -3
  58. package/dist/routes/jobs.js.map +1 -1
  59. package/dist/routes/mcpTokens.js +119 -0
  60. package/dist/routes/mcpTokens.js.map +1 -0
  61. package/dist/routes/members.js +177 -0
  62. package/dist/routes/members.js.map +1 -0
  63. package/dist/routes/owner.js +64 -7
  64. package/dist/routes/owner.js.map +1 -1
  65. package/dist/routes/sites.js +181 -8
  66. package/dist/routes/sites.js.map +1 -1
  67. package/dist/routes/threads.js +276 -9
  68. package/dist/routes/threads.js.map +1 -1
  69. package/dist/serverless.js +39 -6
  70. package/dist/serverless.js.map +1 -1
  71. package/dist/studioReviewers.js +67 -0
  72. package/dist/studioReviewers.js.map +1 -0
  73. package/dist/vendor/adapters/outbound/sanitise.js +18 -3
  74. package/dist/vendor/types/brief.js +121 -0
  75. package/package.json +1 -1
  76. package/static/dashboard/assets/CompositeItem-CoPuxIvr.js +1 -0
  77. package/static/dashboard/assets/ConfirmDialog-DkCcJwll.js +1 -0
  78. package/static/dashboard/assets/CopyButton-BNa2pLLv.js +1 -0
  79. package/static/dashboard/assets/FieldItemContext-DQXjpFtW.js +1 -0
  80. package/static/dashboard/assets/InstallTag-SOlWl7Hx.js +1 -0
  81. package/static/dashboard/assets/SaveState-CmxB4XyX.js +6 -0
  82. package/static/dashboard/assets/_app-DNkv3HBi.js +1 -0
  83. package/static/dashboard/assets/_app-xVQe811c.js +56 -0
  84. package/static/dashboard/assets/activity-DsMa5Ja6.js +1 -0
  85. package/static/dashboard/assets/arrow-left-vQV4xhAD.js +6 -0
  86. package/static/dashboard/assets/avatar-DuPL6QD_.js +1 -0
  87. package/static/dashboard/assets/badge-BWjiIc8T.js +1 -0
  88. package/static/dashboard/assets/card-BIBfCno8.js +1 -0
  89. package/static/dashboard/assets/check-Dpx6GTdT.js +6 -0
  90. package/static/dashboard/assets/chevron-right-DKIlBUGN.js +6 -0
  91. package/static/dashboard/assets/copy-DCbhEe2L.js +6 -0
  92. package/static/dashboard/assets/createBaseUIEventDetails-C_ZVkrgp.js +1 -0
  93. package/static/dashboard/assets/createLucideIcon-C_IGE4WD.js +36 -0
  94. package/static/dashboard/assets/dialog-BT2uWf4e.js +6 -0
  95. package/static/dashboard/assets/dropdown-menu-DSXzPAwB.js +11 -0
  96. package/static/dashboard/assets/image-off-DGWejLDG.js +6 -0
  97. package/static/dashboard/assets/index-BRTBtV91.css +1 -0
  98. package/static/dashboard/assets/index-D6FWZoJT.js +129 -0
  99. package/static/dashboard/assets/label-9QsSpLMA.js +1 -0
  100. package/static/dashboard/assets/labels--UUyt9uB.js +1 -0
  101. package/static/dashboard/assets/layout-grid-UPGEmEw-.js +6 -0
  102. package/static/dashboard/assets/me-0HQsBXLU.js +1 -0
  103. package/static/dashboard/assets/parts-C29uZ5zo.js +1 -0
  104. package/static/dashboard/assets/plus-BFNS5LcY.js +6 -0
  105. package/static/dashboard/assets/s._site-D6Ep2tdc.js +1 -0
  106. package/static/dashboard/assets/s._site.comments-BRVI5gpJ.js +39 -0
  107. package/static/dashboard/assets/s._site.reviewers-CiEkZnnp.js +1 -0
  108. package/static/dashboard/assets/s._site.settings-BqLGyfEd.js +1 -0
  109. package/static/dashboard/assets/setup-dUMCPWdf.js +1 -0
  110. package/static/dashboard/assets/sign-in-CdRa-bio.js +1 -0
  111. package/static/dashboard/assets/sites-CmbtFKoo.js +1 -0
  112. package/static/dashboard/assets/studio-BHuVXWZh.js +1 -0
  113. package/static/dashboard/assets/studio-BjeTOKda.js +1 -0
  114. package/static/dashboard/assets/studio.index--kuzOs7w.js +1 -0
  115. package/static/dashboard/assets/studio.integrations-Bq6HP80a.js +1 -0
  116. package/static/dashboard/assets/studio.members-8AB1KYsw.js +1 -0
  117. package/static/dashboard/assets/sun-BCiTcgnh.js +16 -0
  118. package/static/dashboard/assets/table-BXmeI_yA.js +1 -0
  119. package/static/dashboard/assets/update-duXzIzFS.js +1 -0
  120. package/static/dashboard/assets/useBaseQuery-Cp9wivVR.js +1 -0
  121. package/static/dashboard/assets/useQuery-BZXZlOqO.js +1 -0
  122. package/static/dashboard/assets/useRender-CO8aPW06.js +1 -0
  123. package/static/dashboard/assets/users-Dvw2FCKM.js +6 -0
  124. package/static/dashboard/assets/welcome-BHKjw20b.js +11 -0
  125. package/static/dashboard/assets/you-RBpAfUMU.js +1 -0
  126. package/static/dashboard/assets/zod-BpyjQIvb.js +1 -0
  127. package/static/dashboard/index.html +17 -2
  128. package/static/widget/snag.capture.js +1 -1
  129. package/static/widget/snag.dock.js +1 -1
  130. package/static/widget/snag.panels.js +1 -1
  131. package/static/widget/snag.runtime.js +2 -2
  132. package/static/widget/snag.text.js +1 -1
  133. package/vercel.json +4 -0
  134. package/static/dashboard/assets/index-CATItBzT.js +0 -1
  135. package/static/dashboard/assets/index-DsUJ96yc.css +0 -1
@@ -1,5 +1,6 @@
1
1
  import { Hono } from "hono";
2
2
  import { createProject, validateOrigins } from "../projects.js";
3
+ import { normaliseDomain } from "../domain.js";
3
4
  /**
4
5
  * NO CACHE INVALIDATION HOOK, deliberately.
5
6
  *
@@ -51,6 +52,17 @@ export function siteRoutes(deps) {
51
52
  catch (e) {
52
53
  return fail(c, 400, "validation_failed", e instanceof Error ? e.message : String(e));
53
54
  }
55
+ // D92 — the site's DOMAIN, the one field most sites need: its host, every
56
+ // subdomain, any scheme and port, and localhost. Exact origins stay for
57
+ // the addresses a domain cannot say.
58
+ const rawDomain = body?.["domain"];
59
+ let domain = null;
60
+ if (typeof rawDomain === "string" && rawDomain.trim()) {
61
+ const r = normaliseDomain(rawDomain);
62
+ if ("error" in r)
63
+ return fail(c, 400, "validation_failed", r.error);
64
+ domain = r.domain;
65
+ }
54
66
  // A site with no allowed origin cannot be talked to by anything — CORS
55
67
  // refuses every request from the tag the operator is about to paste. It is
56
68
  // ALLOWED (an origin can be added later, and `snagset allow-origin`
@@ -63,14 +75,16 @@ export function siteRoutes(deps) {
63
75
  name,
64
76
  createdBy: owner.userId,
65
77
  origins,
78
+ domain,
66
79
  graceHours: deps.graceHours,
67
80
  });
68
81
  });
69
82
  return c.json({
70
83
  uid: created.uid,
71
84
  name: created.name,
85
+ domain,
72
86
  origins: validateOrigins(origins),
73
- ...(origins.length
87
+ ...(origins.length || domain
74
88
  ? {}
75
89
  : {
76
90
  warning: "No origins allowed yet, so no site can talk to this project. " +
@@ -149,27 +163,184 @@ export function siteRoutes(deps) {
149
163
  if (!owner)
150
164
  return fail(c, 401, "unauthorized", "Sign in to the dashboard first.");
151
165
  const [project] = await sql `
152
- SELECT id, org_id FROM projects WHERE uid = ${c.req.param("uid")} AND deleted_at IS NULL
166
+ SELECT id, org_id, settings->>'domain' AS domain
167
+ FROM projects WHERE uid = ${c.req.param("uid")} AND deleted_at IS NULL
153
168
  `;
154
169
  if (!project || project.org_id !== owner.orgId) {
155
170
  return fail(c, 404, "project_not_found", "No project with that uid.");
156
171
  }
157
172
  const body = (await c.req.json().catch(() => null));
173
+ /**
174
+ * THREE FIELDS NOW, NOT ONE. D66 mounted this route for `writeMode` alone,
175
+ * and a site was create-once ever after: a typo in the name was permanent
176
+ * and a staging URL that moved could only be ADDED to, never corrected.
177
+ * Eurico, using it: *"the sites we should be able to edit the url and name
178
+ * and delete or edit it, right now is just one time."*
179
+ *
180
+ * Each is optional and absent means unchanged, so the existing
181
+ * `{ writeMode }` callers keep working unaltered.
182
+ */
158
183
  const mode = body?.["writeMode"];
159
- if (mode !== "open" && mode !== "link-required" && mode !== "verified-only") {
184
+ const rawName = body?.["name"];
185
+ const rawOrigins = body?.["origins"];
186
+ const rawDomain = body?.["domain"];
187
+ const rawStatus = body?.["status"];
188
+ if (mode === undefined &&
189
+ rawName === undefined &&
190
+ rawOrigins === undefined &&
191
+ rawDomain === undefined &&
192
+ rawStatus === undefined) {
193
+ return fail(c, 400, "validation_failed", "Send at least one of name, origins, domain, status or writeMode.");
194
+ }
195
+ if (mode !== undefined && mode !== "open" && mode !== "link-required" && mode !== "verified-only") {
160
196
  return fail(c, 400, "validation_failed", "writeMode must be open, link-required or verified-only.");
161
197
  }
198
+ let name;
199
+ if (rawName !== undefined) {
200
+ name = String(rawName).trim();
201
+ if (!name)
202
+ return fail(c, 400, "validation_failed", "A site needs a name.");
203
+ if (name.length > 120) {
204
+ return fail(c, 400, "validation_failed", "That name is longer than 120 characters.");
205
+ }
206
+ }
207
+ // D92 — the domain: a string to set, null (or empty) to clear.
208
+ let domain;
209
+ if (rawDomain !== undefined) {
210
+ if (rawDomain === null || (typeof rawDomain === "string" && !rawDomain.trim())) {
211
+ domain = null;
212
+ }
213
+ else if (typeof rawDomain === "string") {
214
+ const r = normaliseDomain(rawDomain);
215
+ if ("error" in r)
216
+ return fail(c, 400, "validation_failed", r.error);
217
+ domain = r.domain;
218
+ }
219
+ else {
220
+ return fail(c, 400, "validation_failed", "domain must be a string, or null to clear it.");
221
+ }
222
+ }
223
+ // D91 — the switch, 05 §4.9 layer 6's kill switch with a dashboard
224
+ // control: paused refuses the widget's writes and hides the toolbar;
225
+ // reads and the studio's own triage go on.
226
+ let status;
227
+ if (rawStatus !== undefined) {
228
+ if (rawStatus !== "active" && rawStatus !== "paused") {
229
+ return fail(c, 400, "validation_failed", "status must be active or paused.");
230
+ }
231
+ status = rawStatus;
232
+ }
233
+ /**
234
+ * Origins are REPLACED, not merged, because this is an edit form and the
235
+ * only way to correct a wrong one is to be able to remove it. `POST
236
+ * /origins` keeps its additive shape for the add-one case.
237
+ */
238
+ let origins;
239
+ if (rawOrigins !== undefined) {
240
+ try {
241
+ origins = validateOrigins(Array.isArray(rawOrigins)
242
+ ? rawOrigins.map(String)
243
+ : typeof rawOrigins === "string"
244
+ ? rawOrigins.split(",")
245
+ : []);
246
+ }
247
+ catch (e) {
248
+ return fail(c, 400, "validation_failed", e instanceof Error ? e.message : String(e));
249
+ }
250
+ if (!origins.length && !(domain === undefined ? project.domain : domain)) {
251
+ // A site with neither a domain nor an address accepts nothing from
252
+ // anywhere, which is a confusing way to discover you have switched
253
+ // your own widget off. (The switch is `status`, one field down.)
254
+ return fail(c, 400, "validation_failed", "A site needs a domain or at least one address.");
255
+ }
256
+ }
162
257
  await sql.begin(async (tx) => {
163
258
  await tx `SELECT set_config('app.org_id', ${owner.orgId}, true)`;
164
259
  await tx `
165
260
  UPDATE projects
166
- SET write_mode = ${mode}::snag_write_mode,
167
- write_mode_downgrade_at = ${mode === "open" ? null : tx `write_mode_downgrade_at`},
261
+ SET name = ${name === undefined ? tx `name` : tx `${name}`},
262
+ status = ${status === undefined ? tx `status` : tx `${status}::snag_project_status`},
263
+ paused_reason = ${status === undefined ? tx `paused_reason` : status === "paused" ? tx `'dashboard'` : tx `NULL`},
264
+ settings = ${domain === undefined
265
+ ? tx `settings`
266
+ : domain === null
267
+ ? tx `settings - 'domain'`
268
+ : tx `settings || jsonb_build_object('domain', ${domain}::text)`},
269
+ write_mode = ${mode === undefined ? tx `write_mode` : tx `${mode}::snag_write_mode`},
270
+ write_mode_downgrade_at = ${mode === undefined
271
+ ? tx `write_mode_downgrade_at`
272
+ : mode === "open"
273
+ ? null
274
+ : tx `write_mode_downgrade_at`},
275
+ -- Bumped on every edit, not only a mode change: the widget
276
+ -- polls this to learn its config changed, and a renamed site
277
+ -- whose origins moved is exactly when it needs to.
168
278
  config_version = config_version + 1
169
279
  WHERE id = ${project.id}::uuid
170
280
  `;
281
+ if (origins) {
282
+ // Replace, in one transaction, so a site is never briefly origin-less
283
+ // — which would refuse every write from its own staging URL.
284
+ await tx `DELETE FROM project_origins WHERE project_id = ${project.id}::uuid`;
285
+ for (const origin of origins) {
286
+ await tx `
287
+ INSERT INTO project_origins (id, org_id, project_id, pattern, is_wildcard)
288
+ VALUES (gen_random_uuid(), ${owner.orgId}, ${project.id}, ${origin}, ${origin.includes("*.")})
289
+ `;
290
+ }
291
+ }
292
+ });
293
+ // The bootstrap reads the project through the 10-second cache; an edit
294
+ // made on the dashboard should be true on the next page load, not the
295
+ // one after.
296
+ deps.projects?.invalidate(c.req.param("uid"));
297
+ const [row] = await sql `
298
+ SELECT name, write_mode, status, settings->>'domain' AS domain FROM projects WHERE id = ${project.id}::uuid
299
+ `;
300
+ const all = await sql `
301
+ SELECT pattern FROM project_origins WHERE project_id = ${project.id}::uuid ORDER BY pattern
302
+ `;
303
+ return c.json({
304
+ uid: c.req.param("uid"),
305
+ name: row?.name,
306
+ writeMode: row?.write_mode,
307
+ status: row?.status,
308
+ domain: row?.domain ?? null,
309
+ origins: all.map((r) => r.pattern),
171
310
  });
172
- return c.json({ uid: c.req.param("uid"), writeMode: mode });
311
+ });
312
+ /**
313
+ * `DELETE /api/v1/projects/{uid}` — SOFT, and that is the whole design.
314
+ *
315
+ * A site holds a client's words. `deleted_at` has been on the row since
316
+ * `0001` and every read already filters on it, so this is the delete the
317
+ * schema was built for: the site stops appearing, its widget stops being
318
+ * served, and nothing a reviewer wrote is destroyed. An operator who deletes
319
+ * the wrong site has a database row to restore rather than an apology to
320
+ * write.
321
+ *
322
+ * The name is freed for reuse, because a studio that deletes "Kilnwork" and
323
+ * makes a new "Kilnwork" is doing something ordinary — and `uid` is what
324
+ * anything durable actually points at.
325
+ */
326
+ app.delete("/api/v1/projects/:uid", async (c) => {
327
+ const owner = c.get("owner");
328
+ if (!owner)
329
+ return fail(c, 401, "unauthorized", "Sign in to the dashboard first.");
330
+ const [project] = await sql `
331
+ SELECT id, org_id FROM projects WHERE uid = ${c.req.param("uid")} AND deleted_at IS NULL
332
+ `;
333
+ if (!project || project.org_id !== owner.orgId) {
334
+ return fail(c, 404, "project_not_found", "No project with that uid.");
335
+ }
336
+ await sql.begin(async (tx) => {
337
+ await tx `SELECT set_config('app.org_id', ${owner.orgId}, true)`;
338
+ await tx `
339
+ UPDATE projects SET deleted_at = now(), config_version = config_version + 1
340
+ WHERE id = ${project.id}::uuid
341
+ `;
342
+ });
343
+ return c.body(null, 204);
173
344
  });
174
345
  /** The origins on a site — what the dashboard shows beside the script tag. */
175
346
  app.get("/api/v1/projects/:uid/origins", async (c) => {
@@ -177,7 +348,8 @@ export function siteRoutes(deps) {
177
348
  if (!owner)
178
349
  return fail(c, 401, "unauthorized", "Sign in to the dashboard first.");
179
350
  const [project] = await sql `
180
- SELECT id, org_id FROM projects WHERE uid = ${c.req.param("uid")} AND deleted_at IS NULL
351
+ SELECT id, org_id, settings->>'domain' AS domain
352
+ FROM projects WHERE uid = ${c.req.param("uid")} AND deleted_at IS NULL
181
353
  `;
182
354
  if (!project || project.org_id !== owner.orgId) {
183
355
  return fail(c, 404, "project_not_found", "No project with that uid.");
@@ -185,7 +357,8 @@ export function siteRoutes(deps) {
185
357
  const all = await sql `
186
358
  SELECT pattern FROM project_origins WHERE project_id = ${project.id} ORDER BY pattern
187
359
  `;
188
- return c.json({ origins: all.map((r) => r.pattern) });
360
+ // D92: where the widget may run is the domain AND the exact addresses.
361
+ return c.json({ domain: project.domain, origins: all.map((r) => r.pattern) });
189
362
  });
190
363
  return app;
191
364
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/routes/sites.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAwChE;;;;;;;;;;GAUG;AAEH,SAAS,IAAI,CAAC,CAAM,EAAE,MAAc,EAAE,IAAY,EAAE,OAAe;IACjE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAa,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAc;IACvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAO,CAAC;IAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAErB;;;;;;OAMG;IACH,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAC;QAEnF,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAmC,CAAC;QACtF,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;QAC5E,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,iDAAiD,CAAC,CAAC;QAC9F,CAAC;QAED,2EAA2E;QAC3E,uEAAuE;QACvE,2EAA2E;QAC3E,WAAW;QACX,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAChC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;YACjB,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ;gBACvB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;gBAChB,CAAC,CAAC,EAAE,CAAC;QACT,IAAI,CAAC;YACH,eAAe,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,CAAC;QAED,uEAAuE;QACvE,2EAA2E;QAC3E,oEAAoE;QACpE,0EAA0E;QAC1E,oDAAoD;QACpD,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC3C,MAAM,EAAE,CAAA,mCAAmC,KAAK,CAAC,KAAK,SAAS,CAAC;YAChE,OAAO,aAAa,CAAC,EAAE,EAAE;gBACvB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI;gBACJ,SAAS,EAAE,KAAK,CAAC,MAAM;gBACvB,OAAO;gBACP,UAAU,EAAE,IAAI,CAAC,UAAU;aAC5B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,CAAC,IAAI,CACX;YACE,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC;YACjC,GAAG,CAAC,OAAO,CAAC,MAAM;gBAChB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,OAAO,EACL,+DAA+D;wBAC/D,iCAAiC;iBACpC,CAAC;SACP,EACD,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH;;;;;;;OAOG;IACH,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAC;QAEnF,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,CAAkC;oDACb,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;KACjE,CAAC;QACF,yEAAyE;QACzE,yEAAyE;QACzE,6BAA6B;QAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAmC,CAAC;QACtF,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,eAAe,CACvB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CACrF,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,wBAAwB,CAAC,CAAC;QAExF,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC3B,MAAM,EAAE,CAAA,mCAAmC,KAAK,CAAC,KAAK,SAAS,CAAC;YAChE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,qEAAqE;gBACrE,sEAAsE;gBACtE,4DAA4D;gBAC5D,MAAM,EAAE,CAAA;;uCAEuB,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,KAAK,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;;SAE7F,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAuB;+DACe,OAAO,CAAC,EAAE;KACpE,CAAC;QACF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH;;;;;;;;;;;;;;;OAeG;IACH,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAC;QACnF,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,CAAkC;oDACb,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;KACjE,CAAC;QACF,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAmC,CAAC;QACtF,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,eAAe,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;YAC5E,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,yDAAyD,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC3B,MAAM,EAAE,CAAA,mCAAmC,KAAK,CAAC,KAAK,SAAS,CAAC;YAChE,MAAM,EAAE,CAAA;;8BAEgB,IAAI;2CACS,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAA,yBAAyB;;sBAEzE,OAAO,CAAC,EAAE;OACzB,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,8EAA8E;IAC9E,GAAG,CAAC,GAAG,CAAC,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACnD,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,iCAAiC,CAAC,CAAC;QACnF,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,CAAkC;oDACb,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;KACjE,CAAC;QACF,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;QACxE,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAuB;+DACe,OAAO,CAAC,EAAE;KACpE,CAAC;QACF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"sites.js","sourceRoot":"","sources":["../../src/routes/sites.ts"],"names":[],"mappings":"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"}