@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.
- package/dist/agent/AgentCardBuilder.d.ts +26 -0
- package/dist/agent/AgentCardBuilder.d.ts.map +1 -0
- package/dist/agent/AgentCardBuilder.js +99 -0
- package/dist/agent/AgentCardBuilder.js.map +1 -0
- package/dist/agent/SnapAgent.d.ts +61 -0
- package/dist/agent/SnapAgent.d.ts.map +1 -0
- package/dist/agent/SnapAgent.js +245 -0
- package/dist/agent/SnapAgent.js.map +1 -0
- package/dist/agent/index.d.ts +4 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +3 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/crypto/Canonicalizer.d.ts +9 -0
- package/dist/crypto/Canonicalizer.d.ts.map +1 -0
- package/dist/crypto/Canonicalizer.js +18 -0
- package/dist/crypto/Canonicalizer.js.map +1 -0
- package/dist/crypto/KeyManager.d.ts +31 -0
- package/dist/crypto/KeyManager.d.ts.map +1 -0
- package/dist/crypto/KeyManager.js +79 -0
- package/dist/crypto/KeyManager.js.map +1 -0
- package/dist/crypto/Signer.d.ts +31 -0
- package/dist/crypto/Signer.d.ts.map +1 -0
- package/dist/crypto/Signer.js +64 -0
- package/dist/crypto/Signer.js.map +1 -0
- package/dist/crypto/index.d.ts +5 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +4 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/errors/SnapError.d.ts +15 -0
- package/dist/errors/SnapError.d.ts.map +1 -0
- package/dist/errors/SnapError.js +44 -0
- package/dist/errors/SnapError.js.map +1 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +2 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/messaging/MessageBuilder.d.ts +25 -0
- package/dist/messaging/MessageBuilder.d.ts.map +1 -0
- package/dist/messaging/MessageBuilder.js +68 -0
- package/dist/messaging/MessageBuilder.js.map +1 -0
- package/dist/messaging/MessageSigner.d.ts +24 -0
- package/dist/messaging/MessageSigner.d.ts.map +1 -0
- package/dist/messaging/MessageSigner.js +34 -0
- package/dist/messaging/MessageSigner.js.map +1 -0
- package/dist/messaging/MessageValidator.d.ts +32 -0
- package/dist/messaging/MessageValidator.d.ts.map +1 -0
- package/dist/messaging/MessageValidator.js +82 -0
- package/dist/messaging/MessageValidator.js.map +1 -0
- package/dist/messaging/index.d.ts +5 -0
- package/dist/messaging/index.d.ts.map +1 -0
- package/dist/messaging/index.js +4 -0
- package/dist/messaging/index.js.map +1 -0
- package/dist/plugins/PluginRegistry.d.ts +17 -0
- package/dist/plugins/PluginRegistry.d.ts.map +1 -0
- package/dist/plugins/PluginRegistry.js +34 -0
- package/dist/plugins/PluginRegistry.js.map +1 -0
- package/dist/plugins/index.d.ts +2 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +2 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/stores/InMemoryReplayStore.d.ts +21 -0
- package/dist/stores/InMemoryReplayStore.d.ts.map +1 -0
- package/dist/stores/InMemoryReplayStore.js +39 -0
- package/dist/stores/InMemoryReplayStore.js.map +1 -0
- package/dist/stores/InMemoryTaskStore.d.ts +14 -0
- package/dist/stores/InMemoryTaskStore.d.ts.map +1 -0
- package/dist/stores/InMemoryTaskStore.js +22 -0
- package/dist/stores/InMemoryTaskStore.js.map +1 -0
- package/dist/stores/index.d.ts +3 -0
- package/dist/stores/index.d.ts.map +1 -0
- package/dist/stores/index.js +3 -0
- package/dist/stores/index.js.map +1 -0
- package/dist/transport/HttpTransport.d.ts +41 -0
- package/dist/transport/HttpTransport.d.ts.map +1 -0
- package/dist/transport/HttpTransport.js +196 -0
- package/dist/transport/HttpTransport.js.map +1 -0
- package/dist/transport/NostrTransport.d.ts +55 -0
- package/dist/transport/NostrTransport.d.ts.map +1 -0
- package/dist/transport/NostrTransport.js +211 -0
- package/dist/transport/NostrTransport.js.map +1 -0
- package/dist/transport/WebSocketTransport.d.ts +41 -0
- package/dist/transport/WebSocketTransport.d.ts.map +1 -0
- package/dist/transport/WebSocketTransport.js +206 -0
- package/dist/transport/WebSocketTransport.js.map +1 -0
- package/dist/transport/index.d.ts +7 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +4 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/types/agent-card.d.ts +53 -0
- package/dist/types/agent-card.d.ts.map +1 -0
- package/dist/types/agent-card.js +2 -0
- package/dist/types/agent-card.js.map +1 -0
- package/dist/types/artifact.d.ts +8 -0
- package/dist/types/artifact.d.ts.map +1 -0
- package/dist/types/artifact.js +2 -0
- package/dist/types/artifact.js.map +1 -0
- package/dist/types/errors.d.ts +25 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +24 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/handler.d.ts +38 -0
- package/dist/types/handler.d.ts.map +1 -0
- package/dist/types/handler.js +2 -0
- package/dist/types/handler.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/keys.d.ts +15 -0
- package/dist/types/keys.d.ts.map +1 -0
- package/dist/types/keys.js +2 -0
- package/dist/types/keys.js.map +1 -0
- package/dist/types/message.d.ts +29 -0
- package/dist/types/message.d.ts.map +1 -0
- package/dist/types/message.js +2 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/part.d.ts +25 -0
- package/dist/types/part.d.ts.map +1 -0
- package/dist/types/part.js +2 -0
- package/dist/types/part.js.map +1 -0
- package/dist/types/payloads.d.ts +34 -0
- package/dist/types/payloads.d.ts.map +1 -0
- package/dist/types/payloads.js +2 -0
- package/dist/types/payloads.js.map +1 -0
- package/dist/types/plugin.d.ts +33 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +2 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/task.d.ts +26 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +2 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/transport.d.ts +24 -0
- package/dist/types/transport.d.ts.map +1 -0
- package/dist/types/transport.js +2 -0
- package/dist/types/transport.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { UnsignedMessage, SigningIntermediates, SchnorrSignatureHex } from '../types/message.js';
|
|
2
|
+
import type { PublicKeyXOnly, PrivateKeyHex } from '../types/keys.js';
|
|
3
|
+
export interface SignResult {
|
|
4
|
+
signature: SchnorrSignatureHex;
|
|
5
|
+
intermediates: SigningIntermediates;
|
|
6
|
+
}
|
|
7
|
+
export interface SignOptions {
|
|
8
|
+
/** Auxiliary randomness for Schnorr signing. Defaults to 32 zero bytes (deterministic). */
|
|
9
|
+
auxRand?: Uint8Array;
|
|
10
|
+
}
|
|
11
|
+
export declare class Signer {
|
|
12
|
+
/**
|
|
13
|
+
* Build the canonical signature input string from a message.
|
|
14
|
+
* Concatenates 7 fields with NULL byte (0x00) separators.
|
|
15
|
+
*/
|
|
16
|
+
static buildSignatureInput(message: UnsignedMessage): string;
|
|
17
|
+
/**
|
|
18
|
+
* Hash the UTF-8 encoded signature input with SHA-256.
|
|
19
|
+
*/
|
|
20
|
+
static hashSignatureInput(signatureInput: string): Uint8Array;
|
|
21
|
+
/**
|
|
22
|
+
* Sign a message. Returns signature hex and intermediates for debugging.
|
|
23
|
+
* Uses deterministic signing (zero aux randomness) by default.
|
|
24
|
+
*/
|
|
25
|
+
static sign(message: UnsignedMessage, privateKey: PrivateKeyHex, options?: SignOptions): SignResult;
|
|
26
|
+
/**
|
|
27
|
+
* Verify a Schnorr signature against a message and public key.
|
|
28
|
+
*/
|
|
29
|
+
static verify(message: UnsignedMessage, signature: SchnorrSignatureHex, publicKey: PublicKeyXOnly): boolean;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=Signer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Signer.d.ts","sourceRoot":"","sources":["../../src/crypto/Signer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACtG,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtE,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,aAAa,EAAE,oBAAoB,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,2FAA2F;IAC3F,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB;AAED,qBAAa,MAAM;IACjB;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM;IAa5D;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,UAAU;IAK7D;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU;IAkBnG;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,mBAAmB,EAC9B,SAAS,EAAE,cAAc,GACxB,OAAO;CAUX"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { schnorr } from '@noble/curves/secp256k1.js';
|
|
2
|
+
import { sha256 } from '@noble/hashes/sha256';
|
|
3
|
+
import { bytesToHex, hexToBytes } from '@noble/hashes/utils';
|
|
4
|
+
import { Canonicalizer } from './Canonicalizer.js';
|
|
5
|
+
export class Signer {
|
|
6
|
+
/**
|
|
7
|
+
* Build the canonical signature input string from a message.
|
|
8
|
+
* Concatenates 7 fields with NULL byte (0x00) separators.
|
|
9
|
+
*/
|
|
10
|
+
static buildSignatureInput(message) {
|
|
11
|
+
const parts = [
|
|
12
|
+
message.id,
|
|
13
|
+
message.from,
|
|
14
|
+
message.to,
|
|
15
|
+
message.type,
|
|
16
|
+
message.method,
|
|
17
|
+
Canonicalizer.canonicalize(message.payload),
|
|
18
|
+
message.timestamp.toString(),
|
|
19
|
+
];
|
|
20
|
+
return parts.join('\x00');
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Hash the UTF-8 encoded signature input with SHA-256.
|
|
24
|
+
*/
|
|
25
|
+
static hashSignatureInput(signatureInput) {
|
|
26
|
+
const inputBytes = new TextEncoder().encode(signatureInput);
|
|
27
|
+
return sha256(inputBytes);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Sign a message. Returns signature hex and intermediates for debugging.
|
|
31
|
+
* Uses deterministic signing (zero aux randomness) by default.
|
|
32
|
+
*/
|
|
33
|
+
static sign(message, privateKey, options) {
|
|
34
|
+
const signatureInput = Signer.buildSignatureInput(message);
|
|
35
|
+
const inputBytes = new TextEncoder().encode(signatureInput);
|
|
36
|
+
const hash = sha256(inputBytes);
|
|
37
|
+
const auxRand = options?.auxRand ?? new Uint8Array(32);
|
|
38
|
+
const sig = schnorr.sign(hash, hexToBytes(privateKey), auxRand);
|
|
39
|
+
return {
|
|
40
|
+
signature: bytesToHex(sig),
|
|
41
|
+
intermediates: {
|
|
42
|
+
canonicalPayload: Canonicalizer.canonicalize(message.payload),
|
|
43
|
+
signatureInput,
|
|
44
|
+
signatureInputHex: bytesToHex(inputBytes),
|
|
45
|
+
sha256Hash: bytesToHex(hash),
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Verify a Schnorr signature against a message and public key.
|
|
51
|
+
*/
|
|
52
|
+
static verify(message, signature, publicKey) {
|
|
53
|
+
try {
|
|
54
|
+
const signatureInput = Signer.buildSignatureInput(message);
|
|
55
|
+
const inputBytes = new TextEncoder().encode(signatureInput);
|
|
56
|
+
const hash = sha256(inputBytes);
|
|
57
|
+
return schnorr.verify(hexToBytes(signature), hash, hexToBytes(publicKey));
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=Signer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Signer.js","sourceRoot":"","sources":["../../src/crypto/Signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAcnD,MAAM,OAAO,MAAM;IACjB;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,OAAwB;QACjD,MAAM,KAAK,GAAG;YACZ,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,IAAI;YACZ,OAAO,CAAC,MAAM;YACd,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;YAC3C,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE;SAC7B,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,cAAsB;QAC9C,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC5D,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,OAAwB,EAAE,UAAyB,EAAE,OAAqB;QACpF,MAAM,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;QAEhE,OAAO;YACL,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC;YAC1B,aAAa,EAAE;gBACb,gBAAgB,EAAE,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC7D,cAAc;gBACd,iBAAiB,EAAE,UAAU,CAAC,UAAU,CAAC;gBACzC,UAAU,EAAE,UAAU,CAAC,IAAI,CAAC;aAC7B;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,OAAwB,EACxB,SAA8B,EAC9B,SAAyB;QAEzB,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAChC,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type SnapErrorData } from '../types/errors.js';
|
|
2
|
+
export declare class SnapError extends Error {
|
|
3
|
+
readonly code: number;
|
|
4
|
+
readonly data?: Record<string, unknown>;
|
|
5
|
+
constructor(code: number, message: string, data?: Record<string, unknown>);
|
|
6
|
+
toJSON(): SnapErrorData;
|
|
7
|
+
static signatureInvalid(details?: Record<string, unknown>): SnapError;
|
|
8
|
+
static signatureMissing(): SnapError;
|
|
9
|
+
static timestampExpired(provided: number, serverTime: number): SnapError;
|
|
10
|
+
static invalidMessage(reason: string): SnapError;
|
|
11
|
+
static invalidPayload(reason: string): SnapError;
|
|
12
|
+
static duplicateMessage(id: string, from: string): SnapError;
|
|
13
|
+
static identityInvalid(address: string): SnapError;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=SnapError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SnapError.d.ts","sourceRoot":"","sources":["../../src/errors/SnapError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEpE,qBAAa,SAAU,SAAQ,KAAK;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAE5B,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOzE,MAAM,IAAI,aAAa;IAQvB,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS;IAIrE,MAAM,CAAC,gBAAgB,IAAI,SAAS;IAIpC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS;IAQxE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAIhD,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS;IAIhD,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS;IAI5D,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;CAGnD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ErrorCodes } from '../types/errors.js';
|
|
2
|
+
export class SnapError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
data;
|
|
5
|
+
constructor(code, message, data) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'SnapError';
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.data = data;
|
|
10
|
+
}
|
|
11
|
+
toJSON() {
|
|
12
|
+
return {
|
|
13
|
+
code: this.code,
|
|
14
|
+
message: this.message,
|
|
15
|
+
...(this.data !== undefined ? { data: this.data } : {}),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
static signatureInvalid(details) {
|
|
19
|
+
return new SnapError(ErrorCodes.SIGNATURE_INVALID, 'Signature verification failed', details);
|
|
20
|
+
}
|
|
21
|
+
static signatureMissing() {
|
|
22
|
+
return new SnapError(ErrorCodes.SIGNATURE_MISSING, 'Signature is required for requests');
|
|
23
|
+
}
|
|
24
|
+
static timestampExpired(provided, serverTime) {
|
|
25
|
+
return new SnapError(ErrorCodes.TIMESTAMP_EXPIRED, 'Timestamp outside acceptable window', {
|
|
26
|
+
provided,
|
|
27
|
+
serverTime,
|
|
28
|
+
maxDrift: 60,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
static invalidMessage(reason) {
|
|
32
|
+
return new SnapError(ErrorCodes.INVALID_MESSAGE, reason);
|
|
33
|
+
}
|
|
34
|
+
static invalidPayload(reason) {
|
|
35
|
+
return new SnapError(ErrorCodes.INVALID_PAYLOAD, reason);
|
|
36
|
+
}
|
|
37
|
+
static duplicateMessage(id, from) {
|
|
38
|
+
return new SnapError(ErrorCodes.DUPLICATE_MESSAGE, 'Duplicate message ID', { id, from });
|
|
39
|
+
}
|
|
40
|
+
static identityInvalid(address) {
|
|
41
|
+
return new SnapError(ErrorCodes.IDENTITY_INVALID, 'Invalid P2TR address', { address });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=SnapError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SnapError.js","sourceRoot":"","sources":["../../src/errors/SnapError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,oBAAoB,CAAC;AAEpE,MAAM,OAAO,SAAU,SAAQ,KAAK;IACzB,IAAI,CAAS;IACb,IAAI,CAA2B;IAExC,YAAY,IAAY,EAAE,OAAe,EAAE,IAA8B;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,OAAiC;QACvD,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,iBAAiB,EAAE,+BAA+B,EAAE,OAAO,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,CAAC,gBAAgB;QACrB,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,iBAAiB,EAAE,oCAAoC,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,QAAgB,EAAE,UAAkB;QAC1D,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,iBAAiB,EAAE,qCAAqC,EAAE;YACxF,QAAQ;YACR,UAAU;YACV,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAc;QAClC,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,MAAc;QAClC,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,EAAU,EAAE,IAAY;QAC9C,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,OAAe;QACpC,OAAO,IAAI,SAAS,CAAC,UAAU,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export { KeyManager } from './crypto/KeyManager.js';
|
|
2
|
+
export { Canonicalizer } from './crypto/Canonicalizer.js';
|
|
3
|
+
export { Signer } from './crypto/Signer.js';
|
|
4
|
+
export type { SignResult, SignOptions } from './crypto/Signer.js';
|
|
5
|
+
export { MessageBuilder } from './messaging/MessageBuilder.js';
|
|
6
|
+
export { MessageSigner } from './messaging/MessageSigner.js';
|
|
7
|
+
export { MessageValidator } from './messaging/MessageValidator.js';
|
|
8
|
+
export type { ValidationOptions, ValidationResult } from './messaging/MessageValidator.js';
|
|
9
|
+
export { SnapError } from './errors/SnapError.js';
|
|
10
|
+
export { PluginRegistry } from './plugins/PluginRegistry.js';
|
|
11
|
+
export type { Network, HexString, PublicKeyXOnly, PrivateKeyHex, P2TRAddress, KeyPair, } from './types/keys.js';
|
|
12
|
+
export type { MessageType, MethodName, TaskState, SchnorrSignatureHex, UnsignedMessage, SnapMessage, SigningIntermediates, } from './types/message.js';
|
|
13
|
+
export type { SnapErrorData, ErrorCode } from './types/errors.js';
|
|
14
|
+
export { ErrorCodes } from './types/errors.js';
|
|
15
|
+
export type { TransportLogger, TransportPlugin, TransportSendOptions, ReplayStore, TaskStore, Middleware, MiddlewareContext, NextFn, } from './types/plugin.js';
|
|
16
|
+
export type { MediaType, TextPart, RawPart, UrlPart, DataPart, Part, } from './types/part.js';
|
|
17
|
+
export type { Artifact } from './types/artifact.js';
|
|
18
|
+
export type { MessageRole, TaskStatus, InnerMessage, Task, } from './types/task.js';
|
|
19
|
+
export type { Skill, Capabilities, Trust, Provider, EndpointProtocol, AgentEndpoint, AgentCard, } from './types/agent-card.js';
|
|
20
|
+
export type { MessageSendRequest, MessageSendResponse, TasksGetRequest, TasksGetResponse, TasksCancelRequest, TasksCancelResponse, } from './types/payloads.js';
|
|
21
|
+
export type { MethodPayloadMap, HandlerContext, MethodHandler, StreamMethodHandler, } from './types/handler.js';
|
|
22
|
+
export type { StreamTransportPlugin, TaskProgressEvent, TaskArtifactEvent, } from './types/transport.js';
|
|
23
|
+
export { InMemoryReplayStore } from './stores/InMemoryReplayStore.js';
|
|
24
|
+
export { InMemoryTaskStore } from './stores/InMemoryTaskStore.js';
|
|
25
|
+
export { AgentCardBuilder } from './agent/AgentCardBuilder.js';
|
|
26
|
+
export { SnapAgent } from './agent/SnapAgent.js';
|
|
27
|
+
export type { SnapAgentConfig } from './agent/SnapAgent.js';
|
|
28
|
+
export { HttpTransport } from './transport/HttpTransport.js';
|
|
29
|
+
export type { HttpTransportConfig } from './transport/HttpTransport.js';
|
|
30
|
+
export { WebSocketTransport } from './transport/WebSocketTransport.js';
|
|
31
|
+
export type { WebSocketTransportConfig } from './transport/WebSocketTransport.js';
|
|
32
|
+
export { NostrTransport, SNAP_MESSAGE_KIND, SNAP_AGENT_CARD_KIND } from './transport/NostrTransport.js';
|
|
33
|
+
export type { NostrTransportConfig, AgentDiscoveryFilter } from './transport/NostrTransport.js';
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAG3F,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,YAAY,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,WAAW,EACX,OAAO,GACR,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,WAAW,EACX,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,YAAY,EACV,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,WAAW,EACX,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,MAAM,GACP,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,SAAS,EACT,QAAQ,EACR,OAAO,EACP,OAAO,EACP,QAAQ,EACR,IAAI,GACL,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,YAAY,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,IAAI,GACL,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,KAAK,EACL,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,SAAS,GACV,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,YAAY,EACV,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,YAAY,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAElF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACxG,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Core crypto
|
|
2
|
+
export { KeyManager } from './crypto/KeyManager.js';
|
|
3
|
+
export { Canonicalizer } from './crypto/Canonicalizer.js';
|
|
4
|
+
export { Signer } from './crypto/Signer.js';
|
|
5
|
+
// Messaging
|
|
6
|
+
export { MessageBuilder } from './messaging/MessageBuilder.js';
|
|
7
|
+
export { MessageSigner } from './messaging/MessageSigner.js';
|
|
8
|
+
export { MessageValidator } from './messaging/MessageValidator.js';
|
|
9
|
+
// Errors
|
|
10
|
+
export { SnapError } from './errors/SnapError.js';
|
|
11
|
+
// Plugins
|
|
12
|
+
export { PluginRegistry } from './plugins/PluginRegistry.js';
|
|
13
|
+
export { ErrorCodes } from './types/errors.js';
|
|
14
|
+
// Stores
|
|
15
|
+
export { InMemoryReplayStore } from './stores/InMemoryReplayStore.js';
|
|
16
|
+
export { InMemoryTaskStore } from './stores/InMemoryTaskStore.js';
|
|
17
|
+
// Agent
|
|
18
|
+
export { AgentCardBuilder } from './agent/AgentCardBuilder.js';
|
|
19
|
+
export { SnapAgent } from './agent/SnapAgent.js';
|
|
20
|
+
// Transports
|
|
21
|
+
export { HttpTransport } from './transport/HttpTransport.js';
|
|
22
|
+
export { WebSocketTransport } from './transport/WebSocketTransport.js';
|
|
23
|
+
export { NostrTransport, SNAP_MESSAGE_KIND, SNAP_AGENT_CARD_KIND } from './transport/NostrTransport.js';
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,YAAY;AACZ,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGnE,SAAS;AACT,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAuB7D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA+D/C,SAAS;AACT,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,QAAQ;AACR,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjD,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { UnsignedMessage, MessageType, MethodName } from '../types/message.js';
|
|
2
|
+
import type { P2TRAddress } from '../types/keys.js';
|
|
3
|
+
export declare class MessageBuilder {
|
|
4
|
+
private _id?;
|
|
5
|
+
private _version;
|
|
6
|
+
private _from?;
|
|
7
|
+
private _to?;
|
|
8
|
+
private _type;
|
|
9
|
+
private _method?;
|
|
10
|
+
private _payload;
|
|
11
|
+
private _timestamp?;
|
|
12
|
+
id(id: string): this;
|
|
13
|
+
version(version: string): this;
|
|
14
|
+
from(from: P2TRAddress): this;
|
|
15
|
+
to(to: P2TRAddress): this;
|
|
16
|
+
type(type: MessageType): this;
|
|
17
|
+
method(method: MethodName): this;
|
|
18
|
+
payload(payload: Record<string, unknown>): this;
|
|
19
|
+
timestamp(timestamp: number): this;
|
|
20
|
+
/**
|
|
21
|
+
* Build the unsigned message. Throws if required fields are missing.
|
|
22
|
+
*/
|
|
23
|
+
build(): UnsignedMessage;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=MessageBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBuilder.d.ts","sourceRoot":"","sources":["../../src/messaging/MessageBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qBAAa,cAAc;IACzB,OAAO,CAAC,GAAG,CAAC,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,GAAG,CAAC,CAAc;IAC1B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,OAAO,CAAC,CAAa;IAC7B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,UAAU,CAAC,CAAS;IAE5B,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKpB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAK9B,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAK7B,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAKzB,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAK7B,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAKhC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAK/C,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKlC;;OAEG;IACH,KAAK,IAAI,eAAe;CAkBzB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export class MessageBuilder {
|
|
2
|
+
_id;
|
|
3
|
+
_version = '0.1';
|
|
4
|
+
_from;
|
|
5
|
+
_to;
|
|
6
|
+
_type = 'request';
|
|
7
|
+
_method;
|
|
8
|
+
_payload = {};
|
|
9
|
+
_timestamp;
|
|
10
|
+
id(id) {
|
|
11
|
+
this._id = id;
|
|
12
|
+
return this;
|
|
13
|
+
}
|
|
14
|
+
version(version) {
|
|
15
|
+
this._version = version;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
from(from) {
|
|
19
|
+
this._from = from;
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
to(to) {
|
|
23
|
+
this._to = to;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
type(type) {
|
|
27
|
+
this._type = type;
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
method(method) {
|
|
31
|
+
this._method = method;
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
payload(payload) {
|
|
35
|
+
this._payload = payload;
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
timestamp(timestamp) {
|
|
39
|
+
this._timestamp = timestamp;
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Build the unsigned message. Throws if required fields are missing.
|
|
44
|
+
*/
|
|
45
|
+
build() {
|
|
46
|
+
if (!this._id)
|
|
47
|
+
throw new Error('id is required');
|
|
48
|
+
if (!this._from)
|
|
49
|
+
throw new Error('from is required');
|
|
50
|
+
if (!this._to)
|
|
51
|
+
throw new Error('to is required');
|
|
52
|
+
if (!this._method)
|
|
53
|
+
throw new Error('method is required');
|
|
54
|
+
if (this._timestamp === undefined)
|
|
55
|
+
throw new Error('timestamp is required');
|
|
56
|
+
return {
|
|
57
|
+
id: this._id,
|
|
58
|
+
version: this._version,
|
|
59
|
+
from: this._from,
|
|
60
|
+
to: this._to,
|
|
61
|
+
type: this._type,
|
|
62
|
+
method: this._method,
|
|
63
|
+
payload: this._payload,
|
|
64
|
+
timestamp: this._timestamp,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=MessageBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBuilder.js","sourceRoot":"","sources":["../../src/messaging/MessageBuilder.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,cAAc;IACjB,GAAG,CAAU;IACb,QAAQ,GAAW,KAAK,CAAC;IACzB,KAAK,CAAe;IACpB,GAAG,CAAe;IAClB,KAAK,GAAgB,SAAS,CAAC;IAC/B,OAAO,CAAc;IACrB,QAAQ,GAA4B,EAAE,CAAC;IACvC,UAAU,CAAU;IAE5B,EAAE,CAAC,EAAU;QACX,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAiB;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,EAAE,CAAC,EAAe;QAChB,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,IAAiB;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,MAAkB;QACvB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,OAAgC;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,SAAiB;QACzB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAE5E,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,EAAE,EAAE,IAAI,CAAC,GAAG;YACZ,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,SAAS,EAAE,IAAI,CAAC,UAAU;SAC3B,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type SignOptions } from '../crypto/Signer.js';
|
|
2
|
+
import type { UnsignedMessage, SnapMessage, SigningIntermediates } from '../types/message.js';
|
|
3
|
+
import type { PrivateKeyHex, P2TRAddress, Network } from '../types/keys.js';
|
|
4
|
+
export declare class MessageSigner {
|
|
5
|
+
private readonly privateKey;
|
|
6
|
+
private readonly signOptions;
|
|
7
|
+
constructor(privateKey: PrivateKeyHex, options?: SignOptions);
|
|
8
|
+
/**
|
|
9
|
+
* Sign an unsigned message. Returns a full SnapMessage with sig field.
|
|
10
|
+
*/
|
|
11
|
+
sign(message: UnsignedMessage): SnapMessage;
|
|
12
|
+
/**
|
|
13
|
+
* Sign and return intermediates for debugging.
|
|
14
|
+
*/
|
|
15
|
+
signWithIntermediates(message: UnsignedMessage): {
|
|
16
|
+
message: SnapMessage;
|
|
17
|
+
intermediates: SigningIntermediates;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Get the P2TR address for this signer's key pair.
|
|
21
|
+
*/
|
|
22
|
+
getAddress(network?: Network): P2TRAddress;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=MessageSigner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageSigner.d.ts","sourceRoot":"","sources":["../../src/messaging/MessageSigner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,WAAW,EAAmB,MAAM,qBAAqB,CAAC;AAEhF,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE5E,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,WAAW;IAK5D;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,WAAW;IAK3C;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE,eAAe,GAAG;QAC/C,OAAO,EAAE,WAAW,CAAC;QACrB,aAAa,EAAE,oBAAoB,CAAC;KACrC;IAQD;;OAEG;IACH,UAAU,CAAC,OAAO,GAAE,OAAmB,GAAG,WAAW;CAGtD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Signer } from '../crypto/Signer.js';
|
|
2
|
+
import { KeyManager } from '../crypto/KeyManager.js';
|
|
3
|
+
export class MessageSigner {
|
|
4
|
+
privateKey;
|
|
5
|
+
signOptions;
|
|
6
|
+
constructor(privateKey, options) {
|
|
7
|
+
this.privateKey = privateKey;
|
|
8
|
+
this.signOptions = options ?? {};
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Sign an unsigned message. Returns a full SnapMessage with sig field.
|
|
12
|
+
*/
|
|
13
|
+
sign(message) {
|
|
14
|
+
const result = Signer.sign(message, this.privateKey, this.signOptions);
|
|
15
|
+
return { ...message, sig: result.signature };
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Sign and return intermediates for debugging.
|
|
19
|
+
*/
|
|
20
|
+
signWithIntermediates(message) {
|
|
21
|
+
const result = Signer.sign(message, this.privateKey, this.signOptions);
|
|
22
|
+
return {
|
|
23
|
+
message: { ...message, sig: result.signature },
|
|
24
|
+
intermediates: result.intermediates,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get the P2TR address for this signer's key pair.
|
|
29
|
+
*/
|
|
30
|
+
getAddress(network = 'mainnet') {
|
|
31
|
+
return KeyManager.publicKeyToP2TR(KeyManager.getPublicKey(this.privateKey), network);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=MessageSigner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageSigner.js","sourceRoot":"","sources":["../../src/messaging/MessageSigner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqC,MAAM,qBAAqB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD,MAAM,OAAO,aAAa;IACP,UAAU,CAAgB;IAC1B,WAAW,CAAc;IAE1C,YAAY,UAAyB,EAAE,OAAqB;QAC1D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAwB;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACvE,OAAO,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,OAAwB;QAI5C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE;YAC9C,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,UAAmB,SAAS;QACrC,OAAO,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;IACvF,CAAC;CACF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SnapError } from '../errors/SnapError.js';
|
|
2
|
+
import type { SnapMessage } from '../types/message.js';
|
|
3
|
+
export interface ValidationOptions {
|
|
4
|
+
/** Skip timestamp check (useful for test vectors with fixed timestamps). */
|
|
5
|
+
skipTimestampCheck?: boolean;
|
|
6
|
+
/** Custom max clock drift in seconds. Default: 60. */
|
|
7
|
+
maxClockDrift?: number;
|
|
8
|
+
/** Skip replay check. Default: false. */
|
|
9
|
+
skipReplayCheck?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ValidationResult {
|
|
12
|
+
valid: boolean;
|
|
13
|
+
error?: SnapError;
|
|
14
|
+
}
|
|
15
|
+
export declare class MessageValidator {
|
|
16
|
+
/**
|
|
17
|
+
* Validate message structure (required fields, types, patterns).
|
|
18
|
+
* Does NOT verify signature.
|
|
19
|
+
*/
|
|
20
|
+
static validateStructure(message: unknown): message is SnapMessage;
|
|
21
|
+
/**
|
|
22
|
+
* Verify the Schnorr signature on a message.
|
|
23
|
+
* Extracts public key from message.from P2TR address.
|
|
24
|
+
*/
|
|
25
|
+
static verifySignature(message: SnapMessage): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Full validation: structure + signature + optional timestamp.
|
|
28
|
+
* @throws SnapError on failure.
|
|
29
|
+
*/
|
|
30
|
+
static validate(message: unknown, options?: ValidationOptions): void;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=MessageValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageValidator.d.ts","sourceRoot":"","sources":["../../src/messaging/MessageValidator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAQD,qBAAa,gBAAgB;IAC3B;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,WAAW;IA0BlE;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO;IAKrD;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI;CAyBrE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Signer } from '../crypto/Signer.js';
|
|
2
|
+
import { KeyManager } from '../crypto/KeyManager.js';
|
|
3
|
+
import { SnapError } from '../errors/SnapError.js';
|
|
4
|
+
const P2TR_PATTERN = /^(bc1p|tb1p)[a-z0-9]{58}$/;
|
|
5
|
+
const MESSAGE_ID_PATTERN = /^[a-zA-Z0-9_-]+$/;
|
|
6
|
+
const METHOD_PATTERN = /^[a-z]+\/[a-z_]+$/;
|
|
7
|
+
const SIG_PATTERN = /^[0-9a-f]{128}$/;
|
|
8
|
+
const VALID_TYPES = new Set(['request', 'response', 'event']);
|
|
9
|
+
export class MessageValidator {
|
|
10
|
+
/**
|
|
11
|
+
* Validate message structure (required fields, types, patterns).
|
|
12
|
+
* Does NOT verify signature.
|
|
13
|
+
*/
|
|
14
|
+
static validateStructure(message) {
|
|
15
|
+
if (typeof message !== 'object' || message === null)
|
|
16
|
+
return false;
|
|
17
|
+
const msg = message;
|
|
18
|
+
// Required fields
|
|
19
|
+
if (typeof msg.id !== 'string' || !MESSAGE_ID_PATTERN.test(msg.id))
|
|
20
|
+
return false;
|
|
21
|
+
if (typeof msg.version !== 'string')
|
|
22
|
+
return false;
|
|
23
|
+
if (typeof msg.from !== 'string' || !P2TR_PATTERN.test(msg.from))
|
|
24
|
+
return false;
|
|
25
|
+
if (typeof msg.to !== 'string' || !P2TR_PATTERN.test(msg.to))
|
|
26
|
+
return false;
|
|
27
|
+
if (typeof msg.type !== 'string' || !VALID_TYPES.has(msg.type))
|
|
28
|
+
return false;
|
|
29
|
+
if (typeof msg.method !== 'string' || !METHOD_PATTERN.test(msg.method))
|
|
30
|
+
return false;
|
|
31
|
+
if (typeof msg.payload !== 'object' || msg.payload === null)
|
|
32
|
+
return false;
|
|
33
|
+
if (typeof msg.timestamp !== 'number' || !Number.isInteger(msg.timestamp) || msg.timestamp < 0)
|
|
34
|
+
return false;
|
|
35
|
+
// sig: required for requests, optional for responses
|
|
36
|
+
if (msg.type === 'request') {
|
|
37
|
+
if (typeof msg.sig !== 'string' || !SIG_PATTERN.test(msg.sig))
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
else if (msg.sig !== undefined) {
|
|
41
|
+
if (typeof msg.sig !== 'string' || !SIG_PATTERN.test(msg.sig))
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Verify the Schnorr signature on a message.
|
|
48
|
+
* Extracts public key from message.from P2TR address.
|
|
49
|
+
*/
|
|
50
|
+
static verifySignature(message) {
|
|
51
|
+
const publicKey = KeyManager.p2trToPublicKey(message.from);
|
|
52
|
+
return Signer.verify(message, message.sig, publicKey);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Full validation: structure + signature + optional timestamp.
|
|
56
|
+
* @throws SnapError on failure.
|
|
57
|
+
*/
|
|
58
|
+
static validate(message, options) {
|
|
59
|
+
if (!MessageValidator.validateStructure(message)) {
|
|
60
|
+
throw SnapError.invalidMessage('Message structure validation failed');
|
|
61
|
+
}
|
|
62
|
+
const msg = message;
|
|
63
|
+
// Timestamp check
|
|
64
|
+
if (!options?.skipTimestampCheck) {
|
|
65
|
+
const maxDrift = options?.maxClockDrift ?? 60;
|
|
66
|
+
const now = Math.floor(Date.now() / 1000);
|
|
67
|
+
if (Math.abs(now - msg.timestamp) > maxDrift) {
|
|
68
|
+
throw SnapError.timestampExpired(msg.timestamp, now);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Signature verification (only if sig is present)
|
|
72
|
+
if (msg.sig) {
|
|
73
|
+
if (!MessageValidator.verifySignature(msg)) {
|
|
74
|
+
throw SnapError.signatureInvalid();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (msg.type === 'request') {
|
|
78
|
+
throw SnapError.signatureMissing();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=MessageValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageValidator.js","sourceRoot":"","sources":["../../src/messaging/MessageValidator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { MessageBuilder } from './MessageBuilder.js';
|
|
2
|
+
export { MessageSigner } from './MessageSigner.js';
|
|
3
|
+
export { MessageValidator } from './MessageValidator.js';
|
|
4
|
+
export type { ValidationOptions, ValidationResult } from './MessageValidator.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messaging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messaging/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TransportPlugin, ReplayStore, TaskStore, Middleware } from '../types/plugin.js';
|
|
2
|
+
export declare class PluginRegistry {
|
|
3
|
+
private transports;
|
|
4
|
+
private middlewares;
|
|
5
|
+
private replayStore?;
|
|
6
|
+
private taskStore?;
|
|
7
|
+
registerTransport(plugin: TransportPlugin): void;
|
|
8
|
+
getTransport(name: string): TransportPlugin | undefined;
|
|
9
|
+
getTransportNames(): string[];
|
|
10
|
+
registerMiddleware(middleware: Middleware): void;
|
|
11
|
+
getMiddlewareChain(): ReadonlyArray<Middleware>;
|
|
12
|
+
setReplayStore(store: ReplayStore): void;
|
|
13
|
+
getReplayStore(): ReplayStore | undefined;
|
|
14
|
+
setTaskStore(store: TaskStore): void;
|
|
15
|
+
getTaskStore(): TaskStore | undefined;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=PluginRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginRegistry.d.ts","sourceRoot":"","sources":["../../src/plugins/PluginRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE9F,qBAAa,cAAc;IACzB,OAAO,CAAC,UAAU,CAAsC;IACxD,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,SAAS,CAAC,CAAY;IAE9B,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAIhD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIvD,iBAAiB,IAAI,MAAM,EAAE;IAI7B,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIhD,kBAAkB,IAAI,aAAa,CAAC,UAAU,CAAC;IAI/C,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAIxC,cAAc,IAAI,WAAW,GAAG,SAAS;IAIzC,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIpC,YAAY,IAAI,SAAS,GAAG,SAAS;CAGtC"}
|