rds-database-auto-start-preventer 0.3.5 → 0.4.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.
@@ -20561,13 +20561,88 @@ var require_dist5 = __commonJS({
20561
20561
  }
20562
20562
  });
20563
20563
 
20564
- // node_modules/fetch-retrier/lib/index.js
20565
- var require_lib = __commonJS({
20566
- "node_modules/fetch-retrier/lib/index.js"(exports2) {
20564
+ // node_modules/aws-lambda-secret-fetcher/lib/core/errors.js
20565
+ var require_errors2 = __commonJS({
20566
+ "node_modules/aws-lambda-secret-fetcher/lib/core/errors.js"(exports2) {
20567
20567
  "use strict";
20568
20568
  Object.defineProperty(exports2, "__esModule", { value: true });
20569
- exports2.parseRetryAfterMs = exports2.fetchRetrier = exports2.defaultShouldRetry = exports2.DEFAULT_RETRYABLE_HTTP_STATUSES = exports2.FetchRetrierUnreachableError = exports2.FetchRetrierInvalidOptionsError = exports2.FetchRetrierNetworkError = exports2.FetchRetrierHttpError = exports2.FetchRetrierAlreadyAbortedError = exports2.FetchRetrierAbortError = void 0;
20570
- var FetchRetrierAbortError = class _FetchRetrierAbortError extends Error {
20569
+ exports2.SecretFetcherBinaryError = exports2.SecretFetcherResponseError = exports2.SecretFetcherPortError = exports2.SecretFetcherSessionTokenError = exports2.SecretFetcherError = void 0;
20570
+ var SecretFetcherError = class _SecretFetcherError extends Error {
20571
+ /**
20572
+ * @param message - Error message shown to the caller
20573
+ */
20574
+ constructor(message) {
20575
+ super(message);
20576
+ this.name = "SecretFetcherError";
20577
+ Object.setPrototypeOf(this, _SecretFetcherError.prototype);
20578
+ }
20579
+ };
20580
+ exports2.SecretFetcherError = SecretFetcherError;
20581
+ var SecretFetcherSessionTokenError = class _SecretFetcherSessionTokenError extends SecretFetcherError {
20582
+ /**
20583
+ * @param message - Error message shown to the caller
20584
+ */
20585
+ constructor(message) {
20586
+ super(message);
20587
+ this.name = "SecretFetcherSessionTokenError";
20588
+ Object.setPrototypeOf(this, _SecretFetcherSessionTokenError.prototype);
20589
+ }
20590
+ };
20591
+ exports2.SecretFetcherSessionTokenError = SecretFetcherSessionTokenError;
20592
+ var SecretFetcherPortError = class _SecretFetcherPortError extends SecretFetcherError {
20593
+ /**
20594
+ * @param message - Error message shown to the caller
20595
+ */
20596
+ constructor(message) {
20597
+ super(message);
20598
+ this.name = "SecretFetcherPortError";
20599
+ Object.setPrototypeOf(this, _SecretFetcherPortError.prototype);
20600
+ }
20601
+ };
20602
+ exports2.SecretFetcherPortError = SecretFetcherPortError;
20603
+ var SecretFetcherResponseError = class _SecretFetcherResponseError extends SecretFetcherError {
20604
+ /**
20605
+ * @param message - Error message shown to the caller
20606
+ */
20607
+ constructor(message) {
20608
+ super(message);
20609
+ this.name = "SecretFetcherResponseError";
20610
+ Object.setPrototypeOf(this, _SecretFetcherResponseError.prototype);
20611
+ }
20612
+ };
20613
+ exports2.SecretFetcherResponseError = SecretFetcherResponseError;
20614
+ var SecretFetcherBinaryError = class _SecretFetcherBinaryError extends SecretFetcherError {
20615
+ /**
20616
+ * @param message - Error message shown to the caller
20617
+ */
20618
+ constructor(message) {
20619
+ super(message);
20620
+ this.name = "SecretFetcherBinaryError";
20621
+ Object.setPrototypeOf(this, _SecretFetcherBinaryError.prototype);
20622
+ }
20623
+ };
20624
+ exports2.SecretFetcherBinaryError = SecretFetcherBinaryError;
20625
+ }
20626
+ });
20627
+
20628
+ // node_modules/fetch-retrier/lib/core/errors.js
20629
+ var require_errors3 = __commonJS({
20630
+ "node_modules/fetch-retrier/lib/core/errors.js"(exports2) {
20631
+ "use strict";
20632
+ Object.defineProperty(exports2, "__esModule", { value: true });
20633
+ exports2.FetchRetrierUnreachableError = exports2.FetchRetrierInvalidOptionsError = exports2.FetchRetrierNetworkError = exports2.FetchRetrierHttpError = exports2.FetchRetrierAlreadyAbortedError = exports2.FetchRetrierAbortError = exports2.FetchRetrierError = void 0;
20634
+ var FetchRetrierError = class _FetchRetrierError extends Error {
20635
+ /**
20636
+ * @param message - Human-readable reason
20637
+ */
20638
+ constructor(message) {
20639
+ super(message);
20640
+ this.name = "FetchRetrierError";
20641
+ Object.setPrototypeOf(this, _FetchRetrierError.prototype);
20642
+ }
20643
+ };
20644
+ exports2.FetchRetrierError = FetchRetrierError;
20645
+ var FetchRetrierAbortError = class _FetchRetrierAbortError extends FetchRetrierError {
20571
20646
  /**
20572
20647
  * @param message - Human-readable reason (default: `'Aborted'`)
20573
20648
  */
@@ -20589,7 +20664,7 @@ var require_lib = __commonJS({
20589
20664
  }
20590
20665
  };
20591
20666
  exports2.FetchRetrierAlreadyAbortedError = FetchRetrierAlreadyAbortedError;
20592
- var FetchRetrierHttpError = class _FetchRetrierHttpError extends Error {
20667
+ var FetchRetrierHttpError = class _FetchRetrierHttpError extends FetchRetrierError {
20593
20668
  /**
20594
20669
  * @param message - Error description
20595
20670
  * @param status - HTTP status code from the last non-OK response
@@ -20604,7 +20679,7 @@ var require_lib = __commonJS({
20604
20679
  }
20605
20680
  };
20606
20681
  exports2.FetchRetrierHttpError = FetchRetrierHttpError;
20607
- var FetchRetrierNetworkError = class _FetchRetrierNetworkError extends Error {
20682
+ var FetchRetrierNetworkError = class _FetchRetrierNetworkError extends FetchRetrierError {
20608
20683
  /**
20609
20684
  * @param message - Human-readable reason (default: `'Network error'`)
20610
20685
  * @param cause - Original error from the underlying `fetch`, when available
@@ -20617,7 +20692,7 @@ var require_lib = __commonJS({
20617
20692
  }
20618
20693
  };
20619
20694
  exports2.FetchRetrierNetworkError = FetchRetrierNetworkError;
20620
- var FetchRetrierInvalidOptionsError = class _FetchRetrierInvalidOptionsError extends TypeError {
20695
+ var FetchRetrierInvalidOptionsError = class _FetchRetrierInvalidOptionsError extends FetchRetrierError {
20621
20696
  /**
20622
20697
  * @param message - Human-readable reason describing the invalid option
20623
20698
  */
@@ -20628,7 +20703,7 @@ var require_lib = __commonJS({
20628
20703
  }
20629
20704
  };
20630
20705
  exports2.FetchRetrierInvalidOptionsError = FetchRetrierInvalidOptionsError;
20631
- var FetchRetrierUnreachableError = class _FetchRetrierUnreachableError extends Error {
20706
+ var FetchRetrierUnreachableError = class _FetchRetrierUnreachableError extends FetchRetrierError {
20632
20707
  /**
20633
20708
  * @param message - Human-readable reason (default: `'Unreachable'`)
20634
20709
  */
@@ -20639,88 +20714,34 @@ var require_lib = __commonJS({
20639
20714
  }
20640
20715
  };
20641
20716
  exports2.FetchRetrierUnreachableError = FetchRetrierUnreachableError;
20642
- exports2.DEFAULT_RETRYABLE_HTTP_STATUSES = [408, 425, 429, 500, 502, 503, 504];
20643
- var defaultShouldRetry = (response, _body) => {
20644
- return exports2.DEFAULT_RETRYABLE_HTTP_STATUSES.includes(response.status);
20645
- };
20646
- exports2.defaultShouldRetry = defaultShouldRetry;
20647
- var validateRequestOptions = (options) => {
20648
- const { retries, timeoutMs, baseBackoffMs } = options;
20649
- if (retries < 1) {
20650
- throw new FetchRetrierInvalidOptionsError("retries must be >= 1");
20651
- }
20652
- if (timeoutMs <= 0) {
20653
- throw new FetchRetrierInvalidOptionsError("timeoutMs must be > 0");
20654
- }
20655
- if (baseBackoffMs < 0) {
20656
- throw new FetchRetrierInvalidOptionsError("baseBackoffMs must be >= 0");
20657
- }
20658
- };
20659
- var fetchRetrier = async (url, options) => {
20660
- const { headers, init, retries, timeoutMs, baseBackoffMs, signal: externalSignal, shouldRetry = exports2.defaultShouldRetry } = options;
20661
- validateRequestOptions({ retries, timeoutMs, baseBackoffMs });
20662
- for (let attempt = 1; attempt <= retries; attempt++) {
20663
- if (externalSignal?.aborted) {
20664
- throw new FetchRetrierAlreadyAbortedError();
20665
- }
20666
- const controller = new AbortController();
20667
- const timer = setTimeout(() => controller.abort(), timeoutMs);
20668
- const onExternalAbort = () => {
20669
- clearTimeout(timer);
20670
- controller.abort();
20671
- };
20672
- if (externalSignal) {
20673
- externalSignal.addEventListener("abort", onExternalAbort);
20674
- }
20675
- try {
20676
- const res = await fetch(url, {
20677
- ...init,
20678
- ...headers !== void 0 ? { headers } : {},
20679
- signal: controller.signal
20680
- });
20681
- clearTimeout(timer);
20682
- externalSignal?.removeEventListener("abort", onExternalAbort);
20683
- if (res.ok) {
20684
- return res;
20685
- }
20686
- const text = await res.text();
20687
- const isContinue = shouldRetry(res, text);
20688
- if (isContinue) {
20689
- if (attempt === retries) {
20690
- throw new FetchRetrierHttpError(`HTTP ${res.status}`, res.status, text);
20691
- }
20692
- await wait(resolveRetryDelayMs(res, baseBackoffMs, attempt));
20693
- } else {
20694
- throw new FetchRetrierHttpError(`Non-retriable HTTP error: ${res.status}`, res.status, text);
20695
- }
20696
- } catch (err) {
20697
- clearTimeout(timer);
20698
- externalSignal?.removeEventListener("abort", onExternalAbort);
20699
- if (err instanceof Error && err.name === "AbortError") {
20700
- if (attempt === retries)
20701
- throw err instanceof FetchRetrierAbortError ? err : new FetchRetrierAbortError();
20702
- await wait(fullJitter(baseBackoffMs, attempt));
20703
- continue;
20704
- }
20705
- if (err instanceof TypeError) {
20706
- if (attempt === retries)
20707
- throw new FetchRetrierNetworkError("Network error", err);
20708
- await wait(fullJitter(baseBackoffMs, attempt));
20709
- continue;
20710
- }
20711
- throw err;
20712
- }
20713
- }
20714
- throw new FetchRetrierUnreachableError();
20715
- };
20716
- exports2.fetchRetrier = fetchRetrier;
20717
- var wait = (ms) => {
20718
- return new Promise((resolve) => setTimeout(resolve, ms));
20719
- };
20720
- var fullJitter = (base, attempt) => {
20717
+ }
20718
+ });
20719
+
20720
+ // node_modules/fetch-retrier/lib/core/backoff/jitter.js
20721
+ var require_jitter = __commonJS({
20722
+ "node_modules/fetch-retrier/lib/core/backoff/jitter.js"(exports2) {
20723
+ "use strict";
20724
+ Object.defineProperty(exports2, "__esModule", { value: true });
20725
+ exports2.fullJitter = void 0;
20726
+ var fullJitter = (base, attempt, maxBackoffMs) => {
20721
20727
  const cap = base * Math.pow(2, attempt);
20722
- return Math.floor(Math.random() * cap);
20728
+ const delay = Math.floor(Math.random() * cap);
20729
+ if (maxBackoffMs === void 0) {
20730
+ return delay;
20731
+ }
20732
+ return Math.min(delay, maxBackoffMs);
20723
20733
  };
20734
+ exports2.fullJitter = fullJitter;
20735
+ }
20736
+ });
20737
+
20738
+ // node_modules/fetch-retrier/lib/core/backoff/retry-after.js
20739
+ var require_retry_after = __commonJS({
20740
+ "node_modules/fetch-retrier/lib/core/backoff/retry-after.js"(exports2) {
20741
+ "use strict";
20742
+ Object.defineProperty(exports2, "__esModule", { value: true });
20743
+ exports2.resolveRetryDelayMs = exports2.parseRetryAfterMs = void 0;
20744
+ var jitter_1 = require_jitter();
20724
20745
  var parseRetryAfterMs = (value, nowMs = Date.now()) => {
20725
20746
  const trimmed = value.trim();
20726
20747
  if (trimmed === "") {
@@ -20739,288 +20760,231 @@ var require_lib = __commonJS({
20739
20760
  return Math.max(0, dateMs - nowMs);
20740
20761
  };
20741
20762
  exports2.parseRetryAfterMs = parseRetryAfterMs;
20742
- var resolveRetryDelayMs = (response, baseBackoffMs, attempt, nowMs = Date.now()) => {
20763
+ var resolveRetryDelayMs = (response, baseBackoffMs, attempt, maxBackoffMs, nowMs = Date.now()) => {
20743
20764
  const header = response.headers?.get("Retry-After");
20744
20765
  if (header == null) {
20745
- return fullJitter(baseBackoffMs, attempt);
20766
+ return (0, jitter_1.fullJitter)(baseBackoffMs, attempt, maxBackoffMs);
20746
20767
  }
20747
20768
  const fromHeader = (0, exports2.parseRetryAfterMs)(header, nowMs);
20748
20769
  if (fromHeader === void 0) {
20749
- return fullJitter(baseBackoffMs, attempt);
20770
+ return (0, jitter_1.fullJitter)(baseBackoffMs, attempt, maxBackoffMs);
20750
20771
  }
20751
20772
  return fromHeader;
20752
20773
  };
20774
+ exports2.resolveRetryDelayMs = resolveRetryDelayMs;
20753
20775
  }
20754
20776
  });
20755
20777
 
20756
- // node_modules/quiet-json-parser/lib/index.js
20757
- var require_lib2 = __commonJS({
20758
- "node_modules/quiet-json-parser/lib/index.js"(exports2) {
20778
+ // node_modules/fetch-retrier/lib/core/http/timed-fetch.js
20779
+ var require_timed_fetch = __commonJS({
20780
+ "node_modules/fetch-retrier/lib/core/http/timed-fetch.js"(exports2) {
20759
20781
  "use strict";
20760
20782
  Object.defineProperty(exports2, "__esModule", { value: true });
20761
- exports2.quietParse = void 0;
20762
- var safeReviver = (key, value) => {
20763
- if (key === "__proto__" || key === "constructor" || key === "prototype") {
20764
- return void 0;
20765
- }
20766
- return value;
20767
- };
20768
- var quietParse = (jsonString, fallback, onError) => {
20769
- if (!jsonString) {
20770
- return fallback;
20783
+ exports2.timedFetch = void 0;
20784
+ var timedFetch = async (url, options) => {
20785
+ const { timeoutMs, init, headers, signal: externalSignal } = options;
20786
+ const controller = new AbortController();
20787
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
20788
+ const onExternalAbort = () => {
20789
+ clearTimeout(timer);
20790
+ controller.abort();
20791
+ };
20792
+ if (externalSignal) {
20793
+ externalSignal.addEventListener("abort", onExternalAbort);
20771
20794
  }
20772
20795
  try {
20773
- return JSON.parse(jsonString, safeReviver);
20774
- } catch (error) {
20775
- onError?.(error);
20776
- return fallback;
20796
+ return await fetch(url, {
20797
+ ...init,
20798
+ ...headers !== void 0 ? { headers } : {},
20799
+ signal: controller.signal
20800
+ });
20801
+ } finally {
20802
+ clearTimeout(timer);
20803
+ externalSignal?.removeEventListener("abort", onExternalAbort);
20777
20804
  }
20778
20805
  };
20779
- exports2.quietParse = quietParse;
20806
+ exports2.timedFetch = timedFetch;
20780
20807
  }
20781
20808
  });
20782
20809
 
20783
- // node_modules/aws-lambda-secret-fetcher/node_modules/strict-env-resolver/lib/index.js
20784
- var require_lib3 = __commonJS({
20785
- "node_modules/aws-lambda-secret-fetcher/node_modules/strict-env-resolver/lib/index.js"(exports2) {
20810
+ // node_modules/fetch-retrier/lib/core/policy/default-should-retry.js
20811
+ var require_default_should_retry = __commonJS({
20812
+ "node_modules/fetch-retrier/lib/core/policy/default-should-retry.js"(exports2) {
20786
20813
  "use strict";
20787
20814
  Object.defineProperty(exports2, "__esModule", { value: true });
20788
- exports2.StrictEnvResolver = exports2.StrictEnvType = exports2.StrictEnvValidationError = exports2.StrictEnvError = void 0;
20789
- var TRUE_BOOLEAN_PATTERN = /^(1|true|yes|on)$/i;
20790
- var parseNumber = (raw) => {
20791
- const n = Number(raw);
20792
- if (!Number.isFinite(n)) {
20793
- return void 0;
20794
- }
20795
- return n;
20796
- };
20797
- var parseBooleanEnvValue = (normalizedRaw) => TRUE_BOOLEAN_PATTERN.test(normalizedRaw);
20798
- var StrictEnvError = class extends Error {
20799
- /**
20800
- * @param message - Error message.
20801
- */
20802
- constructor(message) {
20803
- super(message);
20804
- this.name = "StrictEnvError";
20805
- }
20806
- };
20807
- exports2.StrictEnvError = StrictEnvError;
20808
- var StrictEnvValidationError = class _StrictEnvValidationError extends StrictEnvError {
20809
- /**
20810
- * Formats validation errors into a human-readable error message.
20811
- *
20812
- * @template K - Environment variable key type.
20813
- * @param errors - Validation error entries to format.
20814
- * @returns Multi-line summary listing each key and message.
20815
- */
20816
- static format(errors) {
20817
- const lines = errors.map((e) => `- ${e.key}: ${e.message}${e.raw == null ? "" : ` (raw="${e.raw}")`}`);
20818
- return `Invalid environment variables (${errors.length}):
20819
- ${lines.join("\n")}`;
20820
- }
20821
- /**
20822
- * Creates a new validation error from one or more `StrictEnvValidationEntry` entries.
20823
- *
20824
- * @param errors - One or more structured validation errors.
20825
- */
20826
- constructor(errors) {
20827
- const msg = _StrictEnvValidationError.format(errors);
20828
- super(msg);
20829
- this.name = "StrictEnvValidationError";
20830
- this.errors = errors;
20831
- this.keys = errors.map((e) => e.key);
20832
- }
20833
- };
20834
- exports2.StrictEnvValidationError = StrictEnvValidationError;
20835
- exports2.StrictEnvType = {
20836
- /** Spec for a string value (returned as-is unless `trim: true` is set in options). */
20837
- String: { type: "string" },
20838
- /**
20839
- * Spec for a finite numeric value (`Number()` parsing; rejects `NaN` and `Infinity`).
20840
- */
20841
- Number: { type: "number" },
20842
- /** Spec for a boolean value (`1`/`true`/`yes`/`on` → `true`; other non-empty values → `false`). */
20843
- Boolean: { type: "boolean" },
20844
- /**
20845
- * Returns a spec that restricts the value to one of the given choices.
20846
- *
20847
- * @param choices - Allowed string literals.
20848
- * @returns Enum spec for use with `resolve` or `resolveAll`.
20849
- */
20850
- Enum: (choices) => ({ type: "enum", choices })
20815
+ exports2.defaultShouldRetry = exports2.DEFAULT_RETRYABLE_HTTP_STATUSES = void 0;
20816
+ exports2.DEFAULT_RETRYABLE_HTTP_STATUSES = [408, 425, 429, 500, 502, 503, 504];
20817
+ var defaultShouldRetry = (response, _body) => {
20818
+ return exports2.DEFAULT_RETRYABLE_HTTP_STATUSES.includes(response.status);
20851
20819
  };
20852
- var defaultTrimForSpec = (spec) => spec.type !== "string";
20853
- var normalizeEnvRaw = (raw, trim) => {
20854
- if (raw == null) {
20855
- return void 0;
20856
- }
20857
- if (!trim) {
20858
- return raw;
20820
+ exports2.defaultShouldRetry = defaultShouldRetry;
20821
+ }
20822
+ });
20823
+
20824
+ // node_modules/fetch-retrier/lib/core/policy/validate-options.js
20825
+ var require_validate_options = __commonJS({
20826
+ "node_modules/fetch-retrier/lib/core/policy/validate-options.js"(exports2) {
20827
+ "use strict";
20828
+ Object.defineProperty(exports2, "__esModule", { value: true });
20829
+ exports2.validateRequestOptions = void 0;
20830
+ var errors_1 = require_errors3();
20831
+ var validateRequestOptions = (options) => {
20832
+ const { retries, timeoutMs, baseBackoffMs, maxBackoffMs } = options;
20833
+ if (retries < 1) {
20834
+ throw new errors_1.FetchRetrierInvalidOptionsError("retries must be >= 1");
20859
20835
  }
20860
- return raw.trim();
20861
- };
20862
- var resolveSchemaEntry = (entry) => ({
20863
- spec: Array.isArray(entry) ? entry[0] : entry,
20864
- options: Array.isArray(entry) ? entry[1] : void 0
20865
- });
20866
- var parseEnvValue = (key, spec, raw, defaultValue, options) => {
20867
- const trim = options?.trim ?? defaultTrimForSpec(spec);
20868
- const normalizedRaw = normalizeEnvRaw(raw, trim);
20869
- const hasDefault = defaultValue !== void 0;
20870
- if (normalizedRaw == null || normalizedRaw === "") {
20871
- if (hasDefault) {
20872
- return { ok: true, value: defaultValue };
20873
- }
20874
- return {
20875
- ok: false,
20876
- error: { key, message: `Missing required environment variable: ${key}`, raw, kind: "missing" }
20877
- };
20836
+ if (timeoutMs <= 0) {
20837
+ throw new errors_1.FetchRetrierInvalidOptionsError("timeoutMs must be > 0");
20878
20838
  }
20879
- switch (spec.type) {
20880
- case "number": {
20881
- const n = parseNumber(normalizedRaw);
20882
- if (n === void 0) {
20883
- return {
20884
- ok: false,
20885
- error: { key, message: `Env ${key}: expected number, got "${raw}"`, raw, kind: "invalid_number" }
20886
- };
20887
- }
20888
- return { ok: true, value: n };
20889
- }
20890
- case "boolean":
20891
- return { ok: true, value: parseBooleanEnvValue(normalizedRaw) };
20892
- case "enum":
20893
- if (!spec.choices.includes(normalizedRaw)) {
20894
- return {
20895
- ok: false,
20896
- error: {
20897
- key,
20898
- message: `Env ${key}: must be one of [${spec.choices.join(", ")}]`,
20899
- raw,
20900
- kind: "invalid_enum"
20901
- }
20902
- };
20903
- }
20904
- return { ok: true, value: normalizedRaw };
20905
- default:
20906
- return { ok: true, value: normalizedRaw };
20839
+ if (baseBackoffMs < 0) {
20840
+ throw new errors_1.FetchRetrierInvalidOptionsError("baseBackoffMs must be >= 0");
20907
20841
  }
20908
- };
20909
- var resolve = (key, spec = exports2.StrictEnvType.String, options) => {
20910
- const result = parseEnvValue(key, spec, process.env[key], options?.default, options);
20911
- if (!result.ok) {
20912
- throw new StrictEnvValidationError([result.error]);
20842
+ if (maxBackoffMs !== void 0 && maxBackoffMs < 0) {
20843
+ throw new errors_1.FetchRetrierInvalidOptionsError("maxBackoffMs must be >= 0");
20913
20844
  }
20914
- return result.value;
20915
20845
  };
20916
- var resolveAll = (schema) => {
20917
- const envs = {};
20918
- const errors = [];
20919
- for (const key of Object.keys(schema)) {
20920
- const { spec, options } = resolveSchemaEntry(schema[key]);
20921
- const result = parseEnvValue(key, spec, process.env[key], options?.default, options);
20922
- if (!result.ok) {
20923
- errors.push(result.error);
20924
- continue;
20925
- }
20926
- envs[key] = result.value;
20927
- }
20928
- if (errors.length > 0)
20929
- throw new StrictEnvValidationError(errors);
20930
- return envs;
20846
+ exports2.validateRequestOptions = validateRequestOptions;
20847
+ }
20848
+ });
20849
+
20850
+ // node_modules/fetch-retrier/lib/core/retry-predicates.js
20851
+ var require_retry_predicates = __commonJS({
20852
+ "node_modules/fetch-retrier/lib/core/retry-predicates.js"(exports2) {
20853
+ "use strict";
20854
+ Object.defineProperty(exports2, "__esModule", { value: true });
20855
+ exports2.isLastAttempt = void 0;
20856
+ var isLastAttempt = (attempt, retries) => {
20857
+ return attempt === retries;
20931
20858
  };
20932
- exports2.StrictEnvResolver = {
20933
- /** Reads and parses a single environment variable. See {@link resolve}. */
20934
- resolve,
20935
- /** Reads and parses multiple environment variables in one pass. See {@link resolveAll}. */
20936
- resolveAll
20859
+ exports2.isLastAttempt = isLastAttempt;
20860
+ }
20861
+ });
20862
+
20863
+ // node_modules/fetch-retrier/lib/core/time/wait.js
20864
+ var require_wait = __commonJS({
20865
+ "node_modules/fetch-retrier/lib/core/time/wait.js"(exports2) {
20866
+ "use strict";
20867
+ Object.defineProperty(exports2, "__esModule", { value: true });
20868
+ exports2.wait = void 0;
20869
+ var wait = (ms) => {
20870
+ return new Promise((resolve) => setTimeout(resolve, ms));
20937
20871
  };
20872
+ exports2.wait = wait;
20938
20873
  }
20939
20874
  });
20940
20875
 
20941
- // node_modules/aws-lambda-secret-fetcher/lib/index.js
20942
- var require_lib4 = __commonJS({
20943
- "node_modules/aws-lambda-secret-fetcher/lib/index.js"(exports2) {
20876
+ // node_modules/fetch-retrier/lib/core/fetch-retrier.js
20877
+ var require_fetch_retrier = __commonJS({
20878
+ "node_modules/fetch-retrier/lib/core/fetch-retrier.js"(exports2) {
20944
20879
  "use strict";
20945
20880
  Object.defineProperty(exports2, "__esModule", { value: true });
20946
- exports2.secretFetcher = void 0;
20947
- var fetch_retrier_1 = require_lib();
20948
- var quiet_json_parser_1 = require_lib2();
20949
- var strict_env_resolver_1 = require_lib3();
20950
- var getSecretValue = async (name, options = {}) => {
20951
- const { extensionHttpPort, timeoutMs = 2e3, retries = 3, baseBackoffMs = 300 } = options;
20952
- const port = resolveExtensionHttpPort(extensionHttpPort);
20953
- const sessionToken = resolveAwsSessionToken();
20954
- const url = `http://localhost:${port}/secretsmanager/get?secretId=${encodeURIComponent(name)}`;
20955
- const requestOptions = {
20956
- headers: {
20957
- "X-Aws-Parameters-Secrets-Token": sessionToken
20958
- },
20959
- retries,
20960
- timeoutMs,
20961
- baseBackoffMs,
20962
- shouldRetry: (res, body) => {
20963
- if ((0, fetch_retrier_1.defaultShouldRetry)(res, body)) {
20964
- return true;
20881
+ exports2.fetchRetrier = void 0;
20882
+ var jitter_1 = require_jitter();
20883
+ var retry_after_1 = require_retry_after();
20884
+ var errors_1 = require_errors3();
20885
+ var timed_fetch_1 = require_timed_fetch();
20886
+ var default_should_retry_1 = require_default_should_retry();
20887
+ var validate_options_1 = require_validate_options();
20888
+ var retry_predicates_1 = require_retry_predicates();
20889
+ var wait_1 = require_wait();
20890
+ var fetchRetrier = async (url, options) => {
20891
+ const { headers, init, retries, timeoutMs, baseBackoffMs, maxBackoffMs, signal: externalSignal, shouldRetry = default_should_retry_1.defaultShouldRetry } = options;
20892
+ (0, validate_options_1.validateRequestOptions)({ retries, timeoutMs, baseBackoffMs, maxBackoffMs });
20893
+ for (let attempt = 1; attempt <= retries; attempt++) {
20894
+ if (externalSignal?.aborted) {
20895
+ throw new errors_1.FetchRetrierAlreadyAbortedError();
20896
+ }
20897
+ try {
20898
+ const res = await (0, timed_fetch_1.timedFetch)(url, {
20899
+ timeoutMs,
20900
+ init,
20901
+ headers,
20902
+ signal: externalSignal
20903
+ });
20904
+ if (res.ok) {
20905
+ return res;
20965
20906
  }
20966
- if (res.status === 400 && /not\s+ready.*traffic/i.test(body)) {
20967
- return true;
20907
+ const text = await res.text();
20908
+ const isContinue = shouldRetry(res, text);
20909
+ if (!isContinue) {
20910
+ throw new errors_1.FetchRetrierHttpError(`Non-retriable HTTP error: ${res.status}`, res.status, text);
20968
20911
  }
20969
- return false;
20970
- }
20971
- };
20972
- const response = await (0, fetch_retrier_1.fetchRetrier)(url, requestOptions);
20973
- const raw = await response.json();
20974
- if (!isSecretResponse(raw)) {
20975
- throw new Error("Invalid secret response format");
20976
- }
20977
- const data = raw;
20978
- return (0, quiet_json_parser_1.quietParse)(data.SecretString, data.SecretString);
20979
- };
20980
- var AWS_SESSION_TOKEN_GUIDANCE = "AWS_SESSION_TOKEN is not set. This library only works inside an AWS Lambda execution environment where the runtime provides AWS_SESSION_TOKEN for the Parameters and Secrets Extension. Attach the extension layer and run your code as a Lambda function handler.";
20981
- var MIN_TCP_PORT = 1;
20982
- var MAX_TCP_PORT = 65535;
20983
- var resolveAwsSessionToken = () => {
20984
- try {
20985
- return strict_env_resolver_1.StrictEnvResolver.resolve("AWS_SESSION_TOKEN", strict_env_resolver_1.StrictEnvType.String, { trim: true });
20986
- } catch (e) {
20987
- if (e instanceof strict_env_resolver_1.StrictEnvValidationError && e.errors.length === 1 && e.errors[0]?.key === "AWS_SESSION_TOKEN" && e.errors[0]?.kind === "missing") {
20988
- throw new Error(AWS_SESSION_TOKEN_GUIDANCE);
20912
+ if ((0, retry_predicates_1.isLastAttempt)(attempt, retries)) {
20913
+ throw new errors_1.FetchRetrierHttpError(`HTTP ${res.status}`, res.status, text);
20914
+ }
20915
+ await (0, wait_1.wait)((0, retry_after_1.resolveRetryDelayMs)(res, baseBackoffMs, attempt, maxBackoffMs));
20916
+ } catch (err) {
20917
+ if (err instanceof Error && err.name === "AbortError") {
20918
+ if ((0, retry_predicates_1.isLastAttempt)(attempt, retries)) {
20919
+ throw err instanceof errors_1.FetchRetrierAbortError ? err : new errors_1.FetchRetrierAbortError();
20920
+ }
20921
+ await (0, wait_1.wait)((0, jitter_1.fullJitter)(baseBackoffMs, attempt, maxBackoffMs));
20922
+ continue;
20923
+ }
20924
+ if (err instanceof TypeError) {
20925
+ if ((0, retry_predicates_1.isLastAttempt)(attempt, retries)) {
20926
+ throw new errors_1.FetchRetrierNetworkError("Network error", err);
20927
+ }
20928
+ await (0, wait_1.wait)((0, jitter_1.fullJitter)(baseBackoffMs, attempt, maxBackoffMs));
20929
+ continue;
20930
+ }
20931
+ throw err;
20989
20932
  }
20990
- throw e;
20991
- }
20992
- };
20993
- var resolveExtensionHttpPort = (overridePort) => {
20994
- const port = overridePort === void 0 ? strict_env_resolver_1.StrictEnvResolver.resolve("PARAMETERS_SECRETS_EXTENSION_HTTP_PORT", strict_env_resolver_1.StrictEnvType.Number, { default: 2773 }) : parseExtensionHttpPortOverride(overridePort);
20995
- return assertValidTcpPort(port);
20996
- };
20997
- var parseExtensionHttpPortOverride = (overridePort) => {
20998
- const candidate = String(overridePort).trim();
20999
- if (!/^\d+$/.test(candidate)) {
21000
- throw new Error("Invalid extension HTTP port: must be a number");
21001
- }
21002
- return Number.parseInt(candidate, 10);
21003
- };
21004
- var assertValidTcpPort = (port) => {
21005
- if (port < MIN_TCP_PORT || port > MAX_TCP_PORT) {
21006
- throw new Error("Invalid extension HTTP port: must be between 1 and 65535");
21007
20933
  }
21008
- return String(port);
21009
- };
21010
- var isSecretResponse = (value) => {
21011
- if (typeof value !== "object" || value === null)
21012
- return false;
21013
- const v = value;
21014
- return typeof v.SecretString === "string" && typeof v.Name === "string" && typeof v.ARN === "string" && (v.VersionId === void 0 || typeof v.VersionId === "string");
21015
- };
21016
- exports2.secretFetcher = {
21017
- getSecretValue
20934
+ throw new errors_1.FetchRetrierUnreachableError();
21018
20935
  };
20936
+ exports2.fetchRetrier = fetchRetrier;
20937
+ }
20938
+ });
20939
+
20940
+ // node_modules/fetch-retrier/lib/index.js
20941
+ var require_lib = __commonJS({
20942
+ "node_modules/fetch-retrier/lib/index.js"(exports2) {
20943
+ "use strict";
20944
+ Object.defineProperty(exports2, "__esModule", { value: true });
20945
+ exports2.defaultShouldRetry = exports2.DEFAULT_RETRYABLE_HTTP_STATUSES = exports2.fetchRetrier = exports2.parseRetryAfterMs = exports2.FetchRetrierUnreachableError = exports2.FetchRetrierNetworkError = exports2.FetchRetrierInvalidOptionsError = exports2.FetchRetrierHttpError = exports2.FetchRetrierError = exports2.FetchRetrierAlreadyAbortedError = exports2.FetchRetrierAbortError = void 0;
20946
+ var errors_1 = require_errors3();
20947
+ Object.defineProperty(exports2, "FetchRetrierAbortError", { enumerable: true, get: function() {
20948
+ return errors_1.FetchRetrierAbortError;
20949
+ } });
20950
+ Object.defineProperty(exports2, "FetchRetrierAlreadyAbortedError", { enumerable: true, get: function() {
20951
+ return errors_1.FetchRetrierAlreadyAbortedError;
20952
+ } });
20953
+ Object.defineProperty(exports2, "FetchRetrierError", { enumerable: true, get: function() {
20954
+ return errors_1.FetchRetrierError;
20955
+ } });
20956
+ Object.defineProperty(exports2, "FetchRetrierHttpError", { enumerable: true, get: function() {
20957
+ return errors_1.FetchRetrierHttpError;
20958
+ } });
20959
+ Object.defineProperty(exports2, "FetchRetrierInvalidOptionsError", { enumerable: true, get: function() {
20960
+ return errors_1.FetchRetrierInvalidOptionsError;
20961
+ } });
20962
+ Object.defineProperty(exports2, "FetchRetrierNetworkError", { enumerable: true, get: function() {
20963
+ return errors_1.FetchRetrierNetworkError;
20964
+ } });
20965
+ Object.defineProperty(exports2, "FetchRetrierUnreachableError", { enumerable: true, get: function() {
20966
+ return errors_1.FetchRetrierUnreachableError;
20967
+ } });
20968
+ var retry_after_1 = require_retry_after();
20969
+ Object.defineProperty(exports2, "parseRetryAfterMs", { enumerable: true, get: function() {
20970
+ return retry_after_1.parseRetryAfterMs;
20971
+ } });
20972
+ var fetch_retrier_1 = require_fetch_retrier();
20973
+ Object.defineProperty(exports2, "fetchRetrier", { enumerable: true, get: function() {
20974
+ return fetch_retrier_1.fetchRetrier;
20975
+ } });
20976
+ var default_should_retry_1 = require_default_should_retry();
20977
+ Object.defineProperty(exports2, "DEFAULT_RETRYABLE_HTTP_STATUSES", { enumerable: true, get: function() {
20978
+ return default_should_retry_1.DEFAULT_RETRYABLE_HTTP_STATUSES;
20979
+ } });
20980
+ Object.defineProperty(exports2, "defaultShouldRetry", { enumerable: true, get: function() {
20981
+ return default_should_retry_1.defaultShouldRetry;
20982
+ } });
21019
20983
  }
21020
20984
  });
21021
20985
 
21022
20986
  // node_modules/strict-env-resolver/lib/index.js
21023
- var require_lib5 = __commonJS({
20987
+ var require_lib2 = __commonJS({
21024
20988
  "node_modules/strict-env-resolver/lib/index.js"(exports2) {
21025
20989
  "use strict";
21026
20990
  Object.defineProperty(exports2, "__esModule", { value: true });
@@ -21071,29 +21035,38 @@ ${lines.join("\n")}`;
21071
21035
  }
21072
21036
  };
21073
21037
  exports2.StrictEnvValidationError = StrictEnvValidationError;
21038
+ var MIN_POSITIVE_INTEGER = 1;
21039
+ var MAX_NEGATIVE_INTEGER = -1;
21040
+ var ZERO = 0;
21041
+ var MIN_PORT = MIN_POSITIVE_INTEGER;
21042
+ var MAX_PORT = 65535;
21074
21043
  var createNumberSpec = (constraints) => ({
21075
21044
  type: "number",
21076
21045
  ...constraints?.min !== void 0 ? { min: constraints.min } : {},
21077
21046
  ...constraints?.max !== void 0 ? { max: constraints.max } : {},
21047
+ ...constraints?.exclusiveMin !== void 0 ? { exclusiveMin: constraints.exclusiveMin } : {},
21048
+ ...constraints?.exclusiveMax !== void 0 ? { exclusiveMax: constraints.exclusiveMax } : {},
21078
21049
  ...constraints?.integer !== void 0 ? { integer: constraints.integer } : {}
21079
21050
  });
21080
- var NumberSpec = Object.assign((constraints) => createNumberSpec(constraints), { type: "number" });
21051
+ var NumberSpec = Object.assign((constraints) => createNumberSpec(constraints), { type: "number" }, {
21052
+ Integer: createNumberSpec({ integer: true }),
21053
+ PositiveInteger: createNumberSpec({ min: MIN_POSITIVE_INTEGER, integer: true }),
21054
+ NegativeInteger: createNumberSpec({ max: MAX_NEGATIVE_INTEGER, integer: true }),
21055
+ NonNegativeInteger: createNumberSpec({ min: ZERO, integer: true }),
21056
+ Positive: createNumberSpec({ exclusiveMin: ZERO }),
21057
+ Negative: createNumberSpec({ exclusiveMax: ZERO }),
21058
+ NonNegative: createNumberSpec({ min: ZERO }),
21059
+ Port: createNumberSpec({ min: MIN_PORT, max: MAX_PORT, integer: true })
21060
+ });
21081
21061
  exports2.StrictEnvType = {
21082
21062
  /** Spec for a string value (returned as-is unless `trim: true` is set in options). */
21083
21063
  String: { type: "string" },
21084
21064
  /**
21085
21065
  * Spec for a finite numeric value (`Number()` parsing; rejects `NaN` and `Infinity`).
21086
- * Use as `StrictEnvType.Number`, or call as `StrictEnvType.Number({ min, max, integer })`.
21066
+ * Use as `StrictEnvType.Number`, call as `StrictEnvType.Number({ min, max, exclusiveMin, exclusiveMax, integer })`,
21067
+ * or use a nested preset such as `StrictEnvType.Number.Port`.
21087
21068
  */
21088
21069
  Number: NumberSpec,
21089
- /**
21090
- * Spec for a positive integer (`>= 1`). Sugar for `Number({ min: 1, integer: true })`.
21091
- */
21092
- PositiveInt: createNumberSpec({ min: 1, integer: true }),
21093
- /**
21094
- * Spec for a negative integer (`<= -1`). Sugar for `Number({ max: -1, integer: true })`.
21095
- */
21096
- NegativeInt: createNumberSpec({ max: -1, integer: true }),
21097
21070
  /** Spec for a boolean value (`1`/`true`/`yes`/`on` → `true`; other non-empty values → `false`). */
21098
21071
  Boolean: { type: "boolean" },
21099
21072
  /**
@@ -21126,6 +21099,14 @@ ${lines.join("\n")}`;
21126
21099
  kind: "invalid_number"
21127
21100
  };
21128
21101
  }
21102
+ if (constraints.exclusiveMin !== void 0 && n <= constraints.exclusiveMin) {
21103
+ return {
21104
+ key,
21105
+ message: `Env ${key}: must be > ${constraints.exclusiveMin}, got ${n}`,
21106
+ raw,
21107
+ kind: "invalid_number"
21108
+ };
21109
+ }
21129
21110
  if (constraints.max !== void 0 && n > constraints.max) {
21130
21111
  return {
21131
21112
  key,
@@ -21134,6 +21115,14 @@ ${lines.join("\n")}`;
21134
21115
  kind: "invalid_number"
21135
21116
  };
21136
21117
  }
21118
+ if (constraints.exclusiveMax !== void 0 && n >= constraints.exclusiveMax) {
21119
+ return {
21120
+ key,
21121
+ message: `Env ${key}: must be < ${constraints.exclusiveMax}, got ${n}`,
21122
+ raw,
21123
+ kind: "invalid_number"
21124
+ };
21125
+ }
21137
21126
  return void 0;
21138
21127
  };
21139
21128
  var resolveSchemaEntry = (entry) => ({
@@ -21219,6 +21208,350 @@ ${lines.join("\n")}`;
21219
21208
  }
21220
21209
  });
21221
21210
 
21211
+ // node_modules/aws-lambda-secret-fetcher/lib/core/extension-http.js
21212
+ var require_extension_http = __commonJS({
21213
+ "node_modules/aws-lambda-secret-fetcher/lib/core/extension-http.js"(exports2) {
21214
+ "use strict";
21215
+ Object.defineProperty(exports2, "__esModule", { value: true });
21216
+ exports2.resolveExtensionHttpPort = exports2.resolveAwsSessionToken = void 0;
21217
+ var strict_env_resolver_1 = require_lib2();
21218
+ var errors_1 = require_errors2();
21219
+ var AWS_SESSION_TOKEN_GUIDANCE = "AWS_SESSION_TOKEN is not set. This library only works inside an AWS Lambda execution environment where the runtime provides AWS_SESSION_TOKEN for the Parameters and Secrets Extension. Attach the extension layer and run your code as a Lambda function handler.";
21220
+ var DEFAULT_EXTENSION_HTTP_PORT = 2773;
21221
+ var MIN_TCP_PORT = 1;
21222
+ var MAX_TCP_PORT = 65535;
21223
+ var resolveAwsSessionToken = () => {
21224
+ try {
21225
+ return strict_env_resolver_1.StrictEnvResolver.resolve("AWS_SESSION_TOKEN", strict_env_resolver_1.StrictEnvType.String, { trim: true });
21226
+ } catch (e) {
21227
+ if (e instanceof strict_env_resolver_1.StrictEnvValidationError && e.errors.length === 1 && e.errors[0]?.key === "AWS_SESSION_TOKEN" && e.errors[0]?.kind === "missing") {
21228
+ throw new errors_1.SecretFetcherSessionTokenError(AWS_SESSION_TOKEN_GUIDANCE);
21229
+ }
21230
+ throw e;
21231
+ }
21232
+ };
21233
+ exports2.resolveAwsSessionToken = resolveAwsSessionToken;
21234
+ var resolveExtensionHttpPort = (overridePort) => {
21235
+ const port = overridePort === void 0 ? strict_env_resolver_1.StrictEnvResolver.resolve("PARAMETERS_SECRETS_EXTENSION_HTTP_PORT", strict_env_resolver_1.StrictEnvType.Number, { default: DEFAULT_EXTENSION_HTTP_PORT }) : parseExtensionHttpPortOverride(overridePort);
21236
+ return assertValidTcpPort(port);
21237
+ };
21238
+ exports2.resolveExtensionHttpPort = resolveExtensionHttpPort;
21239
+ var parseExtensionHttpPortOverride = (overridePort) => {
21240
+ const candidate = String(overridePort).trim();
21241
+ if (!/^\d+$/.test(candidate)) {
21242
+ throw new errors_1.SecretFetcherPortError("Invalid extension HTTP port: must be a number");
21243
+ }
21244
+ return Number.parseInt(candidate, 10);
21245
+ };
21246
+ var assertValidTcpPort = (port) => {
21247
+ if (port < MIN_TCP_PORT || port > MAX_TCP_PORT) {
21248
+ throw new errors_1.SecretFetcherPortError("Invalid extension HTTP port: must be between 1 and 65535");
21249
+ }
21250
+ return String(port);
21251
+ };
21252
+ }
21253
+ });
21254
+
21255
+ // node_modules/quiet-json-parser/lib/core/errors.js
21256
+ var require_errors4 = __commonJS({
21257
+ "node_modules/quiet-json-parser/lib/core/errors.js"(exports2) {
21258
+ "use strict";
21259
+ Object.defineProperty(exports2, "__esModule", { value: true });
21260
+ exports2.QuietJsonParserValidateError = exports2.QuietJsonParserError = void 0;
21261
+ var QuietJsonParserError = class _QuietJsonParserError extends Error {
21262
+ constructor(message) {
21263
+ super(message);
21264
+ this.name = "QuietJsonParserError";
21265
+ Object.setPrototypeOf(this, _QuietJsonParserError.prototype);
21266
+ }
21267
+ };
21268
+ exports2.QuietJsonParserError = QuietJsonParserError;
21269
+ var VALIDATE_MISMATCH_MESSAGE = "Parsed JSON did not match the expected shape";
21270
+ var QuietJsonParserValidateError = class _QuietJsonParserValidateError extends QuietJsonParserError {
21271
+ constructor(message = VALIDATE_MISMATCH_MESSAGE) {
21272
+ super(message);
21273
+ this.name = "QuietJsonParserValidateError";
21274
+ Object.setPrototypeOf(this, _QuietJsonParserValidateError.prototype);
21275
+ }
21276
+ };
21277
+ exports2.QuietJsonParserValidateError = QuietJsonParserValidateError;
21278
+ }
21279
+ });
21280
+
21281
+ // node_modules/quiet-json-parser/lib/core/omit-unsafe.js
21282
+ var require_omit_unsafe = __commonJS({
21283
+ "node_modules/quiet-json-parser/lib/core/omit-unsafe.js"(exports2) {
21284
+ "use strict";
21285
+ Object.defineProperty(exports2, "__esModule", { value: true });
21286
+ exports2.omitUnsafeDeep = exports2.omitUnsafeKey = void 0;
21287
+ var PROTO_KEY = "__proto__";
21288
+ var PROTOTYPE_KEY = "prototype";
21289
+ var CONSTRUCTOR_KEY = "constructor";
21290
+ var isPlainObject = (value) => {
21291
+ return typeof value === "object" && value !== null && !Array.isArray(value);
21292
+ };
21293
+ var isUnsafeConstructorValue = (value) => {
21294
+ if (!isPlainObject(value)) {
21295
+ return false;
21296
+ }
21297
+ return Object.prototype.hasOwnProperty.call(value, PROTOTYPE_KEY);
21298
+ };
21299
+ var shouldOmitKey = (key, value) => {
21300
+ if (key === PROTO_KEY || key === PROTOTYPE_KEY) {
21301
+ return true;
21302
+ }
21303
+ if (key !== CONSTRUCTOR_KEY) {
21304
+ return false;
21305
+ }
21306
+ return isUnsafeConstructorValue(value);
21307
+ };
21308
+ var omitUnsafeKey = (key, value) => {
21309
+ if (shouldOmitKey(key, value)) {
21310
+ return void 0;
21311
+ }
21312
+ return value;
21313
+ };
21314
+ exports2.omitUnsafeKey = omitUnsafeKey;
21315
+ var omitUnsafeDeep = (value) => {
21316
+ if (Array.isArray(value)) {
21317
+ return value.map(exports2.omitUnsafeDeep);
21318
+ }
21319
+ if (!isPlainObject(value)) {
21320
+ return value;
21321
+ }
21322
+ const result = {};
21323
+ for (const key of Object.keys(value)) {
21324
+ const nested = value[key];
21325
+ if (shouldOmitKey(key, nested)) {
21326
+ continue;
21327
+ }
21328
+ result[key] = (0, exports2.omitUnsafeDeep)(nested);
21329
+ }
21330
+ return result;
21331
+ };
21332
+ exports2.omitUnsafeDeep = omitUnsafeDeep;
21333
+ }
21334
+ });
21335
+
21336
+ // node_modules/quiet-json-parser/lib/parse.js
21337
+ var require_parse = __commonJS({
21338
+ "node_modules/quiet-json-parser/lib/parse.js"(exports2) {
21339
+ "use strict";
21340
+ Object.defineProperty(exports2, "__esModule", { value: true });
21341
+ exports2.quietParse = void 0;
21342
+ var errors_1 = require_errors4();
21343
+ var omit_unsafe_1 = require_omit_unsafe();
21344
+ var toParseOptions = (onErrorOrOptions) => {
21345
+ if (typeof onErrorOrOptions === "function") {
21346
+ return { onError: onErrorOrOptions };
21347
+ }
21348
+ return onErrorOrOptions ?? {};
21349
+ };
21350
+ var quietParse = (jsonString, fallback, onErrorOrOptions) => {
21351
+ const { validate, onError } = toParseOptions(onErrorOrOptions);
21352
+ if (!jsonString) {
21353
+ return fallback;
21354
+ }
21355
+ let sanitized;
21356
+ try {
21357
+ const parsed = JSON.parse(jsonString);
21358
+ sanitized = (0, omit_unsafe_1.omitUnsafeDeep)(parsed);
21359
+ } catch (error) {
21360
+ onError?.(error);
21361
+ return fallback;
21362
+ }
21363
+ if (!validate) {
21364
+ return sanitized;
21365
+ }
21366
+ try {
21367
+ if (validate(sanitized)) {
21368
+ return sanitized;
21369
+ }
21370
+ } catch (error) {
21371
+ onError?.(error);
21372
+ return fallback;
21373
+ }
21374
+ onError?.(new errors_1.QuietJsonParserValidateError());
21375
+ return fallback;
21376
+ };
21377
+ exports2.quietParse = quietParse;
21378
+ }
21379
+ });
21380
+
21381
+ // node_modules/quiet-json-parser/lib/stringify.js
21382
+ var require_stringify = __commonJS({
21383
+ "node_modules/quiet-json-parser/lib/stringify.js"(exports2) {
21384
+ "use strict";
21385
+ Object.defineProperty(exports2, "__esModule", { value: true });
21386
+ exports2.quietStringify = void 0;
21387
+ var omit_unsafe_1 = require_omit_unsafe();
21388
+ var quietStringify = (value, fallback, onError) => {
21389
+ try {
21390
+ const json = JSON.stringify(value, omit_unsafe_1.omitUnsafeKey);
21391
+ if (typeof json !== "string") {
21392
+ return fallback;
21393
+ }
21394
+ return json;
21395
+ } catch (error) {
21396
+ onError?.(error);
21397
+ return fallback;
21398
+ }
21399
+ };
21400
+ exports2.quietStringify = quietStringify;
21401
+ }
21402
+ });
21403
+
21404
+ // node_modules/quiet-json-parser/lib/index.js
21405
+ var require_lib3 = __commonJS({
21406
+ "node_modules/quiet-json-parser/lib/index.js"(exports2) {
21407
+ "use strict";
21408
+ Object.defineProperty(exports2, "__esModule", { value: true });
21409
+ exports2.quietStringify = exports2.quietParse = exports2.QuietJsonParserValidateError = exports2.QuietJsonParserError = void 0;
21410
+ var errors_1 = require_errors4();
21411
+ Object.defineProperty(exports2, "QuietJsonParserError", { enumerable: true, get: function() {
21412
+ return errors_1.QuietJsonParserError;
21413
+ } });
21414
+ Object.defineProperty(exports2, "QuietJsonParserValidateError", { enumerable: true, get: function() {
21415
+ return errors_1.QuietJsonParserValidateError;
21416
+ } });
21417
+ var parse_1 = require_parse();
21418
+ Object.defineProperty(exports2, "quietParse", { enumerable: true, get: function() {
21419
+ return parse_1.quietParse;
21420
+ } });
21421
+ var stringify_1 = require_stringify();
21422
+ Object.defineProperty(exports2, "quietStringify", { enumerable: true, get: function() {
21423
+ return stringify_1.quietStringify;
21424
+ } });
21425
+ }
21426
+ });
21427
+
21428
+ // node_modules/aws-lambda-secret-fetcher/lib/core/secret-response.js
21429
+ var require_secret_response = __commonJS({
21430
+ "node_modules/aws-lambda-secret-fetcher/lib/core/secret-response.js"(exports2) {
21431
+ "use strict";
21432
+ Object.defineProperty(exports2, "__esModule", { value: true });
21433
+ exports2.readSecretValue = void 0;
21434
+ var quiet_json_parser_1 = require_lib3();
21435
+ var errors_1 = require_errors2();
21436
+ var STANDARD_BASE64 = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
21437
+ var INVALID_SECRET_RESPONSE = "Invalid secret response format";
21438
+ var readSecretValue = (raw) => {
21439
+ if (!isSecretResponse(raw)) {
21440
+ throw new errors_1.SecretFetcherResponseError(INVALID_SECRET_RESPONSE);
21441
+ }
21442
+ if ("SecretString" in raw) {
21443
+ return (0, quiet_json_parser_1.quietParse)(raw.SecretString, raw.SecretString);
21444
+ }
21445
+ return decodeSecretBinary(raw.SecretBinary);
21446
+ };
21447
+ exports2.readSecretValue = readSecretValue;
21448
+ var secretFieldKind = (record, key) => {
21449
+ if (!Object.prototype.hasOwnProperty.call(record, key)) {
21450
+ return "absent";
21451
+ }
21452
+ const field = record[key];
21453
+ if (typeof field !== "string" || field.length === 0) {
21454
+ return "invalid";
21455
+ }
21456
+ return "string";
21457
+ };
21458
+ var isSecretResponse = (value) => {
21459
+ if (typeof value !== "object" || value === null)
21460
+ return false;
21461
+ const record = value;
21462
+ if (typeof record.Name !== "string" || typeof record.ARN !== "string") {
21463
+ return false;
21464
+ }
21465
+ if (record.VersionId !== void 0 && typeof record.VersionId !== "string") {
21466
+ return false;
21467
+ }
21468
+ const secretString = secretFieldKind(record, "SecretString");
21469
+ const secretBinary = secretFieldKind(record, "SecretBinary");
21470
+ const hasString = secretString === "string" && secretBinary === "absent";
21471
+ const hasBinary = secretBinary === "string" && secretString === "absent";
21472
+ return hasString || hasBinary;
21473
+ };
21474
+ var isStandardBase64 = (encoded) => STANDARD_BASE64.test(encoded);
21475
+ var decodeSecretBinary = (encoded) => {
21476
+ if (!isStandardBase64(encoded)) {
21477
+ throw new errors_1.SecretFetcherBinaryError("Invalid secret binary encoding");
21478
+ }
21479
+ return Uint8Array.from(Buffer.from(encoded, "base64"));
21480
+ };
21481
+ }
21482
+ });
21483
+
21484
+ // node_modules/aws-lambda-secret-fetcher/lib/get-secret-value.js
21485
+ var require_get_secret_value = __commonJS({
21486
+ "node_modules/aws-lambda-secret-fetcher/lib/get-secret-value.js"(exports2) {
21487
+ "use strict";
21488
+ Object.defineProperty(exports2, "__esModule", { value: true });
21489
+ exports2.secretFetcher = void 0;
21490
+ var fetch_retrier_1 = require_lib();
21491
+ var extension_http_1 = require_extension_http();
21492
+ var secret_response_1 = require_secret_response();
21493
+ var EXTENSION_NOT_READY_STATUS = 400;
21494
+ var getSecretValue = async (name, options = {}) => {
21495
+ const { extensionHttpPort, timeoutMs = 2e3, retries = 3, baseBackoffMs = 300 } = options;
21496
+ const port = (0, extension_http_1.resolveExtensionHttpPort)(extensionHttpPort);
21497
+ const sessionToken = (0, extension_http_1.resolveAwsSessionToken)();
21498
+ const url = `http://localhost:${port}/secretsmanager/get?secretId=${encodeURIComponent(name)}`;
21499
+ const requestOptions = {
21500
+ headers: {
21501
+ "X-Aws-Parameters-Secrets-Token": sessionToken
21502
+ },
21503
+ retries,
21504
+ timeoutMs,
21505
+ baseBackoffMs,
21506
+ shouldRetry: (res, body) => {
21507
+ if ((0, fetch_retrier_1.defaultShouldRetry)(res, body)) {
21508
+ return true;
21509
+ }
21510
+ if (res.status === EXTENSION_NOT_READY_STATUS && /not\s+ready.*traffic/i.test(body)) {
21511
+ return true;
21512
+ }
21513
+ return false;
21514
+ }
21515
+ };
21516
+ const response = await (0, fetch_retrier_1.fetchRetrier)(url, requestOptions);
21517
+ const raw = await response.json();
21518
+ return (0, secret_response_1.readSecretValue)(raw);
21519
+ };
21520
+ exports2.secretFetcher = {
21521
+ getSecretValue
21522
+ };
21523
+ }
21524
+ });
21525
+
21526
+ // node_modules/aws-lambda-secret-fetcher/lib/index.js
21527
+ var require_lib4 = __commonJS({
21528
+ "node_modules/aws-lambda-secret-fetcher/lib/index.js"(exports2) {
21529
+ "use strict";
21530
+ Object.defineProperty(exports2, "__esModule", { value: true });
21531
+ exports2.secretFetcher = exports2.SecretFetcherSessionTokenError = exports2.SecretFetcherResponseError = exports2.SecretFetcherPortError = exports2.SecretFetcherError = exports2.SecretFetcherBinaryError = void 0;
21532
+ var errors_1 = require_errors2();
21533
+ Object.defineProperty(exports2, "SecretFetcherBinaryError", { enumerable: true, get: function() {
21534
+ return errors_1.SecretFetcherBinaryError;
21535
+ } });
21536
+ Object.defineProperty(exports2, "SecretFetcherError", { enumerable: true, get: function() {
21537
+ return errors_1.SecretFetcherError;
21538
+ } });
21539
+ Object.defineProperty(exports2, "SecretFetcherPortError", { enumerable: true, get: function() {
21540
+ return errors_1.SecretFetcherPortError;
21541
+ } });
21542
+ Object.defineProperty(exports2, "SecretFetcherResponseError", { enumerable: true, get: function() {
21543
+ return errors_1.SecretFetcherResponseError;
21544
+ } });
21545
+ Object.defineProperty(exports2, "SecretFetcherSessionTokenError", { enumerable: true, get: function() {
21546
+ return errors_1.SecretFetcherSessionTokenError;
21547
+ } });
21548
+ var get_secret_value_1 = require_get_secret_value();
21549
+ Object.defineProperty(exports2, "secretFetcher", { enumerable: true, get: function() {
21550
+ return get_secret_value_1.secretFetcher;
21551
+ } });
21552
+ }
21553
+ });
21554
+
21222
21555
  // src/funcs/auto-start-prevent.lambda.ts
21223
21556
  var auto_start_prevent_lambda_exports = {};
21224
21557
  __export(auto_start_prevent_lambda_exports, {
@@ -24745,9 +25078,10 @@ var DEFAULT_CONFIG = {
24745
25078
  var import_client_rds = require("@aws-sdk/client-rds");
24746
25079
  var import_web_api = __toESM(require_dist5());
24747
25080
  var import_aws_lambda_secret_fetcher = __toESM(require_lib4());
24748
- var import_strict_env_resolver = __toESM(require_lib5());
25081
+ var import_strict_env_resolver = __toESM(require_lib2());
24749
25082
 
24750
25083
  // src/funcs/auto-start-prevent.predicates.ts
25084
+ var WAIT_INTERVAL_MINUTES = 5;
24751
25085
  var TRANSITIONAL_STATUSES = /* @__PURE__ */ new Set([
24752
25086
  "starting",
24753
25087
  "configuring-enhanced-monitoring",
@@ -24794,7 +25128,7 @@ var isDbInstanceAutoStart = (detailType, detail) => detailType === "RDS DB Insta
24794
25128
  var isDbClusterAutoStart = (detailType, detail) => detailType === "RDS DB Cluster Event" && detail.SourceType === "CLUSTER" && detail.EventID === "RDS-EVENT-0153";
24795
25129
  var waitStrategyUntilStable = (state) => {
24796
25130
  if (isTransitionalStatus(state.status)) {
24797
- return { shouldContinue: true, delay: { minutes: 5 } };
25131
+ return { shouldContinue: true, delay: { minutes: WAIT_INTERVAL_MINUTES } };
24798
25132
  }
24799
25133
  return { shouldContinue: false };
24800
25134
  };
@@ -24803,7 +25137,7 @@ var waitStrategyUntilStopped = (state) => {
24803
25137
  return { shouldContinue: false };
24804
25138
  }
24805
25139
  if (isTransitionalStatus(state.status)) {
24806
- return { shouldContinue: true, delay: { minutes: 5 } };
25140
+ return { shouldContinue: true, delay: { minutes: WAIT_INTERVAL_MINUTES } };
24807
25141
  }
24808
25142
  throw new Error(`Unexpected status while waiting for stop: ${state.status}`);
24809
25143
  };
@@ -24883,13 +25217,18 @@ var processAutoStartPrevent = async (input, context) => {
24883
25217
  const { event, params } = normalizeInput(input);
24884
25218
  const { detail, "detail-type": detailType } = event;
24885
25219
  const slackSecretName = import_strict_env_resolver.StrictEnvResolver.resolve("SLACK_SECRET_NAME", import_strict_env_resolver.StrictEnvType.String, {
24886
- trim: true
24887
- });
24888
- const slackSecretValue = await context.step("fetch-slack-secret", async () => {
24889
- return import_aws_lambda_secret_fetcher.secretFetcher.getSecretValue(slackSecretName);
25220
+ trim: true,
25221
+ default: ""
24890
25222
  });
24891
- if (!isSlackSecret(slackSecretValue)) {
24892
- throw new Error("Slack secret must be JSON with non-empty token and channel.");
25223
+ let slackSecret;
25224
+ if (slackSecretName.length > 0) {
25225
+ const slackSecretValue = await context.step("fetch-slack-secret", async () => {
25226
+ return import_aws_lambda_secret_fetcher.secretFetcher.getSecretValue(slackSecretName);
25227
+ });
25228
+ if (!isSlackSecret(slackSecretValue)) {
25229
+ throw new Error("Slack secret must be JSON with non-empty token and channel.");
25230
+ }
25231
+ slackSecret = slackSecretValue;
24893
25232
  }
24894
25233
  const isInstance = isDbInstanceAutoStart(detailType, detail);
24895
25234
  const isCluster = isDbClusterAutoStart(detailType, detail);
@@ -25006,18 +25345,21 @@ var processAutoStartPrevent = async (input, context) => {
25006
25345
  throw new Error(`DB status is not stopped after processing: ${finalStatus}`);
25007
25346
  }
25008
25347
  const { region, account } = parseRdsSourceArn(detail.SourceArn);
25009
- const client = new import_web_api.WebClient(slackSecretValue.token);
25010
- await context.step("post-slack-messages", async () => {
25011
- return client.chat.postMessage(
25012
- buildSlackStopNotification({
25013
- channel: slackSecretValue.channel,
25014
- sourceType: detail.SourceType,
25015
- sourceIdentifier: detail.SourceIdentifier,
25016
- account,
25017
- region
25018
- })
25019
- );
25020
- });
25348
+ if (slackSecret !== void 0) {
25349
+ const channel = slackSecret.channel;
25350
+ const client = new import_web_api.WebClient(slackSecret.token);
25351
+ await context.step("post-slack-messages", async () => {
25352
+ return client.chat.postMessage(
25353
+ buildSlackStopNotification({
25354
+ channel,
25355
+ sourceType: detail.SourceType,
25356
+ sourceIdentifier: detail.SourceIdentifier,
25357
+ account,
25358
+ region
25359
+ })
25360
+ );
25361
+ });
25362
+ }
25021
25363
  return buildStoppedResult({
25022
25364
  finalStatus,
25023
25365
  account,