@absol-labs/agent 0.4.0 → 0.6.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 (57) hide show
  1. package/README.md +187 -0
  2. package/dist/capability/invocation-capability.d.ts +184 -0
  3. package/dist/capability/invocation-capability.d.ts.map +1 -0
  4. package/dist/capability/invocation-capability.js +183 -0
  5. package/dist/capability/invocation-capability.js.map +1 -0
  6. package/dist/discovery/registry.d.ts +260 -15
  7. package/dist/discovery/registry.d.ts.map +1 -1
  8. package/dist/discovery/registry.js +174 -31
  9. package/dist/discovery/registry.js.map +1 -1
  10. package/dist/frameworks/agentkit.js +3 -3
  11. package/dist/frameworks/agentkit.js.map +1 -1
  12. package/dist/frameworks/crewai.js +1 -1
  13. package/dist/frameworks/crewai.js.map +1 -1
  14. package/dist/frameworks/eliza.js +2 -2
  15. package/dist/frameworks/eliza.js.map +1 -1
  16. package/dist/frameworks/langchain.js +2 -2
  17. package/dist/frameworks/langchain.js.map +1 -1
  18. package/dist/gateway/caller-auth-gateway.d.ts +108 -0
  19. package/dist/gateway/caller-auth-gateway.d.ts.map +1 -0
  20. package/dist/gateway/caller-auth-gateway.js +191 -0
  21. package/dist/gateway/caller-auth-gateway.js.map +1 -0
  22. package/dist/gateway/http-server.d.ts +51 -0
  23. package/dist/gateway/http-server.d.ts.map +1 -0
  24. package/dist/gateway/http-server.js +241 -0
  25. package/dist/gateway/http-server.js.map +1 -0
  26. package/dist/gateway/server-entry.d.ts +2 -0
  27. package/dist/gateway/server-entry.d.ts.map +1 -0
  28. package/dist/gateway/server-entry.js +30 -0
  29. package/dist/gateway/server-entry.js.map +1 -0
  30. package/dist/index.d.ts +6 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +6 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/mcp/server.js +4 -2
  35. package/dist/mcp/server.js.map +1 -1
  36. package/dist/sdk/invoke.d.ts +136 -0
  37. package/dist/sdk/invoke.d.ts.map +1 -0
  38. package/dist/sdk/invoke.js +274 -0
  39. package/dist/sdk/invoke.js.map +1 -0
  40. package/dist/wallet/lifecycle.d.ts +101 -0
  41. package/dist/wallet/lifecycle.d.ts.map +1 -0
  42. package/dist/wallet/lifecycle.js +57 -0
  43. package/dist/wallet/lifecycle.js.map +1 -0
  44. package/package.json +6 -3
  45. package/src/capability/invocation-capability.ts +255 -0
  46. package/src/discovery/registry.ts +213 -35
  47. package/src/frameworks/agentkit.ts +3 -3
  48. package/src/frameworks/crewai.ts +1 -1
  49. package/src/frameworks/eliza.ts +2 -2
  50. package/src/frameworks/langchain.ts +2 -2
  51. package/src/gateway/caller-auth-gateway.ts +332 -0
  52. package/src/gateway/http-server.ts +342 -0
  53. package/src/gateway/server-entry.ts +38 -0
  54. package/src/index.ts +86 -0
  55. package/src/mcp/server.ts +4 -2
  56. package/src/sdk/invoke.ts +495 -0
  57. package/src/wallet/lifecycle.ts +158 -0
@@ -1,3 +1,4 @@
1
+ import { type SignedServiceBinding, type SignedServiceDescriptor } from "@absol-labs/shared";
1
2
  /**
2
3
  * Service discovery for the Metrik verified-service marketplace.
3
4
  *
@@ -26,9 +27,14 @@ export interface ServiceListing {
26
27
  readonly serviceRef: `0x${string}`;
27
28
  readonly operator: `0x${string}`;
28
29
  readonly publicUrl: string;
30
+ readonly access: "public" | "gated";
31
+ /** Signed invocation origin; gated listings fail closed if this is absent. */
32
+ readonly accessUrl: string;
33
+ /** The schema-validated and cryptographically verified signed record. */
34
+ readonly signed: SignedServiceBinding | SignedServiceDescriptor;
29
35
  /** Unsigned informational category from the listings row (may be absent). */
30
36
  readonly category: string | null;
31
- /** Optional signed operator-supplied target metadata (e.g. resolver hints). */
37
+ /** Optional unsigned operator-supplied resolver hints; never used for invocation. */
32
38
  readonly targetMetadata?: Record<string, string>;
