@spine-event-engine/deployment 2.0.0-snapshot.10

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.
@@ -0,0 +1,118 @@
1
+ import { RecordSpec, type StorageFactory } from "@spine-event-engine/storage";
2
+ import { type ApplicationNodeLease } from "@spine-event-engine/proto/generated/spine/deployment/node_discovery_pb.js";
3
+ import { type NodeId } from "@spine-event-engine/proto/generated/spine/server/server_environment_pb.js";
4
+ import { ApplicationNode } from "../discovery/application-node.js";
5
+ /**
6
+ * Stores and reads live application-node leases in one caller-owned storage namespace.
7
+ */
8
+ export declare class LeasedNodeRegistry {
9
+ #private;
10
+ /**
11
+ * Creates a leased node registry over an explicit atomic record storage handle.
12
+ *
13
+ * @param options Supplies the operator-selected storage factory and namespace.
14
+ */
15
+ constructor(options: LeasedNodeRegistryOptions);
16
+ /**
17
+ * Registers one previously absent node lease.
18
+ *
19
+ * @param lease Supplies the node, owning registration identity, and expiry time.
20
+ * @param signal Cancels this cooperative storage mutation.
21
+ * @returns Whether the registration was written.
22
+ */
23
+ register(lease: NodeLease, signal?: AbortSignal): Promise<boolean>;
24
+ /**
25
+ * Updates a lease only when its registration identity still owns the node ID.
26
+ *
27
+ * @param nodeId Supplies the stable node identity.
28
+ * @param registrationId Supplies the opaque owning process identity.
29
+ * @param expiresAt Supplies the renewed expiry in epoch milliseconds.
30
+ * @param signal Cancels this cooperative storage mutation.
31
+ * @returns Whether the owner still held and renewed the lease.
32
+ */
33
+ renew(nodeId: string, registrationId: string, expiresAt: number, signal?: AbortSignal): Promise<boolean>;
34
+ /**
35
+ * Deletes a lease only when its registration identity still owns the node ID.
36
+ *
37
+ * @param nodeId Supplies the stable node identity.
38
+ * @param registrationId Supplies the opaque owning process identity.
39
+ * @param signal Cancels this cooperative storage mutation.
40
+ * @returns Whether the caller's lease was deleted.
41
+ */
42
+ remove(nodeId: string, registrationId: string, signal?: AbortSignal): Promise<boolean>;
43
+ /**
44
+ * Reads one complete validated snapshot of live nodes at a supplied clock time.
45
+ *
46
+ * @param now Supplies epoch milliseconds used for exact expiry filtering.
47
+ * @param signal Cancels this cooperative complete-snapshot read.
48
+ * @returns Every non-expired node after every stored row validates.
49
+ */
50
+ read(now: number, signal?: AbortSignal): Promise<readonly ApplicationNode[]>;
51
+ /**
52
+ * Reads one validated live lease at its exact storage slot.
53
+ *
54
+ * @param nodeId Supplies the stable node identity.
55
+ * @param now Supplies epoch milliseconds for expiry evaluation.
56
+ * @param signal Cancels this cooperative ownership lookup.
57
+ * @returns The live lease, or undefined when absent or expired.
58
+ */
59
+ lookup(nodeId: string, now: number, signal?: AbortSignal): Promise<NodeLease | undefined>;
60
+ /**
61
+ * Deletes one finite batch of expired leases conditionally.
62
+ *
63
+ * @param now Supplies epoch milliseconds used for exact expiry filtering.
64
+ * @param signal Cancels this cooperative finite cleanup pass.
65
+ * @returns The number of rows this pass removed.
66
+ */
67
+ cleanup(now: number, signal?: AbortSignal): Promise<number>;
68
+ /**
69
+ * Joins started operations after fencing this handle once.
70
+ *
71
+ * @returns Completes after every active registry operation settles.
72
+ */
73
+ close(): Promise<void>;
74
+ private requireOpen;
75
+ private start;
76
+ private readAll;
77
+ }
78
+ /**
79
+ * Supplies storage ownership and finite cleanup settings for one registry.
80
+ */
81
+ export interface LeasedNodeRegistryOptions {
82
+ /**
83
+ * Selects the caller-owned storage factory.
84
+ */
85
+ readonly factory: StorageFactory;
86
+ /**
87
+ * Selects the caller-owned logical storage namespace.
88
+ */
89
+ readonly namespace: string;
90
+ /**
91
+ * Limits expired rows considered by one cleanup pass.
92
+ */
93
+ readonly cleanupBatchSize?: number;
94
+ }
95
+ /**
96
+ * Supplies the durable data owned by one registration attempt.
97
+ */
98
+ export interface NodeLease {
99
+ /**
100
+ * Identifies the stable reachable application node.
101
+ */
102
+ readonly node: ApplicationNode;
103
+ /**
104
+ * Identifies the opaque owning application process.
105
+ */
106
+ readonly registrationId: string;
107
+ /**
108
+ * Specifies the epoch-millisecond expiry of this lease.
109
+ */
110
+ readonly expiresAt: number;
111
+ }
112
+ /**
113
+ * Declares the internal persisted lease record layout.
114
+ *
115
+ * @internal
116
+ */
117
+ export declare const leaseRecordSpec: RecordSpec<NodeId, ApplicationNodeLease>;
118
+ //# sourceMappingURL=leased-node-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leased-node-registry.d.ts","sourceRoot":"","sources":["../../src/registry/leased-node-registry.ts"],"names":[],"mappings":"AAgBA,OAAO,EACL,UAAU,EAIV,KAAK,cAAc,EACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,2EAA2E,CAAC;AACnF,OAAO,EAEL,KAAK,MAAM,EACZ,MAAM,2EAA2E,CAAC;AAEnF,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAOnE;;GAEG;AACH,qBAAa,kBAAkB;;IAQ7B;;;;OAIG;gBACS,OAAO,EAAE,yBAAyB;IAwB9C;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAUlE;;;;;;;;OAQG;IACH,KAAK,CACH,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,OAAO,CAAC;IAmBnB;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IActF;;;;;;OAMG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;IAY5E;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAazF;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB3D;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,KAAK;YAeC,OAAO;CAoBtB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IAGxC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IAGxB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,UAAU,CAAC,MAAM,EAAE,oBAAoB,CAOnE,CAAC"}
@@ -0,0 +1,333 @@
1
+ /*
2
+ * Copyright 2026, CodeMatters. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5
+ * in compliance with the License. You may obtain a copy of the License at
6
+ *
7
+ * https://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
10
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11
+ * or implied. See the License for the specific language governing permissions and limitations under
12
+ * the License.
13
+ */
14
+ import { create } from "@bufbuild/protobuf";
15
+ import { TimestampSchema } from "@bufbuild/protobuf/wkt";
16
+ import { RecordSpec, } from "@spine-event-engine/storage";
17
+ import { ApplicationNodeLeaseSchema, } from "@spine-event-engine/proto/generated/spine/deployment/node_discovery_pb.js";
18
+ import { NodeIdSchema, } from "@spine-event-engine/proto/generated/spine/server/server_environment_pb.js";
19
+ import { ApplicationNode } from "../discovery/application-node.js";
20
+ const defaultCleanupBatchSize = 32;
21
+ const maximumCleanupBatchSize = 256;
22
+ const maximumTimestampMilliseconds = 253_402_300_799_999;
23
+ const readPageSize = 256;
24
+ /**
25
+ * Stores and reads live application-node leases in one caller-owned storage namespace.
26
+ */
27
+ export class LeasedNodeRegistry {
28
+ #storage;
29
+ #cleanupBatchSize;
30
+ #closed = false;
31
+ #closing;
32
+ #operations = new Set();
33
+ #cleanupAfter;
34
+ /**
35
+ * Creates a leased node registry over an explicit atomic record storage handle.
36
+ *
37
+ * @param options Supplies the operator-selected storage factory and namespace.
38
+ */
39
+ constructor(options) {
40
+ if (options.namespace.trim().length === 0)
41
+ throw new Error("Lease storage namespace must be non-empty.");
42
+ const cleanupBatchSize = options.cleanupBatchSize ?? defaultCleanupBatchSize;
43
+ if (!Number.isSafeInteger(cleanupBatchSize) ||
44
+ cleanupBatchSize < 1 ||
45
+ cleanupBatchSize > maximumCleanupBatchSize) {
46
+ throw new RangeError(`Lease cleanup batch size must be between 1 and ${String(maximumCleanupBatchSize)}.`);
47
+ }
48
+ this.#storage = options.factory.createRecordStorage({ name: options.namespace, multitenant: false }, leaseRecordSpec);
49
+ if (!this.#storage.atomicCompareAndSet) {
50
+ this.#storage.close();
51
+ throw new Error("Leased node registry requires atomic compare-and-set storage.");
52
+ }
53
+ this.#cleanupBatchSize = cleanupBatchSize;
54
+ }
55
+ /**
56
+ * Registers one previously absent node lease.
57
+ *
58
+ * @param lease Supplies the node, owning registration identity, and expiry time.
59
+ * @param signal Cancels this cooperative storage mutation.
60
+ * @returns Whether the registration was written.
61
+ */
62
+ register(lease, signal) {
63
+ return this.start(async () => {
64
+ signal?.throwIfAborted();
65
+ const record = LeaseRecords.write(lease);
66
+ const result = await this.#storage.compareAndSet(LeaseRecords.id(record), undefined, record);
67
+ signal?.throwIfAborted();
68
+ return result;
69
+ });
70
+ }
71
+ /**
72
+ * Updates a lease only when its registration identity still owns the node ID.
73
+ *
74
+ * @param nodeId Supplies the stable node identity.
75
+ * @param registrationId Supplies the opaque owning process identity.
76
+ * @param expiresAt Supplies the renewed expiry in epoch milliseconds.
77
+ * @param signal Cancels this cooperative storage mutation.
78
+ * @returns Whether the owner still held and renewed the lease.
79
+ */
80
+ renew(nodeId, registrationId, expiresAt, signal) {
81
+ return this.start(async () => {
82
+ signal?.throwIfAborted();
83
+ const id = LeaseRecords.nodeId(nodeId);
84
+ const current = await this.#storage.read(id);
85
+ signal?.throwIfAborted();
86
+ if (current === undefined)
87
+ return false;
88
+ const lease = LeaseRecords.read(current, id);
89
+ if (lease.registrationId !== registrationId)
90
+ return false;
91
+ const result = await this.#storage.compareAndSet(id, current, LeaseRecords.write({ ...lease, expiresAt }));
92
+ signal?.throwIfAborted();
93
+ return result;
94
+ });
95
+ }
96
+ /**
97
+ * Deletes a lease only when its registration identity still owns the node ID.
98
+ *
99
+ * @param nodeId Supplies the stable node identity.
100
+ * @param registrationId Supplies the opaque owning process identity.
101
+ * @param signal Cancels this cooperative storage mutation.
102
+ * @returns Whether the caller's lease was deleted.
103
+ */
104
+ remove(nodeId, registrationId, signal) {
105
+ return this.start(async () => {
106
+ signal?.throwIfAborted();
107
+ const id = LeaseRecords.nodeId(nodeId);
108
+ const current = await this.#storage.read(id);
109
+ signal?.throwIfAborted();
110
+ if (current === undefined || LeaseRecords.read(current, id).registrationId !== registrationId)
111
+ return false;
112
+ const result = await this.#storage.compareAndSet(id, current, undefined);
113
+ signal?.throwIfAborted();
114
+ return result;
115
+ });
116
+ }
117
+ /**
118
+ * Reads one complete validated snapshot of live nodes at a supplied clock time.
119
+ *
120
+ * @param now Supplies epoch milliseconds used for exact expiry filtering.
121
+ * @param signal Cancels this cooperative complete-snapshot read.
122
+ * @returns Every non-expired node after every stored row validates.
123
+ */
124
+ read(now, signal) {
125
+ return this.start(async () => {
126
+ signal?.throwIfAborted();
127
+ LeaseRecords.requireTime(now);
128
+ const leases = (await this.readAll(signal)).map(({ id, record }) => LeaseRecords.read(record, id));
129
+ signal?.throwIfAborted();
130
+ return leases.filter((lease) => lease.expiresAt > now).map((lease) => lease.node);
131
+ });
132
+ }
133
+ /**
134
+ * Reads one validated live lease at its exact storage slot.
135
+ *
136
+ * @param nodeId Supplies the stable node identity.
137
+ * @param now Supplies epoch milliseconds for expiry evaluation.
138
+ * @param signal Cancels this cooperative ownership lookup.
139
+ * @returns The live lease, or undefined when absent or expired.
140
+ */
141
+ lookup(nodeId, now, signal) {
142
+ return this.start(async () => {
143
+ signal?.throwIfAborted();
144
+ LeaseRecords.requireTime(now);
145
+ const id = LeaseRecords.nodeId(nodeId);
146
+ const record = await this.#storage.read(id);
147
+ signal?.throwIfAborted();
148
+ if (record === undefined)
149
+ return undefined;
150
+ const lease = LeaseRecords.read(record, id);
151
+ return lease.expiresAt > now ? lease : undefined;
152
+ });
153
+ }
154
+ /**
155
+ * Deletes one finite batch of expired leases conditionally.
156
+ *
157
+ * @param now Supplies epoch milliseconds used for exact expiry filtering.
158
+ * @param signal Cancels this cooperative finite cleanup pass.
159
+ * @returns The number of rows this pass removed.
160
+ */
161
+ cleanup(now, signal) {
162
+ return this.start(async () => {
163
+ signal?.throwIfAborted();
164
+ LeaseRecords.requireTime(now);
165
+ const records = await this.#storage.queryEntries({
166
+ sort: [{ field: "id" }],
167
+ ...(this.#cleanupAfter === undefined ? {} : { after: this.#cleanupAfter }),
168
+ limit: this.#cleanupBatchSize,
169
+ });
170
+ signal?.throwIfAborted();
171
+ this.#cleanupAfter =
172
+ records.length === 0 ? undefined : LeasePages.continuation(records.at(-1));
173
+ if (records.length < this.#cleanupBatchSize)
174
+ this.#cleanupAfter = undefined;
175
+ const removals = await Promise.all(records.map(async ({ id, record }) => {
176
+ const lease = LeaseRecords.read(record, id);
177
+ return (lease.expiresAt <= now && (await this.#storage.compareAndSet(id, record, undefined)));
178
+ }));
179
+ return removals.filter(Boolean).length;
180
+ });
181
+ }
182
+ /**
183
+ * Joins started operations after fencing this handle once.
184
+ *
185
+ * @returns Completes after every active registry operation settles.
186
+ */
187
+ close() {
188
+ if (this.#closing !== undefined)
189
+ return this.#closing;
190
+ this.#closed = true;
191
+ this.#closing = Promise.allSettled([...this.#operations]).then(() => {
192
+ this.#storage.close();
193
+ });
194
+ return this.#closing;
195
+ }
196
+ requireOpen() {
197
+ if (this.#closed)
198
+ throw new Error("Leased node registry is closed.");
199
+ }
200
+ start(operation) {
201
+ try {
202
+ this.requireOpen();
203
+ }
204
+ catch (error) {
205
+ return Promise.reject(error instanceof Error ? error : new Error(String(error)));
206
+ }
207
+ const pending = operation();
208
+ this.#operations.add(pending);
209
+ void pending.then(() => this.#operations.delete(pending), () => this.#operations.delete(pending));
210
+ return pending;
211
+ }
212
+ async readAll(signal) {
213
+ const records = [];
214
+ let after;
215
+ for (;;) {
216
+ signal?.throwIfAborted();
217
+ const page = await this.#storage.queryEntries({
218
+ sort: [{ field: "id" }],
219
+ ...(after === undefined ? {} : { after }),
220
+ limit: readPageSize,
221
+ });
222
+ signal?.throwIfAborted();
223
+ records.push(...page);
224
+ if (page.length < readPageSize)
225
+ return records;
226
+ const last = page.at(-1);
227
+ if (last === undefined)
228
+ throw new Error("Lease page has no continuation row.");
229
+ after = { values: [{ field: "id", value: last.id }], id: last.id };
230
+ }
231
+ }
232
+ }
233
+ /**
234
+ * Declares the internal persisted lease record layout.
235
+ *
236
+ * @internal
237
+ */
238
+ export const leaseRecordSpec = new RecordSpec({
239
+ recordType: ApplicationNodeLeaseSchema,
240
+ idSchema: NodeIdSchema,
241
+ extractId: (record) => LeaseRecords.id(record),
242
+ });
243
+ const LeaseRecords = Object.freeze({
244
+ id(record) {
245
+ if (!record.nodeId?.value.trim())
246
+ throw new Error("Application node lease record has no node ID.");
247
+ return record.nodeId;
248
+ },
249
+ nodeId(value) {
250
+ if (!value.trim())
251
+ throw new Error("Application node lease record has no node ID.");
252
+ return create(NodeIdSchema, { value });
253
+ },
254
+ read(record, expectedId) {
255
+ const id = this.id(record);
256
+ const endpoint = record.endpoint?.origin;
257
+ const expiresAt = this.milliseconds(record.whenExpires);
258
+ const registrationId = record.registrationId?.value;
259
+ if (expectedId !== undefined && id.value !== expectedId.value)
260
+ throw new Error("Application node lease record is invalid.");
261
+ try {
262
+ if (endpoint === undefined || !Number.isSafeInteger(expiresAt))
263
+ throw Error();
264
+ const node = new ApplicationNode({
265
+ id: id.value,
266
+ endpoint,
267
+ ...(record.endpoint?.tlsServerName === undefined ||
268
+ record.endpoint.tlsServerName.length === 0
269
+ ? {}
270
+ : { tlsServerName: record.endpoint.tlsServerName }),
271
+ });
272
+ this.requireTime(expiresAt);
273
+ if (!registrationId?.trim())
274
+ throw Error();
275
+ return Object.freeze({ node, registrationId, expiresAt });
276
+ }
277
+ catch {
278
+ throw new Error("Application node lease record is invalid.");
279
+ }
280
+ },
281
+ write(lease) {
282
+ this.requireTime(lease.expiresAt);
283
+ if (!lease.registrationId.trim())
284
+ throw new Error("Lease registration identity must be non-empty.");
285
+ const node = new ApplicationNode({
286
+ id: lease.node.id,
287
+ endpoint: lease.node.endpoint,
288
+ ...(lease.node.tlsServerName === undefined
289
+ ? {}
290
+ : { tlsServerName: lease.node.tlsServerName }),
291
+ });
292
+ return create(ApplicationNodeLeaseSchema, {
293
+ nodeId: { value: node.id },
294
+ endpoint: {
295
+ origin: node.endpoint,
296
+ ...(node.tlsServerName === undefined ? {} : { tlsServerName: node.tlsServerName }),
297
+ },
298
+ whenExpires: this.timestamp(lease.expiresAt),
299
+ registrationId: { value: lease.registrationId },
300
+ });
301
+ },
302
+ milliseconds(timestamp) {
303
+ if (timestamp === undefined ||
304
+ timestamp.seconds < 0n ||
305
+ timestamp.nanos < 0 ||
306
+ timestamp.nanos >= 1_000_000_000 ||
307
+ timestamp.nanos % 1_000_000 !== 0) {
308
+ throw new Error("Application node lease record is invalid.");
309
+ }
310
+ const milliseconds = timestamp.seconds * 1000n + BigInt(timestamp.nanos / 1_000_000);
311
+ if (milliseconds > BigInt(maximumTimestampMilliseconds))
312
+ throw new Error("Application node lease record is invalid.");
313
+ return Number(milliseconds);
314
+ },
315
+ timestamp(milliseconds) {
316
+ return create(TimestampSchema, {
317
+ seconds: BigInt(Math.floor(milliseconds / 1_000)),
318
+ nanos: (milliseconds % 1_000) * 1_000_000,
319
+ });
320
+ },
321
+ requireTime(value) {
322
+ if (!Number.isSafeInteger(value) || value < 0 || value > maximumTimestampMilliseconds)
323
+ throw new RangeError("Lease expiry must be within the supported Protobuf Timestamp range.");
324
+ },
325
+ });
326
+ const LeasePages = Object.freeze({
327
+ continuation(entry) {
328
+ if (entry === undefined)
329
+ throw new Error("Lease page has no continuation row.");
330
+ return { values: [{ field: "id", value: entry.id }], id: entry.id };
331
+ },
332
+ });
333
+ //# sourceMappingURL=leased-node-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leased-node-registry.js","sourceRoot":"","sources":["../../src/registry/leased-node-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Exports backend-membership contracts shared by deployment integrations.
3
+ */
4
+ export { BackendMembershipKernel, type BackendMemberClient, type BackendMembershipKernelOptions, } from "../internal/backend-membership-kernel.js";
5
+ //# sourceMappingURL=backend-membership.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-membership.d.ts","sourceRoot":"","sources":["../../src/spi/backend-membership.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,OAAO,EACL,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,8BAA8B,GACpC,MAAM,0CAA0C,CAAC"}
@@ -0,0 +1,18 @@
1
+ /*
2
+ * Copyright 2026, CodeMatters. All rights reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5
+ * in compliance with the License. You may obtain a copy of the License at
6
+ *
7
+ * https://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
10
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11
+ * or implied. See the License for the specific language governing permissions and limitations under
12
+ * the License.
13
+ */
14
+ /**
15
+ * Exports backend-membership contracts shared by deployment integrations.
16
+ */
17
+ export { BackendMembershipKernel, } from "../internal/backend-membership-kernel.js";
18
+ //# sourceMappingURL=backend-membership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-membership.js","sourceRoot":"","sources":["../../src/spi/backend-membership.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;GAEG;AACH,OAAO,EACL,uBAAuB,GAGxB,MAAM,0CAA0C,CAAC"}