@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.
- package/README.md +187 -0
- package/dist/capability/invocation-capability.d.ts +184 -0
- package/dist/capability/invocation-capability.d.ts.map +1 -0
- package/dist/capability/invocation-capability.js +183 -0
- package/dist/capability/invocation-capability.js.map +1 -0
- package/dist/discovery/registry.d.ts +260 -15
- package/dist/discovery/registry.d.ts.map +1 -1
- package/dist/discovery/registry.js +174 -31
- package/dist/discovery/registry.js.map +1 -1
- package/dist/frameworks/agentkit.js +3 -3
- package/dist/frameworks/agentkit.js.map +1 -1
- package/dist/frameworks/crewai.js +1 -1
- package/dist/frameworks/crewai.js.map +1 -1
- package/dist/frameworks/eliza.js +2 -2
- package/dist/frameworks/eliza.js.map +1 -1
- package/dist/frameworks/langchain.js +2 -2
- package/dist/frameworks/langchain.js.map +1 -1
- package/dist/gateway/caller-auth-gateway.d.ts +108 -0
- package/dist/gateway/caller-auth-gateway.d.ts.map +1 -0
- package/dist/gateway/caller-auth-gateway.js +191 -0
- package/dist/gateway/caller-auth-gateway.js.map +1 -0
- package/dist/gateway/http-server.d.ts +51 -0
- package/dist/gateway/http-server.d.ts.map +1 -0
- package/dist/gateway/http-server.js +241 -0
- package/dist/gateway/http-server.js.map +1 -0
- package/dist/gateway/server-entry.d.ts +2 -0
- package/dist/gateway/server-entry.d.ts.map +1 -0
- package/dist/gateway/server-entry.js +30 -0
- package/dist/gateway/server-entry.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +4 -2
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/invoke.d.ts +136 -0
- package/dist/sdk/invoke.d.ts.map +1 -0
- package/dist/sdk/invoke.js +274 -0
- package/dist/sdk/invoke.js.map +1 -0
- package/dist/wallet/lifecycle.d.ts +101 -0
- package/dist/wallet/lifecycle.d.ts.map +1 -0
- package/dist/wallet/lifecycle.js +57 -0
- package/dist/wallet/lifecycle.js.map +1 -0
- package/package.json +6 -3
- package/src/capability/invocation-capability.ts +255 -0
- package/src/discovery/registry.ts +213 -35
- package/src/frameworks/agentkit.ts +3 -3
- package/src/frameworks/crewai.ts +1 -1
- package/src/frameworks/eliza.ts +2 -2
- package/src/frameworks/langchain.ts +2 -2
- package/src/gateway/caller-auth-gateway.ts +332 -0
- package/src/gateway/http-server.ts +342 -0
- package/src/gateway/server-entry.ts +38 -0
- package/src/index.ts +86 -0
- package/src/mcp/server.ts +4 -2
- package/src/sdk/invoke.ts +495 -0
- 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
|
|
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
|
|
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
|
|
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
|
|
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: "
|
|
84
|
-
readonly operator: "
|
|
85
|
-
readonly public_url: "https://
|
|
86
|
-
readonly category: "
|
|
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: "
|
|
89
|
-
readonly
|
|
90
|
-
readonly version:
|
|
91
|
-
readonly operator: "
|
|
92
|
-
readonly publicUrl: "https://
|
|
93
|
-
readonly issuedAt:
|
|
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: "
|
|
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":"
|
|
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
|
|
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
|
|
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
|
|
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
|
|
28
|
-
service_ref:
|
|
29
|
-
operator: "
|
|
30
|
-
public_url: "https://
|
|
31
|
-
category: "
|
|
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:
|
|
34
|
-
|
|
35
|
-
version:
|
|
36
|
-
operator: "
|
|
37
|
-
publicUrl: "https://
|
|
38
|
-
issuedAt:
|
|
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: "
|
|
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:
|
|
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
|
|
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
|
|
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
|
|
100
|
-
logger.warn(`metrik discovery: listings registry unavailable (${errorMessage(error)}); falling back to
|
|
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
|
|
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, "
|
|
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
|
|
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
|
|
135
|
-
: "metrik discovery: registry did not include
|
|
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 = (
|
|
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,
|
|
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:
|
|
198
|
-
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":"AAAA,OAAO,EACL,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8DxB;;;GAGG;AACH,MAAM,CAAC,MAAM,2BAA2B,GACtC,gJAAgJ,CAAC;AAEnJ,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAChC,oEAA6E,CAAC;AAEhF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,WAAW,EAAE,qBAAqB;IAClC,QAAQ,EAAE,4CAA4C;IACtD,UAAU,EAAE,wCAAwC;IACpD,QAAQ,EAAE,MAAM;IAChB,cAAc,EAAE;QACd,UAAU,EAAE,qBAAqB;QACjC,OAAO,EAAE;YACP,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,4CAA4C;YACtD,SAAS,EAAE,wCAAwC;YACnD,QAAQ,EAAE,aAAa;SACxB;QACD,SAAS,EACP,sIAAsI;KACzI;CACO,CAAC;AAEX,MAAM,oBAAoB,GAAG,CAAC;KAC3B,MAAM,EAAE;KACR,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EACjE,iCAAiC,CAClC,CAAC;AAEJ,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,EAAE;KACR,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAChE,qBAAqB,CACtB,CAAC;AAEJ;iEACiE;AACjE,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,oBAAoB;IAC7B,SAAS,EAAE,oBAAoB;IAC/B,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC;AAEH;sFACsF;AACtF,MAAM,gBAAgB,GAAG,CAAC;KACvB,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE;IAC9B,cAAc,EAAE,yBAAyB;CAC1C,CAAC;KACD,WAAW,EAAE,CAAC;AAEjB;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAgC,EAAE;IAElC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC;IACtC,MAAM,WAAW,GACf,IAAI,CAAC,WAAW;QAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB;QACrC,2BAA2B,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACvD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;IAErD,+EAA+E;IAC/E,2EAA2E;IAC3E,4EAA4E;IAC5E,sCAAsC;IACtC,IAAI,IAAI,GAAc,EAAE,CAAC;IACzB,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CACT,qFAAqF,CACtF,CAAC;QACF,mBAAmB,GAAG,IAAI,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,yEAAyE;YACzE,4EAA4E;YAC5E,oDAAoD;YACpD,MAAM,CAAC,IAAI,CACT,oDAAoD,YAAY,CAAC,KAAK,CAAC,mCAAmC,CAC3G,CAAC;YACF,mBAAmB,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,qBAAqB,CAAC,EAAE,CAAC;YACrD,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtE,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9D,2DAA2D;YAC3D,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,yEAAyE;IACzE,wEAAwE;IACxE,IAAI,eAAe,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACrE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,qEAAqE;YACrE,MAAM,CAAC,IAAI,CACT,mFAAmF,CACpF,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1E,MAAM,CAAC,IAAI,CACT,mBAAmB;gBACjB,CAAC,CAAC,qFAAqF;gBACvF,CAAC,CAAC,4GAA4G,CACjH,CAAC;YACF,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,SAAuB,EACvB,GAAW,EACX,MAA0B,EAC1B,SAAiB;IAEjB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;YACxB,OAAO,CAAC,aAAa,GAAG,UAAU,MAAM,EAAE,CAAC;QAC7C,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YACpC,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;SAC1D,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,2CAA2C,QAAQ,CAAC,MAAM,EAAE,CAC7D,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,SAAS,CACtB,GAAY,EACZ,KAAsB,EACtB,MAA8C;IAE9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CACT,yBAAyB,KAAK,wCAAwC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,cAAc,GAAG,CAC3H,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzD,IAAI,MAA4B,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,MAAM,2BAA2B,CACzC,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,SAA0B,CAClC,CAAyB,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CACT,yBAAyB,KAAK,wCAAwC,YAAY,CAAC,KAAK,CAAC,GAAG,CAC7F,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,MAAM,CAAC,IAAI,CACT,yBAAyB,KAAK,gEAAgE,MAAM,IAAI,MAAM,GAAG,CAClH,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CACT,yBAAyB,KAAK,yBAAyB,MAAM,CAAC,UAAU,2BAA2B,UAAU,EAAE,CAChH,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAyB;QAClD,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS;QACnC,QAAQ,EAAE,QAAQ,IAAI,IAAI;QAC1B,GAAG,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS;YACrC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,CAAS,EAAE,CAAS;IACjC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/discovery/registry.ts"],"names":[],"mappings":"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"}
|