kompass-sdk 0.20.0 → 0.21.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/aggregator.d.ts.map +1 -1
  2. package/dist/aggregator.js +13 -6
  3. package/dist/aggregator.js.map +1 -1
  4. package/dist/basename.d.ts +59 -0
  5. package/dist/basename.d.ts.map +1 -0
  6. package/dist/basename.js +253 -0
  7. package/dist/basename.js.map +1 -0
  8. package/dist/bridge.d.ts.map +1 -1
  9. package/dist/bridge.js +64 -0
  10. package/dist/bridge.js.map +1 -1
  11. package/dist/cli.js +101 -0
  12. package/dist/cli.js.map +1 -1
  13. package/dist/erc8004.d.ts +179 -0
  14. package/dist/erc8004.d.ts.map +1 -0
  15. package/dist/erc8004.js +187 -0
  16. package/dist/erc8004.js.map +1 -0
  17. package/dist/index.d.ts +6 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +6 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/matching.d.ts.map +1 -1
  22. package/dist/matching.js +7 -6
  23. package/dist/matching.js.map +1 -1
  24. package/dist/onboard.d.ts +132 -0
  25. package/dist/onboard.d.ts.map +1 -0
  26. package/dist/onboard.js +285 -0
  27. package/dist/onboard.js.map +1 -0
  28. package/dist/router.js +2 -2
  29. package/dist/router.js.map +1 -1
  30. package/dist/sources/acp.d.ts.map +1 -1
  31. package/dist/sources/acp.js +8 -7
  32. package/dist/sources/acp.js.map +1 -1
  33. package/dist/sources/bankr.d.ts.map +1 -1
  34. package/dist/sources/bankr.js +7 -4
  35. package/dist/sources/bankr.js.map +1 -1
  36. package/dist/sources/erc8004.js +2 -2
  37. package/dist/sources/erc8004.js.map +1 -1
  38. package/dist/sources/locus.d.ts.map +1 -1
  39. package/dist/sources/locus.js +4 -0
  40. package/dist/sources/locus.js.map +1 -1
  41. package/dist/sources/mcp-registry.d.ts.map +1 -1
  42. package/dist/sources/mcp-registry.js +6 -0
  43. package/dist/sources/mcp-registry.js.map +1 -1
  44. package/dist/sources/olas.d.ts +3 -3
  45. package/dist/sources/olas.d.ts.map +1 -1
  46. package/dist/sources/olas.js +37 -31
  47. package/dist/sources/olas.js.map +1 -1
  48. package/dist/sources/skills.d.ts.map +1 -1
  49. package/dist/sources/skills.js +4 -2
  50. package/dist/sources/skills.js.map +1 -1
  51. package/dist/sources/x402-ecosystem.js +1 -1
  52. package/dist/sources/x402-ecosystem.js.map +1 -1
  53. package/dist/wallet/handlers/bankr.d.ts.map +1 -1
  54. package/dist/wallet/handlers/bankr.js +5 -4
  55. package/dist/wallet/handlers/bankr.js.map +1 -1
  56. package/dist/wallet/handlers/locus.d.ts.map +1 -1
  57. package/dist/wallet/handlers/locus.js +3 -2
  58. package/dist/wallet/handlers/locus.js.map +1 -1
  59. package/dist/wallet/handlers/olas.d.ts +5 -1
  60. package/dist/wallet/handlers/olas.d.ts.map +1 -1
  61. package/dist/wallet/handlers/olas.js +20 -28
  62. package/dist/wallet/handlers/olas.js.map +1 -1
  63. package/dist/wallet/index.d.ts +20 -20
  64. package/package.json +1 -1
  65. package/src/aggregator.ts +8 -4
  66. package/src/basename.ts +334 -0
  67. package/src/bridge.ts +53 -0
  68. package/src/cli.ts +113 -0
  69. package/src/erc8004.ts +253 -0
  70. package/src/index.ts +12 -0
  71. package/src/matching.ts +7 -6
  72. package/src/onboard.ts +420 -0
  73. package/src/router.ts +2 -2
  74. package/src/sources/acp.ts +8 -7
  75. package/src/sources/bankr.ts +6 -4
  76. package/src/sources/erc8004.ts +2 -2
  77. package/src/sources/locus.ts +5 -0
  78. package/src/sources/mcp-registry.ts +6 -0
  79. package/src/sources/olas.ts +53 -44
  80. package/src/sources/skills.ts +5 -2
  81. package/src/sources/x402-ecosystem.ts +1 -1
  82. package/src/wallet/handlers/bankr.ts +6 -4
  83. package/src/wallet/handlers/locus.ts +3 -2
  84. package/src/wallet/handlers/olas.ts +25 -30
