@crvouga/mockingbird-service-brevo 1.10.4 → 1.10.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog — @crvouga/mockingbird-service-brevo
2
2
 
3
+ ## 1.10.6 (2026-11-02)
4
+
5
+ ### Fixes and improvements
6
+
7
+ - compare the admin key in constant time ([2a43141](https://github.com/crvouga/mockingbird/commit/2a43141f50dab41e698c3bbce0c69bf65b40e24e))
8
+
9
+ ## 1.10.5 (2026-11-02)
10
+
11
+ ### Fixes and improvements
12
+
13
+ - stop walkSchema recursing forever on a self-referential $ref ([69464a9](https://github.com/crvouga/mockingbird/commit/69464a9d9e7f468c5e1095125108d4d3d5515431))
14
+ - densify sparse bracket arrays by their written indices ([84a28cb](https://github.com/crvouga/mockingbird/commit/84a28cb182e3d7df91102897f0fc11fca714ba5f))
15
+
3
16
  ## 1.10.4 (2026-11-02)
4
17
 
5
18
  ### Fixes and improvements
@@ -9,7 +9,7 @@ import {
9
9
  parseFaultHeader,
10
10
  resolveAdminPrefix,
11
11
  restoreClock
12
- } from "./chunk-G3XVSD6X.js";
12
+ } from "./chunk-6JMJUSKQ.js";
13
13
 
14
14
  // ../../adapters/node/dist/cli.js
15
15
  import { readFile as readFile5 } from "node:fs/promises";
@@ -3057,7 +3057,7 @@ async function preflightFleet(config, options) {
3057
3057
  break;
3058
3058
  }
3059
3059
  }
3060
- targets.set(name, { ...target, packageVersion: packageVersion ?? "1.10.4" });
3060
+ targets.set(name, { ...target, packageVersion: packageVersion ?? "1.10.6" });
3061
3061
  } catch (error) {
3062
3062
  throw new Error(`service ${name}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
3063
3063
  }
@@ -5011,4 +5011,4 @@ export {
5011
5011
  createServer2 as createServer,
5012
5012
  serveTarget
5013
5013
  };
5014
- //# sourceMappingURL=chunk-WBYRRKNC.js.map
5014
+ //# sourceMappingURL=chunk-4SXB2QSW.js.map
@@ -449,6 +449,7 @@ var parsePath = (rawKey) => {
449
449
  return path;
450
450
  };
451
451
  var isIndex = (segment) => /^(0|[1-9][0-9]*)$/.test(segment);
452
+ var MAX_ARRAY_INDEX = 4294967294;
452
453
  var put = (target, key, value) => {
453
454
  if (key === "__proto__") {
454
455
  Object.defineProperty(target, key, {
@@ -511,8 +512,17 @@ var decodeFormPairs = (pairs) => {
511
512
  var densify = (value) => {
512
513
  if (typeof value === "string")
513
514
  return value;
514
- if (Array.isArray(value))
515
- return value.filter((item) => item !== void 0).map(densify);
515
+ if (Array.isArray(value)) {
516
+ const dense = [];
517
+ for (const key of Object.keys(value)) {
518
+ if (!isIndex(key) || Number(key) > MAX_ARRAY_INDEX)
519
+ continue;
520
+ const item = value[Number(key)];
521
+ if (item !== void 0)
522
+ dense.push(densify(item));
523
+ }
524
+ return dense;
525
+ }
516
526
  const out = {};
517
527
  for (const [key, item] of Object.entries(value))
518
528
  put(out, key, densify(item));
@@ -2610,6 +2620,17 @@ var createNamespaceControls = (options) => {
2610
2620
  };
2611
2621
  };
2612
2622
 
2623
+ // ../core/dist/signing.js
2624
+ var encoder = new TextEncoder();
2625
+ var timingSafeEqual = (a, b) => {
2626
+ if (a.length !== b.length)
2627
+ return false;
2628
+ let diff = 0;
2629
+ for (let i = 0; i < a.length; i++)
2630
+ diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
2631
+ return diff === 0;
2632
+ };
2633
+
2613
2634
  // ../core/dist/surface.js
2614
2635
  var defineMock = (runtime) => runtime;
2615
2636
  var ADMIN_ROUTE_REFERENCE = {
@@ -2728,6 +2749,10 @@ var assertAdminPrefixAvailable = (prefix, paths) => {
2728
2749
  }
2729
2750
  };
2730
2751
  var ADMIN_KEY_HEADER = CONTROL_HEADERS.adminKey;
2752
+ var hasAdminKey = (headers, adminKey) => {
2753
+ const sent = headers.get(ADMIN_KEY_HEADER);
2754
+ return sent !== null && timingSafeEqual(sent, adminKey);
2755
+ };
2731
2756
  var NAMESPACE_HEADER = CONTROL_HEADERS.namespace;
2732
2757
  var ADMIN_DOCS_URL = "https://mockingbird.chrisvouga.dev/docs/admin-controls";
2733
2758
  var ADMIN_CONTROL_PAGES = [
@@ -3201,7 +3226,7 @@ var createControlPlane = (context) => {
3201
3226
  }
3202
3227
  const path = url.pathname.slice(adminPrefix.length) || "/";
3203
3228
  const shell = request.method === "GET" && (path === "/ui" || path === "/ui/");
3204
- if (!shell && context.adminKey !== void 0 && request.headers.get(ADMIN_KEY_HEADER) !== context.adminKey) {
3229
+ if (!shell && context.adminKey !== void 0 && !hasAdminKey(request.headers, context.adminKey)) {
3205
3230
  return adminError(401, `missing or wrong ${ADMIN_KEY_HEADER}`);
3206
3231
  }
3207
3232
  for (const route of routes) {
@@ -3962,7 +3987,7 @@ var stateAdminRoutes = (routes) => {
3962
3987
  };
3963
3988
 
3964
3989
  // ../core/dist/version.js
3965
- var PACKAGE_VERSION = true ? "1.10.4" : UNRELEASED_VERSION;
3990
+ var PACKAGE_VERSION = true ? "1.10.6" : UNRELEASED_VERSION;
3966
3991
 
3967
3992
  // ../core/dist/webhooks.js
3968
3993
  var json4 = (status, body) => new Response(JSON.stringify(body), {
@@ -4941,7 +4966,7 @@ var createRuntime = (options) => {
4941
4966
  throw error2;
4942
4967
  }
4943
4968
  const rewinds = at !== void 0 && selectedBranch === "main" && MUTATING_METHODS.has(request.method);
4944
- if ((requested || rewinds) && options.adminKey !== void 0 && request.headers.get(ADMIN_KEY_HEADER) !== options.adminKey)
4969
+ if ((requested || rewinds) && options.adminKey !== void 0 && !hasAdminKey(request.headers, options.adminKey))
4945
4970
  return refuse(401, `control headers need ${ADMIN_KEY_HEADER}`);
4946
4971
  controls.ensure(namespace);
4947
4972
  if (requested?.restore !== void 0 && !snapshotStore.get(namespace, requested.restore))
@@ -5440,4 +5465,4 @@ export {
5440
5465
  BREVO_NAMESPACE,
5441
5466
  BrevoAPI
5442
5467
  };
5443
- //# sourceMappingURL=chunk-G3XVSD6X.js.map
5468
+ //# sourceMappingURL=chunk-6JMJUSKQ.js.map