@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,10 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export type { TokenUsage };
|
|
3
|
-
export type ResponseUsage = TokenUsage;
|
|
4
|
-
/**
|
|
5
|
-
* Parse actual token usage from an LLM provider response body.
|
|
6
|
-
* Handles both JSON and SSE (streaming) responses. Returns zeros
|
|
7
|
-
* if usage data is not found.
|
|
8
|
-
*/
|
|
9
|
-
export declare function parseResponseUsage(body: Uint8Array): ResponseUsage;
|
|
1
|
+
export * from '@antseed/buyer-core/response-usage';
|
|
10
2
|
//# sourceMappingURL=response-usage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-usage.d.ts","sourceRoot":"","sources":["../../src/utils/response-usage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"response-usage.d.ts","sourceRoot":"","sources":["../../src/utils/response-usage.ts"],"names":[],"mappings":"AACA,cAAc,oCAAoC,CAAC"}
|
|
@@ -1,40 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* Parse actual token usage from an LLM provider response body.
|
|
4
|
-
* Handles both JSON and SSE (streaming) responses. Returns zeros
|
|
5
|
-
* if usage data is not found.
|
|
6
|
-
*/
|
|
7
|
-
export function parseResponseUsage(body) {
|
|
8
|
-
const parsed = parseJsonObject(body);
|
|
9
|
-
if (parsed) {
|
|
10
|
-
return extractUsage(parsed);
|
|
11
|
-
}
|
|
12
|
-
const text = new TextDecoder().decode(body);
|
|
13
|
-
let inputTokens = 0;
|
|
14
|
-
let outputTokens = 0;
|
|
15
|
-
let freshInputTokens = 0;
|
|
16
|
-
let cachedInputTokens = 0;
|
|
17
|
-
for (const line of text.split('\n')) {
|
|
18
|
-
const trimmed = line.trim();
|
|
19
|
-
if (!trimmed.startsWith('data:'))
|
|
20
|
-
continue;
|
|
21
|
-
const payload = trimmed.slice(5).trim();
|
|
22
|
-
if (!payload || payload === '[DONE]')
|
|
23
|
-
continue;
|
|
24
|
-
try {
|
|
25
|
-
const event = JSON.parse(payload);
|
|
26
|
-
const usage = extractUsage(event);
|
|
27
|
-
if (usage.inputTokens > 0)
|
|
28
|
-
inputTokens = Math.max(inputTokens, usage.inputTokens);
|
|
29
|
-
if (usage.outputTokens > 0)
|
|
30
|
-
outputTokens = Math.max(outputTokens, usage.outputTokens);
|
|
31
|
-
if (usage.freshInputTokens > 0)
|
|
32
|
-
freshInputTokens = Math.max(freshInputTokens, usage.freshInputTokens);
|
|
33
|
-
if (usage.cachedInputTokens > 0)
|
|
34
|
-
cachedInputTokens = Math.max(cachedInputTokens, usage.cachedInputTokens);
|
|
35
|
-
}
|
|
36
|
-
catch { /* skip non-JSON lines */ }
|
|
37
|
-
}
|
|
38
|
-
return { inputTokens, outputTokens, freshInputTokens, cachedInputTokens };
|
|
39
|
-
}
|
|
1
|
+
// Moved to @antseed/buyer-core; re-exported for compatibility.
|
|
2
|
+
export * from '@antseed/buyer-core/response-usage';
|
|
40
3
|
//# sourceMappingURL=response-usage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-usage.js","sourceRoot":"","sources":["../../src/utils/response-usage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"response-usage.js","sourceRoot":"","sources":["../../src/utils/response-usage.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,cAAc,oCAAoC,CAAC"}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function encodeResponseAuth(payload: ResponseAuthPayload): Uint8Array;
|
|
3
|
-
export declare function decodeResponseAuth(data: Uint8Array): ResponseAuthPayload;
|
|
1
|
+
export * from '@antseed/buyer-core/verification-codec';
|
|
4
2
|
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/verification/codec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/verification/codec.ts"],"names":[],"mappings":"AACA,cAAc,wCAAwC,CAAC"}
|
|
@@ -1,38 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const MAX_PAYLOAD_SIZE = 64 * 1024;
|
|
4
|
-
function parseVerificationJson(data) {
|
|
5
|
-
return parseJsonObject(data, {
|
|
6
|
-
maxBytes: MAX_PAYLOAD_SIZE,
|
|
7
|
-
payloadName: 'Verification payload',
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
export function encodeResponseAuth(payload) {
|
|
11
|
-
return encoder.encode(JSON.stringify(payload));
|
|
12
|
-
}
|
|
13
|
-
export function decodeResponseAuth(data) {
|
|
14
|
-
const obj = parseVerificationJson(data);
|
|
15
|
-
const version = obj.version;
|
|
16
|
-
if (version !== 1) {
|
|
17
|
-
throw new Error(`Unsupported response auth version: ${String(version)}`);
|
|
18
|
-
}
|
|
19
|
-
const result = {
|
|
20
|
-
version,
|
|
21
|
-
requestId: requireStringField(obj, 'requestId'),
|
|
22
|
-
buyerPeerId: requireStringField(obj, 'buyerPeerId'),
|
|
23
|
-
sellerPeerId: requireStringField(obj, 'sellerPeerId'),
|
|
24
|
-
advertisedService: requireStringField(obj, 'advertisedService'),
|
|
25
|
-
provider: requireStringField(obj, 'provider'),
|
|
26
|
-
statusCode: requireFiniteNumberField(obj, 'statusCode'),
|
|
27
|
-
requestHash: requireStringField(obj, 'requestHash'),
|
|
28
|
-
responseHash: requireStringField(obj, 'responseHash'),
|
|
29
|
-
responseStartedAt: requireFiniteNumberField(obj, 'responseStartedAt'),
|
|
30
|
-
responseCompletedAt: requireFiniteNumberField(obj, 'responseCompletedAt'),
|
|
31
|
-
signature: requireStringField(obj, 'signature'),
|
|
32
|
-
};
|
|
33
|
-
if (typeof obj.channelId === 'string' && obj.channelId.length > 0) {
|
|
34
|
-
result.channelId = obj.channelId;
|
|
35
|
-
}
|
|
36
|
-
return result;
|
|
37
|
-
}
|
|
1
|
+
// Moved to @antseed/buyer-core; re-exported for compatibility.
|
|
2
|
+
export * from '@antseed/buyer-core/verification-codec';
|
|
38
3
|
//# sourceMappingURL=codec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/verification/codec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/verification/codec.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,cAAc,wCAAwC,CAAC"}
|
|
@@ -1,31 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import type { ResponseAuthPayload } from '../types/protocol.js';
|
|
3
|
-
import type { SerializedHttpRequest, SerializedHttpResponse } from '../types/http.js';
|
|
4
|
-
export interface ResponseAuthInput {
|
|
5
|
-
request: SerializedHttpRequest;
|
|
6
|
-
response: SerializedHttpResponse;
|
|
7
|
-
buyerPeerId: string;
|
|
8
|
-
sellerPeerId: string;
|
|
9
|
-
advertisedService: string;
|
|
10
|
-
provider: string;
|
|
11
|
-
responseStartedAt: number;
|
|
12
|
-
responseCompletedAt: number;
|
|
13
|
-
channelId?: string | null;
|
|
14
|
-
}
|
|
15
|
-
export interface ResponseAuthVerificationExpected {
|
|
16
|
-
request: SerializedHttpRequest;
|
|
17
|
-
response: SerializedHttpResponse;
|
|
18
|
-
buyerPeerId: string;
|
|
19
|
-
sellerPeerId: string;
|
|
20
|
-
advertisedService: string;
|
|
21
|
-
channelId?: string | null;
|
|
22
|
-
}
|
|
23
|
-
export interface ResponseAuthVerificationResult {
|
|
24
|
-
valid: boolean;
|
|
25
|
-
reason?: string;
|
|
26
|
-
}
|
|
27
|
-
export declare function createResponseAuthPayload(input: ResponseAuthInput, signer: Wallet): ResponseAuthPayload;
|
|
28
|
-
export declare function verifyResponseAuth(payload: ResponseAuthPayload, expected: ResponseAuthVerificationExpected): ResponseAuthVerificationResult;
|
|
29
|
-
export declare function hashRequest(request: SerializedHttpRequest): string;
|
|
30
|
-
export declare function hashResponse(response: SerializedHttpResponse): string;
|
|
1
|
+
export * from '@antseed/buyer-core/response-auth';
|
|
31
2
|
//# sourceMappingURL=response-auth.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-auth.d.ts","sourceRoot":"","sources":["../../src/verification/response-auth.ts"],"names":[],"mappings":"AACA,
|
|
1
|
+
{"version":3,"file":"response-auth.d.ts","sourceRoot":"","sources":["../../src/verification/response-auth.ts"],"names":[],"mappings":"AACA,cAAc,mCAAmC,CAAC"}
|
|
@@ -1,111 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { bytesToHex, hexToBytes, signData, verifySignature } from '../p2p/identity.js';
|
|
4
|
-
import { encodeHttpRequest, encodeHttpResponse } from '../proxy/request-codec.js';
|
|
5
|
-
const RESPONSE_AUTH_DOMAIN = 'antseed-response-auth-v1';
|
|
6
|
-
export function createResponseAuthPayload(input, signer) {
|
|
7
|
-
const payload = {
|
|
8
|
-
version: 1,
|
|
9
|
-
requestId: input.request.requestId,
|
|
10
|
-
...(input.channelId ? { channelId: input.channelId } : {}),
|
|
11
|
-
buyerPeerId: normalizePeerId(input.buyerPeerId),
|
|
12
|
-
sellerPeerId: normalizePeerId(input.sellerPeerId),
|
|
13
|
-
advertisedService: input.advertisedService,
|
|
14
|
-
provider: input.provider,
|
|
15
|
-
statusCode: input.response.statusCode,
|
|
16
|
-
requestHash: hashRequest(input.request),
|
|
17
|
-
responseHash: hashResponse(input.response),
|
|
18
|
-
responseStartedAt: input.responseStartedAt,
|
|
19
|
-
responseCompletedAt: input.responseCompletedAt,
|
|
20
|
-
};
|
|
21
|
-
const signature = bytesToHex(signData(signer, buildResponseAuthSigningBytes(payload)));
|
|
22
|
-
return { ...payload, signature };
|
|
23
|
-
}
|
|
24
|
-
export function verifyResponseAuth(payload, expected) {
|
|
25
|
-
const expectedRequestHash = hashRequest(expected.request);
|
|
26
|
-
if (payload.requestHash !== expectedRequestHash) {
|
|
27
|
-
return { valid: false, reason: 'request_hash_mismatch' };
|
|
28
|
-
}
|
|
29
|
-
const expectedResponseHash = hashResponse(expected.response);
|
|
30
|
-
if (payload.responseHash !== expectedResponseHash) {
|
|
31
|
-
return { valid: false, reason: 'response_hash_mismatch' };
|
|
32
|
-
}
|
|
33
|
-
if (payload.requestId !== expected.request.requestId) {
|
|
34
|
-
return { valid: false, reason: 'request_id_mismatch' };
|
|
35
|
-
}
|
|
36
|
-
if (payload.statusCode !== expected.response.statusCode) {
|
|
37
|
-
return { valid: false, reason: 'status_code_mismatch' };
|
|
38
|
-
}
|
|
39
|
-
if (normalizePeerId(payload.buyerPeerId) !== normalizePeerId(expected.buyerPeerId)) {
|
|
40
|
-
return { valid: false, reason: 'buyer_peer_mismatch' };
|
|
41
|
-
}
|
|
42
|
-
if (normalizePeerId(payload.sellerPeerId) !== normalizePeerId(expected.sellerPeerId)) {
|
|
43
|
-
return { valid: false, reason: 'seller_peer_mismatch' };
|
|
44
|
-
}
|
|
45
|
-
if (payload.advertisedService !== expected.advertisedService) {
|
|
46
|
-
return { valid: false, reason: 'advertised_service_mismatch' };
|
|
47
|
-
}
|
|
48
|
-
if (expected.channelId && payload.channelId !== expected.channelId) {
|
|
49
|
-
return { valid: false, reason: 'channel_id_mismatch' };
|
|
50
|
-
}
|
|
51
|
-
const { signature: _signature, ...unsigned } = payload;
|
|
52
|
-
let validSignature = false;
|
|
53
|
-
try {
|
|
54
|
-
const signature = hexToBytes(payload.signature);
|
|
55
|
-
validSignature = verifySignature(normalizePeerId(expected.sellerPeerId), signature, buildResponseAuthSigningBytes(unsigned));
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
validSignature = false;
|
|
59
|
-
}
|
|
60
|
-
if (!validSignature) {
|
|
61
|
-
return { valid: false, reason: 'invalid_signature' };
|
|
62
|
-
}
|
|
63
|
-
return { valid: true };
|
|
64
|
-
}
|
|
65
|
-
export function hashRequest(request) {
|
|
66
|
-
return keccak256(encodeHttpRequest(request));
|
|
67
|
-
}
|
|
68
|
-
export function hashResponse(response) {
|
|
69
|
-
return keccak256(encodeHttpResponse(stripStreamingHeader(response)));
|
|
70
|
-
}
|
|
71
|
-
function buildResponseAuthSigningBytes(payload) {
|
|
72
|
-
const encoder = new TextEncoder();
|
|
73
|
-
const fields = [
|
|
74
|
-
RESPONSE_AUTH_DOMAIN,
|
|
75
|
-
String(payload.version),
|
|
76
|
-
payload.requestId,
|
|
77
|
-
payload.channelId ?? '',
|
|
78
|
-
normalizePeerId(payload.buyerPeerId),
|
|
79
|
-
normalizePeerId(payload.sellerPeerId),
|
|
80
|
-
payload.advertisedService,
|
|
81
|
-
payload.provider,
|
|
82
|
-
String(payload.statusCode),
|
|
83
|
-
payload.requestHash,
|
|
84
|
-
payload.responseHash,
|
|
85
|
-
String(payload.responseStartedAt),
|
|
86
|
-
String(payload.responseCompletedAt),
|
|
87
|
-
].map((field) => encoder.encode(field));
|
|
88
|
-
const totalLength = fields.reduce((sum, field) => sum + 4 + field.length, 0);
|
|
89
|
-
const out = new Uint8Array(totalLength);
|
|
90
|
-
const view = new DataView(out.buffer);
|
|
91
|
-
let offset = 0;
|
|
92
|
-
for (const field of fields) {
|
|
93
|
-
view.setUint32(offset, field.length);
|
|
94
|
-
offset += 4;
|
|
95
|
-
out.set(field, offset);
|
|
96
|
-
offset += field.length;
|
|
97
|
-
}
|
|
98
|
-
return out;
|
|
99
|
-
}
|
|
100
|
-
function stripStreamingHeader(response) {
|
|
101
|
-
if (response.headers[ANTSEED_STREAMING_RESPONSE_HEADER] !== '1') {
|
|
102
|
-
return response;
|
|
103
|
-
}
|
|
104
|
-
const headers = { ...response.headers };
|
|
105
|
-
delete headers[ANTSEED_STREAMING_RESPONSE_HEADER];
|
|
106
|
-
return { ...response, headers };
|
|
107
|
-
}
|
|
108
|
-
function normalizePeerId(peerId) {
|
|
109
|
-
return peerId.startsWith('0x') ? peerId.slice(2).toLowerCase() : peerId.toLowerCase();
|
|
110
|
-
}
|
|
1
|
+
// Moved to @antseed/buyer-core; re-exported for compatibility.
|
|
2
|
+
export * from '@antseed/buyer-core/response-auth';
|
|
111
3
|
//# sourceMappingURL=response-auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-auth.js","sourceRoot":"","sources":["../../src/verification/response-auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"response-auth.js","sourceRoot":"","sources":["../../src/verification/response-auth.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,cAAc,mCAAmC,CAAC"}
|
|
@@ -1,20 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import type { PeerConnection } from '../p2p/connection-manager.js';
|
|
3
|
-
export type VerificationMessageHandler<T> = (payload: T) => void | Promise<void>;
|
|
4
|
-
export declare class VerificationMux {
|
|
5
|
-
private readonly _connection;
|
|
6
|
-
private _messageIdCounter;
|
|
7
|
-
private _onResponseAuth?;
|
|
8
|
-
private readonly _pendingResponseAuths;
|
|
9
|
-
private readonly _bufferedResponseAuths;
|
|
10
|
-
constructor(connection: PeerConnection);
|
|
11
|
-
onResponseAuth(handler: VerificationMessageHandler<ResponseAuthPayload>): void;
|
|
12
|
-
sendResponseAuth(payload: ResponseAuthPayload): void;
|
|
13
|
-
waitForResponseAuth(requestId: string, timeoutMs?: number): Promise<ResponseAuthPayload>;
|
|
14
|
-
close(): void;
|
|
15
|
-
handleFrame(frame: FramedMessage): Promise<boolean>;
|
|
16
|
-
static isVerificationMessage(type: number): boolean;
|
|
17
|
-
private _bufferResponseAuth;
|
|
18
|
-
private _send;
|
|
19
|
-
}
|
|
1
|
+
export * from '@antseed/buyer-core/verification-mux';
|
|
20
2
|
//# sourceMappingURL=verification-mux.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-mux.d.ts","sourceRoot":"","sources":["../../src/verification/verification-mux.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verification-mux.d.ts","sourceRoot":"","sources":["../../src/verification/verification-mux.ts"],"names":[],"mappings":"AACA,cAAc,sCAAsC,CAAC"}
|
|
@@ -1,100 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { debugLog } from '../utils/debug.js';
|
|
4
|
-
import { decodeResponseAuth, encodeResponseAuth } from './codec.js';
|
|
5
|
-
const MESSAGE_TYPE_NAME = {
|
|
6
|
-
[MessageType.VerificationResponseAuth]: 'VerificationResponseAuth',
|
|
7
|
-
};
|
|
8
|
-
const MAX_BUFFERED_AUTHS = 256;
|
|
9
|
-
const DEFAULT_RESPONSE_AUTH_TIMEOUT_MS = 30_000;
|
|
10
|
-
export class VerificationMux {
|
|
11
|
-
_connection;
|
|
12
|
-
_messageIdCounter = 0;
|
|
13
|
-
_onResponseAuth;
|
|
14
|
-
_pendingResponseAuths = new Map();
|
|
15
|
-
_bufferedResponseAuths = new Map();
|
|
16
|
-
constructor(connection) {
|
|
17
|
-
this._connection = connection;
|
|
18
|
-
}
|
|
19
|
-
onResponseAuth(handler) {
|
|
20
|
-
this._onResponseAuth = handler;
|
|
21
|
-
}
|
|
22
|
-
sendResponseAuth(payload) {
|
|
23
|
-
this._send(MessageType.VerificationResponseAuth, encodeResponseAuth(payload));
|
|
24
|
-
}
|
|
25
|
-
waitForResponseAuth(requestId, timeoutMs = DEFAULT_RESPONSE_AUTH_TIMEOUT_MS) {
|
|
26
|
-
const buffered = this._bufferedResponseAuths.get(requestId);
|
|
27
|
-
if (buffered) {
|
|
28
|
-
this._bufferedResponseAuths.delete(requestId);
|
|
29
|
-
return Promise.resolve(buffered);
|
|
30
|
-
}
|
|
31
|
-
const existing = this._pendingResponseAuths.get(requestId);
|
|
32
|
-
if (existing)
|
|
33
|
-
return existing.promise;
|
|
34
|
-
let resolve;
|
|
35
|
-
let reject;
|
|
36
|
-
const timer = setTimeout(() => {
|
|
37
|
-
this._pendingResponseAuths.delete(requestId);
|
|
38
|
-
reject(new Error(`ResponseAuth timed out for request ${requestId}`));
|
|
39
|
-
}, Math.max(1, timeoutMs));
|
|
40
|
-
const promise = new Promise((res, rej) => {
|
|
41
|
-
resolve = res;
|
|
42
|
-
reject = rej;
|
|
43
|
-
});
|
|
44
|
-
this._pendingResponseAuths.set(requestId, { promise, resolve, reject, timer });
|
|
45
|
-
return promise;
|
|
46
|
-
}
|
|
47
|
-
close() {
|
|
48
|
-
for (const pending of this._pendingResponseAuths.values()) {
|
|
49
|
-
clearTimeout(pending.timer);
|
|
50
|
-
pending.reject(new Error('VerificationMux closed'));
|
|
51
|
-
}
|
|
52
|
-
this._pendingResponseAuths.clear();
|
|
53
|
-
this._bufferedResponseAuths.clear();
|
|
54
|
-
}
|
|
55
|
-
async handleFrame(frame) {
|
|
56
|
-
const name = MESSAGE_TYPE_NAME[frame.type];
|
|
57
|
-
if (!name)
|
|
58
|
-
return false;
|
|
59
|
-
debugLog(`[VerificationMux] ← recv ${name} (${frame.payload.length}b)`);
|
|
60
|
-
switch (frame.type) {
|
|
61
|
-
case MessageType.VerificationResponseAuth: {
|
|
62
|
-
const payload = decodeResponseAuth(frame.payload);
|
|
63
|
-
const pending = this._pendingResponseAuths.get(payload.requestId);
|
|
64
|
-
if (pending) {
|
|
65
|
-
clearTimeout(pending.timer);
|
|
66
|
-
this._pendingResponseAuths.delete(payload.requestId);
|
|
67
|
-
pending.resolve(payload);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
this._bufferResponseAuth(payload);
|
|
71
|
-
}
|
|
72
|
-
await this._onResponseAuth?.(payload);
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
default:
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
static isVerificationMessage(type) {
|
|
80
|
-
return type >= 0x80 && type <= 0x8f;
|
|
81
|
-
}
|
|
82
|
-
_bufferResponseAuth(payload) {
|
|
83
|
-
if (this._bufferedResponseAuths.size >= MAX_BUFFERED_AUTHS) {
|
|
84
|
-
const oldest = this._bufferedResponseAuths.keys().next().value;
|
|
85
|
-
if (oldest)
|
|
86
|
-
this._bufferedResponseAuths.delete(oldest);
|
|
87
|
-
}
|
|
88
|
-
this._bufferedResponseAuths.set(payload.requestId, payload);
|
|
89
|
-
}
|
|
90
|
-
_send(type, payload) {
|
|
91
|
-
debugLog(`[VerificationMux] → send ${MESSAGE_TYPE_NAME[type] ?? `0x${type.toString(16)}`} (${payload.length}b)`);
|
|
92
|
-
const frame = encodeFrame({
|
|
93
|
-
type,
|
|
94
|
-
messageId: this._messageIdCounter++ & 0xffffffff,
|
|
95
|
-
payload,
|
|
96
|
-
});
|
|
97
|
-
this._connection.send(frame);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
1
|
+
// Moved to @antseed/buyer-core; re-exported for compatibility.
|
|
2
|
+
export * from '@antseed/buyer-core/verification-mux';
|
|
100
3
|
//# sourceMappingURL=verification-mux.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-mux.js","sourceRoot":"","sources":["../../src/verification/verification-mux.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"verification-mux.js","sourceRoot":"","sources":["../../src/verification/verification-mux.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,cAAc,sCAAsC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antseed/node",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.107",
|
|
4
4
|
"description": "Antseed Network protocol SDK — P2P inference marketplace",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -49,7 +49,9 @@
|
|
|
49
49
|
"ethers": "~6.16.0",
|
|
50
50
|
"node-datachannel": "^0.7.0",
|
|
51
51
|
"tokenx": "^1.3.0",
|
|
52
|
-
"@antseed/api-adapter": "0.1.
|
|
52
|
+
"@antseed/api-adapter": "0.1.43",
|
|
53
|
+
"@antseed/buyer-core": "0.1.1",
|
|
54
|
+
"@antseed/protocol": "0.1.1"
|
|
53
55
|
},
|
|
54
56
|
"optionalDependencies": {
|
|
55
57
|
"keytar": "^7.9.0"
|