@agirails/sdk 3.4.1 → 4.0.0-beta.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/dist/builders/QuoteBuilder.d.ts +9 -3
- package/dist/builders/QuoteBuilder.d.ts.map +1 -1
- package/dist/builders/QuoteBuilder.js +14 -3
- package/dist/builders/QuoteBuilder.js.map +1 -1
- package/dist/cli/agirails.d.ts +4 -1
- package/dist/cli/agirails.d.ts.map +1 -1
- package/dist/cli/agirails.js +34 -2
- package/dist/cli/agirails.js.map +1 -1
- package/dist/cli/commands/agent.d.ts +22 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +250 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/pay.d.ts +7 -0
- package/dist/cli/commands/pay.d.ts.map +1 -1
- package/dist/cli/commands/pay.js +34 -1
- package/dist/cli/commands/pay.js.map +1 -1
- package/dist/cli/commands/request.d.ts +19 -0
- package/dist/cli/commands/request.d.ts.map +1 -0
- package/dist/cli/commands/request.js +167 -0
- package/dist/cli/commands/request.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +12 -7
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +12 -7
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/test.d.ts +22 -4
- package/dist/cli/commands/test.d.ts.map +1 -1
- package/dist/cli/commands/test.js +139 -292
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/tx.js +13 -0
- package/dist/cli/commands/tx.js.map +1 -1
- package/dist/cli/index.js +10 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/lib/resolveAgent.d.ts +67 -0
- package/dist/cli/lib/resolveAgent.d.ts.map +1 -0
- package/dist/cli/lib/resolveAgent.js +121 -0
- package/dist/cli/lib/resolveAgent.js.map +1 -0
- package/dist/cli/lib/runRequest.d.ts +114 -0
- package/dist/cli/lib/runRequest.d.ts.map +1 -0
- package/dist/cli/lib/runRequest.js +324 -0
- package/dist/cli/lib/runRequest.js.map +1 -0
- package/dist/cli/lib/serviceNameForHash.d.ts +48 -0
- package/dist/cli/lib/serviceNameForHash.d.ts.map +1 -0
- package/dist/cli/lib/serviceNameForHash.js +62 -0
- package/dist/cli/lib/serviceNameForHash.js.map +1 -0
- package/dist/config/networks.d.ts.map +1 -1
- package/dist/config/networks.js +7 -1
- package/dist/config/networks.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/level0/request.d.ts.map +1 -1
- package/dist/level0/request.js +18 -6
- package/dist/level0/request.js.map +1 -1
- package/dist/level1/Agent.d.ts +72 -8
- package/dist/level1/Agent.d.ts.map +1 -1
- package/dist/level1/Agent.js +243 -111
- package/dist/level1/Agent.js.map +1 -1
- package/dist/negotiation/BuyerOrchestrator.d.ts +73 -61
- package/dist/negotiation/BuyerOrchestrator.d.ts.map +1 -1
- package/dist/negotiation/BuyerOrchestrator.js +421 -381
- package/dist/negotiation/BuyerOrchestrator.js.map +1 -1
- package/dist/negotiation/MockChannel.d.ts +63 -0
- package/dist/negotiation/MockChannel.d.ts.map +1 -0
- package/dist/negotiation/MockChannel.js +175 -0
- package/dist/negotiation/MockChannel.js.map +1 -0
- package/dist/negotiation/NegotiationChannel.d.ts +142 -0
- package/dist/negotiation/NegotiationChannel.d.ts.map +1 -0
- package/dist/negotiation/NegotiationChannel.js +59 -0
- package/dist/negotiation/NegotiationChannel.js.map +1 -0
- package/dist/negotiation/ProviderOrchestrator.d.ts +85 -35
- package/dist/negotiation/ProviderOrchestrator.d.ts.map +1 -1
- package/dist/negotiation/ProviderOrchestrator.js +199 -49
- package/dist/negotiation/ProviderOrchestrator.js.map +1 -1
- package/dist/negotiation/ProviderPolicy.d.ts +51 -6
- package/dist/negotiation/ProviderPolicy.d.ts.map +1 -1
- package/dist/negotiation/ProviderPolicy.js +61 -9
- package/dist/negotiation/ProviderPolicy.js.map +1 -1
- package/dist/negotiation/RelayChannel.d.ts +59 -0
- package/dist/negotiation/RelayChannel.d.ts.map +1 -0
- package/dist/negotiation/RelayChannel.js +208 -0
- package/dist/negotiation/RelayChannel.js.map +1 -0
- package/dist/protocol/ACTPKernel.d.ts.map +1 -1
- package/dist/protocol/ACTPKernel.js +51 -1
- package/dist/protocol/ACTPKernel.js.map +1 -1
- package/dist/protocol/EventMonitor.d.ts +26 -1
- package/dist/protocol/EventMonitor.d.ts.map +1 -1
- package/dist/protocol/EventMonitor.js +18 -4
- package/dist/protocol/EventMonitor.js.map +1 -1
- package/dist/runtime/BlockchainRuntime.d.ts +73 -0
- package/dist/runtime/BlockchainRuntime.d.ts.map +1 -1
- package/dist/runtime/BlockchainRuntime.js +131 -3
- package/dist/runtime/BlockchainRuntime.js.map +1 -1
- package/dist/runtime/IACTPRuntime.d.ts +29 -0
- package/dist/runtime/IACTPRuntime.d.ts.map +1 -1
- package/dist/runtime/MockRuntime.d.ts.map +1 -1
- package/dist/runtime/MockRuntime.js +21 -4
- package/dist/runtime/MockRuntime.js.map +1 -1
- package/dist/runtime/MockStateManager.d.ts.map +1 -1
- package/dist/runtime/MockStateManager.js +18 -0
- package/dist/runtime/MockStateManager.js.map +1 -1
- package/dist/runtime/types/MockState.d.ts +12 -0
- package/dist/runtime/types/MockState.d.ts.map +1 -1
- package/dist/runtime/types/MockState.js.map +1 -1
- package/dist/types/agent.d.ts +6 -1
- package/dist/types/agent.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -15,14 +15,12 @@
|
|
|
15
15
|
*
|
|
16
16
|
* Accepts ACTPClient for on-chain operations. Caller manages lifecycle.
|
|
17
17
|
*/
|
|
18
|
-
import type
|
|
18
|
+
import { type Signer } from 'ethers';
|
|
19
19
|
import { DiscoverParams } from '../api/agirailsApp';
|
|
20
20
|
import { BuyerPolicy } from './PolicyEngine';
|
|
21
21
|
import { IACTPRuntime } from '../runtime/IACTPRuntime';
|
|
22
|
-
import { QuoteMessage } from '../builders/QuoteBuilder';
|
|
23
|
-
import { CounterAcceptMessage } from '../builders/CounterAcceptBuilder';
|
|
24
|
-
import { QuoteChannelClient } from '../transport/QuoteChannel';
|
|
25
22
|
import { NonceManager } from '../utils/NonceManager';
|
|
23
|
+
import { NegotiationChannel } from './NegotiationChannel';
|
|
26
24
|
export interface NegotiationResult {
|
|
27
25
|
success: boolean;
|
|
28
26
|
commerce_session_id: string;
|
|
@@ -84,10 +82,15 @@ export type ProgressEvent = {
|
|
|
84
82
|
reason: string;
|
|
85
83
|
};
|
|
86
84
|
/**
|
|
87
|
-
* AIP-2.1
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
85
|
+
* AIP-2.1 negotiation context — wires the orchestrator into the
|
|
86
|
+
* NegotiationChannel transport. All fields optional: without them the
|
|
87
|
+
* orchestrator runs the legacy fixed-price flow only (no counters).
|
|
88
|
+
*
|
|
89
|
+
* To enable multi-round negotiation, supply ALL of:
|
|
90
|
+
* - signer (signs CounterOfferMessages)
|
|
91
|
+
* - kernelAddress (EIP-712 domain)
|
|
92
|
+
* - chainId
|
|
93
|
+
* - negotiationChannel (transport — RelayChannel default, MockChannel for tests)
|
|
91
94
|
*/
|
|
92
95
|
export interface BuyerNegotiationContext {
|
|
93
96
|
/** Buyer's EOA signer — signs CounterOfferMessages. */
|
|
@@ -98,8 +101,13 @@ export interface BuyerNegotiationContext {
|
|
|
98
101
|
chainId?: number;
|
|
99
102
|
/** Nonce manager for counter messages. Defaults to an in-memory one. */
|
|
100
103
|
nonceManager?: NonceManager;
|
|
101
|
-
/**
|
|
102
|
-
|
|
104
|
+
/**
|
|
105
|
+
* Transport for receiving quotes / acceptances + sending counters.
|
|
106
|
+
* Required for any negotiation feature; without it the orchestrator
|
|
107
|
+
* is fixed-price only. Use RelayChannel in production, MockChannel
|
|
108
|
+
* in tests.
|
|
109
|
+
*/
|
|
110
|
+
negotiationChannel?: NegotiationChannel;
|
|
103
111
|
}
|
|
104
112
|
export declare class BuyerOrchestrator {
|
|
105
113
|
private policy;
|
|
@@ -110,77 +118,81 @@ export declare class BuyerOrchestrator {
|
|
|
110
118
|
private requesterAddress;
|
|
111
119
|
private negotiation;
|
|
112
120
|
private counterBuilder?;
|
|
113
|
-
/** Quotes pushed in by the caller's quote-channel handler, keyed by txId. */
|
|
114
|
-
private receivedQuotes;
|
|
115
|
-
/** Provider-acceptance-of-counter signal, keyed by txId. */
|
|
116
|
-
private counterAccepted;
|
|
117
|
-
/** Resolvers waiting on counter acceptance — woken by setCounterAccepted. */
|
|
118
|
-
private counterWaiters;
|
|
119
121
|
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
|
|
122
|
+
* Per-txId inbound message queue. Channel callbacks push here; the
|
|
123
|
+
* orchestrator's negotiation loop drains via `_waitForNextMessage`.
|
|
124
|
+
* Bounded implicitly by `_cleanupTxState` at terminal outcomes.
|
|
125
|
+
*/
|
|
126
|
+
private inboundQueues;
|
|
127
|
+
/**
|
|
128
|
+
* Per-txId resolver for the orchestrator's "wait for next message"
|
|
129
|
+
* await. When a message arrives and a resolver is set, the message
|
|
130
|
+
* is delivered immediately instead of queued.
|
|
131
|
+
*/
|
|
132
|
+
private inboundResolvers;
|
|
133
|
+
/**
|
|
134
|
+
* Active subscriptions opened by `negotiate()`. Closed at end of
|
|
135
|
+
* each negotiation. Multiple concurrent calls are supported.
|
|
124
136
|
*/
|
|
125
|
-
private
|
|
137
|
+
private activeSubscriptions;
|
|
126
138
|
constructor(policy: BuyerPolicy, runtime: IACTPRuntime, requesterAddress: string, actpDir?: string, negotiation?: BuyerNegotiationContext);
|
|
127
139
|
/**
|
|
128
|
-
*
|
|
129
|
-
*
|
|
130
|
-
* pick it up on the next poll tick.
|
|
140
|
+
* Channel delivered a verified message for `txId`. If a round is
|
|
141
|
+
* awaiting the next message, hand it directly; otherwise queue.
|
|
131
142
|
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
* layers on top by cross-referencing against on-chain hash (with
|
|
135
|
-
* legacy fallback, §3.6).
|
|
143
|
+
* NOTE: the channel has already verified EIP-712 signature + chainId
|
|
144
|
+
* before invoking us. This handler is concerned only with routing.
|
|
136
145
|
*/
|
|
137
|
-
|
|
138
|
-
providerEndpoint?: string;
|
|
139
|
-
providerAddress?: string;
|
|
140
|
-
actualEscrow?: string;
|
|
141
|
-
}): void;
|
|
146
|
+
private _onChannelMessage;
|
|
142
147
|
/**
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
148
|
+
* Await the next inbound message matching one of `acceptedTypes`.
|
|
149
|
+
* Returns null on timeout (caller decides how to handle: cancel,
|
|
150
|
+
* accept-if-affordable, etc).
|
|
146
151
|
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
* 1. EIP-712 signature recovers to provider DID
|
|
150
|
-
* 2. `acceptMessage.txId === txId`
|
|
151
|
-
* 3. `acceptMessage.inReplyTo === keccak(stored counter)`
|
|
152
|
-
* 4. `acceptMessage.acceptedAmount === storedCounter.counterAmount`
|
|
153
|
-
*
|
|
154
|
-
* Throws on any mismatch. Without these checks a malicious peer could
|
|
155
|
-
* pose as the provider and trick the buyer into committing at any
|
|
156
|
-
* price, since the previous (string-only) API trusted the caller.
|
|
157
|
-
*
|
|
158
|
-
* Wakes any negotiation round waiting on counter acceptance for this txId.
|
|
152
|
+
* Drains the queue first so messages buffered while we were busy
|
|
153
|
+
* processing the previous round are picked up immediately.
|
|
159
154
|
*/
|
|
160
|
-
|
|
155
|
+
private _waitForNextMessage;
|
|
161
156
|
/**
|
|
162
157
|
* Execute the full negotiation flow.
|
|
163
158
|
*/
|
|
164
159
|
negotiate(config?: OrchestratorConfig): Promise<NegotiationResult>;
|
|
165
160
|
private _negotiate;
|
|
166
161
|
/**
|
|
167
|
-
* Run
|
|
168
|
-
*
|
|
169
|
-
*
|
|
162
|
+
* Run the multi-round AIP-2.1 negotiation flow for one provider/txId.
|
|
163
|
+
*
|
|
164
|
+
* Channel-driven: this method never reads `setReceivedQuote` state;
|
|
165
|
+
* all inbound messages flow through the orchestrator's NegotiationChannel
|
|
166
|
+
* subscription (opened in `_negotiate` after createTransaction).
|
|
167
|
+
*
|
|
168
|
+
* Inner loop walks up to `policy.negotiation.rounds_per_provider`
|
|
169
|
+
* counter exchanges:
|
|
170
170
|
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
171
|
+
* await first quote (channel)
|
|
172
|
+
* for round in 0..rounds_per_provider:
|
|
173
|
+
* evaluate(currentQuote, roundsUsedSoFar = round)
|
|
174
|
+
* accept → on-chain acceptQuote+linkEscrow, return success
|
|
175
|
+
* reject → on-chain CANCELLED, return failure
|
|
176
|
+
* counter → channel.post(counter), await NEXT message:
|
|
177
|
+
* counteraccept → bind to last counter, on-chain accept+link, return success
|
|
178
|
+
* new quote → currentQuote = new quote, loop
|
|
179
|
+
* timeout → on-chain CANCELLED, return failure
|
|
180
|
+
*
|
|
181
|
+
* Returns `{done: false}` when the channel has no quote but the tx
|
|
182
|
+
* reached QUOTED via raw transitionState (legacy flow caller wants
|
|
183
|
+
* to fall through to fixed-price). Returns `{done: true, success?,
|
|
184
|
+
* reason?}` for any terminal outcome.
|
|
176
185
|
*/
|
|
177
186
|
private _runNegotiationRound;
|
|
178
|
-
/**
|
|
179
|
-
|
|
187
|
+
/**
|
|
188
|
+
* Shared accept+linkEscrow with atomic rollback. Used by both the
|
|
189
|
+
* "accept the quote" and "accept the counter" terminal branches.
|
|
190
|
+
*/
|
|
191
|
+
private _commitAtAmount;
|
|
180
192
|
/**
|
|
181
193
|
* Free per-tx negotiation state at terminal outcomes (accept commits,
|
|
182
|
-
* reject CANCELLED, timeout).
|
|
183
|
-
*
|
|
194
|
+
* reject CANCELLED, timeout). Closes the channel subscription too so
|
|
195
|
+
* long-running daemon callers don't leak inbound-message resolvers.
|
|
184
196
|
*
|
|
185
197
|
* Idempotent — safe to call from multiple cleanup sites.
|
|
186
198
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuyerOrchestrator.d.ts","sourceRoot":"","sources":["../../src/negotiation/BuyerOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"BuyerOrchestrator.d.ts","sourceRoot":"","sources":["../../src/negotiation/BuyerOrchestrator.ts"],"names":[],"mappings":"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"}
|