@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.
- package/README.md +4 -3
- package/dist/app.js +82 -9
- package/dist/app.js.map +1 -1
- package/dist/bin.js +46 -9
- package/dist/bin.js.map +1 -1
- package/dist/boot.js +67 -51
- package/dist/boot.js.map +1 -1
- package/dist/config.generated.js +5 -2
- package/dist/config.generated.js.map +1 -1
- package/dist/db/connect.js +7 -0
- package/dist/db/connect.js.map +1 -1
- package/dist/db/migrations/0005_studio_reviewers.sql +45 -0
- package/dist/db/migrations/0006_instance_settings.sql +69 -0
- package/dist/db/migrations/0007_jira_provider.no-txn.sql +13 -0
- package/dist/domain.js +129 -0
- package/dist/domain.js.map +1 -0
- package/dist/instance/settings.js +54 -0
- package/dist/instance/settings.js.map +1 -0
- package/dist/integrations/github.js +112 -0
- package/dist/integrations/github.js.map +1 -0
- package/dist/integrations/inbound.js +88 -0
- package/dist/integrations/inbound.js.map +1 -0
- package/dist/integrations/jira.js +129 -0
- package/dist/integrations/jira.js.map +1 -0
- package/dist/integrations/linear.js +111 -0
- package/dist/integrations/linear.js.map +1 -0
- package/dist/integrations/outbox.js +305 -0
- package/dist/integrations/outbox.js.map +1 -0
- package/dist/integrations/slack.js +135 -0
- package/dist/integrations/slack.js.map +1 -0
- package/dist/integrations/store.js +101 -0
- package/dist/integrations/store.js.map +1 -0
- package/dist/mail/index.js +21 -11
- package/dist/mail/index.js.map +1 -1
- package/dist/mail/resolve.js +80 -0
- package/dist/mail/resolve.js.map +1 -0
- package/dist/projectCache.js +3 -2
- package/dist/projectCache.js.map +1 -1
- package/dist/projects.js +8 -2
- package/dist/projects.js.map +1 -1
- package/dist/routes/account.js +59 -0
- package/dist/routes/account.js.map +1 -0
- package/dist/routes/activity.js +111 -0
- package/dist/routes/activity.js.map +1 -0
- package/dist/routes/assignees.js +139 -0
- package/dist/routes/assignees.js.map +1 -0
- package/dist/routes/attachments.js +2 -2
- package/dist/routes/attachments.js.map +1 -1
- package/dist/routes/comments.js +27 -17
- package/dist/routes/comments.js.map +1 -1
- package/dist/routes/cors.js +10 -1
- package/dist/routes/cors.js.map +1 -1
- package/dist/routes/instance.js +164 -0
- package/dist/routes/instance.js.map +1 -0
- package/dist/routes/integrations.js +610 -0
- package/dist/routes/integrations.js.map +1 -0
- package/dist/routes/jobs.js +15 -3
- package/dist/routes/jobs.js.map +1 -1
- package/dist/routes/mcpTokens.js +119 -0
- package/dist/routes/mcpTokens.js.map +1 -0
- package/dist/routes/members.js +177 -0
- package/dist/routes/members.js.map +1 -0
- package/dist/routes/owner.js +64 -7
- package/dist/routes/owner.js.map +1 -1
- package/dist/routes/sites.js +181 -8
- package/dist/routes/sites.js.map +1 -1
- package/dist/routes/threads.js +276 -9
- package/dist/routes/threads.js.map +1 -1
- package/dist/serverless.js +39 -6
- package/dist/serverless.js.map +1 -1
- package/dist/studioReviewers.js +67 -0
- package/dist/studioReviewers.js.map +1 -0
- package/dist/vendor/adapters/outbound/sanitise.js +18 -3
- package/dist/vendor/types/brief.js +121 -0
- package/package.json +1 -1
- package/static/dashboard/assets/CompositeItem-CoPuxIvr.js +1 -0
- package/static/dashboard/assets/ConfirmDialog-DkCcJwll.js +1 -0
- package/static/dashboard/assets/CopyButton-BNa2pLLv.js +1 -0
- package/static/dashboard/assets/FieldItemContext-DQXjpFtW.js +1 -0
- package/static/dashboard/assets/InstallTag-SOlWl7Hx.js +1 -0
- package/static/dashboard/assets/SaveState-CmxB4XyX.js +6 -0
- package/static/dashboard/assets/_app-DNkv3HBi.js +1 -0
- package/static/dashboard/assets/_app-xVQe811c.js +56 -0
- package/static/dashboard/assets/activity-DsMa5Ja6.js +1 -0
- package/static/dashboard/assets/arrow-left-vQV4xhAD.js +6 -0
- package/static/dashboard/assets/avatar-DuPL6QD_.js +1 -0
- package/static/dashboard/assets/badge-BWjiIc8T.js +1 -0
- package/static/dashboard/assets/card-BIBfCno8.js +1 -0
- package/static/dashboard/assets/check-Dpx6GTdT.js +6 -0
- package/static/dashboard/assets/chevron-right-DKIlBUGN.js +6 -0
- package/static/dashboard/assets/copy-DCbhEe2L.js +6 -0
- package/static/dashboard/assets/createBaseUIEventDetails-C_ZVkrgp.js +1 -0
- package/static/dashboard/assets/createLucideIcon-C_IGE4WD.js +36 -0
- package/static/dashboard/assets/dialog-BT2uWf4e.js +6 -0
- package/static/dashboard/assets/dropdown-menu-DSXzPAwB.js +11 -0
- package/static/dashboard/assets/image-off-DGWejLDG.js +6 -0
- package/static/dashboard/assets/index-BRTBtV91.css +1 -0
- package/static/dashboard/assets/index-D6FWZoJT.js +129 -0
- package/static/dashboard/assets/label-9QsSpLMA.js +1 -0
- package/static/dashboard/assets/labels--UUyt9uB.js +1 -0
- package/static/dashboard/assets/layout-grid-UPGEmEw-.js +6 -0
- package/static/dashboard/assets/me-0HQsBXLU.js +1 -0
- package/static/dashboard/assets/parts-C29uZ5zo.js +1 -0
- package/static/dashboard/assets/plus-BFNS5LcY.js +6 -0
- package/static/dashboard/assets/s._site-D6Ep2tdc.js +1 -0
- package/static/dashboard/assets/s._site.comments-BRVI5gpJ.js +39 -0
- package/static/dashboard/assets/s._site.reviewers-CiEkZnnp.js +1 -0
- package/static/dashboard/assets/s._site.settings-BqLGyfEd.js +1 -0
- package/static/dashboard/assets/setup-dUMCPWdf.js +1 -0
- package/static/dashboard/assets/sign-in-CdRa-bio.js +1 -0
- package/static/dashboard/assets/sites-CmbtFKoo.js +1 -0
- package/static/dashboard/assets/studio-BHuVXWZh.js +1 -0
- package/static/dashboard/assets/studio-BjeTOKda.js +1 -0
- package/static/dashboard/assets/studio.index--kuzOs7w.js +1 -0
- package/static/dashboard/assets/studio.integrations-Bq6HP80a.js +1 -0
- package/static/dashboard/assets/studio.members-8AB1KYsw.js +1 -0
- package/static/dashboard/assets/sun-BCiTcgnh.js +16 -0
- package/static/dashboard/assets/table-BXmeI_yA.js +1 -0
- package/static/dashboard/assets/update-duXzIzFS.js +1 -0
- package/static/dashboard/assets/useBaseQuery-Cp9wivVR.js +1 -0
- package/static/dashboard/assets/useQuery-BZXZlOqO.js +1 -0
- package/static/dashboard/assets/useRender-CO8aPW06.js +1 -0
- package/static/dashboard/assets/users-Dvw2FCKM.js +6 -0
- package/static/dashboard/assets/welcome-BHKjw20b.js +11 -0
- package/static/dashboard/assets/you-RBpAfUMU.js +1 -0
- package/static/dashboard/assets/zod-BpyjQIvb.js +1 -0
- package/static/dashboard/index.html +17 -2
- package/static/widget/snag.capture.js +1 -1
- package/static/widget/snag.dock.js +1 -1
- package/static/widget/snag.panels.js +1 -1
- package/static/widget/snag.runtime.js +2 -2
- package/static/widget/snag.text.js +1 -1
- package/vercel.json +4 -0
- package/static/dashboard/assets/index-CATItBzT.js +0 -1
- package/static/dashboard/assets/index-DsUJ96yc.css +0 -1
package/dist/boot.js
CHANGED
|
@@ -46,6 +46,10 @@ const hash = (t) => createHash("sha256").update(t).digest();
|
|
|
46
46
|
* makes it an exemption rather than a hole — it cannot outlive the
|
|
47
47
|
* transaction, so nothing after it inherits cross-tenant reach.
|
|
48
48
|
*/
|
|
49
|
+
/** The truth, from the database, every time. Boot and `POST /setup` use this:
|
|
50
|
+
* boot runs once per process, the claim is rare, and both need the answer
|
|
51
|
+
* for the database they are actually connected to — see `isClaimedFast` for
|
|
52
|
+
* what happened when this one remembered. */
|
|
49
53
|
export async function isClaimed(sql) {
|
|
50
54
|
const rows = (await sql.begin(async (tx) => {
|
|
51
55
|
await tx `SET LOCAL app.maintenance = 'on'`;
|
|
@@ -53,14 +57,43 @@ export async function isClaimed(sql) {
|
|
|
53
57
|
}));
|
|
54
58
|
return (rows[0]?.n ?? 0) > 0;
|
|
55
59
|
}
|
|
56
|
-
|
|
60
|
+
/**
|
|
61
|
+
* Remembered once TRUE, for the life of the process, and never remembered
|
|
62
|
+
* false — for `GET /api/v1/setup` ALONE. D82 makes claimed-ness monotonic:
|
|
63
|
+
* the window closes permanently at the first claim, so a database that has
|
|
64
|
+
* once said "claimed" will never say otherwise, and asking it again is a
|
|
65
|
+
* transaction plus a count across the Atlantic for an answer that cannot
|
|
66
|
+
* change. Measured: 1.08 s per call against Neon before, ~1 ms after, and the
|
|
67
|
+
* signed-out dashboard load used to wait on it.
|
|
68
|
+
*
|
|
69
|
+
* WHY THIS IS NOT `isClaimed` ITSELF. For half a day it was, and the
|
|
70
|
+
* bootstrap suite went six red: those tests claim an instance, then drop
|
|
71
|
+
* and recreate the schema and expect boot to find it unclaimed — and a
|
|
72
|
+
* process-wide memo said "claimed" to a database that no longer was. A
|
|
73
|
+
* running server never sees that; a test process does, and so would any
|
|
74
|
+
* operator pointing one process at a second database. So the memo lives on
|
|
75
|
+
* the one hot, read-only route where a stale true is harmless, and every
|
|
76
|
+
* caller that can act on the answer asks for real.
|
|
77
|
+
*
|
|
78
|
+
* FALSE is never cached: false is the state that changes.
|
|
79
|
+
*/
|
|
80
|
+
let claimedOnce = false;
|
|
81
|
+
export async function isClaimedFast(sql) {
|
|
82
|
+
if (claimedOnce)
|
|
83
|
+
return true;
|
|
84
|
+
const claimed = await isClaimed(sql);
|
|
85
|
+
if (claimed)
|
|
86
|
+
claimedOnce = true;
|
|
87
|
+
return claimed;
|
|
88
|
+
}
|
|
89
|
+
export function unclaimedBanner(base) {
|
|
57
90
|
const lines = [
|
|
58
|
-
"Snagset is running
|
|
59
|
-
"Open this URL within 24 hours to create the first owner:",
|
|
91
|
+
"Snagset is running and has no owner yet.",
|
|
60
92
|
"",
|
|
61
|
-
|
|
93
|
+
`Open ${base}/ and create the first owner.`,
|
|
62
94
|
"",
|
|
63
|
-
"
|
|
95
|
+
"The FIRST person to do that becomes the owner, so do it",
|
|
96
|
+
"before you share the address.",
|
|
64
97
|
];
|
|
65
98
|
const w = Math.max(...lines.map((l) => l.length)) + 2;
|
|
66
99
|
const pad = (l) => `│ ${l.padEnd(w)} │`;
|
|
@@ -106,35 +139,6 @@ export function resolveSecretKey(cfg, dataDir, log) {
|
|
|
106
139
|
`every outstanding reviewer session is dead (08 §4.7).`);
|
|
107
140
|
return key;
|
|
108
141
|
}
|
|
109
|
-
/**
|
|
110
|
-
* `snagset bootstrap` — 08 §3.4 step 7: *"mints on demand without a restart"*.
|
|
111
|
-
*
|
|
112
|
-
* It exists because the token is stored as a HASH, so a claim URL cannot be
|
|
113
|
-
* re-printed — only replaced. An operator who scrolled past the banner, or
|
|
114
|
-
* whose service manager swallowed stdout, has no other way back in, and the
|
|
115
|
-
* banner promises this command by name.
|
|
116
|
-
*
|
|
117
|
-
* Minting invalidates any outstanding token, which is the right trade: two
|
|
118
|
-
* live keys to an unclaimed instance is strictly worse than one.
|
|
119
|
-
*/
|
|
120
|
-
export async function mintClaim(sql, cfg, dataDir, now = () => new Date()) {
|
|
121
|
-
const token = mintToken();
|
|
122
|
-
let projectUid = "";
|
|
123
|
-
await sql.begin(async (tx) => {
|
|
124
|
-
await tx `DELETE FROM setup_tokens WHERE consumed_at IS NULL`;
|
|
125
|
-
await tx `
|
|
126
|
-
INSERT INTO setup_tokens (id, token_hash, expires_at)
|
|
127
|
-
VALUES (${randomUUID()}, ${hash(token)}, ${new Date(now().getTime() + 24 * 60 * 60 * 1000)})
|
|
128
|
-
`;
|
|
129
|
-
});
|
|
130
|
-
const base = cfg.required("SNAGSET_BASE_URL").replace(/\/+$/, "");
|
|
131
|
-
const url = `${base}/setup?claim=${token}`;
|
|
132
|
-
if (dataDir) {
|
|
133
|
-
mkdirSync(dataDir, { recursive: true, mode: 0o700 });
|
|
134
|
-
writeFileSync(join(dataDir, "bootstrap.txt"), claimBanner(url) + "\n", { mode: 0o600 });
|
|
135
|
-
}
|
|
136
|
-
return url;
|
|
137
|
-
}
|
|
138
142
|
export async function boot(sql, cfg, opts = {}) {
|
|
139
143
|
const writable = opts.writable ?? true;
|
|
140
144
|
const log = opts.log ?? ((level, msg) => console[level === "error" ? "error" : "log"](`${level}: ${msg}`));
|
|
@@ -161,7 +165,9 @@ export async function boot(sql, cfg, opts = {}) {
|
|
|
161
165
|
* whole class of misconfiguration was designed out rather than reported.
|
|
162
166
|
*/
|
|
163
167
|
const mail = selectMailer(cfg);
|
|
164
|
-
log("info", mail.kind === "none"
|
|
168
|
+
log("info", mail.kind === "none"
|
|
169
|
+
? "mail: nothing in the environment — a transport connected on Studio › General is used if there is one (D89)"
|
|
170
|
+
: `mail: ${mail.kind} transport, from ${mail.from} (from the environment)`);
|
|
165
171
|
/**
|
|
166
172
|
* The bucket, and — when it comes from the environment — a real PROBE.
|
|
167
173
|
*
|
|
@@ -224,22 +230,28 @@ export async function boot(sql, cfg, opts = {}) {
|
|
|
224
230
|
"Run `npx snagset bootstrap` to mint a fresh one.");
|
|
225
231
|
return { state: "CLAIMABLE", claimUrl: null, rls, dataDir };
|
|
226
232
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
+
/**
|
|
234
|
+
* NOTHING IS MINTED HERE — D82.
|
|
235
|
+
*
|
|
236
|
+
* This used to mint a token, store its hash with a 24-hour expiry, print a
|
|
237
|
+
* boxed claim URL, and write the same box to `<data>/bootstrap.txt` because
|
|
238
|
+
* "logs scroll". All of it guarded a door that is now deliberately open: an
|
|
239
|
+
* unclaimed instance is claimable by whoever reaches it first, so a token
|
|
240
|
+
* standing beside that path protects nothing and only implies it does.
|
|
241
|
+
*
|
|
242
|
+
* The banner was worse than redundant. "Open this URL within 24 hours" reads
|
|
243
|
+
* as a requirement, so an operator who scrolled past it went hunting for
|
|
244
|
+
* `snagset bootstrap` instead of opening the page — and on a serverless
|
|
245
|
+
* deploy, which never minted one at all, they went hunting for a line that
|
|
246
|
+
* could not exist. That is the bug D82 was decided to end.
|
|
247
|
+
*
|
|
248
|
+
* `<data>/bootstrap.txt` goes with it. The only thing still written under
|
|
249
|
+
* the data directory is `secret.key`, which is a real secret an operator
|
|
250
|
+
* must back up, not a note about a URL.
|
|
251
|
+
*/
|
|
233
252
|
const base = cfg.required("SNAGSET_BASE_URL").replace(/\/+$/, "");
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if (dataDir) {
|
|
237
|
-
// §3.4 step 4: stdout AND `<data>/bootstrap.txt`. Logs scroll, and on a box
|
|
238
|
-
// started by a service manager the operator may never see stdout at all.
|
|
239
|
-
mkdirSync(dataDir, { recursive: true, mode: 0o700 });
|
|
240
|
-
writeFileSync(join(dataDir, "bootstrap.txt"), claimBanner(claimUrl) + "\n", { mode: 0o600 });
|
|
241
|
-
}
|
|
242
|
-
return { state: "CLAIMABLE", claimUrl, rls, dataDir };
|
|
253
|
+
log("info", "\n" + unclaimedBanner(base));
|
|
254
|
+
return { state: "CLAIMABLE", claimUrl: null, rls, dataDir };
|
|
243
255
|
}
|
|
244
256
|
/** Constant-time compare of a presented claim token against the stored hash. */
|
|
245
257
|
export function tokenHash(token) {
|
|
@@ -331,7 +343,11 @@ export async function bootstrapFromEnv(sql, cfg, log) {
|
|
|
331
343
|
await tx `INSERT INTO orgs (id, name, slug) VALUES (${orgId}, ${projectName}, ${slugify(projectName)})`;
|
|
332
344
|
await tx `
|
|
333
345
|
INSERT INTO users (id, org_id, email, name, password_hash, email_verified)
|
|
334
|
-
|
|
346
|
+
-- name is '' — the schema's default — not the project's. The rail shows
|
|
347
|
+
-- a person's name where it has one and their email where it does not;
|
|
348
|
+
-- it showed "Acme redesign" as who you are, initials "AR". A site is
|
|
349
|
+
-- not a person, and bootstrap has no way to ask for one yet.
|
|
350
|
+
VALUES (${userId}, ${orgId}, ${email}, '', ${hashPassword(password)}, true)
|
|
335
351
|
`;
|
|
336
352
|
await tx `INSERT INTO memberships (org_id, user_id, role) VALUES (${orgId}, ${userId}, 'owner')`;
|
|
337
353
|
projectUid = (await createProject(tx, {
|
package/dist/boot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boot.js","sourceRoot":"","sources":["../src/boot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAqCnD,gFAAgF;AAChF,MAAM,SAAS,GAAG,GAAW,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACtE,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AAE5E;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAiB;IAC/C,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACzC,MAAM,EAAE,CAAA,kCAAkC,CAAC;QAC3C,OAAO,EAAE,CAAiB,qCAAqC,CAAC;IAClE,CAAC,CAAC,CAA+B,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"boot.js","sourceRoot":"","sources":["../src/boot.ts"],"names":[],"mappings":"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"}
|
package/dist/config.generated.js
CHANGED
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
// not hand-maintained." A hand-kept copy of an 85-row table is a copy that
|
|
8
8
|
// is wrong by the second edit — draft 3 proved it, five variables at once.
|
|
9
9
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
10
|
-
/**
|
|
10
|
+
/** 79 variables, parsed from §4.2–§4.10. */
|
|
11
11
|
export const REGISTRY = [
|
|
12
12
|
{ name: "SNAGSET_BASE_URL", type: "url", default: "http://localhost:8080", required: false, oneOf: null, secret: false, section: "4.2" },
|
|
13
13
|
{ name: "SNAGSET_PORT", type: "int", default: "8080", required: false, oneOf: null, secret: false, section: "4.2" },
|
|
14
14
|
{ name: "SNAGSET_BIND_ADDRESS", type: "string", default: "0.0.0.0", required: false, oneOf: null, secret: false, section: "4.2" },
|
|
15
|
-
{ name: "DATABASE_URL", type: "url", default: null, required: true, oneOf: null, secret:
|
|
15
|
+
{ name: "DATABASE_URL", type: "url", default: null, required: true, oneOf: null, secret: true, section: "4.2" },
|
|
16
16
|
{ name: "SNAGSET_DATABASE_POOL_MAX", type: "int", default: "10", required: false, oneOf: null, secret: false, section: "4.2" },
|
|
17
17
|
{ name: "SNAGSET_DATABASE_SSL", type: "enum", default: "auto", required: false, oneOf: ["auto", "require", "disable"], secret: false, section: "4.2" },
|
|
18
18
|
{ name: "SNAGSET_DATA_DIR", type: "string", default: "./.snagset", required: false, oneOf: null, secret: false, section: "4.2" },
|
|
@@ -72,6 +72,7 @@ export const REGISTRY = [
|
|
|
72
72
|
{ name: "SNAGSET_GITHUB_WEBHOOK_SECRET", type: "string", default: null, required: false, oneOf: null, secret: true, section: "4.9" },
|
|
73
73
|
{ name: "SNAGSET_GITHUB_CLIENT_ID", type: "string", default: null, required: false, oneOf: null, secret: false, section: "4.9" },
|
|
74
74
|
{ name: "SNAGSET_GITHUB_CLIENT_SECRET", type: "string", default: null, required: false, oneOf: null, secret: true, section: "4.9" },
|
|
75
|
+
{ name: "SNAGSET_GITHUB_API_BASE", type: "url", default: "https://api.github.com", required: false, oneOf: null, secret: false, section: "4.9" },
|
|
75
76
|
{ name: "SNAGSET_SLACK_CLIENT_ID", type: "string", default: null, required: false, oneOf: null, secret: false, section: "4.9" },
|
|
76
77
|
{ name: "SNAGSET_SLACK_CLIENT_SECRET", type: "string", default: null, required: false, oneOf: null, secret: true, section: "4.9" },
|
|
77
78
|
{ name: "SNAGSET_SLACK_SIGNING_SECRET", type: "string", default: null, required: false, oneOf: null, secret: true, section: "4.9" },
|
|
@@ -83,6 +84,8 @@ export const REGISTRY = [
|
|
|
83
84
|
{ name: "SNAGSET_LINEAR_CLIENT_ID", type: "string", default: null, required: false, oneOf: null, secret: false, section: "4.9" },
|
|
84
85
|
{ name: "SNAGSET_LINEAR_CLIENT_SECRET", type: "string", default: null, required: false, oneOf: null, secret: true, section: "4.9" },
|
|
85
86
|
{ name: "SNAGSET_LINEAR_WEBHOOK_SECRET", type: "string", default: null, required: false, oneOf: null, secret: true, section: "4.9" },
|
|
87
|
+
{ name: "SNAGSET_LINEAR_API_BASE", type: "url", default: "https://api.linear.app/graphql", required: false, oneOf: null, secret: false, section: "4.9" },
|
|
88
|
+
{ name: "SNAGSET_SLACK_API_BASE", type: "url", default: "https://slack.com/api", required: false, oneOf: null, secret: false, section: "4.9" },
|
|
86
89
|
{ name: "SNAGSET_MCP_TOKEN", type: "string", default: null, required: false, oneOf: null, secret: false, section: "4.9" },
|
|
87
90
|
{ name: "SNAGSET_MCP_HOST", type: "string", default: null, required: false, oneOf: null, secret: false, section: "4.9" },
|
|
88
91
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.generated.js","sourceRoot":"","sources":["../src/config.generated.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.generated.js","sourceRoot":"","sources":["../src/config.generated.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,wCAAwC;AACxC,kEAAkE;AAClE,0EAA0E;AAC1E,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,gFAAgF;AAchF,4CAA4C;AAC5C,MAAM,CAAC,MAAM,QAAQ,GAAsB;IACzC,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACxI,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACnH,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACjI,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IAC/G,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC9H,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACtJ,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAChI,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IACzH,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC/H,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACnI,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACvH,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACxI,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACvJ,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACxI,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC7H,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC1H,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC3H,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACrH,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC3H,EAAE,IAAI,EAAE,gCAAgC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACtI,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACjI,EAAE,IAAI,EAAE,kCAAkC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACrI,EAAE,IAAI,EAAE,gCAAgC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACnI,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAChI,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACjI,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACnI,EAAE,IAAI,EAAE,kCAAkC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACxI,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IAC3I,EAAE,IAAI,EAAE,qCAAqC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC5I,EAAE,IAAI,EAAE,oCAAoC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACvI,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC9H,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACxI,EAAE,IAAI,EAAE,gCAAgC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC1I,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAChI,EAAE,IAAI,EAAE,qCAAqC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC/I,EAAE,IAAI,EAAE,gCAAgC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClI,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACjI,EAAE,IAAI,EAAE,qCAAqC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACxI,EAAE,IAAI,EAAE,yCAAyC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC5I,EAAE,IAAI,EAAE,+BAA+B,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACpI,EAAE,IAAI,EAAE,uCAAuC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IAC5I,EAAE,IAAI,EAAE,gCAAgC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACtI,EAAE,IAAI,EAAE,mCAAmC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACzI,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC3H,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC5H,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAClI,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACpJ,EAAE,IAAI,EAAE,kCAAkC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACrI,EAAE,IAAI,EAAE,+BAA+B,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACnI,EAAE,IAAI,EAAE,oCAAoC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACvI,EAAE,IAAI,EAAE,0CAA0C,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACnJ,EAAE,IAAI,EAAE,2CAA2C,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC9I,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IACvH,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACxH,EAAE,IAAI,EAAE,gCAAgC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACtI,EAAE,IAAI,EAAE,oCAAoC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IACzI,EAAE,IAAI,EAAE,gCAAgC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACtI,EAAE,IAAI,EAAE,oCAAoC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IACzI,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC7H,EAAE,IAAI,EAAE,qCAAqC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC3I,EAAE,IAAI,EAAE,+BAA+B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IACpI,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAChI,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IACnI,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAChJ,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC/H,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IAClI,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IACnI,EAAE,IAAI,EAAE,sCAAsC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC7I,EAAE,IAAI,EAAE,6BAA6B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACpI,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACtH,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC9H,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACjI,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAChI,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IACnI,EAAE,IAAI,EAAE,+BAA+B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;IACpI,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,gCAAgC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACxJ,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IAC9I,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;IACzH,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;CACzH,CAAC;AAEF;yEACyE;AACzE,MAAM,CAAC,MAAM,OAAO,GAAqE;IACvF,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,0BAA0B,EAAE;IAC7D,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,kBAAkB,EAAE;IACtD,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE,EAAE,cAAc,EAAE;IACpD,EAAE,IAAI,EAAE,qBAAqB,EAAE,EAAE,EAAE,IAAI,EAAE;IACzC,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,EAAE,IAAI,EAAE;IAC7C,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,EAAE,IAAI,EAAE;IAC7C,EAAE,IAAI,EAAE,kCAAkC,EAAE,EAAE,EAAE,iCAAiC,EAAE;IACnF,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE,EAAE,oCAAoC,EAAE;IAC9E,EAAE,IAAI,EAAE,4BAA4B,EAAE,EAAE,EAAE,qBAAqB,EAAE;IACjE,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,kBAAkB,EAAE;IACpD,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,mBAAmB,EAAE;IACtD,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,EAAE,kBAAkB,EAAE;IAC1D,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,EAAE,IAAI,EAAE;IAC5C,EAAE,IAAI,EAAE,wBAAwB,EAAE,EAAE,EAAE,IAAI,EAAE;IAC5C,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,mBAAmB,EAAE;IAClD,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE,EAAE,gCAAgC,EAAE;IAC1E,EAAE,IAAI,EAAE,wCAAwC,EAAE,EAAE,EAAE,mCAAmC,EAAE;IAC3F,EAAE,IAAI,EAAE,gCAAgC,EAAE,EAAE,EAAE,qCAAqC,EAAE;IACrF,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE,EAAE,IAAI,EAAE;IAC1C,EAAE,IAAI,EAAE,+BAA+B,EAAE,EAAE,EAAE,IAAI,EAAE;IACnD,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,EAAE,cAAc,EAAE;IAChD,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,cAAc,EAAE;IAC/C,EAAE,IAAI,EAAE,yBAAyB,EAAE,EAAE,EAAE,IAAI,EAAE;CAC9C,CAAC"}
|
package/dist/db/connect.js
CHANGED
|
@@ -41,6 +41,13 @@ export function connect(url, opts = {}) {
|
|
|
41
41
|
return postgres(url, {
|
|
42
42
|
max: opts.max ?? 10,
|
|
43
43
|
prepare: false,
|
|
44
|
+
// Seconds. Without this a pooler that stops resolving — Neon did, twice in
|
|
45
|
+
// one afternoon: `read ETIMEDOUT`, then `getaddrinfo ENOTFOUND` — leaves
|
|
46
|
+
// every request hanging for the OS's TCP timeout, and the dashboard shows
|
|
47
|
+
// a loading skeleton with nothing to say for as long as that takes. Ten
|
|
48
|
+
// is generous for a managed database on the other side of an ocean and
|
|
49
|
+
// short enough that the client's "still waiting" can become a real error.
|
|
50
|
+
connect_timeout: 10,
|
|
44
51
|
// The server has its own logging rules (app.ts); postgres.js NOTICE output
|
|
45
52
|
// would bypass them.
|
|
46
53
|
onnotice: () => { },
|
package/dist/db/connect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/db/connect.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,OAAyB,EAAE;IAC9D,OAAO,QAAQ,CAAC,GAAG,EAAE;QACnB,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;QACnB,OAAO,EAAE,KAAK;QACd,2EAA2E;QAC3E,qBAAqB;QACrB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;KACnB,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/db/connect.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,OAAyB,EAAE;IAC9D,OAAO,QAAQ,CAAC,GAAG,EAAE;QACnB,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;QACnB,OAAO,EAAE,KAAK;QACd,2EAA2E;QAC3E,yEAAyE;QACzE,0EAA0E;QAC1E,wEAAwE;QACxE,uEAAuE;QACvE,0EAA0E;QAC1E,eAAe,EAAE,EAAE;QACnB,2EAA2E;QAC3E,qBAAqB;QACrB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;KACnB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
-- ───────────────────────────────────────
|
|
2
|
+
-- Studio people become reviewers — 05 §3.4 / §6.4b, FOLDBACK §A3, D90.
|
|
3
|
+
--
|
|
4
|
+
-- A thread's assignee is a `reviewers` row, and the pool it is picked from is
|
|
5
|
+
-- "studio people ∪ everyone who has commented in the project". The second
|
|
6
|
+
-- half always had rows; the first half is a `kind='verified'` row per member
|
|
7
|
+
-- per project with `user_id` set, which §6.4b says is materialised on project
|
|
8
|
+
-- create and on membership create. Both writes now do that
|
|
9
|
+
-- (`studioReviewers.ts`); this file is the one-time catch-up for every
|
|
10
|
+
-- instance that was claimed before they did.
|
|
11
|
+
--
|
|
12
|
+
-- NO SCHEMA CHANGE. `threads.assignee_id`, `reviewers.user_id` and
|
|
13
|
+
-- `reviewers_user_uniq` have been in 0001 since the freeze — this is data, so
|
|
14
|
+
-- `schema:diff:check` sees nothing and §3 needs no edit.
|
|
15
|
+
--
|
|
16
|
+
-- THE MAINTENANCE CLAIM. Every table here is FORCE ROW LEVEL SECURITY, and a
|
|
17
|
+
-- migration runs with no `app.org_id` — under the policies alone this INSERT
|
|
18
|
+
-- … SELECT would see no memberships and insert nothing, silently. 0002 (D56)
|
|
19
|
+
-- added the claim for exactly this shape of write; SET LOCAL scopes it to the
|
|
20
|
+
-- migration's own transaction and it is gone at commit.
|
|
21
|
+
--
|
|
22
|
+
-- IDEMPOTENT by `reviewers_user_uniq`: run against a database where the
|
|
23
|
+
-- routes already materialised some rows, it adds only the missing ones.
|
|
24
|
+
-- Soft-deleted users are skipped — somebody who left the studio is not
|
|
25
|
+
-- somebody to hand work to.
|
|
26
|
+
SET LOCAL app.maintenance = 'on';
|
|
27
|
+
|
|
28
|
+
INSERT INTO reviewers (id, org_id, project_id, kind, name, email, user_id)
|
|
29
|
+
SELECT gen_random_uuid(), p.org_id, p.id, 'verified',
|
|
30
|
+
COALESCE(NULLIF(u.name, ''), u.email), u.email, u.id
|
|
31
|
+
FROM memberships m
|
|
32
|
+
JOIN users u ON u.id = m.user_id AND u.deleted_at IS NULL
|
|
33
|
+
JOIN projects p ON p.org_id = m.org_id AND p.deleted_at IS NULL
|
|
34
|
+
ON CONFLICT (project_id, user_id) WHERE user_id IS NOT NULL DO NOTHING;
|
|
35
|
+
|
|
36
|
+
-- THE COUNTERS THE POOL READS. §6.4b's predicate is thread_count > 0 OR
|
|
37
|
+
-- comment_count > 0, and neither had ever been maintained: thread_count was
|
|
38
|
+
-- untouched since 0001 and comment_count moved only on the thread row. Both
|
|
39
|
+
-- move on every write from D90 on (threads.ts, comments.ts); this is their
|
|
40
|
+
-- one-time catch-up, so a client who left a pin last month is assignable
|
|
41
|
+
-- today. Every comment row counts, the thread's first one included -- the
|
|
42
|
+
-- same rule the live writes apply.
|
|
43
|
+
UPDATE reviewers r
|
|
44
|
+
SET thread_count = (SELECT count(*)::int FROM threads t WHERE t.created_by = r.id AND t.deleted_at IS NULL),
|
|
45
|
+
comment_count = (SELECT count(*)::int FROM comments c WHERE c.author_id = r.id AND c.deleted_at IS NULL);
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
-- ───────────────────────────────────────
|
|
2
|
+
-- Instance settings — D89, plan/08 §5b: what the dashboard connected.
|
|
3
|
+
--
|
|
4
|
+
-- "If added via the environment variables it takes those and doesn't allow
|
|
5
|
+
-- to change in the dashboard, but if no env variables then we can add and
|
|
6
|
+
-- connect via the general settings." The environment wins and locks; this
|
|
7
|
+
-- table is where the dashboard's half lives. One row per key per org, the
|
|
8
|
+
-- non-secret half in `value` and the secret sealed exactly as
|
|
9
|
+
-- `orgs.storage_credentials` and `integrations.credentials` are — AES-256-GCM
|
|
10
|
+
-- under HKDF(SNAGSET_SECRET_KEY, 'credential-enc') — so there is one way to
|
|
11
|
+
-- hold a secret at rest rather than three.
|
|
12
|
+
--
|
|
13
|
+
-- Mail is the first key (`mail`: the transport URL sealed, the From address
|
|
14
|
+
-- and the transport's shape in `value`); the trackers' credentials follow
|
|
15
|
+
-- with phase 7. Storage stays on the `orgs.storage_*` columns it had before
|
|
16
|
+
-- this table existed: moving it would be a migration of secrets for no gain.
|
|
17
|
+
--
|
|
18
|
+
-- Under D71, §3 describes the CURRENT schema, so the table is added there in
|
|
19
|
+
-- the same commit and `pnpm schema:diff:check` asserts the two agree.
|
|
20
|
+
--
|
|
21
|
+
-- THE POLICY, TWICE. The generator renders every policy in 0001's shape, and
|
|
22
|
+
-- 0002's rewrite (NULLIF and the maintenance claim) runs only over the
|
|
23
|
+
-- `public` schema — in the diff tool's scratch schema it touches nothing, so
|
|
24
|
+
-- both sides compare policies in 0001's shape. This file does the same as
|
|
25
|
+
-- 0002 did for every earlier table: create the policy in 0001's shape, then
|
|
26
|
+
-- rewrite it in place, scoped to this table and to `public`. On a real
|
|
27
|
+
-- database the second step lands; in the diff's scratch schema it is inert,
|
|
28
|
+
-- and the two agree. Guarded against running twice, unlike 0002, because a
|
|
29
|
+
-- double NULLIF is what a re-run produced while this was being written.
|
|
30
|
+
CREATE TABLE instance_settings (
|
|
31
|
+
org_id uuid NOT NULL REFERENCES orgs(id) ON DELETE CASCADE,
|
|
32
|
+
key text NOT NULL CHECK (key ~ '^[a-z][a-z0-9_.-]{0,63}$'),
|
|
33
|
+
value jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
34
|
+
secret bytea,
|
|
35
|
+
secret_iv bytea,
|
|
36
|
+
updated_by uuid REFERENCES users(id) ON DELETE SET NULL,
|
|
37
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
38
|
+
PRIMARY KEY (org_id, key),
|
|
39
|
+
CHECK ((secret IS NULL) = (secret_iv IS NULL))
|
|
40
|
+
);
|
|
41
|
+
ALTER TABLE instance_settings ENABLE ROW LEVEL SECURITY;
|
|
42
|
+
ALTER TABLE instance_settings FORCE ROW LEVEL SECURITY;
|
|
43
|
+
CREATE POLICY instance_settings_org ON instance_settings
|
|
44
|
+
USING (org_id = current_setting('app.org_id', true)::uuid);
|
|
45
|
+
|
|
46
|
+
DO $$
|
|
47
|
+
DECLARE
|
|
48
|
+
existing text;
|
|
49
|
+
BEGIN
|
|
50
|
+
SELECT pg_get_expr(pol.polqual, pol.polrelid) INTO existing
|
|
51
|
+
FROM pg_policy pol
|
|
52
|
+
JOIN pg_class c ON c.oid = pol.polrelid
|
|
53
|
+
JOIN pg_namespace n ON n.oid = c.relnamespace
|
|
54
|
+
WHERE n.nspname = 'public' AND c.relname = 'instance_settings' AND pol.polname = 'instance_settings_org';
|
|
55
|
+
IF existing IS NULL OR existing LIKE '%NULLIF%' THEN
|
|
56
|
+
RETURN;
|
|
57
|
+
END IF;
|
|
58
|
+
existing := replace(
|
|
59
|
+
existing,
|
|
60
|
+
'current_setting(''app.org_id''::text, true)',
|
|
61
|
+
'NULLIF(current_setting(''app.org_id''::text, true), ''''::text)'
|
|
62
|
+
);
|
|
63
|
+
IF existing NOT LIKE '%app.maintenance%' THEN
|
|
64
|
+
existing := existing || ' OR current_setting(''app.maintenance'', true) = ''on''';
|
|
65
|
+
END IF;
|
|
66
|
+
EXECUTE 'DROP POLICY instance_settings_org ON public.instance_settings';
|
|
67
|
+
EXECUTE format('CREATE POLICY instance_settings_org ON public.instance_settings USING (%s)', existing);
|
|
68
|
+
END
|
|
69
|
+
$$;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
-- ───────────────────────────────────────
|
|
2
|
+
-- Jira joins the providers — D88 named it, D98 built it (2026-09-03).
|
|
3
|
+
--
|
|
4
|
+
-- `snag_provider` was closed at github, linear, slack and webhook in 0001;
|
|
5
|
+
-- Jira Cloud was not in the original set and Faster Fixes made it a parity
|
|
6
|
+
-- item. ADD VALUE cannot run inside a transaction block on every Postgres
|
|
7
|
+
-- this ships on, and the new value cannot be used in the transaction that
|
|
8
|
+
-- added it either — hence `.no-txn`, which migrate.ts runs on the bare
|
|
9
|
+
-- connection, and hence a file of its own before anything writes 'jira'.
|
|
10
|
+
--
|
|
11
|
+
-- Under D71, §3.1's enum is amended in the same commit and
|
|
12
|
+
-- `pnpm schema:diff:check` asserts the two agree.
|
|
13
|
+
ALTER TYPE snag_provider ADD VALUE IF NOT EXISTS 'jira';
|
package/dist/domain.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A site's DOMAIN — plan/08 §3, D92, borrowed from Faster Fixes's one-field
|
|
3
|
+
* setup: the studio types `acme.com` once and the widget works on
|
|
4
|
+
* `https://acme.com`, `https://staging.acme.com`, `http://preview.acme.com:3000`
|
|
5
|
+
* and on localhost, with no list of origins to maintain. Exact origins stay
|
|
6
|
+
* as "also allowed" for the cases a domain cannot say (a client's separate
|
|
7
|
+
* marketing host, a numbered preview on somebody else's suffix).
|
|
8
|
+
*
|
|
9
|
+
* The rule, and the two boundaries that make it safe:
|
|
10
|
+
* · the origin's HOSTNAME equals the domain, or ends with "." + domain — a
|
|
11
|
+
* dot boundary, so `notacme.com` never matches `acme.com`;
|
|
12
|
+
* · any scheme and any port, because a staging server on :3000 is the same
|
|
13
|
+
* site as the one on :443, and the client's own site is the trust anchor
|
|
14
|
+
* (05 §4.3's "scheme and port must match" was written for exact origins,
|
|
15
|
+
* where a mismatch means a different origin; a domain is a claim about a
|
|
16
|
+
* host, and the host is what the client owns);
|
|
17
|
+
* · never a public suffix: `vercel.app` would allow every site on Vercel,
|
|
18
|
+
* which is the subdomain-takeover class §4.3 refuses for wildcards.
|
|
19
|
+
*/
|
|
20
|
+
/** Suffixes shared by strangers — the ones §4.3 names, plus the usual PaaS hosts. */
|
|
21
|
+
export const SHARED_SUFFIXES = [
|
|
22
|
+
"vercel.app",
|
|
23
|
+
"netlify.app",
|
|
24
|
+
"pages.dev",
|
|
25
|
+
"github.io",
|
|
26
|
+
"gitlab.io",
|
|
27
|
+
"workers.dev",
|
|
28
|
+
"ngrok-free.app",
|
|
29
|
+
"ngrok.io",
|
|
30
|
+
"ngrok.app",
|
|
31
|
+
"herokuapp.com",
|
|
32
|
+
"fly.dev",
|
|
33
|
+
"onrender.com",
|
|
34
|
+
"render.com",
|
|
35
|
+
"web.app",
|
|
36
|
+
"firebaseapp.com",
|
|
37
|
+
"azurewebsites.net",
|
|
38
|
+
"azurestaticapps.net",
|
|
39
|
+
"amazonaws.com",
|
|
40
|
+
"cloudfront.net",
|
|
41
|
+
"surge.sh",
|
|
42
|
+
"glitch.me",
|
|
43
|
+
"repl.co",
|
|
44
|
+
"replit.app",
|
|
45
|
+
"webflow.io",
|
|
46
|
+
"framer.app",
|
|
47
|
+
"framer.website",
|
|
48
|
+
"wixsite.com",
|
|
49
|
+
"squarespace.com",
|
|
50
|
+
"myshopify.com",
|
|
51
|
+
"wordpress.com",
|
|
52
|
+
"blogspot.com",
|
|
53
|
+
"github.dev",
|
|
54
|
+
"codesandbox.io",
|
|
55
|
+
"stackblitz.io",
|
|
56
|
+
"localhost",
|
|
57
|
+
];
|
|
58
|
+
const HOST = /^(?=.{1,253}$)([a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)(\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/;
|
|
59
|
+
/**
|
|
60
|
+
* What the studio typed → the domain to store, or a sentence.
|
|
61
|
+
* Accepts a bare host or a full address (the hostname is taken), lower-cases,
|
|
62
|
+
* strips a trailing dot and a leading `www.` — `www.acme.com` and `acme.com`
|
|
63
|
+
* are one site, and the shorter one covers both.
|
|
64
|
+
*/
|
|
65
|
+
export function normaliseDomain(input) {
|
|
66
|
+
let raw = input.trim().toLowerCase();
|
|
67
|
+
if (!raw)
|
|
68
|
+
return { error: "Type the site's domain, like acme.com." };
|
|
69
|
+
if (raw.includes("://")) {
|
|
70
|
+
try {
|
|
71
|
+
raw = new URL(raw).hostname;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return { error: `${JSON.stringify(input.trim())} is not an address. A domain looks like acme.com.` };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
raw = raw.replace(/^\/+/, "").split(/[/?#:]/)[0] ?? "";
|
|
79
|
+
}
|
|
80
|
+
raw = raw.replace(/\.$/, "").replace(/^www\./, "");
|
|
81
|
+
if (raw === "localhost" || /^\d{1,3}(\.\d{1,3}){3}$/.test(raw) || raw.startsWith("[")) {
|
|
82
|
+
return { error: "localhost and IP addresses are always allowed while developing — the domain is the site's real host, like acme.com." };
|
|
83
|
+
}
|
|
84
|
+
if (!HOST.test(raw))
|
|
85
|
+
return { error: `${JSON.stringify(input.trim())} is not a domain. It looks like acme.com or staging.acme.com.` };
|
|
86
|
+
if (isSharedSuffix(raw)) {
|
|
87
|
+
return {
|
|
88
|
+
error: `${raw} is a host shared by everyone who deploys there. Name your own subdomain (like kilnwork.${raw}) or add the exact address under "Also allowed".`,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return { domain: raw };
|
|
92
|
+
}
|
|
93
|
+
/** A bare shared suffix, or a bare top-level label — never a site of its own. */
|
|
94
|
+
export function isSharedSuffix(host) {
|
|
95
|
+
if (!host.includes("."))
|
|
96
|
+
return true;
|
|
97
|
+
return SHARED_SUFFIXES.includes(host);
|
|
98
|
+
}
|
|
99
|
+
/** Does this browser origin belong to the domain? Any scheme, any port, dot boundary on the host. */
|
|
100
|
+
export function originMatchesDomain(domain, origin) {
|
|
101
|
+
if (!domain)
|
|
102
|
+
return false;
|
|
103
|
+
let host;
|
|
104
|
+
try {
|
|
105
|
+
host = new URL(origin.toLowerCase()).hostname;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
return host === domain || host.endsWith("." + domain);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 05 §4.3 rule 4 — the developer's own machine, allowed by default:
|
|
114
|
+
* http(s)://localhost[:port], 127.0.0.1, [::1], and *.localhost.
|
|
115
|
+
*/
|
|
116
|
+
export function isLocalOrigin(origin) {
|
|
117
|
+
let u;
|
|
118
|
+
try {
|
|
119
|
+
u = new URL(origin.toLowerCase());
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
if (u.protocol !== "http:" && u.protocol !== "https:")
|
|
125
|
+
return false;
|
|
126
|
+
const h = u.hostname;
|
|
127
|
+
return h === "localhost" || h.endsWith(".localhost") || h === "127.0.0.1" || h === "[::1]";
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=domain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.js","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"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"}
|