@antseed/node 0.2.26 → 0.2.28
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 +85 -11
- package/dist/buyer-request-handler.d.ts +41 -0
- package/dist/buyer-request-handler.d.ts.map +1 -0
- package/dist/buyer-request-handler.js +254 -0
- package/dist/buyer-request-handler.js.map +1 -0
- package/dist/discovery/announcer.d.ts +5 -2
- package/dist/discovery/announcer.d.ts.map +1 -1
- package/dist/discovery/announcer.js +11 -14
- package/dist/discovery/announcer.js.map +1 -1
- package/dist/discovery/index.d.ts +0 -2
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +0 -2
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/metadata-codec.d.ts +2 -2
- package/dist/discovery/metadata-codec.d.ts.map +1 -1
- package/dist/discovery/metadata-codec.js +47 -72
- package/dist/discovery/metadata-codec.js.map +1 -1
- package/dist/discovery/metadata-validator.js +6 -6
- package/dist/discovery/metadata-validator.js.map +1 -1
- package/dist/discovery/peer-lookup.d.ts.map +1 -1
- package/dist/discovery/peer-lookup.js +1 -2
- package/dist/discovery/peer-lookup.js.map +1 -1
- package/dist/discovery/peer-metadata.d.ts +3 -5
- package/dist/discovery/peer-metadata.d.ts.map +1 -1
- package/dist/discovery/peer-metadata.js +1 -1
- package/dist/discovery/reputation-verifier.d.ts +2 -22
- package/dist/discovery/reputation-verifier.d.ts.map +1 -1
- package/dist/discovery/reputation-verifier.js +2 -24
- package/dist/discovery/reputation-verifier.js.map +1 -1
- package/dist/discovery/stats-verifier.d.ts +27 -0
- package/dist/discovery/stats-verifier.d.ts.map +1 -0
- package/dist/discovery/stats-verifier.js +38 -0
- package/dist/discovery/stats-verifier.js.map +1 -0
- package/dist/index.d.ts +17 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/dist/metering/index.d.ts +1 -0
- package/dist/metering/index.d.ts.map +1 -1
- package/dist/metering/index.js +1 -0
- package/dist/metering/index.js.map +1 -1
- package/dist/metering/receipt-generator.d.ts +4 -4
- package/dist/metering/receipt-generator.d.ts.map +1 -1
- package/dist/metering/receipt-verifier.d.ts +6 -6
- package/dist/metering/receipt-verifier.d.ts.map +1 -1
- package/dist/metering/receipt-verifier.js +1 -1
- package/dist/metering/seller-session-tracker.d.ts +91 -0
- package/dist/metering/seller-session-tracker.d.ts.map +1 -0
- package/dist/metering/seller-session-tracker.js +261 -0
- package/dist/metering/seller-session-tracker.js.map +1 -0
- package/dist/metering/storage.d.ts +11 -5
- package/dist/metering/storage.d.ts.map +1 -1
- package/dist/metering/storage.js +28 -80
- package/dist/metering/storage.js.map +1 -1
- package/dist/node.d.ts +83 -104
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +313 -1026
- package/dist/node.js.map +1 -1
- package/dist/p2p/connection-auth.d.ts +2 -1
- package/dist/p2p/connection-auth.d.ts.map +1 -1
- package/dist/p2p/connection-auth.js +6 -6
- package/dist/p2p/connection-auth.js.map +1 -1
- package/dist/p2p/connection-manager.d.ts +3 -2
- package/dist/p2p/connection-manager.d.ts.map +1 -1
- package/dist/p2p/connection-manager.js +12 -6
- package/dist/p2p/connection-manager.js.map +1 -1
- package/dist/p2p/identity.d.ts +44 -13
- package/dist/p2p/identity.d.ts.map +1 -1
- package/dist/p2p/identity.js +103 -49
- package/dist/p2p/identity.js.map +1 -1
- package/dist/p2p/index.d.ts +1 -3
- package/dist/p2p/index.d.ts.map +1 -1
- package/dist/p2p/index.js +1 -3
- package/dist/p2p/index.js.map +1 -1
- package/dist/p2p/payment-codec.d.ts +9 -19
- package/dist/p2p/payment-codec.d.ts.map +1 -1
- package/dist/p2p/payment-codec.js +41 -89
- package/dist/p2p/payment-codec.js.map +1 -1
- package/dist/p2p/payment-mux.d.ts +14 -29
- package/dist/p2p/payment-mux.d.ts.map +1 -1
- package/dist/p2p/payment-mux.js +41 -79
- package/dist/p2p/payment-mux.js.map +1 -1
- package/dist/payments/balance-manager.d.ts +2 -2
- package/dist/payments/balance-manager.d.ts.map +1 -1
- package/dist/payments/balance-manager.js +5 -5
- package/dist/payments/balance-manager.js.map +1 -1
- package/dist/payments/buyer-payment-manager.d.ts +157 -83
- package/dist/payments/buyer-payment-manager.d.ts.map +1 -1
- package/dist/payments/buyer-payment-manager.js +573 -204
- package/dist/payments/buyer-payment-manager.js.map +1 -1
- package/dist/payments/buyer-payment-negotiator.d.ts +84 -0
- package/dist/payments/buyer-payment-negotiator.d.ts.map +1 -0
- package/dist/payments/buyer-payment-negotiator.js +624 -0
- package/dist/payments/buyer-payment-negotiator.js.map +1 -0
- package/dist/payments/chain-config.d.ts +44 -0
- package/dist/payments/chain-config.d.ts.map +1 -0
- package/dist/payments/chain-config.js +70 -0
- package/dist/payments/chain-config.js.map +1 -0
- package/dist/payments/channel-session-state.d.ts +13 -0
- package/dist/payments/channel-session-state.d.ts.map +1 -0
- package/dist/payments/channel-session-state.js +25 -0
- package/dist/payments/channel-session-state.js.map +1 -0
- package/dist/payments/channel-store.d.ts +87 -0
- package/dist/payments/channel-store.d.ts.map +1 -0
- package/dist/payments/channel-store.js +276 -0
- package/dist/payments/channel-store.js.map +1 -0
- package/dist/payments/evm/ants-token-client.d.ts +16 -0
- package/dist/payments/evm/ants-token-client.d.ts.map +1 -0
- package/dist/payments/evm/ants-token-client.js +65 -0
- package/dist/payments/evm/ants-token-client.js.map +1 -0
- package/dist/payments/evm/base-evm-client.d.ts +22 -0
- package/dist/payments/evm/base-evm-client.d.ts.map +1 -0
- package/dist/payments/evm/base-evm-client.js +71 -0
- package/dist/payments/evm/base-evm-client.js.map +1 -0
- package/dist/payments/evm/channels-client.d.ts +51 -0
- package/dist/payments/evm/channels-client.d.ts.map +1 -0
- package/dist/payments/evm/channels-client.js +101 -0
- package/dist/payments/evm/channels-client.js.map +1 -0
- package/dist/payments/evm/deposits-client.d.ts +30 -0
- package/dist/payments/evm/deposits-client.d.ts.map +1 -0
- package/dist/payments/evm/deposits-client.js +78 -0
- package/dist/payments/evm/deposits-client.js.map +1 -0
- package/dist/payments/evm/emissions-client.d.ts +22 -0
- package/dist/payments/evm/emissions-client.d.ts.map +1 -0
- package/dist/payments/evm/emissions-client.js +65 -0
- package/dist/payments/evm/emissions-client.js.map +1 -0
- package/dist/payments/evm/escrow-client.d.ts +57 -36
- package/dist/payments/evm/escrow-client.d.ts.map +1 -1
- package/dist/payments/evm/escrow-client.js +200 -93
- package/dist/payments/evm/escrow-client.js.map +1 -1
- package/dist/payments/evm/identity-client.d.ts +21 -0
- package/dist/payments/evm/identity-client.d.ts.map +1 -0
- package/dist/payments/evm/identity-client.js +68 -0
- package/dist/payments/evm/identity-client.js.map +1 -0
- package/dist/payments/evm/keypair.d.ts +3 -14
- package/dist/payments/evm/keypair.d.ts.map +1 -1
- package/dist/payments/evm/keypair.js +4 -20
- package/dist/payments/evm/keypair.js.map +1 -1
- package/dist/payments/evm/sessions-client.d.ts +30 -0
- package/dist/payments/evm/sessions-client.d.ts.map +1 -0
- package/dist/payments/evm/sessions-client.js +61 -0
- package/dist/payments/evm/sessions-client.js.map +1 -0
- package/dist/payments/evm/signatures.d.ts +54 -10
- package/dist/payments/evm/signatures.d.ts.map +1 -1
- package/dist/payments/evm/signatures.js +80 -54
- package/dist/payments/evm/signatures.js.map +1 -1
- package/dist/payments/evm/staking-client.d.ts +24 -0
- package/dist/payments/evm/staking-client.d.ts.map +1 -0
- package/dist/payments/evm/staking-client.js +54 -0
- package/dist/payments/evm/staking-client.js.map +1 -0
- package/dist/payments/evm/stats-client.d.ts +20 -0
- package/dist/payments/evm/stats-client.d.ts.map +1 -0
- package/dist/payments/evm/stats-client.js +25 -0
- package/dist/payments/evm/stats-client.js.map +1 -0
- package/dist/payments/evm/subpool-client.d.ts +30 -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 +29 -9
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +27 -9
- package/dist/payments/index.js.map +1 -1
- package/dist/payments/pricing.d.ts +25 -0
- package/dist/payments/pricing.d.ts.map +1 -0
- package/dist/payments/pricing.js +33 -0
- package/dist/payments/pricing.js.map +1 -0
- package/dist/payments/readiness.d.ts +13 -0
- package/dist/payments/readiness.d.ts.map +1 -0
- package/dist/payments/readiness.js +57 -0
- package/dist/payments/readiness.js.map +1 -0
- package/dist/payments/seller-payment-manager.d.ts +101 -36
- package/dist/payments/seller-payment-manager.d.ts.map +1 -1
- package/dist/payments/seller-payment-manager.js +612 -120
- package/dist/payments/seller-payment-manager.js.map +1 -1
- package/dist/payments/session-store.d.ts +68 -0
- package/dist/payments/session-store.d.ts.map +1 -0
- package/dist/payments/session-store.js +272 -0
- package/dist/payments/session-store.js.map +1 -0
- package/dist/payments/types.d.ts +5 -3
- package/dist/payments/types.d.ts.map +1 -1
- package/dist/payments/usdc-utils.d.ts +9 -0
- package/dist/payments/usdc-utils.d.ts.map +1 -0
- package/dist/payments/usdc-utils.js +17 -0
- package/dist/payments/usdc-utils.js.map +1 -0
- package/dist/proxy/proxy-mux.d.ts.map +1 -1
- package/dist/proxy/proxy-mux.js +3 -2
- package/dist/proxy/proxy-mux.js.map +1 -1
- package/dist/proxy/request-codec.d.ts.map +1 -1
- package/dist/proxy/request-codec.js +3 -0
- package/dist/proxy/request-codec.js.map +1 -1
- package/dist/reputation/rating-manager.d.ts.map +1 -1
- package/dist/reputation/rating-manager.js +2 -4
- package/dist/reputation/rating-manager.js.map +1 -1
- package/dist/reputation/report-manager.d.ts.map +1 -1
- package/dist/reputation/report-manager.js +2 -4
- package/dist/reputation/report-manager.js.map +1 -1
- package/dist/routing/default-router.d.ts.map +1 -1
- package/dist/routing/default-router.js +4 -9
- package/dist/routing/default-router.js.map +1 -1
- package/dist/seller-request-handler.d.ts +54 -0
- package/dist/seller-request-handler.d.ts.map +1 -0
- package/dist/seller-request-handler.js +359 -0
- package/dist/seller-request-handler.js.map +1 -0
- package/dist/storage/migrate.d.ts +13 -0
- package/dist/storage/migrate.d.ts.map +1 -0
- package/dist/storage/migrate.js +28 -0
- package/dist/storage/migrate.js.map +1 -0
- package/dist/storage/migrations/channels/001_create_tables.d.ts +3 -0
- package/dist/storage/migrations/channels/001_create_tables.d.ts.map +1 -0
- package/dist/storage/migrations/channels/001_create_tables.js +45 -0
- package/dist/storage/migrations/channels/001_create_tables.js.map +1 -0
- package/dist/storage/migrations/channels/002_add_auth_sig_columns.d.ts +3 -0
- package/dist/storage/migrations/channels/002_add_auth_sig_columns.d.ts.map +1 -0
- package/dist/storage/migrations/channels/002_add_auth_sig_columns.js +19 -0
- package/dist/storage/migrations/channels/002_add_auth_sig_columns.js.map +1 -0
- package/dist/storage/migrations/channels/index.d.ts +3 -0
- package/dist/storage/migrations/channels/index.d.ts.map +1 -0
- package/dist/storage/migrations/channels/index.js +4 -0
- package/dist/storage/migrations/channels/index.js.map +1 -0
- package/dist/storage/migrations/metering/001_create_tables.d.ts +3 -0
- package/dist/storage/migrations/metering/001_create_tables.d.ts.map +1 -0
- package/dist/storage/migrations/metering/001_create_tables.js +80 -0
- package/dist/storage/migrations/metering/001_create_tables.js.map +1 -0
- package/dist/storage/migrations/metering/index.d.ts +3 -0
- package/dist/storage/migrations/metering/index.d.ts.map +1 -0
- package/dist/storage/migrations/metering/index.js +3 -0
- package/dist/storage/migrations/metering/index.js.map +1 -0
- package/dist/types/capability.d.ts +1 -1
- package/dist/types/http.d.ts +2 -0
- package/dist/types/http.d.ts.map +1 -1
- package/dist/types/http.js +2 -0
- package/dist/types/http.js.map +1 -1
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +0 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/metering.d.ts +2 -2
- package/dist/types/metering.d.ts.map +1 -1
- package/dist/types/peer.d.ts +10 -11
- package/dist/types/peer.d.ts.map +1 -1
- package/dist/types/peer.js +7 -3
- package/dist/types/peer.js.map +1 -1
- package/dist/types/protocol.d.ts +32 -97
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/types/protocol.js +5 -10
- package/dist/types/protocol.js.map +1 -1
- package/dist/types/rating.d.ts +1 -1
- package/dist/types/rating.d.ts.map +1 -1
- package/dist/types/report.d.ts +1 -1
- package/dist/types/report.d.ts.map +1 -1
- package/dist/utils/response-usage.d.ts +10 -0
- package/dist/utils/response-usage.d.ts.map +1 -0
- package/dist/utils/response-usage.js +34 -0
- package/dist/utils/response-usage.js.map +1 -0
- package/package.json +4 -3
package/dist/p2p/identity.d.ts
CHANGED
|
@@ -1,27 +1,58 @@
|
|
|
1
|
+
import { Wallet } from "ethers";
|
|
1
2
|
import { type PeerId } from "../types/peer.js";
|
|
2
3
|
import { hexToBytes, bytesToHex } from "../utils/hex.js";
|
|
3
4
|
export { hexToBytes, bytesToHex };
|
|
4
5
|
export interface Identity {
|
|
5
6
|
peerId: PeerId;
|
|
6
7
|
privateKey: Uint8Array;
|
|
7
|
-
|
|
8
|
+
wallet: Wallet;
|
|
8
9
|
}
|
|
9
10
|
/**
|
|
10
|
-
*
|
|
11
|
-
* The private key is stored as hex in ~/.antseed/identity.key.
|
|
11
|
+
* Pluggable storage backend for identity private keys.
|
|
12
12
|
*/
|
|
13
|
-
export
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
|
|
13
|
+
export interface IdentityStore {
|
|
14
|
+
/** Load the private key hex string, or return null if not found. */
|
|
15
|
+
load(): Promise<string | null>;
|
|
16
|
+
/** Persist the private key hex string. */
|
|
17
|
+
save(hexKey: string): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Stores identity private key as a hex file on disk (default behavior).
|
|
21
|
+
*/
|
|
22
|
+
export declare class FileIdentityStore implements IdentityStore {
|
|
23
|
+
private readonly keyPath;
|
|
24
|
+
private readonly dir;
|
|
25
|
+
constructor(configDir?: string);
|
|
26
|
+
load(): Promise<string | null>;
|
|
27
|
+
save(hexKey: string): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export declare function identityFromPrivateKeyHex(hex: string): Identity;
|
|
30
|
+
/**
|
|
31
|
+
* Load an existing identity or create and persist a new one.
|
|
32
|
+
*
|
|
33
|
+
* The identity is a secp256k1 private key stored as 64 hex chars.
|
|
34
|
+
* The peerId is derived as the EVM address (lowercase, no 0x prefix).
|
|
35
|
+
*/
|
|
36
|
+
export declare function loadOrCreateIdentity(configDirOrStore?: string | IdentityStore): Promise<Identity>;
|
|
37
|
+
/**
|
|
38
|
+
* Sign arbitrary binary data with the identity's secp256k1 private key.
|
|
39
|
+
* Domain-tagged with "antseed-data-v1:" prefix to prevent cross-domain replay.
|
|
40
|
+
* Uses EIP-191 personal_sign. Returns a 65-byte signature (r + s + v).
|
|
41
|
+
*/
|
|
42
|
+
export declare function signData(wallet: Wallet, data: Uint8Array): Uint8Array;
|
|
43
|
+
/**
|
|
44
|
+
* Verify a binary data signature from a remote peer using ecrecover.
|
|
45
|
+
* The expectedAddress is the 40-char hex peerId (no 0x prefix).
|
|
46
|
+
*/
|
|
47
|
+
export declare function verifySignature(expectedAddress: string, signature: Uint8Array, data: Uint8Array): boolean;
|
|
18
48
|
/**
|
|
19
|
-
* Sign a UTF-8 message and return a hex-encoded
|
|
20
|
-
*
|
|
49
|
+
* Sign a UTF-8 message and return a hex-encoded secp256k1 signature (130 hex chars = 65 bytes).
|
|
50
|
+
* Domain-tagged with "antseed-msg-v1:" prefix to prevent cross-domain replay.
|
|
21
51
|
*/
|
|
22
|
-
export declare function
|
|
52
|
+
export declare function signUtf8(wallet: Wallet, message: string): string;
|
|
23
53
|
/**
|
|
24
|
-
* Verify a UTF-8 message against a hex-encoded
|
|
54
|
+
* Verify a UTF-8 message against a hex-encoded secp256k1 signature.
|
|
55
|
+
* Returns true if the recovered address matches the expected address.
|
|
25
56
|
*/
|
|
26
|
-
export declare function
|
|
57
|
+
export declare function verifyUtf8(address: string, message: string, signatureHex: string): boolean;
|
|
27
58
|
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/p2p/identity.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/p2p/identity.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAiD,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAYlC,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/B,0CAA0C;IAC1C,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,SAAS,CAAC,EAAE,MAAM;IAKxB,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAS9B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI1C;AAKD,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAK/D;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,CAyBvG;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,UAAU,GACf,UAAU,CAOZ;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,UAAU,GACf,OAAO,CAUT;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMhE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAST"}
|
package/dist/p2p/identity.js
CHANGED
|
@@ -1,73 +1,127 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { randomBytes } from "node:crypto";
|
|
2
2
|
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { homedir } from "node:os";
|
|
5
|
-
import {
|
|
5
|
+
import { Wallet, hashMessage, getBytes, hexlify, verifyMessage } from "ethers";
|
|
6
6
|
import { toPeerId } from "../types/peer.js";
|
|
7
7
|
import { hexToBytes, bytesToHex } from "../utils/hex.js";
|
|
8
8
|
export { hexToBytes, bytesToHex };
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Domain prefixes for signing contexts.
|
|
11
|
+
* Prevents cross-domain signature replay between different parts of the protocol.
|
|
12
|
+
*/
|
|
13
|
+
const DOMAIN_DATA = new TextEncoder().encode("antseed-data-v1:");
|
|
14
|
+
const DOMAIN_MSG = "antseed-msg-v1:";
|
|
10
15
|
const CONFIG_DIR = join(homedir(), ".antseed");
|
|
11
16
|
const PRIVATE_KEY_FILE = "identity.key";
|
|
12
|
-
const ED25519_PKCS8_SEED_PREFIX = Buffer.from("302e020100300506032b657004220420", "hex");
|
|
13
|
-
const ED25519_SPKI_PUBLIC_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
|
|
14
17
|
/**
|
|
15
|
-
*
|
|
16
|
-
* The private key is stored as hex in ~/.antseed/identity.key.
|
|
18
|
+
* Stores identity private key as a hex file on disk (default behavior).
|
|
17
19
|
*/
|
|
18
|
-
export
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const publicKey = await ed.getPublicKeyAsync(privateKey);
|
|
25
|
-
const peerId = toPeerId(bytesToHex(publicKey));
|
|
26
|
-
return { peerId, privateKey, publicKey };
|
|
20
|
+
export class FileIdentityStore {
|
|
21
|
+
keyPath;
|
|
22
|
+
dir;
|
|
23
|
+
constructor(configDir) {
|
|
24
|
+
this.dir = configDir ?? CONFIG_DIR;
|
|
25
|
+
this.keyPath = join(this.dir, PRIVATE_KEY_FILE);
|
|
27
26
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
async load() {
|
|
28
|
+
try {
|
|
29
|
+
const hexKey = (await readFile(this.keyPath, "utf-8")).trim();
|
|
30
|
+
return hexKey.length > 0 ? hexKey : null;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async save(hexKey) {
|
|
37
|
+
await mkdir(this.dir, { recursive: true });
|
|
38
|
+
await writeFile(this.keyPath, hexKey, { mode: 0o600 });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** Environment variable for passing identity hex from a parent process (e.g. desktop → CLI). */
|
|
42
|
+
const IDENTITY_HEX_ENV = 'ANTSEED_IDENTITY_HEX';
|
|
43
|
+
export function identityFromPrivateKeyHex(hex) {
|
|
44
|
+
const privateKey = hexToBytes(hex);
|
|
45
|
+
const wallet = new Wallet('0x' + hex);
|
|
46
|
+
const peerId = toPeerId(wallet.address.slice(2).toLowerCase());
|
|
47
|
+
return { peerId, privateKey, wallet };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Load an existing identity or create and persist a new one.
|
|
51
|
+
*
|
|
52
|
+
* The identity is a secp256k1 private key stored as 64 hex chars.
|
|
53
|
+
* The peerId is derived as the EVM address (lowercase, no 0x prefix).
|
|
54
|
+
*/
|
|
55
|
+
export async function loadOrCreateIdentity(configDirOrStore) {
|
|
56
|
+
// Check for identity injected via environment (desktop → CLI child process).
|
|
57
|
+
const envHex = process.env[IDENTITY_HEX_ENV]?.trim();
|
|
58
|
+
if (envHex && envHex.length === 64) {
|
|
59
|
+
delete process.env[IDENTITY_HEX_ENV];
|
|
60
|
+
return identityFromPrivateKeyHex(envHex);
|
|
36
61
|
}
|
|
62
|
+
const store = configDirOrStore === undefined || typeof configDirOrStore === 'string'
|
|
63
|
+
? new FileIdentityStore(configDirOrStore)
|
|
64
|
+
: configDirOrStore;
|
|
65
|
+
const existingHex = await store.load();
|
|
66
|
+
if (existingHex && existingHex.length === 64) {
|
|
67
|
+
return identityFromPrivateKeyHex(existingHex);
|
|
68
|
+
}
|
|
69
|
+
// Key doesn't exist — generate a new secp256k1 private key.
|
|
70
|
+
const privateKey = randomBytes(32);
|
|
71
|
+
const hex = bytesToHex(privateKey);
|
|
72
|
+
await store.save(hex);
|
|
73
|
+
return identityFromPrivateKeyHex(hex);
|
|
37
74
|
}
|
|
38
|
-
/**
|
|
39
|
-
|
|
40
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Sign arbitrary binary data with the identity's secp256k1 private key.
|
|
77
|
+
* Domain-tagged with "antseed-data-v1:" prefix to prevent cross-domain replay.
|
|
78
|
+
* Uses EIP-191 personal_sign. Returns a 65-byte signature (r + s + v).
|
|
79
|
+
*/
|
|
80
|
+
export function signData(wallet, data) {
|
|
81
|
+
const tagged = new Uint8Array(DOMAIN_DATA.length + data.length);
|
|
82
|
+
tagged.set(DOMAIN_DATA, 0);
|
|
83
|
+
tagged.set(data, DOMAIN_DATA.length);
|
|
84
|
+
const digest = hashMessage(tagged);
|
|
85
|
+
const sig = wallet.signingKey.sign(digest);
|
|
86
|
+
return getBytes(sig.serialized);
|
|
41
87
|
}
|
|
42
|
-
/**
|
|
43
|
-
|
|
44
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Verify a binary data signature from a remote peer using ecrecover.
|
|
90
|
+
* The expectedAddress is the 40-char hex peerId (no 0x prefix).
|
|
91
|
+
*/
|
|
92
|
+
export function verifySignature(expectedAddress, signature, data) {
|
|
93
|
+
try {
|
|
94
|
+
const tagged = new Uint8Array(DOMAIN_DATA.length + data.length);
|
|
95
|
+
tagged.set(DOMAIN_DATA, 0);
|
|
96
|
+
tagged.set(data, DOMAIN_DATA.length);
|
|
97
|
+
const recovered = verifyMessage(tagged, hexlify(signature));
|
|
98
|
+
return recovered.slice(2).toLowerCase() === expectedAddress.toLowerCase();
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
45
103
|
}
|
|
46
104
|
/**
|
|
47
|
-
* Sign a UTF-8 message and return a hex-encoded
|
|
48
|
-
*
|
|
105
|
+
* Sign a UTF-8 message and return a hex-encoded secp256k1 signature (130 hex chars = 65 bytes).
|
|
106
|
+
* Domain-tagged with "antseed-msg-v1:" prefix to prevent cross-domain replay.
|
|
49
107
|
*/
|
|
50
|
-
export function
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
const signature = nodeSign(null, Buffer.from(message, "utf-8"), key);
|
|
57
|
-
return signature.toString("hex");
|
|
108
|
+
export function signUtf8(wallet, message) {
|
|
109
|
+
const tagged = DOMAIN_MSG + message;
|
|
110
|
+
const msgBytes = new TextEncoder().encode(tagged);
|
|
111
|
+
const digest = hashMessage(msgBytes);
|
|
112
|
+
const sig = wallet.signingKey.sign(digest);
|
|
113
|
+
return sig.serialized.slice(2);
|
|
58
114
|
}
|
|
59
115
|
/**
|
|
60
|
-
* Verify a UTF-8 message against a hex-encoded
|
|
116
|
+
* Verify a UTF-8 message against a hex-encoded secp256k1 signature.
|
|
117
|
+
* Returns true if the recovered address matches the expected address.
|
|
61
118
|
*/
|
|
62
|
-
export function
|
|
119
|
+
export function verifyUtf8(address, message, signatureHex) {
|
|
63
120
|
try {
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
type: "spki",
|
|
69
|
-
});
|
|
70
|
-
return nodeVerify(null, Buffer.from(message, "utf-8"), key, Buffer.from(signatureHex, "hex"));
|
|
121
|
+
const tagged = DOMAIN_MSG + message;
|
|
122
|
+
const msgBytes = new TextEncoder().encode(tagged);
|
|
123
|
+
const recovered = verifyMessage(msgBytes, '0x' + signatureHex);
|
|
124
|
+
return recovered.slice(2).toLowerCase() === address.toLowerCase();
|
|
71
125
|
}
|
|
72
126
|
catch {
|
|
73
127
|
return false;
|
package/dist/p2p/identity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/p2p/identity.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/p2p/identity.ts"],"names":[],"mappings":"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"}
|
package/dist/p2p/index.d.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
export { type Identity, loadOrCreateIdentity, signData, verifySignature, hexToBytes, bytesToHex,
|
|
1
|
+
export { type Identity, type IdentityStore, FileIdentityStore, loadOrCreateIdentity, identityFromPrivateKeyHex, signData, verifySignature, hexToBytes, bytesToHex, signUtf8, verifyUtf8 } from './identity.js';
|
|
2
2
|
export { encodeFrame, decodeFrame, FrameDecoder, MessageMux, type MessageHandler } from './message-protocol.js';
|
|
3
3
|
export { ConnectionManager, PeerConnection, type PeerEndpoint } from './connection-manager.js';
|
|
4
4
|
export { type IceServer, type IceConfig, getDefaultIceConfig, buildIceConfig, needsTurnFallback, extractCandidateType } from './ice-config.js';
|
|
5
5
|
export { KeepaliveManager, buildPongPayload, type KeepaliveConfig, type KeepaliveCallbacks, DEFAULT_PING_INTERVAL_MS, DEFAULT_PONG_TIMEOUT_MS, MAX_MISSED_PONGS } from './keepalive.js';
|
|
6
|
-
export { ReconnectManager, type ReconnectConfig, type ReconnectCallbacks } from './reconnect.js';
|
|
7
|
-
export { performHandshake, respondToHandshake, buildHandshakeInit, verifyHandshakeInit, buildHandshakeAck, verifyHandshakeAck, type HandshakeResult } from './handshake.js';
|
|
8
6
|
export { NatTraversal, type NatMapping, type NatTraversalResult } from './nat-traversal.js';
|
|
9
7
|
export { PaymentMux } from './payment-mux.js';
|
|
10
8
|
export type { PaymentMessageHandler } from './payment-mux.js';
|
package/dist/p2p/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/p2p/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/p2p/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/M,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAChH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,mBAAmB,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC/I,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,KAAK,kBAAkB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACxL,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9D,cAAc,oBAAoB,CAAC"}
|
package/dist/p2p/index.js
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
export { loadOrCreateIdentity, signData, verifySignature, hexToBytes, bytesToHex,
|
|
1
|
+
export { FileIdentityStore, loadOrCreateIdentity, identityFromPrivateKeyHex, signData, verifySignature, hexToBytes, bytesToHex, signUtf8, verifyUtf8 } from './identity.js';
|
|
2
2
|
export { encodeFrame, decodeFrame, FrameDecoder, MessageMux } from './message-protocol.js';
|
|
3
3
|
export { ConnectionManager, PeerConnection } from './connection-manager.js';
|
|
4
4
|
export { getDefaultIceConfig, buildIceConfig, needsTurnFallback, extractCandidateType } from './ice-config.js';
|
|
5
5
|
export { KeepaliveManager, buildPongPayload, DEFAULT_PING_INTERVAL_MS, DEFAULT_PONG_TIMEOUT_MS, MAX_MISSED_PONGS } from './keepalive.js';
|
|
6
|
-
export { ReconnectManager } from './reconnect.js';
|
|
7
|
-
export { performHandshake, respondToHandshake, buildHandshakeInit, verifyHandshakeInit, buildHandshakeAck, verifyHandshakeAck } from './handshake.js';
|
|
8
6
|
export { NatTraversal } from './nat-traversal.js';
|
|
9
7
|
export { PaymentMux } from './payment-mux.js';
|
|
10
8
|
export * from './payment-codec.js';
|
package/dist/p2p/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/p2p/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/p2p/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,iBAAiB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC/M,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAuB,MAAM,uBAAuB,CAAC;AAChH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EAAkC,mBAAmB,EAAE,cAAc,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC/I,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAiD,wBAAwB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACxL,OAAO,EAAE,YAAY,EAA4C,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,cAAc,oBAAoB,CAAC"}
|
|
@@ -1,20 +1,10 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function
|
|
6
|
-
export declare function
|
|
7
|
-
export declare function
|
|
8
|
-
export declare function
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function encodeDisputeNotify(payload: DisputeNotifyPayload): Uint8Array;
|
|
11
|
-
export declare function decodeSessionLockAuth(data: Uint8Array): SessionLockAuthPayload;
|
|
12
|
-
export declare function decodeSessionLockConfirm(data: Uint8Array): SessionLockConfirmPayload;
|
|
13
|
-
export declare function decodeSessionLockReject(data: Uint8Array): SessionLockRejectPayload;
|
|
14
|
-
export declare function decodeSellerReceipt(data: Uint8Array): SellerReceiptPayload;
|
|
15
|
-
export declare function decodeBuyerAck(data: Uint8Array): BuyerAckPayload;
|
|
16
|
-
export declare function decodeSessionEnd(data: Uint8Array): SessionEndPayload;
|
|
17
|
-
export declare function decodeTopUpRequest(data: Uint8Array): TopUpRequestPayload;
|
|
18
|
-
export declare function decodeTopUpAuth(data: Uint8Array): TopUpAuthPayload;
|
|
19
|
-
export declare function decodeDisputeNotify(data: Uint8Array): DisputeNotifyPayload;
|
|
1
|
+
import type { SpendingAuthPayload, AuthAckPayload, PaymentRequiredPayload, NeedAuthPayload } from '../types/protocol.js';
|
|
2
|
+
export declare function encodeSpendingAuth(payload: SpendingAuthPayload): Uint8Array;
|
|
3
|
+
export declare function encodeAuthAck(payload: AuthAckPayload): Uint8Array;
|
|
4
|
+
export declare function encodePaymentRequired(payload: PaymentRequiredPayload): Uint8Array;
|
|
5
|
+
export declare function encodeNeedAuth(payload: NeedAuthPayload): Uint8Array;
|
|
6
|
+
export declare function decodeSpendingAuth(data: Uint8Array): SpendingAuthPayload;
|
|
7
|
+
export declare function decodeAuthAck(data: Uint8Array): AuthAckPayload;
|
|
8
|
+
export declare function decodePaymentRequired(data: Uint8Array): PaymentRequiredPayload;
|
|
9
|
+
export declare function decodeNeedAuth(data: Uint8Array): NeedAuthPayload;
|
|
20
10
|
//# sourceMappingURL=payment-codec.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-codec.d.ts","sourceRoot":"","sources":["../../src/p2p/payment-codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"payment-codec.d.ts","sourceRoot":"","sources":["../../src/p2p/payment-codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AA8B9B,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,UAAU,CAE3E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,UAAU,CAEjF;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,UAAU,CAEnE;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAcxE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,cAAc,CAK9D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,sBAAsB,CAU9E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,eAAe,CAQhE"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
const encoder = new TextEncoder();
|
|
2
2
|
const decoder = new TextDecoder();
|
|
3
3
|
// --- Validation helpers ---
|
|
4
|
+
const MAX_PAYLOAD_SIZE = 65536; // 64KB
|
|
4
5
|
function parseJson(data) {
|
|
6
|
+
if (data.byteLength > MAX_PAYLOAD_SIZE) {
|
|
7
|
+
throw new Error(`Payment payload too large: ${data.byteLength} bytes (max ${MAX_PAYLOAD_SIZE})`);
|
|
8
|
+
}
|
|
5
9
|
const raw = JSON.parse(decoder.decode(data));
|
|
6
10
|
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
7
11
|
throw new Error('Expected JSON object');
|
|
@@ -15,116 +19,64 @@ function requireString(obj, field) {
|
|
|
15
19
|
}
|
|
16
20
|
return val;
|
|
17
21
|
}
|
|
18
|
-
function requireNumber(obj, field) {
|
|
19
|
-
const val = obj[field];
|
|
20
|
-
if (typeof val !== 'number' || !Number.isFinite(val)) {
|
|
21
|
-
throw new Error(`Missing or invalid number field: ${field}`);
|
|
22
|
-
}
|
|
23
|
-
return val;
|
|
24
|
-
}
|
|
25
22
|
// --- Encoders ---
|
|
26
|
-
export function
|
|
23
|
+
export function encodeSpendingAuth(payload) {
|
|
27
24
|
return encoder.encode(JSON.stringify(payload));
|
|
28
25
|
}
|
|
29
|
-
export function
|
|
26
|
+
export function encodeAuthAck(payload) {
|
|
30
27
|
return encoder.encode(JSON.stringify(payload));
|
|
31
28
|
}
|
|
32
|
-
export function
|
|
29
|
+
export function encodePaymentRequired(payload) {
|
|
33
30
|
return encoder.encode(JSON.stringify(payload));
|
|
34
31
|
}
|
|
35
|
-
export function
|
|
36
|
-
return encoder.encode(JSON.stringify(payload));
|
|
37
|
-
}
|
|
38
|
-
export function encodeBuyerAck(payload) {
|
|
39
|
-
return encoder.encode(JSON.stringify(payload));
|
|
40
|
-
}
|
|
41
|
-
export function encodeSessionEnd(payload) {
|
|
42
|
-
return encoder.encode(JSON.stringify(payload));
|
|
43
|
-
}
|
|
44
|
-
export function encodeTopUpRequest(payload) {
|
|
45
|
-
return encoder.encode(JSON.stringify(payload));
|
|
46
|
-
}
|
|
47
|
-
export function encodeTopUpAuth(payload) {
|
|
48
|
-
return encoder.encode(JSON.stringify(payload));
|
|
49
|
-
}
|
|
50
|
-
export function encodeDisputeNotify(payload) {
|
|
32
|
+
export function encodeNeedAuth(payload) {
|
|
51
33
|
return encoder.encode(JSON.stringify(payload));
|
|
52
34
|
}
|
|
53
35
|
// --- Decoders (with runtime validation) ---
|
|
54
|
-
export function
|
|
55
|
-
const obj = parseJson(data);
|
|
56
|
-
return {
|
|
57
|
-
sessionId: requireString(obj, 'sessionId'),
|
|
58
|
-
lockedAmount: requireString(obj, 'lockedAmount'),
|
|
59
|
-
buyerSig: requireString(obj, 'buyerSig'),
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
export function decodeSessionLockConfirm(data) {
|
|
36
|
+
export function decodeSpendingAuth(data) {
|
|
63
37
|
const obj = parseJson(data);
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const obj = parseJson(data);
|
|
71
|
-
return {
|
|
72
|
-
sessionId: requireString(obj, 'sessionId'),
|
|
73
|
-
reason: requireString(obj, 'reason'),
|
|
38
|
+
const result = {
|
|
39
|
+
channelId: requireString(obj, 'channelId'),
|
|
40
|
+
cumulativeAmount: requireString(obj, 'cumulativeAmount'),
|
|
41
|
+
metadataHash: requireString(obj, 'metadataHash'),
|
|
42
|
+
metadata: typeof obj.metadata === 'string' ? obj.metadata : '',
|
|
43
|
+
spendingAuthSig: requireString(obj, 'spendingAuthSig'),
|
|
74
44
|
};
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
export function decodeBuyerAck(data) {
|
|
45
|
+
// Optional reserve params (only on initial auth)
|
|
46
|
+
if (typeof obj.reserveSalt === 'string')
|
|
47
|
+
result.reserveSalt = obj.reserveSalt;
|
|
48
|
+
if (typeof obj.reserveMaxAmount === 'string')
|
|
49
|
+
result.reserveMaxAmount = obj.reserveMaxAmount;
|
|
50
|
+
if (typeof obj.reserveDeadline === 'number')
|
|
51
|
+
result.reserveDeadline = obj.reserveDeadline;
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
export function decodeAuthAck(data) {
|
|
87
55
|
const obj = parseJson(data);
|
|
88
56
|
return {
|
|
89
|
-
|
|
90
|
-
runningTotal: requireString(obj, 'runningTotal'),
|
|
91
|
-
requestCount: requireNumber(obj, 'requestCount'),
|
|
92
|
-
buyerSig: requireString(obj, 'buyerSig'),
|
|
57
|
+
channelId: requireString(obj, 'channelId'),
|
|
93
58
|
};
|
|
94
59
|
}
|
|
95
|
-
export function
|
|
60
|
+
export function decodePaymentRequired(data) {
|
|
96
61
|
const obj = parseJson(data);
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
score: requireNumber(obj, 'score'),
|
|
102
|
-
buyerSig: requireString(obj, 'buyerSig'),
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
export function decodeTopUpRequest(data) {
|
|
106
|
-
const obj = parseJson(data);
|
|
107
|
-
return {
|
|
108
|
-
sessionId: requireString(obj, 'sessionId'),
|
|
109
|
-
additionalAmount: requireString(obj, 'additionalAmount'),
|
|
110
|
-
currentRunningTotal: requireString(obj, 'currentRunningTotal'),
|
|
111
|
-
currentLockedAmount: requireString(obj, 'currentLockedAmount'),
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
export function decodeTopUpAuth(data) {
|
|
115
|
-
const obj = parseJson(data);
|
|
116
|
-
return {
|
|
117
|
-
sessionId: requireString(obj, 'sessionId'),
|
|
118
|
-
additionalAmount: requireString(obj, 'additionalAmount'),
|
|
119
|
-
buyerSig: requireString(obj, 'buyerSig'),
|
|
62
|
+
const result = {
|
|
63
|
+
minBudgetPerRequest: requireString(obj, 'minBudgetPerRequest'),
|
|
64
|
+
suggestedAmount: requireString(obj, 'suggestedAmount'),
|
|
65
|
+
requestId: requireString(obj, 'requestId'),
|
|
120
66
|
};
|
|
67
|
+
if (typeof obj.inputUsdPerMillion === 'number')
|
|
68
|
+
result.inputUsdPerMillion = obj.inputUsdPerMillion;
|
|
69
|
+
if (typeof obj.outputUsdPerMillion === 'number')
|
|
70
|
+
result.outputUsdPerMillion = obj.outputUsdPerMillion;
|
|
71
|
+
return result;
|
|
121
72
|
}
|
|
122
|
-
export function
|
|
73
|
+
export function decodeNeedAuth(data) {
|
|
123
74
|
const obj = parseJson(data);
|
|
124
75
|
return {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
76
|
+
channelId: requireString(obj, 'channelId'),
|
|
77
|
+
requiredCumulativeAmount: requireString(obj, 'requiredCumulativeAmount'),
|
|
78
|
+
currentAcceptedCumulative: requireString(obj, 'currentAcceptedCumulative'),
|
|
79
|
+
deposit: requireString(obj, 'deposit'),
|
|
128
80
|
};
|
|
129
81
|
}
|
|
130
82
|
//# sourceMappingURL=payment-codec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-codec.js","sourceRoot":"","sources":["../../src/p2p/payment-codec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"payment-codec.js","sourceRoot":"","sources":["../../src/p2p/payment-codec.ts"],"names":[],"mappings":"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"}
|