@@ -3525,13 +3525,13 @@ export declare class KompassWallet {
3525
3525
  type: "json-rpc";
3526
3526
  } | undefined, chainOverride, calls>) => Promise<{
3527
3527
  id: string;
3528
+ chainId: number;
3528
3529
  atomic: boolean;
3529
3530
  capabilities?: {
3530
3531
  [key: string]: any;
3531
3532
  } | {
3532
3533
  [x: string]: any;
3533
3534
  } | undefined;
3534
- chainId: number;
3535
3535
  receipts?: import("viem").WalletCallReceipt<bigint, "success" | "reverted">[] | undefined;
3536
3536
  version: string;
3537
3537
  statusCode: number;
@@ -4475,13 +4475,13 @@ export declare class KompassWallet {
4475
4475
  [x: `bytes23[${string}]`]: undefined;
4476
4476
  [x: `bytes10[${string}]`]: undefined;
4477
4477
  [x: `bytes20[${string}]`]: undefined;
4478
+ [x: `bytes15[${string}]`]: undefined;
4479
+ [x: `bytes16[${string}]`]: undefined;
4478
4480
  [x: `bytes7[${string}]`]: undefined;
4479
4481
  [x: `bytes9[${string}]`]: undefined;
4480
4482
  [x: `bytes12[${string}]`]: undefined;
4481
4483
  [x: `bytes13[${string}]`]: undefined;
4482
4484
  [x: `bytes14[${string}]`]: undefined;
4483
- [x: `bytes15[${string}]`]: undefined;
4484
- [x: `bytes16[${string}]`]: undefined;
4485
4485
  [x: `bytes17[${string}]`]: undefined;
4486
4486
  [x: `bytes18[${string}]`]: undefined;
4487
4487
  [x: `bytes19[${string}]`]: undefined;
@@ -4498,9 +4498,9 @@ export declare class KompassWallet {
4498
4498
  [x: `int[${string}]`]: undefined;
4499
4499
  [x: `int48[${string}]`]: undefined;
4500
4500
  [x: `int8[${string}]`]: undefined;
4501
+ [x: `int32[${string}]`]: undefined;
4501
4502
  [x: `int16[${string}]`]: undefined;
4502
4503
  [x: `int24[${string}]`]: undefined;
4503
- [x: `int32[${string}]`]: undefined;
4504
4504
  [x: `int40[${string}]`]: undefined;
4505
4505
  [x: `int56[${string}]`]: undefined;
4506
4506
  [x: `int64[${string}]`]: undefined;
@@ -4529,8 +4529,8 @@ export declare class KompassWallet {
4529
4529
  [x: `int256[${string}]`]: undefined;
4530
4530
  [x: `uint[${string}]`]: undefined;
4531
4531
  [x: `uint48[${string}]`]: undefined;
4532
- [x: `uint24[${string}]`]: undefined;
4533
4532
  [x: `uint32[${string}]`]: undefined;
4533
+ [x: `uint24[${string}]`]: undefined;
4534
4534
  [x: `uint40[${string}]`]: undefined;
4535
4535
  [x: `uint56[${string}]`]: undefined;
4536
4536
  [x: `uint72[${string}]`]: undefined;
@@ -4577,13 +4577,13 @@ export declare class KompassWallet {
4577
4577
  bytes23?: undefined;
4578
4578
  bytes10?: undefined;
4579
4579
  bytes20?: undefined;
4580
+ bytes15?: undefined;
4581
+ bytes16?: undefined;
4580
4582
  bytes7?: undefined;
4581
4583
  bytes9?: undefined;
4582
4584
  bytes12?: undefined;
4583
4585
  bytes13?: undefined;
4584
4586
  bytes14?: undefined;
4585
- bytes15?: undefined;
4586
- bytes16?: undefined;
4587
4587
  bytes17?: undefined;
4588
4588
  bytes18?: undefined;
4589
4589
  bytes19?: undefined;
@@ -4599,9 +4599,9 @@ export declare class KompassWallet {
4599
4599
  bytes31?: undefined;
4600
4600
  int48?: undefined;
4601
4601
  int8?: undefined;
4602
+ int32?: undefined;
4602
4603
  int16?: undefined;
4603
4604
  int24?: undefined;
4604
- int32?: undefined;
4605
4605
  int40?: undefined;
4606
4606
  int56?: undefined;
4607
4607
  int64?: undefined;
@@ -4629,8 +4629,8 @@ export declare class KompassWallet {
4629
4629
  int248?: undefined;
4630
4630
  int256?: undefined;
4631
4631
  uint48?: undefined;
4632
- uint24?: undefined;
4633
4632
  uint32?: undefined;
4633
+ uint24?: undefined;
4634
4634
  uint40?: undefined;
4635
4635
  uint56?: undefined;
4636
4636
  uint72?: undefined;
@@ -5305,6 +5305,7 @@ export declare class KompassWallet {
5305
5305
  number: blockTag extends "pending" ? null : bigint;
5306
5306
  nonce: blockTag extends "pending" ? null : `0x${string}`;
5307
5307
  hash: blockTag extends "pending" ? null : `0x${string}`;
5308
+ gasUsed: bigint;
5308
5309
  logsBloom: blockTag extends "pending" ? null : `0x${string}`;
5309
5310
  baseFeePerGas: bigint | null;
5310
5311
  blobGasUsed: bigint;
@@ -5312,7 +5313,6 @@ export declare class KompassWallet {
5312
5313
  excessBlobGas: bigint;
5313
5314
  extraData: Hex;
5314
5315
  gasLimit: bigint;
5315
- gasUsed: bigint;
5316
5316
  miner: Address;
5317
5317
  mixHash: import("viem").Hash;
5318
5318
  parentBeaconBlockRoot?: `0x${string}` | undefined;
@@ -5347,9 +5347,9 @@ export declare class KompassWallet {
5347
5347
  s: Hex;
5348
5348
  v: bigint;
5349
5349
  yParity?: undefined | undefined;
5350
- chainId?: number | undefined;
5351
5350
  input: Hex;
5352
5351
  typeHex: Hex | null;
5352
+ chainId?: number | undefined;
5353
5353
  blockNumber: (blockTag extends "pending" ? true : false) extends infer T ? T extends (blockTag extends "pending" ? true : false) ? T extends true ? null : bigint : never : never;
5354
5354
  blockHash: (blockTag extends "pending" ? true : false) extends infer T_1 ? T_1 extends (blockTag extends "pending" ? true : false) ? T_1 extends true ? null : `0x${string}` : never : never;
5355
5355
  transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_2 ? T_2 extends (blockTag extends "pending" ? true : false) ? T_2 extends true ? null : number : never : never;
@@ -5372,9 +5372,9 @@ export declare class KompassWallet {
5372
5372
  s: Hex;
5373
5373
  v: bigint;
5374
5374
  yParity: number;
5375
- chainId: number;
5376
5375
  input: Hex;
5377
5376
  typeHex: Hex | null;
5377
+ chainId: number;
5378
5378
  blockNumber: (blockTag extends "pending" ? true : false) extends infer T_3 ? T_3 extends (blockTag extends "pending" ? true : false) ? T_3 extends true ? null : bigint : never : never;
5379
5379
  blockHash: (blockTag extends "pending" ? true : false) extends infer T_4 ? T_4 extends (blockTag extends "pending" ? true : false) ? T_4 extends true ? null : `0x${string}` : never : never;
5380
5380
  transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_5 ? T_5 extends (blockTag extends "pending" ? true : false) ? T_5 extends true ? null : number : never : never;
@@ -5397,9 +5397,9 @@ export declare class KompassWallet {
5397
5397
  s: Hex;
5398
5398
  v: bigint;
5399
5399
  yParity: number;
5400
- chainId: number;
5401
5400
  input: Hex;
5402
5401
  typeHex: Hex | null;
5402
+ chainId: number;
5403
5403
  blockNumber: (blockTag extends "pending" ? true : false) extends infer T_6 ? T_6 extends (blockTag extends "pending" ? true : false) ? T_6 extends true ? null : bigint : never : never;
5404
5404
  blockHash: (blockTag extends "pending" ? true : false) extends infer T_7 ? T_7 extends (blockTag extends "pending" ? true : false) ? T_7 extends true ? null : `0x${string}` : never : never;
5405
5405
  transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_8 ? T_8 extends (blockTag extends "pending" ? true : false) ? T_8 extends true ? null : number : never : never;
@@ -5422,9 +5422,9 @@ export declare class KompassWallet {
5422
5422
  s: Hex;
5423
5423
  v: bigint;
5424
5424
  yParity: number;
5425
- chainId: number;
5426
5425
  input: Hex;
5427
5426
  typeHex: Hex | null;
5427
+ chainId: number;
5428
5428
  blockNumber: (blockTag extends "pending" ? true : false) extends infer T_9 ? T_9 extends (blockTag extends "pending" ? true : false) ? T_9 extends true ? null : bigint : never : never;
5429
5429
  blockHash: (blockTag extends "pending" ? true : false) extends infer T_10 ? T_10 extends (blockTag extends "pending" ? true : false) ? T_10 extends true ? null : `0x${string}` : never : never;
5430
5430
  transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_11 ? T_11 extends (blockTag extends "pending" ? true : false) ? T_11 extends true ? null : number : never : never;
@@ -5447,9 +5447,9 @@ export declare class KompassWallet {
5447
5447
  s: Hex;
5448
5448
  v: bigint;
5449
5449
  yParity: number;
5450
- chainId: number;
5451
5450
  input: Hex;
5452
5451
  typeHex: Hex | null;
5452
+ chainId: number;
5453
5453
  blockNumber: (blockTag extends "pending" ? true : false) extends infer T_12 ? T_12 extends (blockTag extends "pending" ? true : false) ? T_12 extends true ? null : bigint : never : never;
5454
5454
  blockHash: (blockTag extends "pending" ? true : false) extends infer T_13 ? T_13 extends (blockTag extends "pending" ? true : false) ? T_13 extends true ? null : `0x${string}` : never : never;
5455
5455
  transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_14 ? T_14 extends (blockTag extends "pending" ? true : false) ? T_14 extends true ? null : number : never : never;
@@ -5498,9 +5498,9 @@ export declare class KompassWallet {
5498
5498
  s: Hex;
5499
5499
  v: bigint;
5500
5500
  yParity?: undefined | undefined;
5501
- chainId?: number | undefined;
5502
5501
  input: Hex;
5503
5502
  typeHex: Hex | null;
5503
+ chainId?: number | undefined;
5504
5504
  blockNumber: (blockTag extends "pending" ? true : false) extends infer T ? T extends (blockTag extends "pending" ? true : false) ? T extends true ? null : bigint : never : never;
5505
5505
  blockHash: (blockTag extends "pending" ? true : false) extends infer T_1 ? T_1 extends (blockTag extends "pending" ? true : false) ? T_1 extends true ? null : `0x${string}` : never : never;
5506
5506
  transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_2 ? T_2 extends (blockTag extends "pending" ? true : false) ? T_2 extends true ? null : number : never : never;
@@ -5523,9 +5523,9 @@ export declare class KompassWallet {
5523
5523
  s: Hex;
5524
5524
  v: bigint;
5525
5525
  yParity: number;
5526
- chainId: number;
5527
5526
  input: Hex;
5528
5527
  typeHex: Hex | null;
5528
+ chainId: number;
5529
5529
  blockNumber: (blockTag extends "pending" ? true : false) extends infer T_3 ? T_3 extends (blockTag extends "pending" ? true : false) ? T_3 extends true ? null : bigint : never : never;
5530
5530
  blockHash: (blockTag extends "pending" ? true : false) extends infer T_4 ? T_4 extends (blockTag extends "pending" ? true : false) ? T_4 extends true ? null : `0x${string}` : never : never;
5531
5531
  transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_5 ? T_5 extends (blockTag extends "pending" ? true : false) ? T_5 extends true ? null : number : never : never;
@@ -5548,9 +5548,9 @@ export declare class KompassWallet {
5548
5548
  s: Hex;
5549
5549
  v: bigint;
5550
5550
  yParity: number;
5551
- chainId: number;
5552
5551
  input: Hex;
5553
5552
  typeHex: Hex | null;
5553
+ chainId: number;
5554
5554
  blockNumber: (blockTag extends "pending" ? true : false) extends infer T_6 ? T_6 extends (blockTag extends "pending" ? true : false) ? T_6 extends true ? null : bigint : never : never;
5555
5555
  blockHash: (blockTag extends "pending" ? true : false) extends infer T_7 ? T_7 extends (blockTag extends "pending" ? true : false) ? T_7 extends true ? null : `0x${string}` : never : never;
5556
5556
  transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_8 ? T_8 extends (blockTag extends "pending" ? true : false) ? T_8 extends true ? null : number : never : never;
@@ -5573,9 +5573,9 @@ export declare class KompassWallet {
5573
5573
  s: Hex;
5574
5574
  v: bigint;
5575
5575
  yParity: number;
5576
- chainId: number;
5577
5576
  input: Hex;
5578
5577
  typeHex: Hex | null;
5578
+ chainId: number;
5579
5579
  blockNumber: (blockTag extends "pending" ? true : false) extends infer T_9 ? T_9 extends (blockTag extends "pending" ? true : false) ? T_9 extends true ? null : bigint : never : never;
5580
5580
  blockHash: (blockTag extends "pending" ? true : false) extends infer T_10 ? T_10 extends (blockTag extends "pending" ? true : false) ? T_10 extends true ? null : `0x${string}` : never : never;
5581
5581
  transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_11 ? T_11 extends (blockTag extends "pending" ? true : false) ? T_11 extends true ? null : number : never : never;
@@ -5598,9 +5598,9 @@ export declare class KompassWallet {
5598
5598
  s: Hex;
5599
5599
  v: bigint;
5600
5600
  yParity: number;
5601
- chainId: number;
5602
5601
  input: Hex;
5603
5602
  typeHex: Hex | null;
5603
+ chainId: number;
5604
5604
  blockNumber: (blockTag extends "pending" ? true : false) extends infer T_12 ? T_12 extends (blockTag extends "pending" ? true : false) ? T_12 extends true ? null : bigint : never : never;
5605
5605
  blockHash: (blockTag extends "pending" ? true : false) extends infer T_13 ? T_13 extends (blockTag extends "pending" ? true : false) ? T_13 extends true ? null : `0x${string}` : never : never;
5606
5606
  transactionIndex: (blockTag extends "pending" ? true : false) extends infer T_14 ? T_14 extends (blockTag extends "pending" ? true : false) ? T_14 extends true ? null : number : never : never;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kompass-sdk",
3
- "version": "0.20.0",
3
+ "version": "0.21.1",
4
4
  "description": "Get any job done. Universal agent capability discovery + coordination across ACP, MCP, x402, A2A, skills, L402, and ERC-8004.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/aggregator.ts CHANGED
@@ -187,13 +187,17 @@ export class Aggregator {
187
187
  // Has pricing info bonus (transparency)
188
188
  if (agent.pricing && agent.pricing.model !== "unknown") score += 3;
189
189
 
190
- // Has multiple endpoints bonus (more interoperable)
190
+ // Has callable endpoint bonus
191
191
  const endpointCount = Object.values(agent.endpoints).filter(Boolean).length;
192
192
  score += endpointCount * 2;
193
193
 
194
- // Protocol diversity bonus
195
- if (agent.protocol === "mcp") score += 2; // MCP is most interoperable
196
- if (agent.protocol === "a2a") score += 2;
194
+ // Liveness signals — live verified gateways should rank higher in aggregator too
195
+ const src = agent.source as string;
196
+ if (src === "bankr") score += 20;
197
+ if (src === "locus") score += 15;
198
+ if (src === "x402-ecosystem") score += 10;
199
+ if (src === "acp") score += 8;
200
+ if (src === "olas") score += 8;
197
201
 
198
202
  (agent as any)._score = score;
199
203
  return agent;
@@ -0,0 +1,334 @@
1
+ /**
2
+ * Basename Registration — .base.eth names on Base L2
3
+ *
4
+ * RegistrarController: 0x4cCb0BB02FCABA27e82a56646E81d8c5bC4119a5 (Base mainnet)
5
+ * L2Resolver: 0xC6d566A56A1aFf6508b41f6c90ff131615583BCD (Base mainnet)
6
+ *
7
+ * Pricing:
8
+ * 5-9 chars: 0.001 ETH (~$2.50) per year
9
+ * 10+ chars: 0.0001 ETH (~$0.25) per year
10
+ */
11
+
12
+ import { encodeFunctionData, namehash, type Address, type Hex } from "viem";
13
+ import type { KompassWallet } from "./wallet/index.js";
14
+
15
+ // ── Contract addresses ─────────────────────────────────────
16
+ export const BASENAME_REGISTRAR: Address = "0x4cCb0BB02FCABA27e82a56646E81d8c5bC4119a5";
17
+ export const BASENAME_L2_RESOLVER: Address = "0xC6d566A56A1aFf6508b41f6c90ff131615583BCD";
18
+
19
+ // ── ABIs ───────────────────────────────────────────────────
20
+
21
+ const RegistrarControllerAbi = [
22
+ {
23
+ type: "function",
24
+ name: "register",
25
+ inputs: [
26
+ {
27
+ name: "request",
28
+ type: "tuple",
29
+ components: [
30
+ { name: "name", type: "string" },
31
+ { name: "owner", type: "address" },
32
+ { name: "duration", type: "uint256" },
33
+ { name: "resolver", type: "address" },
34
+ { name: "data", type: "bytes[]" },
35
+ { name: "reverseRecord", type: "bool" },
36
+ ],
37
+ },
38
+ ],
39
+ outputs: [],
40
+ stateMutability: "payable",
41
+ },
42
+ {
43
+ type: "function",
44
+ name: "registerPrice",
45
+ inputs: [
46
+ { name: "name", type: "string" },
47
+ { name: "duration", type: "uint256" },
48
+ ],
49
+ outputs: [{ name: "", type: "uint256" }],
50
+ stateMutability: "view",
51
+ },
52
+ {
53
+ type: "function",
54
+ name: "available",
55
+ inputs: [{ name: "name", type: "string" }],
56
+ outputs: [{ name: "", type: "bool" }],
57
+ stateMutability: "view",
58
+ },
59
+ ] as const;
60
+
61
+ const L2ResolverAbi = [
62
+ {
63
+ type: "function",
64
+ name: "setText",
65
+ inputs: [
66
+ { name: "node", type: "bytes32" },
67
+ { name: "key", type: "string" },
68
+ { name: "value", type: "string" },
69
+ ],
70
+ outputs: [],
71
+ stateMutability: "nonpayable",
72
+ },
73
+ {
74
+ type: "function",
75
+ name: "setAddr",
76
+ inputs: [
77
+ { name: "node", type: "bytes32" },
78
+ { name: "a", type: "address" },
79
+ ],
80
+ outputs: [],
81
+ stateMutability: "nonpayable",
82
+ },
83
+ {
84
+ type: "function",
85
+ name: "text",
86
+ inputs: [
87
+ { name: "node", type: "bytes32" },
88
+ { name: "key", type: "string" },
89
+ ],
90
+ outputs: [{ name: "", type: "string" }],
91
+ stateMutability: "view",
92
+ },
93
+ {
94
+ type: "function",
95
+ name: "addr",
96
+ inputs: [{ name: "node", type: "bytes32" }],
97
+ outputs: [{ name: "", type: "address" }],
98
+ stateMutability: "view",
99
+ },
100
+ ] as const;
101
+
102
+ // ── Types ──────────────────────────────────────────────────
103
+
104
+ export interface BasenameResult {
105
+ name: string;
106
+ fullName: string;
107
+ node: Hex;
108
+ txHash: Hex;
109
+ price: bigint;
110
+ }
111
+
112
+ export interface TextRecord {
113
+ key: string;
114
+ value: string;
115
+ }
116
+
117
+ // ── Constants ──────────────────────────────────────────────
118
+ const ONE_YEAR_SECONDS = 365n * 24n * 60n * 60n;
119
+
120
+ // ── Functions ──────────────────────────────────────────────
121
+
122
+ /**
123
+ * Compute the ENS namehash for a .base.eth name.
124
+ */
125
+ /**
126
+ * Strip .base.eth suffix if present, returning just the label.
127
+ */
128
+ function stripBasenameLabel(name: string): string {
129
+ return name.replace(/\.base\.eth$/i, "");
130
+ }
131
+
132
+ /**
133
+ * Compute the ENS namehash for a .base.eth name.
134
+ */
135
+ export function basenameNode(name: string): Hex {
136
+ const label = stripBasenameLabel(name);
137
+ return namehash(`${label}.base.eth`) as Hex;
138
+ }
139
+
140
+ /**
141
+ * Check if a basename is available for registration.
142
+ */
143
+ export async function isBasenameAvailable(
144
+ wallet: KompassWallet,
145
+ name: string,
146
+ registrarAddress: Address = BASENAME_REGISTRAR,
147
+ ): Promise<boolean> {
148
+ const publicClient = wallet.getPublicClient() as any;
149
+
150
+ return publicClient.readContract({
151
+ address: registrarAddress,
152
+ abi: RegistrarControllerAbi,
153
+ functionName: "available",
154
+ args: [name],
155
+ });
156
+ }
157
+
158
+ /**
159
+ * Get the registration price for a basename.
160
+ *
161
+ * @param name — The name (without .base.eth)
162
+ * @param durationYears — Number of years (default 1)
163
+ * @returns Price in wei
164
+ */
165
+ export async function getBasenamePrice(
166
+ wallet: KompassWallet,
167
+ name: string,
168
+ durationYears: number = 1,
169
+ registrarAddress: Address = BASENAME_REGISTRAR,
170
+ ): Promise<bigint> {
171
+ const publicClient = wallet.getPublicClient() as any;
172
+ const duration = ONE_YEAR_SECONDS * BigInt(durationYears);
173
+
174
+ return publicClient.readContract({
175
+ address: registrarAddress,
176
+ abi: RegistrarControllerAbi,
177
+ functionName: "registerPrice",
178
+ args: [name, duration],
179
+ });
180
+ }
181
+
182
+ /**
183
+ * Encode resolver data for setting text records + address during registration.
184
+ * These get passed as the `data[]` field in RegisterRequest so they execute atomically.
185
+ */
186
+ function encodeResolverData(
187
+ node: Hex,
188
+ ownerAddress: Address,
189
+ textRecords?: TextRecord[],
190
+ ): Hex[] {
191
+ const data: Hex[] = [];
192
+
193
+ // Set address record
194
+ data.push(
195
+ encodeFunctionData({
196
+ abi: L2ResolverAbi,
197
+ functionName: "setAddr",
198
+ args: [node, ownerAddress],
199
+ }),
200
+ );
201
+
202
+ // Set text records
203
+ if (textRecords) {
204
+ for (const record of textRecords) {
205
+ data.push(
206
+ encodeFunctionData({
207
+ abi: L2ResolverAbi,
208
+ functionName: "setText",
209
+ args: [node, record.key, record.value],
210
+ }),
211
+ );
212
+ }
213
+ }
214
+
215
+ return data;
216
+ }
217
+
218
+ /**
219
+ * Register a Basename (.base.eth) for an agent.
220
+ *
221
+ * @param wallet — KompassWallet with funded account (needs ETH for price + gas)
222
+ * @param name — The name to register (without .base.eth suffix)
223
+ * @param textRecords — Optional text records to set atomically during registration
224
+ * @param durationYears — Registration duration in years (default 1)
225
+ */
226
+ export async function registerBasename(
227
+ wallet: KompassWallet,
228
+ name: string,
229
+ textRecords?: TextRecord[],
230
+ durationYears: number = 1,
231
+ registrarAddress: Address = BASENAME_REGISTRAR,
232
+ resolverAddress: Address = BASENAME_L2_RESOLVER,
233
+ ): Promise<BasenameResult> {
234
+ const walletClient = wallet.getWalletClient() as any;
235
+ const publicClient = wallet.getPublicClient() as any;
236
+ const ownerAddress = wallet.getAddress();
237
+ const duration = ONE_YEAR_SECONDS * BigInt(durationYears);
238
+
239
+ // Normalize: strip .base.eth suffix if user passed it
240
+ name = stripBasenameLabel(name);
241
+
242
+ // 1. Check availability
243
+ const available = await isBasenameAvailable(wallet, name, registrarAddress);
244
+ if (!available) {
245
+ throw new Error(`Basename "${name}.base.eth" is not available`);
246
+ }
247
+
248
+ // 2. Get price
249
+ const price = await getBasenamePrice(wallet, name, durationYears, registrarAddress);
250
+
251
+ // 3. Compute node for resolver data
252
+ const node = basenameNode(name);
253
+
254
+ // 4. Encode resolver data (setAddr + setText calls)
255
+ const data = encodeResolverData(node, ownerAddress, textRecords);
256
+
257
+ // 5. Register with 10% buffer for price fluctuation
258
+ const value = (price * 110n) / 100n;
259
+
260
+ const txHash = await walletClient.writeContract({
261
+ address: registrarAddress,
262
+ abi: RegistrarControllerAbi,
263
+ functionName: "register",
264
+ args: [
265
+ {
266
+ name,
267
+ owner: ownerAddress,
268
+ duration,
269
+ resolver: resolverAddress,
270
+ data,
271
+ reverseRecord: true,
272
+ },
273
+ ],
274
+ value,
275
+ });
276
+
277
+ await publicClient.waitForTransactionReceipt({ hash: txHash });
278
+
279
+ return {
280
+ name,
281
+ fullName: `${name}.base.eth`,
282
+ node,
283
+ txHash,
284
+ price,
285
+ };
286
+ }
287
+
288
+ /**
289
+ * Set text records on an existing Basename via L2Resolver.
290
+ */
291
+ export async function setBasenameTextRecords(
292
+ wallet: KompassWallet,
293
+ name: string,
294
+ records: TextRecord[],
295
+ resolverAddress: Address = BASENAME_L2_RESOLVER,
296
+ ): Promise<Hex[]> {
297
+ const walletClient = wallet.getWalletClient() as any;
298
+ const publicClient = wallet.getPublicClient() as any;
299
+ const node = basenameNode(name);
300
+
301
+ const txHashes: Hex[] = [];
302
+ for (const record of records) {
303
+ const txHash = await walletClient.writeContract({
304
+ address: resolverAddress,
305
+ abi: L2ResolverAbi,
306
+ functionName: "setText",
307
+ args: [node, record.key, record.value],
308
+ });
309
+ await publicClient.waitForTransactionReceipt({ hash: txHash });
310
+ txHashes.push(txHash);
311
+ }
312
+
313
+ return txHashes;
314
+ }
315
+
316
+ /**
317
+ * Read a text record from a Basename.
318
+ */
319
+ export async function getBasenameText(
320
+ wallet: KompassWallet,
321
+ name: string,
322
+ key: string,
323
+ resolverAddress: Address = BASENAME_L2_RESOLVER,
324
+ ): Promise<string> {
325
+ const publicClient = wallet.getPublicClient() as any;
326
+ const node = basenameNode(name);
327
+
328
+ return publicClient.readContract({
329
+ address: resolverAddress,
330
+ abi: L2ResolverAbi,
331
+ functionName: "text",
332
+ args: [node, key],
333
+ });
334
+ }
package/src/bridge.ts CHANGED
@@ -290,6 +290,59 @@ export class ProtocolBridge {
290
290
  };
291
291
  }
292
292
 
293
+ // Source-specific handlers — some HTTP agents need custom auth/params
294
+ const source = (agent as any).source ?? "";
295
+
296
+ if (source === "bankr") {
297
+ // Bankr handler uses API key auth, not wallet — wallet param is unused
298
+ const { handleBankrPayment } = await import("./wallet/handlers/bankr.js");
299
+ const { KompassWallet } = await import("./wallet/index.js");
300
+ let wallet;
301
+ try { wallet = KompassWallet.load(); } catch { wallet = KompassWallet.create(); }
302
+ const result = await handleBankrPayment(wallet, agent, options.task);
303
+ return {
304
+ success: result.success,
305
+ protocol: "http",
306
+ agent,
307
+ deliverable: result.deliverable,
308
+ jobId: result.jobId,
309
+ durationMs: Date.now() - start,
310
+ };
311
+ }
312
+
313
+ if (source === "locus") {
314
+ const { handleLocusPayment } = await import("./wallet/handlers/locus.js");
315
+ const { KompassWallet } = await import("./wallet/index.js");
316
+ let wallet;
317
+ try { wallet = KompassWallet.load(); } catch { wallet = KompassWallet.create(); }
318
+ const result = await handleLocusPayment(wallet, agent, options.task);
319
+ return {
320
+ success: result.success,
321
+ protocol: "http",
322
+ agent,
323
+ deliverable: result.deliverable,
324
+ txHash: result.txHash,
325
+ durationMs: Date.now() - start,
326
+ };
327
+ }
328
+
329
+ if (source === "olas") {
330
+ // Olas mechs are on-chain only — no HTTP endpoint
331
+ const { handleOlasPayment } = await import("./wallet/handlers/olas.js");
332
+ const { KompassWallet } = await import("./wallet/index.js");
333
+ let wallet;
334
+ try { wallet = KompassWallet.load(); } catch { wallet = KompassWallet.create(); }
335
+ const result = await handleOlasPayment(wallet, agent, options.task);
336
+ return {
337
+ success: result.success,
338
+ protocol: "http",
339
+ agent,
340
+ deliverable: result.deliverable,
341
+ durationMs: Date.now() - start,
342
+ };
343
+ }
344
+
345
+ // Default HTTP handler
293
346
  const res = await fetch(endpoint, {
294
347
  method: "POST",
295
348
  headers: { "Content-Type": "application/json" },