@abbababa/sdk 0.6.0 → 0.9.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 (63) hide show
  1. package/README.md +113 -44
  2. package/dist/agents.d.ts +26 -3
  3. package/dist/agents.d.ts.map +1 -1
  4. package/dist/agents.js +27 -0
  5. package/dist/agents.js.map +1 -1
  6. package/dist/buyer.d.ts +67 -6
  7. package/dist/buyer.d.ts.map +1 -1
  8. package/dist/buyer.js +124 -3
  9. package/dist/buyer.js.map +1 -1
  10. package/dist/channels.d.ts +2 -2
  11. package/dist/channels.d.ts.map +1 -1
  12. package/dist/channels.js.map +1 -1
  13. package/dist/checkout.d.ts +2 -2
  14. package/dist/checkout.d.ts.map +1 -1
  15. package/dist/checkout.js.map +1 -1
  16. package/dist/client.d.ts +3 -3
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js +7 -6
  19. package/dist/client.js.map +1 -1
  20. package/dist/crypto.d.ts +93 -0
  21. package/dist/crypto.d.ts.map +1 -0
  22. package/dist/crypto.js +298 -0
  23. package/dist/crypto.js.map +1 -0
  24. package/dist/errors.d.ts +7 -7
  25. package/dist/errors.d.ts.map +1 -1
  26. package/dist/errors.js +8 -8
  27. package/dist/errors.js.map +1 -1
  28. package/dist/index.d.ts +6 -3
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +6 -2
  31. package/dist/index.js.map +1 -1
  32. package/dist/memory.d.ts +11 -4
  33. package/dist/memory.d.ts.map +1 -1
  34. package/dist/memory.js +9 -2
  35. package/dist/memory.js.map +1 -1
  36. package/dist/messages.d.ts +27 -3
  37. package/dist/messages.d.ts.map +1 -1
  38. package/dist/messages.js +35 -0
  39. package/dist/messages.js.map +1 -1
  40. package/dist/seller.d.ts +60 -5
  41. package/dist/seller.d.ts.map +1 -1
  42. package/dist/seller.js +109 -2
  43. package/dist/seller.js.map +1 -1
  44. package/dist/services.d.ts +2 -2
  45. package/dist/services.d.ts.map +1 -1
  46. package/dist/services.js.map +1 -1
  47. package/dist/transactions.d.ts +2 -2
  48. package/dist/transactions.d.ts.map +1 -1
  49. package/dist/transactions.js.map +1 -1
  50. package/dist/types.d.ts +116 -8
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/types.js.map +1 -1
  53. package/dist/wallet/constants.d.ts +10 -6
  54. package/dist/wallet/constants.d.ts.map +1 -1
  55. package/dist/wallet/constants.js +36 -18
  56. package/dist/wallet/constants.js.map +1 -1
  57. package/dist/wallet/session-keys.js +8 -8
  58. package/dist/wallet/session-keys.js.map +1 -1
  59. package/dist/wallet/smart-account.d.ts +6 -3
  60. package/dist/wallet/smart-account.d.ts.map +1 -1
  61. package/dist/wallet/smart-account.js +27 -5
  62. package/dist/wallet/smart-account.js.map +1 -1
  63. package/package.json +15 -5
@@ -1,8 +1,8 @@
1
- import type { AbbabaClient } from './client.js';
1
+ import type { AbbaBabaClient } from './client.js';
2
2
  import type { ApiResponse, CheckoutInput, CheckoutResult } from './types.js';
3
3
  export declare class CheckoutClient {
4
4
  private client;
5
- constructor(client: AbbabaClient);
5
+ constructor(client: AbbaBabaClient);
6
6
  purchase(input: CheckoutInput): Promise<ApiResponse<CheckoutResult>>;
7
7
  }
8
8
  //# sourceMappingURL=checkout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../src/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE5E,qBAAa,cAAc;IACb,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAElC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;CAG3E"}
