@antseed/node 0.2.105 → 0.2.107
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/billing/index.d.ts +2 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +2 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/billing/unit.d.ts +3 -0
- package/dist/billing/unit.d.ts.map +1 -0
- package/dist/billing/unit.js +3 -0
- package/dist/billing/unit.js.map +1 -0
- package/dist/buyer-request-handler.d.ts +1 -54
- package/dist/buyer-request-handler.d.ts.map +1 -1
- package/dist/buyer-request-handler.js +2 -379
- package/dist/buyer-request-handler.js.map +1 -1
- package/dist/discovery/announcer.d.ts +7 -1
- package/dist/discovery/announcer.d.ts.map +1 -1
- package/dist/discovery/announcer.js +84 -33
- package/dist/discovery/announcer.js.map +1 -1
- package/dist/discovery/http-metadata-resolver.d.ts +4 -0
- package/dist/discovery/http-metadata-resolver.d.ts.map +1 -1
- package/dist/discovery/http-metadata-resolver.js +42 -2
- package/dist/discovery/http-metadata-resolver.js.map +1 -1
- package/dist/discovery/index.d.ts +1 -1
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +1 -1
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/metadata-codec.d.ts +4 -4
- package/dist/discovery/metadata-codec.d.ts.map +1 -1
- package/dist/discovery/metadata-codec.js +339 -23
- package/dist/discovery/metadata-codec.js.map +1 -1
- package/dist/discovery/metadata-validator.d.ts +7 -3
- package/dist/discovery/metadata-validator.d.ts.map +1 -1
- package/dist/discovery/metadata-validator.js +139 -8
- package/dist/discovery/metadata-validator.js.map +1 -1
- package/dist/discovery/peer-lookup.d.ts +1 -0
- package/dist/discovery/peer-lookup.d.ts.map +1 -1
- package/dist/discovery/peer-lookup.js +23 -5
- package/dist/discovery/peer-lookup.js.map +1 -1
- package/dist/discovery/peer-metadata.d.ts +2 -90
- package/dist/discovery/peer-metadata.d.ts.map +1 -1
- package/dist/discovery/peer-metadata.js +3 -11
- package/dist/discovery/peer-metadata.js.map +1 -1
- package/dist/discovery/seller-address-resolver.d.ts +1 -49
- package/dist/discovery/seller-address-resolver.d.ts.map +1 -1
- package/dist/discovery/seller-address-resolver.js +2 -114
- package/dist/discovery/seller-address-resolver.js.map +1 -1
- package/dist/errors.d.ts +43 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +73 -0
- package/dist/errors.js.map +1 -0
- package/dist/health/model-health-checker.d.ts +6 -5
- package/dist/health/model-health-checker.d.ts.map +1 -1
- package/dist/health/model-health-checker.js +22 -10
- package/dist/health/model-health-checker.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/seller-provider.d.ts +6 -0
- package/dist/interfaces/seller-provider.d.ts.map +1 -1
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +28 -0
- package/dist/node.js.map +1 -1
- package/dist/p2p/connection-auth.d.ts +3 -8
- package/dist/p2p/connection-auth.d.ts.map +1 -1
- package/dist/p2p/connection-auth.js +4 -6
- package/dist/p2p/connection-auth.js.map +1 -1
- package/dist/p2p/connection-manager.d.ts +3 -1
- package/dist/p2p/connection-manager.d.ts.map +1 -1
- package/dist/p2p/connection-manager.js.map +1 -1
- package/dist/p2p/identity.d.ts +1 -21
- package/dist/p2p/identity.d.ts.map +1 -1
- package/dist/p2p/identity.js +3 -62
- package/dist/p2p/identity.js.map +1 -1
- package/dist/p2p/message-protocol.d.ts +1 -49
- package/dist/p2p/message-protocol.d.ts.map +1 -1
- package/dist/p2p/message-protocol.js +2 -125
- package/dist/p2p/message-protocol.js.map +1 -1
- package/dist/p2p/payment-codec.d.ts +1 -21
- package/dist/p2p/payment-codec.d.ts.map +1 -1
- package/dist/p2p/payment-codec.js +2 -220
- package/dist/p2p/payment-codec.js.map +1 -1
- package/dist/p2p/payment-mux.d.ts +1 -51
- package/dist/p2p/payment-mux.d.ts.map +1 -1
- package/dist/p2p/payment-mux.js +2 -159
- package/dist/p2p/payment-mux.js.map +1 -1
- package/dist/payments/buyer-free-usage-manager.d.ts +1 -43
- package/dist/payments/buyer-free-usage-manager.d.ts.map +1 -1
- package/dist/payments/buyer-free-usage-manager.js +2 -298
- package/dist/payments/buyer-free-usage-manager.js.map +1 -1
- package/dist/payments/buyer-payment-manager.d.ts +1 -277
- package/dist/payments/buyer-payment-manager.d.ts.map +1 -1
- package/dist/payments/buyer-payment-manager.js +2 -1039
- package/dist/payments/buyer-payment-manager.js.map +1 -1
- package/dist/payments/buyer-payment-negotiator.d.ts +1 -130
- package/dist/payments/buyer-payment-negotiator.d.ts.map +1 -1
- package/dist/payments/buyer-payment-negotiator.js +2 -950
- package/dist/payments/buyer-payment-negotiator.js.map +1 -1
- package/dist/payments/chain-config.d.ts.map +1 -1
- package/dist/payments/chain-config.js +13 -2
- package/dist/payments/chain-config.js.map +1 -1
- package/dist/payments/channel-session-state.d.ts +1 -13
- package/dist/payments/channel-session-state.d.ts.map +1 -1
- package/dist/payments/channel-session-state.js +2 -25
- package/dist/payments/channel-session-state.js.map +1 -1
- package/dist/payments/channel-store.d.ts +2 -51
- package/dist/payments/channel-store.d.ts.map +1 -1
- package/dist/payments/channel-store.js +3 -14
- package/dist/payments/channel-store.js.map +1 -1
- package/dist/payments/channel-usage-accounting.d.ts +1 -17
- package/dist/payments/channel-usage-accounting.d.ts.map +1 -1
- package/dist/payments/channel-usage-accounting.js +2 -65
- package/dist/payments/channel-usage-accounting.js.map +1 -1
- package/dist/payments/evm/base-evm-client.d.ts +1 -26
- package/dist/payments/evm/base-evm-client.d.ts.map +1 -1
- package/dist/payments/evm/base-evm-client.js +2 -115
- package/dist/payments/evm/base-evm-client.js.map +1 -1
- package/dist/payments/evm/channels-client.d.ts +1 -85
- package/dist/payments/evm/channels-client.d.ts.map +1 -1
- package/dist/payments/evm/channels-client.js +2 -193
- package/dist/payments/evm/channels-client.js.map +1 -1
- package/dist/payments/evm/deposits-client.d.ts +1 -29
- package/dist/payments/evm/deposits-client.d.ts.map +1 -1
- package/dist/payments/evm/deposits-client.js +2 -67
- package/dist/payments/evm/deposits-client.js.map +1 -1
- package/dist/payments/evm/signatures.d.ts +1 -203
- package/dist/payments/evm/signatures.d.ts.map +1 -1
- package/dist/payments/evm/signatures.js +2 -236
- package/dist/payments/evm/signatures.js.map +1 -1
- package/dist/payments/evm/subpool-client.d.ts +32 -0
- package/dist/payments/evm/subpool-client.d.ts.map +1 -0
- package/dist/payments/evm/subpool-client.js +158 -0
- package/dist/payments/evm/subpool-client.js.map +1 -0
- package/dist/payments/index.d.ts +1 -1
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +1 -1
- package/dist/payments/index.js.map +1 -1
- package/dist/payments/pricing.d.ts +1 -26
- package/dist/payments/pricing.d.ts.map +1 -1
- package/dist/payments/pricing.js +2 -36
- package/dist/payments/pricing.js.map +1 -1
- package/dist/payments/seller-payment-manager.d.ts +7 -0
- package/dist/payments/seller-payment-manager.d.ts.map +1 -1
- package/dist/payments/seller-payment-manager.js +27 -2
- package/dist/payments/seller-payment-manager.js.map +1 -1
- package/dist/payments/usdc-utils.d.ts +1 -8
- package/dist/payments/usdc-utils.d.ts.map +1 -1
- package/dist/payments/usdc-utils.js +2 -16
- package/dist/payments/usdc-utils.js.map +1 -1
- package/dist/proxy/proxy-mux.d.ts +1 -69
- package/dist/proxy/proxy-mux.d.ts.map +1 -1
- package/dist/proxy/proxy-mux.js +2 -346
- package/dist/proxy/proxy-mux.js.map +1 -1
- package/dist/proxy/request-codec.d.ts +1 -41
- package/dist/proxy/request-codec.d.ts.map +1 -1
- package/dist/proxy/request-codec.js +2 -280
- package/dist/proxy/request-codec.js.map +1 -1
- package/dist/seller-request-handler.d.ts +10 -3
- package/dist/seller-request-handler.d.ts.map +1 -1
- package/dist/seller-request-handler.js +112 -17
- package/dist/seller-request-handler.js.map +1 -1
- package/dist/types/billing.d.ts +2 -0
- package/dist/types/billing.d.ts.map +1 -0
- package/dist/types/billing.js +2 -0
- package/dist/types/billing.js.map +1 -0
- package/dist/types/capability.d.ts +1 -25
- package/dist/types/capability.d.ts.map +1 -1
- package/dist/types/capability.js +2 -1
- package/dist/types/capability.js.map +1 -1
- package/dist/types/connection.d.ts +1 -26
- package/dist/types/connection.d.ts.map +1 -1
- package/dist/types/connection.js +2 -10
- package/dist/types/connection.js.map +1 -1
- package/dist/types/http.d.ts +1 -39
- package/dist/types/http.d.ts.map +1 -1
- package/dist/types/http.js +2 -16
- package/dist/types/http.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/peer.d.ts +9 -31
- package/dist/types/peer.d.ts.map +1 -1
- package/dist/types/peer.js +2 -14
- package/dist/types/peer.js.map +1 -1
- package/dist/types/protocol.d.ts +1 -306
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/types/protocol.js +2 -81
- package/dist/types/protocol.js.map +1 -1
- package/dist/types/service-api.d.ts +1 -5
- package/dist/types/service-api.d.ts.map +1 -1
- package/dist/types/service-api.js +2 -12
- package/dist/types/service-api.js.map +1 -1
- package/dist/utils/debug.d.ts +1 -5
- package/dist/utils/debug.d.ts.map +1 -1
- package/dist/utils/debug.js +2 -52
- package/dist/utils/debug.js.map +1 -1
- package/dist/utils/hex.d.ts +1 -2
- package/dist/utils/hex.d.ts.map +1 -1
- package/dist/utils/hex.js +2 -14
- package/dist/utils/hex.js.map +1 -1
- package/dist/utils/json-codec.d.ts +1 -9
- package/dist/utils/json-codec.d.ts.map +1 -1
- package/dist/utils/json-codec.js +2 -51
- package/dist/utils/json-codec.js.map +1 -1
- package/dist/utils/response-usage.d.ts +1 -9
- package/dist/utils/response-usage.d.ts.map +1 -1
- package/dist/utils/response-usage.js +2 -39
- package/dist/utils/response-usage.js.map +1 -1
- package/dist/verification/codec.d.ts +1 -3
- package/dist/verification/codec.d.ts.map +1 -1
- package/dist/verification/codec.js +2 -37
- package/dist/verification/codec.js.map +1 -1
- package/dist/verification/response-auth.d.ts +1 -30
- package/dist/verification/response-auth.d.ts.map +1 -1
- package/dist/verification/response-auth.js +2 -110
- package/dist/verification/response-auth.js.map +1 -1
- package/dist/verification/verification-mux.d.ts +1 -19
- package/dist/verification/verification-mux.d.ts.map +1 -1
- package/dist/verification/verification-mux.js +2 -99
- package/dist/verification/verification-mux.js.map +1 -1
- package/package.json +4 -2
|
@@ -1,281 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Encode an HTTP request into binary format:
|
|
5
|
-
* [requestIdLen:2][requestId:N][methodLen:1][method:N][pathLen:2][path:N]
|
|
6
|
-
* [headerCount:2][for each header: keyLen:2, key:N, valLen:2, val:N]
|
|
7
|
-
* [bodyLen:4][body:N]
|
|
8
|
-
*/
|
|
9
|
-
export function encodeHttpRequest(req) {
|
|
10
|
-
const requestIdBytes = encoder.encode(req.requestId);
|
|
11
|
-
const methodBytes = encoder.encode(req.method);
|
|
12
|
-
const pathBytes = encoder.encode(req.path);
|
|
13
|
-
const headerEntries = Object.entries(req.headers);
|
|
14
|
-
const encodedHeaders = [];
|
|
15
|
-
let headersSize = 0;
|
|
16
|
-
for (const [key, val] of headerEntries) {
|
|
17
|
-
const keyBytes = encoder.encode(key);
|
|
18
|
-
const valBytes = encoder.encode(val);
|
|
19
|
-
encodedHeaders.push({ key: keyBytes, val: valBytes });
|
|
20
|
-
headersSize += 2 + keyBytes.length + 2 + valBytes.length;
|
|
21
|
-
}
|
|
22
|
-
const totalSize = 2 + requestIdBytes.length +
|
|
23
|
-
1 + methodBytes.length +
|
|
24
|
-
2 + pathBytes.length +
|
|
25
|
-
2 + headersSize +
|
|
26
|
-
4 + req.body.length;
|
|
27
|
-
const buf = new Uint8Array(totalSize);
|
|
28
|
-
const view = new DataView(buf.buffer);
|
|
29
|
-
let offset = 0;
|
|
30
|
-
// requestId
|
|
31
|
-
view.setUint16(offset, requestIdBytes.length);
|
|
32
|
-
offset += 2;
|
|
33
|
-
buf.set(requestIdBytes, offset);
|
|
34
|
-
offset += requestIdBytes.length;
|
|
35
|
-
// method
|
|
36
|
-
view.setUint8(offset, methodBytes.length);
|
|
37
|
-
offset += 1;
|
|
38
|
-
buf.set(methodBytes, offset);
|
|
39
|
-
offset += methodBytes.length;
|
|
40
|
-
// path
|
|
41
|
-
view.setUint16(offset, pathBytes.length);
|
|
42
|
-
offset += 2;
|
|
43
|
-
buf.set(pathBytes, offset);
|
|
44
|
-
offset += pathBytes.length;
|
|
45
|
-
// headers
|
|
46
|
-
view.setUint16(offset, headerEntries.length);
|
|
47
|
-
offset += 2;
|
|
48
|
-
for (const { key, val } of encodedHeaders) {
|
|
49
|
-
view.setUint16(offset, key.length);
|
|
50
|
-
offset += 2;
|
|
51
|
-
buf.set(key, offset);
|
|
52
|
-
offset += key.length;
|
|
53
|
-
view.setUint16(offset, val.length);
|
|
54
|
-
offset += 2;
|
|
55
|
-
buf.set(val, offset);
|
|
56
|
-
offset += val.length;
|
|
57
|
-
}
|
|
58
|
-
// body
|
|
59
|
-
view.setUint32(offset, req.body.length);
|
|
60
|
-
offset += 4;
|
|
61
|
-
buf.set(req.body, offset);
|
|
62
|
-
return buf;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Decode binary data into a SerializedHttpRequest.
|
|
66
|
-
*/
|
|
67
|
-
export function decodeHttpRequest(data) {
|
|
68
|
-
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
69
|
-
let offset = 0;
|
|
70
|
-
// requestId
|
|
71
|
-
const requestIdLen = view.getUint16(offset);
|
|
72
|
-
offset += 2;
|
|
73
|
-
const requestId = decoder.decode(data.slice(offset, offset + requestIdLen));
|
|
74
|
-
offset += requestIdLen;
|
|
75
|
-
// method
|
|
76
|
-
const methodLen = view.getUint8(offset);
|
|
77
|
-
offset += 1;
|
|
78
|
-
const method = decoder.decode(data.slice(offset, offset + methodLen));
|
|
79
|
-
offset += methodLen;
|
|
80
|
-
// path
|
|
81
|
-
const pathLen = view.getUint16(offset);
|
|
82
|
-
offset += 2;
|
|
83
|
-
const path = decoder.decode(data.slice(offset, offset + pathLen));
|
|
84
|
-
offset += pathLen;
|
|
85
|
-
// headers
|
|
86
|
-
const headerCount = view.getUint16(offset);
|
|
87
|
-
offset += 2;
|
|
88
|
-
const headers = {};
|
|
89
|
-
for (let i = 0; i < headerCount; i++) {
|
|
90
|
-
const keyLen = view.getUint16(offset);
|
|
91
|
-
offset += 2;
|
|
92
|
-
const key = decoder.decode(data.slice(offset, offset + keyLen));
|
|
93
|
-
offset += keyLen;
|
|
94
|
-
const valLen = view.getUint16(offset);
|
|
95
|
-
offset += 2;
|
|
96
|
-
const val = decoder.decode(data.slice(offset, offset + valLen));
|
|
97
|
-
offset += valLen;
|
|
98
|
-
headers[key] = val;
|
|
99
|
-
}
|
|
100
|
-
// body
|
|
101
|
-
const bodyLen = view.getUint32(offset);
|
|
102
|
-
offset += 4;
|
|
103
|
-
const body = data.slice(offset, offset + bodyLen);
|
|
104
|
-
return { requestId, method, path, headers, body };
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Encode an HTTP response into binary format:
|
|
108
|
-
* [requestIdLen:2][requestId:N][statusCode:2]
|
|
109
|
-
* [headerCount:2][for each header: keyLen:2, key:N, valLen:2, val:N]
|
|
110
|
-
* [bodyLen:4][body:N]
|
|
111
|
-
*/
|
|
112
|
-
export function encodeHttpResponse(resp) {
|
|
113
|
-
if (!resp.body) {
|
|
114
|
-
resp = { ...resp, body: new Uint8Array(0) };
|
|
115
|
-
}
|
|
116
|
-
const requestIdBytes = encoder.encode(resp.requestId);
|
|
117
|
-
const headerEntries = Object.entries(resp.headers);
|
|
118
|
-
const encodedHeaders = [];
|
|
119
|
-
let headersSize = 0;
|
|
120
|
-
for (const [key, val] of headerEntries) {
|
|
121
|
-
const keyBytes = encoder.encode(key);
|
|
122
|
-
const valBytes = encoder.encode(val);
|
|
123
|
-
encodedHeaders.push({ key: keyBytes, val: valBytes });
|
|
124
|
-
headersSize += 2 + keyBytes.length + 2 + valBytes.length;
|
|
125
|
-
}
|
|
126
|
-
const totalSize = 2 + requestIdBytes.length +
|
|
127
|
-
2 +
|
|
128
|
-
2 + headersSize +
|
|
129
|
-
4 + resp.body.length;
|
|
130
|
-
const buf = new Uint8Array(totalSize);
|
|
131
|
-
const view = new DataView(buf.buffer);
|
|
132
|
-
let offset = 0;
|
|
133
|
-
// requestId
|
|
134
|
-
view.setUint16(offset, requestIdBytes.length);
|
|
135
|
-
offset += 2;
|
|
136
|
-
buf.set(requestIdBytes, offset);
|
|
137
|
-
offset += requestIdBytes.length;
|
|
138
|
-
// statusCode
|
|
139
|
-
view.setUint16(offset, resp.statusCode);
|
|
140
|
-
offset += 2;
|
|
141
|
-
// headers
|
|
142
|
-
view.setUint16(offset, headerEntries.length);
|
|
143
|
-
offset += 2;
|
|
144
|
-
for (const { key, val } of encodedHeaders) {
|
|
145
|
-
view.setUint16(offset, key.length);
|
|
146
|
-
offset += 2;
|
|
147
|
-
buf.set(key, offset);
|
|
148
|
-
offset += key.length;
|
|
149
|
-
view.setUint16(offset, val.length);
|
|
150
|
-
offset += 2;
|
|
151
|
-
buf.set(val, offset);
|
|
152
|
-
offset += val.length;
|
|
153
|
-
}
|
|
154
|
-
// body
|
|
155
|
-
view.setUint32(offset, resp.body.length);
|
|
156
|
-
offset += 4;
|
|
157
|
-
buf.set(resp.body, offset);
|
|
158
|
-
return buf;
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Decode binary data into a SerializedHttpResponse.
|
|
162
|
-
*/
|
|
163
|
-
export function decodeHttpResponse(data) {
|
|
164
|
-
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
165
|
-
let offset = 0;
|
|
166
|
-
// requestId
|
|
167
|
-
const requestIdLen = view.getUint16(offset);
|
|
168
|
-
offset += 2;
|
|
169
|
-
const requestId = decoder.decode(data.slice(offset, offset + requestIdLen));
|
|
170
|
-
offset += requestIdLen;
|
|
171
|
-
// statusCode
|
|
172
|
-
const statusCode = view.getUint16(offset);
|
|
173
|
-
offset += 2;
|
|
174
|
-
// headers
|
|
175
|
-
const headerCount = view.getUint16(offset);
|
|
176
|
-
offset += 2;
|
|
177
|
-
const headers = {};
|
|
178
|
-
for (let i = 0; i < headerCount; i++) {
|
|
179
|
-
const keyLen = view.getUint16(offset);
|
|
180
|
-
offset += 2;
|
|
181
|
-
const key = decoder.decode(data.slice(offset, offset + keyLen));
|
|
182
|
-
offset += keyLen;
|
|
183
|
-
const valLen = view.getUint16(offset);
|
|
184
|
-
offset += 2;
|
|
185
|
-
const val = decoder.decode(data.slice(offset, offset + valLen));
|
|
186
|
-
offset += valLen;
|
|
187
|
-
headers[key] = val;
|
|
188
|
-
}
|
|
189
|
-
// body
|
|
190
|
-
const bodyLen = view.getUint32(offset);
|
|
191
|
-
offset += 4;
|
|
192
|
-
const body = data.slice(offset, offset + bodyLen);
|
|
193
|
-
return { requestId, statusCode, headers, body };
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Encode an HTTP response chunk into binary format:
|
|
197
|
-
* [requestIdLen:2][requestId:N][done:1][dataLen:4][data:N]
|
|
198
|
-
*/
|
|
199
|
-
export function encodeHttpResponseChunk(chunk) {
|
|
200
|
-
const requestIdBytes = encoder.encode(chunk.requestId);
|
|
201
|
-
const totalSize = 2 + requestIdBytes.length +
|
|
202
|
-
1 +
|
|
203
|
-
4 + chunk.data.length;
|
|
204
|
-
const buf = new Uint8Array(totalSize);
|
|
205
|
-
const view = new DataView(buf.buffer);
|
|
206
|
-
let offset = 0;
|
|
207
|
-
// requestId
|
|
208
|
-
view.setUint16(offset, requestIdBytes.length);
|
|
209
|
-
offset += 2;
|
|
210
|
-
buf.set(requestIdBytes, offset);
|
|
211
|
-
offset += requestIdBytes.length;
|
|
212
|
-
// done
|
|
213
|
-
view.setUint8(offset, chunk.done ? 1 : 0);
|
|
214
|
-
offset += 1;
|
|
215
|
-
// data
|
|
216
|
-
view.setUint32(offset, chunk.data.length);
|
|
217
|
-
offset += 4;
|
|
218
|
-
buf.set(chunk.data, offset);
|
|
219
|
-
return buf;
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Decode binary data into a SerializedHttpResponseChunk.
|
|
223
|
-
*/
|
|
224
|
-
export function decodeHttpResponseChunk(data) {
|
|
225
|
-
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
226
|
-
let offset = 0;
|
|
227
|
-
// requestId
|
|
228
|
-
const requestIdLen = view.getUint16(offset);
|
|
229
|
-
offset += 2;
|
|
230
|
-
const requestId = decoder.decode(data.slice(offset, offset + requestIdLen));
|
|
231
|
-
offset += requestIdLen;
|
|
232
|
-
// done
|
|
233
|
-
const done = view.getUint8(offset) === 1;
|
|
234
|
-
offset += 1;
|
|
235
|
-
// data
|
|
236
|
-
const dataLen = view.getUint32(offset);
|
|
237
|
-
offset += 4;
|
|
238
|
-
const chunkData = data.slice(offset, offset + dataLen);
|
|
239
|
-
return { requestId, data: chunkData, done };
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* Encode an HTTP request chunk into binary format:
|
|
243
|
-
* [requestIdLen:2][requestId:N][done:1][dataLen:4][data:N]
|
|
244
|
-
*/
|
|
245
|
-
export function encodeHttpRequestChunk(chunk) {
|
|
246
|
-
const requestIdBytes = encoder.encode(chunk.requestId);
|
|
247
|
-
const totalSize = 2 + requestIdBytes.length +
|
|
248
|
-
1 +
|
|
249
|
-
4 + chunk.data.length;
|
|
250
|
-
const buf = new Uint8Array(totalSize);
|
|
251
|
-
const view = new DataView(buf.buffer);
|
|
252
|
-
let offset = 0;
|
|
253
|
-
view.setUint16(offset, requestIdBytes.length);
|
|
254
|
-
offset += 2;
|
|
255
|
-
buf.set(requestIdBytes, offset);
|
|
256
|
-
offset += requestIdBytes.length;
|
|
257
|
-
view.setUint8(offset, chunk.done ? 1 : 0);
|
|
258
|
-
offset += 1;
|
|
259
|
-
view.setUint32(offset, chunk.data.length);
|
|
260
|
-
offset += 4;
|
|
261
|
-
buf.set(chunk.data, offset);
|
|
262
|
-
return buf;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Decode binary data into a SerializedHttpRequestChunk.
|
|
266
|
-
*/
|
|
267
|
-
export function decodeHttpRequestChunk(data) {
|
|
268
|
-
const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
|
|
269
|
-
let offset = 0;
|
|
270
|
-
const requestIdLen = view.getUint16(offset);
|
|
271
|
-
offset += 2;
|
|
272
|
-
const requestId = decoder.decode(data.slice(offset, offset + requestIdLen));
|
|
273
|
-
offset += requestIdLen;
|
|
274
|
-
const done = view.getUint8(offset) === 1;
|
|
275
|
-
offset += 1;
|
|
276
|
-
const dataLen = view.getUint32(offset);
|
|
277
|
-
offset += 4;
|
|
278
|
-
const chunkData = data.slice(offset, offset + dataLen);
|
|
279
|
-
return { requestId, data: chunkData, done };
|
|
280
|
-
}
|
|
1
|
+
// Moved to @antseed/protocol; re-exported here for compatibility.
|
|
2
|
+
export * from '@antseed/protocol/request-codec';
|
|
281
3
|
//# sourceMappingURL=request-codec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-codec.js","sourceRoot":"","sources":["../../src/proxy/request-codec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"request-codec.js","sourceRoot":"","sources":["../../src/proxy/request-codec.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,cAAc,iCAAiC,CAAC"}
|
|
@@ -11,6 +11,8 @@ import { ProxyMux } from './proxy/proxy-mux.js';
|
|
|
11
11
|
import type { PeerConnection } from './p2p/connection-manager.js';
|
|
12
12
|
import type { SerializedHttpRequest } from './types/http.js';
|
|
13
13
|
import { VerificationMux } from './verification/verification-mux.js';
|
|
14
|
+
import type { UnitBillingContext, UnitBillingModelV1 } from './types/billing.js';
|
|
15
|
+
type ProviderTokenPricing = import('./interfaces/seller-provider.js').ProviderTokenPricingUsdPerMillion;
|
|
14
16
|
export interface SellerRequestHandlerDeps {
|
|
15
17
|
identity: Identity;
|
|
16
18
|
providers: Provider[];
|
|
@@ -47,14 +49,18 @@ export declare class SellerRequestHandler {
|
|
|
47
49
|
};
|
|
48
50
|
private _handleModelsRequest;
|
|
49
51
|
matchProvider(request: SerializedHttpRequest): Provider | undefined;
|
|
50
|
-
resolveProviderPricing(provider: Provider, request: SerializedHttpRequest):
|
|
52
|
+
resolveProviderPricing(provider: Provider, request: SerializedHttpRequest): ProviderTokenPricing;
|
|
53
|
+
resolveProviderUnitBillingModel(provider: Provider, context: UnitBillingContext): UnitBillingModelV1 | undefined;
|
|
51
54
|
adjustProviderLoad(providerName: string, delta: number): void;
|
|
52
55
|
clearMetadataRefreshTimer(): void;
|
|
53
|
-
private _isFreePricing;
|
|
54
56
|
private _isJsonRequest;
|
|
55
57
|
private _extractRequestedService;
|
|
56
58
|
private _extractRequestedProvider;
|
|
57
|
-
private
|
|
59
|
+
private _captureSellerBillingContext;
|
|
60
|
+
private _selectSellerProtocolForService;
|
|
61
|
+
private _estimateUnitRequestCostUsdc;
|
|
62
|
+
private _estimateRequestCostUsdc;
|
|
63
|
+
private _estimateMaxTokenRequestCostUsdc;
|
|
58
64
|
private _extractMaxOutputTokens;
|
|
59
65
|
private _parsePositiveInteger;
|
|
60
66
|
private _executeRequest;
|
|
@@ -63,4 +69,5 @@ export declare class SellerRequestHandler {
|
|
|
63
69
|
private _scheduleMetadataRefresh;
|
|
64
70
|
private _sendResponseAuthBestEffort;
|
|
65
71
|
}
|
|
72
|
+
export {};
|
|
66
73
|
//# sourceMappingURL=seller-request-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seller-request-handler.d.ts","sourceRoot":"","sources":["../src/seller-request-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EACV,QAAQ,EAET,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAuB,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"seller-request-handler.d.ts","sourceRoot":"","sources":["../src/seller-request-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import { ANTSEED_ATTEST_PATH } from './interfaces/plugin.js';
|
|
2
2
|
import { ProxyMux } from './proxy/proxy-mux.js';
|
|
3
|
-
import {
|
|
4
|
-
import { computeCostUsdc, estimateTokensFromBytes } from './payments/pricing.js';
|
|
3
|
+
import { computeCostUsdc, estimateTokensFromBytes, } from './payments/pricing.js';
|
|
5
4
|
import { debugLog, debugWarn } from './utils/debug.js';
|
|
6
5
|
import { CONNECTION_CAPABILITY_RESPONSE_AUTH_V1, PAYMENT_CODE_CHANNEL_EXHAUSTED } from './types/protocol.js';
|
|
7
6
|
import { createResponseAuthPayload } from './verification/response-auth.js';
|
|
8
7
|
import { hasJsonContentType, tryParseJsonObject } from './utils/json-codec.js';
|
|
8
|
+
import { captureUnitBillingContext, computeFinalUnitBilling, evaluateUnitBilling, isFreeUnitBillingModel } from './billing/unit.js';
|
|
9
|
+
import { detectRequestServiceApiProtocol, extractRequestBodyFields, selectTargetProtocolForRequest, } from '@antseed/api-adapter';
|
|
10
|
+
import { parseResponseUsage } from './utils/response-usage.js';
|
|
11
|
+
function isZeroTokenPricing(pricing) {
|
|
12
|
+
return pricing.inputUsdPerMillion === 0
|
|
13
|
+
&& pricing.outputUsdPerMillion === 0
|
|
14
|
+
&& (pricing.cachedInputUsdPerMillion == null || pricing.cachedInputUsdPerMillion === 0);
|
|
15
|
+
}
|
|
9
16
|
/** Debounce interval for metadata refresh after load changes. */
|
|
10
17
|
const METADATA_REFRESH_DEBOUNCE_MS = 200;
|
|
11
18
|
/** Time to wait for a catch-up SpendingAuth before returning 402. */
|
|
@@ -164,7 +171,12 @@ export class SellerRequestHandler {
|
|
|
164
171
|
return;
|
|
165
172
|
}
|
|
166
173
|
const requestPricing = this.resolveProviderPricing(provider, request);
|
|
167
|
-
const
|
|
174
|
+
const requestBilling = this._captureSellerBillingContext(provider, request);
|
|
175
|
+
const unitBillingModel = requestBilling
|
|
176
|
+
? this.resolveProviderUnitBillingModel(provider, requestBilling.context)
|
|
177
|
+
: undefined;
|
|
178
|
+
const isFreeService = isZeroTokenPricing(requestPricing)
|
|
179
|
+
&& (!unitBillingModel || isFreeUnitBillingModel(unitBillingModel));
|
|
168
180
|
// Reject with 402 if no active payment session and channels client is configured.
|
|
169
181
|
const spm = this._deps.sellerPaymentManager;
|
|
170
182
|
const spmAuthorized = spm?.hasSession(buyerPeerId) ?? false;
|
|
@@ -262,7 +274,29 @@ export class SellerRequestHandler {
|
|
|
262
274
|
debugLog(`[SellerHandler] Caught up before 402 for ${buyerPeerId.slice(0, 12)}... (spent=${spent} accepted=${accepted})`);
|
|
263
275
|
}
|
|
264
276
|
}
|
|
265
|
-
|
|
277
|
+
let requestCostEstimate = null;
|
|
278
|
+
try {
|
|
279
|
+
requestCostEstimate = requestBilling
|
|
280
|
+
? this._estimateRequestCostUsdc(request, requestBilling, requestPricing, unitBillingModel)
|
|
281
|
+
: null;
|
|
282
|
+
}
|
|
283
|
+
catch (err) {
|
|
284
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
285
|
+
debugWarn(`[SellerHandler] Rejecting unbillable request: ${message}`);
|
|
286
|
+
mux.sendProxyResponse({
|
|
287
|
+
requestId: request.requestId,
|
|
288
|
+
statusCode: 503,
|
|
289
|
+
headers: { 'content-type': 'application/json' },
|
|
290
|
+
body: new TextEncoder().encode(JSON.stringify({
|
|
291
|
+
error: {
|
|
292
|
+
message: `Seller billing configuration cannot price this request: ${message}`,
|
|
293
|
+
type: 'billing_configuration_error',
|
|
294
|
+
code: 'billing_tier_unmatched',
|
|
295
|
+
},
|
|
296
|
+
})),
|
|
297
|
+
});
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
266
300
|
const estimatedRequestCost = requestCostEstimate?.cost ?? 0n;
|
|
267
301
|
const remainingLockedReserve = reserveMax > spent ? reserveMax - spent : 0n;
|
|
268
302
|
const reserveEstimateOverdraft = this._deps.reserveEstimateOverdraftUsdc;
|
|
@@ -375,6 +409,8 @@ export class SellerRequestHandler {
|
|
|
375
409
|
let streamAuthStatusCode = 0;
|
|
376
410
|
let streamAuthHeaders = null;
|
|
377
411
|
let responseUsage = { inputTokens: 0, outputTokens: 0, freshInputTokens: 0, cachedInputTokens: 0 };
|
|
412
|
+
let billingUsageReport = null;
|
|
413
|
+
let unitCostUsdc = 0n;
|
|
378
414
|
// Hold the channel open for the whole billable span — provider call,
|
|
379
415
|
// spend recording, and NeedAuth — so a buyer-requested close can't land
|
|
380
416
|
// between serving the request and claiming its cost.
|
|
@@ -414,7 +450,15 @@ export class SellerRequestHandler {
|
|
|
414
450
|
else {
|
|
415
451
|
debugLog(`[SellerHandler] Provider responded: status=${statusCode} (${Date.now() - startTime}ms, ${responseBody.length}b)`);
|
|
416
452
|
}
|
|
417
|
-
|
|
453
|
+
if (requestBilling && unitBillingModel) {
|
|
454
|
+
const unitBilling = computeFinalUnitBilling(unitBillingModel, requestBilling.context, response, requestBilling.requestFacts);
|
|
455
|
+
responseUsage = unitBilling.tokenUsage;
|
|
456
|
+
billingUsageReport = unitBilling.billingUsage;
|
|
457
|
+
unitCostUsdc = unitBilling.costUsdc;
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
responseUsage = parseResponseUsage(response.body);
|
|
461
|
+
}
|
|
418
462
|
debugLog(`[SellerHandler] Raw provider usage: in=${responseUsage.inputTokens} fresh=${responseUsage.freshInputTokens} cached=${responseUsage.cachedInputTokens} out=${responseUsage.outputTokens}`);
|
|
419
463
|
if (!streamedResponseStarted) {
|
|
420
464
|
mux.sendProxyResponse(response);
|
|
@@ -466,6 +510,12 @@ export class SellerRequestHandler {
|
|
|
466
510
|
mux.sendProxyResponse(responseForAuth);
|
|
467
511
|
}
|
|
468
512
|
}
|
|
513
|
+
if (requestBilling && unitBillingModel && responseForAuth && billingUsageReport === null) {
|
|
514
|
+
const finalBilling = computeFinalUnitBilling(unitBillingModel, requestBilling.context, responseForAuth, requestBilling.requestFacts);
|
|
515
|
+
responseUsage = finalBilling.tokenUsage;
|
|
516
|
+
billingUsageReport = finalBilling.billingUsage;
|
|
517
|
+
unitCostUsdc = finalBilling.costUsdc;
|
|
518
|
+
}
|
|
469
519
|
// Record metering
|
|
470
520
|
const latencyMs = Date.now() - startTime;
|
|
471
521
|
if (this._deps.sessionTracker) {
|
|
@@ -486,7 +536,8 @@ export class SellerRequestHandler {
|
|
|
486
536
|
// The buyer validates the cost independently and responds with SpendingAuth.
|
|
487
537
|
if (!isFreeService && spm?.hasSession(buyerPeerId)) {
|
|
488
538
|
const usage = responseUsage;
|
|
489
|
-
const
|
|
539
|
+
const tokenCostUsdc = computeCostUsdc(usage.freshInputTokens, usage.outputTokens, requestPricing, usage.cachedInputTokens);
|
|
540
|
+
const costUsdc = tokenCostUsdc + unitCostUsdc;
|
|
490
541
|
const session = spm.getChannelByPeer(buyerPeerId);
|
|
491
542
|
if (session) {
|
|
492
543
|
spm.recordSpend(session.sessionId, costUsdc);
|
|
@@ -507,6 +558,7 @@ export class SellerRequestHandler {
|
|
|
507
558
|
cachedInputTokens: String(usage.cachedInputTokens),
|
|
508
559
|
freshInputTokens: String(usage.freshInputTokens),
|
|
509
560
|
service: this._extractRequestedService(request) ?? undefined,
|
|
561
|
+
billingUsage: billingUsageReport ?? undefined,
|
|
510
562
|
}, buyerPeerId, 'post-response');
|
|
511
563
|
}
|
|
512
564
|
}
|
|
@@ -607,6 +659,9 @@ export class SellerRequestHandler {
|
|
|
607
659
|
}
|
|
608
660
|
return provider.pricing.defaults;
|
|
609
661
|
}
|
|
662
|
+
resolveProviderUnitBillingModel(provider, context) {
|
|
663
|
+
return provider.serviceUnitBillingModels?.[context.service]?.[context.serviceApiProtocol];
|
|
664
|
+
}
|
|
610
665
|
// -- Load tracking --
|
|
611
666
|
adjustProviderLoad(providerName, delta) {
|
|
612
667
|
const nextLoad = Math.max(0, (this._providerLoadCounts.get(providerName) ?? 0) + delta);
|
|
@@ -626,20 +681,11 @@ export class SellerRequestHandler {
|
|
|
626
681
|
this._providerLoadCounts.clear();
|
|
627
682
|
}
|
|
628
683
|
// -- Private helpers --
|
|
629
|
-
_isFreePricing(pricing) {
|
|
630
|
-
const cachedPrice = pricing.cachedInputUsdPerMillion ?? pricing.inputUsdPerMillion;
|
|
631
|
-
return pricing.inputUsdPerMillion === 0
|
|
632
|
-
&& pricing.outputUsdPerMillion === 0
|
|
633
|
-
&& cachedPrice === 0;
|
|
634
|
-
}
|
|
635
684
|
_isJsonRequest(request) {
|
|
636
685
|
return hasJsonContentType(request.headers);
|
|
637
686
|
}
|
|
638
687
|
_extractRequestedService(request) {
|
|
639
|
-
|
|
640
|
-
return null;
|
|
641
|
-
}
|
|
642
|
-
const body = tryParseJsonObject(request.body);
|
|
688
|
+
const body = extractRequestBodyFields(request.headers, request.body);
|
|
643
689
|
const service = body?.["service"] ?? body?.["model"];
|
|
644
690
|
if (typeof service !== "string" || service.trim().length === 0) {
|
|
645
691
|
return null;
|
|
@@ -653,7 +699,56 @@ export class SellerRequestHandler {
|
|
|
653
699
|
.filter((value) => value.length > 0);
|
|
654
700
|
return providers[0] ?? null;
|
|
655
701
|
}
|
|
656
|
-
|
|
702
|
+
_captureSellerBillingContext(provider, request) {
|
|
703
|
+
const service = this._extractRequestedService(request);
|
|
704
|
+
if (!service)
|
|
705
|
+
return null;
|
|
706
|
+
return captureUnitBillingContext({
|
|
707
|
+
sellerPeerId: this._deps.identity.peerId,
|
|
708
|
+
provider: provider.name,
|
|
709
|
+
service,
|
|
710
|
+
serviceApiProtocol: this._selectSellerProtocolForService(provider, service, request),
|
|
711
|
+
request,
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
_selectSellerProtocolForService(provider, service, request) {
|
|
715
|
+
const protocols = provider.serviceApiProtocols?.[service];
|
|
716
|
+
const billingProtocols = Object.keys(provider.serviceUnitBillingModels?.[service] ?? {});
|
|
717
|
+
const candidates = protocols ?? billingProtocols;
|
|
718
|
+
const requestProtocol = detectRequestServiceApiProtocol(request);
|
|
719
|
+
const selected = selectTargetProtocolForRequest(requestProtocol, candidates);
|
|
720
|
+
if (selected)
|
|
721
|
+
return selected.targetProtocol;
|
|
722
|
+
if (protocols?.[0])
|
|
723
|
+
return protocols[0];
|
|
724
|
+
return billingProtocols[0] ?? "openai-chat-completions";
|
|
725
|
+
}
|
|
726
|
+
_estimateUnitRequestCostUsdc(requestBilling, model) {
|
|
727
|
+
const usage = {
|
|
728
|
+
units: {
|
|
729
|
+
output_images: Math.floor(requestBilling.requestUsage.units.output_images ?? 0),
|
|
730
|
+
},
|
|
731
|
+
};
|
|
732
|
+
return {
|
|
733
|
+
cost: evaluateUnitBilling(model, requestBilling.context, usage),
|
|
734
|
+
inputTokens: 0,
|
|
735
|
+
maxOutputTokens: 0,
|
|
736
|
+
};
|
|
737
|
+
}
|
|
738
|
+
_estimateRequestCostUsdc(request, requestBilling, pricing, unitModel) {
|
|
739
|
+
const tokenEstimate = this._estimateMaxTokenRequestCostUsdc(request, pricing);
|
|
740
|
+
const unitEstimate = unitModel
|
|
741
|
+
? this._estimateUnitRequestCostUsdc(requestBilling, unitModel)
|
|
742
|
+
: null;
|
|
743
|
+
if (!tokenEstimate && !unitEstimate)
|
|
744
|
+
return null;
|
|
745
|
+
return {
|
|
746
|
+
cost: (tokenEstimate?.cost ?? 0n) + (unitEstimate?.cost ?? 0n),
|
|
747
|
+
inputTokens: tokenEstimate?.inputTokens ?? unitEstimate?.inputTokens ?? 0,
|
|
748
|
+
maxOutputTokens: tokenEstimate?.maxOutputTokens ?? unitEstimate?.maxOutputTokens ?? 0,
|
|
749
|
+
};
|
|
750
|
+
}
|
|
751
|
+
_estimateMaxTokenRequestCostUsdc(request, pricing) {
|
|
657
752
|
if (!this._isJsonRequest(request)) {
|
|
658
753
|
return null;
|
|
659
754
|
}
|