@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,24 @@
1
+ export const ErrorCodes = {
2
+ // 1xxx — Task / Message
3
+ TASK_NOT_FOUND: 1001,
4
+ TASK_NOT_CANCELABLE: 1002,
5
+ INVALID_MESSAGE: 1003,
6
+ INVALID_PAYLOAD: 1004,
7
+ CONTENT_TYPE_NOT_SUPPORTED: 1005,
8
+ PUSH_NOTIFICATION_ERROR: 1006,
9
+ METHOD_NOT_FOUND: 1007,
10
+ // 2xxx — Authentication
11
+ SIGNATURE_INVALID: 2001,
12
+ SIGNATURE_MISSING: 2002,
13
+ IDENTITY_MISMATCH: 2003,
14
+ TIMESTAMP_EXPIRED: 2004,
15
+ IDENTITY_INVALID: 2005,
16
+ DUPLICATE_MESSAGE: 2006,
17
+ // 3xxx — Rate limiting
18
+ RATE_LIMIT_EXCEEDED: 3001,
19
+ // 4xxx — Transport
20
+ TRANSPORT_ERROR: 4001,
21
+ // 5xxx — Internal
22
+ INTERNAL_ERROR: 5001,
23
+ };
24
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,wBAAwB;IACxB,cAAc,EAAE,IAAI;IACpB,mBAAmB,EAAE,IAAI;IACzB,eAAe,EAAE,IAAI;IACrB,eAAe,EAAE,IAAI;IACrB,0BAA0B,EAAE,IAAI;IAChC,uBAAuB,EAAE,IAAI;IAC7B,gBAAgB,EAAE,IAAI;IAEtB,wBAAwB;IACxB,iBAAiB,EAAE,IAAI;IACvB,iBAAiB,EAAE,IAAI;IACvB,iBAAiB,EAAE,IAAI;IACvB,iBAAiB,EAAE,IAAI;IACvB,gBAAgB,EAAE,IAAI;IACtB,iBAAiB,EAAE,IAAI;IAEvB,uBAAuB;IACvB,mBAAmB,EAAE,IAAI;IAEzB,mBAAmB;IACnB,eAAe,EAAE,IAAI;IAErB,kBAAkB;IAClB,cAAc,EAAE,IAAI;CACZ,CAAC"}
@@ -0,0 +1,38 @@
1
+ import type { MessageSendRequest, MessageSendResponse, TasksGetRequest, TasksGetResponse, TasksCancelRequest, TasksCancelResponse } from './payloads.js';
2
+ import type { SnapMessage } from './message.js';
3
+ import type { TaskStore } from './plugin.js';
4
+ /** Maps method names to their request/response payload types. */
5
+ export interface MethodPayloadMap {
6
+ 'message/send': {
7
+ request: MessageSendRequest;
8
+ response: MessageSendResponse;
9
+ };
10
+ 'message/stream': {
11
+ request: MessageSendRequest;
12
+ response: MessageSendResponse;
13
+ };
14
+ 'tasks/get': {
15
+ request: TasksGetRequest;
16
+ response: TasksGetResponse;
17
+ };
18
+ 'tasks/cancel': {
19
+ request: TasksCancelRequest;
20
+ response: TasksCancelResponse;
21
+ };
22
+ 'tasks/resubscribe': {
23
+ request: TasksGetRequest;
24
+ response: TasksGetResponse;
25
+ };
26
+ }
27
+ /** Context passed to every handler. */
28
+ export interface HandlerContext {
29
+ /** The full inbound SNAP message (already validated). */
30
+ message: SnapMessage;
31
+ /** The task store, if configured. */
32
+ taskStore?: TaskStore;
33
+ }
34
+ /** Request-response handler for a specific method. */
35
+ export type MethodHandler<M extends keyof MethodPayloadMap> = (payload: MethodPayloadMap[M]['request'], context: HandlerContext) => Promise<MethodPayloadMap[M]['response']> | MethodPayloadMap[M]['response'];
36
+ /** Streaming handler — yields events and a final response. */
37
+ export type StreamMethodHandler<M extends keyof MethodPayloadMap> = (payload: MethodPayloadMap[M]['request'], context: HandlerContext) => AsyncIterable<SnapMessage>;
38
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/types/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE;QAAE,OAAO,EAAE,kBAAkB,CAAC;QAAC,QAAQ,EAAE,mBAAmB,CAAA;KAAE,CAAC;IAC/E,gBAAgB,EAAE;QAAE,OAAO,EAAE,kBAAkB,CAAC;QAAC,QAAQ,EAAE,mBAAmB,CAAA;KAAE,CAAC;IACjF,WAAW,EAAE;QAAE,OAAO,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAA;KAAE,CAAC;IACtE,cAAc,EAAE;QAAE,OAAO,EAAE,kBAAkB,CAAC;QAAC,QAAQ,EAAE,mBAAmB,CAAA;KAAE,CAAC;IAC/E,mBAAmB,EAAE;QAAE,OAAO,EAAE,eAAe,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAA;KAAE,CAAC;CAC/E;AAED,uCAAuC;AACvC,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,OAAO,EAAE,WAAW,CAAC;IACrB,qCAAqC;IACrC,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,sDAAsD;AACtD,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,gBAAgB,IAAI,CAC5D,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EACvC,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AAEhF,8DAA8D;AAC9D,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,MAAM,gBAAgB,IAAI,CAClE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EACvC,OAAO,EAAE,cAAc,KACpB,aAAa,CAAC,WAAW,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/types/handler.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ export type { Network, HexString, PublicKeyXOnly, PrivateKeyHex, P2TRAddress, KeyPair, } from './keys.js';
2
+ export type { MessageType, MethodName, TaskState, SchnorrSignatureHex, UnsignedMessage, SnapMessage, SigningIntermediates, } from './message.js';
3
+ export type { SnapErrorData, ErrorCode } from './errors.js';
4
+ export { ErrorCodes } from './errors.js';
5
+ export type { TransportLogger, TransportPlugin, TransportSendOptions, ReplayStore, TaskStore, Middleware, MiddlewareContext, NextFn, } from './plugin.js';
6
+ export type { MediaType, TextPart, RawPart, UrlPart, DataPart, Part, } from './part.js';
7
+ export type { Artifact } from './artifact.js';
8
+ export type { MessageRole, TaskStatus, InnerMessage, Task, } from './task.js';
9
+ export type { Skill, Capabilities, Trust, Provider, EndpointProtocol, AgentEndpoint, AgentCard, } from './agent-card.js';
10
+ export type { MessageSendRequest, MessageSendResponse, TasksGetRequest, TasksGetResponse, TasksCancelRequest, TasksCancelResponse, } from './payloads.js';
11
+ export type { MethodPayloadMap, HandlerContext, MethodHandler, StreamMethodHandler, } from './handler.js';
12
+ export type { StreamTransportPlugin, TaskProgressEvent, TaskArtifactEvent, } from './transport.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,WAAW,EACX,OAAO,GACR,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,YAAY,EACV,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,MAAM,GACP,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,SAAS,EACT,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,EACR,IAAI,GACL,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,YAAY,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,IAAI,GACL,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,KAAK,EACL,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,SAAS,GACV,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ErrorCodes } from './errors.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,15 @@
1
+ export type Network = 'mainnet' | 'testnet';
2
+ export type HexString = string;
3
+ /** 64 hex characters representing a 32-byte x-only public key. */
4
+ export type PublicKeyXOnly = HexString;
5
+ /** 64 hex characters representing a 32-byte private key. */
6
+ export type PrivateKeyHex = HexString;
7
+ /** Bitcoin Pay-to-Taproot address (bc1p... or tb1p..., 62 characters). */
8
+ export type P2TRAddress = string;
9
+ export interface KeyPair {
10
+ privateKey: PrivateKeyHex;
11
+ publicKey: PublicKeyXOnly;
12
+ address: P2TRAddress;
13
+ network: Network;
14
+ }
15
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/types/keys.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5C,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,kEAAkE;AAClE,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC;AAEvC,4DAA4D;AAC5D,MAAM,MAAM,aAAa,GAAG,SAAS,CAAC;AAEtC,0EAA0E;AAC1E,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,aAAa,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/types/keys.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import type { P2TRAddress } from './keys.js';
2
+ export type MessageType = 'request' | 'response' | 'event';
3
+ export type MethodName = 'message/send' | 'message/stream' | 'tasks/get' | 'tasks/cancel' | 'tasks/resubscribe';
4
+ export type TaskState = 'submitted' | 'working' | 'input_required' | 'completed' | 'failed' | 'canceled';
5
+ /** 128 hex characters representing a 64-byte Schnorr signature. */
6
+ export type SchnorrSignatureHex = string;
7
+ /** Message without signature — the input to signing. */
8
+ export interface UnsignedMessage {
9
+ id: string;
10
+ version: string;
11
+ from: P2TRAddress;
12
+ to: P2TRAddress;
13
+ type: MessageType;
14
+ method: MethodName;
15
+ payload: Record<string, unknown>;
16
+ timestamp: number;
17
+ }
18
+ /** Fully signed SNAP message. */
19
+ export interface SnapMessage extends UnsignedMessage {
20
+ sig: SchnorrSignatureHex;
21
+ }
22
+ /** Intermediate signing artifacts for debugging. */
23
+ export interface SigningIntermediates {
24
+ canonicalPayload: string;
25
+ signatureInput: string;
26
+ signatureInputHex: string;
27
+ sha256Hash: string;
28
+ }
29
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAE3D,MAAM,MAAM,UAAU,GAClB,cAAc,GACd,gBAAgB,GAChB,WAAW,GACX,cAAc,GACd,mBAAmB,CAAC;AAExB,MAAM,MAAM,SAAS,GACjB,WAAW,GACX,SAAS,GACT,gBAAgB,GAChB,WAAW,GACX,QAAQ,GACR,UAAU,CAAC;AAEf,mEAAmE;AACnE,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,WAAW,CAAC;IAChB,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,iCAAiC;AACjC,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,GAAG,EAAE,mBAAmB,CAAC;CAC1B;AAED,oDAAoD;AACpD,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../src/types/message.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ /** Media type string (e.g. "text/plain", "application/json"). */
2
+ export type MediaType = string;
3
+ /** Part containing plain text or code content. */
4
+ export interface TextPart {
5
+ text: string;
6
+ mediaType?: MediaType;
7
+ }
8
+ /** Part containing base64-encoded binary content. */
9
+ export interface RawPart {
10
+ raw: string;
11
+ mediaType: MediaType;
12
+ }
13
+ /** Part referencing external content via URL. */
14
+ export interface UrlPart {
15
+ url: string;
16
+ mediaType?: MediaType;
17
+ }
18
+ /** Part containing structured JSON data. */
19
+ export interface DataPart {
20
+ data: Record<string, unknown>;
21
+ mediaType?: MediaType;
22
+ }
23
+ /** Content unit within messages and artifacts. Exactly one of text, raw, url, or data. */
24
+ export type Part = TextPart | RawPart | UrlPart | DataPart;
25
+ //# sourceMappingURL=part.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"part.d.ts","sourceRoot":"","sources":["../../src/types/part.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,kDAAkD;AAClD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,qDAAqD;AACrD,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,iDAAiD;AACjD,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,4CAA4C;AAC5C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,0FAA0F;AAC1F,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=part.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"part.js","sourceRoot":"","sources":["../../src/types/part.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import type { InnerMessage } from './task.js';
2
+ import type { Task } from './task.js';
3
+ import type { SnapErrorData } from './errors.js';
4
+ /** Payload for message/send requests. */
5
+ export interface MessageSendRequest {
6
+ message: InnerMessage;
7
+ taskId?: string;
8
+ idempotencyKey?: string;
9
+ }
10
+ /** Payload for message/send responses. */
11
+ export interface MessageSendResponse {
12
+ task?: Task;
13
+ error?: SnapErrorData;
14
+ }
15
+ /** Payload for tasks/get requests. */
16
+ export interface TasksGetRequest {
17
+ taskId: string;
18
+ historyLength?: number;
19
+ }
20
+ /** Payload for tasks/get responses. */
21
+ export interface TasksGetResponse {
22
+ task?: Task;
23
+ error?: SnapErrorData;
24
+ }
25
+ /** Payload for tasks/cancel requests. */
26
+ export interface TasksCancelRequest {
27
+ taskId: string;
28
+ }
29
+ /** Payload for tasks/cancel responses. */
30
+ export interface TasksCancelResponse {
31
+ task?: Task;
32
+ error?: SnapErrorData;
33
+ }
34
+ //# sourceMappingURL=payloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../src/types/payloads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,0CAA0C;AAC1C,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAID,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,uCAAuC;AACvC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB;AAID,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,0CAA0C;AAC1C,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=payloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloads.js","sourceRoot":"","sources":["../../src/types/payloads.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import type { SnapMessage } from './message.js';
2
+ import type { Task } from './task.js';
3
+ /** Logger callback for transport-level diagnostic events. */
4
+ export type TransportLogger = (level: 'debug' | 'warn' | 'error', message: string, data?: unknown) => void;
5
+ export interface TransportSendOptions {
6
+ endpoint: string;
7
+ timeout?: number;
8
+ }
9
+ export interface TransportPlugin {
10
+ readonly name: string;
11
+ send(message: SnapMessage, options: TransportSendOptions): Promise<SnapMessage>;
12
+ listen?(handler: (message: SnapMessage) => Promise<SnapMessage | void>): Promise<void>;
13
+ close?(): Promise<void>;
14
+ }
15
+ export interface ReplayStore {
16
+ hasSeen(from: string, id: string): Promise<boolean>;
17
+ markSeen(from: string, id: string, timestamp: number): Promise<void>;
18
+ }
19
+ export interface TaskStore {
20
+ get(taskId: string): Promise<Task | undefined>;
21
+ set(taskId: string, task: Task): Promise<void>;
22
+ delete(taskId: string): Promise<void>;
23
+ }
24
+ export interface MiddlewareContext {
25
+ message: SnapMessage;
26
+ direction: 'inbound' | 'outbound';
27
+ }
28
+ export type NextFn = () => Promise<void>;
29
+ export interface Middleware {
30
+ readonly name: string;
31
+ handle(ctx: MiddlewareContext, next: NextFn): Promise<void>;
32
+ }
33
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/types/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAItC,6DAA6D;AAC7D,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAI3G,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChF,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvF,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAID,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;IAC/C,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAID,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC;CACnC;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,GAAG,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/types/plugin.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ import type { Part } from './part.js';
2
+ import type { Artifact } from './artifact.js';
3
+ import type { TaskState } from './message.js';
4
+ /** Role of a message within a task conversation. */
5
+ export type MessageRole = 'user' | 'agent';
6
+ /** Current status of a task. */
7
+ export interface TaskStatus {
8
+ state: TaskState;
9
+ timestamp: string;
10
+ message?: string;
11
+ }
12
+ /** A single communication turn within a task. */
13
+ export interface InnerMessage {
14
+ messageId: string;
15
+ role: MessageRole;
16
+ parts: Part[];
17
+ }
18
+ /** A unit of work that may span multiple message turns. */
19
+ export interface Task {
20
+ id: string;
21
+ contextId?: string;
22
+ status: TaskStatus;
23
+ artifacts?: Artifact[];
24
+ history?: InnerMessage[];
25
+ }
26
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/types/task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,oDAAoD;AACpD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3C,gCAAgC;AAChC,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,IAAI,EAAE,CAAC;CACf;AAED,2DAA2D;AAC3D,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/types/task.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import type { SnapMessage } from './message.js';
2
+ import type { TransportPlugin, TransportSendOptions } from './plugin.js';
3
+ import type { Artifact } from './artifact.js';
4
+ /** Extends TransportPlugin with streaming capability. */
5
+ export interface StreamTransportPlugin extends TransportPlugin {
6
+ /** Send a request and receive a stream of responses (events + final response). */
7
+ sendStream(message: SnapMessage, options: TransportSendOptions): AsyncIterable<SnapMessage>;
8
+ /** Listen for incoming stream requests. Handler returns a stream of responses. */
9
+ listenStream?(handler: (message: SnapMessage) => AsyncIterable<SnapMessage>): Promise<void>;
10
+ }
11
+ /** Progress update during streaming. */
12
+ export interface TaskProgressEvent {
13
+ taskId: string;
14
+ progress?: number;
15
+ message?: string;
16
+ }
17
+ /** Partial artifact during streaming. */
18
+ export interface TaskArtifactEvent {
19
+ taskId: string;
20
+ artifact: Artifact & {
21
+ partial?: boolean;
22
+ };
23
+ }
24
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/types/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,yDAAyD;AACzD,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D,kFAAkF;IAClF,UAAU,CACR,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,oBAAoB,GAC5B,aAAa,CAAC,WAAW,CAAC,CAAC;IAE9B,kFAAkF;IAClF,YAAY,CAAC,CACX,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,aAAa,CAAC,WAAW,CAAC,GAC5D,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,yCAAyC;AACzC,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,GAAG;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/types/transport.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@snap-protocol/core",
3
+ "version": "0.1.0",
4
+ "description": "SNAP Protocol core library — key encoding, signing, verification, message construction",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "import": "./dist/index.js",
9
+ "types": "./dist/index.d.ts"
10
+ }
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "test": "vitest run",
18
+ "test:watch": "vitest"
19
+ },
20
+ "dependencies": {
21
+ "@noble/curves": "^2.0.1",
22
+ "@noble/hashes": "^1.7.1",
23
+ "bech32": "^2.0.0",
24
+ "canonicalize": "^2.0.0",
25
+ "nostr-tools": "^2.23.0",
26
+ "ws": "^8.19.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^25.2.0",
30
+ "@types/ws": "^8.18.1",
31
+ "typescript": "^5.7.0",
32
+ "vitest": "^3.0.0"
33
+ },
34
+ "engines": {
35
+ "node": ">= 20.0.0"
36
+ },
37
+ "license": "MIT"
38
+ }