@crvouga/mockingbird-service-stripe 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog — @crvouga/mockingbird-service-stripe
2
2
 
3
+ ## 3.5.0 (2026-10-16)
4
+
5
+ ### Features
6
+
7
+ - resolve SQL, routing and writer gaps ([73f97d0](https://github.com/crvouga/mockingbird/commit/73f97d0d2379f44b9131180498f4fab76648fed9))
8
+
3
9
  ## 3.4.0 (2026-10-15)
4
10
 
5
11
  ### Features
@@ -746,9 +746,9 @@ var RepositoryWriter = class {
746
746
  if (!owner || !Number.isSafeInteger(ttlMs) || ttlMs < 1)
747
747
  throw new Error("owner and positive lease duration required");
748
748
  const current = await this.control.read();
749
- if (current && current.value.lease.expiresAt > this.now())
749
+ if (current && !current.value.released && current.value.lease.expiresAt > this.now())
750
750
  throw new Error("repository writer already owned");
751
- if (current && !takeoverExpired)
751
+ if (current && !current.value.released && !takeoverExpired)
752
752
  throw new Error("expired writer requires explicit takeover policy");
753
753
  const lease = {
754
754
  owner,
@@ -764,9 +764,27 @@ var RepositoryWriter = class {
764
764
  return lease;
765
765
  }
766
766
  valid(state, lease) {
767
- if (!state || state.lease.id !== lease.id || state.lease.generation !== lease.generation || state.lease.owner !== lease.owner || state.lease.expiresAt <= this.now())
767
+ if (!state || state.released || state.lease.id !== lease.id || state.lease.generation !== lease.generation || state.lease.owner !== lease.owner || state.lease.expiresAt <= this.now())
768
768
  throw new Error("stale or expired repository writer");
769
769
  }
770
+ /** Release after draining workloads and awaiting the final verified publish.
771
+ * A failed/uncertain storage operation throws; retry with the same lease to
772
+ * discover whether it completed. Never clears the verified recovery pointer.
773
+ */
774
+ async release(lease) {
775
+ const current = await this.control.read();
776
+ if (!current)
777
+ throw new Error("stale or expired repository writer");
778
+ if (current.value.released && current.value.lease.id === lease.id && current.value.lease.generation === lease.generation && current.value.lease.owner === lease.owner)
779
+ return "already-released";
780
+ this.valid(current.value, lease);
781
+ if (!await this.control.compareAndSwap(current.revision, {
782
+ ...current.value,
783
+ released: true
784
+ }))
785
+ throw new Error("writer release conflict");
786
+ return "released";
787
+ }
770
788
  async renew(lease, ttlMs) {
771
789
  if (!Number.isSafeInteger(ttlMs) || ttlMs < 1)
772
790
  throw new Error("positive lease duration required");
@@ -3752,7 +3770,7 @@ async function preflightFleet(config, options) {
3752
3770
  break;
3753
3771
  }
3754
3772
  }
3755
- targets.set(name, { ...target, packageVersion: packageVersion ?? "3.4.0" });
3773
+ targets.set(name, { ...target, packageVersion: packageVersion ?? "3.5.0" });
3756
3774
  } catch (error) {
3757
3775
  throw new Error(`service ${name}: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
3758
3776
  }
@@ -6355,4 +6373,4 @@ export {
6355
6373
  withFleetRun,
6356
6374
  NamespacePool
6357
6375
  };
6358
- //# sourceMappingURL=chunk-XEIHQZPI.js.map
6376
+ //# sourceMappingURL=chunk-6GPNQX6K.js.map