@agirails/sdk 3.3.0 → 3.5.3
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/api/agirailsApp.d.ts +21 -1
- package/dist/api/agirailsApp.d.ts.map +1 -1
- package/dist/api/agirailsApp.js.map +1 -1
- package/dist/builders/CounterAcceptBuilder.d.ts +96 -0
- package/dist/builders/CounterAcceptBuilder.d.ts.map +1 -0
- package/dist/builders/CounterAcceptBuilder.js +226 -0
- package/dist/builders/CounterAcceptBuilder.js.map +1 -0
- package/dist/builders/CounterOfferBuilder.d.ts +143 -0
- package/dist/builders/CounterOfferBuilder.d.ts.map +1 -0
- package/dist/builders/CounterOfferBuilder.js +329 -0
- package/dist/builders/CounterOfferBuilder.js.map +1 -0
- package/dist/builders/QuoteBuilder.d.ts +9 -3
- package/dist/builders/QuoteBuilder.d.ts.map +1 -1
- package/dist/builders/QuoteBuilder.js +22 -6
- package/dist/builders/QuoteBuilder.js.map +1 -1
- package/dist/builders/index.d.ts +2 -0
- package/dist/builders/index.d.ts.map +1 -1
- package/dist/builders/index.js +7 -1
- package/dist/builders/index.js.map +1 -1
- package/dist/cli/agirails.js +22 -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 +209 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/health.js +21 -5
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +25 -5
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/publish.d.ts +34 -0
- package/dist/cli/commands/publish.d.ts.map +1 -1
- package/dist/cli/commands/publish.js +256 -80
- package/dist/cli/commands/publish.js.map +1 -1
- package/dist/cli/commands/repair.d.ts +23 -0
- package/dist/cli/commands/repair.d.ts.map +1 -0
- package/dist/cli/commands/repair.js +210 -0
- package/dist/cli/commands/repair.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +38 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +308 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/test.js +2 -2
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/index.js +10 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/agirailsmdV4.d.ts +46 -1
- package/dist/config/agirailsmdV4.d.ts.map +1 -1
- package/dist/config/agirailsmdV4.js +65 -8
- package/dist/config/agirailsmdV4.js.map +1 -1
- package/dist/config/defaults.d.ts +10 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +10 -0
- package/dist/config/defaults.js.map +1 -1
- 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/config/publishPipeline.d.ts +23 -1
- package/dist/config/publishPipeline.d.ts.map +1 -1
- package/dist/config/publishPipeline.js +70 -15
- package/dist/config/publishPipeline.js.map +1 -1
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -3
- package/dist/index.js.map +1 -1
- package/dist/level1/Agent.d.ts +27 -0
- package/dist/level1/Agent.d.ts.map +1 -1
- package/dist/level1/Agent.js +77 -6
- package/dist/level1/Agent.js.map +1 -1
- package/dist/negotiation/BuyerOrchestrator.d.ts +115 -1
- package/dist/negotiation/BuyerOrchestrator.d.ts.map +1 -1
- package/dist/negotiation/BuyerOrchestrator.js +530 -4
- package/dist/negotiation/BuyerOrchestrator.js.map +1 -1
- package/dist/negotiation/DecisionEngine.d.ts +69 -1
- package/dist/negotiation/DecisionEngine.d.ts.map +1 -1
- package/dist/negotiation/DecisionEngine.js +140 -1
- package/dist/negotiation/DecisionEngine.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/PolicyEngine.d.ts +32 -0
- package/dist/negotiation/PolicyEngine.d.ts.map +1 -1
- package/dist/negotiation/PolicyEngine.js.map +1 -1
- package/dist/negotiation/ProviderOrchestrator.d.ts +158 -0
- package/dist/negotiation/ProviderOrchestrator.d.ts.map +1 -0
- package/dist/negotiation/ProviderOrchestrator.js +286 -0
- package/dist/negotiation/ProviderOrchestrator.js.map +1 -0
- package/dist/negotiation/ProviderPolicy.d.ts +188 -0
- package/dist/negotiation/ProviderPolicy.d.ts.map +1 -0
- package/dist/negotiation/ProviderPolicy.js +259 -0
- package/dist/negotiation/ProviderPolicy.js.map +1 -0
- 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/negotiation/index.d.ts +8 -1
- package/dist/negotiation/index.d.ts.map +1 -1
- package/dist/negotiation/index.js +8 -1
- package/dist/negotiation/index.js.map +1 -1
- package/dist/negotiation/verifyQuoteOnChain.d.ts +58 -0
- package/dist/negotiation/verifyQuoteOnChain.d.ts.map +1 -0
- package/dist/negotiation/verifyQuoteOnChain.js +83 -0
- package/dist/negotiation/verifyQuoteOnChain.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/runtime/BlockchainRuntime.d.ts +13 -0
- package/dist/runtime/BlockchainRuntime.d.ts.map +1 -1
- package/dist/runtime/BlockchainRuntime.js +33 -2
- package/dist/runtime/BlockchainRuntime.js.map +1 -1
- package/dist/runtime/IACTPRuntime.d.ts +35 -0
- package/dist/runtime/IACTPRuntime.d.ts.map +1 -1
- package/dist/runtime/MockRuntime.d.ts +11 -0
- package/dist/runtime/MockRuntime.d.ts.map +1 -1
- package/dist/runtime/MockRuntime.js +39 -0
- package/dist/runtime/MockRuntime.js.map +1 -1
- package/dist/runtime/types/MockState.d.ts +10 -0
- package/dist/runtime/types/MockState.d.ts.map +1 -1
- package/dist/runtime/types/MockState.js.map +1 -1
- package/dist/transport/QuoteChannel.d.ts +201 -0
- package/dist/transport/QuoteChannel.d.ts.map +1 -0
- package/dist/transport/QuoteChannel.js +358 -0
- package/dist/transport/QuoteChannel.js.map +1 -0
- package/dist/types/adapter.d.ts +24 -24
- package/package.json +16 -1
|
@@ -15,9 +15,12 @@
|
|
|
15
15
|
*
|
|
16
16
|
* Accepts ACTPClient for on-chain operations. Caller manages lifecycle.
|
|
17
17
|
*/
|
|
18
|
+
import type { Signer } from 'ethers';
|
|
18
19
|
import { DiscoverParams } from '../api/agirailsApp';
|
|
19
20
|
import { BuyerPolicy } from './PolicyEngine';
|
|
20
21
|
import { IACTPRuntime } from '../runtime/IACTPRuntime';
|
|
22
|
+
import { NonceManager } from '../utils/NonceManager';
|
|
23
|
+
import { NegotiationChannel } from './NegotiationChannel';
|
|
21
24
|
export interface NegotiationResult {
|
|
22
25
|
success: boolean;
|
|
23
26
|
commerce_session_id: string;
|
|
@@ -78,6 +81,34 @@ export type ProgressEvent = {
|
|
|
78
81
|
success: boolean;
|
|
79
82
|
reason: string;
|
|
80
83
|
};
|
|
84
|
+
/**
|
|
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)
|
|
94
|
+
*/
|
|
95
|
+
export interface BuyerNegotiationContext {
|
|
96
|
+
/** Buyer's EOA signer — signs CounterOfferMessages. */
|
|
97
|
+
signer?: Signer;
|
|
98
|
+
/** ACTPKernel address for the chain. Required for counter signing. */
|
|
99
|
+
kernelAddress?: string;
|
|
100
|
+
/** Chain id (84532 / 8453). Required for counter signing. */
|
|
101
|
+
chainId?: number;
|
|
102
|
+
/** Nonce manager for counter messages. Defaults to an in-memory one. */
|
|
103
|
+
nonceManager?: NonceManager;
|
|
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;
|
|
111
|
+
}
|
|
81
112
|
export declare class BuyerOrchestrator {
|
|
82
113
|
private policy;
|
|
83
114
|
private policyEngine;
|
|
@@ -85,12 +116,95 @@ export declare class BuyerOrchestrator {
|
|
|
85
116
|
private sessionStore;
|
|
86
117
|
private runtime;
|
|
87
118
|
private requesterAddress;
|
|
88
|
-
|
|
119
|
+
private negotiation;
|
|
120
|
+
private counterBuilder?;
|
|
121
|
+
/**
|
|
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.
|
|
136
|
+
*/
|
|
137
|
+
private activeSubscriptions;
|
|
138
|
+
constructor(policy: BuyerPolicy, runtime: IACTPRuntime, requesterAddress: string, actpDir?: string, negotiation?: BuyerNegotiationContext);
|
|
139
|
+
/**
|
|
140
|
+
* Channel delivered a verified message for `txId`. If a round is
|
|
141
|
+
* awaiting the next message, hand it directly; otherwise queue.
|
|
142
|
+
*
|
|
143
|
+
* NOTE: the channel has already verified EIP-712 signature + chainId
|
|
144
|
+
* before invoking us. This handler is concerned only with routing.
|
|
145
|
+
*/
|
|
146
|
+
private _onChannelMessage;
|
|
147
|
+
/**
|
|
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).
|
|
151
|
+
*
|
|
152
|
+
* Drains the queue first so messages buffered while we were busy
|
|
153
|
+
* processing the previous round are picked up immediately.
|
|
154
|
+
*/
|
|
155
|
+
private _waitForNextMessage;
|
|
89
156
|
/**
|
|
90
157
|
* Execute the full negotiation flow.
|
|
91
158
|
*/
|
|
92
159
|
negotiate(config?: OrchestratorConfig): Promise<NegotiationResult>;
|
|
93
160
|
private _negotiate;
|
|
161
|
+
/**
|
|
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
|
+
*
|
|
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.
|
|
185
|
+
*/
|
|
186
|
+
private _runNegotiationRound;
|
|
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;
|
|
192
|
+
/**
|
|
193
|
+
* Free per-tx negotiation state at terminal outcomes (accept commits,
|
|
194
|
+
* reject CANCELLED, timeout). Closes the channel subscription too so
|
|
195
|
+
* long-running daemon callers don't leak inbound-message resolvers.
|
|
196
|
+
*
|
|
197
|
+
* Idempotent — safe to call from multiple cleanup sites.
|
|
198
|
+
*/
|
|
199
|
+
private _cleanupTxState;
|
|
200
|
+
/**
|
|
201
|
+
* Display-only downcast: USDC base-units string → Number for the
|
|
202
|
+
* RoundResult.quoted_price log field. Loses precision above
|
|
203
|
+
* Number.MAX_SAFE_INTEGER / 1e6 (~$9 quadrillion) but every
|
|
204
|
+
* comparison the orchestrator actually MAKES uses the bigint
|
|
205
|
+
* string. The on-chain tx.amount is the source of truth.
|
|
206
|
+
*/
|
|
207
|
+
private _baseUnitsForLog;
|
|
94
208
|
/**
|
|
95
209
|
* Poll until tx reaches one of the target states.
|
|
96
210
|
* Returns the reached state, or null on timeout/cancelled.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuyerOrchestrator.d.ts","sourceRoot":"","sources":["../../src/negotiation/BuyerOrchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAiC,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAgB,WAAW,EAAc,MAAM,gBAAgB,CAAC;AAGvE,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"BuyerOrchestrator.d.ts","sourceRoot":"","sources":["../../src/negotiation/BuyerOrchestrator.ts"],"names":[],"mappings":"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"}
|