@reddoorla/maintenance 0.93.1 → 0.94.1
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 +14 -13
- package/dist/airtable-JGCPS7JH.js +9 -0
- package/dist/{announce-6OS4C57D.js → announce-PGT4SZZB.js} +6 -6
- package/dist/{bump-deps-GI7PHMOC.js → bump-deps-6OR7LL4E.js} +3 -3
- package/dist/{chunk-7NYN2P6I.js → chunk-3Z6X3BHU.js} +15 -8
- package/dist/chunk-3Z6X3BHU.js.map +1 -0
- package/dist/{chunk-MVDMKKBN.js → chunk-4AIYWWKV.js} +12 -5
- package/dist/chunk-4AIYWWKV.js.map +1 -0
- package/dist/{chunk-QLIUDTY6.js → chunk-5EEMTJMT.js} +10 -7
- package/dist/chunk-5EEMTJMT.js.map +1 -0
- package/dist/{chunk-4NUKMPOO.js → chunk-5FCBYK6L.js} +3 -3
- package/dist/{chunk-PR343K7F.js → chunk-5GUJ36TL.js} +2 -2
- package/dist/{chunk-P6AORG32.js → chunk-6R56OKJZ.js} +2 -2
- package/dist/{chunk-E22WAIF2.js → chunk-AEUABPAJ.js} +3 -3
- package/dist/{chunk-ZRI5VRPG.js → chunk-BYGPUUCT.js} +2 -2
- package/dist/{chunk-SKI23ZZH.js → chunk-HTABUCF4.js} +2 -2
- package/dist/{chunk-FCS36FDT.js → chunk-KQB2BX4V.js} +3 -3
- package/dist/{chunk-AX22DH6S.js → chunk-KZRR4NFG.js} +3 -3
- package/dist/{chunk-BJQCIJOY.js → chunk-REJCSA4H.js} +230 -805
- package/dist/chunk-REJCSA4H.js.map +1 -0
- package/dist/{chunk-CVJF2IC5.js → chunk-TGUESYGF.js} +17 -3
- package/dist/{chunk-CVJF2IC5.js.map → chunk-TGUESYGF.js.map} +1 -1
- package/dist/{chunk-JB4Q3C3M.js → chunk-TO7DJYLZ.js} +92 -15
- package/dist/{chunk-JB4Q3C3M.js.map → chunk-TO7DJYLZ.js.map} +1 -1
- package/dist/chunk-WJMPCVOR.js +4222 -0
- package/dist/chunk-WJMPCVOR.js.map +1 -0
- package/dist/{chunk-NDCOOI3V.js → chunk-WMBLR5VA.js} +3 -3
- package/dist/{chunk-QBAAZY7W.js → chunk-WVNDEYXL.js} +3 -3
- package/dist/{chunk-7BZUOZPU.js → chunk-XN37VTDB.js} +2 -2
- package/dist/{chunk-Q47DU255.js → chunk-Z2K4JPQ3.js} +2 -2
- package/dist/cli/bin.js +26 -26
- package/dist/cli/commands/audit.js +12 -12
- package/dist/{convert-to-pnpm-ONFP3JKF.js → convert-to-pnpm-3RVGUBBR.js} +3 -3
- package/dist/{db-HSZ6D5DU.js → db-FL7ZBF6H.js} +5 -5
- package/dist/{digest-EOA4JLTV.js → digest-TZ3QQOSF.js} +7 -7
- package/dist/{digest-collectors-ZA3BTS3R.js → digest-collectors-EHFY2OQC.js} +6 -6
- package/dist/{ensure-site-SF6KICTN.js → ensure-site-WIDO6LGU.js} +3 -3
- package/dist/{fleet-state-3LQUQHYD.js → fleet-state-UEVZ3X3J.js} +4 -4
- package/dist/{forms-notify-target-RMZPKT6S.js → forms-notify-target-2LWF5C5B.js} +3 -3
- package/dist/{github-signals-3WLIJ5RR.js → github-signals-GAHNOAHS.js} +5 -5
- package/dist/{header-image-DOCDFFRO.js → header-image-YN3AQRY3.js} +2 -2
- package/dist/{health-endpoint-DHKJUPRM.js → health-endpoint-XLNBWVHK.js} +3 -3
- package/dist/{health-mirror-55RRU6BI.js → health-mirror-EB76EERV.js} +4 -4
- package/dist/{import-airtable-OHVY344G.js → import-airtable-TAKSN4NV.js} +3 -3
- package/dist/index.d.ts +87 -6
- package/dist/index.js +15 -12
- package/dist/index.js.map +1 -1
- package/dist/{init-ZRKWYCKA.js → init-YCLSGIEP.js} +6 -6
- package/dist/{launch-6X5OXPF2.js → launch-FSHDTXSM.js} +9 -9
- package/dist/{lighthouse-airtable-3GUWHETW.js → lighthouse-airtable-YMH4UA7R.js} +3 -3
- package/dist/{onboard-6NHGCKGB.js → onboard-NKE6GZKL.js} +3 -3
- package/dist/{orchestrate-KMQIUP3H.js → orchestrate-MWXENQOS.js} +4 -4
- package/dist/{parity-623WNFZG.js → parity-CAJ477PS.js} +5 -5
- package/dist/{pipeline-AQBFG5WM.js → pipeline-MATFYQRC.js} +3 -2
- package/dist/{preflight-VPHQYWTY.js → preflight-4VQP7JJL.js} +5 -5
- package/dist/{prismic-ci-A2HI7NNJ.js → prismic-ci-DM352L2Q.js} +3 -3
- package/dist/{prismic-models-QTKIMFBC.js → prismic-models-Q32ARSYS.js} +7 -7
- package/dist/prospect/types.d.ts +584 -1
- package/dist/prospect/types.js +10 -1
- package/dist/{prospect-audit-RKUVSTLN.js → prospect-audit-MT6RGMOY.js} +3 -3
- package/dist/{render-7G43BSK5.js → render-JE5P26H5.js} +3 -2
- package/dist/{render-7G43BSK5.js.map → render-JE5P26H5.js.map} +1 -1
- package/dist/{render-from-row-P5CWM3MQ.js → render-from-row-IFSBHWDH.js} +3 -3
- package/dist/{renovate-dispatch-6GQWTRKX.js → renovate-dispatch-U5Q52SKT.js} +2 -2
- package/dist/{report-Y4LXDHRV.js → report-6FFHGUUS.js} +14 -14
- package/dist/{report-mirror-6ZDCAQZB.js → report-mirror-IP64R7B3.js} +4 -4
- package/dist/{self-updating-D5XOWS7V.js → self-updating-5DVDIEHB.js} +3 -3
- package/dist/{selftest-IFGSJP4X.js → selftest-LJYXBIO5.js} +6 -6
- package/dist/{site-mirror-3E7JYTJG.js → site-mirror-UKHREAD6.js} +4 -4
- package/dist/{smoke-suite-GXC5JZPH.js → smoke-suite-NUTC7IUK.js} +4 -4
- package/dist/{submissions-UMJS3YST.js → submissions-5GKJPCIH.js} +2 -2
- package/dist/{svelte-codemods-A3EARSRP.js → svelte-codemods-U4NIT6CV.js} +3 -3
- package/dist/{sync-ESP5ZQUU.js → sync-K3PKHVLH.js} +5 -5
- package/dist/{sync-configs-KSESOHFF.js → sync-configs-S2JYY6QU.js} +3 -3
- package/dist/{upgrade-ZLNVEIEA.js → upgrade-YFZCMUPE.js} +3 -3
- package/dist/{websites-D6WYFAES.js → websites-TB4TCAWM.js} +2 -2
- package/dist/{write-audits-to-airtable-K352LZQY.js → write-audits-to-airtable-53EVXKMU.js} +4 -4
- package/package.json +1 -1
- package/dist/airtable-QG5ICI3Y.js +0 -9
- package/dist/chunk-7NYN2P6I.js.map +0 -1
- package/dist/chunk-BJQCIJOY.js.map +0 -1
- package/dist/chunk-MVDMKKBN.js.map +0 -1
- package/dist/chunk-QLIUDTY6.js.map +0 -1
- /package/dist/{airtable-QG5ICI3Y.js.map → airtable-JGCPS7JH.js.map} +0 -0
- /package/dist/{announce-6OS4C57D.js.map → announce-PGT4SZZB.js.map} +0 -0
- /package/dist/{bump-deps-GI7PHMOC.js.map → bump-deps-6OR7LL4E.js.map} +0 -0
- /package/dist/{chunk-4NUKMPOO.js.map → chunk-5FCBYK6L.js.map} +0 -0
- /package/dist/{chunk-PR343K7F.js.map → chunk-5GUJ36TL.js.map} +0 -0
- /package/dist/{chunk-P6AORG32.js.map → chunk-6R56OKJZ.js.map} +0 -0
- /package/dist/{chunk-E22WAIF2.js.map → chunk-AEUABPAJ.js.map} +0 -0
- /package/dist/{chunk-ZRI5VRPG.js.map → chunk-BYGPUUCT.js.map} +0 -0
- /package/dist/{chunk-SKI23ZZH.js.map → chunk-HTABUCF4.js.map} +0 -0
- /package/dist/{chunk-FCS36FDT.js.map → chunk-KQB2BX4V.js.map} +0 -0
- /package/dist/{chunk-AX22DH6S.js.map → chunk-KZRR4NFG.js.map} +0 -0
- /package/dist/{chunk-NDCOOI3V.js.map → chunk-WMBLR5VA.js.map} +0 -0
- /package/dist/{chunk-QBAAZY7W.js.map → chunk-WVNDEYXL.js.map} +0 -0
- /package/dist/{chunk-7BZUOZPU.js.map → chunk-XN37VTDB.js.map} +0 -0
- /package/dist/{chunk-Q47DU255.js.map → chunk-Z2K4JPQ3.js.map} +0 -0
- /package/dist/{convert-to-pnpm-ONFP3JKF.js.map → convert-to-pnpm-3RVGUBBR.js.map} +0 -0
- /package/dist/{db-HSZ6D5DU.js.map → db-FL7ZBF6H.js.map} +0 -0
- /package/dist/{digest-EOA4JLTV.js.map → digest-TZ3QQOSF.js.map} +0 -0
- /package/dist/{digest-collectors-ZA3BTS3R.js.map → digest-collectors-EHFY2OQC.js.map} +0 -0
- /package/dist/{ensure-site-SF6KICTN.js.map → ensure-site-WIDO6LGU.js.map} +0 -0
- /package/dist/{fleet-state-3LQUQHYD.js.map → fleet-state-UEVZ3X3J.js.map} +0 -0
- /package/dist/{forms-notify-target-RMZPKT6S.js.map → forms-notify-target-2LWF5C5B.js.map} +0 -0
- /package/dist/{github-signals-3WLIJ5RR.js.map → github-signals-GAHNOAHS.js.map} +0 -0
- /package/dist/{header-image-DOCDFFRO.js.map → header-image-YN3AQRY3.js.map} +0 -0
- /package/dist/{health-endpoint-DHKJUPRM.js.map → health-endpoint-XLNBWVHK.js.map} +0 -0
- /package/dist/{health-mirror-55RRU6BI.js.map → health-mirror-EB76EERV.js.map} +0 -0
- /package/dist/{import-airtable-OHVY344G.js.map → import-airtable-TAKSN4NV.js.map} +0 -0
- /package/dist/{init-ZRKWYCKA.js.map → init-YCLSGIEP.js.map} +0 -0
- /package/dist/{launch-6X5OXPF2.js.map → launch-FSHDTXSM.js.map} +0 -0
- /package/dist/{lighthouse-airtable-3GUWHETW.js.map → lighthouse-airtable-YMH4UA7R.js.map} +0 -0
- /package/dist/{onboard-6NHGCKGB.js.map → onboard-NKE6GZKL.js.map} +0 -0
- /package/dist/{orchestrate-KMQIUP3H.js.map → orchestrate-MWXENQOS.js.map} +0 -0
- /package/dist/{parity-623WNFZG.js.map → parity-CAJ477PS.js.map} +0 -0
- /package/dist/{pipeline-AQBFG5WM.js.map → pipeline-MATFYQRC.js.map} +0 -0
- /package/dist/{preflight-VPHQYWTY.js.map → preflight-4VQP7JJL.js.map} +0 -0
- /package/dist/{prismic-ci-A2HI7NNJ.js.map → prismic-ci-DM352L2Q.js.map} +0 -0
- /package/dist/{prismic-models-QTKIMFBC.js.map → prismic-models-Q32ARSYS.js.map} +0 -0
- /package/dist/{prospect-audit-RKUVSTLN.js.map → prospect-audit-MT6RGMOY.js.map} +0 -0
- /package/dist/{render-from-row-P5CWM3MQ.js.map → render-from-row-IFSBHWDH.js.map} +0 -0
- /package/dist/{renovate-dispatch-6GQWTRKX.js.map → renovate-dispatch-U5Q52SKT.js.map} +0 -0
- /package/dist/{report-Y4LXDHRV.js.map → report-6FFHGUUS.js.map} +0 -0
- /package/dist/{report-mirror-6ZDCAQZB.js.map → report-mirror-IP64R7B3.js.map} +0 -0
- /package/dist/{self-updating-D5XOWS7V.js.map → self-updating-5DVDIEHB.js.map} +0 -0
- /package/dist/{selftest-IFGSJP4X.js.map → selftest-LJYXBIO5.js.map} +0 -0
- /package/dist/{site-mirror-3E7JYTJG.js.map → site-mirror-UKHREAD6.js.map} +0 -0
- /package/dist/{smoke-suite-GXC5JZPH.js.map → smoke-suite-NUTC7IUK.js.map} +0 -0
- /package/dist/{submissions-UMJS3YST.js.map → submissions-5GKJPCIH.js.map} +0 -0
- /package/dist/{svelte-codemods-A3EARSRP.js.map → svelte-codemods-U4NIT6CV.js.map} +0 -0
- /package/dist/{sync-ESP5ZQUU.js.map → sync-K3PKHVLH.js.map} +0 -0
- /package/dist/{sync-configs-KSESOHFF.js.map → sync-configs-S2JYY6QU.js.map} +0 -0
- /package/dist/{upgrade-ZLNVEIEA.js.map → upgrade-YFZCMUPE.js.map} +0 -0
- /package/dist/{websites-D6WYFAES.js.map → websites-TB4TCAWM.js.map} +0 -0
- /package/dist/{write-audits-to-airtable-K352LZQY.js.map → write-audits-to-airtable-53EVXKMU.js.map} +0 -0
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "./chunk-TCF6S7AD.js";
|
|
9
9
|
import {
|
|
10
10
|
resolveSites
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-Z2K4JPQ3.js";
|
|
12
12
|
import {
|
|
13
13
|
healthEndpoint
|
|
14
14
|
} from "./chunk-4R3YAQNV.js";
|
|
@@ -16,8 +16,8 @@ import "./chunk-R53VL3RI.js";
|
|
|
16
16
|
import "./chunk-ZTPPCHDB.js";
|
|
17
17
|
import "./chunk-Z3JXLULD.js";
|
|
18
18
|
import "./chunk-LBYOLBW7.js";
|
|
19
|
-
import "./chunk-RARREDQE.js";
|
|
20
19
|
import "./chunk-XXTZBPUY.js";
|
|
20
|
+
import "./chunk-RARREDQE.js";
|
|
21
21
|
import "./chunk-XTK5VIQB.js";
|
|
22
22
|
|
|
23
23
|
// src/cli/commands/health-endpoint.ts
|
|
@@ -51,4 +51,4 @@ async function runHealthEndpointCommand(site, opts) {
|
|
|
51
51
|
export {
|
|
52
52
|
runHealthEndpointCommand
|
|
53
53
|
};
|
|
54
|
-
//# sourceMappingURL=health-endpoint-
|
|
54
|
+
//# sourceMappingURL=health-endpoint-XLNBWVHK.js.map
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
mirrorHealthFields,
|
|
3
3
|
mirrorScheduleFields
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-WVNDEYXL.js";
|
|
5
|
+
import "./chunk-6R56OKJZ.js";
|
|
6
6
|
import {
|
|
7
7
|
TURSO_IS_AUTHORITATIVE
|
|
8
8
|
} from "./chunk-SVAAONYB.js";
|
|
9
9
|
import "./chunk-F3JWOPTG.js";
|
|
10
10
|
import "./chunk-VAD43MOR.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-3Z6X3BHU.js";
|
|
12
12
|
import {
|
|
13
13
|
openDb,
|
|
14
14
|
readDbConfig
|
|
@@ -43,4 +43,4 @@ export {
|
|
|
43
43
|
makeHealthMirrorBestEffort,
|
|
44
44
|
makeScheduleMirrorBestEffort
|
|
45
45
|
};
|
|
46
|
-
//# sourceMappingURL=health-mirror-
|
|
46
|
+
//# sourceMappingURL=health-mirror-EB76EERV.js.map
|
|
@@ -14,9 +14,9 @@ import {
|
|
|
14
14
|
renderedHtmlUrl,
|
|
15
15
|
scheduleColumnFor,
|
|
16
16
|
siteValueFor
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-6R56OKJZ.js";
|
|
18
18
|
import "./chunk-VAD43MOR.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-3Z6X3BHU.js";
|
|
20
20
|
export {
|
|
21
21
|
EXCLUDED_WEBSITE_FIELDS,
|
|
22
22
|
HEALTH_BOOLEAN,
|
|
@@ -34,4 +34,4 @@ export {
|
|
|
34
34
|
scheduleColumnFor,
|
|
35
35
|
siteValueFor
|
|
36
36
|
};
|
|
37
|
-
//# sourceMappingURL=import-airtable-
|
|
37
|
+
//# sourceMappingURL=import-airtable-TAKSN4NV.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -116,6 +116,7 @@ type VerifyDeps = {
|
|
|
116
116
|
* which never manufactures a verdict. */
|
|
117
117
|
type FormSubmitOutcome = {
|
|
118
118
|
formPresent: false;
|
|
119
|
+
formsHealth?: FormsHealth;
|
|
119
120
|
} | {
|
|
120
121
|
formPresent: true;
|
|
121
122
|
success: boolean;
|
|
@@ -136,9 +137,70 @@ type FormSubmitOutcome = {
|
|
|
136
137
|
* re-filled once before the click. On a pass this is production proof the
|
|
137
138
|
* wipe happens; on a failure it says one refill wasn't enough. */
|
|
138
139
|
refilled?: boolean;
|
|
140
|
+
/** What the site's REAL Turnstile widget did while the probe was on the
|
|
141
|
+
* page. The probe does NOT swap the sitekey — `testSitekey` only names the
|
|
142
|
+
* fake token VALUE it injects — so the real widget renders with the real
|
|
143
|
+
* `PUBLIC_TURNSTILE_SITE_KEY` on every run, and this records what it did.
|
|
144
|
+
* Undefined = not observed (an older runner, or the page never loaded). */
|
|
145
|
+
turnstile?: TurnstileObservation;
|
|
146
|
+
/** The `forms` block the preflight already read. Carried out rather than
|
|
147
|
+
* re-fetched so the verdict cannot disagree with the gate that admitted
|
|
148
|
+
* the probe. Undefined = an older runner that did not report it. */
|
|
149
|
+
formsHealth?: FormsHealth;
|
|
139
150
|
} | {
|
|
140
151
|
testModeUndeclared: true;
|
|
141
152
|
};
|
|
153
|
+
/**
|
|
154
|
+
* What a browser saw the site's own Turnstile widget do. Only two of Cloudflare's
|
|
155
|
+
* failure modes are BROWSER-INDEPENDENT, and the distinction is the whole point:
|
|
156
|
+
*
|
|
157
|
+
* - `110200` is a domain-binding rejection, emitted before any challenge is
|
|
158
|
+
* attempted. It means this hostname is not on the widget's allowlist, the widget
|
|
159
|
+
* mints NO token, and on a `Require Turnstile` site every real lead is bucketed
|
|
160
|
+
* as spam. It fires identically for a human and for automation, so a probe can
|
|
161
|
+
* assert on it.
|
|
162
|
+
* - `600010` is a challenge failure, and Cloudflare returns it to ANY driven
|
|
163
|
+
* browser whatever the configuration — measured 2026-09-04 against the
|
|
164
|
+
* known-good reddoorla.com canary and against Playwright headed and headless,
|
|
165
|
+
* while the same page in an ordinary Chrome window minted a token siteverify
|
|
166
|
+
* accepted. It carries NO information about the site and must never be a verdict.
|
|
167
|
+
*
|
|
168
|
+
* A "pass" therefore needs POSITIVE evidence — the mount point AND Cloudflare's
|
|
169
|
+
* script — never merely the absence of an error string. The SSR'd container alone
|
|
170
|
+
* proves only that the env var is set.
|
|
171
|
+
*/
|
|
172
|
+
type TurnstileObservation = {
|
|
173
|
+
/** A `.cf-turnstile` mount point was in the DOM on the route the probe settled
|
|
174
|
+
* on. NOT sufficient on its own: the starter server-renders that div from
|
|
175
|
+
* `{#if turnstileSiteKey}`, so it is present whenever the env var is set —
|
|
176
|
+
* including when the widget never initialises. Pairing it with `scriptLoaded`
|
|
177
|
+
* is what makes "pass" positive evidence rather than the absence of a string. */
|
|
178
|
+
containerPresent: boolean;
|
|
179
|
+
/** Cloudflare's `api.js` was actually fetched and answered 2xx. Without it
|
|
180
|
+
* `window.turnstile` never exists, no widget is created and no token is ever
|
|
181
|
+
* minted — while the SSR'd container sits there looking healthy. */
|
|
182
|
+
scriptLoaded: boolean;
|
|
183
|
+
/** An uncaught (or logged) `110200` — this hostname is not on the widget. */
|
|
184
|
+
hostnameRejected: boolean;
|
|
185
|
+
/** The page reported the widget could not render. The starter catches a
|
|
186
|
+
* `loadTurnstile()` rejection and logs `[turnstile] widget did not render` at
|
|
187
|
+
* console.WARN — not error — so this is deliberately matched across every
|
|
188
|
+
* console level, not just errors. */
|
|
189
|
+
initFailed: boolean;
|
|
190
|
+
/** Cloudflare raised some OTHER error against the widget — an invalid, deleted,
|
|
191
|
+
* rotated or disabled sitekey (110100, 110110, 400020, 400070), or another
|
|
192
|
+
* `110xxx`. Its whole job is to deny the green: without it, a widget deleted at
|
|
193
|
+
* Cloudflare scores "pass", because api.js still answers 2xx (its URL carries no
|
|
194
|
+
* sitekey), the mount point is still server-rendered, and the pass arm's negative
|
|
195
|
+
* half was the absence of one six-digit string.
|
|
196
|
+
*
|
|
197
|
+
* Never a fail. This fleet has MEASURED only 110200 and 600010 verbatim, and an
|
|
198
|
+
* unmeasured code does not get the authority to raise a red on a gated site — it
|
|
199
|
+
* lands as `null`, "looked, cannot tell", which the cockpit already renders as
|
|
200
|
+
* the amber `turnstile-unverified` watch. That asymmetry is what makes it safe to
|
|
201
|
+
* match a family by prefix rather than a list by measurement. */
|
|
202
|
+
widgetError: boolean;
|
|
203
|
+
};
|
|
142
204
|
/** Injected browser IO. The real impl drives Playwright; tests pass a fake. */
|
|
143
205
|
type FormRunner = {
|
|
144
206
|
submit: (opts: {
|
|
@@ -148,6 +210,17 @@ type FormRunner = {
|
|
|
148
210
|
}) => Promise<FormSubmitOutcome>;
|
|
149
211
|
close?: () => Promise<void>;
|
|
150
212
|
};
|
|
213
|
+
/**
|
|
214
|
+
* The site's `/health` `forms` block, read once in the preflight. `testMode` gates
|
|
215
|
+
* whether the probe may submit at all; `turnstile` is `!!PUBLIC_TURNSTILE_SITE_KEY`
|
|
216
|
+
* on the deployed site — it says a sitekey is CONFIGURED and nothing more, since
|
|
217
|
+
* /health never contacts Cloudflare. Null = absent or malformed (an older site
|
|
218
|
+
* package whose /health has no such key).
|
|
219
|
+
*/
|
|
220
|
+
type FormsHealth = {
|
|
221
|
+
testMode: boolean;
|
|
222
|
+
turnstile: boolean | null;
|
|
223
|
+
};
|
|
151
224
|
|
|
152
225
|
/** Result of probing a site's latest PRODUCTION Netlify deploy. Every field is
|
|
153
226
|
* nullable: a site with no production deploy yet degrades to all-nulls (a real
|
|
@@ -649,12 +722,20 @@ type WebsiteRow = {
|
|
|
649
722
|
* "ok"`. Single-select `pass`/`fail`; null = never ran. No per-site Prismic token or identity
|
|
650
723
|
* column is ever built — this rides `/health`. */
|
|
651
724
|
cmsReachable: "pass" | "fail" | null;
|
|
652
|
-
/**
|
|
653
|
-
* the
|
|
654
|
-
* `
|
|
655
|
-
*
|
|
656
|
-
*
|
|
657
|
-
*
|
|
725
|
+
/** Does the deployed site's Turnstile widget actually work? Single-select `pass`/`fail`;
|
|
726
|
+
* null = **unverified**, which is the normal state — see below. Freshness gated by
|
|
727
|
+
* `formE2eCheckedAt`, the clock of the audit that writes it. Powers the cockpit Require-Turnstile guardrail: a site with
|
|
728
|
+
* `requireTurnstile` ON but no working widget silently buckets 100% of its real leads.
|
|
729
|
+
*
|
|
730
|
+
* One of the two `"fail"` arms is derived from `/health` (the other is a browser seeing
|
|
731
|
+
* 110200 on the live hostname), whose `forms.turnstile` is a truthiness check
|
|
732
|
+
* on `PUBLIC_TURNSTILE_SITE_KEY` that never contacts Cloudflare (see
|
|
733
|
+
* audits/function-health-airtable.ts for the incident). No key IS proof the widget can't
|
|
734
|
+
* work; a key is NOT proof that it can — a sitekey whose widget is full at Cloudflare's
|
|
735
|
+
* 10-hostname cap sets the var and still mints no token. So a `"pass"` here has to be
|
|
736
|
+
* earned by a real browser rendering the real widget (form-e2e), and until it is, null
|
|
737
|
+
* keeps the site in the cockpit's amber "can't verify" watch rather than claiming health
|
|
738
|
+
* nobody measured. */
|
|
658
739
|
turnstileWidget: "pass" | "fail" | null;
|
|
659
740
|
/** When the `function-health` audit last ran — the freshness gate for `functionHealth`,
|
|
660
741
|
* `cmsReachable`, and `turnstileWidget`. Null = never ran. */
|
package/dist/index.js
CHANGED
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
DEFAULT_INIT_STEPS,
|
|
4
4
|
a11yFixturesPage,
|
|
5
5
|
init
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-5FCBYK6L.js";
|
|
7
7
|
import {
|
|
8
8
|
draftReportForSite
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-BYGPUUCT.js";
|
|
10
10
|
import "./chunk-YFAXOD7Z.js";
|
|
11
11
|
import {
|
|
12
12
|
upgradeSvelte4to5
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
} from "./chunk-LS6QPANO.js";
|
|
20
20
|
import "./chunk-J7SZQUCW.js";
|
|
21
21
|
import "./chunk-4R3YAQNV.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-TGUESYGF.js";
|
|
23
23
|
import "./chunk-R53VL3RI.js";
|
|
24
24
|
import {
|
|
25
25
|
onboard,
|
|
@@ -29,10 +29,10 @@ import {
|
|
|
29
29
|
import {
|
|
30
30
|
bumpDeps
|
|
31
31
|
} from "./chunk-PPIZHDJL.js";
|
|
32
|
-
import "./chunk-
|
|
32
|
+
import "./chunk-4AIYWWKV.js";
|
|
33
33
|
import {
|
|
34
34
|
approveBlockers
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-AEUABPAJ.js";
|
|
36
36
|
import {
|
|
37
37
|
findDueReports
|
|
38
38
|
} from "./chunk-PZR4EBPY.js";
|
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
parseAddresses,
|
|
41
41
|
sendApprovedReports,
|
|
42
42
|
withGlobalCc
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-KQB2BX4V.js";
|
|
44
44
|
import {
|
|
45
45
|
isPendingApproval
|
|
46
46
|
} from "./chunk-F3JWOPTG.js";
|
|
@@ -53,10 +53,10 @@ import "./chunk-BRYXFH77.js";
|
|
|
53
53
|
import "./chunk-7MKT4I5T.js";
|
|
54
54
|
import {
|
|
55
55
|
fromAirtableBase
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-5GUJ36TL.js";
|
|
57
57
|
import "./chunk-IY6256GK.js";
|
|
58
58
|
import "./chunk-HN6I2XWI.js";
|
|
59
|
-
import "./chunk-
|
|
59
|
+
import "./chunk-HTABUCF4.js";
|
|
60
60
|
import "./chunk-GECESMVS.js";
|
|
61
61
|
import {
|
|
62
62
|
BLURRED_CID,
|
|
@@ -80,14 +80,14 @@ import {
|
|
|
80
80
|
SEVERITY_RANK,
|
|
81
81
|
siteSlug,
|
|
82
82
|
toAirtableStatus
|
|
83
|
-
} from "./chunk-
|
|
83
|
+
} from "./chunk-3Z6X3BHU.js";
|
|
84
84
|
import "./chunk-WEKL2HYJ.js";
|
|
85
|
-
import "./chunk-T7ZUUOZ2.js";
|
|
86
85
|
import {
|
|
87
86
|
syncConfigs
|
|
88
87
|
} from "./chunk-3HS6LPFX.js";
|
|
89
88
|
import "./chunk-ZTPPCHDB.js";
|
|
90
89
|
import "./chunk-MLT4QY5X.js";
|
|
90
|
+
import "./chunk-T7ZUUOZ2.js";
|
|
91
91
|
import "./chunk-OTGB6YQO.js";
|
|
92
92
|
import {
|
|
93
93
|
ALL_AUDIT_NAMES,
|
|
@@ -97,7 +97,7 @@ import {
|
|
|
97
97
|
runAudits,
|
|
98
98
|
runAuditsAcross,
|
|
99
99
|
securityAudit
|
|
100
|
-
} from "./chunk-
|
|
100
|
+
} from "./chunk-TO7DJYLZ.js";
|
|
101
101
|
import "./chunk-LKGVSM2O.js";
|
|
102
102
|
import "./chunk-GASBX52O.js";
|
|
103
103
|
import "./chunk-XHHMM5HX.js";
|
|
@@ -114,12 +114,12 @@ import {
|
|
|
114
114
|
import "./chunk-UDRHAQT7.js";
|
|
115
115
|
import "./chunk-PTDMVGKL.js";
|
|
116
116
|
import "./chunk-LBYOLBW7.js";
|
|
117
|
-
import "./chunk-RARREDQE.js";
|
|
118
117
|
import "./chunk-A3WDWNN5.js";
|
|
119
118
|
import {
|
|
120
119
|
isLeadFormType
|
|
121
120
|
} from "./chunk-2OP4JKIQ.js";
|
|
122
121
|
import "./chunk-XXTZBPUY.js";
|
|
122
|
+
import "./chunk-RARREDQE.js";
|
|
123
123
|
import "./chunk-XTK5VIQB.js";
|
|
124
124
|
import "./chunk-6VAL7XJT.js";
|
|
125
125
|
import "./chunk-NMAWXBJA.js";
|
|
@@ -667,6 +667,9 @@ function siteDetailsSection(site) {
|
|
|
667
667
|
selectRow("Status", "status", SITE_STATUS_OPTIONS, site.statusRaw, url),
|
|
668
668
|
selectRow("Maintenance cadence", "maintenanceFreq", FREQ_OPTIONS, site.maintenanceFreq, url),
|
|
669
669
|
selectRow("Testing cadence", "testingFreq", FREQ_OPTIONS, site.testingFreq, url),
|
|
670
|
+
// First, because it is the site's own address and the target every deployed
|
|
671
|
+
// audit drives. `site.url` is the row's value; `url` is this page's endpoint.
|
|
672
|
+
inputRow("Site URL", "url", site.url, url),
|
|
670
673
|
inputRow("Report recipients (To)", "reportRecipientsTo", site.reportRecipientsTo, url),
|
|
671
674
|
inputRow("Report recipients (CC)", "reportRecipientsCc", site.reportRecipientsCc, url),
|
|
672
675
|
inputRow("Point of contact", "pointOfContact", site.pointOfContact, url),
|