@snap-protocol/core 0.1.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.
Files changed (141) hide show
  1. package/dist/agent/AgentCardBuilder.d.ts +26 -0
  2. package/dist/agent/AgentCardBuilder.d.ts.map +1 -0
  3. package/dist/agent/AgentCardBuilder.js +99 -0
  4. package/dist/agent/AgentCardBuilder.js.map +1 -0
  5. package/dist/agent/SnapAgent.d.ts +61 -0
  6. package/dist/agent/SnapAgent.d.ts.map +1 -0
  7. package/dist/agent/SnapAgent.js +245 -0
  8. package/dist/agent/SnapAgent.js.map +1 -0
  9. package/dist/agent/index.d.ts +4 -0
  10. package/dist/agent/index.d.ts.map +1 -0
  11. package/dist/agent/index.js +3 -0
  12. package/dist/agent/index.js.map +1 -0
  13. package/dist/crypto/Canonicalizer.d.ts +9 -0
  14. package/dist/crypto/Canonicalizer.d.ts.map +1 -0
  15. package/dist/crypto/Canonicalizer.js +18 -0
  16. package/dist/crypto/Canonicalizer.js.map +1 -0
  17. package/dist/crypto/KeyManager.d.ts +31 -0
  18. package/dist/crypto/KeyManager.d.ts.map +1 -0
  19. package/dist/crypto/KeyManager.js +79 -0
  20. package/dist/crypto/KeyManager.js.map +1 -0
  21. package/dist/crypto/Signer.d.ts +31 -0
  22. package/dist/crypto/Signer.d.ts.map +1 -0
  23. package/dist/crypto/Signer.js +64 -0
  24. package/dist/crypto/Signer.js.map +1 -0
  25. package/dist/crypto/index.d.ts +5 -0
  26. package/dist/crypto/index.d.ts.map +1 -0
  27. package/dist/crypto/index.js +4 -0
  28. package/dist/crypto/index.js.map +1 -0
  29. package/dist/errors/SnapError.d.ts +15 -0
  30. package/dist/errors/SnapError.d.ts.map +1 -0
  31. package/dist/errors/SnapError.js +44 -0
  32. package/dist/errors/SnapError.js.map +1 -0
  33. package/dist/errors/index.d.ts +2 -0
  34. package/dist/errors/index.d.ts.map +1 -0
  35. package/dist/errors/index.js +2 -0
  36. package/dist/errors/index.js.map +1 -0
  37. package/dist/index.d.ts +34 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +24 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/messaging/MessageBuilder.d.ts +25 -0
  42. package/dist/messaging/MessageBuilder.d.ts.map +1 -0
  43. package/dist/messaging/MessageBuilder.js +68 -0
  44. package/dist/messaging/MessageBuilder.js.map +1 -0
  45. package/dist/messaging/MessageSigner.d.ts +24 -0
  46. package/dist/messaging/MessageSigner.d.ts.map +1 -0
  47. package/dist/messaging/MessageSigner.js +34 -0
  48. package/dist/messaging/MessageSigner.js.map +1 -0
  49. package/dist/messaging/MessageValidator.d.ts +32 -0
  50. package/dist/messaging/MessageValidator.d.ts.map +1 -0
  51. package/dist/messaging/MessageValidator.js +82 -0
  52. package/dist/messaging/MessageValidator.js.map +1 -0
  53. package/dist/messaging/index.d.ts +5 -0
  54. package/dist/messaging/index.d.ts.map +1 -0
  55. package/dist/messaging/index.js +4 -0
  56. package/dist/messaging/index.js.map +1 -0
  57. package/dist/plugins/PluginRegistry.d.ts +17 -0
  58. package/dist/plugins/PluginRegistry.d.ts.map +1 -0
  59. package/dist/plugins/PluginRegistry.js +34 -0
  60. package/dist/plugins/PluginRegistry.js.map +1 -0
  61. package/dist/plugins/index.d.ts +2 -0
  62. package/dist/plugins/index.d.ts.map +1 -0
  63. package/dist/plugins/index.js +2 -0
  64. package/dist/plugins/index.js.map +1 -0
  65. package/dist/stores/InMemoryReplayStore.d.ts +21 -0
  66. package/dist/stores/InMemoryReplayStore.d.ts.map +1 -0
  67. package/dist/stores/InMemoryReplayStore.js +39 -0
  68. package/dist/stores/InMemoryReplayStore.js.map +1 -0
  69. package/dist/stores/InMemoryTaskStore.d.ts +14 -0
  70. package/dist/stores/InMemoryTaskStore.d.ts.map +1 -0
  71. package/dist/stores/InMemoryTaskStore.js +22 -0
  72. package/dist/stores/InMemoryTaskStore.js.map +1 -0
  73. package/dist/stores/index.d.ts +3 -0
  74. package/dist/stores/index.d.ts.map +1 -0
  75. package/dist/stores/index.js +3 -0
  76. package/dist/stores/index.js.map +1 -0
  77. package/dist/transport/HttpTransport.d.ts +41 -0
  78. package/dist/transport/HttpTransport.d.ts.map +1 -0
  79. package/dist/transport/HttpTransport.js +196 -0
  80. package/dist/transport/HttpTransport.js.map +1 -0
  81. package/dist/transport/NostrTransport.d.ts +55 -0
  82. package/dist/transport/NostrTransport.d.ts.map +1 -0
  83. package/dist/transport/NostrTransport.js +211 -0
  84. package/dist/transport/NostrTransport.js.map +1 -0
  85. package/dist/transport/WebSocketTransport.d.ts +41 -0
  86. package/dist/transport/WebSocketTransport.d.ts.map +1 -0
  87. package/dist/transport/WebSocketTransport.js +206 -0
  88. package/dist/transport/WebSocketTransport.js.map +1 -0
  89. package/dist/transport/index.d.ts +7 -0
  90. package/dist/transport/index.d.ts.map +1 -0
  91. package/dist/transport/index.js +4 -0
  92. package/dist/transport/index.js.map +1 -0
  93. package/dist/types/agent-card.d.ts +53 -0
  94. package/dist/types/agent-card.d.ts.map +1 -0
  95. package/dist/types/agent-card.js +2 -0
  96. package/dist/types/agent-card.js.map +1 -0
  97. package/dist/types/artifact.d.ts +8 -0
  98. package/dist/types/artifact.d.ts.map +1 -0
  99. package/dist/types/artifact.js +2 -0
  100. package/dist/types/artifact.js.map +1 -0
  101. package/dist/types/errors.d.ts +25 -0
  102. package/dist/types/errors.d.ts.map +1 -0
  103. package/dist/types/errors.js +24 -0
  104. package/dist/types/errors.js.map +1 -0
  105. package/dist/types/handler.d.ts +38 -0
  106. package/dist/types/handler.d.ts.map +1 -0
  107. package/dist/types/handler.js +2 -0
  108. package/dist/types/handler.js.map +1 -0
  109. package/dist/types/index.d.ts +13 -0
  110. package/dist/types/index.d.ts.map +1 -0
  111. package/dist/types/index.js +2 -0
  112. package/dist/types/index.js.map +1 -0
  113. package/dist/types/keys.d.ts +15 -0
  114. package/dist/types/keys.d.ts.map +1 -0
  115. package/dist/types/keys.js +2 -0
  116. package/dist/types/keys.js.map +1 -0
  117. package/dist/types/message.d.ts +29 -0
  118. package/dist/types/message.d.ts.map +1 -0
  119. package/dist/types/message.js +2 -0
  120. package/dist/types/message.js.map +1 -0
  121. package/dist/types/part.d.ts +25 -0
  122. package/dist/types/part.d.ts.map +1 -0
  123. package/dist/types/part.js +2 -0
  124. package/dist/types/part.js.map +1 -0
  125. package/dist/types/payloads.d.ts +34 -0
  126. package/dist/types/payloads.d.ts.map +1 -0
  127. package/dist/types/payloads.js +2 -0
  128. package/dist/types/payloads.js.map +1 -0
  129. package/dist/types/plugin.d.ts +33 -0
  130. package/dist/types/plugin.d.ts.map +1 -0
  131. package/dist/types/plugin.js +2 -0
  132. package/dist/types/plugin.js.map +1 -0
  133. package/dist/types/task.d.ts +26 -0
  134. package/dist/types/task.d.ts.map +1 -0
  135. package/dist/types/task.js +2 -0
  136. package/dist/types/task.js.map +1 -0
  137. package/dist/types/transport.d.ts +24 -0
  138. package/dist/types/transport.d.ts.map +1 -0
  139. package/dist/types/transport.js +2 -0
  140. package/dist/types/transport.js.map +1 -0
  141. package/package.json +38 -0
