@agentplat/mesh 0.3.0-alpha.1

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,527 @@
1
+ import { compareMeshTimestamps, validateMeshEnvelopeContext, } from '@agentplat/mesh-protocol';
2
+ import { reduceAcceptedMeshEnvelope } from './reducer.js';
3
+ import { DEFAULT_MESH_PEER_LIMITS, assertMeshLogicalTime, assertMeshMessageId, createFrozenRecord, freezePeerState, recordEntries, } from './state.js';
4
+ const emptyEffects = Object.freeze([]);
5
+ /** Additional policy hook that cannot override preprovisioned admission state. */
6
+ export const ALLOW_PREPROVISIONED_MESH_ADMISSION = Object.freeze({
7
+ isPeerAdmitted: () => true,
8
+ });
9
+ /** Verifies one signed envelope before entering the synchronous local boundary. */
10
+ export async function processMeshEnvelope(state, request) {
11
+ assertFrozenSecurityState(state);
12
+ if (!request || typeof request !== 'object') {
13
+ throw new TypeError('Mesh inbound request is required');
14
+ }
15
+ if (state.status !== 'running') {
16
+ return rejection(state, 'peer_not_running');
17
+ }
18
+ const envelope = request.envelope;
19
+ const verifiedAt = request.verifiedAt;
20
+ const receivedAt = request.receivedAt;
21
+ const verifier = request.verifier;
22
+ const resolver = request.resolver;
23
+ const cryptoPolicy = Object.freeze({
24
+ allowedAlgorithms: Object.freeze([
25
+ ...request.cryptoPolicy.allowedAlgorithms,
26
+ ]),
27
+ });
28
+ const admissionPolicy = request.admissionPolicy;
29
+ const crypto = request.crypto;
30
+ const protocolOptions = request.protocolOptions === undefined
31
+ ? undefined
32
+ : Object.freeze({
33
+ ...(request.protocolOptions.limits === undefined
34
+ ? {}
35
+ : {
36
+ limits: Object.freeze({
37
+ ...request.protocolOptions.limits,
38
+ }),
39
+ }),
40
+ });
41
+ const supportedCriticalExtensions = request.supportedCriticalExtensions === undefined
42
+ ? undefined
43
+ : Object.freeze([...request.supportedCriticalExtensions]);
44
+ assertMeshLogicalTime(receivedAt);
45
+ if (receivedAt < state.lastLogicalTime) {
46
+ return rejection(state, 'logical_time_regressed');
47
+ }
48
+ const context = validateMeshEnvelopeContext(envelope, {
49
+ tenantId: state.identity.tenantId,
50
+ meshId: state.identity.meshId,
51
+ peerId: state.identity.peerId,
52
+ receivedAt: verifiedAt,
53
+ ...(supportedCriticalExtensions === undefined
54
+ ? {}
55
+ : { supportedCriticalExtensions }),
56
+ }, protocolOptions);
57
+ if (!context.ok) {
58
+ return rejection(state, contextRejection(context.issues[0]?.code));
59
+ }
60
+ if (context.value.audience.kind !== 'peer' ||
61
+ context.value.audience.peerId !== state.identity.peerId) {
62
+ return rejection(state, 'audience_mismatch');
63
+ }
64
+ let verification;
65
+ try {
66
+ verification = await verifier.verify({
67
+ envelope: context.value,
68
+ resolver,
69
+ policy: cryptoPolicy,
70
+ verifiedAt,
71
+ crypto,
72
+ protocolOptions,
73
+ });
74
+ }
75
+ catch {
76
+ return rejection(state, 'crypto_operation_failed');
77
+ }
78
+ try {
79
+ if (!verification ||
80
+ typeof verification !== 'object' ||
81
+ verification.verified !== true) {
82
+ return rejection(state, verification?.verified === false
83
+ ? verification.code
84
+ : 'crypto_operation_failed');
85
+ }
86
+ }
87
+ catch {
88
+ return rejection(state, 'crypto_operation_failed');
89
+ }
90
+ return processVerifiedMeshEnvelope(state, {
91
+ envelope: verification.envelope,
92
+ verifiedAt,
93
+ receivedAt,
94
+ admissionPolicy,
95
+ ...(supportedCriticalExtensions === undefined
96
+ ? {}
97
+ : { supportedCriticalExtensions }),
98
+ });
99
+ }
100
+ /**
101
+ * Applies scope, admission, replay, idempotency and causality before invoking
102
+ * the reducer exactly once.
103
+ */
104
+ function processVerifiedMeshEnvelope(state, request) {
105
+ assertFrozenSecurityState(state);
106
+ if (!request || typeof request !== 'object') {
107
+ throw new TypeError('Verified Mesh inbound request is required');
108
+ }
109
+ const envelope = request.envelope;
110
+ const verifiedAt = request.verifiedAt;
111
+ const receivedAt = request.receivedAt;
112
+ const admissionPolicy = request.admissionPolicy;
113
+ const supportedCriticalExtensions = request.supportedCriticalExtensions === undefined
114
+ ? undefined
115
+ : Object.freeze([...request.supportedCriticalExtensions]);
116
+ assertMeshLogicalTime(receivedAt);
117
+ if (receivedAt < state.lastLogicalTime) {
118
+ return rejection(state, 'logical_time_regressed');
119
+ }
120
+ if (state.status !== 'running') {
121
+ return rejection(state, 'peer_not_running');
122
+ }
123
+ const context = validateMeshEnvelopeContext(envelope, {
124
+ tenantId: state.identity.tenantId,
125
+ meshId: state.identity.meshId,
126
+ peerId: state.identity.peerId,
127
+ receivedAt: verifiedAt,
128
+ ...(supportedCriticalExtensions === undefined
129
+ ? {}
130
+ : { supportedCriticalExtensions }),
131
+ });
132
+ if (!context.ok) {
133
+ return rejection(state, contextRejection(context.issues[0]?.code));
134
+ }
135
+ const contextualEnvelope = context.value;
136
+ if (contextualEnvelope.audience.kind !== 'peer' ||
137
+ contextualEnvelope.audience.peerId !== state.identity.peerId) {
138
+ return rejection(state, 'audience_mismatch');
139
+ }
140
+ const admission = state.admittedPeers[contextualEnvelope.sender.peerId];
141
+ if (!admission)
142
+ return rejection(state, 'sender_not_admitted');
143
+ if (!admission.instanceIds.includes(contextualEnvelope.sender.instanceId)) {
144
+ return rejection(state, 'sender_instance_not_admitted');
145
+ }
146
+ const admissionExpiry = compareMeshTimestamps(verifiedAt, admission.validUntil);
147
+ if (!admissionExpiry.ok || admissionExpiry.value >= 0) {
148
+ return rejection(state, 'sender_admission_expired');
149
+ }
150
+ let policyAccepted = false;
151
+ try {
152
+ policyAccepted =
153
+ admissionPolicy.isPeerAdmitted({
154
+ localPeer: state.identity,
155
+ senderPeerId: contextualEnvelope.sender.peerId,
156
+ senderInstanceId: contextualEnvelope.sender.instanceId,
157
+ messageType: contextualEnvelope.type,
158
+ }) === true;
159
+ }
160
+ catch {
161
+ policyAccepted = false;
162
+ }
163
+ if (!policyAccepted)
164
+ return rejection(state, 'message_not_authorized');
165
+ const authorityFailure = validateMessageAuthority(state, contextualEnvelope);
166
+ if (authorityFailure)
167
+ return rejection(state, authorityFailure);
168
+ const replay = advanceReplayState(state, contextualEnvelope, receivedAt);
169
+ if ('code' in replay)
170
+ return rejection(state, replay.code);
171
+ const causalityFailure = validateCausality(state, contextualEnvelope, receivedAt);
172
+ if (causalityFailure)
173
+ return rejection(state, causalityFailure);
174
+ const acceptedState = consumeCausation(replay.state, contextualEnvelope);
175
+ const transition = reduceAcceptedMeshEnvelope(acceptedState, contextualEnvelope, receivedAt);
176
+ const effects = freezeEffects(transition.effects);
177
+ return Object.freeze({
178
+ accepted: true,
179
+ envelope: contextualEnvelope,
180
+ state: transition.state,
181
+ effects,
182
+ });
183
+ }
184
+ function validateMessageAuthority(state, envelope) {
185
+ const admission = state.admittedPeers[envelope.sender.peerId];
186
+ switch (envelope.payload.type) {
187
+ case 'peer.hello':
188
+ return envelope.payload.peerCardId !== admission.peerCardId ||
189
+ envelope.payload.cardRevision !== admission.cardRevision ||
190
+ envelope.causationId !== admission.acceptedCardMessageId
191
+ ? 'message_not_authorized'
192
+ : undefined;
193
+ case 'peer.ping':
194
+ return envelope.causationId === undefined
195
+ ? undefined
196
+ : 'message_not_authorized';
197
+ case 'peer.ping_ack':
198
+ return undefined;
199
+ default:
200
+ return 'unsupported_message_type';
201
+ }
202
+ }
203
+ function advanceReplayState(state, envelope, receivedAt) {
204
+ const retainedIds = recordEntries(state.messageIds).filter(([, expiresAt]) => expiresAt > receivedAt);
205
+ if (retainedIds.some(([messageId]) => messageId === envelope.messageId)) {
206
+ return { code: 'message_replayed' };
207
+ }
208
+ if (retainedIds.length >= state.limits.maximumTrackedMessageIds) {
209
+ return { code: 'replay_capacity_exceeded' };
210
+ }
211
+ if (receivedAt >
212
+ Number.MAX_SAFE_INTEGER - state.limits.messageIdRetentionMs) {
213
+ return { code: 'replay_capacity_exceeded' };
214
+ }
215
+ const replayKey = JSON.stringify([
216
+ envelope.sender.peerId,
217
+ envelope.sender.instanceId,
218
+ ]);
219
+ const current = state.replay[replayKey];
220
+ let nextWindow;
221
+ if (!current) {
222
+ nextWindow = Object.freeze({
223
+ highestSequence: envelope.sequence,
224
+ seenOffsets: Object.freeze([0]),
225
+ });
226
+ }
227
+ else if (envelope.sequence > current.highestSequence) {
228
+ const advance = envelope.sequence - current.highestSequence;
229
+ nextWindow = Object.freeze({
230
+ highestSequence: envelope.sequence,
231
+ seenOffsets: Object.freeze([
232
+ 0,
233
+ ...current.seenOffsets
234
+ .map((offset) => offset + advance)
235
+ .filter((offset) => offset < state.limits.replayWindowSize),
236
+ ]),
237
+ });
238
+ }
239
+ else {
240
+ const offset = current.highestSequence - envelope.sequence;
241
+ if (offset >= state.limits.replayWindowSize) {
242
+ return { code: 'sequence_outside_window' };
243
+ }
244
+ if (current.seenOffsets.includes(offset)) {
245
+ return { code: 'message_replayed' };
246
+ }
247
+ nextWindow = Object.freeze({
248
+ highestSequence: current.highestSequence,
249
+ seenOffsets: Object.freeze([...current.seenOffsets, offset].sort((left, right) => left - right)),
250
+ });
251
+ }
252
+ const replay = createFrozenRecord([
253
+ ...recordEntries(state.replay).filter(([key]) => key !== replayKey),
254
+ [replayKey, nextWindow],
255
+ ]);
256
+ const messageIds = createFrozenRecord([
257
+ ...retainedIds,
258
+ [envelope.messageId, receivedAt + state.limits.messageIdRetentionMs],
259
+ ]);
260
+ const activePings = recordEntries(state.pendingPings).filter(([, ping]) => ping.expiresAt > receivedAt);
261
+ const pendingPings = createFrozenRecord(activePings);
262
+ const pendingPreparations = createFrozenRecord(recordEntries(state.pendingPreparations).filter(([, preparation]) => preparation.prepareBy > receivedAt));
263
+ return {
264
+ state: freezePeerState({
265
+ ...state,
266
+ replay,
267
+ messageIds,
268
+ pendingPings,
269
+ pendingPreparations,
270
+ lastLogicalTime: receivedAt,
271
+ }),
272
+ };
273
+ }
274
+ function validateCausality(state, envelope, receivedAt) {
275
+ if (envelope.type !== 'peer.ping_ack')
276
+ return undefined;
277
+ const causationId = envelope.causationId;
278
+ const pending = causationId === undefined ? undefined : state.pendingPings[causationId];
279
+ return !pending ||
280
+ pending.peerId !== envelope.sender.peerId ||
281
+ pending.expiresAt <= receivedAt
282
+ ? 'causation_rejected'
283
+ : undefined;
284
+ }
285
+ function consumeCausation(state, envelope) {
286
+ if (envelope.type !== 'peer.ping_ack')
287
+ return state;
288
+ return freezePeerState({
289
+ ...state,
290
+ pendingPings: createFrozenRecord(recordEntries(state.pendingPings).filter(([messageId]) => messageId !== envelope.causationId)),
291
+ });
292
+ }
293
+ function freezeEffects(effects) {
294
+ if (!Array.isArray(effects)) {
295
+ throw new TypeError('Mesh reducer returned invalid effects');
296
+ }
297
+ return Object.freeze(effects.map((effect) => {
298
+ switch (effect.kind) {
299
+ case 'message.prepare':
300
+ return Object.freeze({
301
+ ...effect,
302
+ intent: Object.freeze({
303
+ ...effect.intent,
304
+ payload: Object.freeze({ ...effect.intent.payload }),
305
+ }),
306
+ });
307
+ case 'message.deliver':
308
+ case 'timer.schedule':
309
+ case 'intake.backpressure':
310
+ return Object.freeze({ ...effect });
311
+ case 'event.emit':
312
+ return Object.freeze({
313
+ ...effect,
314
+ event: Object.freeze({ ...effect.event }),
315
+ });
316
+ default:
317
+ throw new TypeError('Mesh reducer returned unknown effect');
318
+ }
319
+ }));
320
+ }
321
+ function assertFrozenSecurityState(state) {
322
+ if (!state ||
323
+ typeof state !== 'object' ||
324
+ !Object.isFrozen(state) ||
325
+ !Object.isFrozen(state.identity) ||
326
+ !Object.isFrozen(state.admittedPeers) ||
327
+ !Object.isFrozen(state.replay) ||
328
+ !Object.isFrozen(state.messageIds) ||
329
+ !Object.isFrozen(state.pendingPings) ||
330
+ !Object.isFrozen(state.pendingPreparations) ||
331
+ !Object.isFrozen(state.limits) ||
332
+ !Object.isFrozen(state.peers)) {
333
+ throw new TypeError('Mesh inbound state must be an immutable snapshot');
334
+ }
335
+ assertExactKeys(state, [
336
+ 'admittedPeers',
337
+ 'identity',
338
+ 'lastLogicalTime',
339
+ 'limits',
340
+ 'localEventSequence',
341
+ 'messageIds',
342
+ 'peers',
343
+ 'pendingPings',
344
+ 'pendingPreparations',
345
+ 'replay',
346
+ 'status',
347
+ ]);
348
+ if ((state.status !== 'created' &&
349
+ state.status !== 'running' &&
350
+ state.status !== 'stopped') ||
351
+ !Number.isSafeInteger(state.localEventSequence) ||
352
+ state.localEventSequence < 0 ||
353
+ !Number.isSafeInteger(state.lastLogicalTime) ||
354
+ state.lastLogicalTime < 0) {
355
+ throw new TypeError('Mesh inbound lifecycle state is invalid');
356
+ }
357
+ for (const record of [
358
+ state.admittedPeers,
359
+ state.peers,
360
+ state.replay,
361
+ state.messageIds,
362
+ state.pendingPings,
363
+ state.pendingPreparations,
364
+ ]) {
365
+ if (Object.getPrototypeOf(record) !== null) {
366
+ throw new TypeError('Mesh inbound records must have null prototypes');
367
+ }
368
+ }
369
+ for (const [name, value] of Object.entries(state.limits)) {
370
+ if (!Number.isSafeInteger(value) || value < 1) {
371
+ throw new TypeError(`Mesh inbound limit ${name} is invalid`);
372
+ }
373
+ }
374
+ if (state.limits.maximumTrackedMessageIds <
375
+ state.limits.replayWindowSize ||
376
+ state.limits.messageIdRetentionMs <
377
+ DEFAULT_MESH_PEER_LIMITS.messageIdRetentionMs) {
378
+ throw new TypeError('Mesh inbound limits weaken protocol bounds');
379
+ }
380
+ const admittedEntries = Object.entries(state.admittedPeers);
381
+ const maximumReplayKeys = admittedEntries.reduce((total, [, peer]) => total + peer.instanceIds.length, 0);
382
+ if (state.limits.replayWindowSize !==
383
+ DEFAULT_MESH_PEER_LIMITS.replayWindowSize ||
384
+ Object.keys(state.admittedPeers).length >
385
+ state.limits.maximumAdmittedPeers ||
386
+ Object.keys(state.messageIds).length >
387
+ state.limits.maximumTrackedMessageIds ||
388
+ Object.keys(state.pendingPings).length > state.limits.maximumPendingPings ||
389
+ Object.keys(state.pendingPreparations).length >
390
+ state.limits.maximumPendingPings ||
391
+ Object.keys(state.peers).length > admittedEntries.length ||
392
+ Object.keys(state.replay).length > maximumReplayKeys) {
393
+ throw new TypeError('Mesh inbound state exceeds configured bounds');
394
+ }
395
+ for (const [peerId, peer] of admittedEntries) {
396
+ if (!Object.isFrozen(peer) ||
397
+ !Object.isFrozen(peer.instanceIds) ||
398
+ peer.peerId !== peerId ||
399
+ peer.instanceIds.length < 1 ||
400
+ peer.instanceIds.length > state.limits.maximumInstancesPerPeer ||
401
+ new Set(peer.instanceIds).size !== peer.instanceIds.length) {
402
+ throw new TypeError('Mesh admission state must be deeply immutable');
403
+ }
404
+ }
405
+ for (const [peerId, view] of Object.entries(state.peers)) {
406
+ const admission = state.admittedPeers[peerId];
407
+ if (!Object.isFrozen(view) ||
408
+ !admission ||
409
+ view.peerId !== peerId ||
410
+ !admission.instanceIds.includes(view.instanceId) ||
411
+ view.peerCardId !== admission.peerCardId ||
412
+ view.cardRevision !== admission.cardRevision ||
413
+ (view.lastObservedAt !== undefined &&
414
+ (!Number.isSafeInteger(view.lastObservedAt) ||
415
+ view.lastObservedAt < 0 ||
416
+ view.lastObservedAt > state.lastLogicalTime)) ||
417
+ (view.lastResponsiveAt !== undefined &&
418
+ (!Number.isSafeInteger(view.lastResponsiveAt) ||
419
+ view.lastResponsiveAt < 0 ||
420
+ view.lastResponsiveAt > state.lastLogicalTime))) {
421
+ throw new TypeError('Mesh peer views must be deeply immutable');
422
+ }
423
+ }
424
+ for (const [key, window] of Object.entries(state.replay)) {
425
+ let replayPeerId;
426
+ let replayInstanceId;
427
+ try {
428
+ const parsed = JSON.parse(key);
429
+ if (Array.isArray(parsed) &&
430
+ parsed.length === 2 &&
431
+ typeof parsed[0] === 'string' &&
432
+ typeof parsed[1] === 'string' &&
433
+ key === JSON.stringify(parsed)) {
434
+ [replayPeerId, replayInstanceId] = parsed;
435
+ }
436
+ }
437
+ catch {
438
+ // Rejected by the canonical checks below.
439
+ }
440
+ const replayAdmission = replayPeerId === undefined
441
+ ? undefined
442
+ : state.admittedPeers[replayPeerId];
443
+ if (!replayAdmission ||
444
+ replayInstanceId === undefined ||
445
+ !replayAdmission.instanceIds.includes(replayInstanceId) ||
446
+ !Object.isFrozen(window) ||
447
+ !Object.isFrozen(window.seenOffsets) ||
448
+ !Number.isSafeInteger(window.highestSequence) ||
449
+ window.highestSequence < 1 ||
450
+ window.seenOffsets.length < 1 ||
451
+ window.seenOffsets[0] !== 0 ||
452
+ window.seenOffsets.some((offset, index) => !Number.isSafeInteger(offset) ||
453
+ offset < 0 ||
454
+ offset >= state.limits.replayWindowSize ||
455
+ (index > 0 && offset <= window.seenOffsets[index - 1]))) {
456
+ throw new TypeError('Mesh replay state is not canonical');
457
+ }
458
+ }
459
+ for (const [messageId, expiresAt] of Object.entries(state.messageIds)) {
460
+ try {
461
+ assertMeshMessageId(messageId);
462
+ }
463
+ catch {
464
+ throw new TypeError('Mesh message ID state is invalid');
465
+ }
466
+ if (!Number.isSafeInteger(expiresAt) || expiresAt < 0) {
467
+ throw new TypeError('Mesh message ID state is invalid');
468
+ }
469
+ }
470
+ for (const [messageId, ping] of Object.entries(state.pendingPings)) {
471
+ try {
472
+ assertMeshMessageId(messageId);
473
+ }
474
+ catch {
475
+ throw new TypeError('Mesh pending ping state is invalid');
476
+ }
477
+ if (!Object.isFrozen(ping) ||
478
+ ping.messageId !== messageId ||
479
+ !state.admittedPeers[ping.peerId] ||
480
+ !Number.isSafeInteger(ping.expiresAt) ||
481
+ ping.expiresAt < 0) {
482
+ throw new TypeError('Mesh pending ping state is invalid');
483
+ }
484
+ }
485
+ for (const [effectId, preparation] of Object.entries(state.pendingPreparations)) {
486
+ if (!Object.isFrozen(preparation) ||
487
+ preparation.effectId !== effectId ||
488
+ (preparation.type !== 'peer.ping' &&
489
+ preparation.type !== 'peer.ping_ack') ||
490
+ !state.admittedPeers[preparation.audiencePeerId] ||
491
+ preparation.maximumLifetimeMs !== 30_000 ||
492
+ !Number.isSafeInteger(preparation.prepareBy) ||
493
+ preparation.prepareBy < 0) {
494
+ throw new TypeError('Mesh pending preparation state is invalid');
495
+ }
496
+ }
497
+ }
498
+ function assertExactKeys(value, expectedKeys) {
499
+ const actualKeys = Object.keys(value).sort();
500
+ if (actualKeys.length !== expectedKeys.length ||
501
+ actualKeys.some((key, index) => key !== expectedKeys[index])) {
502
+ throw new TypeError('Mesh inbound state contains unsupported fields');
503
+ }
504
+ }
505
+ function contextRejection(code) {
506
+ switch (code) {
507
+ case 'scope_mismatch':
508
+ case 'audience_mismatch':
509
+ case 'invalid_audience':
510
+ case 'message_expired':
511
+ case 'message_from_future':
512
+ case 'unknown_critical_extension':
513
+ case 'unsupported_message_type':
514
+ return code === 'invalid_audience' ? 'audience_mismatch' : code;
515
+ default:
516
+ return 'invalid_envelope';
517
+ }
518
+ }
519
+ function rejection(state, code) {
520
+ return Object.freeze({
521
+ accepted: false,
522
+ code,
523
+ state,
524
+ effects: emptyEffects,
525
+ });
526
+ }
527
+ //# sourceMappingURL=inbound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbound.js","sourceRoot":"","sources":["../src/inbound.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from './contracts.js';
2
+ export { DEFAULT_MESH_PEER_LIMITS, createMeshPeerState } from './state.js';
3
+ export { reduceMeshPeer } from './reducer.js';
4
+ export { ALLOW_PREPROVISIONED_MESH_ADMISSION, processMeshEnvelope, } from './inbound.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,mCAAmC,EACnC,mBAAmB,GACpB,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from './contracts.js';
2
+ export { DEFAULT_MESH_PEER_LIMITS, createMeshPeerState } from './state.js';
3
+ export { reduceMeshPeer } from './reducer.js';
4
+ export { ALLOW_PREPROVISIONED_MESH_ADMISSION, processMeshEnvelope, } from './inbound.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,mCAAmC,EACnC,mBAAmB,GACpB,MAAM,cAAc,CAAC"}