@agirails/sdk 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ACTPClient.d.ts +200 -0
- package/dist/ACTPClient.d.ts.map +1 -1
- package/dist/ACTPClient.js +266 -2
- package/dist/ACTPClient.js.map +1 -1
- package/dist/abi/ACTPKernel.json +16 -0
- package/dist/adapters/AdapterRegistry.d.ts +140 -0
- package/dist/adapters/AdapterRegistry.d.ts.map +1 -0
- package/dist/adapters/AdapterRegistry.js +166 -0
- package/dist/adapters/AdapterRegistry.js.map +1 -0
- package/dist/adapters/AdapterRouter.d.ts +165 -0
- package/dist/adapters/AdapterRouter.d.ts.map +1 -0
- package/dist/adapters/AdapterRouter.js +350 -0
- package/dist/adapters/AdapterRouter.js.map +1 -0
- package/dist/adapters/BaseAdapter.d.ts +17 -0
- package/dist/adapters/BaseAdapter.d.ts.map +1 -1
- package/dist/adapters/BaseAdapter.js +21 -0
- package/dist/adapters/BaseAdapter.js.map +1 -1
- package/dist/adapters/BasicAdapter.d.ts +72 -3
- package/dist/adapters/BasicAdapter.d.ts.map +1 -1
- package/dist/adapters/BasicAdapter.js +170 -2
- package/dist/adapters/BasicAdapter.js.map +1 -1
- package/dist/adapters/IAdapter.d.ts +230 -0
- package/dist/adapters/IAdapter.d.ts.map +1 -0
- package/dist/adapters/IAdapter.js +44 -0
- package/dist/adapters/IAdapter.js.map +1 -0
- package/dist/adapters/StandardAdapter.d.ts +70 -1
- package/dist/adapters/StandardAdapter.d.ts.map +1 -1
- package/dist/adapters/StandardAdapter.js +184 -0
- package/dist/adapters/StandardAdapter.js.map +1 -1
- package/dist/adapters/X402Adapter.d.ts +208 -0
- package/dist/adapters/X402Adapter.d.ts.map +1 -0
- package/dist/adapters/X402Adapter.js +423 -0
- package/dist/adapters/X402Adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +8 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +19 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +4 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +146 -4
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/config/networks.js +3 -3
- package/dist/config/networks.js.map +1 -1
- package/dist/erc8004/ERC8004Bridge.d.ts +155 -0
- package/dist/erc8004/ERC8004Bridge.d.ts.map +1 -0
- package/dist/erc8004/ERC8004Bridge.js +325 -0
- package/dist/erc8004/ERC8004Bridge.js.map +1 -0
- package/dist/erc8004/ReputationReporter.d.ts +223 -0
- package/dist/erc8004/ReputationReporter.d.ts.map +1 -0
- package/dist/erc8004/ReputationReporter.js +266 -0
- package/dist/erc8004/ReputationReporter.js.map +1 -0
- package/dist/erc8004/index.d.ts +36 -0
- package/dist/erc8004/index.d.ts.map +1 -0
- package/dist/erc8004/index.js +46 -0
- package/dist/erc8004/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/dist/protocol/ACTPKernel.d.ts +1 -1
- package/dist/protocol/ACTPKernel.d.ts.map +1 -1
- package/dist/protocol/ACTPKernel.js +16 -7
- package/dist/protocol/ACTPKernel.js.map +1 -1
- package/dist/runtime/BlockchainRuntime.d.ts.map +1 -1
- package/dist/runtime/BlockchainRuntime.js +2 -0
- package/dist/runtime/BlockchainRuntime.js.map +1 -1
- package/dist/runtime/IACTPRuntime.d.ts +6 -0
- package/dist/runtime/IACTPRuntime.d.ts.map +1 -1
- package/dist/runtime/MockRuntime.d.ts +12 -0
- package/dist/runtime/MockRuntime.d.ts.map +1 -1
- package/dist/runtime/MockRuntime.js +41 -0
- package/dist/runtime/MockRuntime.js.map +1 -1
- package/dist/runtime/types/MockState.d.ts +6 -0
- package/dist/runtime/types/MockState.d.ts.map +1 -1
- package/dist/runtime/types/MockState.js.map +1 -1
- package/dist/types/adapter.d.ts +359 -0
- package/dist/types/adapter.d.ts.map +1 -0
- package/dist/types/adapter.js +115 -0
- package/dist/types/adapter.js.map +1 -0
- package/dist/types/erc8004.d.ts +184 -0
- package/dist/types/erc8004.d.ts.map +1 -0
- package/dist/types/erc8004.js +132 -0
- package/dist/types/erc8004.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/transaction.d.ts +12 -0
- package/dist/types/transaction.d.ts.map +1 -1
- package/dist/types/x402.d.ts +162 -0
- package/dist/types/x402.d.ts.map +1 -0
- package/dist/types/x402.js +162 -0
- package/dist/types/x402.js.map +1 -0
- package/package.json +3 -2
- package/src/ACTPClient.ts +318 -2
- package/src/abi/ACTPKernel.json +16 -0
- package/src/adapters/AdapterRegistry.ts +173 -0
- package/src/adapters/AdapterRouter.ts +417 -0
- package/src/adapters/BaseAdapter.ts +25 -0
- package/src/adapters/BasicAdapter.ts +199 -3
- package/src/adapters/IAdapter.ts +292 -0
- package/src/adapters/StandardAdapter.ts +220 -1
- package/src/adapters/X402Adapter.ts +653 -0
- package/src/adapters/index.ts +27 -0
- package/src/cli/commands/init.ts +166 -3
- package/src/config/networks.ts +3 -3
- package/src/erc8004/ERC8004Bridge.ts +461 -0
- package/src/erc8004/ReputationReporter.ts +472 -0
- package/src/erc8004/index.ts +61 -0
- package/src/index.ts +43 -0
- package/src/protocol/ACTPKernel.ts +26 -7
- package/src/runtime/BlockchainRuntime.ts +2 -0
- package/src/runtime/IACTPRuntime.ts +6 -0
- package/src/runtime/MockRuntime.ts +42 -0
- package/src/runtime/types/MockState.ts +7 -0
- package/src/types/adapter.ts +296 -0
- package/src/types/erc8004.ts +293 -0
- package/src/types/index.ts +3 -0
- package/src/types/transaction.ts +12 -0
- package/src/types/x402.ts +219 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdapterRegistry - Central registry for payment adapters.
|
|
3
|
+
*
|
|
4
|
+
* Manages the collection of available adapters and provides
|
|
5
|
+
* methods for registration, lookup, and priority-based retrieval.
|
|
6
|
+
*
|
|
7
|
+
* @module adapters/AdapterRegistry
|
|
8
|
+
*/
|
|
9
|
+
import { IAdapter } from './IAdapter';
|
|
10
|
+
/**
|
|
11
|
+
* AdapterRegistry - Central registry for managing available adapters.
|
|
12
|
+
*
|
|
13
|
+
* The registry maintains a collection of adapters indexed by their ID.
|
|
14
|
+
* It provides methods for:
|
|
15
|
+
* - Registration and unregistration
|
|
16
|
+
* - Lookup by ID
|
|
17
|
+
* - Priority-sorted retrieval
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const registry = new AdapterRegistry();
|
|
22
|
+
*
|
|
23
|
+
* // Register adapters
|
|
24
|
+
* registry.register(basicAdapter);
|
|
25
|
+
* registry.register(standardAdapter);
|
|
26
|
+
*
|
|
27
|
+
* // Lookup by ID
|
|
28
|
+
* const adapter = registry.get('basic');
|
|
29
|
+
*
|
|
30
|
+
* // Get all adapters sorted by priority
|
|
31
|
+
* const adapters = registry.getByPriority();
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare class AdapterRegistry {
|
|
35
|
+
/**
|
|
36
|
+
* Internal map of adapters by ID.
|
|
37
|
+
*/
|
|
38
|
+
private adapters;
|
|
39
|
+
/**
|
|
40
|
+
* Register an adapter.
|
|
41
|
+
*
|
|
42
|
+
* If an adapter with the same ID already exists, it will be replaced.
|
|
43
|
+
*
|
|
44
|
+
* @param adapter - Adapter to register
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* registry.register(new BasicAdapter(runtime, requesterAddress));
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
register(adapter: IAdapter): void;
|
|
52
|
+
/**
|
|
53
|
+
* Unregister an adapter by ID.
|
|
54
|
+
*
|
|
55
|
+
* @param id - Adapter ID to remove
|
|
56
|
+
* @returns True if adapter was found and removed, false otherwise
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const removed = registry.unregister('custom-adapter');
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
unregister(id: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Get an adapter by ID.
|
|
66
|
+
*
|
|
67
|
+
* @param id - Adapter ID to look up
|
|
68
|
+
* @returns The adapter or undefined if not found
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const adapter = registry.get('standard');
|
|
73
|
+
* if (adapter) {
|
|
74
|
+
* await adapter.pay(params);
|
|
75
|
+
* }
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
get(id: string): IAdapter | undefined;
|
|
79
|
+
/**
|
|
80
|
+
* Get all registered adapters.
|
|
81
|
+
*
|
|
82
|
+
* Returns adapters in insertion order.
|
|
83
|
+
*
|
|
84
|
+
* @returns Array of all registered adapters
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const all = registry.getAll();
|
|
89
|
+
* console.log(`${all.length} adapters registered`);
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
getAll(): IAdapter[];
|
|
93
|
+
/**
|
|
94
|
+
* Check if an adapter is registered.
|
|
95
|
+
*
|
|
96
|
+
* @param id - Adapter ID to check
|
|
97
|
+
* @returns True if adapter is registered
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* if (registry.has('x402')) {
|
|
102
|
+
* console.log('x402 adapter available');
|
|
103
|
+
* }
|
|
104
|
+
* ```
|
|
105
|
+
*/
|
|
106
|
+
has(id: string): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Get adapters sorted by priority (highest first).
|
|
109
|
+
*
|
|
110
|
+
* Higher priority adapters are tried first during selection.
|
|
111
|
+
*
|
|
112
|
+
* @returns Array of adapters sorted by priority descending
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* const byPriority = registry.getByPriority();
|
|
117
|
+
* // byPriority[0] has highest priority
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
getByPriority(): IAdapter[];
|
|
121
|
+
/**
|
|
122
|
+
* Get the number of registered adapters.
|
|
123
|
+
*
|
|
124
|
+
* @returns Number of adapters
|
|
125
|
+
*/
|
|
126
|
+
get size(): number;
|
|
127
|
+
/**
|
|
128
|
+
* Get all adapter IDs.
|
|
129
|
+
*
|
|
130
|
+
* @returns Array of adapter IDs
|
|
131
|
+
*/
|
|
132
|
+
getIds(): string[];
|
|
133
|
+
/**
|
|
134
|
+
* Clear all registered adapters.
|
|
135
|
+
*
|
|
136
|
+
* Primarily useful for testing.
|
|
137
|
+
*/
|
|
138
|
+
clear(): void;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=AdapterRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdapterRegistry.d.ts","sourceRoot":"","sources":["../../src/adapters/AdapterRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,eAAe;IAC1B;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAoC;IAEpD;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI;IAOjC;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/B;;;;;;;;;;;;;OAaG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIrC;;;;;;;;;;;;OAYG;IACH,MAAM,IAAI,QAAQ,EAAE;IAIpB;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB;;;;;;;;;;;;OAYG;IACH,aAAa,IAAI,QAAQ,EAAE;IAM3B;;;;OAIG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;IACH,MAAM,IAAI,MAAM,EAAE;IAIlB;;;;OAIG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AdapterRegistry - Central registry for payment adapters.
|
|
4
|
+
*
|
|
5
|
+
* Manages the collection of available adapters and provides
|
|
6
|
+
* methods for registration, lookup, and priority-based retrieval.
|
|
7
|
+
*
|
|
8
|
+
* @module adapters/AdapterRegistry
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.AdapterRegistry = void 0;
|
|
12
|
+
/**
|
|
13
|
+
* AdapterRegistry - Central registry for managing available adapters.
|
|
14
|
+
*
|
|
15
|
+
* The registry maintains a collection of adapters indexed by their ID.
|
|
16
|
+
* It provides methods for:
|
|
17
|
+
* - Registration and unregistration
|
|
18
|
+
* - Lookup by ID
|
|
19
|
+
* - Priority-sorted retrieval
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const registry = new AdapterRegistry();
|
|
24
|
+
*
|
|
25
|
+
* // Register adapters
|
|
26
|
+
* registry.register(basicAdapter);
|
|
27
|
+
* registry.register(standardAdapter);
|
|
28
|
+
*
|
|
29
|
+
* // Lookup by ID
|
|
30
|
+
* const adapter = registry.get('basic');
|
|
31
|
+
*
|
|
32
|
+
* // Get all adapters sorted by priority
|
|
33
|
+
* const adapters = registry.getByPriority();
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
class AdapterRegistry {
|
|
37
|
+
constructor() {
|
|
38
|
+
/**
|
|
39
|
+
* Internal map of adapters by ID.
|
|
40
|
+
*/
|
|
41
|
+
this.adapters = new Map();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Register an adapter.
|
|
45
|
+
*
|
|
46
|
+
* If an adapter with the same ID already exists, it will be replaced.
|
|
47
|
+
*
|
|
48
|
+
* @param adapter - Adapter to register
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```typescript
|
|
52
|
+
* registry.register(new BasicAdapter(runtime, requesterAddress));
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
register(adapter) {
|
|
56
|
+
if (!adapter.metadata?.id) {
|
|
57
|
+
throw new Error('Cannot register adapter without metadata.id');
|
|
58
|
+
}
|
|
59
|
+
this.adapters.set(adapter.metadata.id, adapter);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Unregister an adapter by ID.
|
|
63
|
+
*
|
|
64
|
+
* @param id - Adapter ID to remove
|
|
65
|
+
* @returns True if adapter was found and removed, false otherwise
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* const removed = registry.unregister('custom-adapter');
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
unregister(id) {
|
|
73
|
+
return this.adapters.delete(id);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get an adapter by ID.
|
|
77
|
+
*
|
|
78
|
+
* @param id - Adapter ID to look up
|
|
79
|
+
* @returns The adapter or undefined if not found
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* const adapter = registry.get('standard');
|
|
84
|
+
* if (adapter) {
|
|
85
|
+
* await adapter.pay(params);
|
|
86
|
+
* }
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
get(id) {
|
|
90
|
+
return this.adapters.get(id);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get all registered adapters.
|
|
94
|
+
*
|
|
95
|
+
* Returns adapters in insertion order.
|
|
96
|
+
*
|
|
97
|
+
* @returns Array of all registered adapters
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* const all = registry.getAll();
|
|
102
|
+
* console.log(`${all.length} adapters registered`);
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
getAll() {
|
|
106
|
+
return Array.from(this.adapters.values());
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Check if an adapter is registered.
|
|
110
|
+
*
|
|
111
|
+
* @param id - Adapter ID to check
|
|
112
|
+
* @returns True if adapter is registered
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* if (registry.has('x402')) {
|
|
117
|
+
* console.log('x402 adapter available');
|
|
118
|
+
* }
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
has(id) {
|
|
122
|
+
return this.adapters.has(id);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get adapters sorted by priority (highest first).
|
|
126
|
+
*
|
|
127
|
+
* Higher priority adapters are tried first during selection.
|
|
128
|
+
*
|
|
129
|
+
* @returns Array of adapters sorted by priority descending
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* const byPriority = registry.getByPriority();
|
|
134
|
+
* // byPriority[0] has highest priority
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
getByPriority() {
|
|
138
|
+
return this.getAll().sort((a, b) => b.metadata.priority - a.metadata.priority);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get the number of registered adapters.
|
|
142
|
+
*
|
|
143
|
+
* @returns Number of adapters
|
|
144
|
+
*/
|
|
145
|
+
get size() {
|
|
146
|
+
return this.adapters.size;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get all adapter IDs.
|
|
150
|
+
*
|
|
151
|
+
* @returns Array of adapter IDs
|
|
152
|
+
*/
|
|
153
|
+
getIds() {
|
|
154
|
+
return Array.from(this.adapters.keys());
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Clear all registered adapters.
|
|
158
|
+
*
|
|
159
|
+
* Primarily useful for testing.
|
|
160
|
+
*/
|
|
161
|
+
clear() {
|
|
162
|
+
this.adapters.clear();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.AdapterRegistry = AdapterRegistry;
|
|
166
|
+
//# sourceMappingURL=AdapterRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdapterRegistry.js","sourceRoot":"","sources":["../../src/adapters/AdapterRegistry.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAIH;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAa,eAAe;IAA5B;QACE;;WAEG;QACK,aAAQ,GAA0B,IAAI,GAAG,EAAE,CAAC;IAqItD,CAAC;IAnIC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,OAAiB;QACxB,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CACpD,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF;AAzID,0CAyIC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdapterRouter - Intelligent adapter selection with guard-rails.
|
|
3
|
+
*
|
|
4
|
+
* The router selects the best adapter for each payment based on:
|
|
5
|
+
* - Explicit adapter preference
|
|
6
|
+
* - Required capabilities (escrow, disputes, identity)
|
|
7
|
+
* - Recipient type (address vs HTTP endpoint)
|
|
8
|
+
* - Adapter priority
|
|
9
|
+
*
|
|
10
|
+
* SECURITY: All parameters are validated before selection.
|
|
11
|
+
* SECURITY: All adapters must enforce explicit release (no auto-settle).
|
|
12
|
+
*
|
|
13
|
+
* @module adapters/AdapterRouter
|
|
14
|
+
*/
|
|
15
|
+
import { AdapterRegistry } from './AdapterRegistry';
|
|
16
|
+
import { IAdapter } from './IAdapter';
|
|
17
|
+
import { UnifiedPayParams } from '../types/adapter';
|
|
18
|
+
import { ERC8004Bridge } from '../erc8004/ERC8004Bridge';
|
|
19
|
+
/**
|
|
20
|
+
* Result of adapter selection with potential ERC-8004 resolution.
|
|
21
|
+
*/
|
|
22
|
+
export interface AdapterSelectionResult {
|
|
23
|
+
/** Selected adapter */
|
|
24
|
+
adapter: IAdapter;
|
|
25
|
+
/** Resolved payment parameters (with wallet instead of agentId) */
|
|
26
|
+
resolvedParams: UnifiedPayParams;
|
|
27
|
+
/** Whether an ERC-8004 agent ID was resolved */
|
|
28
|
+
wasAgentIdResolved: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* AdapterRouter - Intelligent adapter selection with guard-rails.
|
|
32
|
+
*
|
|
33
|
+
* Selection logic (in order):
|
|
34
|
+
* 1. Validate params (throws if invalid)
|
|
35
|
+
* 2. Explicit adapter requested -> use it
|
|
36
|
+
* 3. Escrow/dispute required -> StandardAdapter
|
|
37
|
+
* 4. HTTP endpoint + no escrow -> X402Adapter (when available)
|
|
38
|
+
* 5. ERC-8004 identity -> ERC8004Adapter (when available)
|
|
39
|
+
* 6. Default -> First adapter that can handle (by priority)
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* const registry = new AdapterRegistry();
|
|
44
|
+
* registry.register(basicAdapter);
|
|
45
|
+
* registry.register(standardAdapter);
|
|
46
|
+
*
|
|
47
|
+
* const router = new AdapterRouter(registry);
|
|
48
|
+
*
|
|
49
|
+
* // Auto-select best adapter
|
|
50
|
+
* const adapter = router.select({ to: '0x...', amount: '100' });
|
|
51
|
+
*
|
|
52
|
+
* // Explicit adapter request
|
|
53
|
+
* const adapter = router.select({
|
|
54
|
+
* to: '0x...',
|
|
55
|
+
* amount: '100',
|
|
56
|
+
* metadata: { preferredAdapter: 'standard' }
|
|
57
|
+
* });
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare class AdapterRouter {
|
|
61
|
+
private registry;
|
|
62
|
+
private erc8004Bridge?;
|
|
63
|
+
/**
|
|
64
|
+
* Creates a new AdapterRouter instance.
|
|
65
|
+
*
|
|
66
|
+
* @param registry - AdapterRegistry containing available adapters
|
|
67
|
+
* @param erc8004Bridge - Optional ERC-8004 bridge for agent ID resolution
|
|
68
|
+
*/
|
|
69
|
+
constructor(registry: AdapterRegistry, erc8004Bridge?: ERC8004Bridge);
|
|
70
|
+
/**
|
|
71
|
+
* Set the ERC-8004 bridge for agent ID resolution.
|
|
72
|
+
*
|
|
73
|
+
* @param bridge - ERC8004Bridge instance
|
|
74
|
+
*/
|
|
75
|
+
setERC8004Bridge(bridge: ERC8004Bridge): void;
|
|
76
|
+
/**
|
|
77
|
+
* Select the best adapter for the given payment parameters.
|
|
78
|
+
*
|
|
79
|
+
* @param params - Unified payment parameters
|
|
80
|
+
* @returns The selected adapter
|
|
81
|
+
* @throws {ValidationError} If params are invalid
|
|
82
|
+
* @throws {Error} If no suitable adapter found
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const adapter = router.select({
|
|
87
|
+
* to: '0xProvider...',
|
|
88
|
+
* amount: '100',
|
|
89
|
+
* });
|
|
90
|
+
* const result = await adapter.pay(params);
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
select(params: UnifiedPayParams): IAdapter;
|
|
94
|
+
/**
|
|
95
|
+
* Validate payment parameters with Zod schema.
|
|
96
|
+
*
|
|
97
|
+
* GUARD-RAIL: Performs strict validation before any adapter selection.
|
|
98
|
+
*
|
|
99
|
+
* @param params - Parameters to validate
|
|
100
|
+
* @throws {ValidationError} If params are invalid
|
|
101
|
+
*/
|
|
102
|
+
private validateParams;
|
|
103
|
+
/**
|
|
104
|
+
* Check if a string is an HTTP/HTTPS endpoint.
|
|
105
|
+
*
|
|
106
|
+
* @param to - Recipient string to check
|
|
107
|
+
* @returns True if it's an HTTP endpoint
|
|
108
|
+
*/
|
|
109
|
+
private isHttpEndpoint;
|
|
110
|
+
/**
|
|
111
|
+
* Get all adapters that can handle the given params.
|
|
112
|
+
*
|
|
113
|
+
* Useful for debugging or letting users choose from multiple options.
|
|
114
|
+
*
|
|
115
|
+
* @param params - Payment parameters
|
|
116
|
+
* @returns Array of adapters that can handle params
|
|
117
|
+
*/
|
|
118
|
+
getCompatibleAdapters(params: UnifiedPayParams): IAdapter[];
|
|
119
|
+
/**
|
|
120
|
+
* Check if any adapter can handle the given params.
|
|
121
|
+
*
|
|
122
|
+
* @param params - Payment parameters
|
|
123
|
+
* @returns True if at least one adapter can handle
|
|
124
|
+
*/
|
|
125
|
+
canHandle(params: UnifiedPayParams): boolean;
|
|
126
|
+
/**
|
|
127
|
+
* Select adapter AND resolve ERC-8004 agent IDs.
|
|
128
|
+
*
|
|
129
|
+
* This is the recommended method for payment flows. It:
|
|
130
|
+
* 1. Checks if `to` is an ERC-8004 agent ID (numeric string)
|
|
131
|
+
* 2. If so, resolves it to a wallet address via ERC8004Bridge
|
|
132
|
+
* 3. Stores the original agentId in erc8004AgentId field
|
|
133
|
+
* 4. Selects the appropriate adapter
|
|
134
|
+
*
|
|
135
|
+
* @param params - Unified payment parameters
|
|
136
|
+
* @returns Selection result with resolved params
|
|
137
|
+
* @throws {ValidationError} If params invalid or agent not found
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* const { adapter, resolvedParams } = await router.selectAndResolve({
|
|
142
|
+
* to: '12345', // ERC-8004 agent ID
|
|
143
|
+
* amount: '100',
|
|
144
|
+
* });
|
|
145
|
+
*
|
|
146
|
+
* // resolvedParams.to is now the wallet address
|
|
147
|
+
* // resolvedParams.erc8004AgentId is '12345'
|
|
148
|
+
* const result = await adapter.pay(resolvedParams);
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
selectAndResolve(params: UnifiedPayParams): Promise<AdapterSelectionResult>;
|
|
152
|
+
/**
|
|
153
|
+
* Check if a string looks like an ERC-8004 agent ID.
|
|
154
|
+
*
|
|
155
|
+
* Agent IDs are numeric strings (uint256) that are:
|
|
156
|
+
* - NOT Ethereum addresses (0x-prefixed)
|
|
157
|
+
* - NOT URLs (http/https)
|
|
158
|
+
* - Valid as BigInt in range [0, 2^256)
|
|
159
|
+
*
|
|
160
|
+
* @param to - Recipient string to check
|
|
161
|
+
* @returns True if it looks like an agent ID
|
|
162
|
+
*/
|
|
163
|
+
isERC8004AgentId(to: string): boolean;
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=AdapterRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AdapterRouter.d.ts","sourceRoot":"","sources":["../../src/adapters/AdapterRouter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EACL,gBAAgB,EAGjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uBAAuB;IACvB,OAAO,EAAE,QAAQ,CAAC;IAElB,mEAAmE;IACnE,cAAc,EAAE,gBAAgB,CAAC;IAEjC,gDAAgD;IAChD,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,aAAa;IAUtB,OAAO,CAAC,QAAQ;IATlB,OAAO,CAAC,aAAa,CAAC,CAAgB;IAEtC;;;;;OAKG;gBAEO,QAAQ,EAAE,eAAe,EACjC,aAAa,CAAC,EAAE,aAAa;IAK/B;;;;OAIG;IACH,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAI7C;;;;;;;;;;;;;;;;OAgBG;IACH,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,QAAQ;IA4F1C;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;IA6CtB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAStB;;;;;;;OAOG;IACH,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,QAAQ,EAAE;IAW3D;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO;IAa5C;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgDjF;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAuBtC"}
|