@amadeus-protocol/sdk 1.0.0
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/LICENSE +21 -0
- package/README.md +410 -0
- package/dist/api/chain.d.ts +119 -0
- package/dist/api/chain.d.ts.map +1 -0
- package/dist/api/chain.js +147 -0
- package/dist/api/chain.js.map +1 -0
- package/dist/api/contract.d.ts +62 -0
- package/dist/api/contract.d.ts.map +1 -0
- package/dist/api/contract.js +76 -0
- package/dist/api/contract.js.map +1 -0
- package/dist/api/epoch.d.ts +68 -0
- package/dist/api/epoch.d.ts.map +1 -0
- package/dist/api/epoch.js +99 -0
- package/dist/api/epoch.js.map +1 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +8 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/peer.d.ts +80 -0
- package/dist/api/peer.d.ts.map +1 -0
- package/dist/api/peer.js +95 -0
- package/dist/api/peer.js.map +1 -0
- package/dist/api/proof.d.ts +25 -0
- package/dist/api/proof.d.ts.map +1 -0
- package/dist/api/proof.js +30 -0
- package/dist/api/proof.js.map +1 -0
- package/dist/api/transaction.d.ts +71 -0
- package/dist/api/transaction.d.ts.map +1 -0
- package/dist/api/transaction.js +85 -0
- package/dist/api/transaction.js.map +1 -0
- package/dist/api/wallet.d.ts +39 -0
- package/dist/api/wallet.d.ts.map +1 -0
- package/dist/api/wallet.js +51 -0
- package/dist/api/wallet.js.map +1 -0
- package/dist/client.d.ts +70 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +280 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +42 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +42 -0
- package/dist/constants.js.map +1 -0
- package/dist/conversion.d.ts +32 -0
- package/dist/conversion.d.ts.map +1 -0
- package/dist/conversion.js +50 -0
- package/dist/conversion.js.map +1 -0
- package/dist/crypto.d.ts +93 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +156 -0
- package/dist/crypto.js.map +1 -0
- package/dist/encoding.d.ts +108 -0
- package/dist/encoding.d.ts.map +1 -0
- package/dist/encoding.js +165 -0
- package/dist/encoding.js.map +1 -0
- package/dist/encryption.d.ts +76 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +137 -0
- package/dist/encryption.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas.d.ts +67 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +103 -0
- package/dist/schemas.js.map +1 -0
- package/dist/sdk.d.ts +100 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +120 -0
- package/dist/sdk.js.map +1 -0
- package/dist/serialization.d.ts +42 -0
- package/dist/serialization.d.ts.map +1 -0
- package/dist/serialization.js +247 -0
- package/dist/serialization.js.map +1 -0
- package/dist/transaction-builder.d.ts +267 -0
- package/dist/transaction-builder.d.ts.map +1 -0
- package/dist/transaction-builder.js +397 -0
- package/dist/transaction-builder.js.map +1 -0
- package/dist/types.d.ts +550 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +78 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +15 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +39 -0
- package/dist/validation.js.map +1 -0
- package/package.json +80 -0
package/dist/sdk.js
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Amadeus SDK
|
|
3
|
+
*
|
|
4
|
+
* Main SDK class that provides access to all API modules and utilities.
|
|
5
|
+
* This is the primary entry point for interacting with the Amadeus Protocol.
|
|
6
|
+
*/
|
|
7
|
+
import { AmadeusClient } from './client';
|
|
8
|
+
import { ChainAPI, PeerAPI, TransactionAPI, WalletAPI, ContractAPI, EpochAPI, ProofAPI } from './api';
|
|
9
|
+
import { SDK_VERSION, NODE_API_URL } from './constants';
|
|
10
|
+
/**
|
|
11
|
+
* Main Amadeus SDK class
|
|
12
|
+
*
|
|
13
|
+
* Provides a unified interface to interact with the Amadeus Protocol.
|
|
14
|
+
* All API modules are accessible through this class instance.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* import { AmadeusSDK } from '@amadeus-protocol/sdk'
|
|
19
|
+
*
|
|
20
|
+
* // Initialize SDK with default node URL
|
|
21
|
+
* const sdk = new AmadeusSDK({
|
|
22
|
+
* baseUrl: 'https://nodes.amadeus.bot/api'
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* // Query chain
|
|
26
|
+
* const tip = await sdk.chain.getTip()
|
|
27
|
+
* const stats = await sdk.chain.getStats()
|
|
28
|
+
*
|
|
29
|
+
* // Query wallet balances
|
|
30
|
+
* const balance = await sdk.wallet.getBalance('5Kd3N...', 'AMA')
|
|
31
|
+
* const allBalances = await sdk.wallet.getAllBalances('5Kd3N...')
|
|
32
|
+
*
|
|
33
|
+
* // Submit transaction
|
|
34
|
+
* const result = await sdk.transaction.submit(txPacked)
|
|
35
|
+
*
|
|
36
|
+
* // Query contracts
|
|
37
|
+
* const contractData = await sdk.contract.get(key)
|
|
38
|
+
*
|
|
39
|
+
* // Query epoch data
|
|
40
|
+
* const scores = await sdk.epoch.getScore()
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export class AmadeusSDK {
|
|
44
|
+
/** HTTP client instance */
|
|
45
|
+
client;
|
|
46
|
+
/** Chain API module for blockchain queries */
|
|
47
|
+
chain;
|
|
48
|
+
/** Peer API module for network information */
|
|
49
|
+
peer;
|
|
50
|
+
/** Transaction API module for submitting transactions */
|
|
51
|
+
transaction;
|
|
52
|
+
/** Wallet API module for balance queries */
|
|
53
|
+
wallet;
|
|
54
|
+
/** Contract API module for smart contract interactions */
|
|
55
|
+
contract;
|
|
56
|
+
/** Epoch API module for epoch and validator data */
|
|
57
|
+
epoch;
|
|
58
|
+
/** Proof API module for validator proofs */
|
|
59
|
+
proof;
|
|
60
|
+
/**
|
|
61
|
+
* Create a new AmadeusSDK instance
|
|
62
|
+
*
|
|
63
|
+
* @param config - SDK configuration
|
|
64
|
+
* @throws {AmadeusSDKError} If configuration is invalid
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* ```ts
|
|
68
|
+
* // Use default node URL
|
|
69
|
+
* const sdk = new AmadeusSDK({})
|
|
70
|
+
*
|
|
71
|
+
* // Use custom node URL
|
|
72
|
+
* const sdk = new AmadeusSDK({
|
|
73
|
+
* baseUrl: 'https://custom-node.com/api',
|
|
74
|
+
* timeout: 60000
|
|
75
|
+
* })
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
constructor(config = { baseUrl: NODE_API_URL }) {
|
|
79
|
+
this.client = new AmadeusClient(config);
|
|
80
|
+
// Initialize API modules
|
|
81
|
+
this.chain = new ChainAPI(this.client);
|
|
82
|
+
this.peer = new PeerAPI(this.client);
|
|
83
|
+
this.transaction = new TransactionAPI(this.client);
|
|
84
|
+
this.wallet = new WalletAPI(this.client);
|
|
85
|
+
this.contract = new ContractAPI(this.client);
|
|
86
|
+
this.epoch = new EpochAPI(this.client);
|
|
87
|
+
this.proof = new ProofAPI(this.client);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get SDK version
|
|
91
|
+
*/
|
|
92
|
+
static getVersion() {
|
|
93
|
+
return SDK_VERSION;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the current configuration
|
|
97
|
+
*/
|
|
98
|
+
getConfig() {
|
|
99
|
+
return this.client.getConfig();
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Update the base URL
|
|
103
|
+
*/
|
|
104
|
+
setBaseUrl(url) {
|
|
105
|
+
this.client.setBaseUrl(url);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Update headers
|
|
109
|
+
*/
|
|
110
|
+
setHeaders(headers) {
|
|
111
|
+
this.client.setHeaders(headers);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Cancel ongoing requests
|
|
115
|
+
*/
|
|
116
|
+
cancel() {
|
|
117
|
+
this.client.cancel();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=sdk.js.map
|
package/dist/sdk.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EACN,QAAQ,EACR,OAAO,EACP,cAAc,EACd,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,OAAO,UAAU;IACtB,2BAA2B;IACX,MAAM,CAAe;IAErC,8CAA8C;IAC9B,KAAK,CAAU;IAE/B,8CAA8C;IAC9B,IAAI,CAAS;IAE7B,yDAAyD;IACzC,WAAW,CAAgB;IAE3C,4CAA4C;IAC5B,MAAM,CAAW;IAEjC,0DAA0D;IAC1C,QAAQ,CAAa;IAErC,oDAAoD;IACpC,KAAK,CAAU;IAE/B,4CAA4C;IAC5B,KAAK,CAAU;IAE/B;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,SAA2B,EAAE,OAAO,EAAE,YAAY,EAAE;QAC/D,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;QAEvC,yBAAyB;QACzB,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC5C,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACvC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,UAAU;QAChB,OAAO,WAAW,CAAA;IACnB,CAAC;IAED;;OAEG;IACH,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,GAAW;QACrB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAA+B;QACzC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,MAAM;QACL,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;IACrB,CAAC;CACD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VecPack Canonical Serialization Format
|
|
3
|
+
*
|
|
4
|
+
* This module implements the VecPack canonical serialization format used by Amadeus.
|
|
5
|
+
* VecPack provides deterministic, canonical encoding of values for use in cryptographic
|
|
6
|
+
* operations (e.g., transaction signing). It ensures that equivalent data structures
|
|
7
|
+
* always serialize to the same byte sequence through canonical ordering of map keys.
|
|
8
|
+
*
|
|
9
|
+
* Format specification:
|
|
10
|
+
* - Supports: null, booleans, integers (varint), bytes, lists, and maps
|
|
11
|
+
* - Maps/objects are sorted by their encoded key bytes for canonical ordering
|
|
12
|
+
* - Varints are limited to 16 bytes maximum
|
|
13
|
+
* - Zero values are encoded as a single 0x00 byte
|
|
14
|
+
*/
|
|
15
|
+
import type { DecodedValue, SerializableValue } from './types';
|
|
16
|
+
/**
|
|
17
|
+
* Encode a value into canonical serialization format
|
|
18
|
+
*
|
|
19
|
+
* @param term - The value to encode
|
|
20
|
+
* @returns Encoded bytes as Uint8Array
|
|
21
|
+
* @throws Error if the value contains unsupported types
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* const encoded = encode({ foo: 'bar', count: 42 })
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function encode(term: SerializableValue): Uint8Array;
|
|
29
|
+
/**
|
|
30
|
+
* Decode a value from canonical serialization format
|
|
31
|
+
*
|
|
32
|
+
* @param bytes - The encoded bytes to decode
|
|
33
|
+
* @returns Decoded value
|
|
34
|
+
* @throws Error if the bytes are invalid or contain trailing bytes
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* const decoded = decode(encodedBytes)
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare function decode(bytes: Uint8Array | number[]): DecodedValue;
|
|
42
|
+
//# sourceMappingURL=serialization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAM9D;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,UAAU,CAI1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,GAAG,YAAY,CAQjE"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VecPack Canonical Serialization Format
|
|
3
|
+
*
|
|
4
|
+
* This module implements the VecPack canonical serialization format used by Amadeus.
|
|
5
|
+
* VecPack provides deterministic, canonical encoding of values for use in cryptographic
|
|
6
|
+
* operations (e.g., transaction signing). It ensures that equivalent data structures
|
|
7
|
+
* always serialize to the same byte sequence through canonical ordering of map keys.
|
|
8
|
+
*
|
|
9
|
+
* Format specification:
|
|
10
|
+
* - Supports: null, booleans, integers (varint), bytes, lists, and maps
|
|
11
|
+
* - Maps/objects are sorted by their encoded key bytes for canonical ordering
|
|
12
|
+
* - Varints are limited to 16 bytes maximum
|
|
13
|
+
* - Zero values are encoded as a single 0x00 byte
|
|
14
|
+
*/
|
|
15
|
+
const TYPE_NULL = 0x00;
|
|
16
|
+
const TYPE_TRUE = 0x01;
|
|
17
|
+
const TYPE_FALSE = 0x02;
|
|
18
|
+
const TYPE_INT = 0x03;
|
|
19
|
+
const TYPE_BYTES = 0x05;
|
|
20
|
+
const TYPE_LIST = 0x06;
|
|
21
|
+
const TYPE_MAP = 0x07;
|
|
22
|
+
/**
|
|
23
|
+
* Encode a value into canonical serialization format
|
|
24
|
+
*
|
|
25
|
+
* @param term - The value to encode
|
|
26
|
+
* @returns Encoded bytes as Uint8Array
|
|
27
|
+
* @throws Error if the value contains unsupported types
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* const encoded = encode({ foo: 'bar', count: 42 })
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function encode(term) {
|
|
35
|
+
const bytesOut = [];
|
|
36
|
+
encodeTerm(term, bytesOut);
|
|
37
|
+
return new Uint8Array(bytesOut);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Decode a value from canonical serialization format
|
|
41
|
+
*
|
|
42
|
+
* @param bytes - The encoded bytes to decode
|
|
43
|
+
* @returns Decoded value
|
|
44
|
+
* @throws Error if the bytes are invalid or contain trailing bytes
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* const decoded = decode(encodedBytes)
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function decode(bytes) {
|
|
52
|
+
const data = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
|
|
53
|
+
const ref = { offset: 0 };
|
|
54
|
+
const value = decodeTerm(data, ref);
|
|
55
|
+
if (ref.offset !== data.length) {
|
|
56
|
+
throw new Error('trailing_bytes');
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
/*
|
|
61
|
+
* Helper functions for encoding and decoding
|
|
62
|
+
*/
|
|
63
|
+
function appendBytes(out, bytes) {
|
|
64
|
+
for (const b of bytes) {
|
|
65
|
+
out.push(b);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function compareBytes(a, b) {
|
|
69
|
+
const n = Math.min(a.length, b.length);
|
|
70
|
+
for (let i = 0; i < n; i++) {
|
|
71
|
+
if (a[i] !== b[i])
|
|
72
|
+
return a[i] - b[i];
|
|
73
|
+
}
|
|
74
|
+
return a.length - b.length; // shorter wins if prefix equal
|
|
75
|
+
}
|
|
76
|
+
function encodeKeyBytes(k) {
|
|
77
|
+
const tmp = [];
|
|
78
|
+
encodeTerm(k, tmp);
|
|
79
|
+
return tmp;
|
|
80
|
+
}
|
|
81
|
+
function encodeVarint(n, out) {
|
|
82
|
+
let value = typeof n === 'bigint' ? n : BigInt(n);
|
|
83
|
+
if (value === 0n) {
|
|
84
|
+
out.push(0);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const isNegative = value < 0n;
|
|
88
|
+
if (isNegative)
|
|
89
|
+
value = -value;
|
|
90
|
+
// build big-endian magnitude
|
|
91
|
+
const magBytes = [];
|
|
92
|
+
while (value > 0n) {
|
|
93
|
+
magBytes.push(Number(value & 0xffn));
|
|
94
|
+
value >>= 8n;
|
|
95
|
+
}
|
|
96
|
+
magBytes.reverse(); // now big-endian
|
|
97
|
+
const len = magBytes.length;
|
|
98
|
+
if (len === 0 || len > 16) {
|
|
99
|
+
throw new Error('bad_varint_length');
|
|
100
|
+
}
|
|
101
|
+
// Rust also rejects leading zero in decode; we don't generate those here
|
|
102
|
+
if (magBytes[0] === 0) {
|
|
103
|
+
throw new Error('varint_leading_zero');
|
|
104
|
+
}
|
|
105
|
+
const header = ((isNegative ? 1 : 0) << 7) | len;
|
|
106
|
+
out.push(header);
|
|
107
|
+
appendBytes(out, magBytes);
|
|
108
|
+
}
|
|
109
|
+
function decodeVarint(data, ref) {
|
|
110
|
+
const header = data[ref.offset++];
|
|
111
|
+
if (header === 0)
|
|
112
|
+
return 0n;
|
|
113
|
+
if (header === 0x80)
|
|
114
|
+
throw new Error('noncanonical_zero');
|
|
115
|
+
const signBit = header >> 7;
|
|
116
|
+
const length = header & 0x7f;
|
|
117
|
+
let mag = 0n;
|
|
118
|
+
for (let i = 0; i < length; i++) {
|
|
119
|
+
mag = (mag << 8n) | BigInt(data[ref.offset++]);
|
|
120
|
+
}
|
|
121
|
+
if (mag > BigInt(Number.MAX_SAFE_INTEGER))
|
|
122
|
+
throw new Error('length_overflow');
|
|
123
|
+
if (signBit === 1) {
|
|
124
|
+
return -mag;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
return mag;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function decodeVarintGteZero(data, ref) {
|
|
131
|
+
const n = decodeVarint(data, ref);
|
|
132
|
+
if (n < 0n) {
|
|
133
|
+
throw new Error('length_is_negative');
|
|
134
|
+
}
|
|
135
|
+
return Number(n);
|
|
136
|
+
}
|
|
137
|
+
function encodeTerm(value, out) {
|
|
138
|
+
if (value === null) {
|
|
139
|
+
out.push(TYPE_NULL);
|
|
140
|
+
}
|
|
141
|
+
else if (typeof value === 'boolean') {
|
|
142
|
+
out.push(value ? TYPE_TRUE : TYPE_FALSE);
|
|
143
|
+
}
|
|
144
|
+
else if (typeof value === 'number' || typeof value === 'bigint') {
|
|
145
|
+
out.push(TYPE_INT);
|
|
146
|
+
encodeVarint(value, out);
|
|
147
|
+
}
|
|
148
|
+
else if (typeof value === 'string') {
|
|
149
|
+
out.push(TYPE_BYTES);
|
|
150
|
+
const utf8 = new TextEncoder().encode(value);
|
|
151
|
+
encodeVarint(utf8.length, out);
|
|
152
|
+
appendBytes(out, utf8);
|
|
153
|
+
}
|
|
154
|
+
else if (value instanceof Uint8Array) {
|
|
155
|
+
out.push(TYPE_BYTES);
|
|
156
|
+
encodeVarint(value.length, out);
|
|
157
|
+
appendBytes(out, value);
|
|
158
|
+
}
|
|
159
|
+
else if (Array.isArray(value)) {
|
|
160
|
+
out.push(TYPE_LIST);
|
|
161
|
+
encodeVarint(value.length, out);
|
|
162
|
+
for (const element of value) {
|
|
163
|
+
encodeTerm(element, out);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else if (value instanceof Map ||
|
|
167
|
+
(typeof value === 'object' && !Array.isArray(value) && !(value instanceof Uint8Array))) {
|
|
168
|
+
const entries = [];
|
|
169
|
+
if (value instanceof Map) {
|
|
170
|
+
for (const [k, v] of value.entries()) {
|
|
171
|
+
const bytes = encodeKeyBytes(k); // encodes key as Term
|
|
172
|
+
entries.push({ k, v, bytes });
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
for (const k of Object.keys(value)) {
|
|
177
|
+
const v = value[k];
|
|
178
|
+
const bytes = encodeKeyBytes(k); // k is string; still encoded via encodeValue
|
|
179
|
+
entries.push({ k, v, bytes });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
entries.sort((a, b) => compareBytes(a.bytes, b.bytes));
|
|
183
|
+
out.push(TYPE_MAP);
|
|
184
|
+
encodeVarint(entries.length, out);
|
|
185
|
+
for (const entry of entries) {
|
|
186
|
+
encodeTerm(entry.k, out);
|
|
187
|
+
encodeTerm(entry.v, out);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
throw new Error(`Unsupported type: ${typeof value}`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
function decodeTerm(data, ref) {
|
|
195
|
+
if (ref.offset >= data.length) {
|
|
196
|
+
throw new Error('decodeBytes: Out of bounds read');
|
|
197
|
+
}
|
|
198
|
+
const type = data[ref.offset++];
|
|
199
|
+
switch (type) {
|
|
200
|
+
case TYPE_NULL:
|
|
201
|
+
return null;
|
|
202
|
+
case TYPE_TRUE:
|
|
203
|
+
return true;
|
|
204
|
+
case TYPE_FALSE:
|
|
205
|
+
return false;
|
|
206
|
+
case TYPE_INT:
|
|
207
|
+
return decodeVarint(data, ref);
|
|
208
|
+
case TYPE_BYTES: {
|
|
209
|
+
const length = decodeVarintGteZero(data, ref);
|
|
210
|
+
const bytes = data.slice(ref.offset, ref.offset + length);
|
|
211
|
+
ref.offset += length;
|
|
212
|
+
return bytes;
|
|
213
|
+
}
|
|
214
|
+
case TYPE_LIST: {
|
|
215
|
+
const count = decodeVarintGteZero(data, ref);
|
|
216
|
+
const items = new Array(count);
|
|
217
|
+
for (let i = 0; i < count; i++) {
|
|
218
|
+
items[i] = decodeTerm(data, ref);
|
|
219
|
+
}
|
|
220
|
+
return items;
|
|
221
|
+
}
|
|
222
|
+
case TYPE_MAP: {
|
|
223
|
+
const count = decodeVarintGteZero(data, ref);
|
|
224
|
+
let prevKeyBytes = null;
|
|
225
|
+
const map = new Map();
|
|
226
|
+
for (let idx = 0; idx < count; idx++) {
|
|
227
|
+
// canonical check: track raw key bytes
|
|
228
|
+
const kStart = ref.offset;
|
|
229
|
+
const key = decodeTerm(data, ref);
|
|
230
|
+
const kEnd = ref.offset;
|
|
231
|
+
const keyBytes = data.slice(kStart, kEnd);
|
|
232
|
+
if (prevKeyBytes !== null) {
|
|
233
|
+
if (compareBytes(keyBytes, prevKeyBytes) <= 0) {
|
|
234
|
+
throw new Error('map_not_canonical');
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
prevKeyBytes = keyBytes;
|
|
238
|
+
const value = decodeTerm(data, ref);
|
|
239
|
+
map.set(key, value);
|
|
240
|
+
}
|
|
241
|
+
return map;
|
|
242
|
+
}
|
|
243
|
+
default:
|
|
244
|
+
throw new Error('decodeBytes: Unknown type');
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"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"}
|