@pipeline-builder/api-core 5.0.20 → 5.0.22

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.
@@ -27,3 +27,29 @@ export declare function envInt(name: string, def: number, opts?: {
27
27
  export declare function envBool(name: string, def: boolean): boolean;
28
28
  /** Read a string env var; unset / blank → `def`. */
29
29
  export declare function envStr(name: string, def: string): string;
30
+ /**
31
+ * Is a Postgres read replica configured AND switched on?
32
+ *
33
+ * Lives in api-core, not pipeline-data, even though the read POOL does. It is
34
+ * pure env logic with no database dependency, and BOTH packages need it:
35
+ * pipeline-data to decide whether to build the pool, and api-server's
36
+ * tenant-context middleware to decide whether the cross-request write pin is in
37
+ * play at all.
38
+ *
39
+ * WHY THAT PLACEMENT IS LOAD-BEARING, not taste. api-server's middleware runs in
40
+ * EVERY service, and 91 test suites stub `@pipeline-builder/pipeline-data` with
41
+ * `stubModule`, which THROWS on access to an export the suite did not override —
42
+ * deliberately, to force explicitness. So reaching into pipeline-data from the
43
+ * middleware turned every one of those suites into a 500, and patching 91 stubs
44
+ * would only defer the next one. api-core's mocks spread `requireActual`, so a
45
+ * symbol here is available to all of them without a single stub edit.
46
+ *
47
+ * `DB_READ_ENABLED=false` is the KILL SWITCH: it forces every read back to the
48
+ * primary without a redeploy or a manifest change, which the unset-host fallback
49
+ * does not cover. Unset host answers "there is no replica"; the kill switch
50
+ * answers "there is one and I do not trust it".
51
+ *
52
+ * `.trim()` matters: `DB_READ_HOST=" "` from a stray space must not read as
53
+ * "a replica exists".
54
+ */
55
+ export declare function isReadReplicaConfigured(): boolean;
package/lib/utils/env.js CHANGED
@@ -50,4 +50,34 @@ export function envStr(name, def) {
50
50
  const raw = process.env[name];
51
51
  return raw === undefined || raw.trim() === '' ? def : raw;
52
52
  }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLElBQVksRUFBRSxHQUFXLEVBQUUsSUFBcUM7SUFDckYsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2xDLElBQUksQ0FBQyxHQUFHLE9BQU8sS0FBSyxFQUFFLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUMxRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLElBQUksSUFBSSxFQUFFLEdBQUcsS0FBSyxTQUFTO1FBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxJQUFJLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUztRQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFZLEVBQUUsR0FBWTtJQUNoRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzFELElBQUksQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsb0RBQW9EO0FBQ3BELE1BQU0sVUFBVSxNQUFNLENBQUMsSUFBWSxFQUFFLEdBQVc7SUFDOUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFR5cGVkIGVudmlyb25tZW50LXZhcmlhYmxlIHJlYWRlcnMgd2l0aCBjb25zaXN0ZW50IHBhcnNpbmcgKyBkZWZhdWx0cy5cbiAqXG4gKiBIYW5kLXJvbGxlZCBgcGFyc2VJbnQocHJvY2Vzcy5lbnYuWCB8fCAn4oCmJywgMTApYCAvIGBwcm9jZXNzLmVudi5YID09PSAndHJ1ZSdgXG4gKiBkcmlmdHMgKHRoZSBzYW1lIHZhciBwYXJzZWQgd2l0aCBkaWZmZXJlbnQgZGVmYXVsdHMgaW4gZGlmZmVyZW50IHBhY2thZ2VzKVxuICogYW5kIHNpbGVudGx5IHJldHVybnMgdGhlIGRlZmF1bHQgb24gYSB0eXBvJ2QgbmFtZS4gVGhlc2UgaGVscGVycyBjZW50cmFsaXplIHRoZSBwYXJzaW5nIHNvIGEgdmFsdWVcbiAqIGlzIHJlYWQgdGhlIHNhbWUgd2F5IGV2ZXJ5d2hlcmUsIGFuZCBtYWtlIHNoYXJlZCBjb25zdGFudHMgaW1wb3J0YWJsZSByYXRoZXJcbiAqIHRoYW4gcmUtZGVyaXZlZCAoc2VlIGBNQVhfUEFHRV9MSU1JVGAgLyBgREVGQVVMVF9QQUdFX0xJTUlUYCBpblxuICogYHZhbGlkYXRpb24vY29tbW9uLXNjaGVtYXMudHNgKS5cbiAqL1xuXG4vKipcbiAqIFBhcnNlIGFuIGludGVnZXIgZW52IHZhci4gVW5zZXQgLyBibGFuayAvIG5vdCBhIGNsZWFuIGludGVnZXIgc3RyaW5nIOKGkiBgZGVmYC5cbiAqIE9wdGlvbmFsIGBtaW5gL2BtYXhgIGNsYW1wIHRoZSByZXN1bHQgKGFwcGxpZWQgYWZ0ZXIgdGhlIGRlZmF1bHQpLlxuICpcbiAqIFNUUklDVCBvbiBwdXJwb3NlOiBgcGFyc2VJbnRgIGFjY2VwdHMgYDUwLjVgICjihpIgNTApIGFuZCBgMTJhYmNgICjihpIgMTIpLCB3aGljaFxuICogaXMgaG93IGEgdHlwbydkIHF1b3RhIGxpbWl0IG9yIHRpbWVvdXQgc2lsZW50bHkgc2hpcHMgYSB2YWx1ZSBub2JvZHkgd3JvdGUuXG4gKiBBbnl0aGluZyB0aGF0IGlzbid0IGAtP1xcZCtgIGZhbGxzIGJhY2sgdG8gdGhlIGNvZGUgZGVmYXVsdCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52SW50KG5hbWU6IHN0cmluZywgZGVmOiBudW1iZXIsIG9wdHM/OiB7IG1pbj86IG51bWJlcjsgbWF4PzogbnVtYmVyIH0pOiBudW1iZXIge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgY29uc3QgdHJpbW1lZCA9IHJhdz8udHJpbSgpID8/ICcnO1xuICBsZXQgbiA9IHRyaW1tZWQgIT09ICcnICYmIC9eWystXT9cXGQrJC8udGVzdCh0cmltbWVkKSA/IE51bWJlci5wYXJzZUludCh0cmltbWVkLCAxMCkgOiBkZWY7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG4pKSBuID0gZGVmO1xuICBpZiAob3B0cz8ubWluICE9PSB1bmRlZmluZWQpIG4gPSBNYXRoLm1heChvcHRzLm1pbiwgbik7XG4gIGlmIChvcHRzPy5tYXggIT09IHVuZGVmaW5lZCkgbiA9IE1hdGgubWluKG9wdHMubWF4LCBuKTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogUGFyc2UgYSBib29sZWFuIGVudiB2YXIuIGB0cnVlYC9gMWAvYHllc2Ag4oaSIHRydWUsIGBmYWxzZWAvYDBgL2Bub2Ag4oaSIGZhbHNlXG4gKiAoY2FzZS1pbnNlbnNpdGl2ZSk7IHVuc2V0IC8gYmxhbmsgLyB1bnJlY29nbml6ZWQg4oaSIGBkZWZgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52Qm9vbChuYW1lOiBzdHJpbmcsIGRlZjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdy50cmltKCkgPT09ICcnKSByZXR1cm4gZGVmO1xuICBjb25zdCB2ID0gcmF3LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodiA9PT0gJ3RydWUnIHx8IHYgPT09ICcxJyB8fCB2ID09PSAneWVzJykgcmV0dXJuIHRydWU7XG4gIGlmICh2ID09PSAnZmFsc2UnIHx8IHYgPT09ICcwJyB8fCB2ID09PSAnbm8nKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBkZWY7XG59XG5cbi8qKiBSZWFkIGEgc3RyaW5nIGVudiB2YXI7IHVuc2V0IC8gYmxhbmsg4oaSIGBkZWZgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudlN0cihuYW1lOiBzdHJpbmcsIGRlZjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIHJldHVybiByYXcgPT09IHVuZGVmaW5lZCB8fCByYXcudHJpbSgpID09PSAnJyA/IGRlZiA6IHJhdztcbn1cbiJdfQ==
53
+ /**
54
+ * Is a Postgres read replica configured AND switched on?
55
+ *
56
+ * Lives in api-core, not pipeline-data, even though the read POOL does. It is
57
+ * pure env logic with no database dependency, and BOTH packages need it:
58
+ * pipeline-data to decide whether to build the pool, and api-server's
59
+ * tenant-context middleware to decide whether the cross-request write pin is in
60
+ * play at all.
61
+ *
62
+ * WHY THAT PLACEMENT IS LOAD-BEARING, not taste. api-server's middleware runs in
63
+ * EVERY service, and 91 test suites stub `@pipeline-builder/pipeline-data` with
64
+ * `stubModule`, which THROWS on access to an export the suite did not override —
65
+ * deliberately, to force explicitness. So reaching into pipeline-data from the
66
+ * middleware turned every one of those suites into a 500, and patching 91 stubs
67
+ * would only defer the next one. api-core's mocks spread `requireActual`, so a
68
+ * symbol here is available to all of them without a single stub edit.
69
+ *
70
+ * `DB_READ_ENABLED=false` is the KILL SWITCH: it forces every read back to the
71
+ * primary without a redeploy or a manifest change, which the unset-host fallback
72
+ * does not cover. Unset host answers "there is no replica"; the kill switch
73
+ * answers "there is one and I do not trust it".
74
+ *
75
+ * `.trim()` matters: `DB_READ_HOST=" "` from a stray space must not read as
76
+ * "a replica exists".
77
+ */
78
+ export function isReadReplicaConfigured() {
79
+ if (!envBool('DB_READ_ENABLED', true))
80
+ return false;
81
+ return envStr('DB_READ_HOST', '').trim().length > 0;
82
+ }
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Vudi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7R0FTRztBQUVIOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLElBQVksRUFBRSxHQUFXLEVBQUUsSUFBcUM7SUFDckYsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2xDLElBQUksQ0FBQyxHQUFHLE9BQU8sS0FBSyxFQUFFLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUMxRixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLElBQUksSUFBSSxFQUFFLEdBQUcsS0FBSyxTQUFTO1FBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxJQUFJLElBQUksRUFBRSxHQUFHLEtBQUssU0FBUztRQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFZLEVBQUUsR0FBWTtJQUNoRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQ3ZELE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxJQUFJLENBQUMsS0FBSyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzFELElBQUksQ0FBQyxLQUFLLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsb0RBQW9EO0FBQ3BELE1BQU0sVUFBVSxNQUFNLENBQUMsSUFBWSxFQUFFLEdBQVc7SUFDOUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixPQUFPLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDNUQsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDcEQsT0FBTyxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFR5cGVkIGVudmlyb25tZW50LXZhcmlhYmxlIHJlYWRlcnMgd2l0aCBjb25zaXN0ZW50IHBhcnNpbmcgKyBkZWZhdWx0cy5cbiAqXG4gKiBIYW5kLXJvbGxlZCBgcGFyc2VJbnQocHJvY2Vzcy5lbnYuWCB8fCAn4oCmJywgMTApYCAvIGBwcm9jZXNzLmVudi5YID09PSAndHJ1ZSdgXG4gKiBkcmlmdHMgKHRoZSBzYW1lIHZhciBwYXJzZWQgd2l0aCBkaWZmZXJlbnQgZGVmYXVsdHMgaW4gZGlmZmVyZW50IHBhY2thZ2VzKVxuICogYW5kIHNpbGVudGx5IHJldHVybnMgdGhlIGRlZmF1bHQgb24gYSB0eXBvJ2QgbmFtZS4gVGhlc2UgaGVscGVycyBjZW50cmFsaXplIHRoZSBwYXJzaW5nIHNvIGEgdmFsdWVcbiAqIGlzIHJlYWQgdGhlIHNhbWUgd2F5IGV2ZXJ5d2hlcmUsIGFuZCBtYWtlIHNoYXJlZCBjb25zdGFudHMgaW1wb3J0YWJsZSByYXRoZXJcbiAqIHRoYW4gcmUtZGVyaXZlZCAoc2VlIGBNQVhfUEFHRV9MSU1JVGAgLyBgREVGQVVMVF9QQUdFX0xJTUlUYCBpblxuICogYHZhbGlkYXRpb24vY29tbW9uLXNjaGVtYXMudHNgKS5cbiAqL1xuXG4vKipcbiAqIFBhcnNlIGFuIGludGVnZXIgZW52IHZhci4gVW5zZXQgLyBibGFuayAvIG5vdCBhIGNsZWFuIGludGVnZXIgc3RyaW5nIOKGkiBgZGVmYC5cbiAqIE9wdGlvbmFsIGBtaW5gL2BtYXhgIGNsYW1wIHRoZSByZXN1bHQgKGFwcGxpZWQgYWZ0ZXIgdGhlIGRlZmF1bHQpLlxuICpcbiAqIFNUUklDVCBvbiBwdXJwb3NlOiBgcGFyc2VJbnRgIGFjY2VwdHMgYDUwLjVgICjihpIgNTApIGFuZCBgMTJhYmNgICjihpIgMTIpLCB3aGljaFxuICogaXMgaG93IGEgdHlwbydkIHF1b3RhIGxpbWl0IG9yIHRpbWVvdXQgc2lsZW50bHkgc2hpcHMgYSB2YWx1ZSBub2JvZHkgd3JvdGUuXG4gKiBBbnl0aGluZyB0aGF0IGlzbid0IGAtP1xcZCtgIGZhbGxzIGJhY2sgdG8gdGhlIGNvZGUgZGVmYXVsdCBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52SW50KG5hbWU6IHN0cmluZywgZGVmOiBudW1iZXIsIG9wdHM/OiB7IG1pbj86IG51bWJlcjsgbWF4PzogbnVtYmVyIH0pOiBudW1iZXIge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgY29uc3QgdHJpbW1lZCA9IHJhdz8udHJpbSgpID8/ICcnO1xuICBsZXQgbiA9IHRyaW1tZWQgIT09ICcnICYmIC9eWystXT9cXGQrJC8udGVzdCh0cmltbWVkKSA/IE51bWJlci5wYXJzZUludCh0cmltbWVkLCAxMCkgOiBkZWY7XG4gIGlmICghTnVtYmVyLmlzRmluaXRlKG4pKSBuID0gZGVmO1xuICBpZiAob3B0cz8ubWluICE9PSB1bmRlZmluZWQpIG4gPSBNYXRoLm1heChvcHRzLm1pbiwgbik7XG4gIGlmIChvcHRzPy5tYXggIT09IHVuZGVmaW5lZCkgbiA9IE1hdGgubWluKG9wdHMubWF4LCBuKTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogUGFyc2UgYSBib29sZWFuIGVudiB2YXIuIGB0cnVlYC9gMWAvYHllc2Ag4oaSIHRydWUsIGBmYWxzZWAvYDBgL2Bub2Ag4oaSIGZhbHNlXG4gKiAoY2FzZS1pbnNlbnNpdGl2ZSk7IHVuc2V0IC8gYmxhbmsgLyB1bnJlY29nbml6ZWQg4oaSIGBkZWZgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52Qm9vbChuYW1lOiBzdHJpbmcsIGRlZjogYm9vbGVhbik6IGJvb2xlYW4ge1xuICBjb25zdCByYXcgPSBwcm9jZXNzLmVudltuYW1lXTtcbiAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdy50cmltKCkgPT09ICcnKSByZXR1cm4gZGVmO1xuICBjb25zdCB2ID0gcmF3LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodiA9PT0gJ3RydWUnIHx8IHYgPT09ICcxJyB8fCB2ID09PSAneWVzJykgcmV0dXJuIHRydWU7XG4gIGlmICh2ID09PSAnZmFsc2UnIHx8IHYgPT09ICcwJyB8fCB2ID09PSAnbm8nKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBkZWY7XG59XG5cbi8qKiBSZWFkIGEgc3RyaW5nIGVudiB2YXI7IHVuc2V0IC8gYmxhbmsg4oaSIGBkZWZgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudlN0cihuYW1lOiBzdHJpbmcsIGRlZjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIHJldHVybiByYXcgPT09IHVuZGVmaW5lZCB8fCByYXcudHJpbSgpID09PSAnJyA/IGRlZiA6IHJhdztcbn1cblxuLyoqXG4gKiBJcyBhIFBvc3RncmVzIHJlYWQgcmVwbGljYSBjb25maWd1cmVkIEFORCBzd2l0Y2hlZCBvbj9cbiAqXG4gKiBMaXZlcyBpbiBhcGktY29yZSwgbm90IHBpcGVsaW5lLWRhdGEsIGV2ZW4gdGhvdWdoIHRoZSByZWFkIFBPT0wgZG9lcy4gSXQgaXNcbiAqIHB1cmUgZW52IGxvZ2ljIHdpdGggbm8gZGF0YWJhc2UgZGVwZW5kZW5jeSwgYW5kIEJPVEggcGFja2FnZXMgbmVlZCBpdDpcbiAqIHBpcGVsaW5lLWRhdGEgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYnVpbGQgdGhlIHBvb2wsIGFuZCBhcGktc2VydmVyJ3NcbiAqIHRlbmFudC1jb250ZXh0IG1pZGRsZXdhcmUgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGNyb3NzLXJlcXVlc3Qgd3JpdGUgcGluIGlzIGluXG4gKiBwbGF5IGF0IGFsbC5cbiAqXG4gKiBXSFkgVEhBVCBQTEFDRU1FTlQgSVMgTE9BRC1CRUFSSU5HLCBub3QgdGFzdGUuIGFwaS1zZXJ2ZXIncyBtaWRkbGV3YXJlIHJ1bnMgaW5cbiAqIEVWRVJZIHNlcnZpY2UsIGFuZCA5MSB0ZXN0IHN1aXRlcyBzdHViIGBAcGlwZWxpbmUtYnVpbGRlci9waXBlbGluZS1kYXRhYCB3aXRoXG4gKiBgc3R1Yk1vZHVsZWAsIHdoaWNoIFRIUk9XUyBvbiBhY2Nlc3MgdG8gYW4gZXhwb3J0IHRoZSBzdWl0ZSBkaWQgbm90IG92ZXJyaWRlIOKAlFxuICogZGVsaWJlcmF0ZWx5LCB0byBmb3JjZSBleHBsaWNpdG5lc3MuIFNvIHJlYWNoaW5nIGludG8gcGlwZWxpbmUtZGF0YSBmcm9tIHRoZVxuICogbWlkZGxld2FyZSB0dXJuZWQgZXZlcnkgb25lIG9mIHRob3NlIHN1aXRlcyBpbnRvIGEgNTAwLCBhbmQgcGF0Y2hpbmcgOTEgc3R1YnNcbiAqIHdvdWxkIG9ubHkgZGVmZXIgdGhlIG5leHQgb25lLiBhcGktY29yZSdzIG1vY2tzIHNwcmVhZCBgcmVxdWlyZUFjdHVhbGAsIHNvIGFcbiAqIHN5bWJvbCBoZXJlIGlzIGF2YWlsYWJsZSB0byBhbGwgb2YgdGhlbSB3aXRob3V0IGEgc2luZ2xlIHN0dWIgZWRpdC5cbiAqXG4gKiBgREJfUkVBRF9FTkFCTEVEPWZhbHNlYCBpcyB0aGUgS0lMTCBTV0lUQ0g6IGl0IGZvcmNlcyBldmVyeSByZWFkIGJhY2sgdG8gdGhlXG4gKiBwcmltYXJ5IHdpdGhvdXQgYSByZWRlcGxveSBvciBhIG1hbmlmZXN0IGNoYW5nZSwgd2hpY2ggdGhlIHVuc2V0LWhvc3QgZmFsbGJhY2tcbiAqIGRvZXMgbm90IGNvdmVyLiBVbnNldCBob3N0IGFuc3dlcnMgXCJ0aGVyZSBpcyBubyByZXBsaWNhXCI7IHRoZSBraWxsIHN3aXRjaFxuICogYW5zd2VycyBcInRoZXJlIGlzIG9uZSBhbmQgSSBkbyBub3QgdHJ1c3QgaXRcIi5cbiAqXG4gKiBgLnRyaW0oKWAgbWF0dGVyczogYERCX1JFQURfSE9TVD1cIiBcImAgZnJvbSBhIHN0cmF5IHNwYWNlIG11c3Qgbm90IHJlYWQgYXNcbiAqIFwiYSByZXBsaWNhIGV4aXN0c1wiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWFkUmVwbGljYUNvbmZpZ3VyZWQoKTogYm9vbGVhbiB7XG4gIGlmICghZW52Qm9vbCgnREJfUkVBRF9FTkFCTEVEJywgdHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudlN0cignREJfUkVBRF9IT1NUJywgJycpLnRyaW0oKS5sZW5ndGggPiAwO1xufVxuIl19
@@ -16,7 +16,7 @@ export * from './concurrency.js';
16
16
  export * from './audit.js';
17
17
  export { getDefaultKeyProvider, resetDefaultKeyProvider, setKeyProvider, encryptSecret, decryptSecret, isEncryptedBlob, type EncryptedBlob, type KeyProvider, EnvKeyProvider, KmsKeyProvider, createBaseKeyProvider, initSecretEncryption, type PerOrgKmsConfig, type PerOrgKmsResolver, PerOrgKmsKeyProvider, } from './secret-encryption.js';
18
18
  export * from './secret-rotation.js';
19
- export { setCounterEmitter, resetCounterEmitter, emitCounter, } from './metric-emitter.js';
19
+ export { setCounterEmitter, resetCounterEmitter, setGaugeEmitter, resetGaugeEmitter, emitGauge, emitCounter, } from './metric-emitter.js';
20
20
  export * from './aws-scrub.js';
21
21
  export { extractPredicate, SPDX_PREDICATE_TYPE, } from './dsse.js';
22
22
  export { maskLine, looksSensitive, REDACTED, SENSITIVE_VALUE_PATTERNS, } from './sensitive-patterns.js';
@@ -22,7 +22,7 @@ export * from './concurrency.js';
22
22
  export * from './audit.js';
23
23
  export { getDefaultKeyProvider, resetDefaultKeyProvider, setKeyProvider, encryptSecret, decryptSecret, isEncryptedBlob, EnvKeyProvider, KmsKeyProvider, createBaseKeyProvider, initSecretEncryption, PerOrgKmsKeyProvider, } from './secret-encryption.js';
24
24
  export * from './secret-rotation.js';
25
- export { setCounterEmitter, resetCounterEmitter, emitCounter, } from './metric-emitter.js';
25
+ export { setCounterEmitter, resetCounterEmitter, setGaugeEmitter, resetGaugeEmitter, emitGauge, emitCounter, } from './metric-emitter.js';
26
26
  export * from './aws-scrub.js';
27
27
  export { extractPredicate, SPDX_PREDICATE_TYPE, } from './dsse.js';
28
28
  export { maskLine, looksSensitive, REDACTED, SENSITIVE_VALUE_PATTERNS, } from './sensitive-patterns.js';
@@ -32,4 +32,4 @@ export * from './service-registry.js';
32
32
  export * from './retention.js';
33
33
  export * from './compliance-attributes.js';
34
34
  export { leadingZeroBits, proofOfWorkHash, challengeKey, clampDifficulty, createProofOfWorkChallenge, parseProofOfWorkChallenge, verifyProofOfWork, solveProofOfWork, POW_DEFAULT_DIFFICULTY, POW_MAX_DIFFICULTY, POW_CHALLENGE_TTL_MS, } from './proof-of-work.js';
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixZQUFZLEVBRVosTUFBTSxFQUNOLE9BQU8sR0FDUixNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGNBQWMsRUFFZCxjQUFjLEVBQ2QsWUFBWSxFQUNaLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIscUJBQXFCLEdBR3RCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGVBQWUsRUFDZixjQUFjLEVBSWQsZ0JBQWdCLEVBQ2hCLFdBQVcsR0FDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5Qix5RUFBeUU7QUFDekUsbUVBQW1FO0FBQ25FLHlFQUF5RTtBQUN6RSw4RUFBOEU7QUFDOUUsaUNBQWlDO0FBQ2pDLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsY0FBYyxFQUNkLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLFVBQVUsR0FDWCxNQUFNLFVBQVUsQ0FBQztBQUtsQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFdBQVcsQ0FBQztBQUMxQixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLHFCQUFxQixHQUN0QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxZQUFZLENBQUM7QUFDM0IsT0FBTyxFQUNMLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsY0FBYyxFQUNkLGFBQWEsRUFDYixhQUFhLEVBQ2IsZUFBZSxFQUdmLGNBQWMsRUFDZCxjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUdwQixvQkFBb0IsR0FDckIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLFdBQVcsR0FDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsR0FDcEIsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUNMLFFBQVEsRUFDUixjQUFjLEVBQ2QsUUFBUSxFQUNSLHdCQUF3QixHQUN6QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLFNBQVMsR0FFVixNQUFNLFdBQVcsQ0FBQztBQUNuQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixZQUFZLEVBQ1osZUFBZSxFQUNmLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUdyQixNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7XG4gIHNldExvZ0NvbnRleHRQcm92aWRlcixcbiAgcmVkYWN0U2Vuc2l0aXZlLFxuICBjcmVhdGVMb2dnZXIsXG4gIHR5cGUgTG9nZ2VyLFxuICBsb2dnZXIsXG4gIGRlZmF1bHQsXG59IGZyb20gJy4vbG9nZ2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpLWtleS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NhZmUtcmVxdWlyZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyZS1jb21wYXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY3Jhc2gtaGFuZGxlcnMuanMnO1xuZXhwb3J0IHtcbiAgc2VuZFN1Y2Nlc3MsXG4gIHNlbmRFcnJvcixcbiAgc2VuZFF1b3RhRXhjZWVkZWQsXG4gIHNlbmRQYWdpbmF0ZWROZXN0ZWQsXG4gIHBhZ2luYXRpb25NZXRhLFxuICB0eXBlIFBhZ2luYXRpb25NZXRhLFxuICBleHRyYWN0RGJFcnJvcixcbiAgZXJyb3JNZXNzYWdlLFxuICBzZW5kQmFkUmVxdWVzdCxcbiAgc2VuZEludGVybmFsRXJyb3IsXG4gIHBhcnNlUGFnaW5hdGlvblBhcmFtcyxcbiAgdHlwZSBQYWdpbmF0aW9uUGFyYW1zLFxuICB0eXBlIFNvcnRQYXJhbXMsXG59IGZyb20gJy4vcmVzcG9uc2UuanMnO1xuZXhwb3J0IHtcbiAgZ2V0UGFyYW0sXG4gIHBhcnNlUXVlcnlJbnQsXG4gIHBhcnNlUXVlcnlTdHJpbmcsXG4gIHBhcnNlT3B0aW9uYWxEYXRlLFxuICBwYXJzZVBvc2l0aXZlSW50LFxuICBwYXJzZVF1ZXJ5SW50Q2xhbXBlZCxcbiAgcGFyc2VQYWdlLFxuICB2YWxpZGF0ZUJ1bGtBcnJheSxcbiAgcGFyc2VSZXBvcnRJbnRlcnZhbCxcbiAgcGFyc2VSZXBvcnRUaW1lem9uZSxcbiAgcGFyc2VXZWVrU3RhcnQsXG4gIGlzVmFsaWRUaW1lem9uZSxcbiAgcGFyc2VEYXRlUmFuZ2UsXG4gIHR5cGUgUGFnZSxcbiAgdHlwZSBSZXBvcnRJbnRlcnZhbCxcbiAgdHlwZSBXZWVrU3RhcnQsXG4gIFJFUE9SVF9JTlRFUlZBTFMsXG4gIFdFRUtfU1RBUlRTLFxufSBmcm9tICcuL3BhcmFtcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2hlYWRlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pZGVudGl0eS5qcyc7XG4vLyBKV0sgcHJpbWl0aXZlcy4gUGxhdGZvcm0gSVMgdGhlIHRva2VuIHNpZ25lciwgc28gaXQgbGVnaXRpbWF0ZWx5IG5lZWRzXG4vLyBgcHVibGljSndrRnJvbWAgKyBgZGVyVG9Kb3NlU2lnbmF0dXJlYCBmcm9tIHRoZSBwYWNrYWdlIHN1cmZhY2UuXG4vLyBgandrVGh1bWJwcmludGAgYW5kIGBwdWJsaWNLZXlGcm9tSndrYCBhcmUga2lkLWRlcml2YXRpb24vdmVyaWZpY2F0aW9uXG4vLyBwbHVtYmluZyB1c2VkIG9ubHkgaW5zaWRlIGFwaS1jb3JlIOKAlCBkZWVwLWltcG9ydCB0aGVtIGZyb20gdGhlcmUgaW5zdGVhZCBvZlxuLy8gbGVha2luZyB0aGVtIHRvIGV2ZXJ5IHNlcnZpY2UuXG5leHBvcnQge1xuICBVU0VSX1RPS0VOX0FMR09SSVRITSxcbiAgVVNFUl9UT0tFTl9DVVJWRSxcbiAgSldLU19QQVRILFxuICBkZWNvZGVKd3RIZWFkZXIsXG4gIGlzSndrc0RvY3VtZW50LFxuICBwdWJsaWNKd2tGcm9tLFxuICBkZXJUb0pvc2VTaWduYXR1cmUsXG4gIGVuY29kZUp3c1NpZ25pbmdJbnB1dCxcbiAgY29tcGFjdEp3cyxcbn0gZnJvbSAnLi9qd2suanMnO1xuZXhwb3J0IHR5cGUge1xuICBQdWJsaWNKd2ssXG4gIEp3a3NEb2N1bWVudCxcbn0gZnJvbSAnLi9qd2suanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vYmplY3QuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlLmpzJztcbmV4cG9ydCB7XG4gIHJlc2V0U3VwcG9ydEFsaWFzZXNDYWNoZSxcbiAgZ2V0UHJpbWFyeVN1cHBvcnRBbGlhcyxcbiAgZ2V0QWxsU3VwcG9ydEFsaWFzZXMsXG4gIHJlc29sdmVSZWNpcGllbnRBbGlhcyxcbiAgREVGQVVMVF9TVVBQT1JUX0FMSUFTLFxufSBmcm9tICcuL2FsaWFzLXJlc29sdmVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uY3VycmVuY3kuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hdWRpdC5qcyc7XG5leHBvcnQge1xuICBnZXREZWZhdWx0S2V5UHJvdmlkZXIsXG4gIHJlc2V0RGVmYXVsdEtleVByb3ZpZGVyLFxuICBzZXRLZXlQcm92aWRlcixcbiAgZW5jcnlwdFNlY3JldCxcbiAgZGVjcnlwdFNlY3JldCxcbiAgaXNFbmNyeXB0ZWRCbG9iLFxuICB0eXBlIEVuY3J5cHRlZEJsb2IsXG4gIHR5cGUgS2V5UHJvdmlkZXIsXG4gIEVudktleVByb3ZpZGVyLFxuICBLbXNLZXlQcm92aWRlcixcbiAgY3JlYXRlQmFzZUtleVByb3ZpZGVyLFxuICBpbml0U2VjcmV0RW5jcnlwdGlvbixcbiAgdHlwZSBQZXJPcmdLbXNDb25maWcsXG4gIHR5cGUgUGVyT3JnS21zUmVzb2x2ZXIsXG4gIFBlck9yZ0ttc0tleVByb3ZpZGVyLFxufSBmcm9tICcuL3NlY3JldC1lbmNyeXB0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VjcmV0LXJvdGF0aW9uLmpzJztcbmV4cG9ydCB7XG4gIHNldENvdW50ZXJFbWl0dGVyLFxuICByZXNldENvdW50ZXJFbWl0dGVyLFxuICBlbWl0Q291bnRlcixcbn0gZnJvbSAnLi9tZXRyaWMtZW1pdHRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2F3cy1zY3J1Yi5qcyc7XG5leHBvcnQge1xuICBleHRyYWN0UHJlZGljYXRlLFxuICBTUERYX1BSRURJQ0FURV9UWVBFLFxufSBmcm9tICcuL2Rzc2UuanMnO1xuZXhwb3J0IHtcbiAgbWFza0xpbmUsXG4gIGxvb2tzU2Vuc2l0aXZlLFxuICBSRURBQ1RFRCxcbiAgU0VOU0lUSVZFX1ZBTFVFX1BBVFRFUk5TLFxufSBmcm9tICcuL3NlbnNpdGl2ZS1wYXR0ZXJucy5qcyc7XG5leHBvcnQge1xuICBpc1ByaXZhdGVBZGRyZXNzLFxuICBhc3NlcnRTYWZlVXJsLFxuICBzYWZlRmV0Y2gsXG4gIHR5cGUgU2FmZUZldGNoUmVzcG9uc2UsXG59IGZyb20gJy4vc3NyZi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vudi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2UtcmVnaXN0cnkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXRlbnRpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb21wbGlhbmNlLWF0dHJpYnV0ZXMuanMnO1xuZXhwb3J0IHtcbiAgbGVhZGluZ1plcm9CaXRzLFxuICBwcm9vZk9mV29ya0hhc2gsXG4gIGNoYWxsZW5nZUtleSxcbiAgY2xhbXBEaWZmaWN1bHR5LFxuICBjcmVhdGVQcm9vZk9mV29ya0NoYWxsZW5nZSxcbiAgcGFyc2VQcm9vZk9mV29ya0NoYWxsZW5nZSxcbiAgdmVyaWZ5UHJvb2ZPZldvcmssXG4gIHNvbHZlUHJvb2ZPZldvcmssXG4gIFBPV19ERUZBVUxUX0RJRkZJQ1VMVFksXG4gIFBPV19NQVhfRElGRklDVUxUWSxcbiAgUE9XX0NIQUxMRU5HRV9UVExfTVMsXG4gIHR5cGUgUHJvb2ZPZldvcmtDaGFsbGVuZ2UsXG4gIHR5cGUgUHJvb2ZPZldvcmtTb2x1dGlvbixcbn0gZnJvbSAnLi9wcm9vZi1vZi13b3JrLmpzJztcbiJdfQ==
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixZQUFZLEVBRVosTUFBTSxFQUNOLE9BQU8sR0FDUixNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGNBQWMsRUFFZCxjQUFjLEVBQ2QsWUFBWSxFQUNaLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIscUJBQXFCLEdBR3RCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxRQUFRLEVBQ1IsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGVBQWUsRUFDZixjQUFjLEVBSWQsZ0JBQWdCLEVBQ2hCLFdBQVcsR0FDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5Qix5RUFBeUU7QUFDekUsbUVBQW1FO0FBQ25FLHlFQUF5RTtBQUN6RSw4RUFBOEU7QUFDOUUsaUNBQWlDO0FBQ2pDLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsY0FBYyxFQUNkLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIscUJBQXFCLEVBQ3JCLFVBQVUsR0FDWCxNQUFNLFVBQVUsQ0FBQztBQUtsQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFdBQVcsQ0FBQztBQUMxQixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3JCLHFCQUFxQixHQUN0QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxZQUFZLENBQUM7QUFDM0IsT0FBTyxFQUNMLHFCQUFxQixFQUNyQix1QkFBdUIsRUFDdkIsY0FBYyxFQUNkLGFBQWEsRUFDYixhQUFhLEVBQ2IsZUFBZSxFQUdmLGNBQWMsRUFDZCxjQUFjLEVBQ2QscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUdwQixvQkFBb0IsR0FDckIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFdBQVcsR0FDWixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixtQkFBbUIsR0FDcEIsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUNMLFFBQVEsRUFDUixjQUFjLEVBQ2QsUUFBUSxFQUNSLHdCQUF3QixHQUN6QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLFNBQVMsR0FFVixNQUFNLFdBQVcsQ0FBQztBQUNuQixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixZQUFZLEVBQ1osZUFBZSxFQUNmLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixHQUdyQixNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmV4cG9ydCB7XG4gIHNldExvZ0NvbnRleHRQcm92aWRlcixcbiAgcmVkYWN0U2Vuc2l0aXZlLFxuICBjcmVhdGVMb2dnZXIsXG4gIHR5cGUgTG9nZ2VyLFxuICBsb2dnZXIsXG4gIGRlZmF1bHQsXG59IGZyb20gJy4vbG9nZ2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXBpLWtleS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NhZmUtcmVxdWlyZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlY3VyZS1jb21wYXJlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY3Jhc2gtaGFuZGxlcnMuanMnO1xuZXhwb3J0IHtcbiAgc2VuZFN1Y2Nlc3MsXG4gIHNlbmRFcnJvcixcbiAgc2VuZFF1b3RhRXhjZWVkZWQsXG4gIHNlbmRQYWdpbmF0ZWROZXN0ZWQsXG4gIHBhZ2luYXRpb25NZXRhLFxuICB0eXBlIFBhZ2luYXRpb25NZXRhLFxuICBleHRyYWN0RGJFcnJvcixcbiAgZXJyb3JNZXNzYWdlLFxuICBzZW5kQmFkUmVxdWVzdCxcbiAgc2VuZEludGVybmFsRXJyb3IsXG4gIHBhcnNlUGFnaW5hdGlvblBhcmFtcyxcbiAgdHlwZSBQYWdpbmF0aW9uUGFyYW1zLFxuICB0eXBlIFNvcnRQYXJhbXMsXG59IGZyb20gJy4vcmVzcG9uc2UuanMnO1xuZXhwb3J0IHtcbiAgZ2V0UGFyYW0sXG4gIHBhcnNlUXVlcnlJbnQsXG4gIHBhcnNlUXVlcnlTdHJpbmcsXG4gIHBhcnNlT3B0aW9uYWxEYXRlLFxuICBwYXJzZVBvc2l0aXZlSW50LFxuICBwYXJzZVF1ZXJ5SW50Q2xhbXBlZCxcbiAgcGFyc2VQYWdlLFxuICB2YWxpZGF0ZUJ1bGtBcnJheSxcbiAgcGFyc2VSZXBvcnRJbnRlcnZhbCxcbiAgcGFyc2VSZXBvcnRUaW1lem9uZSxcbiAgcGFyc2VXZWVrU3RhcnQsXG4gIGlzVmFsaWRUaW1lem9uZSxcbiAgcGFyc2VEYXRlUmFuZ2UsXG4gIHR5cGUgUGFnZSxcbiAgdHlwZSBSZXBvcnRJbnRlcnZhbCxcbiAgdHlwZSBXZWVrU3RhcnQsXG4gIFJFUE9SVF9JTlRFUlZBTFMsXG4gIFdFRUtfU1RBUlRTLFxufSBmcm9tICcuL3BhcmFtcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2hlYWRlcnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9pZGVudGl0eS5qcyc7XG4vLyBKV0sgcHJpbWl0aXZlcy4gUGxhdGZvcm0gSVMgdGhlIHRva2VuIHNpZ25lciwgc28gaXQgbGVnaXRpbWF0ZWx5IG5lZWRzXG4vLyBgcHVibGljSndrRnJvbWAgKyBgZGVyVG9Kb3NlU2lnbmF0dXJlYCBmcm9tIHRoZSBwYWNrYWdlIHN1cmZhY2UuXG4vLyBgandrVGh1bWJwcmludGAgYW5kIGBwdWJsaWNLZXlGcm9tSndrYCBhcmUga2lkLWRlcml2YXRpb24vdmVyaWZpY2F0aW9uXG4vLyBwbHVtYmluZyB1c2VkIG9ubHkgaW5zaWRlIGFwaS1jb3JlIOKAlCBkZWVwLWltcG9ydCB0aGVtIGZyb20gdGhlcmUgaW5zdGVhZCBvZlxuLy8gbGVha2luZyB0aGVtIHRvIGV2ZXJ5IHNlcnZpY2UuXG5leHBvcnQge1xuICBVU0VSX1RPS0VOX0FMR09SSVRITSxcbiAgVVNFUl9UT0tFTl9DVVJWRSxcbiAgSldLU19QQVRILFxuICBkZWNvZGVKd3RIZWFkZXIsXG4gIGlzSndrc0RvY3VtZW50LFxuICBwdWJsaWNKd2tGcm9tLFxuICBkZXJUb0pvc2VTaWduYXR1cmUsXG4gIGVuY29kZUp3c1NpZ25pbmdJbnB1dCxcbiAgY29tcGFjdEp3cyxcbn0gZnJvbSAnLi9qd2suanMnO1xuZXhwb3J0IHR5cGUge1xuICBQdWJsaWNKd2ssXG4gIEp3a3NEb2N1bWVudCxcbn0gZnJvbSAnLi9qd2suanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vYmplY3QuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlLmpzJztcbmV4cG9ydCB7XG4gIHJlc2V0U3VwcG9ydEFsaWFzZXNDYWNoZSxcbiAgZ2V0UHJpbWFyeVN1cHBvcnRBbGlhcyxcbiAgZ2V0QWxsU3VwcG9ydEFsaWFzZXMsXG4gIHJlc29sdmVSZWNpcGllbnRBbGlhcyxcbiAgREVGQVVMVF9TVVBQT1JUX0FMSUFTLFxufSBmcm9tICcuL2FsaWFzLXJlc29sdmVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uY3VycmVuY3kuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hdWRpdC5qcyc7XG5leHBvcnQge1xuICBnZXREZWZhdWx0S2V5UHJvdmlkZXIsXG4gIHJlc2V0RGVmYXVsdEtleVByb3ZpZGVyLFxuICBzZXRLZXlQcm92aWRlcixcbiAgZW5jcnlwdFNlY3JldCxcbiAgZGVjcnlwdFNlY3JldCxcbiAgaXNFbmNyeXB0ZWRCbG9iLFxuICB0eXBlIEVuY3J5cHRlZEJsb2IsXG4gIHR5cGUgS2V5UHJvdmlkZXIsXG4gIEVudktleVByb3ZpZGVyLFxuICBLbXNLZXlQcm92aWRlcixcbiAgY3JlYXRlQmFzZUtleVByb3ZpZGVyLFxuICBpbml0U2VjcmV0RW5jcnlwdGlvbixcbiAgdHlwZSBQZXJPcmdLbXNDb25maWcsXG4gIHR5cGUgUGVyT3JnS21zUmVzb2x2ZXIsXG4gIFBlck9yZ0ttc0tleVByb3ZpZGVyLFxufSBmcm9tICcuL3NlY3JldC1lbmNyeXB0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VjcmV0LXJvdGF0aW9uLmpzJztcbmV4cG9ydCB7XG4gIHNldENvdW50ZXJFbWl0dGVyLFxuICByZXNldENvdW50ZXJFbWl0dGVyLFxuICBzZXRHYXVnZUVtaXR0ZXIsXG4gIHJlc2V0R2F1Z2VFbWl0dGVyLFxuICBlbWl0R2F1Z2UsXG4gIGVtaXRDb3VudGVyLFxufSBmcm9tICcuL21ldHJpYy1lbWl0dGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYXdzLXNjcnViLmpzJztcbmV4cG9ydCB7XG4gIGV4dHJhY3RQcmVkaWNhdGUsXG4gIFNQRFhfUFJFRElDQVRFX1RZUEUsXG59IGZyb20gJy4vZHNzZS5qcyc7XG5leHBvcnQge1xuICBtYXNrTGluZSxcbiAgbG9va3NTZW5zaXRpdmUsXG4gIFJFREFDVEVELFxuICBTRU5TSVRJVkVfVkFMVUVfUEFUVEVSTlMsXG59IGZyb20gJy4vc2Vuc2l0aXZlLXBhdHRlcm5zLmpzJztcbmV4cG9ydCB7XG4gIGlzUHJpdmF0ZUFkZHJlc3MsXG4gIGFzc2VydFNhZmVVcmwsXG4gIHNhZmVGZXRjaCxcbiAgdHlwZSBTYWZlRmV0Y2hSZXNwb25zZSxcbn0gZnJvbSAnLi9zc3JmLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZW52LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZS1yZWdpc3RyeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3JldGVudGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBsaWFuY2UtYXR0cmlidXRlcy5qcyc7XG5leHBvcnQge1xuICBsZWFkaW5nWmVyb0JpdHMsXG4gIHByb29mT2ZXb3JrSGFzaCxcbiAgY2hhbGxlbmdlS2V5LFxuICBjbGFtcERpZmZpY3VsdHksXG4gIGNyZWF0ZVByb29mT2ZXb3JrQ2hhbGxlbmdlLFxuICBwYXJzZVByb29mT2ZXb3JrQ2hhbGxlbmdlLFxuICB2ZXJpZnlQcm9vZk9mV29yayxcbiAgc29sdmVQcm9vZk9mV29yayxcbiAgUE9XX0RFRkFVTFRfRElGRklDVUxUWSxcbiAgUE9XX01BWF9ESUZGSUNVTFRZLFxuICBQT1dfQ0hBTExFTkdFX1RUTF9NUyxcbiAgdHlwZSBQcm9vZk9mV29ya0NoYWxsZW5nZSxcbiAgdHlwZSBQcm9vZk9mV29ya1NvbHV0aW9uLFxufSBmcm9tICcuL3Byb29mLW9mLXdvcmsuanMnO1xuIl19
@@ -34,3 +34,22 @@ export declare function resetCounterEmitter(): void;
34
34
  * emitter is wired, this is a no-op.
35
35
  */
36
36
  export declare function emitCounter(name: string, labels?: Record<string, string>, value?: number): void;
37
+ /**
38
+ * Callable signature mirroring api-server's `setGauge`.
39
+ *
40
+ * A gauge rather than a counter because the things that need this seam are
41
+ * SAMPLED point-in-time values, not events: replica replay lag, whether a
42
+ * fallback circuit is currently open. Emitting those as counters would make
43
+ * every query over them wrong — `rate()` of a lag reading is meaningless.
44
+ */
45
+ export type GaugeEmitter = (name: string, labels: Record<string, string>, value: number) => void;
46
+ /** Register the real gauge implementation. Idempotent; the last call wins. */
47
+ export declare function setGaugeEmitter(fn: GaugeEmitter): void;
48
+ /** Reset to the no-op emitter. For tests that want to clear any wiring. */
49
+ export declare function resetGaugeEmitter(): void;
50
+ /**
51
+ * Set a gauge. Safe to call from any api-core or pipeline-data module — with no
52
+ * emitter wired this is a no-op, which is the state in tests, CLIs and any
53
+ * process that does not serve /metrics.
54
+ */
55
+ export declare function emitGauge(name: string, labels?: Record<string, string>, value?: number): void;
@@ -29,4 +29,29 @@ export function emitCounter(name, labels = {}, value = 1) {
29
29
  // emitter shouldn't be able to take down quota checks (or anything else).
30
30
  }
31
31
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljLWVtaXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvbWV0cmljLWVtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQTRCdEMsSUFBSSxPQUFPLEdBQW1CLEdBQUcsRUFBRTtJQUNqQyx1RUFBdUU7SUFDdkUsd0VBQXdFO0lBQ3hFLDBFQUEwRTtBQUM1RSxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsRUFBa0I7SUFDbEQsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNmLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0FBQzVCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVksRUFBRSxNQUFNLEdBQTJCLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUN0RixJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1Asa0VBQWtFO1FBQ2xFLDBFQUEwRTtJQUM1RSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBsdWdnYWJsZSBjb3VudGVyLWVtaXQgc2hpbS5cbiAqXG4gKiBCYWNrZ3JvdW5kOiBzZXZlcmFsIGFwaS1jb3JlIHByaW1pdGl2ZXMgKHF1b3RhIGNsaWVudCBmYWlsLW9wZW4sIGZ1dHVyZVxuICogc2VjdXJpdHktZXZlbnQgaG9va3MpIHdhbnQgdG8gcmVjb3JkIFByb21ldGhldXMgY291bnRlcnMgd2hlbiBzb21ldGhpbmdcbiAqIG5vdGFibGUgaGFwcGVucy4gVGhlIGFjdHVhbCBgcHJvbS1jbGllbnRgIENvdW50ZXIgcmVnaXN0cmF0aW9uIGxpdmVzIGluXG4gKiBhcGktc2VydmVyLCBhbmQgYXBpLWNvcmUgbXVzdCBub3QgZGVwZW5kIG9uIGFwaS1zZXJ2ZXIgKGFwaS1jb3JlIGlzXG4gKiB1cHN0cmVhbSDigJQgRXhwcmVzcyBpbmZyYXN0cnVjdHVyZSBpbXBvcnRzIGl0LCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQpLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIHRoZSBzZWFtLiBhcGktY29yZSBjb2RlIGNhbGxzIGBlbWl0Q291bnRlcihuYW1lLCBsYWJlbHMpYDtcbiAqIGJ5IGRlZmF1bHQgaXQncyBhIG5vLW9wICh0ZXN0cywgQ0xJcywgZW52aXJvbm1lbnRzIHdpdGhvdXQgUHJvbWV0aGV1cykuXG4gKiBhcGktc2VydmVyJ3MgYXBwLWZhY3RvcnkgY2FsbHMgYHNldENvdW50ZXJFbWl0dGVyKGluY0NvdW50ZXIpYCBhdCBzdGFydHVwXG4gKiBzbyBwcm9kdWN0aW9uIHByb2Nlc3NlcyBzdGFydCBpbmNyZW1lbnRpbmcgdGhlIHJlYWwgY291bnRlciBvbiB0aGVcbiAqIHNoYXJlZCByZWdpc3RyeS5cbiAqXG4gKiBXaHkgYSBjYWxsYmFjayBpbnN0ZWFkIG9mIGFuIGludGVyZmFjZSByZWdpc3RlcmVkIHZpYSBEST8gVGhlIGNhbGwgc2l0ZXNcbiAqIChxdW90YSBmYWlsLW9wZW4sIGV0Yy4pIHNpdCBpbiBkZWVwIGhlbHBlcnMgdGhhdCBuZXZlciB0b3VjaCB0aGUgRXhwcmVzc1xuICogY29udGV4dCwgc28gcmVxdWlyaW5nIGEgYG1ldHJpY3NgIHBhcmFtZXRlciBvbiBldmVyeSBjYWxsIHdvdWxkIG1lYW5cbiAqIHRocmVhZGluZyBpdCB0aHJvdWdoIGRvemVucyBvZiB1bnJlbGF0ZWQgZnVuY3Rpb25zLiBBIHByb2Nlc3Mtc2luZ2xldG9uXG4gKiBjYWxsYmFjayBpcyB0aGUgc2ltcGxlc3Qgbm9uLWludmFzaXZlIG9wdGlvbjsgdGhlIHRyYWRlLW9mZiBpcyBvbmVcbiAqIHNoYXJlZCBnbG9iYWwsIHdoaWNoIGlzIGFjY2VwdGFibGUgZm9yIGEgc2luayB0aGF0J3Mgc3RyaWN0bHkgd3JpdGUtb25seS5cbiAqL1xuXG4vKiogQ2FsbGFibGUgc2lnbmF0dXJlIG1pcnJvcmluZyBhcGktc2VydmVyJ3MgYGluY0NvdW50ZXJgLiAqL1xuZXhwb3J0IHR5cGUgQ291bnRlckVtaXR0ZXIgPSAobmFtZTogc3RyaW5nLCBsYWJlbHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCB2YWx1ZT86IG51bWJlcikgPT4gdm9pZDtcblxubGV0IGVtaXR0ZXI6IENvdW50ZXJFbWl0dGVyID0gKCkgPT4ge1xuICAvLyBEZWZhdWx0IG5vLW9wLiBhcGktc2VydmVyIHdpcmVzIHRoaXMgdG8gYSByZWFsIFByb21ldGhldXMgY291bnRlciBhdFxuICAvLyBzdGFydHVwOyB1bnRpbCB0aGVuLCBjYWxscyBmcm9tIGFwaS1jb3JlIGhlbHBlcnMgYXJlIHNpbGVudGx5IGRyb3BwZWRcbiAgLy8gKHdoaWNoIGlzIHdoYXQgd2Ugd2FudCBpbiB0ZXN0cyBhbmQgQ0xJcyB0aGF0IGRvbid0IHJ1biBhIFByb20gc2VydmVyKS5cbn07XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIHJlYWwgY291bnRlciBpbXBsZW1lbnRhdGlvbi4gSWRlbXBvdGVudCDigJQgdGhlIGxhc3QgY2FsbCB3aW5zO1xuICogdHlwaWNhbGx5IGNhbGxlZCBvbmNlIGF0IHNlcnZpY2Ugc3RhcnR1cCBmcm9tIGFwaS1zZXJ2ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb3VudGVyRW1pdHRlcihmbjogQ291bnRlckVtaXR0ZXIpOiB2b2lkIHtcbiAgZW1pdHRlciA9IGZuO1xufVxuXG4vKiogUmVzZXQgdG8gdGhlIG5vLW9wIGVtaXR0ZXIuIEZvciB0ZXN0cyB0aGF0IHdhbnQgdG8gY2xlYXIgYW55IHdpcmluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldENvdW50ZXJFbWl0dGVyKCk6IHZvaWQge1xuICBlbWl0dGVyID0gKCkgPT4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGNvdW50ZXIgZXZlbnQuIFNhZmUgdG8gY2FsbCBmcm9tIGFueSBhcGktY29yZSBtb2R1bGUg4oCUIGlmIG5vXG4gKiBlbWl0dGVyIGlzIHdpcmVkLCB0aGlzIGlzIGEgbm8tb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0Q291bnRlcihuYW1lOiBzdHJpbmcsIGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LCB2YWx1ZSA9IDEpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBlbWl0dGVyKG5hbWUsIGxhYmVscywgdmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBOZXZlciBsZXQgbWV0cmljIGVtaXNzaW9uIGJyZWFrIHRoZSBjYWxsaW5nIHBhdGguIEEgbWlzYmVoYXZpbmdcbiAgICAvLyBlbWl0dGVyIHNob3VsZG4ndCBiZSBhYmxlIHRvIHRha2UgZG93biBxdW90YSBjaGVja3MgKG9yIGFueXRoaW5nIGVsc2UpLlxuICB9XG59XG4iXX0=
32
+ let gaugeEmitter = () => {
33
+ // Default no-op, same reasoning as the counter emitter above.
34
+ };
35
+ /** Register the real gauge implementation. Idempotent; the last call wins. */
36
+ export function setGaugeEmitter(fn) {
37
+ gaugeEmitter = fn;
38
+ }
39
+ /** Reset to the no-op emitter. For tests that want to clear any wiring. */
40
+ export function resetGaugeEmitter() {
41
+ gaugeEmitter = () => undefined;
42
+ }
43
+ /**
44
+ * Set a gauge. Safe to call from any api-core or pipeline-data module — with no
45
+ * emitter wired this is a no-op, which is the state in tests, CLIs and any
46
+ * process that does not serve /metrics.
47
+ */
48
+ export function emitGauge(name, labels = {}, value = 0) {
49
+ try {
50
+ gaugeEmitter(name, labels, value);
51
+ }
52
+ catch {
53
+ // Never let metric emission break the calling path. For the read-routing
54
+ // caller in particular this must not be able to fail a database read.
55
+ }
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljLWVtaXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvbWV0cmljLWVtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQTRCdEMsSUFBSSxPQUFPLEdBQW1CLEdBQUcsRUFBRTtJQUNqQyx1RUFBdUU7SUFDdkUsd0VBQXdFO0lBQ3hFLDBFQUEwRTtBQUM1RSxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsRUFBa0I7SUFDbEQsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNmLENBQUM7QUFFRCwyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0FBQzVCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVksRUFBRSxNQUFNLEdBQTJCLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUN0RixJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1Asa0VBQWtFO1FBQ2xFLDBFQUEwRTtJQUM1RSxDQUFDO0FBQ0gsQ0FBQztBQVlELElBQUksWUFBWSxHQUFpQixHQUFHLEVBQUU7SUFDcEMsOERBQThEO0FBQ2hFLENBQUMsQ0FBQztBQUVGLDhFQUE4RTtBQUM5RSxNQUFNLFVBQVUsZUFBZSxDQUFDLEVBQWdCO0lBQzlDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVELDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7QUFDakMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLElBQVksRUFBRSxNQUFNLEdBQTJCLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUNwRixJQUFJLENBQUM7UUFDSCxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AseUVBQXlFO1FBQ3pFLHNFQUFzRTtJQUN4RSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBsdWdnYWJsZSBjb3VudGVyLWVtaXQgc2hpbS5cbiAqXG4gKiBCYWNrZ3JvdW5kOiBzZXZlcmFsIGFwaS1jb3JlIHByaW1pdGl2ZXMgKHF1b3RhIGNsaWVudCBmYWlsLW9wZW4sIGZ1dHVyZVxuICogc2VjdXJpdHktZXZlbnQgaG9va3MpIHdhbnQgdG8gcmVjb3JkIFByb21ldGhldXMgY291bnRlcnMgd2hlbiBzb21ldGhpbmdcbiAqIG5vdGFibGUgaGFwcGVucy4gVGhlIGFjdHVhbCBgcHJvbS1jbGllbnRgIENvdW50ZXIgcmVnaXN0cmF0aW9uIGxpdmVzIGluXG4gKiBhcGktc2VydmVyLCBhbmQgYXBpLWNvcmUgbXVzdCBub3QgZGVwZW5kIG9uIGFwaS1zZXJ2ZXIgKGFwaS1jb3JlIGlzXG4gKiB1cHN0cmVhbSDigJQgRXhwcmVzcyBpbmZyYXN0cnVjdHVyZSBpbXBvcnRzIGl0LCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQpLlxuICpcbiAqIFRoaXMgbW9kdWxlIGlzIHRoZSBzZWFtLiBhcGktY29yZSBjb2RlIGNhbGxzIGBlbWl0Q291bnRlcihuYW1lLCBsYWJlbHMpYDtcbiAqIGJ5IGRlZmF1bHQgaXQncyBhIG5vLW9wICh0ZXN0cywgQ0xJcywgZW52aXJvbm1lbnRzIHdpdGhvdXQgUHJvbWV0aGV1cykuXG4gKiBhcGktc2VydmVyJ3MgYXBwLWZhY3RvcnkgY2FsbHMgYHNldENvdW50ZXJFbWl0dGVyKGluY0NvdW50ZXIpYCBhdCBzdGFydHVwXG4gKiBzbyBwcm9kdWN0aW9uIHByb2Nlc3NlcyBzdGFydCBpbmNyZW1lbnRpbmcgdGhlIHJlYWwgY291bnRlciBvbiB0aGVcbiAqIHNoYXJlZCByZWdpc3RyeS5cbiAqXG4gKiBXaHkgYSBjYWxsYmFjayBpbnN0ZWFkIG9mIGFuIGludGVyZmFjZSByZWdpc3RlcmVkIHZpYSBEST8gVGhlIGNhbGwgc2l0ZXNcbiAqIChxdW90YSBmYWlsLW9wZW4sIGV0Yy4pIHNpdCBpbiBkZWVwIGhlbHBlcnMgdGhhdCBuZXZlciB0b3VjaCB0aGUgRXhwcmVzc1xuICogY29udGV4dCwgc28gcmVxdWlyaW5nIGEgYG1ldHJpY3NgIHBhcmFtZXRlciBvbiBldmVyeSBjYWxsIHdvdWxkIG1lYW5cbiAqIHRocmVhZGluZyBpdCB0aHJvdWdoIGRvemVucyBvZiB1bnJlbGF0ZWQgZnVuY3Rpb25zLiBBIHByb2Nlc3Mtc2luZ2xldG9uXG4gKiBjYWxsYmFjayBpcyB0aGUgc2ltcGxlc3Qgbm9uLWludmFzaXZlIG9wdGlvbjsgdGhlIHRyYWRlLW9mZiBpcyBvbmVcbiAqIHNoYXJlZCBnbG9iYWwsIHdoaWNoIGlzIGFjY2VwdGFibGUgZm9yIGEgc2luayB0aGF0J3Mgc3RyaWN0bHkgd3JpdGUtb25seS5cbiAqL1xuXG4vKiogQ2FsbGFibGUgc2lnbmF0dXJlIG1pcnJvcmluZyBhcGktc2VydmVyJ3MgYGluY0NvdW50ZXJgLiAqL1xuZXhwb3J0IHR5cGUgQ291bnRlckVtaXR0ZXIgPSAobmFtZTogc3RyaW5nLCBsYWJlbHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCB2YWx1ZT86IG51bWJlcikgPT4gdm9pZDtcblxubGV0IGVtaXR0ZXI6IENvdW50ZXJFbWl0dGVyID0gKCkgPT4ge1xuICAvLyBEZWZhdWx0IG5vLW9wLiBhcGktc2VydmVyIHdpcmVzIHRoaXMgdG8gYSByZWFsIFByb21ldGhldXMgY291bnRlciBhdFxuICAvLyBzdGFydHVwOyB1bnRpbCB0aGVuLCBjYWxscyBmcm9tIGFwaS1jb3JlIGhlbHBlcnMgYXJlIHNpbGVudGx5IGRyb3BwZWRcbiAgLy8gKHdoaWNoIGlzIHdoYXQgd2Ugd2FudCBpbiB0ZXN0cyBhbmQgQ0xJcyB0aGF0IGRvbid0IHJ1biBhIFByb20gc2VydmVyKS5cbn07XG5cbi8qKlxuICogUmVnaXN0ZXIgdGhlIHJlYWwgY291bnRlciBpbXBsZW1lbnRhdGlvbi4gSWRlbXBvdGVudCDigJQgdGhlIGxhc3QgY2FsbCB3aW5zO1xuICogdHlwaWNhbGx5IGNhbGxlZCBvbmNlIGF0IHNlcnZpY2Ugc3RhcnR1cCBmcm9tIGFwaS1zZXJ2ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb3VudGVyRW1pdHRlcihmbjogQ291bnRlckVtaXR0ZXIpOiB2b2lkIHtcbiAgZW1pdHRlciA9IGZuO1xufVxuXG4vKiogUmVzZXQgdG8gdGhlIG5vLW9wIGVtaXR0ZXIuIEZvciB0ZXN0cyB0aGF0IHdhbnQgdG8gY2xlYXIgYW55IHdpcmluZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldENvdW50ZXJFbWl0dGVyKCk6IHZvaWQge1xuICBlbWl0dGVyID0gKCkgPT4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlY29yZCBhIGNvdW50ZXIgZXZlbnQuIFNhZmUgdG8gY2FsbCBmcm9tIGFueSBhcGktY29yZSBtb2R1bGUg4oCUIGlmIG5vXG4gKiBlbWl0dGVyIGlzIHdpcmVkLCB0aGlzIGlzIGEgbm8tb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0Q291bnRlcihuYW1lOiBzdHJpbmcsIGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LCB2YWx1ZSA9IDEpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBlbWl0dGVyKG5hbWUsIGxhYmVscywgdmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBOZXZlciBsZXQgbWV0cmljIGVtaXNzaW9uIGJyZWFrIHRoZSBjYWxsaW5nIHBhdGguIEEgbWlzYmVoYXZpbmdcbiAgICAvLyBlbWl0dGVyIHNob3VsZG4ndCBiZSBhYmxlIHRvIHRha2UgZG93biBxdW90YSBjaGVja3MgKG9yIGFueXRoaW5nIGVsc2UpLlxuICB9XG59XG5cbi8qKlxuICogQ2FsbGFibGUgc2lnbmF0dXJlIG1pcnJvcmluZyBhcGktc2VydmVyJ3MgYHNldEdhdWdlYC5cbiAqXG4gKiBBIGdhdWdlIHJhdGhlciB0aGFuIGEgY291bnRlciBiZWNhdXNlIHRoZSB0aGluZ3MgdGhhdCBuZWVkIHRoaXMgc2VhbSBhcmVcbiAqIFNBTVBMRUQgcG9pbnQtaW4tdGltZSB2YWx1ZXMsIG5vdCBldmVudHM6IHJlcGxpY2EgcmVwbGF5IGxhZywgd2hldGhlciBhXG4gKiBmYWxsYmFjayBjaXJjdWl0IGlzIGN1cnJlbnRseSBvcGVuLiBFbWl0dGluZyB0aG9zZSBhcyBjb3VudGVycyB3b3VsZCBtYWtlXG4gKiBldmVyeSBxdWVyeSBvdmVyIHRoZW0gd3Jvbmcg4oCUIGByYXRlKClgIG9mIGEgbGFnIHJlYWRpbmcgaXMgbWVhbmluZ2xlc3MuXG4gKi9cbmV4cG9ydCB0eXBlIEdhdWdlRW1pdHRlciA9IChuYW1lOiBzdHJpbmcsIGxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgdmFsdWU6IG51bWJlcikgPT4gdm9pZDtcblxubGV0IGdhdWdlRW1pdHRlcjogR2F1Z2VFbWl0dGVyID0gKCkgPT4ge1xuICAvLyBEZWZhdWx0IG5vLW9wLCBzYW1lIHJlYXNvbmluZyBhcyB0aGUgY291bnRlciBlbWl0dGVyIGFib3ZlLlxufTtcblxuLyoqIFJlZ2lzdGVyIHRoZSByZWFsIGdhdWdlIGltcGxlbWVudGF0aW9uLiBJZGVtcG90ZW50OyB0aGUgbGFzdCBjYWxsIHdpbnMuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0R2F1Z2VFbWl0dGVyKGZuOiBHYXVnZUVtaXR0ZXIpOiB2b2lkIHtcbiAgZ2F1Z2VFbWl0dGVyID0gZm47XG59XG5cbi8qKiBSZXNldCB0byB0aGUgbm8tb3AgZW1pdHRlci4gRm9yIHRlc3RzIHRoYXQgd2FudCB0byBjbGVhciBhbnkgd2lyaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0R2F1Z2VFbWl0dGVyKCk6IHZvaWQge1xuICBnYXVnZUVtaXR0ZXIgPSAoKSA9PiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU2V0IGEgZ2F1Z2UuIFNhZmUgdG8gY2FsbCBmcm9tIGFueSBhcGktY29yZSBvciBwaXBlbGluZS1kYXRhIG1vZHVsZSDigJQgd2l0aCBub1xuICogZW1pdHRlciB3aXJlZCB0aGlzIGlzIGEgbm8tb3AsIHdoaWNoIGlzIHRoZSBzdGF0ZSBpbiB0ZXN0cywgQ0xJcyBhbmQgYW55XG4gKiBwcm9jZXNzIHRoYXQgZG9lcyBub3Qgc2VydmUgL21ldHJpY3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0R2F1Z2UobmFtZTogc3RyaW5nLCBsYWJlbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSwgdmFsdWUgPSAwKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgZ2F1Z2VFbWl0dGVyKG5hbWUsIGxhYmVscywgdmFsdWUpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBOZXZlciBsZXQgbWV0cmljIGVtaXNzaW9uIGJyZWFrIHRoZSBjYWxsaW5nIHBhdGguIEZvciB0aGUgcmVhZC1yb3V0aW5nXG4gICAgLy8gY2FsbGVyIGluIHBhcnRpY3VsYXIgdGhpcyBtdXN0IG5vdCBiZSBhYmxlIHRvIGZhaWwgYSBkYXRhYmFzZSByZWFkLlxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -78,7 +78,7 @@
78
78
  "devEngines": {
79
79
  "packageManager": {
80
80
  "name": "pnpm",
81
- "version": ">=10",
81
+ "version": "12.14.0",
82
82
  "onFail": "ignore"
83
83
  }
84
84
  },
@@ -108,7 +108,7 @@
108
108
  ]
109
109
  }
110
110
  },
111
- "version": "5.0.20",
111
+ "version": "5.0.22",
112
112
  "bugs": {
113
113
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
114
114
  },