1
+ {"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../src/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE5E,qBAAa,cAAc;IACb,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEpC,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;CAG3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../src/checkout.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;IAAG,CAAC;IAE5C,KAAK,CAAC,QAAQ,CAAC,KAAoB;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAiB,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAA;IAC/E,CAAC;CACF"}
1
+ {"version":3,"file":"checkout.js","sourceRoot":"","sources":["../src/checkout.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAE9C,KAAK,CAAC,QAAQ,CAAC,KAAoB;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAiB,MAAM,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAA;IAC/E,CAAC;CACF"}
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { AbbabaConfig, ApiResponse } from './types.js';
1
+ import type { AbbaBabaConfig, ApiResponse } from './types.js';
2
2
  import { ServicesClient } from './services.js';
3
3
  import { CheckoutClient } from './checkout.js';
4
4
  import { TransactionsClient } from './transactions.js';
@@ -7,7 +7,7 @@ import { MessagesClient } from './messages.js';
7
7
  import { ChannelsClient } from './channels.js';
8
8
  import { AgentsClient } from './agents.js';
9
9
  import { type RegisterOptions, type RegisterResult } from './register.js';
10
- export declare class AbbabaClient {
10
+ export declare class AbbaBabaClient {
11
11
  private apiKey;
12
12
  private baseUrl;
13
13
  private timeout;
@@ -23,7 +23,7 @@ export declare class AbbabaClient {
23
23
  * No browser, email, or CAPTCHA required.
24
24
  */
25
25
  static register(opts: RegisterOptions): Promise<RegisterResult>;
26
- constructor(config: AbbabaConfig);
26
+ constructor(config: AbbaBabaConfig);
27
27
  request<T>(method: string, path: string, body?: unknown, queryParams?: Record<string, string>): Promise<ApiResponse<T>>;
28
28
  }
29
29
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAU3D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAY,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAKnF,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAQ;IAEvB,SAAgB,QAAQ,EAAE,cAAc,CAAA;IACxC,SAAgB,QAAQ,EAAE,cAAc,CAAA;IACxC,SAAgB,YAAY,EAAE,kBAAkB,CAAA;IAChD,SAAgB,MAAM,EAAE,YAAY,CAAA;IACpC,SAAgB,QAAQ,EAAE,cAAc,CAAA;IACxC,SAAgB,QAAQ,EAAE,cAAc,CAAA;IACxC,SAAgB,MAAM,EAAE,YAAY,CAAA;IAEpC;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;gBAInD,MAAM,EAAE,YAAY;IAkB1B,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAiG3B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAU7D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAY,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAKnF,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAQ;IAEvB,SAAgB,QAAQ,EAAE,cAAc,CAAA;IACxC,SAAgB,QAAQ,EAAE,cAAc,CAAA;IACxC,SAAgB,YAAY,EAAE,kBAAkB,CAAA;IAChD,SAAgB,MAAM,EAAE,YAAY,CAAA;IACpC,SAAgB,QAAQ,EAAE,cAAc,CAAA;IACxC,SAAgB,QAAQ,EAAE,cAAc,CAAA;IACxC,SAAgB,MAAM,EAAE,YAAY,CAAA;IAEpC;;;OAGG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;gBAInD,MAAM,EAAE,cAAc;IAkB5B,OAAO,CAAC,CAAC,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;CAkG3B"}
package/dist/client.js CHANGED
@@ -1,4 +1,4 @@
1
- import { AbbabaError, AuthenticationError, ForbiddenError, NotFoundError, PaymentRequiredError, RateLimitError, ValidationError, } from './errors.js';
1
+ import { AbbaBabaError, AuthenticationError, ForbiddenError, NotFoundError, PaymentRequiredError, RateLimitError, ValidationError, } from './errors.js';
2
2
  import { ServicesClient } from './services.js';
3
3
  import { CheckoutClient } from './checkout.js';
4
4
  import { TransactionsClient } from './transactions.js';
@@ -9,7 +9,7 @@ import { AgentsClient } from './agents.js';
9
9
  import { register } from './register.js';
10
10
  const DEFAULT_BASE_URL = 'https://abbababa.com';
11
11
  const DEFAULT_TIMEOUT = 30_000;
12
- export class AbbabaClient {
12
+ export class AbbaBabaClient {
13
13
  apiKey;
14
14
  baseUrl;
15
15
  timeout;
@@ -58,6 +58,7 @@ export class AbbabaClient {
58
58
  const headers = {
59
59
  'X-API-Key': this.apiKey,
60
60
  'Accept': 'application/json',
61
+ 'User-Agent': `abbababa-sdk/0.9.0`,
61
62
  };
62
63
  const init = {
63
64
  method,
@@ -76,9 +77,9 @@ export class AbbabaClient {
76
77
  }
77
78
  catch (err) {
78
79
  if (err instanceof DOMException && err.name === 'AbortError') {
79
- throw new AbbabaError(0, `Request timed out after ${this.timeout}ms`);
80
+ throw new AbbaBabaError(0, `Request timed out after ${this.timeout}ms`);
80
81
  }
81
- throw new AbbabaError(0, `Network error: ${err instanceof Error ? err.message : String(err)}`);
82
+ throw new AbbaBabaError(0, `Network error: ${err instanceof Error ? err.message : String(err)}`);
82
83
  }
83
84
  finally {
84
85
  clearTimeout(timer);
@@ -88,7 +89,7 @@ export class AbbabaClient {
88
89
  json = await response.json();
89
90
  }
90
91
  catch {
91
- throw new AbbabaError(response.status, `Invalid JSON response (HTTP ${response.status})`);
92
+ throw new AbbaBabaError(response.status, `Invalid JSON response (HTTP ${response.status})`);
92
93
  }
93
94
  if (!response.ok) {
94
95
  const message = json.error ?? `HTTP ${response.status}`;
@@ -123,7 +124,7 @@ export class AbbabaClient {
123
124
  throw new RateLimitError(message, retryAfter);
124
125
  }
125
126
  default:
126
- throw new AbbabaError(response.status, message, json.details);
127
+ throw new AbbaBabaError(response.status, message, json.details);
127
128
  }
128
129
  }
129
130
  return json;
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Abba Baba E2E Encryption — ECIES with Dual ECDH + Forward Secrecy
3
+ *
4
+ * Protocol: abba-e2e-v1
5
+ *
6
+ * Per-message encryption:
7
+ * 1. Generate ephemeral secp256k1 key pair (epk_priv, epk_pub)
8
+ * 2. ECDH_1 = getSharedSecret(epk_priv, recipient_pub) — ephemeral ↔ recipient
9
+ * 3. ECDH_2 = getSharedSecret(sender_priv, recipient_pub) — static ↔ static
10
+ * 4. ikm = ECDH_1.x || ECDH_2.x (64 bytes)
11
+ * 5. aad = JSON({ v, from, to, epk, ts })
12
+ * 6. enc_key = HKDF-SHA256(ikm, salt=random16, info="abba-e2e-v1-enc", 32)
13
+ * 7. ct = AES-256-GCM(enc_key, iv=random12, plaintext, aad)
14
+ * 8. sig = secp256k1.sign(sha256(iv || ct || aad), sender_priv)
15
+ *
16
+ * Wire: body field `_e2e` carries the EncryptedEnvelope JSON.
17
+ */
18
+ import type { EncryptedEnvelope, E2EDecryptResult, DeliveryAttestation } from './types.js';
19
+ /**
20
+ * Encrypt a plaintext object for a recipient's secp256k1 public key.
21
+ *
22
+ * @param plaintext - Object to encrypt (JSON-serialized)
23
+ * @param recipientPubKey - Recipient's compressed secp256k1 public key, hex (33 bytes)
24
+ * @param senderPrivKey - Sender's secp256k1 private key, hex (32 bytes)
25
+ * @param senderPubKey - Sender's compressed secp256k1 public key, hex (33 bytes)
26
+ */
27
+ export declare function encrypt(plaintext: Record<string, unknown>, recipientPubKey: string, senderPrivKey: string, senderPubKey: string): Promise<EncryptedEnvelope>;
28
+ /**
29
+ * Decrypt an EncryptedEnvelope using the recipient's private key.
30
+ * Verifies the sender's ECDSA signature. Throws on tampered ciphertext
31
+ * (GCM auth tag failure) or malformed envelope.
32
+ *
33
+ * @param envelope - EncryptedEnvelope from the `_e2e` body field
34
+ * @param recipientPrivKey - Recipient's secp256k1 private key, hex (32 bytes)
35
+ */
36
+ export declare function decrypt(envelope: EncryptedEnvelope, recipientPrivKey: string): Promise<E2EDecryptResult>;
37
+ /**
38
+ * Generate a `DeliveryAttestation` from a plaintext payload before encrypting.
39
+ *
40
+ * The attestation is stored in plaintext alongside the `_e2e` envelope so the
41
+ * dispute resolver can reason about the delivery without decrypting it. The
42
+ * `hash` ties every semantic field to the actual content — fabricating fields
43
+ * causes hash mismatch when the seller reveals plaintext.
44
+ */
45
+ export declare function generateAttestation(payload: Record<string, unknown>): DeliveryAttestation;
46
+ /**
47
+ * Verify that a `DeliveryAttestation` hash matches the given plaintext.
48
+ * Returns `true` if the hash is valid, `false` if tampered.
49
+ *
50
+ * Call this before accepting dispute evidence that claims to reveal plaintext.
51
+ */
52
+ export declare function verifyAttestation(plaintext: Record<string, unknown>, attestation: DeliveryAttestation): boolean;
53
+ /**
54
+ * Derive the compressed secp256k1 public key (33 bytes, hex) from a private key.
55
+ */
56
+ export declare function getPublicKey(privateKeyHex: string): string;
57
+ /**
58
+ * Generate a new random secp256k1 private key (hex, 32 bytes).
59
+ */
60
+ export declare function generatePrivateKey(): string;
61
+ /**
62
+ * Holds a secp256k1 keypair for an agent and provides encrypt/decrypt helpers.
63
+ *
64
+ * @example
65
+ * const crypto = AgentCrypto.fromPrivateKey(process.env.AGENT_E2E_PRIVATE_KEY!)
66
+ * // Encrypt a message for a known recipient public key:
67
+ * const envelope = await crypto.encryptFor({ action: 'quote', amount: 10 }, recipientPubKey)
68
+ * // Decrypt a received message:
69
+ * const result = await crypto.decrypt(message.body._e2e)
70
+ * if (!result.verified) throw new Error('Signature mismatch — reject message')
71
+ */
72
+ export declare class AgentCrypto {
73
+ private readonly privateKey;
74
+ readonly publicKey: string;
75
+ private constructor();
76
+ /**
77
+ * Encrypt a plaintext object for a recipient identified by their compressed
78
+ * secp256k1 public key (hex). Produces a new envelope with a fresh ephemeral
79
+ * key pair and random salt/IV — identical calls produce different ciphertexts.
80
+ */
81
+ encryptFor(plaintext: Record<string, unknown>, recipientPubKey: string): Promise<EncryptedEnvelope>;
82
+ /**
83
+ * Decrypt an EncryptedEnvelope addressed to this agent.
84
+ * Verifies the sender's ECDSA signature.
85
+ * Throws if the ciphertext is tampered or the key is wrong.
86
+ */
87
+ decrypt(envelope: EncryptedEnvelope): Promise<E2EDecryptResult>;
88
+ /** Create an AgentCrypto from an existing secp256k1 private key (hex). */
89
+ static fromPrivateKey(privateKeyHex: string): AgentCrypto;
90
+ /** Generate a brand-new random keypair. Useful for testing. */
91
+ static generate(): AgentCrypto;
92
+ }
93
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAgC1F;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,eAAe,EAAE,MAAM,EACvB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,CAAC,CAgE5B;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,iBAAiB,EAC3B,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,gBAAgB,CAAC,CA6D3B;AAwDD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,mBAAmB,CAczF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAI/G;AAID;;GAEG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAID;;;;;;;;;;GAUG;AACH,qBAAa,WAAW;IAIpB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAH7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAE1B,OAAO;IAOP;;;;OAIG;IACG,UAAU,CACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,iBAAiB,CAAC;IAI7B;;;;OAIG;IACG,OAAO,CAAC,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIrE,0EAA0E;IAC1E,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW;IAIzD,+DAA+D;IAC/D,MAAM,CAAC,QAAQ,IAAI,WAAW;CAI/B"}
package/dist/crypto.js ADDED
@@ -0,0 +1,298 @@
1
+ /**
2
+ * Abba Baba E2E Encryption — ECIES with Dual ECDH + Forward Secrecy
3
+ *
4
+ * Protocol: abba-e2e-v1
5
+ *
6
+ * Per-message encryption:
7
+ * 1. Generate ephemeral secp256k1 key pair (epk_priv, epk_pub)
8
+ * 2. ECDH_1 = getSharedSecret(epk_priv, recipient_pub) — ephemeral ↔ recipient
9
+ * 3. ECDH_2 = getSharedSecret(sender_priv, recipient_pub) — static ↔ static
10
+ * 4. ikm = ECDH_1.x || ECDH_2.x (64 bytes)
11
+ * 5. aad = JSON({ v, from, to, epk, ts })
12
+ * 6. enc_key = HKDF-SHA256(ikm, salt=random16, info="abba-e2e-v1-enc", 32)
13
+ * 7. ct = AES-256-GCM(enc_key, iv=random12, plaintext, aad)
14
+ * 8. sig = secp256k1.sign(sha256(iv || ct || aad), sender_priv)
15
+ *
16
+ * Wire: body field `_e2e` carries the EncryptedEnvelope JSON.
17
+ */
18
+ import { secp256k1 } from '@noble/curves/secp256k1';
19
+ import { hkdf } from '@noble/hashes/hkdf';
20
+ import { sha256 } from '@noble/hashes/sha2';
21
+ import { randomBytes } from '@noble/hashes/utils';
22
+ // ─── Hex helpers ──────────────────────────────────────────────────────────────
23
+ function toHex(bytes) {
24
+ return Array.from(bytes)
25
+ .map((b) => b.toString(16).padStart(2, '0'))
26
+ .join('');
27
+ }
28
+ function fromHex(hex) {
29
+ if (hex.length % 2 !== 0)
30
+ throw new Error('Invalid hex string length');
31
+ const arr = new Uint8Array(hex.length / 2);
32
+ for (let i = 0; i < hex.length; i += 2) {
33
+ arr[i / 2] = parseInt(hex.slice(i, i + 2), 16);
34
+ }
35
+ return arr;
36
+ }
37
+ // ─── ECDH helper ─────────────────────────────────────────────────────────────
38
+ /**
39
+ * Perform ECDH and return the 32-byte x-coordinate of the shared point.
40
+ * secp256k1.getSharedSecret returns a 33-byte compressed point (prefix + x).
41
+ */
42
+ function ecdhX(privKeyHex, pubKeyHex) {
43
+ const shared = secp256k1.getSharedSecret(privKeyHex, pubKeyHex);
44
+ return shared.slice(1, 33); // x-coordinate only
45
+ }
46
+ // ─── Core encrypt / decrypt ───────────────────────────────────────────────────
47
+ /**
48
+ * Encrypt a plaintext object for a recipient's secp256k1 public key.
49
+ *
50
+ * @param plaintext - Object to encrypt (JSON-serialized)
51
+ * @param recipientPubKey - Recipient's compressed secp256k1 public key, hex (33 bytes)
52
+ * @param senderPrivKey - Sender's secp256k1 private key, hex (32 bytes)
53
+ * @param senderPubKey - Sender's compressed secp256k1 public key, hex (33 bytes)
54
+ */
55
+ export async function encrypt(plaintext, recipientPubKey, senderPrivKey, senderPubKey) {
56
+ const ts = Date.now();
57
+ // 1. Ephemeral key pair
58
+ const epkPrivBytes = secp256k1.utils.randomPrivateKey();
59
+ const epkPubBytes = secp256k1.getPublicKey(epkPrivBytes, true);
60
+ const epkPrivHex = toHex(epkPrivBytes);
61
+ const epkHex = toHex(epkPubBytes);
62
+ // 2 & 3. Dual ECDH
63
+ const ecdh1 = ecdhX(epkPrivHex, recipientPubKey); // ephemeral ↔ recipient
64
+ const ecdh2 = ecdhX(senderPrivKey, recipientPubKey); // static sender ↔ recipient
65
+ // 4. Combine IKM (64 bytes)
66
+ const ikm = new Uint8Array(64);
67
+ ikm.set(ecdh1, 0);
68
+ ikm.set(ecdh2, 32);
69
+ // 5. AAD — binds all envelope metadata to the ciphertext
70
+ const aadObj = { v: 1, from: senderPubKey, to: recipientPubKey, epk: epkHex, ts };
71
+ const aad = new TextEncoder().encode(JSON.stringify(aadObj));
72
+ // 6. HKDF-SHA256 → 32-byte encryption key
73
+ // Use new Uint8Array(...) to produce ArrayBuffer-backed views that WebCrypto accepts.
74
+ const salt = new Uint8Array(randomBytes(16));
75
+ const info = new TextEncoder().encode('abba-e2e-v1-enc');
76
+ const encKey = new Uint8Array(hkdf(sha256, ikm, salt, info, 32));
77
+ // 7. AES-256-GCM encrypt
78
+ const iv = new Uint8Array(randomBytes(12));
79
+ const plaintextBytes = new TextEncoder().encode(JSON.stringify(plaintext));
80
+ const cryptoKey = await globalThis.crypto.subtle.importKey('raw', encKey, { name: 'AES-GCM' }, false, ['encrypt']);
81
+ const ctWithTag = await globalThis.crypto.subtle.encrypt({ name: 'AES-GCM', iv, additionalData: aad }, cryptoKey, plaintextBytes);
82
+ const ctBytes = new Uint8Array(ctWithTag);
83
+ // 8. Sign sha256(iv || ct || aad) with sender's static private key
84
+ const sigInput = new Uint8Array(iv.length + ctBytes.length + aad.length);
85
+ sigInput.set(iv, 0);
86
+ sigInput.set(ctBytes, iv.length);
87
+ sigInput.set(aad, iv.length + ctBytes.length);
88
+ const sigHash = new Uint8Array(sha256(sigInput));
89
+ const sig = secp256k1.sign(sigHash, senderPrivKey);
90
+ return {
91
+ v: 1,
92
+ from: senderPubKey,
93
+ to: recipientPubKey,
94
+ epk: epkHex,
95
+ salt: toHex(salt),
96
+ iv: toHex(iv),
97
+ ct: toHex(ctBytes),
98
+ sig: sig.toDERHex(),
99
+ ts,
100
+ };
101
+ }
102
+ /**
103
+ * Decrypt an EncryptedEnvelope using the recipient's private key.
104
+ * Verifies the sender's ECDSA signature. Throws on tampered ciphertext
105
+ * (GCM auth tag failure) or malformed envelope.
106
+ *
107
+ * @param envelope - EncryptedEnvelope from the `_e2e` body field
108
+ * @param recipientPrivKey - Recipient's secp256k1 private key, hex (32 bytes)
109
+ */
110
+ export async function decrypt(envelope, recipientPrivKey) {
111
+ const { v, from, to, epk, salt, iv, ct, sig, ts } = envelope;
112
+ if (v !== 1)
113
+ throw new Error(`Unsupported envelope version: ${v}`);
114
+ // Re-derive encryption key using symmetric ECDH property
115
+ const ecdh1 = ecdhX(recipientPrivKey, epk); // recipient ↔ ephemeral (== epk_priv ↔ recipient_pub)
116
+ const ecdh2 = ecdhX(recipientPrivKey, from); // recipient ↔ static sender
117
+ const ikm = new Uint8Array(64);
118
+ ikm.set(ecdh1, 0);
119
+ ikm.set(ecdh2, 32);
120
+ const aadObj = { v: 1, from, to, epk, ts };
121
+ const aad = new TextEncoder().encode(JSON.stringify(aadObj));
122
+ const saltBytes = fromHex(salt);
123
+ const info = new TextEncoder().encode('abba-e2e-v1-enc');
124
+ const encKey = new Uint8Array(hkdf(sha256, ikm, saltBytes, info, 32));
125
+ const ivBytes = fromHex(iv);
126
+ const ctBytes = fromHex(ct);
127
+ const cryptoKey = await globalThis.crypto.subtle.importKey('raw', encKey, { name: 'AES-GCM' }, false, ['decrypt']);
128
+ let plaintextBuffer;
129
+ try {
130
+ plaintextBuffer = await globalThis.crypto.subtle.decrypt({ name: 'AES-GCM', iv: ivBytes, additionalData: aad }, cryptoKey, ctBytes);
131
+ }
132
+ catch {
133
+ throw new Error('Decryption failed: invalid key or tampered ciphertext');
134
+ }
135
+ const plaintext = JSON.parse(new TextDecoder().decode(plaintextBuffer));
136
+ // Verify sender's ECDSA signature over sha256(iv || ct || aad)
137
+ const sigInput = new Uint8Array(ivBytes.length + ctBytes.length + aad.length);
138
+ sigInput.set(ivBytes, 0);
139
+ sigInput.set(ctBytes, ivBytes.length);
140
+ sigInput.set(aad, ivBytes.length + ctBytes.length);
141
+ // Wrap in new Uint8Array to get ArrayBuffer-backed view (required for noble/curves overload resolution).
142
+ const sigHash = new Uint8Array(sha256(sigInput));
143
+ // Pass sig as Uint8Array (DER bytes) so noble/curves overload resolves cleanly.
144
+ let verified = false;
145
+ try {
146
+ verified = secp256k1.verify(fromHex(sig), sigHash, fromHex(from));
147
+ }
148
+ catch {
149
+ verified = false;
150
+ }
151
+ return { plaintext, verified, from, ts };
152
+ }
153
+ // ─── Attestation ──────────────────────────────────────────────────────────────
154
+ const POSITIVE_KEYWORDS = ['success', 'complete', 'delivered', 'result', 'done', 'ok', 'found', 'created'];
155
+ const NEGATIVE_KEYWORDS = ['error', 'fail', 'reject', 'invalid', 'unable', 'missing', 'not found', 'exception'];
156
+ function detectSentiment(text) {
157
+ const lower = text.toLowerCase();
158
+ const hasNeg = NEGATIVE_KEYWORDS.some((kw) => lower.includes(kw));
159
+ if (hasNeg)
160
+ return 'negative';
161
+ const hasPos = POSITIVE_KEYWORDS.some((kw) => lower.includes(kw));
162
+ if (hasPos)
163
+ return 'positive';
164
+ return 'neutral';
165
+ }
166
+ function estimateTokens(json) {
167
+ return Math.ceil(json.length / 4);
168
+ }
169
+ function checkCodeExecutable(payload) {
170
+ const codeFields = Object.entries(payload).filter(([k]) => ['code', 'source', 'script', 'program', 'snippet', 'function'].some((kw) => k.toLowerCase().includes(kw)));
171
+ if (codeFields.length === 0)
172
+ return null;
173
+ for (const [, v] of codeFields) {
174
+ if (typeof v !== 'string')
175
+ continue;
176
+ const trimmed = v.trim();
177
+ // JSON value check
178
+ if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
179
+ try {
180
+ JSON.parse(trimmed);
181
+ return true;
182
+ }
183
+ catch {
184
+ return false;
185
+ }
186
+ }
187
+ // Balanced braces check for code
188
+ let depth = 0;
189
+ for (const ch of trimmed) {
190
+ if (ch === '{')
191
+ depth++;
192
+ else if (ch === '}')
193
+ depth--;
194
+ if (depth < 0)
195
+ return false;
196
+ }
197
+ return depth === 0;
198
+ }
199
+ return null;
200
+ }
201
+ function checkFlaggedContent(text) {
202
+ const lower = text.toLowerCase();
203
+ const blocklist = ['<script', 'javascript:', 'eval(', 'exec(', 'system(', 'os.system', '__import__'];
204
+ return blocklist.some((kw) => lower.includes(kw));
205
+ }
206
+ /**
207
+ * Generate a `DeliveryAttestation` from a plaintext payload before encrypting.
208
+ *
209
+ * The attestation is stored in plaintext alongside the `_e2e` envelope so the
210
+ * dispute resolver can reason about the delivery without decrypting it. The
211
+ * `hash` ties every semantic field to the actual content — fabricating fields
212
+ * causes hash mismatch when the seller reveals plaintext.
213
+ */
214
+ export function generateAttestation(payload) {
215
+ const json = JSON.stringify(payload);
216
+ const hashBytes = sha256(new TextEncoder().encode(json));
217
+ return {
218
+ format: 'json',
219
+ length: json.length,
220
+ sections: Object.keys(payload),
221
+ hash: 'sha256:' + toHex(hashBytes),
222
+ delivered_at: new Date().toISOString(),
223
+ tokenCount: estimateTokens(json),
224
+ sentiment: detectSentiment(json),
225
+ codeExecutable: checkCodeExecutable(payload),
226
+ flaggedContent: checkFlaggedContent(json),
227
+ };
228
+ }
229
+ /**
230
+ * Verify that a `DeliveryAttestation` hash matches the given plaintext.
231
+ * Returns `true` if the hash is valid, `false` if tampered.
232
+ *
233
+ * Call this before accepting dispute evidence that claims to reveal plaintext.
234
+ */
235
+ export function verifyAttestation(plaintext, attestation) {
236
+ const json = JSON.stringify(plaintext);
237
+ const computed = 'sha256:' + toHex(sha256(new TextEncoder().encode(json)));
238
+ return computed === attestation.hash;
239
+ }
240
+ // ─── Key utilities ────────────────────────────────────────────────────────────
241
+ /**
242
+ * Derive the compressed secp256k1 public key (33 bytes, hex) from a private key.
243
+ */
244
+ export function getPublicKey(privateKeyHex) {
245
+ return toHex(secp256k1.getPublicKey(privateKeyHex, true));
246
+ }
247
+ /**
248
+ * Generate a new random secp256k1 private key (hex, 32 bytes).
249
+ */
250
+ export function generatePrivateKey() {
251
+ return toHex(secp256k1.utils.randomPrivateKey());
252
+ }
253
+ // ─── AgentCrypto class ────────────────────────────────────────────────────────
254
+ /**
255
+ * Holds a secp256k1 keypair for an agent and provides encrypt/decrypt helpers.
256
+ *
257
+ * @example
258
+ * const crypto = AgentCrypto.fromPrivateKey(process.env.AGENT_E2E_PRIVATE_KEY!)
259
+ * // Encrypt a message for a known recipient public key:
260
+ * const envelope = await crypto.encryptFor({ action: 'quote', amount: 10 }, recipientPubKey)
261
+ * // Decrypt a received message:
262
+ * const result = await crypto.decrypt(message.body._e2e)
263
+ * if (!result.verified) throw new Error('Signature mismatch — reject message')
264
+ */
265
+ export class AgentCrypto {
266
+ privateKey;
267
+ publicKey;
268
+ constructor(privateKey, publicKey) {
269
+ this.privateKey = privateKey;
270
+ this.publicKey = publicKey;
271
+ }
272
+ /**
273
+ * Encrypt a plaintext object for a recipient identified by their compressed
274
+ * secp256k1 public key (hex). Produces a new envelope with a fresh ephemeral
275
+ * key pair and random salt/IV — identical calls produce different ciphertexts.
276
+ */
277
+ async encryptFor(plaintext, recipientPubKey) {
278
+ return encrypt(plaintext, recipientPubKey, this.privateKey, this.publicKey);
279
+ }
280
+ /**
281
+ * Decrypt an EncryptedEnvelope addressed to this agent.
282
+ * Verifies the sender's ECDSA signature.
283
+ * Throws if the ciphertext is tampered or the key is wrong.
284
+ */
285
+ async decrypt(envelope) {
286
+ return decrypt(envelope, this.privateKey);
287
+ }
288
+ /** Create an AgentCrypto from an existing secp256k1 private key (hex). */
289
+ static fromPrivateKey(privateKeyHex) {
290
+ return new AgentCrypto(privateKeyHex, getPublicKey(privateKeyHex));
291
+ }
292
+ /** Generate a brand-new random keypair. Useful for testing. */
293
+ static generate() {
294
+ const privKey = generatePrivateKey();
295
+ return AgentCrypto.fromPrivateKey(privKey);
296
+ }
297
+ }
298
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -1,25 +1,25 @@
1
- export declare class AbbabaError extends Error {
1
+ export declare class AbbaBabaError extends Error {
2
2
  statusCode: number;
3
3
  details?: unknown | undefined;
4
4
  constructor(statusCode: number, message: string, details?: unknown | undefined);
5
5
  }
6
- export declare class AuthenticationError extends AbbabaError {
6
+ export declare class AuthenticationError extends AbbaBabaError {
7
7
  constructor(message?: string);
8
8
  }
9
- export declare class ForbiddenError extends AbbabaError {
9
+ export declare class ForbiddenError extends AbbaBabaError {
10
10
  constructor(message?: string);
11
11
  }
12
- export declare class NotFoundError extends AbbabaError {
12
+ export declare class NotFoundError extends AbbaBabaError {
13
13
  constructor(message?: string);
14
14
  }
15
- export declare class ValidationError extends AbbabaError {
15
+ export declare class ValidationError extends AbbaBabaError {
16
16
  constructor(message?: string, details?: unknown);
17
17
  }
18
- export declare class PaymentRequiredError extends AbbabaError {
18
+ export declare class PaymentRequiredError extends AbbaBabaError {
19
19
  paymentRequirements: unknown;
20
20
  constructor(message?: string, paymentRequirements?: unknown);
21
21
  }
22
- export declare class RateLimitError extends AbbabaError {
22
+ export declare class RateLimitError extends AbbaBabaError {
23
23
  retryAfter: number;
24
24
  constructor(message?: string, retryAfter?: number);
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;IAE3B,UAAU,EAAE,MAAM;IAElB,OAAO,CAAC,EAAE,OAAO;gBAFjB,UAAU,EAAE,MAAM,EACzB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,qBAAa,mBAAoB,SAAQ,WAAW;gBACtC,OAAO,SAA+B;CAInD;AAED,qBAAa,cAAe,SAAQ,WAAW;gBACjC,OAAO,SAAc;CAIlC;AAED,qBAAa,aAAc,SAAQ,WAAW;gBAChC,OAAO,SAAuB;CAI3C;AAED,qBAAa,eAAgB,SAAQ,WAAW;gBAClC,OAAO,SAAsB,EAAE,OAAO,CAAC,EAAE,OAAO;CAI7D;AAED,qBAAa,oBAAqB,SAAQ,WAAW;IAC5C,mBAAmB,EAAE,OAAO,CAAA;gBAEvB,OAAO,SAAqB,EAAE,mBAAmB,CAAC,EAAE,OAAO;CAKxE;AAED,qBAAa,cAAe,SAAQ,WAAW;IACtC,UAAU,EAAE,MAAM,CAAA;gBAEb,OAAO,SAAwB,EAAE,UAAU,SAAK;CAK7D"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;IAE7B,UAAU,EAAE,MAAM;IAElB,OAAO,CAAC,EAAE,OAAO;gBAFjB,UAAU,EAAE,MAAM,EACzB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,qBAAa,mBAAoB,SAAQ,aAAa;gBACxC,OAAO,SAA+B;CAInD;AAED,qBAAa,cAAe,SAAQ,aAAa;gBACnC,OAAO,SAAc;CAIlC;AAED,qBAAa,aAAc,SAAQ,aAAa;gBAClC,OAAO,SAAuB;CAI3C;AAED,qBAAa,eAAgB,SAAQ,aAAa;gBACpC,OAAO,SAAsB,EAAE,OAAO,CAAC,EAAE,OAAO;CAI7D;AAED,qBAAa,oBAAqB,SAAQ,aAAa;IAC9C,mBAAmB,EAAE,OAAO,CAAA;gBAEvB,OAAO,SAAqB,EAAE,mBAAmB,CAAC,EAAE,OAAO;CAKxE;AAED,qBAAa,cAAe,SAAQ,aAAa;IACxC,UAAU,EAAE,MAAM,CAAA;gBAEb,OAAO,SAAwB,EAAE,UAAU,SAAK;CAK7D"}
package/dist/errors.js CHANGED
@@ -1,38 +1,38 @@
1
- export class AbbabaError extends Error {
1
+ export class AbbaBabaError extends Error {
2
2
  statusCode;
3
3
  details;
4
4
  constructor(statusCode, message, details) {
5
5
  super(message);
6
6
  this.statusCode = statusCode;
7
7
  this.details = details;
8
- this.name = 'AbbabaError';
8
+ this.name = 'AbbaBabaError';
9
9
  }
10
10
  }
11
- export class AuthenticationError extends AbbabaError {
11
+ export class AuthenticationError extends AbbaBabaError {
12
12
  constructor(message = 'Invalid or missing API key') {
13
13
  super(401, message);
14
14
  this.name = 'AuthenticationError';
15
15
  }
16
16
  }
17
- export class ForbiddenError extends AbbabaError {
17
+ export class ForbiddenError extends AbbaBabaError {
18
18
  constructor(message = 'Forbidden') {
19
19
  super(403, message);
20
20
  this.name = 'ForbiddenError';
21
21
  }
22
22
  }
23
- export class NotFoundError extends AbbabaError {
23
+ export class NotFoundError extends AbbaBabaError {
24
24
  constructor(message = 'Resource not found') {
25
25
  super(404, message);
26
26
  this.name = 'NotFoundError';
27
27
  }
28
28
  }
29
- export class ValidationError extends AbbabaError {
29
+ export class ValidationError extends AbbaBabaError {
30
30
  constructor(message = 'Validation failed', details) {
31
31
  super(400, message, details);
32
32
  this.name = 'ValidationError';
33
33
  }
34
34
  }
35
- export class PaymentRequiredError extends AbbabaError {
35
+ export class PaymentRequiredError extends AbbaBabaError {
36
36
  paymentRequirements;
37
37
  constructor(message = 'Payment required', paymentRequirements) {
38
38
  super(402, message);
@@ -40,7 +40,7 @@ export class PaymentRequiredError extends AbbabaError {
40
40
  this.paymentRequirements = paymentRequirements;
41
41
  }
42
42
  }
43
- export class RateLimitError extends AbbabaError {
43
+ export class RateLimitError extends AbbaBabaError {
44
44
  retryAfter;
45
45
  constructor(message = 'Rate limit exceeded', retryAfter = 60) {
46
46
  super(429, message);