@antseed/node 0.2.27 → 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 +14 -13
- 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 -4
- package/dist/discovery/announcer.d.ts.map +1 -1
- package/dist/discovery/announcer.js +11 -18
- package/dist/discovery/announcer.js.map +1 -1
- package/dist/discovery/index.d.ts +0 -1
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +0 -1
- 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 -25
- package/dist/discovery/reputation-verifier.d.ts.map +1 -1
- package/dist/discovery/reputation-verifier.js +2 -48
- 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 +10 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -5
- 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 +69 -117
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +240 -1269
- 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 +6 -6
- package/dist/p2p/connection-manager.js.map +1 -1
- package/dist/p2p/identity.d.ts +22 -15
- package/dist/p2p/identity.d.ts.map +1 -1
- package/dist/p2p/identity.js +66 -51
- package/dist/p2p/identity.js.map +1 -1
- package/dist/p2p/index.d.ts +1 -1
- package/dist/p2p/index.d.ts.map +1 -1
- package/dist/p2p/index.js +1 -1
- package/dist/p2p/index.js.map +1 -1
- package/dist/p2p/payment-codec.d.ts +4 -8
- package/dist/p2p/payment-codec.d.ts.map +1 -1
- package/dist/p2p/payment-codec.js +27 -57
- package/dist/p2p/payment-codec.js.map +1 -1
- package/dist/p2p/payment-mux.d.ts +4 -10
- package/dist/p2p/payment-mux.d.ts.map +1 -1
- package/dist/p2p/payment-mux.js +11 -33
- 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 +154 -21
- package/dist/payments/buyer-payment-manager.d.ts.map +1 -1
- package/dist/payments/buyer-payment-manager.js +540 -166
- 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 +10 -4
- package/dist/payments/chain-config.d.ts.map +1 -1
- package/dist/payments/chain-config.js +19 -9
- package/dist/payments/chain-config.js.map +1 -1
- 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 +1 -1
- package/dist/payments/evm/ants-token-client.d.ts.map +1 -1
- package/dist/payments/evm/ants-token-client.js +3 -4
- package/dist/payments/evm/ants-token-client.js.map +1 -1
- package/dist/payments/evm/base-evm-client.d.ts +10 -1
- package/dist/payments/evm/base-evm-client.d.ts.map +1 -1
- package/dist/payments/evm/base-evm-client.js +34 -1
- package/dist/payments/evm/base-evm-client.js.map +1 -1
- 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 +3 -4
- package/dist/payments/evm/emissions-client.d.ts.map +1 -1
- package/dist/payments/evm/emissions-client.js +11 -30
- package/dist/payments/evm/emissions-client.js.map +1 -1
- package/dist/payments/evm/identity-client.d.ts +10 -23
- package/dist/payments/evm/identity-client.d.ts.map +1 -1
- package/dist/payments/evm/identity-client.js +43 -100
- package/dist/payments/evm/identity-client.js.map +1 -1
- 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 +43 -12
- package/dist/payments/evm/signatures.d.ts.map +1 -1
- package/dist/payments/evm/signatures.js +62 -45
- 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/index.d.ts +17 -10
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +15 -8
- 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 +4 -3
- package/dist/payments/readiness.d.ts.map +1 -1
- package/dist/payments/readiness.js +11 -18
- package/dist/payments/readiness.js.map +1 -1
- package/dist/payments/seller-payment-manager.d.ts +72 -47
- package/dist/payments/seller-payment-manager.d.ts.map +1 -1
- package/dist/payments/seller-payment-manager.js +558 -275
- package/dist/payments/seller-payment-manager.js.map +1 -1
- package/dist/payments/session-store.d.ts +3 -0
- package/dist/payments/session-store.d.ts.map +1 -1
- package/dist/payments/session-store.js +31 -2
- package/dist/payments/session-store.js.map +1 -1
- package/dist/payments/types.d.ts +5 -3
- package/dist/payments/types.d.ts.map +1 -1
- 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/metering.d.ts +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 +22 -70
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/types/protocol.js +1 -3
- 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 +3 -3
|
@@ -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,16 +1,19 @@
|
|
|
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
18
|
* Stores identity private key as a hex file on disk (default behavior).
|
|
16
19
|
*/
|
|
@@ -37,76 +40,88 @@ export class FileIdentityStore {
|
|
|
37
40
|
}
|
|
38
41
|
/** Environment variable for passing identity hex from a parent process (e.g. desktop → CLI). */
|
|
39
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
|
+
}
|
|
40
49
|
/**
|
|
41
50
|
* Load an existing identity or create and persist a new one.
|
|
42
51
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* If the ANTSEED_IDENTITY_HEX env var is set, it is used directly
|
|
47
|
-
* (e.g. when the desktop app injects identity from the keychain).
|
|
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).
|
|
48
54
|
*/
|
|
49
55
|
export async function loadOrCreateIdentity(configDirOrStore) {
|
|
50
56
|
// Check for identity injected via environment (desktop → CLI child process).
|
|
51
|
-
// The CLI clears the variable after reading to limit exposure in /proc/<pid>/environ.
|
|
52
57
|
const envHex = process.env[IDENTITY_HEX_ENV]?.trim();
|
|
53
58
|
if (envHex && envHex.length === 64) {
|
|
54
59
|
delete process.env[IDENTITY_HEX_ENV];
|
|
55
|
-
|
|
56
|
-
const publicKey = await ed.getPublicKeyAsync(privateKey);
|
|
57
|
-
const peerId = toPeerId(bytesToHex(publicKey));
|
|
58
|
-
return { peerId, privateKey, publicKey };
|
|
60
|
+
return identityFromPrivateKeyHex(envHex);
|
|
59
61
|
}
|
|
60
62
|
const store = configDirOrStore === undefined || typeof configDirOrStore === 'string'
|
|
61
63
|
? new FileIdentityStore(configDirOrStore)
|
|
62
64
|
: configDirOrStore;
|
|
63
65
|
const existingHex = await store.load();
|
|
64
|
-
if (existingHex) {
|
|
65
|
-
|
|
66
|
-
const publicKey = await ed.getPublicKeyAsync(privateKey);
|
|
67
|
-
const peerId = toPeerId(bytesToHex(publicKey));
|
|
68
|
-
return { peerId, privateKey, publicKey };
|
|
66
|
+
if (existingHex && existingHex.length === 64) {
|
|
67
|
+
return identityFromPrivateKeyHex(existingHex);
|
|
69
68
|
}
|
|
70
|
-
// Key doesn't exist — generate a new
|
|
71
|
-
const privateKey =
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
return { peerId, privateKey, publicKey };
|
|
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);
|
|
76
74
|
}
|
|
77
|
-
/**
|
|
78
|
-
|
|
79
|
-
|
|
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);
|
|
80
87
|
}
|
|
81
|
-
/**
|
|
82
|
-
|
|
83
|
-
|
|
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
|
+
}
|
|
84
103
|
}
|
|
85
104
|
/**
|
|
86
|
-
* Sign a UTF-8 message and return a hex-encoded
|
|
87
|
-
*
|
|
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.
|
|
88
107
|
*/
|
|
89
|
-
export function
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const signature = nodeSign(null, Buffer.from(message, "utf-8"), key);
|
|
96
|
-
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);
|
|
97
114
|
}
|
|
98
115
|
/**
|
|
99
|
-
* 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.
|
|
100
118
|
*/
|
|
101
|
-
export function
|
|
119
|
+
export function verifyUtf8(address, message, signatureHex) {
|
|
102
120
|
try {
|
|
103
|
-
const
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
type: "spki",
|
|
108
|
-
});
|
|
109
|
-
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();
|
|
110
125
|
}
|
|
111
126
|
catch {
|
|
112
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,4 +1,4 @@
|
|
|
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';
|
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,4 +1,4 @@
|
|
|
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';
|
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,14 +1,10 @@
|
|
|
1
|
-
import type { SpendingAuthPayload, AuthAckPayload,
|
|
1
|
+
import type { SpendingAuthPayload, AuthAckPayload, PaymentRequiredPayload, NeedAuthPayload } from '../types/protocol.js';
|
|
2
2
|
export declare function encodeSpendingAuth(payload: SpendingAuthPayload): Uint8Array;
|
|
3
3
|
export declare function encodeAuthAck(payload: AuthAckPayload): Uint8Array;
|
|
4
|
-
export declare function
|
|
5
|
-
export declare function
|
|
6
|
-
export declare function encodeTopUpRequest(payload: TopUpRequestPayload): Uint8Array;
|
|
4
|
+
export declare function encodePaymentRequired(payload: PaymentRequiredPayload): Uint8Array;
|
|
5
|
+
export declare function encodeNeedAuth(payload: NeedAuthPayload): Uint8Array;
|
|
7
6
|
export declare function decodeSpendingAuth(data: Uint8Array): SpendingAuthPayload;
|
|
8
7
|
export declare function decodeAuthAck(data: Uint8Array): AuthAckPayload;
|
|
9
|
-
export declare function decodeSellerReceipt(data: Uint8Array): SellerReceiptPayload;
|
|
10
|
-
export declare function decodeBuyerAck(data: Uint8Array): BuyerAckPayload;
|
|
11
|
-
export declare function decodeTopUpRequest(data: Uint8Array): TopUpRequestPayload;
|
|
12
|
-
export declare function encodePaymentRequired(payload: PaymentRequiredPayload): Uint8Array;
|
|
13
8
|
export declare function decodePaymentRequired(data: Uint8Array): PaymentRequiredPayload;
|
|
9
|
+
export declare function decodeNeedAuth(data: Uint8Array): NeedAuthPayload;
|
|
14
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,mBAAmB,EACnB,cAAc,EACd,
|
|
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"}
|
|
@@ -19,13 +19,6 @@ function requireString(obj, field) {
|
|
|
19
19
|
}
|
|
20
20
|
return val;
|
|
21
21
|
}
|
|
22
|
-
function requireNumber(obj, field) {
|
|
23
|
-
const val = obj[field];
|
|
24
|
-
if (typeof val !== 'number' || !Number.isFinite(val)) {
|
|
25
|
-
throw new Error(`Missing or invalid number field: ${field}`);
|
|
26
|
-
}
|
|
27
|
-
return val;
|
|
28
|
-
}
|
|
29
22
|
// --- Encoders ---
|
|
30
23
|
export function encodeSpendingAuth(payload) {
|
|
31
24
|
return encoder.encode(JSON.stringify(payload));
|
|
@@ -33,73 +26,41 @@ export function encodeSpendingAuth(payload) {
|
|
|
33
26
|
export function encodeAuthAck(payload) {
|
|
34
27
|
return encoder.encode(JSON.stringify(payload));
|
|
35
28
|
}
|
|
36
|
-
export function
|
|
37
|
-
return encoder.encode(JSON.stringify(payload));
|
|
38
|
-
}
|
|
39
|
-
export function encodeBuyerAck(payload) {
|
|
29
|
+
export function encodePaymentRequired(payload) {
|
|
40
30
|
return encoder.encode(JSON.stringify(payload));
|
|
41
31
|
}
|
|
42
|
-
export function
|
|
32
|
+
export function encodeNeedAuth(payload) {
|
|
43
33
|
return encoder.encode(JSON.stringify(payload));
|
|
44
34
|
}
|
|
45
35
|
// --- Decoders (with runtime validation) ---
|
|
46
36
|
export function decodeSpendingAuth(data) {
|
|
47
37
|
const obj = parseJson(data);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
buyerEvmAddr: requireString(obj, 'buyerEvmAddr'),
|
|
55
|
-
previousConsumption: requireString(obj, 'previousConsumption'),
|
|
56
|
-
previousSessionId: requireString(obj, 'previousSessionId'),
|
|
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'),
|
|
57
44
|
};
|
|
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;
|
|
58
53
|
}
|
|
59
54
|
export function decodeAuthAck(data) {
|
|
60
55
|
const obj = parseJson(data);
|
|
61
56
|
return {
|
|
62
|
-
|
|
63
|
-
nonce: requireNumber(obj, 'nonce'),
|
|
57
|
+
channelId: requireString(obj, 'channelId'),
|
|
64
58
|
};
|
|
65
59
|
}
|
|
66
|
-
export function decodeSellerReceipt(data) {
|
|
67
|
-
const obj = parseJson(data);
|
|
68
|
-
return {
|
|
69
|
-
sessionId: requireString(obj, 'sessionId'),
|
|
70
|
-
runningTotal: requireString(obj, 'runningTotal'),
|
|
71
|
-
requestCount: requireNumber(obj, 'requestCount'),
|
|
72
|
-
responseHash: requireString(obj, 'responseHash'),
|
|
73
|
-
sellerSig: requireString(obj, 'sellerSig'),
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
export function decodeBuyerAck(data) {
|
|
77
|
-
const obj = parseJson(data);
|
|
78
|
-
return {
|
|
79
|
-
sessionId: requireString(obj, 'sessionId'),
|
|
80
|
-
runningTotal: requireString(obj, 'runningTotal'),
|
|
81
|
-
requestCount: requireNumber(obj, 'requestCount'),
|
|
82
|
-
buyerSig: requireString(obj, 'buyerSig'),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
export function decodeTopUpRequest(data) {
|
|
86
|
-
const obj = parseJson(data);
|
|
87
|
-
return {
|
|
88
|
-
sessionId: requireString(obj, 'sessionId'),
|
|
89
|
-
currentUsed: requireString(obj, 'currentUsed'),
|
|
90
|
-
currentMax: requireString(obj, 'currentMax'),
|
|
91
|
-
requestedAdditional: requireString(obj, 'requestedAdditional'),
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
export function encodePaymentRequired(payload) {
|
|
95
|
-
return encoder.encode(JSON.stringify(payload));
|
|
96
|
-
}
|
|
97
60
|
export function decodePaymentRequired(data) {
|
|
98
61
|
const obj = parseJson(data);
|
|
99
62
|
const result = {
|
|
100
|
-
|
|
101
|
-
tokenRate: requireString(obj, 'tokenRate'),
|
|
102
|
-
firstSignCap: requireString(obj, 'firstSignCap'),
|
|
63
|
+
minBudgetPerRequest: requireString(obj, 'minBudgetPerRequest'),
|
|
103
64
|
suggestedAmount: requireString(obj, 'suggestedAmount'),
|
|
104
65
|
requestId: requireString(obj, 'requestId'),
|
|
105
66
|
};
|
|
@@ -109,4 +70,13 @@ export function decodePaymentRequired(data) {
|
|
|
109
70
|
result.outputUsdPerMillion = obj.outputUsdPerMillion;
|
|
110
71
|
return result;
|
|
111
72
|
}
|
|
73
|
+
export function decodeNeedAuth(data) {
|
|
74
|
+
const obj = parseJson(data);
|
|
75
|
+
return {
|
|
76
|
+
channelId: requireString(obj, 'channelId'),
|
|
77
|
+
requiredCumulativeAmount: requireString(obj, 'requiredCumulativeAmount'),
|
|
78
|
+
currentAcceptedCumulative: requireString(obj, 'currentAcceptedCumulative'),
|
|
79
|
+
deposit: requireString(obj, 'deposit'),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
112
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":"AAOA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAClC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,6BAA6B;AAE7B,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,OAAO;AAEvC,SAAS,SAAS,CAAC,IAAgB;IACjC,IAAI,IAAI,CAAC,UAAU,GAAG,gBAAgB,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,UAAU,eAAe,gBAAgB,GAAG,CAAC,CAAC;IACnG,CAAC;IACD,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAA8B,CAAC;AACxC,CAAC;AAED,SAAS,aAAa,CAAC,GAA4B,EAAE,KAAa;IAChE,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mBAAmB;AAEnB,MAAM,UAAU,kBAAkB,CAAC,OAA4B;IAC7D,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAuB;IACnD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACnE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,6CAA6C;AAE7C,MAAM,UAAU,kBAAkB,CAAC,IAAgB;IACjD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAwB;QAClC,SAAS,EAAE,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC;QAC1C,gBAAgB,EAAE,aAAa,CAAC,GAAG,EAAE,kBAAkB,CAAC;QACxD,YAAY,EAAE,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC;QAChD,QAAQ,EAAE,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;QAC9D,eAAe,EAAE,aAAa,CAAC,GAAG,EAAE,iBAAiB,CAAC;KACvD,CAAC;IACF,iDAAiD;IACjD,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ;QAAE,MAAM,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IAC9E,IAAI,OAAO,GAAG,CAAC,gBAAgB,KAAK,QAAQ;QAAE,MAAM,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAC;IAC7F,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ;QAAE,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC;IAC1F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAgB;IAC5C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO;QACL,SAAS,EAAE,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAgB;IACpD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAA2B;QACrC,mBAAmB,EAAE,aAAa,CAAC,GAAG,EAAE,qBAAqB,CAAC;QAC9D,eAAe,EAAE,aAAa,CAAC,GAAG,EAAE,iBAAiB,CAAC;QACtD,SAAS,EAAE,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC;KAC3C,CAAC;IACF,IAAI,OAAO,GAAG,CAAC,kBAAkB,KAAK,QAAQ;QAAE,MAAM,CAAC,kBAAkB,GAAG,GAAG,CAAC,kBAAkB,CAAC;IACnG,IAAI,OAAO,GAAG,CAAC,mBAAmB,KAAK,QAAQ;QAAE,MAAM,CAAC,mBAAmB,GAAG,GAAG,CAAC,mBAAmB,CAAC;IACtG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO;QACL,SAAS,EAAE,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC;QAC1C,wBAAwB,EAAE,aAAa,CAAC,GAAG,EAAE,0BAA0B,CAAC;QACxE,yBAAyB,EAAE,aAAa,CAAC,GAAG,EAAE,2BAA2B,CAAC;QAC1E,OAAO,EAAE,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC;KACvC,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { PeerConnection } from './connection-manager.js';
|
|
2
|
-
import type { SpendingAuthPayload, AuthAckPayload,
|
|
2
|
+
import type { SpendingAuthPayload, AuthAckPayload, PaymentRequiredPayload, NeedAuthPayload } from '../types/protocol.js';
|
|
3
3
|
import type { FramedMessage } from '../types/protocol.js';
|
|
4
4
|
export type PaymentMessageHandler<T> = (payload: T) => void | Promise<void>;
|
|
5
5
|
/**
|
|
@@ -12,23 +12,17 @@ export declare class PaymentMux {
|
|
|
12
12
|
private _messageIdCounter;
|
|
13
13
|
private _onSpendingAuth?;
|
|
14
14
|
private _onAuthAck?;
|
|
15
|
-
private _onSellerReceipt?;
|
|
16
|
-
private _onBuyerAck?;
|
|
17
|
-
private _onTopUpRequest?;
|
|
18
15
|
private _onPaymentRequired?;
|
|
16
|
+
private _onNeedAuth?;
|
|
19
17
|
constructor(connection: PeerConnection);
|
|
20
18
|
onSpendingAuth(handler: PaymentMessageHandler<SpendingAuthPayload>): void;
|
|
21
19
|
onAuthAck(handler: PaymentMessageHandler<AuthAckPayload>): void;
|
|
22
|
-
onSellerReceipt(handler: PaymentMessageHandler<SellerReceiptPayload>): void;
|
|
23
|
-
onBuyerAck(handler: PaymentMessageHandler<BuyerAckPayload>): void;
|
|
24
|
-
onTopUpRequest(handler: PaymentMessageHandler<TopUpRequestPayload>): void;
|
|
25
20
|
onPaymentRequired(handler: PaymentMessageHandler<PaymentRequiredPayload>): void;
|
|
21
|
+
onNeedAuth(handler: PaymentMessageHandler<NeedAuthPayload>): void;
|
|
26
22
|
sendSpendingAuth(payload: SpendingAuthPayload): void;
|
|
27
23
|
sendAuthAck(payload: AuthAckPayload): void;
|
|
28
|
-
sendSellerReceipt(payload: SellerReceiptPayload): void;
|
|
29
|
-
sendBuyerAck(payload: BuyerAckPayload): void;
|
|
30
|
-
sendTopUpRequest(payload: TopUpRequestPayload): void;
|
|
31
24
|
sendPaymentRequired(payload: PaymentRequiredPayload): void;
|
|
25
|
+
sendNeedAuth(payload: NeedAuthPayload): void;
|
|
32
26
|
/**
|
|
33
27
|
* Returns true if this frame is a payment message and was handled.
|
|
34
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-mux.d.ts","sourceRoot":"","sources":["../../src/p2p/payment-mux.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"payment-mux.d.ts","sourceRoot":"","sources":["../../src/p2p/payment-mux.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAW1D,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5E;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,iBAAiB,CAAK;IAG9B,OAAO,CAAC,eAAe,CAAC,CAA6C;IACrE,OAAO,CAAC,UAAU,CAAC,CAAwC;IAC3D,OAAO,CAAC,kBAAkB,CAAC,CAAgD;IAC3E,OAAO,CAAC,WAAW,CAAC,CAAyC;gBAEjD,UAAU,EAAE,cAAc;IAKtC,cAAc,CAAC,OAAO,EAAE,qBAAqB,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAGzE,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC,cAAc,CAAC,GAAG,IAAI;IAG/D,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAG/E,UAAU,CAAC,OAAO,EAAE,qBAAqB,CAAC,eAAe,CAAC,GAAG,IAAI;IAKjE,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAGpD,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAG1C,mBAAmB,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAG1D,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAK5C;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBzD,mEAAmE;IACnE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9C,OAAO,CAAC,KAAK;CASd"}
|
package/dist/p2p/payment-mux.js
CHANGED
|
@@ -5,10 +5,8 @@ import { debugLog } from '../utils/debug.js';
|
|
|
5
5
|
const MESSAGE_TYPE_NAME = {
|
|
6
6
|
[MessageType.SpendingAuth]: 'SpendingAuth',
|
|
7
7
|
[MessageType.AuthAck]: 'AuthAck',
|
|
8
|
-
[MessageType.SellerReceipt]: 'SellerReceipt',
|
|
9
|
-
[MessageType.BuyerAck]: 'BuyerAck',
|
|
10
|
-
[MessageType.TopUpRequest]: 'TopUpRequest',
|
|
11
8
|
[MessageType.PaymentRequired]: 'PaymentRequired',
|
|
9
|
+
[MessageType.NeedAuth]: 'NeedAuth',
|
|
12
10
|
};
|
|
13
11
|
/**
|
|
14
12
|
* Multiplexes payment messages over a PeerConnection.
|
|
@@ -21,10 +19,8 @@ export class PaymentMux {
|
|
|
21
19
|
// Handler registrations
|
|
22
20
|
_onSpendingAuth;
|
|
23
21
|
_onAuthAck;
|
|
24
|
-
_onSellerReceipt;
|
|
25
|
-
_onBuyerAck;
|
|
26
|
-
_onTopUpRequest;
|
|
27
22
|
_onPaymentRequired;
|
|
23
|
+
_onNeedAuth;
|
|
28
24
|
constructor(connection) {
|
|
29
25
|
this._connection = connection;
|
|
30
26
|
}
|
|
@@ -35,18 +31,12 @@ export class PaymentMux {
|
|
|
35
31
|
onAuthAck(handler) {
|
|
36
32
|
this._onAuthAck = handler;
|
|
37
33
|
}
|
|
38
|
-
onSellerReceipt(handler) {
|
|
39
|
-
this._onSellerReceipt = handler;
|
|
40
|
-
}
|
|
41
|
-
onBuyerAck(handler) {
|
|
42
|
-
this._onBuyerAck = handler;
|
|
43
|
-
}
|
|
44
|
-
onTopUpRequest(handler) {
|
|
45
|
-
this._onTopUpRequest = handler;
|
|
46
|
-
}
|
|
47
34
|
onPaymentRequired(handler) {
|
|
48
35
|
this._onPaymentRequired = handler;
|
|
49
36
|
}
|
|
37
|
+
onNeedAuth(handler) {
|
|
38
|
+
this._onNeedAuth = handler;
|
|
39
|
+
}
|
|
50
40
|
// --- Sending ---
|
|
51
41
|
sendSpendingAuth(payload) {
|
|
52
42
|
this._send(MessageType.SpendingAuth, codec.encodeSpendingAuth(payload));
|
|
@@ -54,18 +44,12 @@ export class PaymentMux {
|
|
|
54
44
|
sendAuthAck(payload) {
|
|
55
45
|
this._send(MessageType.AuthAck, codec.encodeAuthAck(payload));
|
|
56
46
|
}
|
|
57
|
-
sendSellerReceipt(payload) {
|
|
58
|
-
this._send(MessageType.SellerReceipt, codec.encodeSellerReceipt(payload));
|
|
59
|
-
}
|
|
60
|
-
sendBuyerAck(payload) {
|
|
61
|
-
this._send(MessageType.BuyerAck, codec.encodeBuyerAck(payload));
|
|
62
|
-
}
|
|
63
|
-
sendTopUpRequest(payload) {
|
|
64
|
-
this._send(MessageType.TopUpRequest, codec.encodeTopUpRequest(payload));
|
|
65
|
-
}
|
|
66
47
|
sendPaymentRequired(payload) {
|
|
67
48
|
this._send(MessageType.PaymentRequired, codec.encodePaymentRequired(payload));
|
|
68
49
|
}
|
|
50
|
+
sendNeedAuth(payload) {
|
|
51
|
+
this._send(MessageType.NeedAuth, codec.encodeNeedAuth(payload));
|
|
52
|
+
}
|
|
69
53
|
// --- Receiving ---
|
|
70
54
|
/**
|
|
71
55
|
* Returns true if this frame is a payment message and was handled.
|
|
@@ -82,18 +66,12 @@ export class PaymentMux {
|
|
|
82
66
|
case MessageType.AuthAck:
|
|
83
67
|
await this._onAuthAck?.(codec.decodeAuthAck(frame.payload));
|
|
84
68
|
return true;
|
|
85
|
-
case MessageType.SellerReceipt:
|
|
86
|
-
await this._onSellerReceipt?.(codec.decodeSellerReceipt(frame.payload));
|
|
87
|
-
return true;
|
|
88
|
-
case MessageType.BuyerAck:
|
|
89
|
-
await this._onBuyerAck?.(codec.decodeBuyerAck(frame.payload));
|
|
90
|
-
return true;
|
|
91
|
-
case MessageType.TopUpRequest:
|
|
92
|
-
await this._onTopUpRequest?.(codec.decodeTopUpRequest(frame.payload));
|
|
93
|
-
return true;
|
|
94
69
|
case MessageType.PaymentRequired:
|
|
95
70
|
await this._onPaymentRequired?.(codec.decodePaymentRequired(frame.payload));
|
|
96
71
|
return true;
|
|
72
|
+
case MessageType.NeedAuth:
|
|
73
|
+
await this._onNeedAuth?.(codec.decodeNeedAuth(frame.payload));
|
|
74
|
+
return true;
|
|
97
75
|
default:
|
|
98
76
|
return false;
|
|
99
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment-mux.js","sourceRoot":"","sources":["../../src/p2p/payment-mux.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"payment-mux.js","sourceRoot":"","sources":["../../src/p2p/payment-mux.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { WalletInfo, Transaction, TransactionType } from './types.js';
|
|
2
2
|
export interface UnifiedBalance {
|
|
3
3
|
cryptoUSDC: number;
|
|
4
|
-
|
|
4
|
+
inDepositsUSDC: number;
|
|
5
5
|
totalUSD: number;
|
|
6
6
|
}
|
|
7
7
|
export declare class BalanceManager {
|
|
8
8
|
private transactions;
|
|
9
|
-
getBalance(walletInfo: WalletInfo | null,
|
|
9
|
+
getBalance(walletInfo: WalletInfo | null, inDepositsUSDC: number): UnifiedBalance;
|
|
10
10
|
recordTransaction(tx: Transaction): void;
|
|
11
11
|
getTransactionHistory(filter?: TransactionType, limit?: number, offset?: number): Transaction[];
|
|
12
12
|
getTotalEarnings(since?: number): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance-manager.d.ts","sourceRoot":"","sources":["../../src/payments/balance-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,
|
|
1
|
+
{"version":3,"file":"balance-manager.d.ts","sourceRoot":"","sources":["../../src/payments/balance-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAAqB;IAEzC,UAAU,CACR,UAAU,EAAE,UAAU,GAAG,IAAI,EAC7B,cAAc,EAAE,MAAM,GACrB,cAAc;IAWjB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI;IAIxC,qBAAqB,CACnB,MAAM,CAAC,EAAE,eAAe,EACxB,KAAK,CAAC,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,WAAW,EAAE;IAYhB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAOxC,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAOlC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS7C"}
|
|
@@ -2,12 +2,12 @@ import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
export class BalanceManager {
|
|
4
4
|
transactions = [];
|
|
5
|
-
getBalance(walletInfo,
|
|
5
|
+
getBalance(walletInfo, inDepositsUSDC) {
|
|
6
6
|
const cryptoUSDC = walletInfo ? parseFloat(walletInfo.balanceUSDC) : 0;
|
|
7
|
-
const totalUSD = cryptoUSDC +
|
|
7
|
+
const totalUSD = cryptoUSDC + inDepositsUSDC;
|
|
8
8
|
return {
|
|
9
9
|
cryptoUSDC,
|
|
10
|
-
|
|
10
|
+
inDepositsUSDC,
|
|
11
11
|
totalUSD,
|
|
12
12
|
};
|
|
13
13
|
}
|
|
@@ -25,13 +25,13 @@ export class BalanceManager {
|
|
|
25
25
|
}
|
|
26
26
|
getTotalEarnings(since) {
|
|
27
27
|
return this.transactions
|
|
28
|
-
.filter((tx) => tx.type === '
|
|
28
|
+
.filter((tx) => tx.type === 'deposit_release')
|
|
29
29
|
.filter((tx) => (since !== undefined ? tx.timestamp >= since : true))
|
|
30
30
|
.reduce((sum, tx) => sum + tx.amountUSD, 0);
|
|
31
31
|
}
|
|
32
32
|
getTotalSpending(since) {
|
|
33
33
|
return this.transactions
|
|
34
|
-
.filter((tx) => tx.type === '
|
|
34
|
+
.filter((tx) => tx.type === 'deposit_lock')
|
|
35
35
|
.filter((tx) => (since !== undefined ? tx.timestamp >= since : true))
|
|
36
36
|
.reduce((sum, tx) => sum + tx.amountUSD, 0);
|
|
37
37
|
}
|