33
39
  }
34
40
  export interface DiscoverServicesOptions {
@@ -63,12 +69,14 @@ export interface DiscoverServicesOptions {
63
69
  */
64
70
  export declare const DEFAULT_METRIK_REGISTRY_URL = "https://pzvnacjolaipeobmptsb.supabase.co/rest/v1/listings?select=service_ref,operator,public_url,category,signed_binding&order=created_at.desc";
65
71
  /**
66
- * `serviceRef` of the built-in verified demo listing. Kept as a named constant so
72
+ * `serviceRef` of the built-in verified live-data listing. Kept as a named constant so
67
73
  * callers can recognise (and dedupe against) the seeded row.
68
74
  */
69
- export declare const DEMO_SEED_SERVICE_REF: "0x84ef78c5ac9fc084422dc2d3e1ef19623bb05d0d81c097d4da49f9c47ec3ed12";
75
+ export declare const LIVE_DATA_SEED_SERVICE_REF: "0x79e57358e98a35273c1cd9d5f1bf9ae1e0af8705db432eb706459dc4f88b6fe0";
76
+ /** @deprecated Use {@link LIVE_DATA_SEED_SERVICE_REF}. */
77
+ export declare const DEMO_SEED_SERVICE_REF: "0x79e57358e98a35273c1cd9d5f1bf9ae1e0af8705db432eb706459dc4f88b6fe0";
70
78
  /**
71
- * A REAL, operator-signed demo listing row embedded so `discoverServices()` returns
79
+ * A real, operator-signed live-data listing row embedded so `discoverServices()` returns
72
80
  * something hireable with ZERO configuration (no Supabase anon key, no registry URL).
73
81
  *
74
82
  * This is PUBLIC data — a signed {@link https://github.com/Absol-Labs | Metrik}
@@ -79,20 +87,257 @@ export declare const DEMO_SEED_SERVICE_REF: "0x84ef78c5ac9fc084422dc2d3e1ef19623
79
87
  * with any field here and the seed silently drops itself, identically to a bad
80
88
  * registry row. The `category` column is unsigned informational metadata only.
81
89
  */
90
+ export declare const LIVE_DATA_SEED_LISTING: {
91
+ readonly service_ref: "0x79e57358e98a35273c1cd9d5f1bf9ae1e0af8705db432eb706459dc4f88b6fe0";
92
+ readonly operator: "0xB3e162711920dFD8933609019Dc35C73cC1a09F0";
93
+ readonly public_url: "https://livedata.137.23.50.249.sslip.io";
94
+ readonly category: "live-data";
95
+ readonly signed_binding: {
96
+ readonly serviceRef: "0x79e57358e98a35273c1cd9d5f1bf9ae1e0af8705db432eb706459dc4f88b6fe0";
97
+ readonly descriptor: {
98
+ readonly version: 3;
99
+ readonly operator: "0xB3e162711920dFD8933609019Dc35C73cC1a09F0";
100
+ readonly publicUrl: "https://livedata.137.23.50.249.sslip.io";
101
+ readonly issuedAt: 1787772057;
102
+ readonly interface: {
103
+ readonly baseUrl: "https://livedata.137.23.50.249.sslip.io";
104
+ readonly healthPath: "/health";
105
+ readonly endpoints: readonly [{
106
+ readonly name: "health";
107
+ readonly path: "/health";
108
+ readonly method: "GET";
109
+ readonly description: "Liveness probe.";
110
+ }, {
111
+ readonly name: "readiness";
112
+ readonly path: "/readiness";
113
+ readonly method: "GET";
114
+ readonly description: "Non-value dependency readiness backed by the same real BTC cache policy.";
115
+ }, {
116
+ readonly name: "price";
117
+ readonly path: "/price";
118
+ readonly method: "GET";
119
+ readonly description: "Real live crypto spot price (?symbol=BTC|ETH|SOL) from CoinGecko's public API.";
120
+ }];
121
+ readonly authModel: "caller-auth";
122
+ readonly example: {
123
+ readonly endpoint: "price";
124
+ readonly request: {
125
+ readonly symbol: "BTC";
126
+ };
127
+ readonly response: {
128
+ readonly symbol: "BTC";
129
+ readonly source: "coingecko-public-api";
130
+ };
131
+ readonly description: "Real, nondeterministic live price — no re-execution guarantee.";
132
+ };
133
+ readonly expectedStatuses: readonly [200];
134
+ };
135
+ readonly verification: {
136
+ readonly canaries: readonly [{
137
+ readonly path: "/readiness";
138
+ readonly method: "GET";
139
+ readonly matcher: {
140
+ readonly type: "json-field-equals";
141
+ readonly field: "source";
142
+ readonly expected: "coingecko-public-api";
143
+ };
144
+ readonly nonce: {
145
+ readonly inject: {
146
+ readonly in: "query";
147
+ readonly name: "nonce";
148
+ };
149
+ readonly echo: {
150
+ readonly from: "json-path";
151
+ readonly path: "nonce";
152
+ };
153
+ };
154
+ }, {
155
+ readonly path: "/canary";
156
+ readonly method: "GET";
157
+ readonly matcher: {
158
+ readonly type: "includes";
159
+ readonly expected: "metrik-canary:live-data:";
160
+ };
161
+ readonly nonce: {
162
+ readonly inject: {
163
+ readonly in: "query";
164
+ readonly name: "nonce";
165
+ };
166
+ readonly echo: {
167
+ readonly from: "json-path";
168
+ readonly path: "nonce";
169
+ };
170
+ };
171
+ }];
172
+ readonly schema: {
173
+ readonly path: "/readiness?nonce=metrik-schema";
174
+ readonly required: readonly [{
175
+ readonly pointer: "ready";
176
+ readonly type: "boolean";
177
+ }, {
178
+ readonly pointer: "source";
179
+ readonly type: "string";
180
+ readonly nonEmpty: true;
181
+ }, {
182
+ readonly pointer: "fetchedAt";
183
+ readonly type: "string";
184
+ readonly nonEmpty: true;
185
+ }, {
186
+ readonly pointer: "priceAgeMs";
187
+ readonly type: "number";
188
+ }, {
189
+ readonly pointer: "freshness";
190
+ readonly type: "string";
191
+ readonly nonEmpty: true;
192
+ }];
193
+ };
194
+ readonly sla: {
195
+ readonly maxLatencyMs: 5000;
196
+ readonly freshnessSeconds: 60;
197
+ };
198
+ };
199
+ readonly commercial: {
200
+ readonly minRatePerSecond: "100";
201
+ readonly maxRatePerSecond: "10000";
202
+ readonly currency: "USDC";
203
+ readonly slaDescription: "Failed or unproven intervals do not advance verified cumulative entitlement; the stream remains active until buyer close or expiry.";
204
+ readonly refundPolicy: "The buyer reclaims unspent escrow using the latest checkpoint after close/expiry, or the unverified escape path after its grace window.";
205
+ };
206
+ readonly access: "gated";
207
+ readonly callerAuth: {
208
+ readonly mechanism: "on-chain";
209
+ readonly role: "buyer";
210
+ readonly accessUrl: "https://gateway.137.23.50.249.sslip.io";
211
+ };
212
+ };
213
+ readonly signature: "0x2f4d2784eb40b1542517bc19f12534fb2e97da4ade5a3ff56193fcfb97fbef921309f77af3445e336cb07a4379011b080bba700033a098f672b0b2f096197f161b";
214
+ };
215
+ };
216
+ /** @deprecated Use {@link LIVE_DATA_SEED_LISTING}. */
82
217
  export declare const DEMO_SEED_LISTING: {
83
- readonly service_ref: "0x84ef78c5ac9fc084422dc2d3e1ef19623bb05d0d81c097d4da49f9c47ec3ed12";
84
- readonly operator: "0x28ea4eF61ac4cca3ed6a64dBb5b2D4be1aDC9814";
85
- readonly public_url: "https://metrik-demo-service.vercel.app";
86
- readonly category: "demo";
218
+ readonly service_ref: "0x79e57358e98a35273c1cd9d5f1bf9ae1e0af8705db432eb706459dc4f88b6fe0";
219
+ readonly operator: "0xB3e162711920dFD8933609019Dc35C73cC1a09F0";
220
+ readonly public_url: "https://livedata.137.23.50.249.sslip.io";
221
+ readonly category: "live-data";
87
222
  readonly signed_binding: {
88
- readonly serviceRef: "0x84ef78c5ac9fc084422dc2d3e1ef19623bb05d0d81c097d4da49f9c47ec3ed12";
89
- readonly binding: {
90
- readonly version: 2;
91
- readonly operator: "0x28ea4eF61ac4cca3ed6a64dBb5b2D4be1aDC9814";
92
- readonly publicUrl: "https://metrik-demo-service.vercel.app";
93
- readonly issuedAt: 1787500000;
223
+ readonly serviceRef: "0x79e57358e98a35273c1cd9d5f1bf9ae1e0af8705db432eb706459dc4f88b6fe0";
224
+ readonly descriptor: {
225
+ readonly version: 3;
226
+ readonly operator: "0xB3e162711920dFD8933609019Dc35C73cC1a09F0";
227
+ readonly publicUrl: "https://livedata.137.23.50.249.sslip.io";
228
+ readonly issuedAt: 1787772057;
229
+ readonly interface: {
230
+ readonly baseUrl: "https://livedata.137.23.50.249.sslip.io";
231
+ readonly healthPath: "/health";
232
+ readonly endpoints: readonly [{
233
+ readonly name: "health";
234
+ readonly path: "/health";
235
+ readonly method: "GET";
236
+ readonly description: "Liveness probe.";
237
+ }, {
238
+ readonly name: "readiness";
239
+ readonly path: "/readiness";
240
+ readonly method: "GET";
241
+ readonly description: "Non-value dependency readiness backed by the same real BTC cache policy.";
242
+ }, {
243
+ readonly name: "price";
244
+ readonly path: "/price";
245
+ readonly method: "GET";
246
+ readonly description: "Real live crypto spot price (?symbol=BTC|ETH|SOL) from CoinGecko's public API.";
247
+ }];
248
+ readonly authModel: "caller-auth";
249
+ readonly example: {
250
+ readonly endpoint: "price";
251
+ readonly request: {
252
+ readonly symbol: "BTC";
253
+ };
254
+ readonly response: {
255
+ readonly symbol: "BTC";
256
+ readonly source: "coingecko-public-api";
257
+ };
258
+ readonly description: "Real, nondeterministic live price — no re-execution guarantee.";
259
+ };
260
+ readonly expectedStatuses: readonly [200];
261
+ };
262
+ readonly verification: {
263
+ readonly canaries: readonly [{
264
+ readonly path: "/readiness";
265
+ readonly method: "GET";
266
+ readonly matcher: {
267
+ readonly type: "json-field-equals";
268
+ readonly field: "source";
269
+ readonly expected: "coingecko-public-api";
270
+ };
271
+ readonly nonce: {
272
+ readonly inject: {
273
+ readonly in: "query";
274
+ readonly name: "nonce";
275
+ };
276
+ readonly echo: {
277
+ readonly from: "json-path";
278
+ readonly path: "nonce";
279
+ };
280
+ };
281
+ }, {
282
+ readonly path: "/canary";
283
+ readonly method: "GET";
284
+ readonly matcher: {
285
+ readonly type: "includes";
286
+ readonly expected: "metrik-canary:live-data:";
287
+ };
288
+ readonly nonce: {
289
+ readonly inject: {
290
+ readonly in: "query";
291
+ readonly name: "nonce";
292
+ };
293
+ readonly echo: {
294
+ readonly from: "json-path";
295
+ readonly path: "nonce";
296
+ };
297
+ };
298
+ }];
299
+ readonly schema: {
300
+ readonly path: "/readiness?nonce=metrik-schema";
301
+ readonly required: readonly [{
302
+ readonly pointer: "ready";
303
+ readonly type: "boolean";
304
+ }, {
305
+ readonly pointer: "source";
306
+ readonly type: "string";
307
+ readonly nonEmpty: true;
308
+ }, {
309
+ readonly pointer: "fetchedAt";
310
+ readonly type: "string";
311
+ readonly nonEmpty: true;
312
+ }, {
313
+ readonly pointer: "priceAgeMs";
314
+ readonly type: "number";
315
+ }, {
316
+ readonly pointer: "freshness";
317
+ readonly type: "string";
318
+ readonly nonEmpty: true;
319
+ }];
320
+ };
321
+ readonly sla: {
322
+ readonly maxLatencyMs: 5000;
323
+ readonly freshnessSeconds: 60;
324
+ };
325
+ };
326
+ readonly commercial: {
327
+ readonly minRatePerSecond: "100";
328
+ readonly maxRatePerSecond: "10000";
329
+ readonly currency: "USDC";
330
+ readonly slaDescription: "Failed or unproven intervals do not advance verified cumulative entitlement; the stream remains active until buyer close or expiry.";
331
+ readonly refundPolicy: "The buyer reclaims unspent escrow using the latest checkpoint after close/expiry, or the unverified escape path after its grace window.";
332
+ };
333
+ readonly access: "gated";
334
+ readonly callerAuth: {
335
+ readonly mechanism: "on-chain";
336
+ readonly role: "buyer";
337
+ readonly accessUrl: "https://gateway.137.23.50.249.sslip.io";
338
+ };
94
339
  };
95
- readonly signature: "0x17917e96836a63238d0abe70c8c55081c4d694ad43311cdb3ea91dad349827fa6480657be2362e0b7f0524a0ee4ba0c48068255c3423a965392724874d244cd21b";
340
+ readonly signature: "0x2f4d2784eb40b1542517bc19f12534fb2e97da4ade5a3ff56193fcfb97fbef921309f77af3445e336cb07a4379011b080bba700033a098f672b0b2f096197f161b";
96
341
  };
97
342
  };
98
343
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/discovery/registry.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;qEACqE;AACrE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,uBAAuB;IACtC;4FACwF;IACxF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;wFAIoF;IACpF,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;uEACmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;CAC1D;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B,mJAC0G,CAAC;AAInJ;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAChC,oEAA6E,CAAC;AAEhF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;CAgBpB,CAAC;AAkCX;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,GAAE,uBAA4B,GACjC,OAAO,CAAC,cAAc,EAAE,CAAC,CA6E3B"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/discovery/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAI5B;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;qEACqE;AACrE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,KAAK,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,KAAK,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IACpC,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,MAAM,EAAE,oBAAoB,GAAG,uBAAuB,CAAC;IAChE,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,qFAAqF;IACrF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,uBAAuB;IACtC;4FACwF;IACxF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;wFAIoF;IACpF,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC;uEACmE;IACnE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,kFAAkF;IAClF,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAC;CAC1D;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B,mJAC0G,CAAC;AAInJ;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EACrC,oEAA6E,CAAC;AAChF,0DAA0D;AAC1D,eAAO,MAAM,qBAAqB,sEAA6B,CAAC;AAEhE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0GzB,CAAC;AACX,sDAAsD;AACtD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAyB,CAAC;AA+CxD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,GAAE,uBAA4B,GACjC,OAAO,CAAC,cAAc,EAAE,CAAC,CA6E3B"}
@@ -1,4 +1,4 @@
1
- import { deriveServiceRef, recoverServiceBindingSigner, serviceBindingSchema, } from "@absol-labs/shared";
1
+ import { deriveServiceRef, recoverServiceBindingSigner, recoverServiceDescriptorSigner, serviceBindingSchema, serviceDescriptorSchema, } from "@absol-labs/shared";
2
2
  import { isHex } from "viem";
3
3
  import { z } from "zod";
4
4
  /**
@@ -8,12 +8,14 @@ import { z } from "zod";
8
8
  export const DEFAULT_METRIK_REGISTRY_URL = "https://pzvnacjolaipeobmptsb.supabase.co/rest/v1/listings?select=service_ref,operator,public_url,category,signed_binding&order=created_at.desc";
9
9
  const DEFAULT_TIMEOUT_MS = 5_000;
10
10
  /**
11
- * `serviceRef` of the built-in verified demo listing. Kept as a named constant so
11
+ * `serviceRef` of the built-in verified live-data listing. Kept as a named constant so
12
12
  * callers can recognise (and dedupe against) the seeded row.
13
13
  */
14
- export const DEMO_SEED_SERVICE_REF = "0x84ef78c5ac9fc084422dc2d3e1ef19623bb05d0d81c097d4da49f9c47ec3ed12";
14
+ export const LIVE_DATA_SEED_SERVICE_REF = "0x79e57358e98a35273c1cd9d5f1bf9ae1e0af8705db432eb706459dc4f88b6fe0";
15
+ /** @deprecated Use {@link LIVE_DATA_SEED_SERVICE_REF}. */
16
+ export const DEMO_SEED_SERVICE_REF = LIVE_DATA_SEED_SERVICE_REF;
15
17
  /**
16
- * A REAL, operator-signed demo listing row embedded so `discoverServices()` returns
18
+ * A real, operator-signed live-data listing row embedded so `discoverServices()` returns
17
19
  * something hireable with ZERO configuration (no Supabase anon key, no registry URL).
18
20
  *
19
21
  * This is PUBLIC data — a signed {@link https://github.com/Absol-Labs | Metrik}
@@ -24,22 +26,109 @@ export const DEMO_SEED_SERVICE_REF = "0x84ef78c5ac9fc084422dc2d3e1ef19623bb05d0d
24
26
  * with any field here and the seed silently drops itself, identically to a bad
25
27
  * registry row. The `category` column is unsigned informational metadata only.
26
28
  */
27
- export const DEMO_SEED_LISTING = {
28
- service_ref: DEMO_SEED_SERVICE_REF,
29
- operator: "0x28ea4eF61ac4cca3ed6a64dBb5b2D4be1aDC9814",
30
- public_url: "https://metrik-demo-service.vercel.app",
31
- category: "demo",
29
+ export const LIVE_DATA_SEED_LISTING = {
30
+ service_ref: LIVE_DATA_SEED_SERVICE_REF,
31
+ operator: "0xB3e162711920dFD8933609019Dc35C73cC1a09F0",
32
+ public_url: "https://livedata.137.23.50.249.sslip.io",
33
+ category: "live-data",
32
34
  signed_binding: {
33
- serviceRef: DEMO_SEED_SERVICE_REF,
34
- binding: {
35
- version: 2,
36
- operator: "0x28ea4eF61ac4cca3ed6a64dBb5b2D4be1aDC9814",
37
- publicUrl: "https://metrik-demo-service.vercel.app",
38
- issuedAt: 1_787_500_000,
35
+ serviceRef: LIVE_DATA_SEED_SERVICE_REF,
36
+ descriptor: {
37
+ version: 3,
38
+ operator: "0xB3e162711920dFD8933609019Dc35C73cC1a09F0",
39
+ publicUrl: "https://livedata.137.23.50.249.sslip.io",
40
+ issuedAt: 1_787_772_057,
41
+ interface: {
42
+ baseUrl: "https://livedata.137.23.50.249.sslip.io",
43
+ healthPath: "/health",
44
+ endpoints: [
45
+ {
46
+ name: "health",
47
+ path: "/health",
48
+ method: "GET",
49
+ description: "Liveness probe.",
50
+ },
51
+ {
52
+ name: "readiness",
53
+ path: "/readiness",
54
+ method: "GET",
55
+ description: "Non-value dependency readiness backed by the same real BTC cache policy.",
56
+ },
57
+ {
58
+ name: "price",
59
+ path: "/price",
60
+ method: "GET",
61
+ description: "Real live crypto spot price (?symbol=BTC|ETH|SOL) from CoinGecko's public API.",
62
+ },
63
+ ],
64
+ authModel: "caller-auth",
65
+ example: {
66
+ endpoint: "price",
67
+ request: { symbol: "BTC" },
68
+ response: { symbol: "BTC", source: "coingecko-public-api" },
69
+ description: "Real, nondeterministic live price — no re-execution guarantee.",
70
+ },
71
+ expectedStatuses: [200],
72
+ },
73
+ verification: {
74
+ canaries: [
75
+ {
76
+ path: "/readiness",
77
+ method: "GET",
78
+ matcher: {
79
+ type: "json-field-equals",
80
+ field: "source",
81
+ expected: "coingecko-public-api",
82
+ },
83
+ nonce: {
84
+ inject: { in: "query", name: "nonce" },
85
+ echo: { from: "json-path", path: "nonce" },
86
+ },
87
+ },
88
+ {
89
+ path: "/canary",
90
+ method: "GET",
91
+ matcher: {
92
+ type: "includes",
93
+ expected: "metrik-canary:live-data:",
94
+ },
95
+ nonce: {
96
+ inject: { in: "query", name: "nonce" },
97
+ echo: { from: "json-path", path: "nonce" },
98
+ },
99
+ },
100
+ ],
101
+ schema: {
102
+ path: "/readiness?nonce=metrik-schema",
103
+ required: [
104
+ { pointer: "ready", type: "boolean" },
105
+ { pointer: "source", type: "string", nonEmpty: true },
106
+ { pointer: "fetchedAt", type: "string", nonEmpty: true },
107
+ { pointer: "priceAgeMs", type: "number" },
108
+ { pointer: "freshness", type: "string", nonEmpty: true },
109
+ ],
110
+ },
111
+ sla: { maxLatencyMs: 5000, freshnessSeconds: 60 },
112
+ },
113
+ commercial: {
114
+ minRatePerSecond: "100",
115
+ maxRatePerSecond: "10000",
116
+ currency: "USDC",
117
+ slaDescription: "Failed or unproven intervals do not advance verified cumulative entitlement; the stream remains active until buyer close or expiry.",
118
+ refundPolicy: "The buyer reclaims unspent escrow using the latest checkpoint after close/expiry, or the unverified escape path after its grace window.",
119
+ },
120
+ access: "gated",
121
+ callerAuth: {
122
+ mechanism: "on-chain",
123
+ role: "buyer",
124
+ accessUrl: "https://gateway.137.23.50.249.sslip.io",
125
+ },
39
126
  },
40
- signature: "0x17917e96836a63238d0abe70c8c55081c4d694ad43311cdb3ea91dad349827fa6480657be2362e0b7f0524a0ee4ba0c48068255c3423a965392724874d244cd21b",
127
+ signature: "0x2f4d2784eb40b1542517bc19f12534fb2e97da4ade5a3ff56193fcfb97fbef921309f77af3445e336cb07a4379011b080bba700033a098f672b0b2f096197f161b",
41
128
  },
42
129
  };
130
+ /** @deprecated Use {@link LIVE_DATA_SEED_LISTING}. */
131
+ export const DEMO_SEED_LISTING = LIVE_DATA_SEED_LISTING;
43
132
  const signature65HexSchema = z
44
133
  .string()
45
134
  .refine((value) => isHex(value, { strict: true }) && value.length === 132, "must be a 65-byte hex signature");
@@ -54,12 +143,24 @@ const signedBindingRecordSchema = z.object({
54
143
  signature: signature65HexSchema,
55
144
  targetMetadata: z.record(z.string()).optional(),
56
145
  });
146
+ const signedDescriptorRecordSchema = z.object({
147
+ serviceRef: bytes32HexSchema,
148
+ descriptor: serviceDescriptorSchema,
149
+ signature: signature65HexSchema,
150
+ targetMetadata: z.record(z.string()).optional(),
151
+ });
57
152
  /** A Supabase `listings` row. Only `signed_binding` is trusted; `category` is
58
153
  * carried through as unsigned informational metadata. Unknown columns are ignored. */
59
154
  const listingRowSchema = z
60
155
  .object({
156
+ service_ref: bytes32HexSchema.optional(),
157
+ operator: z.string().optional(),
158
+ public_url: z.string().optional(),
61
159
  category: z.string().nullish(),
62
- signed_binding: signedBindingRecordSchema,
160
+ signed_binding: z.union([
161
+ signedBindingRecordSchema,
162
+ signedDescriptorRecordSchema,
163
+ ]),
63
164
  })
64
165
  .passthrough();
65
166
  /**
@@ -81,12 +182,12 @@ export async function discoverServices(opts = {}) {
81
182
  const includeDemoSeed = opts.includeDemoSeed ?? true;
82
183
  // `registryUnavailable` = the registry could not be queried at all (no fetch /
83
184
  // network error / non-200). It never throws into the hire flow; instead it
84
- // degrades to the built-in verified demo seed (when enabled) so a cold user
185
+ // degrades to the built-in verified live-data seed (when enabled) so a cold user
85
186
  // still discovers a hireable service.
86
187
  let rows = [];
87
188
  let registryUnavailable = false;
88
189
  if (typeof fetchImpl !== "function") {
89
- logger.warn("metrik discovery: no fetch implementation available; falling back to demo seed only");
190
+ logger.warn("metrik discovery: no fetch implementation available; falling back to live-data seed only");
90
191
  registryUnavailable = true;
91
192
  }
92
193
  else {
@@ -96,8 +197,8 @@ export async function discoverServices(opts = {}) {
96
197
  catch (error) {
97
198
  // Fail-safe / buyer-favouring: a down, unreachable, or 401 registry (the
98
199
  // Supabase default rejects credential-free reads) must never throw into the
99
- // agent's hire flow — it degrades to the demo seed.
100
- logger.warn(`metrik discovery: listings registry unavailable (${errorMessage(error)}); falling back to demo seed only`);
200
+ // agent's hire flow — it degrades to the live-data seed.
201
+ logger.warn(`metrik discovery: listings registry unavailable (${errorMessage(error)}); falling back to live-data seed only`);
101
202
  registryUnavailable = true;
102
203
  }
103
204
  }
@@ -120,19 +221,19 @@ export async function discoverServices(opts = {}) {
120
221
  return listings;
121
222
  }
122
223
  }
123
- // Append the built-in verified demo listing when the registry did not already
224
+ // Append the built-in verified live-data listing when the registry did not already
124
225
  // surface it. Runs through the SAME fail-closed verifyRow path, so it is
125
226
  // verified exactly like a registry row and can never be a trust bypass.
126
227
  if (includeDemoSeed && !seedAlreadyPresent) {
127
- const seed = await verifyRow(DEMO_SEED_LISTING, "demo-seed", logger);
228
+ const seed = await verifyRow(DEMO_SEED_LISTING, "live-data-seed", logger);
128
229
  if (seed === null) {
129
230
  // Defensive: only reachable if the embedded constant were corrupted.
130
- logger.warn("metrik discovery: built-in demo seed failed fail-closed verification; not seeding");
231
+ logger.warn("metrik discovery: built-in live-data seed failed fail-closed verification; not seeding");
131
232
  }
132
233
  else if (opts.category === undefined || seed.category === opts.category) {
133
234
  logger.warn(registryUnavailable
134
- ? "metrik discovery: registry unavailable — serving the built-in verified demo listing"
135
- : "metrik discovery: registry did not include the demo service — appending the built-in verified demo listing");
235
+ ? "metrik discovery: registry unavailable — serving the built-in verified live-data listing"
236
+ : "metrik discovery: registry did not include live data — appending the built-in verified listing");
136
237
  listings.push(seed);
137
238
  }
138
239
  }
@@ -175,33 +276,75 @@ async function verifyRow(row, index, logger) {
175
276
  return null;
176
277
  }
177
278
  const { signed_binding: record, category } = parsed.data;
279
+ const signedIdentity = "descriptor" in record
280
+ ? {
281
+ operator: record.descriptor.operator,
282
+ publicUrl: record.descriptor.publicUrl,
283
+ }
284
+ : {
285
+ operator: record.binding.operator,
286
+ publicUrl: record.binding.publicUrl,
287
+ };
288
+ if ((parsed.data.service_ref !== undefined &&
289
+ !eqHex(parsed.data.service_ref, record.serviceRef)) ||
290
+ (parsed.data.operator !== undefined &&
291
+ !eqHex(parsed.data.operator, signedIdentity.operator)) ||
292
+ (parsed.data.public_url !== undefined &&
293
+ parsed.data.public_url !== signedIdentity.publicUrl)) {
294
+ logger.warn(`metrik discovery: row ${index} dropped — flat identity columns disagree with signed record`);
295
+ return null;
296
+ }
178
297
  let signer;
179
298
  try {
180
- signer = (await recoverServiceBindingSigner(record.binding, record.signature));
299
+ signer = ("descriptor" in record
300
+ ? await recoverServiceDescriptorSigner(record.descriptor, record.signature)
301
+ : await recoverServiceBindingSigner(record.binding, record.signature));
181
302
  }
182
303
  catch (error) {
183
304
  logger.warn(`metrik discovery: row ${index} dropped — signature recovery threw (${errorMessage(error)})`);
184
305
  return null;
185
306
  }
186
- if (signer === null || !eqHex(signer, record.binding.operator)) {
307
+ if (signer === null || !eqHex(signer, signedIdentity.operator)) {
187
308
  logger.warn(`metrik discovery: row ${index} dropped — signature does not recover to operator (recovered ${signer ?? "null"})`);
188
309
  return null;
189
310
  }
190
- const derivedRef = deriveServiceRef(record.binding);
311
+ const derivedRef = deriveServiceRef("descriptor" in record ? record.descriptor : record.binding);
191
312
  if (!eqHex(derivedRef, record.serviceRef)) {
192
313
  logger.warn(`metrik discovery: row ${index} dropped — serviceRef ${record.serviceRef} does not match derived ${derivedRef}`);
193
314
  return null;
194
315
  }
316
+ const access = "descriptor" in record ? (record.descriptor.access ?? "public") : "public";
317
+ const accessUrl = "descriptor" in record
318
+ ? access === "gated"
319
+ ? record.descriptor.callerAuth?.accessUrl
320
+ : (record.descriptor.interface?.baseUrl ?? record.descriptor.publicUrl)
321
+ : record.binding.publicUrl;
322
+ if (accessUrl === undefined ||
323
+ (access === "gated" && !isHttpsUrl(accessUrl))) {
324
+ logger.warn(`metrik discovery: row ${index} dropped — gated descriptor has no signed HTTPS callerAuth.accessUrl`);
325
+ return null;
326
+ }
195
327
  return {
196
328
  serviceRef: derivedRef,
197
- operator: record.binding.operator,
198
- publicUrl: record.binding.publicUrl,
329
+ operator: signedIdentity.operator,
330
+ publicUrl: signedIdentity.publicUrl,
331
+ access,
332
+ accessUrl,
333
+ signed: record,
199
334
  category: category ?? null,
200
335
  ...(record.targetMetadata === undefined
201
336
  ? {}
202
337
  : { targetMetadata: record.targetMetadata }),
203
338
  };
204
339
  }
340
+ function isHttpsUrl(value) {
341
+ try {
342
+ return new URL(value).protocol === "https:";
343
+ }
344
+ catch {
345
+ return false;
346
+ }
347
+ }
205
348
  function eqHex(a, b) {
206
349
  return a.toLowerCase() === b.toLowerCase();
207
350
  }
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/discovery/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/discovery/registry.ts"],"names":[],"mappings":"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"}