@antseed/cli 0.1.25 → 0.1.27
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 +24 -22
- package/dist/cli/commands/browse.d.ts +1 -1
- package/dist/cli/commands/browse.js +4 -4
- package/dist/cli/commands/browse.js.map +1 -1
- package/dist/cli/commands/config.js +1 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/connect.d.ts +0 -1
- package/dist/cli/commands/connect.d.ts.map +1 -1
- package/dist/cli/commands/connect.js +0 -7
- package/dist/cli/commands/connect.js.map +1 -1
- package/dist/cli/commands/connect.test.js +0 -2
- package/dist/cli/commands/connect.test.js.map +1 -1
- package/dist/cli/commands/connection.js +21 -21
- package/dist/cli/commands/connection.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +0 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/plugin-create.js +1 -1
- package/dist/cli/commands/seed.d.ts.map +1 -1
- package/dist/cli/commands/seed.js +41 -24
- package/dist/cli/commands/seed.js.map +1 -1
- package/dist/cli/commands/seed.test.js +6 -6
- package/dist/cli/commands/seed.test.js.map +1 -1
- package/dist/config/defaults.js +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/effective.d.ts +0 -1
- package/dist/config/effective.d.ts.map +1 -1
- package/dist/config/effective.js +0 -17
- package/dist/config/effective.js.map +1 -1
- package/dist/config/effective.test.js +0 -3
- package/dist/config/effective.test.js.map +1 -1
- package/dist/config/loader.js +25 -25
- package/dist/config/loader.js.map +1 -1
- package/dist/config/loader.test.js +22 -12
- package/dist/config/loader.test.js.map +1 -1
- package/dist/config/types.d.ts +19 -11
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +41 -14
- package/dist/config/validation.js.map +1 -1
- package/dist/proxy/buyer-proxy.d.ts +7 -7
- package/dist/proxy/buyer-proxy.d.ts.map +1 -1
- package/dist/proxy/buyer-proxy.js +64 -137
- package/dist/proxy/buyer-proxy.js.map +1 -1
- package/dist/proxy/buyer-proxy.test.js +6 -6
- package/dist/proxy/buyer-proxy.test.js.map +1 -1
- package/dist/proxy/service-api-adapter.d.ts +2 -0
- package/dist/proxy/service-api-adapter.d.ts.map +1 -0
- package/dist/proxy/service-api-adapter.js +5 -0
- package/dist/proxy/service-api-adapter.js.map +1 -0
- package/dist/proxy/service-api-adapter.test.d.ts +2 -0
- package/dist/proxy/service-api-adapter.test.d.ts.map +1 -0
- package/dist/proxy/{model-api-adapter.test.js → service-api-adapter.test.js} +2 -2
- package/dist/proxy/service-api-adapter.test.js.map +1 -0
- package/package.json +4 -4
- package/dist/proxy/model-api-adapter.d.ts +0 -2
- package/dist/proxy/model-api-adapter.d.ts.map +0 -1
- package/dist/proxy/model-api-adapter.js +0 -5
- package/dist/proxy/model-api-adapter.js.map +0 -1
- package/dist/proxy/model-api-adapter.test.d.ts +0 -2
- package/dist/proxy/model-api-adapter.test.d.ts.map +0 -1
- package/dist/proxy/model-api-adapter.test.js.map +0 -1
|
@@ -21,7 +21,7 @@ test('loadConfig deep-merges nested hierarchical pricing without dropping defaul
|
|
|
21
21
|
pricing: {
|
|
22
22
|
providers: {
|
|
23
23
|
anthropic: {
|
|
24
|
-
|
|
24
|
+
services: {
|
|
25
25
|
'claude-sonnet-4-5-20250929': {
|
|
26
26
|
inputUsdPerMillion: 12,
|
|
27
27
|
outputUsdPerMillion: 18,
|
|
@@ -47,21 +47,21 @@ test('loadConfig deep-merges nested hierarchical pricing without dropping defaul
|
|
|
47
47
|
const config = await loadConfig(configPath);
|
|
48
48
|
assert.equal(config.seller.pricing.defaults.inputUsdPerMillion, 10);
|
|
49
49
|
assert.equal(config.seller.pricing.defaults.outputUsdPerMillion, 10);
|
|
50
|
-
assert.equal(config.seller.pricing.providers?.anthropic?.
|
|
51
|
-
assert.equal(config.seller.pricing.providers?.anthropic?.
|
|
50
|
+
assert.equal(config.seller.pricing.providers?.anthropic?.services?.['claude-sonnet-4-5-20250929']?.inputUsdPerMillion, 12);
|
|
51
|
+
assert.equal(config.seller.pricing.providers?.anthropic?.services?.['claude-sonnet-4-5-20250929']?.outputUsdPerMillion, 18);
|
|
52
52
|
assert.equal(config.buyer.maxPricing.defaults.inputUsdPerMillion, 100);
|
|
53
53
|
assert.equal(config.buyer.maxPricing.defaults.outputUsdPerMillion, 100);
|
|
54
54
|
assert.equal(config.buyer.maxPricing.providers?.openai?.defaults?.inputUsdPerMillion, 55);
|
|
55
55
|
assert.equal(config.buyer.maxPricing.providers?.openai?.defaults?.outputUsdPerMillion, 77);
|
|
56
56
|
});
|
|
57
57
|
});
|
|
58
|
-
test('loadConfig throws explicit validation error for incomplete
|
|
58
|
+
test('loadConfig throws explicit validation error for incomplete service pricing', async () => {
|
|
59
59
|
await withTempConfig(JSON.stringify({
|
|
60
60
|
seller: {
|
|
61
61
|
pricing: {
|
|
62
62
|
providers: {
|
|
63
63
|
anthropic: {
|
|
64
|
-
|
|
64
|
+
services: {
|
|
65
65
|
broken: {
|
|
66
66
|
inputUsdPerMillion: 12,
|
|
67
67
|
},
|
|
@@ -71,13 +71,13 @@ test('loadConfig throws explicit validation error for incomplete model pricing',
|
|
|
71
71
|
},
|
|
72
72
|
},
|
|
73
73
|
}), async (configPath) => {
|
|
74
|
-
await assert.rejects(async () => loadConfig(configPath), /seller\.pricing\.providers\.anthropic\.
|
|
74
|
+
await assert.rejects(async () => loadConfig(configPath), /seller\.pricing\.providers\.anthropic\.services\.broken\.outputUsdPerMillion/);
|
|
75
75
|
});
|
|
76
76
|
});
|
|
77
|
-
test('loadConfig merges seller
|
|
77
|
+
test('loadConfig merges seller service categories per provider/service', async () => {
|
|
78
78
|
await withTempConfig(JSON.stringify({
|
|
79
79
|
seller: {
|
|
80
|
-
|
|
80
|
+
serviceCategories: {
|
|
81
81
|
anthropic: {
|
|
82
82
|
'claude-sonnet-4-5-20250929': ['coding', 'legal'],
|
|
83
83
|
},
|
|
@@ -85,20 +85,30 @@ test('loadConfig merges seller model categories per provider/model', async () =>
|
|
|
85
85
|
},
|
|
86
86
|
}), async (configPath) => {
|
|
87
87
|
const config = await loadConfig(configPath);
|
|
88
|
-
assert.deepEqual(config.seller.
|
|
88
|
+
assert.deepEqual(config.seller.serviceCategories?.anthropic?.['claude-sonnet-4-5-20250929'], ['coding', 'legal']);
|
|
89
89
|
});
|
|
90
90
|
});
|
|
91
|
-
test('loadConfig rejects invalid seller
|
|
91
|
+
test('loadConfig rejects invalid seller service category values', async () => {
|
|
92
92
|
await withTempConfig(JSON.stringify({
|
|
93
93
|
seller: {
|
|
94
|
-
|
|
94
|
+
serviceCategories: {
|
|
95
95
|
anthropic: {
|
|
96
96
|
'claude-sonnet-4-5-20250929': ['Bad Value'],
|
|
97
97
|
},
|
|
98
98
|
},
|
|
99
99
|
},
|
|
100
100
|
}), async (configPath) => {
|
|
101
|
-
await assert.rejects(async () => loadConfig(configPath), /seller\.
|
|
101
|
+
await assert.rejects(async () => loadConfig(configPath), /seller\.serviceCategories\.anthropic\.claude-sonnet-4-5-20250929/);
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
test('loadConfig preserves seller publicAddress override', async () => {
|
|
105
|
+
await withTempConfig(JSON.stringify({
|
|
106
|
+
seller: {
|
|
107
|
+
publicAddress: 'peer.example.com:6882',
|
|
108
|
+
},
|
|
109
|
+
}), async (configPath) => {
|
|
110
|
+
const config = await loadConfig(configPath);
|
|
111
|
+
assert.equal(config.seller.publicAddress, 'peer.example.com:6882');
|
|
102
112
|
});
|
|
103
113
|
});
|
|
104
114
|
//# sourceMappingURL=loader.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../src/config/loader.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,EAAyC;IACvF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,IAAI,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;IAC9F,MAAM,cAAc,CAClB,IAAI,CAAC,SAAS,CAAC;QACb,MAAM,EAAE;YACN,OAAO,EAAE;gBACP,SAAS,EAAE;oBACT,SAAS,EAAE;wBACT,
|
|
1
|
+
{"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../src/config/loader.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,EAAyC;IACvF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,IAAI,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;IAC9F,MAAM,cAAc,CAClB,IAAI,CAAC,SAAS,CAAC;QACb,MAAM,EAAE;YACN,OAAO,EAAE;gBACP,SAAS,EAAE;oBACT,SAAS,EAAE;wBACT,QAAQ,EAAE;4BACR,4BAA4B,EAAE;gCAC5B,kBAAkB,EAAE,EAAE;gCACtB,mBAAmB,EAAE,EAAE;6BACxB;yBACF;qBACF;iBACF;aACF;SACF;QACD,KAAK,EAAE;YACL,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,MAAM,EAAE;wBACN,QAAQ,EAAE;4BACR,kBAAkB,EAAE,EAAE;4BACtB,mBAAmB,EAAE,EAAE;yBACxB;qBACF;iBACF;aACF;SACF;KACF,CAAC,EACF,KAAK,EAAE,UAAU,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAE5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,KAAK,CACV,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,4BAA4B,CAAC,EAAE,kBAAkB,EACxG,EAAE,CACH,CAAC;QACF,MAAM,CAAC,KAAK,CACV,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,4BAA4B,CAAC,EAAE,mBAAmB,EACzG,EAAE,CACH,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;QACxE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAC7F,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;IAC5F,MAAM,cAAc,CAClB,IAAI,CAAC,SAAS,CAAC;QACb,MAAM,EAAE;YACN,OAAO,EAAE;gBACP,SAAS,EAAE;oBACT,SAAS,EAAE;wBACT,QAAQ,EAAE;4BACR,MAAM,EAAE;gCACN,kBAAkB,EAAE,EAAE;6BACvB;yBACF;qBACF;iBACF;aACF;SACF;KACF,CAAC,EACF,KAAK,EAAE,UAAU,EAAE,EAAE;QACnB,MAAM,MAAM,CAAC,OAAO,CAClB,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAClC,8EAA8E,CAC/E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;IAClF,MAAM,cAAc,CAClB,IAAI,CAAC,SAAS,CAAC;QACb,MAAM,EAAE;YACN,iBAAiB,EAAE;gBACjB,SAAS,EAAE;oBACT,4BAA4B,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;iBAClD;aACF;SACF;KACF,CAAC,EACF,KAAK,EAAE,UAAU,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,SAAS,CACd,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,SAAS,EAAE,CAAC,4BAA4B,CAAC,EAC1E,CAAC,QAAQ,EAAE,OAAO,CAAC,CACpB,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;IAC3E,MAAM,cAAc,CAClB,IAAI,CAAC,SAAS,CAAC;QACb,MAAM,EAAE;YACN,iBAAiB,EAAE;gBACjB,SAAS,EAAE;oBACT,4BAA4B,EAAE,CAAC,WAAW,CAAC;iBAC5C;aACF;SACF;KACF,CAAC,EACF,KAAK,EAAE,UAAU,EAAE,EAAE;QACnB,MAAM,MAAM,CAAC,OAAO,CAClB,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAClC,kEAAkE,CACnE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;IACpE,MAAM,cAAc,CAClB,IAAI,CAAC,SAAS,CAAC;QACb,MAAM,EAAE;YACN,aAAa,EAAE,uBAAuB;SACvC;KACF,CAAC,EACF,KAAK,EAAE,UAAU,EAAE,EAAE;QACnB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,uBAAuB,CAAC,CAAC;IACrE,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -31,23 +31,23 @@ export interface TokenPricingUsdPerMillion {
|
|
|
31
31
|
outputUsdPerMillion: number;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
* Provider-level optional defaults and per-
|
|
34
|
+
* Provider-level optional defaults and per-service overrides.
|
|
35
35
|
*/
|
|
36
36
|
export interface ProviderPricingConfig {
|
|
37
37
|
defaults?: TokenPricingUsdPerMillion;
|
|
38
|
-
|
|
38
|
+
services?: Record<string, TokenPricingUsdPerMillion>;
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
|
-
* Hierarchical pricing with global defaults and optional provider/
|
|
41
|
+
* Hierarchical pricing with global defaults and optional provider/service overrides.
|
|
42
42
|
*/
|
|
43
43
|
export interface HierarchicalPricingConfig {
|
|
44
44
|
defaults: TokenPricingUsdPerMillion;
|
|
45
45
|
providers?: Record<string, ProviderPricingConfig>;
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
|
-
* Optional provider/
|
|
48
|
+
* Optional provider/service category tags for metadata discovery.
|
|
49
49
|
*/
|
|
50
|
-
export interface
|
|
50
|
+
export interface SellerServiceCategoryConfig {
|
|
51
51
|
[provider: string]: Record<string, string[]>;
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
@@ -64,8 +64,8 @@ export interface SellerMiddlewareConfig {
|
|
|
64
64
|
position: MiddlewarePosition;
|
|
65
65
|
/** Role for 'prepend'/'append' positions. Defaults to 'user'. */
|
|
66
66
|
role?: string;
|
|
67
|
-
/** If set, only inject for requests targeting one of these
|
|
68
|
-
|
|
67
|
+
/** If set, only inject for requests targeting one of these service IDs. Applies to all services when omitted. */
|
|
68
|
+
services?: string[];
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
71
|
* Seller-specific configuration within the Antseed config.
|
|
@@ -79,8 +79,8 @@ export interface SellerCLIConfig {
|
|
|
79
79
|
enabledProviders: string[];
|
|
80
80
|
/** Seller offer pricing rules in USD per 1M tokens */
|
|
81
81
|
pricing: HierarchicalPricingConfig;
|
|
82
|
-
/** Optional provider/
|
|
83
|
-
|
|
82
|
+
/** Optional provider/service category tags announced in peer metadata */
|
|
83
|
+
serviceCategories?: SellerServiceCategoryConfig;
|
|
84
84
|
/** Optional middleware files to inject into every LLM request. */
|
|
85
85
|
middleware?: SellerMiddlewareConfig[];
|
|
86
86
|
/**
|
|
@@ -90,13 +90,21 @@ export interface SellerCLIConfig {
|
|
|
90
90
|
* There is no opt-out: a confidentiality prompt is always injected when middleware fires.
|
|
91
91
|
*/
|
|
92
92
|
middlewareConfidentialityPrompt?: string;
|
|
93
|
+
/**
|
|
94
|
+
* Path to a directory containing skill subdirectories for on-demand loading.
|
|
95
|
+
* Each subdirectory must contain a `SKILL.md` file with YAML frontmatter (name, description).
|
|
96
|
+
* Skills are loaded dynamically by the LLM via the `antseed_load` tool when needed,
|
|
97
|
+
* rather than being injected into every request like middleware.
|
|
98
|
+
* Relative paths are resolved from the config file's directory.
|
|
99
|
+
*/
|
|
100
|
+
skillsDir?: string;
|
|
101
|
+
/** Publicly reachable seller address override announced in metadata, e.g. "peer.example.com:6882". */
|
|
102
|
+
publicAddress?: string;
|
|
93
103
|
}
|
|
94
104
|
/**
|
|
95
105
|
* Buyer-specific configuration within the Antseed config.
|
|
96
106
|
*/
|
|
97
107
|
export interface BuyerCLIConfig {
|
|
98
|
-
/** Preferred provider types for purchasing */
|
|
99
|
-
preferredProviders: string[];
|
|
100
108
|
/** Buyer max willing-to-pay rules in USD per 1M tokens */
|
|
101
109
|
maxPricing: HierarchicalPricingConfig;
|
|
102
110
|
/** Minimum peer reputation score (0-100) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,aAAa,CAAC;IAC9C,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EAEd,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,aAAa,EAEd,MAAM,YAAY,CAAC;AAwGpB;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE,CA+B9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAK7D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
const
|
|
1
|
+
const SERVICE_CATEGORY_PATTERN = /^[a-z0-9][a-z0-9-]*$/;
|
|
2
|
+
const MAX_PUBLIC_ADDRESS_LENGTH = 255;
|
|
2
3
|
function validatePricingLeaf(path, value, errors) {
|
|
3
4
|
if (!Number.isFinite(value.inputUsdPerMillion) || value.inputUsdPerMillion < 0) {
|
|
4
5
|
errors.push(`${path}.inputUsdPerMillion must be a non-negative finite number`);
|
|
@@ -13,51 +14,71 @@ function validateHierarchicalPricing(path, pricing, errors) {
|
|
|
13
14
|
if (providerPricing.defaults) {
|
|
14
15
|
validatePricingLeaf(`${path}.providers.${provider}.defaults`, providerPricing.defaults, errors);
|
|
15
16
|
}
|
|
16
|
-
for (const [
|
|
17
|
-
validatePricingLeaf(`${path}.providers.${provider}.
|
|
17
|
+
for (const [service, servicePricing] of Object.entries(providerPricing.services ?? {})) {
|
|
18
|
+
validatePricingLeaf(`${path}.providers.${provider}.services.${service}`, servicePricing, errors);
|
|
18
19
|
}
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
|
-
function
|
|
22
|
+
function validateSellerServiceCategories(path, categories, errors) {
|
|
22
23
|
if (!categories)
|
|
23
24
|
return;
|
|
24
|
-
for (const [provider,
|
|
25
|
-
for (const [
|
|
26
|
-
const
|
|
25
|
+
for (const [provider, services] of Object.entries(categories)) {
|
|
26
|
+
for (const [service, tags] of Object.entries(services)) {
|
|
27
|
+
const servicePath = `${path}.${provider}.${service}`;
|
|
27
28
|
if (!Array.isArray(tags) || tags.length === 0) {
|
|
28
|
-
errors.push(`${
|
|
29
|
+
errors.push(`${servicePath} must be a non-empty string array`);
|
|
29
30
|
continue;
|
|
30
31
|
}
|
|
31
32
|
const seen = new Set();
|
|
32
33
|
for (let i = 0; i < tags.length; i += 1) {
|
|
33
34
|
const rawTag = tags[i];
|
|
34
35
|
if (typeof rawTag !== 'string') {
|
|
35
|
-
errors.push(`${
|
|
36
|
+
errors.push(`${servicePath}[${i}] must be a string`);
|
|
36
37
|
continue;
|
|
37
38
|
}
|
|
38
39
|
const tag = rawTag.trim().toLowerCase();
|
|
39
40
|
if (tag.length === 0) {
|
|
40
|
-
errors.push(`${
|
|
41
|
+
errors.push(`${servicePath}[${i}] must not be empty`);
|
|
41
42
|
continue;
|
|
42
43
|
}
|
|
43
|
-
if (!
|
|
44
|
-
errors.push(`${
|
|
44
|
+
if (!SERVICE_CATEGORY_PATTERN.test(tag)) {
|
|
45
|
+
errors.push(`${servicePath}[${i}] must use lowercase letters, digits, or hyphen`);
|
|
45
46
|
}
|
|
46
47
|
if (seen.has(tag)) {
|
|
47
|
-
errors.push(`${
|
|
48
|
+
errors.push(`${servicePath}[${i}] is duplicated`);
|
|
48
49
|
}
|
|
49
50
|
seen.add(tag);
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
54
|
}
|
|
55
|
+
function parsePublicAddress(value) {
|
|
56
|
+
const trimmed = value.trim();
|
|
57
|
+
if (trimmed.length === 0 || trimmed.length > MAX_PUBLIC_ADDRESS_LENGTH) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const lastColon = trimmed.lastIndexOf(':');
|
|
61
|
+
if (lastColon <= 0 || lastColon === trimmed.length - 1) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
const host = trimmed.slice(0, lastColon).trim();
|
|
65
|
+
const portText = trimmed.slice(lastColon + 1);
|
|
66
|
+
if (!/^\d+$/.test(portText)) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const port = Number(portText);
|
|
70
|
+
if (host.length === 0 || !Number.isInteger(port) || port < 1 || port > 65535) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
return { host, port };
|
|
74
|
+
}
|
|
54
75
|
/**
|
|
55
76
|
* Validate the full config and return all issues.
|
|
56
77
|
*/
|
|
57
78
|
export function validateConfig(config) {
|
|
58
79
|
const errors = [];
|
|
59
80
|
validateHierarchicalPricing('seller.pricing', config.seller.pricing, errors);
|
|
60
|
-
|
|
81
|
+
validateSellerServiceCategories('seller.serviceCategories', config.seller.serviceCategories, errors);
|
|
61
82
|
validateHierarchicalPricing('buyer.maxPricing', config.buyer.maxPricing, errors);
|
|
62
83
|
if (!Number.isFinite(config.buyer.minPeerReputation) || config.buyer.minPeerReputation < 0 || config.buyer.minPeerReputation > 100) {
|
|
63
84
|
errors.push('buyer.minPeerReputation must be in range 0-100');
|
|
@@ -71,6 +92,12 @@ export function validateConfig(config) {
|
|
|
71
92
|
if (!Number.isFinite(config.seller.reserveFloor) || config.seller.reserveFloor < 0) {
|
|
72
93
|
errors.push('seller.reserveFloor must be a non-negative finite number');
|
|
73
94
|
}
|
|
95
|
+
if (config.seller.publicAddress) {
|
|
96
|
+
const raw = config.seller.publicAddress.trim();
|
|
97
|
+
if (parsePublicAddress(raw) === null) {
|
|
98
|
+
errors.push('seller.publicAddress must be in the form "host:port" with a valid port');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
74
101
|
return errors;
|
|
75
102
|
}
|
|
76
103
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAMA,MAAM,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/config/validation.ts"],"names":[],"mappings":"AAMA,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AACxD,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC,SAAS,mBAAmB,CAC1B,IAAY,EACZ,KAAgC,EAChC,MAAgB;IAEhB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;QAC/E,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,0DAA0D,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;QACjF,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,2DAA2D,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,IAAY,EACZ,OAAkC,EAClC,MAAgB;IAEhB,mBAAmB,CAAC,GAAG,IAAI,WAAW,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAElE,KAAK,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;QAClF,IAAI,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC7B,mBAAmB,CAAC,GAAG,IAAI,cAAc,QAAQ,WAAW,EAAE,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClG,CAAC;QAED,KAAK,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;YACvF,mBAAmB,CACjB,GAAG,IAAI,cAAc,QAAQ,aAAa,OAAO,EAAE,EACnD,cAAc,EACd,MAAM,CACP,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,+BAA+B,CACtC,IAAY,EACZ,UAAoE,EACpE,MAAgB;IAEhB,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,MAAM,WAAW,GAAG,GAAG,IAAI,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;YACrD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,mCAAmC,CAAC,CAAC;gBAC/D,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,IAAI,CAAC,oBAAoB,CAAC,CAAC;oBACrD,SAAS;gBACX,CAAC;gBACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACxC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACrB,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,IAAI,CAAC,qBAAqB,CAAC,CAAC;oBACtD,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,IAAI,CAAC,iDAAiD,CAAC,CAAC;gBACpF,CAAC;gBACD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACpD,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB;IAClD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,2BAA2B,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7E,+BAA+B,CAAC,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACrG,2BAA2B,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAEjF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAAC;QACnI,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC;QAC9G,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;QAClG,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QACnF,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAqB;IACrD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AntseedNode, PeerInfo } from '@antseed/node';
|
|
2
|
-
import { type
|
|
2
|
+
import { type ServiceApiProtocol, type TargetProtocolSelection } from './service-api-adapter.js';
|
|
3
3
|
export interface BuyerProxyConfig {
|
|
4
4
|
port: number;
|
|
5
5
|
node: AntseedNode;
|
|
@@ -18,11 +18,11 @@ export interface BuyerProxyConfig {
|
|
|
18
18
|
*/
|
|
19
19
|
pinnedPeerId?: string;
|
|
20
20
|
/**
|
|
21
|
-
* Pin all requests to a specific
|
|
22
|
-
* Overrides the
|
|
23
|
-
* Can be updated at runtime via `antseed connection set --
|
|
21
|
+
* Pin all requests to a specific service ID for this session.
|
|
22
|
+
* Overrides the service field in the request body before routing and forwarding.
|
|
23
|
+
* Can be updated at runtime via `antseed connection set --service`.
|
|
24
24
|
*/
|
|
25
|
-
|
|
25
|
+
pinnedService?: string;
|
|
26
26
|
}
|
|
27
27
|
type PeerProtocolRoutePlan = {
|
|
28
28
|
provider: string;
|
|
@@ -32,7 +32,7 @@ export type CandidatePeerRouteSelection = {
|
|
|
32
32
|
candidatePeers: PeerInfo[];
|
|
33
33
|
routePlanByPeerId: Map<string, PeerProtocolRoutePlan>;
|
|
34
34
|
};
|
|
35
|
-
export declare function selectCandidatePeersForRouting(peers: PeerInfo[], requestProtocol:
|
|
35
|
+
export declare function selectCandidatePeersForRouting(peers: PeerInfo[], requestProtocol: ServiceApiProtocol | null, requestedService: string | null, explicitProvider: string | null): CandidatePeerRouteSelection;
|
|
36
36
|
/**
|
|
37
37
|
* Rewrite the `model` field in a JSON request body.
|
|
38
38
|
* Also updates `content-length` if present in headers.
|
|
@@ -57,7 +57,7 @@ export declare class BuyerProxy {
|
|
|
57
57
|
private readonly _bgRefreshIntervalMs;
|
|
58
58
|
private readonly _peerCacheTtlMs;
|
|
59
59
|
private _pinnedPeer;
|
|
60
|
-
private
|
|
60
|
+
private _pinnedService;
|
|
61
61
|
private _stateFileWatcher;
|
|
62
62
|
private _stateWatchDebounce;
|
|
63
63
|
private _cachedPeers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buyer-proxy.d.ts","sourceRoot":"","sources":["../../src/proxy/buyer-proxy.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,WAAW,EAEX,QAAQ,EAMT,MAAM,eAAe,CAAA;AACtB,OAAO,EAGL,KAAK,
|
|
1
|
+
{"version":3,"file":"buyer-proxy.d.ts","sourceRoot":"","sources":["../../src/proxy/buyer-proxy.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,WAAW,EAEX,QAAQ,EAMT,MAAM,eAAe,CAAA;AACtB,OAAO,EAGL,KAAK,kBAAkB,EAEvB,KAAK,uBAAuB,EAK7B,MAAM,0BAA0B,CAAA;AAEjC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,WAAW,CAAA;IACjB,kGAAkG;IAClG,2BAA2B,CAAC,EAAE,MAAM,CAAA;IACpC;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAgCD,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,uBAAuB,GAAG,IAAI,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,cAAc,EAAE,QAAQ,EAAE,CAAA;IAC1B,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;CACtD,CAAA;AAqHD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,QAAQ,EAAE,EACjB,eAAe,EAAE,kBAAkB,GAAG,IAAI,EAC1C,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,2BAA2B,CAoB7B;AAsiBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,KAAK,EAAE,MAAM,GACZ;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAuBvD;AAED;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAQ;IACxC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,mBAAmB,CAA6C;IAExE,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,qBAAqB,CAAI;IACjC,OAAO,CAAC,mBAAmB,CAAI;IAC/B,OAAO,CAAC,mBAAmB,CAAmC;IAC9D,OAAO,CAAC,sBAAsB,CAAI;IAClC,OAAO,CAAC,gBAAgB,CAA8C;IACtE,OAAO,CAAC,qBAAqB,CAAsB;IACnD,OAAO,CAAC,6BAA6B,CAA4B;gBAErD,MAAM,EAAE,gBAAgB;IAkB9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAatB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B,OAAO,CAAC,eAAe;YAiBT,uBAAuB;YAkBvB,eAAe;IAgC7B,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,cAAc;YA0BR,wBAAwB;YAsDxB,yBAAyB;YAezB,gBAAgB;YA+BhB,SAAS;IA2BvB,OAAO,CAAC,+BAA+B;YAuBzB,cAAc;IAqU5B;;;;OAIG;YACW,eAAe;CA2S9B"}
|