@@ -0,0 +1,26 @@
1
+ import type { AgentCard, Skill, Capabilities, Trust, Provider, EndpointProtocol } from '../types/agent-card.js';
2
+ import type { P2TRAddress } from '../types/keys.js';
3
+ import type { MediaType } from '../types/part.js';
4
+ /** Fluent builder for constructing an AgentCard. */
5
+ export declare class AgentCardBuilder {
6
+ private readonly card;
7
+ name(name: string): this;
8
+ description(description: string): this;
9
+ version(version: string): this;
10
+ identity(address: P2TRAddress): this;
11
+ endpoint(protocol: EndpointProtocol, url: string): this;
12
+ nostrRelay(url: string): this;
13
+ protocolVersion(version: string): this;
14
+ supportedVersion(version: string): this;
15
+ capabilities(caps: Capabilities): this;
16
+ skill(skill: Skill): this;
17
+ defaultInputModes(modes: MediaType[]): this;
18
+ defaultOutputModes(modes: MediaType[]): this;
19
+ trust(trust: Trust): this;
20
+ provider(provider: Provider): this;
21
+ iconUrl(url: string): this;
22
+ documentationUrl(url: string): this;
23
+ /** Build the AgentCard, validating that all required fields are set. */
24
+ build(): AgentCard;
25
+ }
26
+ //# sourceMappingURL=AgentCardBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentCardBuilder.d.ts","sourceRoot":"","sources":["../../src/agent/AgentCardBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,KAAK,EACL,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,gBAAgB,EAEjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,oDAAoD;AACpD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAE/C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAKtC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9B,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKpC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAMvD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM7B,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKtC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMvC,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAKtC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMzB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;IAK3C,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI;IAK5C,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAKzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKlC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK1B,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKnC,wEAAwE;IACxE,KAAK,IAAI,SAAS;CAkBnB"}
@@ -0,0 +1,99 @@
1
+ /** Fluent builder for constructing an AgentCard. */
2
+ export class AgentCardBuilder {
3
+ card = {};
4
+ name(name) {
5
+ this.card.name = name;
6
+ return this;
7
+ }
8
+ description(description) {
9
+ this.card.description = description;
10
+ return this;
11
+ }
12
+ version(version) {
13
+ this.card.version = version;
14
+ return this;
15
+ }
16
+ identity(address) {
17
+ this.card.identity = address;
18
+ return this;
19
+ }
20
+ endpoint(protocol, url) {
21
+ if (!this.card.endpoints)
22
+ this.card.endpoints = [];
23
+ this.card.endpoints.push({ protocol, url });
24
+ return this;
25
+ }
26
+ nostrRelay(url) {
27
+ if (!this.card.nostrRelays)
28
+ this.card.nostrRelays = [];
29
+ this.card.nostrRelays.push(url);
30
+ return this;
31
+ }
32
+ protocolVersion(version) {
33
+ this.card.protocolVersion = version;
34
+ return this;
35
+ }
36
+ supportedVersion(version) {
37
+ if (!this.card.supportedVersions)
38
+ this.card.supportedVersions = [];
39
+ this.card.supportedVersions.push(version);
40
+ return this;
41
+ }
42
+ capabilities(caps) {
43
+ this.card.capabilities = caps;
44
+ return this;
45
+ }
46
+ skill(skill) {
47
+ if (!this.card.skills)
48
+ this.card.skills = [];
49
+ this.card.skills.push(skill);
50
+ return this;
51
+ }
52
+ defaultInputModes(modes) {
53
+ this.card.defaultInputModes = modes;
54
+ return this;
55
+ }
56
+ defaultOutputModes(modes) {
57
+ this.card.defaultOutputModes = modes;
58
+ return this;
59
+ }
60
+ trust(trust) {
61
+ this.card.trust = trust;
62
+ return this;
63
+ }
64
+ provider(provider) {
65
+ this.card.provider = provider;
66
+ return this;
67
+ }
68
+ iconUrl(url) {
69
+ this.card.iconUrl = url;
70
+ return this;
71
+ }
72
+ documentationUrl(url) {
73
+ this.card.documentationUrl = url;
74
+ return this;
75
+ }
76
+ /** Build the AgentCard, validating that all required fields are set. */
77
+ build() {
78
+ const missing = [];
79
+ if (!this.card.name)
80
+ missing.push('name');
81
+ if (!this.card.description)
82
+ missing.push('description');
83
+ if (!this.card.version)
84
+ missing.push('version');
85
+ if (!this.card.identity)
86
+ missing.push('identity');
87
+ if (!this.card.skills || this.card.skills.length === 0)
88
+ missing.push('skills');
89
+ if (!this.card.defaultInputModes || this.card.defaultInputModes.length === 0)
90
+ missing.push('defaultInputModes');
91
+ if (!this.card.defaultOutputModes || this.card.defaultOutputModes.length === 0)
92
+ missing.push('defaultOutputModes');
93
+ if (missing.length > 0) {
94
+ throw new Error(`AgentCard missing required fields: ${missing.join(', ')}`);
95
+ }
96
+ return { ...this.card };
97
+ }
98
+ }
99
+ //# sourceMappingURL=AgentCardBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentCardBuilder.js","sourceRoot":"","sources":["../../src/agent/AgentCardBuilder.ts"],"names":[],"mappings":"AAYA,oDAAoD;AACpD,MAAM,OAAO,gBAAgB;IACV,IAAI,GAAuB,EAAE,CAAC;IAE/C,IAAI,CAAC,IAAY;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,WAAmB;QAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,OAAoB;QAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,QAA0B,EAAE,GAAW;QAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe,CAAC,OAAe;QAC7B,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,OAAe;QAC9B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QACnE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,IAAkB;QAC7B,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAY;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iBAAiB,CAAC,KAAkB;QAClC,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB,CAAC,KAAkB;QACnC,IAAI,CAAC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAY;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,QAAkB;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,GAAW;QAC1B,IAAI,CAAC,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wEAAwE;IACxE,KAAK;QACH,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAErC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,sCAAsC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,EAAe,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,61 @@
1
+ import type { P2TRAddress, PrivateKeyHex, Network } from '../types/keys.js';
2
+ import type { SnapMessage, MethodName } from '../types/message.js';
3
+ import type { TransportPlugin, TransportSendOptions, ReplayStore, TaskStore, Middleware } from '../types/plugin.js';
4
+ import type { AgentCard } from '../types/agent-card.js';
5
+ import type { MethodPayloadMap, MethodHandler, StreamMethodHandler } from '../types/handler.js';
6
+ import type { MessageSendResponse, TasksGetResponse, TasksCancelResponse } from '../types/payloads.js';
7
+ import type { InnerMessage } from '../types/task.js';
8
+ export interface SnapAgentConfig {
9
+ privateKey: PrivateKeyHex;
10
+ card: AgentCard;
11
+ network?: Network;
12
+ }
13
+ /** Unified agent peer — sends, receives, and streams SNAP messages. */
14
+ export declare class SnapAgent {
15
+ readonly address: P2TRAddress;
16
+ readonly card: AgentCard;
17
+ private readonly signer;
18
+ private readonly privateKey;
19
+ private readonly transports;
20
+ private readonly middlewares;
21
+ private readonly handlers;
22
+ private readonly streamHandlers;
23
+ private _replayStore?;
24
+ private _taskStore?;
25
+ constructor(config: SnapAgentConfig);
26
+ /** Register a request-response handler for a method. */
27
+ handle<M extends keyof MethodPayloadMap>(method: M, handler: MethodHandler<M>): this;
28
+ /** Register a streaming handler for a method. */
29
+ handleStream<M extends keyof MethodPayloadMap>(method: M, handler: StreamMethodHandler<M>): this;
30
+ /** Add a transport plugin. */
31
+ transport(plugin: TransportPlugin): this;
32
+ /** Add a middleware. */
33
+ use(middleware: Middleware): this;
34
+ /** Set the replay store. */
35
+ replayStore(store: ReplayStore): this;
36
+ /** Set the task store. */
37
+ taskStore(store: TaskStore): this;
38
+ /** Start listening on all transports. */
39
+ start(): Promise<void>;
40
+ /** Stop all transports. */
41
+ stop(): Promise<void>;
42
+ /** Process an inbound message and return a response. */
43
+ processMessage(inbound: SnapMessage): Promise<SnapMessage>;
44
+ /** Process an inbound streaming request. */
45
+ processStream(inbound: SnapMessage): AsyncIterable<SnapMessage>;
46
+ /** Send a message to another agent via the first available transport. */
47
+ send<P extends Record<string, unknown> = Record<string, unknown>>(to: P2TRAddress, endpoint: string, method: MethodName, payload: P, options?: Partial<TransportSendOptions>): Promise<SnapMessage>;
48
+ /** Send a streaming request to another agent. */
49
+ sendStream<P extends Record<string, unknown> = Record<string, unknown>>(to: P2TRAddress, endpoint: string, method: MethodName, payload: P, options?: Partial<TransportSendOptions>): AsyncIterable<SnapMessage>;
50
+ /** Send a message/send request. */
51
+ sendMessage(to: P2TRAddress, endpoint: string, message: InnerMessage, options?: Partial<TransportSendOptions>): Promise<MessageSendResponse>;
52
+ /** Stream a message/stream request. */
53
+ streamMessage(to: P2TRAddress, endpoint: string, message: InnerMessage, options?: Partial<TransportSendOptions>): AsyncIterable<SnapMessage>;
54
+ /** Get a task by ID. */
55
+ getTask(to: P2TRAddress, endpoint: string, taskId: string, options?: Partial<TransportSendOptions>): Promise<TasksGetResponse>;
56
+ /** Cancel a task. */
57
+ cancelTask(to: P2TRAddress, endpoint: string, taskId: string, options?: Partial<TransportSendOptions>): Promise<TasksCancelResponse>;
58
+ private buildMessage;
59
+ private runMiddleware;
60
+ }
61
+ //# sourceMappingURL=SnapAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SnapAgent.d.ts","sourceRoot":"","sources":["../../src/agent/SnapAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,245 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { MessageBuilder } from '../messaging/MessageBuilder.js';
3
+ import { MessageSigner } from '../messaging/MessageSigner.js';
4
+ import { MessageValidator } from '../messaging/MessageValidator.js';
5
+ import { SnapError } from '../errors/SnapError.js';
6
+ /** Unified agent peer — sends, receives, and streams SNAP messages. */
7
+ export class SnapAgent {
8
+ address;
9
+ card;
10
+ signer;
11
+ privateKey;
12
+ transports = [];
13
+ middlewares = [];
14
+ handlers = new Map();
15
+ streamHandlers = new Map();
16
+ _replayStore;
17
+ _taskStore;
18
+ constructor(config) {
19
+ this.privateKey = config.privateKey;
20
+ this.signer = new MessageSigner(config.privateKey);
21
+ this.address = this.signer.getAddress(config.network ?? 'mainnet');
22
+ this.card = { ...config.card, identity: this.address };
23
+ }
24
+ /** Register a request-response handler for a method. */
25
+ handle(method, handler) {
26
+ this.handlers.set(method, handler);
27
+ return this;
28
+ }
29
+ /** Register a streaming handler for a method. */
30
+ handleStream(method, handler) {
31
+ this.streamHandlers.set(method, handler);
32
+ return this;
33
+ }
34
+ /** Add a transport plugin. */
35
+ transport(plugin) {
36
+ this.transports.push(plugin);
37
+ return this;
38
+ }
39
+ /** Add a middleware. */
40
+ use(middleware) {
41
+ this.middlewares.push(middleware);
42
+ return this;
43
+ }
44
+ /** Set the replay store. */
45
+ replayStore(store) {
46
+ this._replayStore = store;
47
+ return this;
48
+ }
49
+ /** Set the task store. */
50
+ taskStore(store) {
51
+ this._taskStore = store;
52
+ return this;
53
+ }
54
+ /** Start listening on all transports. */
55
+ async start() {
56
+ for (const tp of this.transports) {
57
+ if (tp.listen) {
58
+ await tp.listen((msg) => this.processMessage(msg));
59
+ }
60
+ const streamTp = tp;
61
+ if (typeof streamTp.listenStream === 'function') {
62
+ await streamTp.listenStream((msg) => this.processStream(msg));
63
+ }
64
+ }
65
+ }
66
+ /** Stop all transports. */
67
+ async stop() {
68
+ for (const tp of this.transports) {
69
+ if (tp.close) {
70
+ await tp.close();
71
+ }
72
+ }
73
+ }
74
+ /** Process an inbound message and return a response. */
75
+ async processMessage(inbound) {
76
+ // 1. Validate structure and signature
77
+ MessageValidator.validate(inbound);
78
+ // 2. Check destination
79
+ if (inbound.to !== this.address) {
80
+ throw SnapError.invalidMessage(`Message not addressed to this agent: ${inbound.to}`);
81
+ }
82
+ // 3. Replay check
83
+ if (this._replayStore) {
84
+ const seen = await this._replayStore.hasSeen(inbound.from, inbound.id);
85
+ if (seen) {
86
+ throw SnapError.duplicateMessage(inbound.id, inbound.from);
87
+ }
88
+ await this._replayStore.markSeen(inbound.from, inbound.id, inbound.timestamp);
89
+ }
90
+ // 4. Inbound middleware
91
+ await this.runMiddleware({ message: inbound, direction: 'inbound' });
92
+ // 5. Route to handler
93
+ const handler = this.handlers.get(inbound.method);
94
+ if (!handler) {
95
+ throw SnapError.invalidMessage(`No handler registered for method: ${inbound.method}`);
96
+ }
97
+ const context = {
98
+ message: inbound,
99
+ taskStore: this._taskStore,
100
+ };
101
+ const responsePayload = await handler(inbound.payload, context);
102
+ // 6. Build and sign response
103
+ const unsigned = this.buildMessage({
104
+ to: inbound.from,
105
+ type: 'response',
106
+ method: inbound.method,
107
+ payload: responsePayload,
108
+ });
109
+ const response = this.signer.sign(unsigned);
110
+ // 7. Outbound middleware
111
+ await this.runMiddleware({ message: response, direction: 'outbound' });
112
+ return response;
113
+ }
114
+ /** Process an inbound streaming request. */
115
+ async *processStream(inbound) {
116
+ // 1. Validate
117
+ MessageValidator.validate(inbound);
118
+ // 2. Check destination
119
+ if (inbound.to !== this.address) {
120
+ throw SnapError.invalidMessage(`Message not addressed to this agent: ${inbound.to}`);
121
+ }
122
+ // 3. Replay check
123
+ if (this._replayStore) {
124
+ const seen = await this._replayStore.hasSeen(inbound.from, inbound.id);
125
+ if (seen) {
126
+ throw SnapError.duplicateMessage(inbound.id, inbound.from);
127
+ }
128
+ await this._replayStore.markSeen(inbound.from, inbound.id, inbound.timestamp);
129
+ }
130
+ // 4. Inbound middleware
131
+ await this.runMiddleware({ message: inbound, direction: 'inbound' });
132
+ // 5. Route to stream handler
133
+ const handler = this.streamHandlers.get(inbound.method);
134
+ if (!handler) {
135
+ throw SnapError.invalidMessage(`No stream handler registered for method: ${inbound.method}`);
136
+ }
137
+ const context = {
138
+ message: inbound,
139
+ taskStore: this._taskStore,
140
+ };
141
+ // 6. Yield each event signed
142
+ for await (const event of handler(inbound.payload, context)) {
143
+ // Events from handler are already SnapMessages (or we wrap them)
144
+ if (event.sig) {
145
+ yield event;
146
+ }
147
+ else {
148
+ // Sign event messages
149
+ const unsigned = this.buildMessage({
150
+ to: inbound.from,
151
+ type: event.type ?? 'event',
152
+ method: event.method ?? inbound.method,
153
+ payload: event.payload ?? {},
154
+ });
155
+ yield this.signer.sign(unsigned);
156
+ }
157
+ }
158
+ }
159
+ // --- Outbound methods ---
160
+ /** Send a message to another agent via the first available transport. */
161
+ async send(to, endpoint, method, payload, options) {
162
+ const unsigned = this.buildMessage({ to, type: 'request', method, payload: payload });
163
+ const signed = this.signer.sign(unsigned);
164
+ await this.runMiddleware({ message: signed, direction: 'outbound' });
165
+ const sendOptions = {
166
+ endpoint,
167
+ ...options,
168
+ };
169
+ // Try transports in order
170
+ let lastError;
171
+ for (const tp of this.transports) {
172
+ try {
173
+ const response = await tp.send(signed, sendOptions);
174
+ return response;
175
+ }
176
+ catch (err) {
177
+ lastError = err instanceof Error ? err : new Error(String(err));
178
+ }
179
+ }
180
+ throw lastError ?? new Error('No transports configured');
181
+ }
182
+ /** Send a streaming request to another agent. */
183
+ async *sendStream(to, endpoint, method, payload, options) {
184
+ const unsigned = this.buildMessage({ to, type: 'request', method, payload: payload });
185
+ const signed = this.signer.sign(unsigned);
186
+ await this.runMiddleware({ message: signed, direction: 'outbound' });
187
+ const sendOptions = {
188
+ endpoint,
189
+ ...options,
190
+ };
191
+ // Find a streaming transport
192
+ for (const tp of this.transports) {
193
+ const streamTp = tp;
194
+ if (typeof streamTp.sendStream === 'function') {
195
+ yield* streamTp.sendStream(signed, sendOptions);
196
+ return;
197
+ }
198
+ }
199
+ throw new Error('No streaming transport configured');
200
+ }
201
+ // --- Convenience methods ---
202
+ /** Send a message/send request. */
203
+ async sendMessage(to, endpoint, message, options) {
204
+ const response = await this.send(to, endpoint, 'message/send', { message }, options);
205
+ return response.payload;
206
+ }
207
+ /** Stream a message/stream request. */
208
+ async *streamMessage(to, endpoint, message, options) {
209
+ yield* this.sendStream(to, endpoint, 'message/stream', { message }, options);
210
+ }
211
+ /** Get a task by ID. */
212
+ async getTask(to, endpoint, taskId, options) {
213
+ const response = await this.send(to, endpoint, 'tasks/get', { taskId }, options);
214
+ return response.payload;
215
+ }
216
+ /** Cancel a task. */
217
+ async cancelTask(to, endpoint, taskId, options) {
218
+ const response = await this.send(to, endpoint, 'tasks/cancel', { taskId }, options);
219
+ return response.payload;
220
+ }
221
+ // --- Private helpers ---
222
+ buildMessage(opts) {
223
+ return new MessageBuilder()
224
+ .id(randomUUID())
225
+ .from(this.address)
226
+ .to(opts.to)
227
+ .type(opts.type)
228
+ .method(opts.method)
229
+ .payload(opts.payload)
230
+ .timestamp(Math.floor(Date.now() / 1000))
231
+ .build();
232
+ }
233
+ async runMiddleware(ctx) {
234
+ const stack = [...this.middlewares];
235
+ let index = 0;
236
+ const next = async () => {
237
+ if (index < stack.length) {
238
+ const mw = stack[index++];
239
+ await mw.handle(ctx, next);
240
+ }
241
+ };
242
+ await next();
243
+ }
244
+ }
245
+ //# sourceMappingURL=SnapAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SnapAgent.js","sourceRoot":"","sources":["../../src/agent/SnapAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { AgentCardBuilder } from './AgentCardBuilder.js';
2
+ export { SnapAgent } from './SnapAgent.js';
3
+ export type { SnapAgentConfig } from './SnapAgent.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { AgentCardBuilder } from './AgentCardBuilder.js';
2
+ export { SnapAgent } from './SnapAgent.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare class Canonicalizer {
2
+ /**
3
+ * Canonicalize a JSON-serializable object per RFC 8785 (JCS).
4
+ * Returns the canonical JSON string.
5
+ * @throws if input cannot be serialized.
6
+ */
7
+ static canonicalize(obj: unknown): string;
8
+ }
9
+ //# sourceMappingURL=Canonicalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Canonicalizer.d.ts","sourceRoot":"","sources":["../../src/crypto/Canonicalizer.ts"],"names":[],"mappings":"AAKA,qBAAa,aAAa;IACxB;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM;CAO1C"}
@@ -0,0 +1,18 @@
1
+ import { createRequire } from 'module';
2
+ const require = createRequire(import.meta.url);
3
+ const canonicalizeFn = require('canonicalize');
4
+ export class Canonicalizer {
5
+ /**
6
+ * Canonicalize a JSON-serializable object per RFC 8785 (JCS).
7
+ * Returns the canonical JSON string.
8
+ * @throws if input cannot be serialized.
9
+ */
10
+ static canonicalize(obj) {
11
+ const result = canonicalizeFn(obj);
12
+ if (result === undefined) {
13
+ throw new Error('Cannot canonicalize input: result is undefined');
14
+ }
15
+ return result;
16
+ }
17
+ }
18
+ //# sourceMappingURL=Canonicalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Canonicalizer.js","sourceRoot":"","sources":["../../src/crypto/Canonicalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAA2C,CAAC;AAEzF,MAAM,OAAO,aAAa;IACxB;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,GAAY;QAC9B,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,31 @@
1
+ import type { Network, P2TRAddress, PublicKeyXOnly, PrivateKeyHex, KeyPair } from '../types/keys.js';
2
+ export declare class KeyManager {
3
+ /**
4
+ * Derive x-only public key from a private key.
5
+ * @returns 64-char lowercase hex string.
6
+ */
7
+ static getPublicKey(privateKey: PrivateKeyHex): PublicKeyXOnly;
8
+ /**
9
+ * Encode an x-only public key as a P2TR bech32m address.
10
+ * Uses witness version 1.
11
+ */
12
+ static publicKeyToP2TR(publicKey: PublicKeyXOnly, network?: Network): P2TRAddress;
13
+ /**
14
+ * Decode a P2TR address to its x-only public key hex.
15
+ * Validates bech32m checksum and witness version.
16
+ */
17
+ static p2trToPublicKey(address: P2TRAddress): PublicKeyXOnly;
18
+ /**
19
+ * Detect network from a P2TR address prefix.
20
+ */
21
+ static detectNetwork(address: P2TRAddress): Network;
22
+ /**
23
+ * Validate that a P2TR address is well-formed.
24
+ */
25
+ static validateP2TR(address: P2TRAddress): boolean;
26
+ /**
27
+ * Derive a full KeyPair from a private key.
28
+ */
29
+ static deriveKeyPair(privateKey: PrivateKeyHex, network?: Network): KeyPair;
30
+ }
31
+ //# sourceMappingURL=KeyManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyManager.d.ts","sourceRoot":"","sources":["../../src/crypto/KeyManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAOrG,qBAAa,UAAU;IACrB;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,aAAa,GAAG,cAAc;IAK9D;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,GAAE,OAAmB,GAAG,WAAW;IAM5F;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc;IAa5D;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO;IAMnD;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO;IAYlD;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,GAAE,OAAmB,GAAG,OAAO;CAKvF"}
@@ -0,0 +1,79 @@
1
+ import { schnorr } from '@noble/curves/secp256k1.js';
2
+ import { bytesToHex, hexToBytes } from '@noble/hashes/utils';
3
+ import { bech32m } from 'bech32';
4
+ const PREFIXES = {
5
+ mainnet: 'bc',
6
+ testnet: 'tb',
7
+ };
8
+ export class KeyManager {
9
+ /**
10
+ * Derive x-only public key from a private key.
11
+ * @returns 64-char lowercase hex string.
12
+ */
13
+ static getPublicKey(privateKey) {
14
+ const pubBytes = schnorr.getPublicKey(hexToBytes(privateKey));
15
+ return bytesToHex(pubBytes);
16
+ }
17
+ /**
18
+ * Encode an x-only public key as a P2TR bech32m address.
19
+ * Uses witness version 1.
20
+ */
21
+ static publicKeyToP2TR(publicKey, network = 'mainnet') {
22
+ const pubBytes = typeof publicKey === 'string' ? hexToBytes(publicKey) : publicKey;
23
+ const words = bech32m.toWords(pubBytes);
24
+ return bech32m.encode(PREFIXES[network], [1, ...words]);
25
+ }
26
+ /**
27
+ * Decode a P2TR address to its x-only public key hex.
28
+ * Validates bech32m checksum and witness version.
29
+ */
30
+ static p2trToPublicKey(address) {
31
+ const { prefix, words } = bech32m.decode(address);
32
+ if (prefix !== 'bc' && prefix !== 'tb') {
33
+ throw new Error(`Invalid P2TR prefix: ${prefix}`);
34
+ }
35
+ const witnessVersion = words[0];
36
+ if (witnessVersion !== 1) {
37
+ throw new Error(`Invalid witness version: ${witnessVersion}, expected 1`);
38
+ }
39
+ const pubBytes = bech32m.fromWords(words.slice(1));
40
+ return bytesToHex(new Uint8Array(pubBytes));
41
+ }
42
+ /**
43
+ * Detect network from a P2TR address prefix.
44
+ */
45
+ static detectNetwork(address) {
46
+ if (address.startsWith('bc1p'))
47
+ return 'mainnet';
48
+ if (address.startsWith('tb1p'))
49
+ return 'testnet';
50
+ throw new Error(`Cannot detect network from address: ${address}`);
51
+ }
52
+ /**
53
+ * Validate that a P2TR address is well-formed.
54
+ */
55
+ static validateP2TR(address) {
56
+ try {
57
+ if (address.length !== 62)
58
+ return false;
59
+ if (!address.startsWith('bc1p') && !address.startsWith('tb1p'))
60
+ return false;
61
+ const { words } = bech32m.decode(address);
62
+ if (words[0] !== 1)
63
+ return false;
64
+ return true;
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ /**
71
+ * Derive a full KeyPair from a private key.
72
+ */
73
+ static deriveKeyPair(privateKey, network = 'mainnet') {
74
+ const publicKey = KeyManager.getPublicKey(privateKey);
75
+ const address = KeyManager.publicKeyToP2TR(publicKey, network);
76
+ return { privateKey, publicKey, address, network };
77
+ }
78
+ }
79
+ //# sourceMappingURL=KeyManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyManager.js","sourceRoot":"","sources":["../../src/crypto/KeyManager.ts"],"names":[],"mappings":"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"}