@garydevenay/emporion 0.0.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.
Files changed (102) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +173 -0
  3. package/dist/src/cli.d.ts +7 -0
  4. package/dist/src/cli.js +2101 -0
  5. package/dist/src/cli.js.map +1 -0
  6. package/dist/src/config.d.ts +2 -0
  7. package/dist/src/config.js +41 -0
  8. package/dist/src/config.js.map +1 -0
  9. package/dist/src/demo.d.ts +1 -0
  10. package/dist/src/demo.js +140 -0
  11. package/dist/src/demo.js.map +1 -0
  12. package/dist/src/did.d.ts +13 -0
  13. package/dist/src/did.js +155 -0
  14. package/dist/src/did.js.map +1 -0
  15. package/dist/src/errors.d.ts +23 -0
  16. package/dist/src/errors.js +25 -0
  17. package/dist/src/errors.js.map +1 -0
  18. package/dist/src/handshake.d.ts +9 -0
  19. package/dist/src/handshake.js +131 -0
  20. package/dist/src/handshake.js.map +1 -0
  21. package/dist/src/identity.d.ts +17 -0
  22. package/dist/src/identity.js +105 -0
  23. package/dist/src/identity.js.map +1 -0
  24. package/dist/src/index.d.ts +5 -0
  25. package/dist/src/index.js +5 -0
  26. package/dist/src/index.js.map +1 -0
  27. package/dist/src/logger.d.ts +11 -0
  28. package/dist/src/logger.js +41 -0
  29. package/dist/src/logger.js.map +1 -0
  30. package/dist/src/persistent-agent.d.ts +2 -0
  31. package/dist/src/persistent-agent.js +24 -0
  32. package/dist/src/persistent-agent.js.map +1 -0
  33. package/dist/src/protocol/company.d.ts +36 -0
  34. package/dist/src/protocol/company.js +211 -0
  35. package/dist/src/protocol/company.js.map +1 -0
  36. package/dist/src/protocol/contracts.d.ts +119 -0
  37. package/dist/src/protocol/contracts.js +404 -0
  38. package/dist/src/protocol/contracts.js.map +1 -0
  39. package/dist/src/protocol/credential-reference.d.ts +71 -0
  40. package/dist/src/protocol/credential-reference.js +136 -0
  41. package/dist/src/protocol/credential-reference.js.map +1 -0
  42. package/dist/src/protocol/dissemination.d.ts +47 -0
  43. package/dist/src/protocol/dissemination.js +111 -0
  44. package/dist/src/protocol/dissemination.js.map +1 -0
  45. package/dist/src/protocol/envelope.d.ts +71 -0
  46. package/dist/src/protocol/envelope.js +203 -0
  47. package/dist/src/protocol/envelope.js.map +1 -0
  48. package/dist/src/protocol/identity.d.ts +18 -0
  49. package/dist/src/protocol/identity.js +143 -0
  50. package/dist/src/protocol/identity.js.map +1 -0
  51. package/dist/src/protocol/index.d.ts +22 -0
  52. package/dist/src/protocol/index.js +12 -0
  53. package/dist/src/protocol/index.js.map +1 -0
  54. package/dist/src/protocol/market.d.ts +96 -0
  55. package/dist/src/protocol/market.js +293 -0
  56. package/dist/src/protocol/market.js.map +1 -0
  57. package/dist/src/protocol/messaging.d.ts +87 -0
  58. package/dist/src/protocol/messaging.js +296 -0
  59. package/dist/src/protocol/messaging.js.map +1 -0
  60. package/dist/src/protocol/repository.d.ts +87 -0
  61. package/dist/src/protocol/repository.js +651 -0
  62. package/dist/src/protocol/repository.js.map +1 -0
  63. package/dist/src/protocol/resolution.d.ts +86 -0
  64. package/dist/src/protocol/resolution.js +305 -0
  65. package/dist/src/protocol/resolution.js.map +1 -0
  66. package/dist/src/protocol/shared.d.ts +14 -0
  67. package/dist/src/protocol/shared.js +45 -0
  68. package/dist/src/protocol/shared.js.map +1 -0
  69. package/dist/src/protocol/versioning.d.ts +21 -0
  70. package/dist/src/protocol/versioning.js +69 -0
  71. package/dist/src/protocol/versioning.js.map +1 -0
  72. package/dist/src/storage.d.ts +36 -0
  73. package/dist/src/storage.js +156 -0
  74. package/dist/src/storage.js.map +1 -0
  75. package/dist/src/topics.d.ts +3 -0
  76. package/dist/src/topics.js +27 -0
  77. package/dist/src/topics.js.map +1 -0
  78. package/dist/src/transport.d.ts +114 -0
  79. package/dist/src/transport.js +291 -0
  80. package/dist/src/transport.js.map +1 -0
  81. package/dist/src/types.d.ts +95 -0
  82. package/dist/src/types.js +2 -0
  83. package/dist/src/types.js.map +1 -0
  84. package/dist/test/cli.test.d.ts +1 -0
  85. package/dist/test/cli.test.js +122 -0
  86. package/dist/test/cli.test.js.map +1 -0
  87. package/dist/test/economy.test.d.ts +1 -0
  88. package/dist/test/economy.test.js +661 -0
  89. package/dist/test/economy.test.js.map +1 -0
  90. package/dist/test/helpers.d.ts +12 -0
  91. package/dist/test/helpers.js +57 -0
  92. package/dist/test/helpers.js.map +1 -0
  93. package/dist/test/integration.test.d.ts +1 -0
  94. package/dist/test/integration.test.js +287 -0
  95. package/dist/test/integration.test.js.map +1 -0
  96. package/dist/test/protocol.test.d.ts +1 -0
  97. package/dist/test/protocol.test.js +448 -0
  98. package/dist/test/protocol.test.js.map +1 -0
  99. package/dist/test/unit.test.d.ts +1 -0
  100. package/dist/test/unit.test.js +87 -0
  101. package/dist/test/unit.test.js.map +1 -0
  102. package/package.json +60 -0
