@antseed/node 0.2.7 → 0.2.8
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 +17 -22
- package/dist/discovery/announcer.d.ts +7 -7
- package/dist/discovery/announcer.d.ts.map +1 -1
- package/dist/discovery/announcer.js +38 -38
- package/dist/discovery/announcer.js.map +1 -1
- package/dist/discovery/dht-node.d.ts +4 -4
- package/dist/discovery/dht-node.d.ts.map +1 -1
- package/dist/discovery/dht-node.js +8 -8
- package/dist/discovery/dht-node.js.map +1 -1
- package/dist/discovery/index.d.ts +2 -2
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +2 -2
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/metadata-codec.d.ts +7 -7
- package/dist/discovery/metadata-codec.js +113 -113
- package/dist/discovery/metadata-codec.js.map +1 -1
- package/dist/discovery/metadata-validator.d.ts +5 -5
- package/dist/discovery/metadata-validator.d.ts.map +1 -1
- package/dist/discovery/metadata-validator.js +74 -74
- package/dist/discovery/metadata-validator.js.map +1 -1
- package/dist/discovery/peer-lookup.d.ts +1 -1
- package/dist/discovery/peer-lookup.d.ts.map +1 -1
- package/dist/discovery/peer-lookup.js +7 -7
- package/dist/discovery/peer-lookup.js.map +1 -1
- package/dist/discovery/peer-metadata.d.ts +9 -9
- package/dist/discovery/peer-metadata.d.ts.map +1 -1
- package/dist/discovery/peer-metadata.js +3 -3
- package/dist/discovery/peer-metadata.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces/seller-provider.d.ts +9 -9
- package/dist/interfaces/seller-provider.d.ts.map +1 -1
- package/dist/node.d.ts +2 -2
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +41 -41
- package/dist/node.js.map +1 -1
- package/dist/payments/seller-payment-manager.d.ts +12 -42
- package/dist/payments/seller-payment-manager.d.ts.map +1 -1
- package/dist/payments/seller-payment-manager.js +96 -140
- package/dist/payments/seller-payment-manager.js.map +1 -1
- package/dist/proxy/index.d.ts +1 -1
- package/dist/proxy/index.d.ts.map +1 -1
- package/dist/proxy/index.js +1 -1
- package/dist/proxy/index.js.map +1 -1
- package/dist/proxy/service-api-adapter.d.ts +30 -0
- package/dist/proxy/service-api-adapter.d.ts.map +1 -0
- package/dist/proxy/service-api-adapter.js +891 -0
- package/dist/proxy/service-api-adapter.js.map +1 -0
- package/dist/types/capability.d.ts +2 -2
- package/dist/types/capability.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/peer.d.ts +11 -11
- package/dist/types/peer.d.ts.map +1 -1
- package/dist/types/protocol.d.ts +0 -6
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/types/protocol.js +0 -8
- package/dist/types/protocol.js.map +1 -1
- package/dist/types/provider.d.ts +1 -1
- package/dist/types/provider.d.ts.map +1 -1
- package/dist/types/service-api.d.ts +4 -0
- package/dist/types/service-api.d.ts.map +1 -0
- package/dist/types/service-api.js +11 -0
- package/dist/types/service-api.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,24 +1,13 @@
|
|
|
1
|
+
import { verifyTypedData } from 'ethers';
|
|
1
2
|
import { EscrowClient } from './evm/escrow-client.js';
|
|
2
3
|
import { identityToEvmWallet } from './evm/keypair.js';
|
|
3
|
-
import { makeEscrowDomain,
|
|
4
|
+
import { makeEscrowDomain, SPENDING_AUTH_V2_TYPES } from './evm/signatures.js';
|
|
4
5
|
import { debugLog, debugWarn } from '../utils/debug.js';
|
|
5
|
-
import { verifyTypedData } from 'ethers';
|
|
6
|
-
/**
|
|
7
|
-
* Manages seller-side charge submission under the pull-payment model.
|
|
8
|
-
*
|
|
9
|
-
* Lifecycle:
|
|
10
|
-
* 1. handleSpendingAuth() — validate EIP-712 sig, send AuthAck (0x51)
|
|
11
|
-
* 2. chargeForRequest() — accumulate cost; submit on-chain when threshold hit
|
|
12
|
-
* 3. checkAndRequestTopUp() — send TopUpRequest (0x55) when near cap
|
|
13
|
-
* 4. onBuyerDisconnect() — flush any pending charge on-chain
|
|
14
|
-
*/
|
|
15
6
|
export class SellerPaymentManager {
|
|
16
7
|
_signer;
|
|
17
8
|
_escrow;
|
|
18
9
|
_config;
|
|
19
|
-
|
|
20
|
-
_chargeThreshold;
|
|
21
|
-
_topUpThreshold;
|
|
10
|
+
_sessions = new Map();
|
|
22
11
|
constructor(identity, config) {
|
|
23
12
|
this._config = config;
|
|
24
13
|
this._signer = identityToEvmWallet(identity);
|
|
@@ -28,178 +17,145 @@ export class SellerPaymentManager {
|
|
|
28
17
|
usdcAddress: config.usdcAddress,
|
|
29
18
|
chainId: config.chainId,
|
|
30
19
|
});
|
|
31
|
-
this._chargeThreshold = config.chargeThresholdUsdc ?? 100000n;
|
|
32
|
-
this._topUpThreshold = config.topUpThreshold ?? 0.80;
|
|
33
20
|
}
|
|
34
21
|
get signer() { return this._signer; }
|
|
35
22
|
get escrowClient() { return this._escrow; }
|
|
36
|
-
|
|
37
|
-
|
|
23
|
+
hasSession(buyerPeerId) {
|
|
24
|
+
const s = this._sessions.get(buyerPeerId);
|
|
25
|
+
return !!s && !s.settled;
|
|
38
26
|
}
|
|
39
27
|
setBuyerEvmAddress(buyerPeerId, evmAddress) {
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
42
|
-
|
|
28
|
+
const session = this._sessions.get(buyerPeerId);
|
|
29
|
+
if (session)
|
|
30
|
+
session.buyerEvmAddr = evmAddress;
|
|
43
31
|
}
|
|
44
|
-
async
|
|
32
|
+
async handleSpendingAuthV2(buyerPeerId, buyerEvmAddr, payload, paymentMux) {
|
|
33
|
+
const now = Math.floor(Date.now() / 1000);
|
|
34
|
+
if (!payload.deadline || payload.deadline <= now) {
|
|
35
|
+
debugWarn(`[SellerPayment] Expired SpendingAuthV2 from ${buyerPeerId.slice(0, 12)}... deadline=${payload.deadline}`);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
let maxAmount;
|
|
39
|
+
let previousConsumption;
|
|
40
|
+
try {
|
|
41
|
+
maxAmount = BigInt(payload.maxAmountUsdc);
|
|
42
|
+
previousConsumption = BigInt(payload.previousConsumption ?? '0');
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
debugWarn(`[SellerPayment] Invalid amounts in SpendingAuthV2 from ${buyerPeerId.slice(0, 12)}...`);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const previousSessionId = payload.previousSessionId ?? ('0x' + '00'.repeat(32));
|
|
45
49
|
const sellerAddr = await this._signer.getAddress();
|
|
46
50
|
const domain = makeEscrowDomain(this._config.chainId, this._config.contractAddress);
|
|
47
|
-
const
|
|
48
|
-
const recovered = verifyTypedData(domain, SPENDING_AUTH_TYPES, {
|
|
51
|
+
const recovered = verifyTypedData(domain, SPENDING_AUTH_V2_TYPES, {
|
|
49
52
|
seller: sellerAddr,
|
|
50
53
|
sessionId: payload.sessionId,
|
|
51
54
|
maxAmount,
|
|
52
55
|
nonce: payload.nonce,
|
|
53
56
|
deadline: payload.deadline,
|
|
57
|
+
previousConsumption,
|
|
58
|
+
previousSessionId,
|
|
54
59
|
}, payload.buyerSig);
|
|
55
60
|
if (recovered.toLowerCase() !== buyerEvmAddr.toLowerCase()) {
|
|
56
|
-
debugWarn(`[SellerPayment] Invalid
|
|
57
|
-
` recovered=${recovered.slice(0, 10)}... expected=${buyerEvmAddr.slice(0, 10)}...`);
|
|
61
|
+
debugWarn(`[SellerPayment] Invalid V2 sig from ${buyerPeerId.slice(0, 12)}... recovered=${recovered.slice(0, 10)}... expected=${buyerEvmAddr.slice(0, 10)}...`);
|
|
58
62
|
return;
|
|
59
63
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
const prevSession = this._sessions.get(buyerPeerId);
|
|
65
|
+
if (prevSession && !prevSession.settled) {
|
|
66
|
+
debugLog(`[SellerPayment] Settling previous session ${prevSession.sessionId.slice(0, 18)}... before reserve()`);
|
|
67
|
+
try {
|
|
68
|
+
const chargeAmount = this._computeChargeAmount(prevSession);
|
|
69
|
+
await this._escrow.settle(this._signer, prevSession.sessionId, chargeAmount);
|
|
70
|
+
prevSession.settled = true;
|
|
67
71
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
debugWarn(`[SellerPayment] Could not fetch buyer balance for auth check: ${err}`);
|
|
71
|
-
}
|
|
72
|
-
const existing = this._auths.get(buyerPeerId);
|
|
73
|
-
if (existing && payload.nonce === existing.nonce + 1) {
|
|
74
|
-
// Flush any sub-threshold pending charges under the old auth before advancing nonce.
|
|
75
|
-
// Without this, charges that haven't yet reached the batch threshold are permanently lost.
|
|
76
|
-
if (existing.pendingCharge > 0n && !existing.chargeInFlight) {
|
|
77
|
-
try {
|
|
78
|
-
await this._submitCharge(existing);
|
|
79
|
-
}
|
|
80
|
-
catch (err) {
|
|
81
|
-
debugWarn(`[SellerPayment] Failed to flush pending charges before top-up: ${err}`);
|
|
82
|
-
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
debugWarn(`[SellerPayment] Failed to settle previous session: ${err}`);
|
|
83
74
|
}
|
|
84
|
-
// Top-up: advance nonce and reset authUsed
|
|
85
|
-
existing.nonce = payload.nonce;
|
|
86
|
-
existing.authMax = maxAmount;
|
|
87
|
-
existing.authUsed = 0n;
|
|
88
|
-
existing.deadline = payload.deadline;
|
|
89
|
-
existing.buyerSig = payload.buyerSig;
|
|
90
|
-
existing.pendingCharge = 0n; // clear any unflushed remainder after attempted flush
|
|
91
|
-
existing.chargeInFlight = false;
|
|
92
|
-
debugLog(`[SellerPayment] Top-up auth accepted: nonce=${payload.nonce} max=${maxAmount}`);
|
|
93
75
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
this._auths.set(buyerPeerId, {
|
|
97
|
-
sessionId: payload.sessionId,
|
|
98
|
-
buyerPeerId,
|
|
99
|
-
buyerEvmAddr,
|
|
100
|
-
nonce: payload.nonce,
|
|
101
|
-
authMax: maxAmount,
|
|
102
|
-
authUsed: 0n,
|
|
103
|
-
deadline: payload.deadline,
|
|
104
|
-
buyerSig: payload.buyerSig,
|
|
105
|
-
pendingCharge: 0n,
|
|
106
|
-
requestCount: 0,
|
|
107
|
-
chargeInFlight: false,
|
|
108
|
-
});
|
|
109
|
-
debugLog(`[SellerPayment] Auth accepted: session=${payload.sessionId.slice(0, 18)}... nonce=${payload.nonce} max=${maxAmount}`);
|
|
76
|
+
try {
|
|
77
|
+
await this._escrow.reserve(this._signer, payload.sessionId, buyerEvmAddr, maxAmount, payload.nonce, payload.deadline, previousConsumption, previousSessionId, payload.buyerSig);
|
|
110
78
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
async chargeForRequest(buyerPeerId, costUsdc, paymentMux) {
|
|
115
|
-
if (costUsdc === 0n)
|
|
116
|
-
return;
|
|
117
|
-
const auth = this._auths.get(buyerPeerId);
|
|
118
|
-
if (!auth) {
|
|
119
|
-
debugWarn(`[SellerPayment] No auth for buyer ${buyerPeerId.slice(0, 12)}... — cannot charge`);
|
|
79
|
+
catch (err) {
|
|
80
|
+
debugWarn(`[SellerPayment] reserve() failed for ${buyerPeerId.slice(0, 12)}...: ${err}`);
|
|
120
81
|
return;
|
|
121
82
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
83
|
+
this._sessions.set(buyerPeerId, {
|
|
84
|
+
sessionId: payload.sessionId,
|
|
85
|
+
buyerPeerId,
|
|
86
|
+
buyerEvmAddr,
|
|
87
|
+
nonce: payload.nonce,
|
|
88
|
+
authMax: maxAmount,
|
|
89
|
+
deadline: payload.deadline,
|
|
90
|
+
buyerSig: payload.buyerSig,
|
|
91
|
+
previousConsumption,
|
|
92
|
+
previousSessionId,
|
|
93
|
+
tokensDelivered: 0n,
|
|
94
|
+
reservedAt: Date.now(),
|
|
95
|
+
settled: false,
|
|
96
|
+
});
|
|
97
|
+
paymentMux.sendAuthAck({ sessionId: payload.sessionId, nonce: payload.nonce });
|
|
98
|
+
debugLog(`[SellerPayment] AuthAck sent for session=${payload.sessionId.slice(0, 18)}...`);
|
|
130
99
|
}
|
|
131
|
-
|
|
132
|
-
const
|
|
133
|
-
if (
|
|
134
|
-
|
|
100
|
+
addTokensDelivered(buyerPeerId, tokens) {
|
|
101
|
+
const session = this._sessions.get(buyerPeerId);
|
|
102
|
+
if (!session || session.settled)
|
|
103
|
+
return;
|
|
104
|
+
session.tokensDelivered += tokens;
|
|
105
|
+
debugLog(`[SellerPayment] Tokens accrued for ${buyerPeerId.slice(0, 12)}...: ${session.tokensDelivered}`);
|
|
135
106
|
}
|
|
136
107
|
async onBuyerDisconnect(buyerPeerId) {
|
|
137
|
-
const
|
|
138
|
-
if (!
|
|
108
|
+
const session = this._sessions.get(buyerPeerId);
|
|
109
|
+
if (!session || session.settled) {
|
|
110
|
+
this._sessions.delete(buyerPeerId);
|
|
139
111
|
return;
|
|
140
|
-
|
|
141
|
-
|
|
112
|
+
}
|
|
113
|
+
const settleTimeoutMs = 24 * 60 * 60 * 1000;
|
|
114
|
+
const elapsed = Date.now() - session.reservedAt;
|
|
115
|
+
if (elapsed >= settleTimeoutMs) {
|
|
116
|
+
debugLog(`[SellerPayment] settleTimeout() for ghost session ${session.sessionId.slice(0, 18)}...`);
|
|
142
117
|
try {
|
|
143
|
-
await this.
|
|
118
|
+
await this._escrow.settleTimeout(this._signer, session.sessionId);
|
|
119
|
+
session.settled = true;
|
|
144
120
|
}
|
|
145
121
|
catch (err) {
|
|
146
|
-
debugWarn(`[SellerPayment]
|
|
122
|
+
debugWarn(`[SellerPayment] settleTimeout() failed: ${err}`);
|
|
147
123
|
}
|
|
148
124
|
}
|
|
149
|
-
|
|
125
|
+
else {
|
|
126
|
+
debugLog('[SellerPayment] Buyer disconnected, session not yet timeout-eligible. Will settle on next SpendingAuthV2.');
|
|
127
|
+
}
|
|
128
|
+
this._sessions.delete(buyerPeerId);
|
|
129
|
+
}
|
|
130
|
+
async settleSession(buyerPeerId, chargeAmount) {
|
|
131
|
+
const session = this._sessions.get(buyerPeerId);
|
|
132
|
+
if (!session || session.settled)
|
|
133
|
+
return;
|
|
134
|
+
try {
|
|
135
|
+
await this._escrow.settle(this._signer, session.sessionId, chargeAmount);
|
|
136
|
+
session.settled = true;
|
|
137
|
+
debugLog(`[SellerPayment] Settled session ${session.sessionId.slice(0, 18)}... charged=${chargeAmount}`);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
debugWarn(`[SellerPayment] settle() failed: ${err}`);
|
|
141
|
+
throw err;
|
|
142
|
+
}
|
|
150
143
|
}
|
|
151
144
|
async claimEarnings() {
|
|
152
|
-
debugLog(`[SellerPayment] Claiming earnings`);
|
|
153
145
|
return this._escrow.claimEarnings(this._signer);
|
|
154
146
|
}
|
|
155
147
|
async stake(amount) {
|
|
156
|
-
debugLog(`[SellerPayment] Staking ${amount}`);
|
|
157
148
|
return this._escrow.stake(this._signer, amount);
|
|
158
149
|
}
|
|
159
150
|
async unstake(amount) {
|
|
160
|
-
debugLog(`[SellerPayment] Unstaking ${amount}`);
|
|
161
151
|
return this._escrow.unstake(this._signer, amount);
|
|
162
152
|
}
|
|
163
153
|
async getPendingEarnings() {
|
|
164
154
|
const addr = await this._signer.getAddress();
|
|
165
155
|
return this._escrow.getSellerPendingEarnings(addr);
|
|
166
156
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
return;
|
|
170
|
-
const ratio = Number(auth.authUsed) / Number(auth.authMax);
|
|
171
|
-
if (ratio < this._topUpThreshold)
|
|
172
|
-
return;
|
|
173
|
-
const requested = (this._config.topUpAmountUsdc ?? auth.authMax).toString();
|
|
174
|
-
debugLog(`[SellerPayment] Requesting top-up: used=${auth.authUsed} max=${auth.authMax} ratio=${ratio.toFixed(2)}`);
|
|
175
|
-
const topUp = {
|
|
176
|
-
sessionId: auth.sessionId,
|
|
177
|
-
currentUsed: auth.authUsed.toString(),
|
|
178
|
-
currentMax: auth.authMax.toString(),
|
|
179
|
-
requestedAdditional: requested,
|
|
180
|
-
};
|
|
181
|
-
paymentMux.sendTopUpRequest(topUp);
|
|
182
|
-
}
|
|
183
|
-
async _submitCharge(auth) {
|
|
184
|
-
const amount = auth.pendingCharge;
|
|
185
|
-
if (amount === 0n)
|
|
186
|
-
return;
|
|
187
|
-
// Optimistically reset and mark in-flight before the async call to prevent
|
|
188
|
-
// concurrent callers from double-submitting the same pending balance.
|
|
189
|
-
auth.pendingCharge = 0n;
|
|
190
|
-
auth.chargeInFlight = true;
|
|
191
|
-
try {
|
|
192
|
-
const txHash = await this._escrow.charge(this._signer, auth.buyerEvmAddr, amount, auth.sessionId, auth.authMax, auth.nonce, auth.deadline, auth.buyerSig);
|
|
193
|
-
debugLog(`[SellerPayment] Charged ${amount} on-chain: tx=${txHash.slice(0, 12)}...`);
|
|
194
|
-
}
|
|
195
|
-
catch (err) {
|
|
196
|
-
// Restore pending on failure so the next call can retry.
|
|
197
|
-
auth.pendingCharge += amount;
|
|
198
|
-
throw err;
|
|
199
|
-
}
|
|
200
|
-
finally {
|
|
201
|
-
auth.chargeInFlight = false;
|
|
202
|
-
}
|
|
157
|
+
_computeChargeAmount(session) {
|
|
158
|
+
return session.authMax;
|
|
203
159
|
}
|
|
204
160
|
}
|
|
205
161
|
//# sourceMappingURL=seller-payment-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seller-payment-manager.js","sourceRoot":"","sources":["../../src/payments/seller-payment-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"seller-payment-manager.js","sourceRoot":"","sources":["../../src/payments/seller-payment-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { ProxyMux } from './proxy-mux.js';
|
|
2
2
|
export { encodeHttpRequest, decodeHttpRequest, encodeHttpResponse, decodeHttpResponse, encodeHttpResponseChunk, decodeHttpResponseChunk } from './request-codec.js';
|
|
3
3
|
export { detectProviderFromHeaders, detectProviderFromPath, resolveProvider, IDLEAI_PROVIDER_HEADER } from './provider-detection.js';
|
|
4
|
-
export {
|
|
4
|
+
export { detectRequestServiceApiProtocol, inferProviderDefaultServiceApiProtocols, selectTargetProtocolForRequest, transformAnthropicMessagesRequestToOpenAIChat, transformOpenAIChatResponseToAnthropicMessage, transformOpenAIResponsesRequestToOpenAIChat, transformOpenAIChatResponseToOpenAIResponses, type TargetProtocolSelection, type AnthropicToOpenAIRequestTransformResult, type ResponsesToOpenAIRequestTransformResult, } from './service-api-adapter.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACpK,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACrI,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACpK,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACrI,OAAO,EACL,+BAA+B,EAC/B,uCAAuC,EACvC,8BAA8B,EAC9B,6CAA6C,EAC7C,6CAA6C,EAC7C,2CAA2C,EAC3C,4CAA4C,EAC5C,KAAK,uBAAuB,EAC5B,KAAK,uCAAuC,EAC5C,KAAK,uCAAuC,GAC7C,MAAM,0BAA0B,CAAC"}
|
package/dist/proxy/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { ProxyMux } from './proxy-mux.js';
|
|
2
2
|
export { encodeHttpRequest, decodeHttpRequest, encodeHttpResponse, decodeHttpResponse, encodeHttpResponseChunk, decodeHttpResponseChunk } from './request-codec.js';
|
|
3
3
|
export { detectProviderFromHeaders, detectProviderFromPath, resolveProvider, IDLEAI_PROVIDER_HEADER } from './provider-detection.js';
|
|
4
|
-
export {
|
|
4
|
+
export { detectRequestServiceApiProtocol, inferProviderDefaultServiceApiProtocols, selectTargetProtocolForRequest, transformAnthropicMessagesRequestToOpenAIChat, transformOpenAIChatResponseToAnthropicMessage, transformOpenAIResponsesRequestToOpenAIChat, transformOpenAIChatResponseToOpenAIResponses, } from './service-api-adapter.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
package/dist/proxy/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACpK,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACrI,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACpK,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACrI,OAAO,EACL,+BAA+B,EAC/B,uCAAuC,EACvC,8BAA8B,EAC9B,6CAA6C,EAC7C,6CAA6C,EAC7C,2CAA2C,EAC3C,4CAA4C,GAI7C,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SerializedHttpRequest, SerializedHttpResponse } from '../types/http.js';
|
|
2
|
+
import type { ServiceApiProtocol } from '../types/service-api.js';
|
|
3
|
+
export interface TargetProtocolSelection {
|
|
4
|
+
targetProtocol: ServiceApiProtocol;
|
|
5
|
+
requiresTransform: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface AnthropicToOpenAIRequestTransformResult {
|
|
8
|
+
request: SerializedHttpRequest;
|
|
9
|
+
streamRequested: boolean;
|
|
10
|
+
requestedModel: string | null;
|
|
11
|
+
}
|
|
12
|
+
export declare function detectRequestServiceApiProtocol(request: Pick<SerializedHttpRequest, 'path' | 'headers'>): ServiceApiProtocol | null;
|
|
13
|
+
export declare function inferProviderDefaultServiceApiProtocols(providerName: string): ServiceApiProtocol[];
|
|
14
|
+
export declare function selectTargetProtocolForRequest(requestProtocol: ServiceApiProtocol | null, supportedProtocols: ServiceApiProtocol[]): TargetProtocolSelection | null;
|
|
15
|
+
export declare function transformAnthropicMessagesRequestToOpenAIChat(request: SerializedHttpRequest): AnthropicToOpenAIRequestTransformResult | null;
|
|
16
|
+
export declare function transformOpenAIChatResponseToAnthropicMessage(response: SerializedHttpResponse, options: {
|
|
17
|
+
streamRequested: boolean;
|
|
18
|
+
fallbackModel?: string | null;
|
|
19
|
+
}): SerializedHttpResponse;
|
|
20
|
+
export interface ResponsesToOpenAIRequestTransformResult {
|
|
21
|
+
request: SerializedHttpRequest;
|
|
22
|
+
streamRequested: boolean;
|
|
23
|
+
requestedModel: string | null;
|
|
24
|
+
}
|
|
25
|
+
export declare function transformOpenAIResponsesRequestToOpenAIChat(request: SerializedHttpRequest): ResponsesToOpenAIRequestTransformResult | null;
|
|
26
|
+
export declare function transformOpenAIChatResponseToOpenAIResponses(response: SerializedHttpResponse, options: {
|
|
27
|
+
fallbackModel?: string | null;
|
|
28
|
+
streamRequested?: boolean;
|
|
29
|
+
}): SerializedHttpResponse;
|
|
30
|
+
//# sourceMappingURL=service-api-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-api-adapter.d.ts","sourceRoot":"","sources":["../../src/proxy/service-api-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAKlE,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,kBAAkB,CAAC;IACnC,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,uCAAuC;IACtD,OAAO,EAAE,qBAAqB,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AA+VD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,kBAAkB,GAAG,IAAI,CAsBnI;AAED,wBAAgB,uCAAuC,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,EAAE,CAYlG;AAED,wBAAgB,8BAA8B,CAC5C,eAAe,EAAE,kBAAkB,GAAG,IAAI,EAC1C,kBAAkB,EAAE,kBAAkB,EAAE,GACvC,uBAAuB,GAAG,IAAI,CAchC;AAED,wBAAgB,6CAA6C,CAC3D,OAAO,EAAE,qBAAqB,GAC7B,uCAAuC,GAAG,IAAI,CAmEhD;AAED,wBAAgB,6CAA6C,CAC3D,QAAQ,EAAE,sBAAsB,EAChC,OAAO,EAAE;IAAE,eAAe,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACnE,sBAAsB,CAoIxB;AAMD,MAAM,WAAW,uCAAuC;IACtD,OAAO,EAAE,qBAAqB,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAgID,wBAAgB,2CAA2C,CACzD,OAAO,EAAE,qBAAqB,GAC7B,uCAAuC,GAAG,IAAI,CAgEhD;AAqLD,wBAAgB,4CAA4C,CAC1D,QAAQ,EAAE,sBAAsB,EAChC,OAAO,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GACpE,sBAAsB,CA4CxB"}
|