sermon-js 0.2.0 → 0.3.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 +2 -1
- package/dist/api/index.d.cts +4 -4
- package/dist/api/index.d.ts +4 -4
- package/dist/{chunk-PARE6EUZ.cjs → chunk-NZTKXXW2.cjs} +7 -3
- package/dist/chunk-NZTKXXW2.cjs.map +1 -0
- package/dist/{chunk-2M4UBCDM.js → chunk-R7BDAQOM.js} +7 -3
- package/dist/chunk-R7BDAQOM.js.map +1 -0
- package/dist/{config-BEbP-uLf.d.cts → config-gro29syt.d.cts} +1 -1
- package/dist/{config-w1tm1bdu.d.ts → config-iY18j9IA.d.ts} +1 -1
- package/dist/{generic-lmrGxMDC.d.cts → generic-BUiaKpNp.d.cts} +2 -2
- package/dist/{generic-BJmlgtUM.d.ts → generic-CV2O4aNH.d.ts} +2 -2
- package/dist/index.cjs +6 -6
- package/dist/index.d.cts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.js +2 -2
- package/dist/presets/index.cjs +407 -47
- package/dist/presets/index.cjs.map +1 -1
- package/dist/presets/index.d.cts +173 -14
- package/dist/presets/index.d.ts +173 -14
- package/dist/presets/index.js +402 -48
- package/dist/presets/index.js.map +1 -1
- package/dist/react/heroui/index.cjs +27 -18
- package/dist/react/heroui/index.cjs.map +1 -1
- package/dist/react/heroui/index.d.cts +7 -2
- package/dist/react/heroui/index.d.ts +7 -2
- package/dist/react/heroui/index.js +13 -4
- package/dist/react/heroui/index.js.map +1 -1
- package/dist/react/index.d.cts +2 -2
- package/dist/react/index.d.ts +2 -2
- package/dist/{status-DsWzgb9Q.d.cts → status-BExBb08T.d.cts} +3 -3
- package/dist/{status-zd04ZQ98.d.ts → status-DmRhwvVC.d.ts} +3 -3
- package/dist/{store-_GuzSP0z.d.ts → store-BfKP7CjW.d.ts} +1 -1
- package/dist/{store-DybhDphS.d.cts → store-CAIB7Esp.d.cts} +1 -1
- package/dist/stores/mongodb.d.cts +2 -2
- package/dist/stores/mongodb.d.ts +2 -2
- package/dist/stores/redis.d.cts +2 -2
- package/dist/stores/redis.d.ts +2 -2
- package/dist/stores/sql.d.cts +2 -2
- package/dist/stores/sql.d.ts +2 -2
- package/dist/stores/upstash.d.cts +2 -2
- package/dist/stores/upstash.d.ts +2 -2
- package/dist/testing/index.cjs +3 -3
- package/dist/testing/index.d.cts +3 -3
- package/dist/testing/index.d.ts +3 -3
- package/dist/testing/index.js +1 -1
- package/dist/{tree-BXbXfjF1.d.cts → tree-J3riUyI9.d.cts} +9 -0
- package/dist/{tree-BXbXfjF1.d.ts → tree-J3riUyI9.d.ts} +9 -0
- package/dist/{types-CctvUAs2.d.cts → types-BVa6vIKk.d.cts} +9 -0
- package/dist/{types-CctvUAs2.d.ts → types-BVa6vIKk.d.ts} +9 -0
- package/package.json +1 -1
- package/dist/chunk-2M4UBCDM.js.map +0 -1
- package/dist/chunk-PARE6EUZ.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -110,6 +110,7 @@ type CheckOutcome = {
|
|
|
110
110
|
metrics?: Record<string, string | number>; // small chips
|
|
111
111
|
usage?: { label; used; limit; unit?; resetsAt? }[]; // quota bars
|
|
112
112
|
instances?: { key; region?; state?; status; latencyMs?; error? }[]; // per machine/region
|
|
113
|
+
instanceLabels?: { key; detail? }; // what the instances are: "Model", "Compute"…
|
|
113
114
|
probed?: boolean; // false when the target was deliberately not touched
|
|
114
115
|
};
|
|
115
116
|
```
|
|
@@ -230,7 +231,7 @@ hooks and helpers to build your own. See [UI kit](docs/ui.md) and
|
|
|
230
231
|
- [x] Host-agnostic scheduling: `tick()`, `startScheduler`, `/tick`, refresh on read
|
|
231
232
|
- [x] HTTP API handler, Node adapter
|
|
232
233
|
- [x] Stores: memory, Upstash REST, any Redis client
|
|
233
|
-
- [x] Presets: Fly apps (sleep-safe, per region), GCP instances, AWS/S3, Statuspage, Pusher, AI/translation/video/email/search providers, Vercel, MongoDB, Redis, PostgreSQL
|
|
234
|
+
- [x] Presets: Fly apps (sleep-safe, per region), GCP instances, Neon projects (sleep-safe), AWS/S3/Bedrock, Statuspage, Pusher, Stripe, AI/translation/video/email/search providers, Vercel, MongoDB, Redis, PostgreSQL
|
|
234
235
|
- [x] Stores: SQL (Postgres, MySQL/MariaDB, SQLite), MongoDB
|
|
235
236
|
- [x] React UI kit (headless hooks + HeroUI components)
|
|
236
237
|
- [ ] First npm release
|
package/dist/api/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { D as Duration, S as Status } from '../status-
|
|
2
|
-
import '../config-
|
|
3
|
-
import '../types-
|
|
4
|
-
import '../store-
|
|
1
|
+
import { D as Duration, S as Status } from '../status-BExBb08T.cjs';
|
|
2
|
+
import '../config-gro29syt.cjs';
|
|
3
|
+
import '../types-BVa6vIKk.cjs';
|
|
4
|
+
import '../store-CAIB7Esp.cjs';
|
|
5
5
|
|
|
6
6
|
type HandlerContext = {
|
|
7
7
|
/** Keeps the platform alive for background work after the response (Workers, Vercel, Netlify…) */
|
package/dist/api/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { D as Duration, S as Status } from '../status-
|
|
2
|
-
import '../config-
|
|
3
|
-
import '../types-
|
|
4
|
-
import '../store-
|
|
1
|
+
import { D as Duration, S as Status } from '../status-DmRhwvVC.js';
|
|
2
|
+
import '../config-iY18j9IA.js';
|
|
3
|
+
import '../types-BVa6vIKk.js';
|
|
4
|
+
import '../store-BfKP7CjW.js';
|
|
5
5
|
|
|
6
6
|
type HandlerContext = {
|
|
7
7
|
/** Keeps the platform alive for background work after the response (Workers, Vercel, Netlify…) */
|
|
@@ -162,7 +162,11 @@ async function runService({
|
|
|
162
162
|
id: instance.id === void 0 ? void 0 : redact(instance.id),
|
|
163
163
|
state: instance.state === void 0 ? void 0 : redact(instance.state),
|
|
164
164
|
error: sanitizeError({ message: instance.error, secretValues })
|
|
165
|
-
})) : void 0
|
|
165
|
+
})) : void 0,
|
|
166
|
+
instanceLabels: outcome.instanceLabels ? {
|
|
167
|
+
key: redact(outcome.instanceLabels.key),
|
|
168
|
+
detail: outcome.instanceLabels.detail === void 0 ? void 0 : redact(outcome.instanceLabels.detail)
|
|
169
|
+
} : void 0
|
|
166
170
|
};
|
|
167
171
|
}
|
|
168
172
|
async function runServices({
|
|
@@ -180,5 +184,5 @@ exports.redactText = redactText;
|
|
|
180
184
|
exports.runService = runService;
|
|
181
185
|
exports.runServices = runServices;
|
|
182
186
|
exports.sanitizeError = sanitizeError;
|
|
183
|
-
//# sourceMappingURL=chunk-
|
|
184
|
-
//# sourceMappingURL=chunk-
|
|
187
|
+
//# sourceMappingURL=chunk-NZTKXXW2.cjs.map
|
|
188
|
+
//# sourceMappingURL=chunk-NZTKXXW2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sanitize.ts","../src/runner.ts"],"names":["createHttp","measure","combine","normalizeReturn","error","errorMessage"],"mappings":"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","file":"chunk-NZTKXXW2.cjs","sourcesContent":["const MAX_LENGTH = 300;\nconst MIN_SECRET_LENGTH = 6;\n\n/** Shapes of well-known credentials, redacted even when the value was never declared as a secret */\nconst KEY_PATTERNS: RegExp[] = [\n // PEM blocks (private keys, certificates), whole or cut short\n /-----BEGIN [A-Z0-9 ]+-----[\\s\\S]*?(-----END [A-Z0-9 ]+-----|$)/g,\n // JSON Web Tokens (OAuth access and identity tokens)\n /\\beyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}(\\.[A-Za-z0-9_-]*)?/g,\n // Prefixed API keys: OpenAI/Anthropic/Stripe (sk-, pk_, rk_), GitHub, Slack, Fly, MailerSend.\n // \"*\" is included because providers echo keys back partly masked (sk-proj-****abcd).\n /\\b(sk|pk|rk)[-_][A-Za-z0-9_*.-]{12,}/g,\n /\\b(gh[pousr]_|github_pat_)[A-Za-z0-9_*]{12,}/g,\n /\\bxox[abeoprs]-[A-Za-z0-9*-]{10,}/g,\n /\\b(FlyV1 |fm[12]_|fo1_)[A-Za-z0-9+/=_,*-]{12,}/g,\n /\\bmlsn\\.[A-Za-z0-9*]{12,}/g,\n // AWS access key ids, Google API keys, Google OAuth tokens\n /\\b(AKIA|ASIA)[0-9A-Z*]{12,}/g,\n /\\bAIza[0-9A-Za-z_*-]{20,}/g,\n /\\bya29\\.[0-9A-Za-z_*.-]{12,}/g,\n];\n\n/**\n * Every value worth redacting from a set of secrets: the values themselves, the string fields\n * of JSON secrets (e.g. the private key inside a service-account JSON), the user and password\n * of connection strings, and the encoded forms a value takes in URLs, JSON and Basic auth.\n */\nexport function collectSecretValues(secrets: Iterable<string | undefined>): string[] {\n const values = new Set<string>();\n const addOne = (value: string) => {\n if (value.length >= MIN_SECRET_LENGTH) values.add(value);\n };\n const add = (value: unknown) => {\n if (typeof value !== \"string\" || value.length < MIN_SECRET_LENGTH) return;\n addOne(value);\n // The same value as it appears in a URL, inside JSON, and base64-encoded\n try {\n addOne(encodeURIComponent(value));\n } catch {\n // Lone surrogates can't be encoded: the raw value is still covered\n }\n addOne(JSON.stringify(value).slice(1, -1));\n try {\n addOne(btoa(value).replace(/=+$/, \"\"));\n } catch {\n // Not Latin-1: no base64 form to worry about\n }\n };\n const walk = (value: unknown) => {\n if (typeof value === \"string\") add(value);\n else if (Array.isArray(value)) value.forEach(walk);\n else if (value && typeof value === \"object\") Object.values(value).forEach(walk);\n };\n for (const secret of secrets) {\n if (!secret) continue;\n add(secret);\n if (secret.trimStart().startsWith(\"{\")) {\n try {\n walk(JSON.parse(secret));\n } catch {\n // Not JSON: the whole value is already covered\n }\n }\n // Connection strings: drivers report the user or the password on their own\n const credentials = /^[a-z][a-z0-9+.-]*:\\/\\/([^\\s/@:]*):([^\\s/@]*)@/i.exec(secret);\n for (const part of credentials?.slice(1) ?? []) {\n add(part);\n try {\n add(decodeURIComponent(part));\n } catch {\n // Not percent-encoded\n }\n }\n }\n // Longest first, so a secret containing another one is fully redacted\n return [...values].sort((a, b) => b.length - a.length);\n}\n\n/**\n * Strip secret values, URL credentials, query strings, bearer-like tokens and anything shaped\n * like a well-known credential. Safe for text of any length: nothing is cut here, so a secret\n * can never be half-removed.\n */\nexport function redactText({ text, secretValues }: { text: string; secretValues: string[] }): string {\n let out = text;\n for (const secret of secretValues) out = out.split(secret).join(\"***\");\n out = out\n // user:pass@host\n .replace(/(\\b[a-z][a-z0-9+.-]*:\\/\\/)[^\\s/@]+@/gi, \"$1***@\")\n // query strings\n .replace(/(\\b(?:https?|wss?):\\/\\/[^\\s?]+)\\?[^\\s\"')]*/gi, \"$1?***\")\n // bearer-ish tokens that slipped through\n .replace(/\\b(Bearer|Token|Basic|DeepL-Auth-Key)\\s+[A-Za-z0-9._~+/=*-]{8,}/gi, \"$1 ***\");\n for (const pattern of KEY_PATTERNS) out = out.replace(pattern, \"***\");\n return out;\n}\n\n/** Errors are shown on public pages: redact, then truncate (in that order) */\nexport function sanitizeError({\n message,\n secretValues,\n}: {\n message: string | undefined;\n secretValues: string[];\n}): string | undefined {\n if (!message) return undefined;\n const out = redactText({ text: message, secretValues });\n return out.length > MAX_LENGTH ? `${out.slice(0, MAX_LENGTH)}…` : out;\n}\n","import type { ResolvedService } from \"./config\";\nimport { combine, createHttp, errorMessage, measure, normalizeReturn } from \"./probe\";\nimport { redactText, sanitizeError } from \"./sanitize\";\nimport type { CheckCache, CheckContext, CheckOutcome, CheckResult, SecretsInput } from \"./types\";\n\n/** Extra time after `timeoutMs` before a check that ignores its abort signal is given up on */\nconst GRACE_MS = 1000;\n\nexport type RunServiceOptions = {\n service: ResolvedService;\n /** Every secret value of the whole configuration, for redaction */\n secretValues: string[];\n cache: CheckCache;\n now?: () => number;\n fetch?: typeof fetch;\n /** Report failed HTTP answers by status code only */\n hideResponseBodies?: boolean;\n};\n\n/**\n * Run one service and apply the rules shared by all of them:\n * - missing required secrets/fields → \"unconfigured\", the check is never called\n * - a throw or a timeout → down\n * - latency above `slowMs` turns \"up\" into \"degraded\"\n * - errors and every other text of the result are redacted before they leave the runner\n */\nexport async function runService({\n service,\n secretValues,\n cache,\n now = () => Date.now(),\n fetch: fetchImpl,\n hideResponseBodies,\n}: RunServiceOptions): Promise<CheckResult> {\n const checkedAt = now();\n if (service.missing.length > 0) {\n return { key: service.key, status: \"unconfigured\", checkedAt, probed: false };\n }\n\n const redact = (text: string) => redactText({ text, secretValues });\n const controller = new AbortController();\n const ctx: CheckContext<SecretsInput> = {\n secrets: service.secrets as Record<string, string>,\n http: createHttp({ timeoutMs: service.timeoutMs, signal: controller.signal, fetch: fetchImpl, redact, hideResponseBodies }),\n measure,\n combine,\n signal: controller.signal,\n timeoutMs: service.timeoutMs,\n slowMs: service.slowMs,\n cache,\n now: checkedAt,\n };\n\n const start = performance.now();\n let outcome: CheckOutcome;\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const returned = await Promise.race([\n Promise.resolve().then(() => service.check(ctx)),\n new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n controller.abort(new DOMException(\"Timed out\", \"TimeoutError\"));\n reject(new DOMException(\"Timed out\", \"TimeoutError\"));\n }, service.timeoutMs + GRACE_MS);\n }),\n ]);\n outcome = normalizeReturn(returned);\n if (outcome.latencyMs === undefined && outcome.probed !== false && outcome.status !== \"sleeping\") {\n // Checks that don't measure themselves get the wall time of the whole check\n outcome = { ...outcome, latencyMs: Math.round(performance.now() - start) };\n }\n } catch (error) {\n outcome = { status: \"down\", error: errorMessage(error) };\n } finally {\n clearTimeout(timer);\n }\n\n let { status, error } = outcome;\n if (status === \"up\" && outcome.latencyMs !== undefined && outcome.latencyMs > service.slowMs) {\n status = \"degraded\";\n error ??= `Slow response: ${outcome.latencyMs} ms (threshold ${service.slowMs} ms)`;\n }\n\n return {\n key: service.key,\n status,\n checkedAt,\n probed: outcome.probed ?? true,\n latencyMs: outcome.latencyMs,\n httpStatus: outcome.httpStatus,\n error: sanitizeError({ message: error, secretValues }),\n // Everything below is public too: no text leaves the runner without being redacted\n metrics: outcome.metrics\n ? Object.fromEntries(\n Object.entries(outcome.metrics).map(([name, value]) => [\n redact(name),\n typeof value === \"string\" ? redact(value) : value,\n ])\n )\n : undefined,\n usage: outcome.usage?.length\n ? outcome.usage.map((usage) => ({\n ...usage,\n label: redact(usage.label),\n unit: usage.unit === undefined ? undefined : redact(usage.unit),\n }))\n : undefined,\n instances: outcome.instances?.length\n ? outcome.instances.map((instance) => ({\n ...instance,\n key: redact(instance.key),\n region: instance.region === undefined ? undefined : redact(instance.region),\n id: instance.id === undefined ? undefined : redact(instance.id),\n state: instance.state === undefined ? undefined : redact(instance.state),\n error: sanitizeError({ message: instance.error, secretValues }),\n }))\n : undefined,\n instanceLabels: outcome.instanceLabels\n ? {\n key: redact(outcome.instanceLabels.key),\n detail: outcome.instanceLabels.detail === undefined ? undefined : redact(outcome.instanceLabels.detail),\n }\n : undefined,\n };\n}\n\nexport async function runServices({\n services,\n cacheFor,\n ...rest\n}: Omit<RunServiceOptions, \"service\" | \"cache\"> & {\n services: ResolvedService[];\n /** Each service gets its own cache namespace */\n cacheFor: (key: string) => CheckCache;\n}): Promise<CheckResult[]> {\n return Promise.all(\n services.map((service) => runService({ service, cache: cacheFor(service.key), ...rest }))\n );\n}\n"]}
|
|
@@ -160,7 +160,11 @@ async function runService({
|
|
|
160
160
|
id: instance.id === void 0 ? void 0 : redact(instance.id),
|
|
161
161
|
state: instance.state === void 0 ? void 0 : redact(instance.state),
|
|
162
162
|
error: sanitizeError({ message: instance.error, secretValues })
|
|
163
|
-
})) : void 0
|
|
163
|
+
})) : void 0,
|
|
164
|
+
instanceLabels: outcome.instanceLabels ? {
|
|
165
|
+
key: redact(outcome.instanceLabels.key),
|
|
166
|
+
detail: outcome.instanceLabels.detail === void 0 ? void 0 : redact(outcome.instanceLabels.detail)
|
|
167
|
+
} : void 0
|
|
164
168
|
};
|
|
165
169
|
}
|
|
166
170
|
async function runServices({
|
|
@@ -174,5 +178,5 @@ async function runServices({
|
|
|
174
178
|
}
|
|
175
179
|
|
|
176
180
|
export { collectSecretValues, redactText, runService, runServices, sanitizeError };
|
|
177
|
-
//# sourceMappingURL=chunk-
|
|
178
|
-
//# sourceMappingURL=chunk-
|
|
181
|
+
//# sourceMappingURL=chunk-R7BDAQOM.js.map
|
|
182
|
+
//# sourceMappingURL=chunk-R7BDAQOM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/sanitize.ts","../src/runner.ts"],"names":["error"],"mappings":"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","file":"chunk-R7BDAQOM.js","sourcesContent":["const MAX_LENGTH = 300;\nconst MIN_SECRET_LENGTH = 6;\n\n/** Shapes of well-known credentials, redacted even when the value was never declared as a secret */\nconst KEY_PATTERNS: RegExp[] = [\n // PEM blocks (private keys, certificates), whole or cut short\n /-----BEGIN [A-Z0-9 ]+-----[\\s\\S]*?(-----END [A-Z0-9 ]+-----|$)/g,\n // JSON Web Tokens (OAuth access and identity tokens)\n /\\beyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}(\\.[A-Za-z0-9_-]*)?/g,\n // Prefixed API keys: OpenAI/Anthropic/Stripe (sk-, pk_, rk_), GitHub, Slack, Fly, MailerSend.\n // \"*\" is included because providers echo keys back partly masked (sk-proj-****abcd).\n /\\b(sk|pk|rk)[-_][A-Za-z0-9_*.-]{12,}/g,\n /\\b(gh[pousr]_|github_pat_)[A-Za-z0-9_*]{12,}/g,\n /\\bxox[abeoprs]-[A-Za-z0-9*-]{10,}/g,\n /\\b(FlyV1 |fm[12]_|fo1_)[A-Za-z0-9+/=_,*-]{12,}/g,\n /\\bmlsn\\.[A-Za-z0-9*]{12,}/g,\n // AWS access key ids, Google API keys, Google OAuth tokens\n /\\b(AKIA|ASIA)[0-9A-Z*]{12,}/g,\n /\\bAIza[0-9A-Za-z_*-]{20,}/g,\n /\\bya29\\.[0-9A-Za-z_*.-]{12,}/g,\n];\n\n/**\n * Every value worth redacting from a set of secrets: the values themselves, the string fields\n * of JSON secrets (e.g. the private key inside a service-account JSON), the user and password\n * of connection strings, and the encoded forms a value takes in URLs, JSON and Basic auth.\n */\nexport function collectSecretValues(secrets: Iterable<string | undefined>): string[] {\n const values = new Set<string>();\n const addOne = (value: string) => {\n if (value.length >= MIN_SECRET_LENGTH) values.add(value);\n };\n const add = (value: unknown) => {\n if (typeof value !== \"string\" || value.length < MIN_SECRET_LENGTH) return;\n addOne(value);\n // The same value as it appears in a URL, inside JSON, and base64-encoded\n try {\n addOne(encodeURIComponent(value));\n } catch {\n // Lone surrogates can't be encoded: the raw value is still covered\n }\n addOne(JSON.stringify(value).slice(1, -1));\n try {\n addOne(btoa(value).replace(/=+$/, \"\"));\n } catch {\n // Not Latin-1: no base64 form to worry about\n }\n };\n const walk = (value: unknown) => {\n if (typeof value === \"string\") add(value);\n else if (Array.isArray(value)) value.forEach(walk);\n else if (value && typeof value === \"object\") Object.values(value).forEach(walk);\n };\n for (const secret of secrets) {\n if (!secret) continue;\n add(secret);\n if (secret.trimStart().startsWith(\"{\")) {\n try {\n walk(JSON.parse(secret));\n } catch {\n // Not JSON: the whole value is already covered\n }\n }\n // Connection strings: drivers report the user or the password on their own\n const credentials = /^[a-z][a-z0-9+.-]*:\\/\\/([^\\s/@:]*):([^\\s/@]*)@/i.exec(secret);\n for (const part of credentials?.slice(1) ?? []) {\n add(part);\n try {\n add(decodeURIComponent(part));\n } catch {\n // Not percent-encoded\n }\n }\n }\n // Longest first, so a secret containing another one is fully redacted\n return [...values].sort((a, b) => b.length - a.length);\n}\n\n/**\n * Strip secret values, URL credentials, query strings, bearer-like tokens and anything shaped\n * like a well-known credential. Safe for text of any length: nothing is cut here, so a secret\n * can never be half-removed.\n */\nexport function redactText({ text, secretValues }: { text: string; secretValues: string[] }): string {\n let out = text;\n for (const secret of secretValues) out = out.split(secret).join(\"***\");\n out = out\n // user:pass@host\n .replace(/(\\b[a-z][a-z0-9+.-]*:\\/\\/)[^\\s/@]+@/gi, \"$1***@\")\n // query strings\n .replace(/(\\b(?:https?|wss?):\\/\\/[^\\s?]+)\\?[^\\s\"')]*/gi, \"$1?***\")\n // bearer-ish tokens that slipped through\n .replace(/\\b(Bearer|Token|Basic|DeepL-Auth-Key)\\s+[A-Za-z0-9._~+/=*-]{8,}/gi, \"$1 ***\");\n for (const pattern of KEY_PATTERNS) out = out.replace(pattern, \"***\");\n return out;\n}\n\n/** Errors are shown on public pages: redact, then truncate (in that order) */\nexport function sanitizeError({\n message,\n secretValues,\n}: {\n message: string | undefined;\n secretValues: string[];\n}): string | undefined {\n if (!message) return undefined;\n const out = redactText({ text: message, secretValues });\n return out.length > MAX_LENGTH ? `${out.slice(0, MAX_LENGTH)}…` : out;\n}\n","import type { ResolvedService } from \"./config\";\nimport { combine, createHttp, errorMessage, measure, normalizeReturn } from \"./probe\";\nimport { redactText, sanitizeError } from \"./sanitize\";\nimport type { CheckCache, CheckContext, CheckOutcome, CheckResult, SecretsInput } from \"./types\";\n\n/** Extra time after `timeoutMs` before a check that ignores its abort signal is given up on */\nconst GRACE_MS = 1000;\n\nexport type RunServiceOptions = {\n service: ResolvedService;\n /** Every secret value of the whole configuration, for redaction */\n secretValues: string[];\n cache: CheckCache;\n now?: () => number;\n fetch?: typeof fetch;\n /** Report failed HTTP answers by status code only */\n hideResponseBodies?: boolean;\n};\n\n/**\n * Run one service and apply the rules shared by all of them:\n * - missing required secrets/fields → \"unconfigured\", the check is never called\n * - a throw or a timeout → down\n * - latency above `slowMs` turns \"up\" into \"degraded\"\n * - errors and every other text of the result are redacted before they leave the runner\n */\nexport async function runService({\n service,\n secretValues,\n cache,\n now = () => Date.now(),\n fetch: fetchImpl,\n hideResponseBodies,\n}: RunServiceOptions): Promise<CheckResult> {\n const checkedAt = now();\n if (service.missing.length > 0) {\n return { key: service.key, status: \"unconfigured\", checkedAt, probed: false };\n }\n\n const redact = (text: string) => redactText({ text, secretValues });\n const controller = new AbortController();\n const ctx: CheckContext<SecretsInput> = {\n secrets: service.secrets as Record<string, string>,\n http: createHttp({ timeoutMs: service.timeoutMs, signal: controller.signal, fetch: fetchImpl, redact, hideResponseBodies }),\n measure,\n combine,\n signal: controller.signal,\n timeoutMs: service.timeoutMs,\n slowMs: service.slowMs,\n cache,\n now: checkedAt,\n };\n\n const start = performance.now();\n let outcome: CheckOutcome;\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n const returned = await Promise.race([\n Promise.resolve().then(() => service.check(ctx)),\n new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n controller.abort(new DOMException(\"Timed out\", \"TimeoutError\"));\n reject(new DOMException(\"Timed out\", \"TimeoutError\"));\n }, service.timeoutMs + GRACE_MS);\n }),\n ]);\n outcome = normalizeReturn(returned);\n if (outcome.latencyMs === undefined && outcome.probed !== false && outcome.status !== \"sleeping\") {\n // Checks that don't measure themselves get the wall time of the whole check\n outcome = { ...outcome, latencyMs: Math.round(performance.now() - start) };\n }\n } catch (error) {\n outcome = { status: \"down\", error: errorMessage(error) };\n } finally {\n clearTimeout(timer);\n }\n\n let { status, error } = outcome;\n if (status === \"up\" && outcome.latencyMs !== undefined && outcome.latencyMs > service.slowMs) {\n status = \"degraded\";\n error ??= `Slow response: ${outcome.latencyMs} ms (threshold ${service.slowMs} ms)`;\n }\n\n return {\n key: service.key,\n status,\n checkedAt,\n probed: outcome.probed ?? true,\n latencyMs: outcome.latencyMs,\n httpStatus: outcome.httpStatus,\n error: sanitizeError({ message: error, secretValues }),\n // Everything below is public too: no text leaves the runner without being redacted\n metrics: outcome.metrics\n ? Object.fromEntries(\n Object.entries(outcome.metrics).map(([name, value]) => [\n redact(name),\n typeof value === \"string\" ? redact(value) : value,\n ])\n )\n : undefined,\n usage: outcome.usage?.length\n ? outcome.usage.map((usage) => ({\n ...usage,\n label: redact(usage.label),\n unit: usage.unit === undefined ? undefined : redact(usage.unit),\n }))\n : undefined,\n instances: outcome.instances?.length\n ? outcome.instances.map((instance) => ({\n ...instance,\n key: redact(instance.key),\n region: instance.region === undefined ? undefined : redact(instance.region),\n id: instance.id === undefined ? undefined : redact(instance.id),\n state: instance.state === undefined ? undefined : redact(instance.state),\n error: sanitizeError({ message: instance.error, secretValues }),\n }))\n : undefined,\n instanceLabels: outcome.instanceLabels\n ? {\n key: redact(outcome.instanceLabels.key),\n detail: outcome.instanceLabels.detail === undefined ? undefined : redact(outcome.instanceLabels.detail),\n }\n : undefined,\n };\n}\n\nexport async function runServices({\n services,\n cacheFor,\n ...rest\n}: Omit<RunServiceOptions, \"service\" | \"cache\"> & {\n services: ResolvedService[];\n /** Each service gets its own cache namespace */\n cacheFor: (key: string) => CheckCache;\n}): Promise<CheckResult[]> {\n return Promise.all(\n services.map((service) => runService({ service, cache: cacheFor(service.key), ...rest }))\n );\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as SecretsInput, f as CheckContext, d as CheckReturn, h as CommonOptions } from './types-
|
|
1
|
+
import { l as SecretsInput, f as CheckContext, d as CheckReturn, h as CommonOptions } from './types-BVa6vIKk.cjs';
|
|
2
2
|
|
|
3
3
|
declare const DEFAULT_SLOW_MS = 2000;
|
|
4
4
|
declare const DEFAULT_TIMEOUT_MS = 10000;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as SecretsInput, f as CheckContext, d as CheckReturn, h as CommonOptions } from './types-
|
|
1
|
+
import { l as SecretsInput, f as CheckContext, d as CheckReturn, h as CommonOptions } from './types-BVa6vIKk.js';
|
|
2
2
|
|
|
3
3
|
declare const DEFAULT_SLOW_MS = 2000;
|
|
4
4
|
declare const DEFAULT_TIMEOUT_MS = 10000;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as PresetOptions, S as ServiceDefinition } from './config-
|
|
2
|
-
import { l as SecretsInput, c as HttpResult, d as CheckReturn } from './types-
|
|
1
|
+
import { b as PresetOptions, S as ServiceDefinition } from './config-gro29syt.cjs';
|
|
2
|
+
import { l as SecretsInput, c as HttpResult, d as CheckReturn } from './types-BVa6vIKk.cjs';
|
|
3
3
|
|
|
4
4
|
type GenericHttpOptions<Secrets extends SecretsInput = SecretsInput> = PresetOptions & {
|
|
5
5
|
/** How to call it */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { b as PresetOptions, S as ServiceDefinition } from './config-
|
|
2
|
-
import { l as SecretsInput, c as HttpResult, d as CheckReturn } from './types-
|
|
1
|
+
import { b as PresetOptions, S as ServiceDefinition } from './config-iY18j9IA.js';
|
|
2
|
+
import { l as SecretsInput, c as HttpResult, d as CheckReturn } from './types-BVa6vIKk.js';
|
|
3
3
|
|
|
4
4
|
type GenericHttpOptions<Secrets extends SecretsInput = SecretsInput> = PresetOptions & {
|
|
5
5
|
/** How to call it */
|
package/dist/index.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var chunkNP3YYVRZ_cjs = require('./chunk-NP3YYVRZ.cjs');
|
|
4
4
|
var chunkELV4ZU6G_cjs = require('./chunk-ELV4ZU6G.cjs');
|
|
5
|
-
var
|
|
5
|
+
var chunkNZTKXXW2_cjs = require('./chunk-NZTKXXW2.cjs');
|
|
6
6
|
var chunkXHXEKB3Q_cjs = require('./chunk-XHXEKB3Q.cjs');
|
|
7
7
|
|
|
8
8
|
// src/stores/memory.ts
|
|
@@ -109,7 +109,7 @@ function defineStatus(config) {
|
|
|
109
109
|
const scoring = chunkNP3YYVRZ_cjs.resolveScoring(config.scoring);
|
|
110
110
|
const warn = config.onWarning ?? ((message) => console.warn(`[sermon-js] ${message}`));
|
|
111
111
|
for (const warning of resolved.warnings) warn(warning);
|
|
112
|
-
const secretValues =
|
|
112
|
+
const secretValues = chunkNZTKXXW2_cjs.collectSecretValues(
|
|
113
113
|
[...services.values()].flatMap((service) => [...Object.values(service.secrets), ...service.sensitive ?? []])
|
|
114
114
|
);
|
|
115
115
|
const fallback = memoryStore({ now });
|
|
@@ -174,7 +174,7 @@ function defineStatus(config) {
|
|
|
174
174
|
retentionMs,
|
|
175
175
|
scoring,
|
|
176
176
|
warnings: resolved.warnings,
|
|
177
|
-
redact: (text) =>
|
|
177
|
+
redact: (text) => chunkNZTKXXW2_cjs.redactText({ text, secretValues }),
|
|
178
178
|
has: (key) => services.has(key),
|
|
179
179
|
lock,
|
|
180
180
|
lastFullRun,
|
|
@@ -183,7 +183,7 @@ function defineStatus(config) {
|
|
|
183
183
|
if (unknown.length) throw new Error(`sermon-js: unknown service key(s): ${unknown.join(", ")}`);
|
|
184
184
|
const selected = keys ? keys.map((key) => services.get(key)) : [...services.values()];
|
|
185
185
|
const full = !keys;
|
|
186
|
-
const results = await
|
|
186
|
+
const results = await chunkNZTKXXW2_cjs.runServices({
|
|
187
187
|
services: selected,
|
|
188
188
|
secretValues,
|
|
189
189
|
cacheFor: checkCache,
|
|
@@ -358,11 +358,11 @@ Object.defineProperty(exports, "generic", {
|
|
|
358
358
|
});
|
|
359
359
|
Object.defineProperty(exports, "collectSecretValues", {
|
|
360
360
|
enumerable: true,
|
|
361
|
-
get: function () { return
|
|
361
|
+
get: function () { return chunkNZTKXXW2_cjs.collectSecretValues; }
|
|
362
362
|
});
|
|
363
363
|
Object.defineProperty(exports, "sanitizeError", {
|
|
364
364
|
enumerable: true,
|
|
365
|
-
get: function () { return
|
|
365
|
+
get: function () { return chunkNZTKXXW2_cjs.sanitizeError; }
|
|
366
366
|
});
|
|
367
367
|
Object.defineProperty(exports, "DEFAULT_SLOW_MS", {
|
|
368
368
|
enumerable: true,
|
package/dist/index.d.cts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { D as Duration, T as TickResult, S as Status, a as Scoring } from './status-
|
|
2
|
-
export { b as DEFAULT_SCORING, R as RunReport, c as ScoringInput, d as ServiceHistory, e as StatusConfig, f as computeScore, g as defineStatus, l as labelForScore, t as toMs } from './status-
|
|
3
|
-
export { C as CustomOptions, D as DEFAULT_SLOW_MS, a as DEFAULT_TIMEOUT_MS, G as GroupDefinition, P as PresetContext, b as PresetOptions, c as PresetSpec, R as ResolvedNode, d as ResolvedService, S as ServiceDefinition, e as ServiceNode, f as custom, g as definePreset, h as group } from './config-
|
|
4
|
-
export { G as GenericHttpOptions, g as generic } from './generic-
|
|
5
|
-
import { S as StatusStore, R as RunSummary, C as CheckSample } from './store-
|
|
6
|
-
export { L as LockResult, T as TimeRange } from './store-
|
|
7
|
-
import { H as HistoryRange, a as HistoryBar, S as ServiceStats, C as CheckOutcome, b as HttpInit, c as HttpResult, d as CheckReturn } from './types-
|
|
8
|
-
export { e as CheckCache, f as CheckContext, g as CheckResult, h as CommonOptions, G as GroupSnapshot, i as HistoryPayload, I as Instance, j as InstanceStats, M as Metrics, O as OutcomeStatus, P as ProbeHelpers, k as ScoreLabel, l as SecretsInput, m as ServiceSnapshot, n as SnapshotNode, o as Status, p as StatusSnapshot, T as Trigger, U as Usage } from './types-
|
|
1
|
+
import { D as Duration, T as TickResult, S as Status, a as Scoring } from './status-BExBb08T.cjs';
|
|
2
|
+
export { b as DEFAULT_SCORING, R as RunReport, c as ScoringInput, d as ServiceHistory, e as StatusConfig, f as computeScore, g as defineStatus, l as labelForScore, t as toMs } from './status-BExBb08T.cjs';
|
|
3
|
+
export { C as CustomOptions, D as DEFAULT_SLOW_MS, a as DEFAULT_TIMEOUT_MS, G as GroupDefinition, P as PresetContext, b as PresetOptions, c as PresetSpec, R as ResolvedNode, d as ResolvedService, S as ServiceDefinition, e as ServiceNode, f as custom, g as definePreset, h as group } from './config-gro29syt.cjs';
|
|
4
|
+
export { G as GenericHttpOptions, g as generic } from './generic-BUiaKpNp.cjs';
|
|
5
|
+
import { S as StatusStore, R as RunSummary, C as CheckSample } from './store-CAIB7Esp.cjs';
|
|
6
|
+
export { L as LockResult, T as TimeRange } from './store-CAIB7Esp.cjs';
|
|
7
|
+
import { H as HistoryRange, a as HistoryBar, S as ServiceStats, C as CheckOutcome, b as HttpInit, c as HttpResult, d as CheckReturn } from './types-BVa6vIKk.cjs';
|
|
8
|
+
export { e as CheckCache, f as CheckContext, g as CheckResult, h as CommonOptions, G as GroupSnapshot, i as HistoryPayload, I as Instance, j as InstanceStats, M as Metrics, O as OutcomeStatus, P as ProbeHelpers, k as ScoreLabel, l as SecretsInput, m as ServiceSnapshot, n as SnapshotNode, o as Status, p as StatusSnapshot, T as Trigger, U as Usage } from './types-BVa6vIKk.cjs';
|
|
9
9
|
|
|
10
10
|
type SchedulerOptions = {
|
|
11
11
|
/** How often to call `tick()` (default: the status `interval`) */
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { D as Duration, T as TickResult, S as Status, a as Scoring } from './status-
|
|
2
|
-
export { b as DEFAULT_SCORING, R as RunReport, c as ScoringInput, d as ServiceHistory, e as StatusConfig, f as computeScore, g as defineStatus, l as labelForScore, t as toMs } from './status-
|
|
3
|
-
export { C as CustomOptions, D as DEFAULT_SLOW_MS, a as DEFAULT_TIMEOUT_MS, G as GroupDefinition, P as PresetContext, b as PresetOptions, c as PresetSpec, R as ResolvedNode, d as ResolvedService, S as ServiceDefinition, e as ServiceNode, f as custom, g as definePreset, h as group } from './config-
|
|
4
|
-
export { G as GenericHttpOptions, g as generic } from './generic-
|
|
5
|
-
import { S as StatusStore, R as RunSummary, C as CheckSample } from './store-
|
|
6
|
-
export { L as LockResult, T as TimeRange } from './store-
|
|
7
|
-
import { H as HistoryRange, a as HistoryBar, S as ServiceStats, C as CheckOutcome, b as HttpInit, c as HttpResult, d as CheckReturn } from './types-
|
|
8
|
-
export { e as CheckCache, f as CheckContext, g as CheckResult, h as CommonOptions, G as GroupSnapshot, i as HistoryPayload, I as Instance, j as InstanceStats, M as Metrics, O as OutcomeStatus, P as ProbeHelpers, k as ScoreLabel, l as SecretsInput, m as ServiceSnapshot, n as SnapshotNode, o as Status, p as StatusSnapshot, T as Trigger, U as Usage } from './types-
|
|
1
|
+
import { D as Duration, T as TickResult, S as Status, a as Scoring } from './status-DmRhwvVC.js';
|
|
2
|
+
export { b as DEFAULT_SCORING, R as RunReport, c as ScoringInput, d as ServiceHistory, e as StatusConfig, f as computeScore, g as defineStatus, l as labelForScore, t as toMs } from './status-DmRhwvVC.js';
|
|
3
|
+
export { C as CustomOptions, D as DEFAULT_SLOW_MS, a as DEFAULT_TIMEOUT_MS, G as GroupDefinition, P as PresetContext, b as PresetOptions, c as PresetSpec, R as ResolvedNode, d as ResolvedService, S as ServiceDefinition, e as ServiceNode, f as custom, g as definePreset, h as group } from './config-iY18j9IA.js';
|
|
4
|
+
export { G as GenericHttpOptions, g as generic } from './generic-CV2O4aNH.js';
|
|
5
|
+
import { S as StatusStore, R as RunSummary, C as CheckSample } from './store-BfKP7CjW.js';
|
|
6
|
+
export { L as LockResult, T as TimeRange } from './store-BfKP7CjW.js';
|
|
7
|
+
import { H as HistoryRange, a as HistoryBar, S as ServiceStats, C as CheckOutcome, b as HttpInit, c as HttpResult, d as CheckReturn } from './types-BVa6vIKk.js';
|
|
8
|
+
export { e as CheckCache, f as CheckContext, g as CheckResult, h as CommonOptions, G as GroupSnapshot, i as HistoryPayload, I as Instance, j as InstanceStats, M as Metrics, O as OutcomeStatus, P as ProbeHelpers, k as ScoreLabel, l as SecretsInput, m as ServiceSnapshot, n as SnapshotNode, o as Status, p as StatusSnapshot, T as Trigger, U as Usage } from './types-BVa6vIKk.js';
|
|
9
9
|
|
|
10
10
|
type SchedulerOptions = {
|
|
11
11
|
/** How often to call `tick()` (default: the status `interval`) */
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { toMs, resolveScoring, RANGES, bucketRuns, computeServiceStats, computeScore } from './chunk-APC2HVSI.js';
|
|
2
2
|
export { DEFAULT_SCORING, RANGES, bucketRuns, computeScore, computeServiceStats, labelForScore, toMs } from './chunk-APC2HVSI.js';
|
|
3
3
|
export { generic } from './chunk-I3346MUL.js';
|
|
4
|
-
import { collectSecretValues, runServices, redactText } from './chunk-
|
|
5
|
-
export { collectSecretValues, sanitizeError } from './chunk-
|
|
4
|
+
import { collectSecretValues, runServices, redactText } from './chunk-R7BDAQOM.js';
|
|
5
|
+
export { collectSecretValues, sanitizeError } from './chunk-R7BDAQOM.js';
|
|
6
6
|
import { resolveTree } from './chunk-XPXIDJUU.js';
|
|
7
7
|
export { DEFAULT_SLOW_MS, DEFAULT_TIMEOUT_MS, combine, createHttp, custom, definePreset, errorMessage, group, measure } from './chunk-XPXIDJUU.js';
|
|
8
8
|
|