@@ -0,0 +1,448 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdtemp } from "node:fs/promises";
3
+ import os from "node:os";
4
+ import path from "node:path";
5
+ import test from "node:test";
6
+ import { Protocol } from "../src/index.js";
7
+ import { loadIdentityMaterial } from "../src/identity.js";
8
+ import { createTempDir, removeTempDir } from "./helpers.js";
9
+ function createSigner(identity) {
10
+ return {
11
+ did: identity.agentIdentity.did,
12
+ publicKey: identity.transportKeyPair.publicKey,
13
+ secretKey: identity.transportKeyPair.secretKey
14
+ };
15
+ }
16
+ function now() {
17
+ return new Date().toISOString();
18
+ }
19
+ test("agent did:peer profile events validate and signatures verify", async () => {
20
+ const tempDir = await createTempDir("emporion-protocol-agent-");
21
+ try {
22
+ const identity = await loadIdentityMaterial(tempDir, "aa".repeat(32));
23
+ const signer = createSigner(identity);
24
+ const envelope = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
25
+ objectKind: "agent-profile",
26
+ objectId: identity.agentIdentity.did,
27
+ eventKind: "agent-profile.created",
28
+ actorDid: identity.agentIdentity.did,
29
+ subjectId: identity.agentIdentity.did,
30
+ issuedAt: now(),
31
+ payload: {
32
+ displayName: "Agent A",
33
+ bio: "Builds markets."
34
+ }
35
+ }), signer);
36
+ const shape = Protocol.validateEnvelopeShape(envelope);
37
+ assert.equal(shape.ok, true);
38
+ assert.equal(envelope.protocol, "emporion.identity");
39
+ assert.equal(envelope.version, "1.0");
40
+ await Protocol.verifyProtocolEnvelopeSignature(envelope);
41
+ const state = Protocol.applyAgentProfileEvent(undefined, envelope);
42
+ assert.equal(state.did, identity.agentIdentity.did);
43
+ assert.equal(state.displayName, "Agent A");
44
+ }
45
+ finally {
46
+ await removeTempDir(tempDir);
47
+ }
48
+ });
49
+ test("company DID is deterministic from genesis and stable on replay", async () => {
50
+ const tempDir = await createTempDir("emporion-protocol-company-");
51
+ try {
52
+ const identity = await loadIdentityMaterial(tempDir, "bb".repeat(32));
53
+ const signer = createSigner(identity);
54
+ const issuedAt = "2026-03-07T12:00:00.000Z";
55
+ const payload = {
56
+ name: "Emporion Labs",
57
+ initialOwners: [identity.agentIdentity.did]
58
+ };
59
+ const companyDid = Protocol.deriveCompanyDidFromGenesis({
60
+ actorDid: identity.agentIdentity.did,
61
+ issuedAt,
62
+ payload
63
+ });
64
+ const envelope = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
65
+ objectKind: "company",
66
+ objectId: companyDid,
67
+ eventKind: "company.genesis",
68
+ actorDid: identity.agentIdentity.did,
69
+ subjectId: companyDid,
70
+ issuedAt,
71
+ payload: payload
72
+ }), signer);
73
+ const first = Protocol.applyCompanyEvent(undefined, envelope);
74
+ const second = Protocol.applyCompanyEvent(undefined, envelope);
75
+ assert.equal(first.companyDid, companyDid);
76
+ assert.equal(second.companyDid, companyDid);
77
+ }
78
+ finally {
79
+ await removeTempDir(tempDir);
80
+ }
81
+ });
82
+ test("unauthorized company actions fail and role grant/revoke ordering is enforced", async () => {
83
+ const tempDir = await createTempDir("emporion-protocol-auth-");
84
+ try {
85
+ const ownerIdentity = await loadIdentityMaterial(tempDir, "cc".repeat(32));
86
+ const operatorIdentity = await loadIdentityMaterial(path.join(tempDir, "operator"), "dd".repeat(32));
87
+ const outsiderIdentity = await loadIdentityMaterial(path.join(tempDir, "outsider"), "ee".repeat(32));
88
+ const ownerSigner = createSigner(ownerIdentity);
89
+ const operatorSigner = createSigner(operatorIdentity);
90
+ const outsiderSigner = createSigner(outsiderIdentity);
91
+ const issuedAt = "2026-03-07T12:00:00.000Z";
92
+ const companyDid = Protocol.deriveCompanyDidFromGenesis({
93
+ actorDid: ownerIdentity.agentIdentity.did,
94
+ issuedAt,
95
+ payload: {
96
+ name: "Emporion Co",
97
+ initialOwners: [ownerIdentity.agentIdentity.did]
98
+ }
99
+ });
100
+ const genesis = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
101
+ objectKind: "company",
102
+ objectId: companyDid,
103
+ eventKind: "company.genesis",
104
+ actorDid: ownerIdentity.agentIdentity.did,
105
+ subjectId: companyDid,
106
+ issuedAt,
107
+ payload: {
108
+ name: "Emporion Co",
109
+ initialOwners: [ownerIdentity.agentIdentity.did]
110
+ }
111
+ }), ownerSigner);
112
+ const granted = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
113
+ objectKind: "company",
114
+ objectId: companyDid,
115
+ eventKind: "company.role-granted",
116
+ actorDid: ownerIdentity.agentIdentity.did,
117
+ subjectId: companyDid,
118
+ issuedAt: "2026-03-07T12:01:00.000Z",
119
+ previousEventIds: [genesis.eventId],
120
+ payload: {
121
+ memberDid: operatorIdentity.agentIdentity.did,
122
+ role: "operator"
123
+ }
124
+ }), ownerSigner);
125
+ const companyAfterGenesis = Protocol.applyCompanyEvent(undefined, genesis);
126
+ const companyAfterGrant = Protocol.applyCompanyEvent(companyAfterGenesis, granted);
127
+ assert.deepEqual(companyAfterGrant.roles.operator, [operatorIdentity.agentIdentity.did]);
128
+ const outsiderProfileUpdate = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
129
+ objectKind: "company",
130
+ objectId: companyDid,
131
+ eventKind: "company.profile-updated",
132
+ actorDid: outsiderIdentity.agentIdentity.did,
133
+ subjectId: companyDid,
134
+ issuedAt: "2026-03-07T12:02:00.000Z",
135
+ previousEventIds: [companyAfterGrant.latestEventId],
136
+ payload: { description: "malicious update" }
137
+ }), outsiderSigner);
138
+ await assert.rejects(async () => {
139
+ await Protocol.verifyProtocolEnvelopeSignature(outsiderProfileUpdate);
140
+ Protocol.applyCompanyEvent(companyAfterGrant, outsiderProfileUpdate);
141
+ }, /owner or operator role/i);
142
+ const staleGrant = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
143
+ objectKind: "company",
144
+ objectId: companyDid,
145
+ eventKind: "company.role-granted",
146
+ actorDid: ownerIdentity.agentIdentity.did,
147
+ subjectId: companyDid,
148
+ issuedAt: "2026-03-07T12:03:00.000Z",
149
+ previousEventIds: [genesis.eventId],
150
+ payload: {
151
+ memberDid: outsiderIdentity.agentIdentity.did,
152
+ role: "member"
153
+ }
154
+ }), ownerSigner);
155
+ assert.throws(() => Protocol.applyCompanyEvent(companyAfterGrant, staleGrant), /latest event/i);
156
+ const operatorProfileUpdate = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
157
+ objectKind: "company",
158
+ objectId: companyDid,
159
+ eventKind: "company.profile-updated",
160
+ actorDid: operatorIdentity.agentIdentity.did,
161
+ subjectId: companyDid,
162
+ issuedAt: "2026-03-07T12:04:00.000Z",
163
+ previousEventIds: [companyAfterGrant.latestEventId],
164
+ payload: { description: "operator-approved" }
165
+ }), operatorSigner);
166
+ const updated = Protocol.applyCompanyEvent(companyAfterGrant, operatorProfileUpdate);
167
+ assert.equal(updated.description, "operator-approved");
168
+ }
169
+ finally {
170
+ await removeTempDir(tempDir);
171
+ }
172
+ });
173
+ test("treasury and feedback credential refs reject mismatched subjects, expiry errors, and artifact hash mismatches", async () => {
174
+ const tempDir = await createTempDir("emporion-protocol-cred-");
175
+ try {
176
+ const agentIdentity = await loadIdentityMaterial(tempDir, "ff".repeat(32));
177
+ const otherIdentity = await loadIdentityMaterial(path.join(tempDir, "other"), "11".repeat(32));
178
+ const signer = createSigner(agentIdentity);
179
+ const artifact = {
180
+ invoiceRef: "lnbc1...",
181
+ provider: "custodian-a"
182
+ };
183
+ const attestation = {
184
+ attestationId: "att-1",
185
+ issuerDid: otherIdentity.agentIdentity.did,
186
+ subjectDid: agentIdentity.agentIdentity.did,
187
+ walletAccountId: "acct-1",
188
+ network: "bitcoin",
189
+ currency: "SAT",
190
+ attestedBalanceSats: 50_000,
191
+ attestedAt: "2026-03-07T10:00:00.000Z",
192
+ expiresAt: "2026-03-08T10:00:00.000Z",
193
+ artifactHash: Protocol.createCredentialArtifactHash(artifact)
194
+ };
195
+ Protocol.validateCustodialWalletAttestationRef(attestation);
196
+ Protocol.assertWalletAttestationArtifactMatches(attestation, artifact);
197
+ const invalidAttestation = {
198
+ ...attestation,
199
+ expiresAt: "2026-03-07T09:00:00.000Z"
200
+ };
201
+ assert.throws(() => Protocol.validateCustodialWalletAttestationRef(invalidAttestation), /after attestedAt/i);
202
+ const feedbackRef = {
203
+ credentialId: "cred-1",
204
+ issuerDid: otherIdentity.agentIdentity.did,
205
+ subjectDid: agentIdentity.agentIdentity.did,
206
+ relatedContractId: "contract-1",
207
+ relatedAgreementId: "agreement-1",
208
+ summary: {
209
+ score: 5,
210
+ maxScore: 5,
211
+ headline: "Excellent",
212
+ comment: "Delivered quickly"
213
+ },
214
+ issuedAt: "2026-03-07T10:00:00.000Z",
215
+ artifactHash: Protocol.createCredentialArtifactHash({
216
+ issuerDid: otherIdentity.agentIdentity.did,
217
+ subjectDid: agentIdentity.agentIdentity.did,
218
+ relatedContractId: "contract-1",
219
+ relatedAgreementId: "agreement-1"
220
+ })
221
+ };
222
+ Protocol.validateFeedbackCredentialRef(feedbackRef);
223
+ assert.throws(() => Protocol.assertFeedbackCredentialArtifactMatches(feedbackRef, {
224
+ issuerDid: otherIdentity.agentIdentity.did,
225
+ subjectDid: agentIdentity.agentIdentity.did,
226
+ relatedContractId: "contract-1",
227
+ relatedAgreementId: "different"
228
+ }), /artifact hash mismatch/i);
229
+ const created = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
230
+ objectKind: "agent-profile",
231
+ objectId: agentIdentity.agentIdentity.did,
232
+ eventKind: "agent-profile.created",
233
+ actorDid: agentIdentity.agentIdentity.did,
234
+ subjectId: agentIdentity.agentIdentity.did,
235
+ issuedAt: now(),
236
+ payload: {}
237
+ }), signer);
238
+ const state = Protocol.applyAgentProfileEvent(undefined, created);
239
+ const wrongSubjectEnvelope = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
240
+ objectKind: "agent-profile",
241
+ objectId: agentIdentity.agentIdentity.did,
242
+ eventKind: "agent-profile.wallet-attestation-added",
243
+ actorDid: agentIdentity.agentIdentity.did,
244
+ subjectId: agentIdentity.agentIdentity.did,
245
+ issuedAt: "2026-03-07T11:00:00.000Z",
246
+ previousEventIds: [created.eventId],
247
+ payload: {
248
+ ...attestation,
249
+ subjectDid: otherIdentity.agentIdentity.did
250
+ }
251
+ }), signer);
252
+ assert.throws(() => Protocol.applyAgentProfileEvent(state, wrongSubjectEnvelope), /subject must match/i);
253
+ }
254
+ finally {
255
+ await removeTempDir(tempDir);
256
+ }
257
+ });
258
+ test("market objects enforce valid transitions and agreement creation from accepted negotiations", async () => {
259
+ const productCreated = {
260
+ protocol: "emporion.protocol",
261
+ version: 1,
262
+ objectKind: "product",
263
+ objectId: "product-1",
264
+ eventKind: "product.created",
265
+ eventId: "event-1",
266
+ actorDid: "did:peer:agent-a",
267
+ subjectId: "product-1",
268
+ issuedAt: "2026-03-07T10:00:00.000Z",
269
+ previousEventIds: [],
270
+ payload: {
271
+ marketplaceId: "coding",
272
+ ownerDid: "did:emporion:company:company-a",
273
+ title: "Agent Runtime"
274
+ },
275
+ attachments: [],
276
+ signature: {
277
+ algorithm: "ed25519",
278
+ signerDid: "did:peer:agent-a",
279
+ publicKeyMultibase: "z6Mkwfake",
280
+ value: "fake"
281
+ }
282
+ };
283
+ const product = Protocol.applyProductEvent(undefined, productCreated);
284
+ const published = Protocol.applyProductEvent(product, {
285
+ ...productCreated,
286
+ eventKind: "product.published",
287
+ eventId: "event-2",
288
+ previousEventIds: ["event-1"]
289
+ });
290
+ assert.equal(published.status, "published");
291
+ assert.throws(() => Protocol.applyProductEvent({ ...published, status: "retired" }, {
292
+ ...productCreated,
293
+ eventKind: "product.published",
294
+ eventId: "event-3",
295
+ previousEventIds: ["event-2"]
296
+ }), /retired/i);
297
+ const offerSubmitted = Protocol.applyOfferEvent(undefined, {
298
+ ...productCreated,
299
+ objectKind: "offer",
300
+ objectId: "offer-1",
301
+ subjectId: "offer-1",
302
+ eventKind: "offer.submitted",
303
+ eventId: "offer-event-1",
304
+ payload: {
305
+ marketplaceId: "coding",
306
+ proposerDid: "did:emporion:company:company-a",
307
+ targetObjectId: "request-1",
308
+ paymentTerms: {
309
+ currency: "SAT",
310
+ amountSats: 1000,
311
+ settlementMethod: "lightning"
312
+ }
313
+ }
314
+ });
315
+ const offerAccepted = Protocol.applyOfferEvent(offerSubmitted, {
316
+ ...productCreated,
317
+ objectKind: "offer",
318
+ objectId: "offer-1",
319
+ subjectId: "offer-1",
320
+ eventKind: "offer.accepted",
321
+ eventId: "offer-event-2",
322
+ previousEventIds: ["offer-event-1"],
323
+ payload: {}
324
+ });
325
+ assert.equal(offerAccepted.status, "accepted");
326
+ assert.throws(() => Protocol.applyOfferEvent(offerAccepted, {
327
+ ...productCreated,
328
+ objectKind: "offer",
329
+ objectId: "offer-1",
330
+ subjectId: "offer-1",
331
+ eventKind: "offer.accepted",
332
+ eventId: "offer-event-3",
333
+ previousEventIds: ["offer-event-2"],
334
+ payload: {}
335
+ }), /Only open offers can be accepted/i);
336
+ const agreement = Protocol.applyAgreementEvent(undefined, {
337
+ ...productCreated,
338
+ objectKind: "agreement",
339
+ objectId: "agreement-1",
340
+ subjectId: "agreement-1",
341
+ eventKind: "agreement.created",
342
+ eventId: "agreement-event-1",
343
+ payload: {
344
+ marketplaceId: "coding",
345
+ sourceObjectKind: "offer",
346
+ sourceObjectId: "offer-1",
347
+ counterparties: ["did:emporion:company:company-a", "did:peer:buyer-1"],
348
+ deliverables: ["Deliver runtime package"],
349
+ paymentTerms: {
350
+ currency: "SAT",
351
+ amountSats: 1000,
352
+ settlementMethod: "lightning"
353
+ }
354
+ }
355
+ }, {
356
+ offerStates: new Map([["offer-1", offerAccepted]]),
357
+ bidStates: new Map(),
358
+ listingStates: new Map(),
359
+ requestStates: new Map()
360
+ });
361
+ assert.equal(agreement.status, "active");
362
+ });
363
+ test("protocol repository rebuilds state, accepts legacy envelopes, and rejects unsupported versions", async () => {
364
+ const protocolDir = await mkdtemp(path.join(os.tmpdir(), "emporion-protocol-repo-"));
365
+ const signerDir = await createTempDir("emporion-protocol-repo-signer-");
366
+ try {
367
+ const identity = await loadIdentityMaterial(signerDir, "12".repeat(32));
368
+ const signer = createSigner(identity);
369
+ const repository = await Protocol.ProtocolRepository.create(protocolDir);
370
+ const listingCreated = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
371
+ objectKind: "listing",
372
+ objectId: "listing-1",
373
+ eventKind: "listing.published",
374
+ actorDid: identity.agentIdentity.did,
375
+ subjectId: "listing-1",
376
+ issuedAt: "2026-03-07T12:00:00.000Z",
377
+ payload: {
378
+ marketplaceId: "coding",
379
+ sellerDid: "did:emporion:company:company-a",
380
+ title: "Protocol design",
381
+ paymentTerms: {
382
+ currency: "SAT",
383
+ amountSats: 1_000,
384
+ settlementMethod: "lightning"
385
+ }
386
+ }
387
+ }), signer);
388
+ await repository.appendEnvelope(listingCreated);
389
+ let marketplaceEntries = await repository.listMarketplaceEntries("coding");
390
+ assert.equal(marketplaceEntries.length, 1);
391
+ assert.ok(marketplaceEntries[0]);
392
+ assert.equal(marketplaceEntries[0].objectId, "listing-1");
393
+ const withdrawn = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
394
+ objectKind: "listing",
395
+ objectId: "listing-1",
396
+ eventKind: "listing.withdrawn",
397
+ actorDid: identity.agentIdentity.did,
398
+ subjectId: "listing-1",
399
+ issuedAt: "2026-03-07T12:01:00.000Z",
400
+ previousEventIds: [listingCreated.eventId],
401
+ payload: {}
402
+ }), signer);
403
+ await repository.appendEnvelope(withdrawn);
404
+ marketplaceEntries = await repository.listMarketplaceEntries("coding");
405
+ assert.equal(marketplaceEntries.length, 0);
406
+ await repository.rebuildFromLogs();
407
+ marketplaceEntries = await repository.listMarketplaceEntries("coding");
408
+ assert.equal(marketplaceEntries.length, 0);
409
+ const listingState = await repository.readObjectState("listing", "listing-1");
410
+ assert.ok(listingState && "status" in listingState);
411
+ assert.equal(listingState.status, "withdrawn");
412
+ const legacyListing = Protocol.signProtocolEnvelope(Protocol.createUnsignedEnvelope({
413
+ protocol: Protocol.LEGACY_EMPORION_PROTOCOL,
414
+ version: Protocol.LEGACY_EMPORION_PROTOCOL_VERSION,
415
+ objectKind: "listing",
416
+ objectId: "listing-legacy-1",
417
+ eventKind: "listing.published",
418
+ actorDid: identity.agentIdentity.did,
419
+ subjectId: "listing-legacy-1",
420
+ issuedAt: "2026-03-07T12:02:00.000Z",
421
+ payload: {
422
+ marketplaceId: "ops",
423
+ sellerDid: "did:emporion:company:company-a",
424
+ title: "Legacy listing",
425
+ paymentTerms: {
426
+ currency: "SAT",
427
+ amountSats: 2_000,
428
+ settlementMethod: "lightning"
429
+ }
430
+ }
431
+ }), signer);
432
+ await repository.appendEnvelope(legacyListing);
433
+ const legacyState = await repository.readObjectState("listing", "listing-legacy-1");
434
+ assert.ok(legacyState && "status" in legacyState);
435
+ assert.equal(legacyState.status, "open");
436
+ const unsupportedVersion = {
437
+ ...listingCreated,
438
+ eventId: "bogus",
439
+ version: "2.0"
440
+ };
441
+ await assert.rejects(() => repository.appendEnvelope(unsupportedVersion), /Unsupported protocol version|eventId does not match|format/);
442
+ await repository.close();
443
+ }
444
+ finally {
445
+ await Promise.allSettled([removeTempDir(protocolDir), removeTempDir(signerDir)]);
446
+ }
447
+ });
448
+ //# sourceMappingURL=protocol.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.test.js","sourceRoot":"","sources":["../../test/protocol.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,87 @@
1
+ import { duplexPair } from "node:stream";
2
+ import test from "node:test";
3
+ import assert from "node:assert/strict";
4
+ import { normalizeTransportConfig } from "../src/config.js";
5
+ import { createPeerDid, extractEmporionTransportService, resolveDidDocument } from "../src/did.js";
6
+ import { loadIdentityMaterial } from "../src/identity.js";
7
+ import { performPeerHandshake } from "../src/handshake.js";
8
+ import { getSupportedProtocolDescriptors } from "../src/protocol/index.js";
9
+ import { topicRefToCanonicalString, topicRefToDiscoveryKey } from "../src/topics.js";
10
+ import { createTempDir, removeTempDir } from "./helpers.js";
11
+ test("normalizeTransportConfig applies defaults and validates boundaries", () => {
12
+ const normalized = normalizeTransportConfig({
13
+ dataDir: "./tmp/agent"
14
+ });
15
+ assert.equal(normalized.maxPeers, 64);
16
+ assert.equal(normalized.handshakeTimeoutMs, 10_000);
17
+ assert.equal(normalized.reconnectBackoff.minMs, 250);
18
+ assert.equal(normalized.reconnectBackoff.maxMs, 30_000);
19
+ });
20
+ test("topic helpers are deterministic and canonical", () => {
21
+ const ref = { kind: "marketplace", marketplaceId: "coding" };
22
+ assert.equal(topicRefToCanonicalString(ref), "marketplace:coding");
23
+ assert.deepEqual(topicRefToDiscoveryKey(ref), topicRefToDiscoveryKey(ref));
24
+ });
25
+ test("identity persistence keeps transport keys and DID stable across restarts", async () => {
26
+ const tempDir = await createTempDir("emporion-identity-");
27
+ try {
28
+ const first = await loadIdentityMaterial(tempDir, "ab".repeat(32));
29
+ const second = await loadIdentityMaterial(tempDir, "ab".repeat(32));
30
+ assert.equal(first.agentIdentity.noisePublicKey, second.agentIdentity.noisePublicKey);
31
+ assert.equal(first.agentIdentity.did, second.agentIdentity.did);
32
+ }
33
+ finally {
34
+ await removeTempDir(tempDir);
35
+ }
36
+ });
37
+ test("did:peer documents resolve and expose the Emporion transport service", async () => {
38
+ const noiseKey = "11".repeat(32);
39
+ const keyAgreementKey = "33".repeat(32);
40
+ const controlFeedKey = "22".repeat(32);
41
+ const { did } = createPeerDid(noiseKey, keyAgreementKey, controlFeedKey);
42
+ const resolved = await resolveDidDocument(did);
43
+ const endpoint = extractEmporionTransportService(resolved.didDocument);
44
+ assert.equal(endpoint.noisePublicKey, noiseKey);
45
+ assert.equal(endpoint.controlFeedKey, controlFeedKey);
46
+ });
47
+ test("performPeerHandshake exchanges and validates framed hello payloads", async () => {
48
+ const [left, right] = duplexPair();
49
+ const leftHello = {
50
+ protocolVersion: 1,
51
+ agentDid: "did:peer:2.left",
52
+ capabilities: ["left"],
53
+ supportedProtocols: getSupportedProtocolDescriptors(),
54
+ controlFeedKey: "11".repeat(32),
55
+ joinedTopics: ["marketplace:coding"],
56
+ replication: []
57
+ };
58
+ const rightHello = {
59
+ protocolVersion: 1,
60
+ agentDid: "did:peer:2.right",
61
+ capabilities: ["right"],
62
+ supportedProtocols: getSupportedProtocolDescriptors(),
63
+ controlFeedKey: "22".repeat(32),
64
+ joinedTopics: ["company:emporion"],
65
+ replication: []
66
+ };
67
+ const [receivedByLeft, receivedByRight] = await Promise.all([
68
+ performPeerHandshake(left, leftHello, 2_000),
69
+ performPeerHandshake(right, rightHello, 2_000)
70
+ ]);
71
+ assert.equal(receivedByLeft.agentDid, rightHello.agentDid);
72
+ assert.equal(receivedByRight.agentDid, leftHello.agentDid);
73
+ });
74
+ test("performPeerHandshake times out when the remote peer stays silent", async () => {
75
+ const [left] = duplexPair();
76
+ const hello = {
77
+ protocolVersion: 1,
78
+ agentDid: "did:peer:2.left",
79
+ capabilities: ["left"],
80
+ supportedProtocols: getSupportedProtocolDescriptors(),
81
+ controlFeedKey: "11".repeat(32),
82
+ joinedTopics: [],
83
+ replication: []
84
+ };
85
+ await assert.rejects(() => performPeerHandshake(left, hello, 50), /timed out/i);
86
+ });
87
+ //# sourceMappingURL=unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unit.test.js","sourceRoot":"","sources":["../../test/unit.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@garydevenay/emporion",
3
+ "version": "0.0.1",
4
+ "description": "The peer-to-peer economy for agents",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/garydevenay/emporion.git"
9
+ },
10
+ "homepage": "https://github.com/garydevenay/emporion#readme",
11
+ "bugs": {
12
+ "url": "https://github.com/garydevenay/emporion/issues"
13
+ },
14
+ "type": "module",
15
+ "main": "./dist/src/index.js",
16
+ "types": "./dist/src/index.d.ts",
17
+ "bin": {
18
+ "emporion": "./dist/src/cli.js"
19
+ },
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/src/index.d.ts",
23
+ "import": "./dist/src/index.js"
24
+ }
25
+ },
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "scripts": {
33
+ "build": "tsc -p tsconfig.json",
34
+ "cli": "tsx src/cli.ts",
35
+ "typecheck": "tsc -p tsconfig.json --noEmit",
36
+ "test": "tsx --test test/**/*.test.ts",
37
+ "demo": "tsx src/demo.ts",
38
+ "prepack": "npm run build"
39
+ },
40
+ "engines": {
41
+ "node": ">=25.0.0"
42
+ },
43
+ "dependencies": {
44
+ "bs58": "^6.0.0",
45
+ "corestore": "^7.9.0",
46
+ "did-resolver": "^4.1.0",
47
+ "hyperbee": "^2.27.3",
48
+ "hypercore": "^11.27.7",
49
+ "hyperdht": "^6.29.1",
50
+ "hyperswarm": "^4.17.0",
51
+ "key-did-resolver": "^4.0.0",
52
+ "peer-did-resolver": "^2.0.0",
53
+ "tweetnacl": "^1.0.3"
54
+ },
55
+ "devDependencies": {
56
+ "@types/node": "^24.6.1",
57
+ "tsx": "^4.20.6",
58
+ "typescript": "^5.9.3"
59
+ }
60
+ }