cardano-hw-interop-lib 0.1.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 +16 -0
- package/README.md +55 -0
- package/dist/src/errors/index.d.ts +3 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +15 -0
- package/dist/src/errors/parseError.d.ts +58 -0
- package/dist/src/errors/parseError.d.ts.map +1 -0
- package/dist/src/errors/parseError.js +66 -0
- package/dist/src/errors/validationError.d.ts +24 -0
- package/dist/src/errors/validationError.d.ts.map +1 -0
- package/dist/src/errors/validationError.js +47 -0
- package/dist/src/index.d.ts +18 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +65 -0
- package/dist/src/parsers.d.ts +39 -0
- package/dist/src/parsers.d.ts.map +1 -0
- package/dist/src/parsers.js +98 -0
- package/dist/src/txParsers.d.ts +15 -0
- package/dist/src/txParsers.d.ts.map +1 -0
- package/dist/src/txParsers.js +161 -0
- package/dist/src/txSerializers.d.ts +5 -0
- package/dist/src/txSerializers.d.ts.map +1 -0
- package/dist/src/txSerializers.js +97 -0
- package/dist/src/txTransformers.d.ts +5 -0
- package/dist/src/txTransformers.d.ts.map +1 -0
- package/dist/src/txTransformers.js +50 -0
- package/dist/src/txValidators.d.ts +5 -0
- package/dist/src/txValidators.d.ts.map +1 -0
- package/dist/src/txValidators.js +129 -0
- package/dist/src/types.d.ts +192 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +45 -0
- package/dist/src/utils.d.ts +8 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +36 -0
- package/dist/test/integration/__fixtures__/encode.d.ts +9 -0
- package/dist/test/integration/__fixtures__/encode.d.ts.map +1 -0
- package/dist/test/integration/__fixtures__/encode.js +203 -0
- package/dist/test/integration/__fixtures__/parse.d.ts +21 -0
- package/dist/test/integration/__fixtures__/parse.d.ts.map +1 -0
- package/dist/test/integration/__fixtures__/parse.js +238 -0
- package/dist/test/integration/encode.test.d.ts +2 -0
- package/dist/test/integration/encode.test.d.ts.map +1 -0
- package/dist/test/integration/encode.test.js +16 -0
- package/dist/test/integration/parse.test.d.ts +2 -0
- package/dist/test/integration/parse.test.d.ts.map +1 -0
- package/dist/test/integration/parse.test.js +53 -0
- package/dist/test/test_utils.d.ts +24 -0
- package/dist/test/test_utils.d.ts.map +1 -0
- package/dist/test/test_utils.js +40 -0
- package/dist/test/unit/certificates.test.d.ts +1 -0
- package/dist/test/unit/certificates.test.d.ts.map +1 -0
- package/dist/test/unit/certificates.test.js +2 -0
- package/dist/test/unit/inputs.test.d.ts +2 -0
- package/dist/test/unit/inputs.test.d.ts.map +1 -0
- package/dist/test/unit/inputs.test.js +57 -0
- package/dist/test/unit/mint.test.d.ts +2 -0
- package/dist/test/unit/mint.test.d.ts.map +1 -0
- package/dist/test/unit/mint.test.js +74 -0
- package/dist/test/unit/outputs.test.d.ts +2 -0
- package/dist/test/unit/outputs.test.d.ts.map +1 -0
- package/dist/test/unit/outputs.test.js +77 -0
- package/dist/test/unit/withdrawals.test.d.ts +2 -0
- package/dist/test/unit/withdrawals.test.d.ts.map +1 -0
- package/dist/test/unit/withdrawals.test.js +48 -0
- package/package.json +50 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 Vacuumlabs
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
16
|
+
|
package/README.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# cardano-hw-interoperability-lib
|
|
2
|
+
|
|
3
|
+
JavaScript library to validate and transform Cardano transactions accroding to [CIP-0021](https://github.com/cardano-foundation/CIPs/blob/master/CIP-0021/CIP-0021.md).
|
|
4
|
+
|
|
5
|
+
## Available methods
|
|
6
|
+
|
|
7
|
+
The provided functions operate on either a:
|
|
8
|
+
* transaction body - only the transaction body as defined in the [shelley-ma.cddl#49](https://github.com/input-output-hk/cardano-ledger/blob/master/eras/shelley-ma/test-suite/cddl-files/shelley-ma.cddl#L49)
|
|
9
|
+
* transaction - transaction as defined in the [shelley-ma.cddl#13](https://github.com/input-output-hk/cardano-ledger/blob/master/eras/shelley-ma/test-suite/cddl-files/shelley-ma.cddl#L13)
|
|
10
|
+
* raw transaction - transaction outputted by `cardano-cli transaction build-raw`
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### `decode`
|
|
14
|
+
Parses a CBOR encoded input into a `TransactionBody`, `Transaction` or `RawTransaction`, respectively. If the CBOR is malformed the parser will throw an error. Available methods:
|
|
15
|
+
```ts
|
|
16
|
+
decodeTxBody(txBodyCbor: Buffer) => TransactionBody
|
|
17
|
+
decodeTx(txCbor: Buffer) => Transaction
|
|
18
|
+
decodeRawTx(rawTxCbor: Buffer) => RawTransaction
|
|
19
|
+
```
|
|
20
|
+
The `TransactionBody` object mostly follows the CDDL, but sometimes makes small deviations for better developer experience, such as parsing certain tuples as objects, or maps as arrays because working with maps is cumbersome in JavaScript.
|
|
21
|
+
|
|
22
|
+
When parsing a transaction or raw transaction, fields other than the transaction body are only decoded from CBOR and are not parsed according to the CDDL, in TypeScript they have type `unknown`.
|
|
23
|
+
|
|
24
|
+
### `encode`
|
|
25
|
+
Takes a `TransactionBody`, `Transaction` or `RawTransaction` object and encodes it back to CBOR using canonical CBOR serialization format as specified in [Section 3.9 of CBOR RFC](https://datatracker.ietf.org/doc/html/rfc7049#section-3.9). Available methods:
|
|
26
|
+
```ts
|
|
27
|
+
encodeTxBody(txBody: TransactionBody) => Buffer
|
|
28
|
+
encodeTx(tx: Transaction) => Buffer
|
|
29
|
+
encodeRawTx(rawTx: RawTransaction) => Buffer
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### `validate`
|
|
33
|
+
Takes a CBOR encoded input, validates it according to `CIP-0021` and returns an array of found validation errors.
|
|
34
|
+
The validation errors are of type `ValidationError` and we distinguish between *fixable* and *unfixable* errors. If the `validate` function reports:
|
|
35
|
+
* no *fixable* and no *unfixable* errors then the CBOR is already fully compliant with CIP-0021.
|
|
36
|
+
* only *fixable* errors then a call to a `transform` function will solve the found errors and the *transcation* will be compliant with CIP-0021.
|
|
37
|
+
* *unfixable* errors then the library is not able to transform the CBOR by itself.
|
|
38
|
+
|
|
39
|
+
Available methods:
|
|
40
|
+
```ts
|
|
41
|
+
validateTxBody(txBodyCbor: Buffer) => ValidationError[]
|
|
42
|
+
validateTx(txCbor: Buffer) => ValidationError[]
|
|
43
|
+
validateRawTx(rawTxCbor: Buffer) => ValidationError[]
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The list of all possible validation errors can be found [here](./src/errors/validationError.ts)
|
|
47
|
+
|
|
48
|
+
### `transform`
|
|
49
|
+
Takes a `TransactionBody`, `Transaction` or `RawTransaction` object and applies non-destructive transformations on it to fix fixable validation errors. Returns a new transformed object of the same type. Available methods:
|
|
50
|
+
```ts
|
|
51
|
+
transformTxBody(txBody: TransactionBody) => TransactionBody
|
|
52
|
+
transformTx(tx: Transaction) => Transaction
|
|
53
|
+
transformRawTx(rawTx: RawTransaction) => RawTransaction
|
|
54
|
+
```
|
|
55
|
+
Note: the length of the resulting CBOR might be increased or decreased which might affect the minimum required fee. An increase in CBOR length should be very rare.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/errors/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./parseError"), exports);
|
|
14
|
+
__exportStar(require("./validationError"), exports);
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZXJyb3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLCtDQUE0QjtBQUM1QixvREFBaUMifQ==
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export declare enum ParseErrorReason {
|
|
2
|
+
INVALID_ADDRESS = "Invalid address",
|
|
3
|
+
INVALID_REWARD_ACCOUNT = "Invalid reward account",
|
|
4
|
+
INVALID_COIN = "Invalid coin",
|
|
5
|
+
INVALID_EPOCH = "Invalid epoch",
|
|
6
|
+
INVALID_POLICY_ID = "Invalid policy id",
|
|
7
|
+
INVALID_ASSET_NAME = "Invalid asset name",
|
|
8
|
+
INVALID_MULTIASSET = "Invalid multiasset map",
|
|
9
|
+
INVALID_TRANSACTION_ID = "Invalid transaction id",
|
|
10
|
+
INVALID_TX_INPUT_INDEX = "Invalid transaction input index",
|
|
11
|
+
INVALID_TX_INPUT = "Invalid transaction input",
|
|
12
|
+
INVALID_OUTPUT_ADDRESS = "Invalid output address",
|
|
13
|
+
INVALID_OUTPUT_AMOUNT = "Invalid output amount",
|
|
14
|
+
INVALID_OUTPUT_MULTIASSET = "Invalid output multiasset",
|
|
15
|
+
INVALID_TX_OUTPUT = "Invalid transaction output",
|
|
16
|
+
INVALID_CERTIFICATE_TYPE = "Invalid certificate type",
|
|
17
|
+
INVALID_STAKE_CREDENTIAL_TYPE = "Invalid stake credential type",
|
|
18
|
+
INVALID_STAKE_CREDENTIAL_KEY_HASH = "Invalid stake credential key hash",
|
|
19
|
+
INVALID_STAKE_CREDENTIAL_SCRIPT_HASH = "Invalid stake credential script hash",
|
|
20
|
+
INVALID_STAKE_CREDENTIAL = "Invalid stake credential",
|
|
21
|
+
INVALID_POOL_KEY_HASH = "Invalid pool key hash",
|
|
22
|
+
INVALID_VRF_KEY_HASH = "Invalid vrf key hash",
|
|
23
|
+
INVALID_POOL_PARAMS = "Invalid pool params",
|
|
24
|
+
INVALID_UNIT_INTERVAL = "Invalid unit interval",
|
|
25
|
+
INVALID_UNIT_INTERVAL_START = "Invalid unit interval start",
|
|
26
|
+
INVALID_UNIT_INTERVAL_END = "Invalid unit interval end",
|
|
27
|
+
INVALID_POOL_OWNER = "Invalid pool owner",
|
|
28
|
+
INVALID_POOL_OWNERS = "Invalid pool owners",
|
|
29
|
+
INVALID_RELAY_TYPE = "Invalid relay type",
|
|
30
|
+
INVALID_RELAY_PORT = "Invalid relay port",
|
|
31
|
+
INVALID_RELAY_IPV4 = "Invalid relay IPv4",
|
|
32
|
+
INVALID_RELAY_IPV6 = "Invalid relay IPv6",
|
|
33
|
+
INVALID_RELAY_DNS_NAME = "Invalid relay DNS name",
|
|
34
|
+
INVALID_RELAY = "Invalid relay",
|
|
35
|
+
INVALID_RELAYS = "Invalid relays",
|
|
36
|
+
INVALID_POOL_METADATA_URL = "Invalid pool metadata url",
|
|
37
|
+
INVALID_POOL_METADATA_METADATA_HASH = "Invalid pool metadata metadata hash",
|
|
38
|
+
INVALID_POOL_METADATA = "Invalid pool metadata",
|
|
39
|
+
INVALID_CERTIFICATE = "Invalid certificate",
|
|
40
|
+
INVALID_WITHDRAWAL_AMOUNT = "Invalid withdrawal amount",
|
|
41
|
+
INVALID_MINT_AMOUNT = "Invalid mint amount",
|
|
42
|
+
INVALID_TX_BODY_CBOR = "Invalid transaction body CBOR",
|
|
43
|
+
INVALID_TX_INPUTS = "Invalid transaction inputs",
|
|
44
|
+
INVALID_TX_OUTPUTS = "Invalid transaction outputs",
|
|
45
|
+
INVALID_TX_FEE = "Invalid transaction fee",
|
|
46
|
+
INVALID_TX_TTL = "Invalid transaction ttl",
|
|
47
|
+
INVALID_TX_CERTIFICATES = "Invalid transaction certificates",
|
|
48
|
+
INVALID_TX_WITHDRAWALS = "Invalid transaction withdrawals",
|
|
49
|
+
INVALID_TX_METADATA_HASH = "Invalid transaction metadata hash",
|
|
50
|
+
INVALID_TX_VALIDITY_INTERVAL_START = "Invalid transaction validity interval start",
|
|
51
|
+
INVALID_TX_MINT = "Invalid transaction mint",
|
|
52
|
+
INVALID_TX_CBOR = "Invalid transaction CBOR",
|
|
53
|
+
INVALID_RAW_TX_CBOR = "Invalid raw transaction CBOR"
|
|
54
|
+
}
|
|
55
|
+
export declare class ParseError extends Error {
|
|
56
|
+
constructor(reason: ParseErrorReason);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=parseError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseError.d.ts","sourceRoot":"","sources":["../../../src/errors/parseError.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IACxB,eAAe,oBAAoB;IACnC,sBAAsB,2BAA2B;IACjD,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAE/B,iBAAiB,sBAAsB;IACvC,kBAAkB,uBAAuB;IACzC,kBAAkB,2BAA2B;IAE7C,sBAAsB,2BAA2B;IACjD,sBAAsB,oCAAoC;IAC1D,gBAAgB,8BAA8B;IAE9C,sBAAsB,2BAA2B;IACjD,qBAAqB,0BAA0B;IAC/C,yBAAyB,8BAA8B;IACvD,iBAAiB,+BAA+B;IAEhD,wBAAwB,6BAA6B;IACrD,6BAA6B,kCAAkC;IAC/D,iCAAiC,sCAAsC;IACvE,oCAAoC,yCAAyC;IAC7E,wBAAwB,6BAA6B;IACrD,qBAAqB,0BAA0B;IAC/C,oBAAoB,yBAAyB;IAC7C,mBAAmB,wBAAwB;IAC3C,qBAAqB,0BAA0B;IAC/C,2BAA2B,gCAAgC;IAC3D,yBAAyB,8BAA8B;IACvD,kBAAkB,uBAAuB;IACzC,mBAAmB,wBAAwB;IAC3C,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,sBAAsB,2BAA2B;IACjD,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,yBAAyB,8BAA8B;IACvD,mCAAmC,wCAAwC;IAC3E,qBAAqB,0BAA0B;IAC/C,mBAAmB,wBAAwB;IAE3C,yBAAyB,8BAA8B;IAEvD,mBAAmB,wBAAwB;IAE3C,oBAAoB,kCAAkC;IACtD,iBAAiB,+BAA+B;IAChD,kBAAkB,gCAAgC;IAClD,cAAc,4BAA4B;IAC1C,cAAc,4BAA4B;IAC1C,uBAAuB,qCAAqC;IAC5D,sBAAsB,oCAAoC;IAC1D,wBAAwB,sCAAsC;IAC9D,kCAAkC,gDAAgD;IAClF,eAAe,6BAA6B;IAE5C,eAAe,6BAA6B;IAC5C,mBAAmB,iCAAiC;CACvD;AAED,qBAAa,UAAW,SAAQ,KAAK;gBACd,MAAM,EAAE,gBAAgB;CAI9C"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ParseError = exports.ParseErrorReason = void 0;
|
|
4
|
+
var ParseErrorReason;
|
|
5
|
+
(function (ParseErrorReason) {
|
|
6
|
+
ParseErrorReason["INVALID_ADDRESS"] = "Invalid address";
|
|
7
|
+
ParseErrorReason["INVALID_REWARD_ACCOUNT"] = "Invalid reward account";
|
|
8
|
+
ParseErrorReason["INVALID_COIN"] = "Invalid coin";
|
|
9
|
+
ParseErrorReason["INVALID_EPOCH"] = "Invalid epoch";
|
|
10
|
+
ParseErrorReason["INVALID_POLICY_ID"] = "Invalid policy id";
|
|
11
|
+
ParseErrorReason["INVALID_ASSET_NAME"] = "Invalid asset name";
|
|
12
|
+
ParseErrorReason["INVALID_MULTIASSET"] = "Invalid multiasset map";
|
|
13
|
+
ParseErrorReason["INVALID_TRANSACTION_ID"] = "Invalid transaction id";
|
|
14
|
+
ParseErrorReason["INVALID_TX_INPUT_INDEX"] = "Invalid transaction input index";
|
|
15
|
+
ParseErrorReason["INVALID_TX_INPUT"] = "Invalid transaction input";
|
|
16
|
+
ParseErrorReason["INVALID_OUTPUT_ADDRESS"] = "Invalid output address";
|
|
17
|
+
ParseErrorReason["INVALID_OUTPUT_AMOUNT"] = "Invalid output amount";
|
|
18
|
+
ParseErrorReason["INVALID_OUTPUT_MULTIASSET"] = "Invalid output multiasset";
|
|
19
|
+
ParseErrorReason["INVALID_TX_OUTPUT"] = "Invalid transaction output";
|
|
20
|
+
ParseErrorReason["INVALID_CERTIFICATE_TYPE"] = "Invalid certificate type";
|
|
21
|
+
ParseErrorReason["INVALID_STAKE_CREDENTIAL_TYPE"] = "Invalid stake credential type";
|
|
22
|
+
ParseErrorReason["INVALID_STAKE_CREDENTIAL_KEY_HASH"] = "Invalid stake credential key hash";
|
|
23
|
+
ParseErrorReason["INVALID_STAKE_CREDENTIAL_SCRIPT_HASH"] = "Invalid stake credential script hash";
|
|
24
|
+
ParseErrorReason["INVALID_STAKE_CREDENTIAL"] = "Invalid stake credential";
|
|
25
|
+
ParseErrorReason["INVALID_POOL_KEY_HASH"] = "Invalid pool key hash";
|
|
26
|
+
ParseErrorReason["INVALID_VRF_KEY_HASH"] = "Invalid vrf key hash";
|
|
27
|
+
ParseErrorReason["INVALID_POOL_PARAMS"] = "Invalid pool params";
|
|
28
|
+
ParseErrorReason["INVALID_UNIT_INTERVAL"] = "Invalid unit interval";
|
|
29
|
+
ParseErrorReason["INVALID_UNIT_INTERVAL_START"] = "Invalid unit interval start";
|
|
30
|
+
ParseErrorReason["INVALID_UNIT_INTERVAL_END"] = "Invalid unit interval end";
|
|
31
|
+
ParseErrorReason["INVALID_POOL_OWNER"] = "Invalid pool owner";
|
|
32
|
+
ParseErrorReason["INVALID_POOL_OWNERS"] = "Invalid pool owners";
|
|
33
|
+
ParseErrorReason["INVALID_RELAY_TYPE"] = "Invalid relay type";
|
|
34
|
+
ParseErrorReason["INVALID_RELAY_PORT"] = "Invalid relay port";
|
|
35
|
+
ParseErrorReason["INVALID_RELAY_IPV4"] = "Invalid relay IPv4";
|
|
36
|
+
ParseErrorReason["INVALID_RELAY_IPV6"] = "Invalid relay IPv6";
|
|
37
|
+
ParseErrorReason["INVALID_RELAY_DNS_NAME"] = "Invalid relay DNS name";
|
|
38
|
+
ParseErrorReason["INVALID_RELAY"] = "Invalid relay";
|
|
39
|
+
ParseErrorReason["INVALID_RELAYS"] = "Invalid relays";
|
|
40
|
+
ParseErrorReason["INVALID_POOL_METADATA_URL"] = "Invalid pool metadata url";
|
|
41
|
+
ParseErrorReason["INVALID_POOL_METADATA_METADATA_HASH"] = "Invalid pool metadata metadata hash";
|
|
42
|
+
ParseErrorReason["INVALID_POOL_METADATA"] = "Invalid pool metadata";
|
|
43
|
+
ParseErrorReason["INVALID_CERTIFICATE"] = "Invalid certificate";
|
|
44
|
+
ParseErrorReason["INVALID_WITHDRAWAL_AMOUNT"] = "Invalid withdrawal amount";
|
|
45
|
+
ParseErrorReason["INVALID_MINT_AMOUNT"] = "Invalid mint amount";
|
|
46
|
+
ParseErrorReason["INVALID_TX_BODY_CBOR"] = "Invalid transaction body CBOR";
|
|
47
|
+
ParseErrorReason["INVALID_TX_INPUTS"] = "Invalid transaction inputs";
|
|
48
|
+
ParseErrorReason["INVALID_TX_OUTPUTS"] = "Invalid transaction outputs";
|
|
49
|
+
ParseErrorReason["INVALID_TX_FEE"] = "Invalid transaction fee";
|
|
50
|
+
ParseErrorReason["INVALID_TX_TTL"] = "Invalid transaction ttl";
|
|
51
|
+
ParseErrorReason["INVALID_TX_CERTIFICATES"] = "Invalid transaction certificates";
|
|
52
|
+
ParseErrorReason["INVALID_TX_WITHDRAWALS"] = "Invalid transaction withdrawals";
|
|
53
|
+
ParseErrorReason["INVALID_TX_METADATA_HASH"] = "Invalid transaction metadata hash";
|
|
54
|
+
ParseErrorReason["INVALID_TX_VALIDITY_INTERVAL_START"] = "Invalid transaction validity interval start";
|
|
55
|
+
ParseErrorReason["INVALID_TX_MINT"] = "Invalid transaction mint";
|
|
56
|
+
ParseErrorReason["INVALID_TX_CBOR"] = "Invalid transaction CBOR";
|
|
57
|
+
ParseErrorReason["INVALID_RAW_TX_CBOR"] = "Invalid raw transaction CBOR";
|
|
58
|
+
})(ParseErrorReason = exports.ParseErrorReason || (exports.ParseErrorReason = {}));
|
|
59
|
+
class ParseError extends Error {
|
|
60
|
+
constructor(reason) {
|
|
61
|
+
super(reason);
|
|
62
|
+
this.name = 'ParseError';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.ParseError = ParseError;
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VFcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lcnJvcnMvcGFyc2VFcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFZLGdCQTZEWDtBQTdERCxXQUFZLGdCQUFnQjtJQUN4Qix1REFBbUMsQ0FBQTtJQUNuQyxxRUFBaUQsQ0FBQTtJQUNqRCxpREFBNkIsQ0FBQTtJQUM3QixtREFBK0IsQ0FBQTtJQUUvQiwyREFBdUMsQ0FBQTtJQUN2Qyw2REFBeUMsQ0FBQTtJQUN6QyxpRUFBNkMsQ0FBQTtJQUU3QyxxRUFBaUQsQ0FBQTtJQUNqRCw4RUFBMEQsQ0FBQTtJQUMxRCxrRUFBOEMsQ0FBQTtJQUU5QyxxRUFBaUQsQ0FBQTtJQUNqRCxtRUFBK0MsQ0FBQTtJQUMvQywyRUFBdUQsQ0FBQTtJQUN2RCxvRUFBZ0QsQ0FBQTtJQUVoRCx5RUFBcUQsQ0FBQTtJQUNyRCxtRkFBK0QsQ0FBQTtJQUMvRCwyRkFBdUUsQ0FBQTtJQUN2RSxpR0FBNkUsQ0FBQTtJQUM3RSx5RUFBcUQsQ0FBQTtJQUNyRCxtRUFBK0MsQ0FBQTtJQUMvQyxpRUFBNkMsQ0FBQTtJQUM3QywrREFBMkMsQ0FBQTtJQUMzQyxtRUFBK0MsQ0FBQTtJQUMvQywrRUFBMkQsQ0FBQTtJQUMzRCwyRUFBdUQsQ0FBQTtJQUN2RCw2REFBeUMsQ0FBQTtJQUN6QywrREFBMkMsQ0FBQTtJQUMzQyw2REFBeUMsQ0FBQTtJQUN6Qyw2REFBeUMsQ0FBQTtJQUN6Qyw2REFBeUMsQ0FBQTtJQUN6Qyw2REFBeUMsQ0FBQTtJQUN6QyxxRUFBaUQsQ0FBQTtJQUNqRCxtREFBK0IsQ0FBQTtJQUMvQixxREFBaUMsQ0FBQTtJQUNqQywyRUFBdUQsQ0FBQTtJQUN2RCwrRkFBMkUsQ0FBQTtJQUMzRSxtRUFBK0MsQ0FBQTtJQUMvQywrREFBMkMsQ0FBQTtJQUUzQywyRUFBdUQsQ0FBQTtJQUV2RCwrREFBMkMsQ0FBQTtJQUUzQywwRUFBc0QsQ0FBQTtJQUN0RCxvRUFBZ0QsQ0FBQTtJQUNoRCxzRUFBa0QsQ0FBQTtJQUNsRCw4REFBMEMsQ0FBQTtJQUMxQyw4REFBMEMsQ0FBQTtJQUMxQyxnRkFBNEQsQ0FBQTtJQUM1RCw4RUFBMEQsQ0FBQTtJQUMxRCxrRkFBOEQsQ0FBQTtJQUM5RCxzR0FBa0YsQ0FBQTtJQUNsRixnRUFBNEMsQ0FBQTtJQUU1QyxnRUFBNEMsQ0FBQTtJQUM1Qyx3RUFBb0QsQ0FBQTtBQUN4RCxDQUFDLEVBN0RXLGdCQUFnQixHQUFoQix3QkFBZ0IsS0FBaEIsd0JBQWdCLFFBNkQzQjtBQUVELE1BQWEsVUFBVyxTQUFRLEtBQUs7SUFDakMsWUFBbUIsTUFBd0I7UUFDdkMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUE7SUFDNUIsQ0FBQztDQUNKO0FBTEQsZ0NBS0MifQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare enum ValidationErrorReason {
|
|
2
|
+
UNSUPPORTED_TX_UPDATE = "The transaction body entry update must not be included",
|
|
3
|
+
UNSUPPORTED_CERTIFICATE_GENESIS_KEY_DELEGATION = "Certificate of type genesis_key_delegation is not supported and must not be included",
|
|
4
|
+
UNSUPPORTED_CERTIFICATE_MOVE_INSTANTANEOUS_REWARDS_CERT = "Certificate of type move_instantaneous_rewards_cert is not supported and must not be included",
|
|
5
|
+
INTEGER_NOT_INT64 = "Hardware wallets support integers up to int64, integers from -2^63 to 2^63-1",
|
|
6
|
+
UNSIGNED_INTEGER_NOT_UINT64 = "Hardware wallets support unsigned integers up to uint64, unsigned integers from 0 to 2^64-1",
|
|
7
|
+
NUMBER_OF_ELEMENTS_EXCEEDS_UINT16 = "The number of transaction elements individually must not exceed UINT16_MAX, i.e. 65535",
|
|
8
|
+
CERTIFICATES_MUST_HAVE_THE_SAME_TYPE_OF_STAKE_CREDENTIAL = "All certificates included in a transaction must have the same type of stake credential",
|
|
9
|
+
WITHDRAWALS_MUST_HAVE_THE_SAME_TYPE_OF_STAKE_CREDENTIAL = "All withdrawals included in a transaction must have the same type of stake credential",
|
|
10
|
+
CERTIFICATES_AND_WITHDRAWALS_STAKE_CREDENTIAL_TYPES_MUST_BE_CONSISTENT = "The stake credential type of certificates must be consistent with the type used for withdrawals",
|
|
11
|
+
POOL_REGISTRATION_CERTIFICATE_WITH_OTHER_CERTIFICATES = "If a transaction contains a pool registration certificate, then it must not contain any other certificate",
|
|
12
|
+
POOL_REGISTRATION_CERTIFICATE_WITH_WITHDRAWALS = "If a transaction contains a pool registration certificate, then it must not contain any withdrawal",
|
|
13
|
+
POOL_REGISTRATION_CERTIFICATE_WITH_MINT_ENTRY = "If a transaction contains a pool registration certificate, then it must not contain mint entry",
|
|
14
|
+
CBOR_IS_NOT_CANONICAL = "CBOR is not canonical",
|
|
15
|
+
OPTIONAL_EMPTY_LISTS_AND_MAPS_MUST_NOT_BE_INCLUDED = "Optional empty lists and maps must not be included as part of the transaction body or its elements",
|
|
16
|
+
OUTPUT_WITHOUT_TOKENS_MUST_BE_A_SIMPLE_TUPLE = "Outputs containing no multi-asset tokens must be serialized as a simple tuple"
|
|
17
|
+
}
|
|
18
|
+
export declare type ValidationError = {
|
|
19
|
+
fixable: boolean;
|
|
20
|
+
reason: ValidationErrorReason;
|
|
21
|
+
position: string;
|
|
22
|
+
};
|
|
23
|
+
export declare const err: (reason: ValidationErrorReason, position: string) => ValidationError;
|
|
24
|
+
//# sourceMappingURL=validationError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validationError.d.ts","sourceRoot":"","sources":["../../../src/errors/validationError.ts"],"names":[],"mappings":"AAAA,oBAAY,qBAAqB;IAE7B,qBAAqB,2DAA2D;IAChF,8CAA8C,yFAAyF;IACvI,uDAAuD,kGAAkG;IACzJ,iBAAiB,iFAAiF;IAClG,2BAA2B,gGAAgG;IAC3H,iCAAiC,2FAA2F;IAC5H,wDAAwD,2FAA2F;IACnJ,uDAAuD,0FAA0F;IACjJ,sEAAsE,oGAAoG;IAC1K,qDAAqD,8GAA8G;IACnK,8CAA8C,uGAAuG;IACrJ,6CAA6C,mGAAmG;IAGhJ,qBAAqB,0BAA0B;IAC/C,kDAAkD,uGAAuG;IACzJ,4CAA4C,kFAAkF;CACjI;AAuBD,oBAAY,eAAe,GAAG;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAA;AAMD,eAAO,MAAM,GAAG,WAAY,qBAAqB,YAAY,MAAM,KAAG,eAIpE,CAAA"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.err = exports.ValidationErrorReason = void 0;
|
|
4
|
+
var ValidationErrorReason;
|
|
5
|
+
(function (ValidationErrorReason) {
|
|
6
|
+
ValidationErrorReason["UNSUPPORTED_TX_UPDATE"] = "The transaction body entry update must not be included";
|
|
7
|
+
ValidationErrorReason["UNSUPPORTED_CERTIFICATE_GENESIS_KEY_DELEGATION"] = "Certificate of type genesis_key_delegation is not supported and must not be included";
|
|
8
|
+
ValidationErrorReason["UNSUPPORTED_CERTIFICATE_MOVE_INSTANTANEOUS_REWARDS_CERT"] = "Certificate of type move_instantaneous_rewards_cert is not supported and must not be included";
|
|
9
|
+
ValidationErrorReason["INTEGER_NOT_INT64"] = "Hardware wallets support integers up to int64, integers from -2^63 to 2^63-1";
|
|
10
|
+
ValidationErrorReason["UNSIGNED_INTEGER_NOT_UINT64"] = "Hardware wallets support unsigned integers up to uint64, unsigned integers from 0 to 2^64-1";
|
|
11
|
+
ValidationErrorReason["NUMBER_OF_ELEMENTS_EXCEEDS_UINT16"] = "The number of transaction elements individually must not exceed UINT16_MAX, i.e. 65535";
|
|
12
|
+
ValidationErrorReason["CERTIFICATES_MUST_HAVE_THE_SAME_TYPE_OF_STAKE_CREDENTIAL"] = "All certificates included in a transaction must have the same type of stake credential";
|
|
13
|
+
ValidationErrorReason["WITHDRAWALS_MUST_HAVE_THE_SAME_TYPE_OF_STAKE_CREDENTIAL"] = "All withdrawals included in a transaction must have the same type of stake credential";
|
|
14
|
+
ValidationErrorReason["CERTIFICATES_AND_WITHDRAWALS_STAKE_CREDENTIAL_TYPES_MUST_BE_CONSISTENT"] = "The stake credential type of certificates must be consistent with the type used for withdrawals";
|
|
15
|
+
ValidationErrorReason["POOL_REGISTRATION_CERTIFICATE_WITH_OTHER_CERTIFICATES"] = "If a transaction contains a pool registration certificate, then it must not contain any other certificate";
|
|
16
|
+
ValidationErrorReason["POOL_REGISTRATION_CERTIFICATE_WITH_WITHDRAWALS"] = "If a transaction contains a pool registration certificate, then it must not contain any withdrawal";
|
|
17
|
+
ValidationErrorReason["POOL_REGISTRATION_CERTIFICATE_WITH_MINT_ENTRY"] = "If a transaction contains a pool registration certificate, then it must not contain mint entry";
|
|
18
|
+
ValidationErrorReason["CBOR_IS_NOT_CANONICAL"] = "CBOR is not canonical";
|
|
19
|
+
ValidationErrorReason["OPTIONAL_EMPTY_LISTS_AND_MAPS_MUST_NOT_BE_INCLUDED"] = "Optional empty lists and maps must not be included as part of the transaction body or its elements";
|
|
20
|
+
ValidationErrorReason["OUTPUT_WITHOUT_TOKENS_MUST_BE_A_SIMPLE_TUPLE"] = "Outputs containing no multi-asset tokens must be serialized as a simple tuple";
|
|
21
|
+
})(ValidationErrorReason = exports.ValidationErrorReason || (exports.ValidationErrorReason = {}));
|
|
22
|
+
const FIXABLE = true;
|
|
23
|
+
const UNFIXABLE = false;
|
|
24
|
+
const validationErrorFixability = {
|
|
25
|
+
[ValidationErrorReason.UNSUPPORTED_TX_UPDATE]: UNFIXABLE,
|
|
26
|
+
[ValidationErrorReason.UNSUPPORTED_CERTIFICATE_GENESIS_KEY_DELEGATION]: UNFIXABLE,
|
|
27
|
+
[ValidationErrorReason.UNSUPPORTED_CERTIFICATE_MOVE_INSTANTANEOUS_REWARDS_CERT]: UNFIXABLE,
|
|
28
|
+
[ValidationErrorReason.INTEGER_NOT_INT64]: UNFIXABLE,
|
|
29
|
+
[ValidationErrorReason.UNSIGNED_INTEGER_NOT_UINT64]: UNFIXABLE,
|
|
30
|
+
[ValidationErrorReason.NUMBER_OF_ELEMENTS_EXCEEDS_UINT16]: UNFIXABLE,
|
|
31
|
+
[ValidationErrorReason.CERTIFICATES_MUST_HAVE_THE_SAME_TYPE_OF_STAKE_CREDENTIAL]: UNFIXABLE,
|
|
32
|
+
[ValidationErrorReason.WITHDRAWALS_MUST_HAVE_THE_SAME_TYPE_OF_STAKE_CREDENTIAL]: UNFIXABLE,
|
|
33
|
+
[ValidationErrorReason.CERTIFICATES_AND_WITHDRAWALS_STAKE_CREDENTIAL_TYPES_MUST_BE_CONSISTENT]: UNFIXABLE,
|
|
34
|
+
[ValidationErrorReason.POOL_REGISTRATION_CERTIFICATE_WITH_OTHER_CERTIFICATES]: UNFIXABLE,
|
|
35
|
+
[ValidationErrorReason.POOL_REGISTRATION_CERTIFICATE_WITH_WITHDRAWALS]: UNFIXABLE,
|
|
36
|
+
[ValidationErrorReason.POOL_REGISTRATION_CERTIFICATE_WITH_MINT_ENTRY]: UNFIXABLE,
|
|
37
|
+
[ValidationErrorReason.CBOR_IS_NOT_CANONICAL]: FIXABLE,
|
|
38
|
+
[ValidationErrorReason.OPTIONAL_EMPTY_LISTS_AND_MAPS_MUST_NOT_BE_INCLUDED]: FIXABLE,
|
|
39
|
+
[ValidationErrorReason.OUTPUT_WITHOUT_TOKENS_MUST_BE_A_SIMPLE_TUPLE]: FIXABLE,
|
|
40
|
+
};
|
|
41
|
+
const err = (reason, position) => ({
|
|
42
|
+
fixable: validationErrorFixability[reason],
|
|
43
|
+
reason,
|
|
44
|
+
position,
|
|
45
|
+
});
|
|
46
|
+
exports.err = err;
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbkVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9ycy92YWxpZGF0aW9uRXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBWSxxQkFtQlg7QUFuQkQsV0FBWSxxQkFBcUI7SUFFN0IseUdBQWdGLENBQUE7SUFDaEYsZ0tBQXVJLENBQUE7SUFDdkksa0xBQXlKLENBQUE7SUFDekosMkhBQWtHLENBQUE7SUFDbEcsb0pBQTJILENBQUE7SUFDM0gscUpBQTRILENBQUE7SUFDNUgsNEtBQW1KLENBQUE7SUFDbkosMEtBQWlKLENBQUE7SUFDakosbU1BQTBLLENBQUE7SUFDMUssNExBQW1LLENBQUE7SUFDbkssOEtBQXFKLENBQUE7SUFDckoseUtBQWdKLENBQUE7SUFHaEosd0VBQStDLENBQUE7SUFDL0Msa0xBQXlKLENBQUE7SUFDekosdUpBQThILENBQUE7QUFDbEksQ0FBQyxFQW5CVyxxQkFBcUIsR0FBckIsNkJBQXFCLEtBQXJCLDZCQUFxQixRQW1CaEM7QUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUE7QUFDcEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFBO0FBRXZCLE1BQU0seUJBQXlCLEdBQTJDO0lBQ3RFLENBQUMscUJBQXFCLENBQUMscUJBQXFCLENBQUMsRUFBRSxTQUFTO0lBQ3hELENBQUMscUJBQXFCLENBQUMsOENBQThDLENBQUMsRUFBRSxTQUFTO0lBQ2pGLENBQUMscUJBQXFCLENBQUMsdURBQXVELENBQUMsRUFBRSxTQUFTO0lBQzFGLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsRUFBRSxTQUFTO0lBQ3BELENBQUMscUJBQXFCLENBQUMsMkJBQTJCLENBQUMsRUFBRSxTQUFTO0lBQzlELENBQUMscUJBQXFCLENBQUMsaUNBQWlDLENBQUMsRUFBRSxTQUFTO0lBQ3BFLENBQUMscUJBQXFCLENBQUMsd0RBQXdELENBQUMsRUFBRSxTQUFTO0lBQzNGLENBQUMscUJBQXFCLENBQUMsdURBQXVELENBQUMsRUFBRSxTQUFTO0lBQzFGLENBQUMscUJBQXFCLENBQUMsc0VBQXNFLENBQUMsRUFBRSxTQUFTO0lBQ3pHLENBQUMscUJBQXFCLENBQUMscURBQXFELENBQUMsRUFBRSxTQUFTO0lBQ3hGLENBQUMscUJBQXFCLENBQUMsOENBQThDLENBQUMsRUFBRSxTQUFTO0lBQ2pGLENBQUMscUJBQXFCLENBQUMsNkNBQTZDLENBQUMsRUFBRSxTQUFTO0lBQ2hGLENBQUMscUJBQXFCLENBQUMscUJBQXFCLENBQUMsRUFBRSxPQUFPO0lBQ3RELENBQUMscUJBQXFCLENBQUMsa0RBQWtELENBQUMsRUFBRSxPQUFPO0lBQ25GLENBQUMscUJBQXFCLENBQUMsNENBQTRDLENBQUMsRUFBRSxPQUFPO0NBQ2hGLENBQUE7QUFZTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQTZCLEVBQUUsUUFBZ0IsRUFBbUIsRUFBRSxDQUFDLENBQUM7SUFDdEYsT0FBTyxFQUFFLHlCQUF5QixDQUFDLE1BQU0sQ0FBQztJQUMxQyxNQUFNO0lBQ04sUUFBUTtDQUNYLENBQUMsQ0FBQTtBQUpXLFFBQUEsR0FBRyxPQUlkIn0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { ValidationError } from './errors';
|
|
3
|
+
import type { RawTransaction, Transaction, TransactionBody } from './types';
|
|
4
|
+
export type { ValidationError } from './errors';
|
|
5
|
+
export * from './types';
|
|
6
|
+
export declare const decodeTxBody: (txBodyCbor: Buffer) => TransactionBody;
|
|
7
|
+
export declare const decodeTx: (txCbor: Buffer) => Transaction;
|
|
8
|
+
export declare const decodeRawTx: (rawTxCbor: Buffer) => RawTransaction;
|
|
9
|
+
export declare const encodeTxBody: (txBody: TransactionBody) => Buffer;
|
|
10
|
+
export declare const encodeTx: (tx: Transaction) => Buffer;
|
|
11
|
+
export declare const encodeRawTx: (rawTx: RawTransaction) => Buffer;
|
|
12
|
+
export declare const validateTxBody: (txBodyCbor: Buffer) => ValidationError[];
|
|
13
|
+
export declare const validateTx: (txCbor: Buffer) => ValidationError[];
|
|
14
|
+
export declare const validateRawTx: (rawTxCbor: Buffer) => ValidationError[];
|
|
15
|
+
export declare const transformTxBody: (txBody: TransactionBody) => TransactionBody;
|
|
16
|
+
export declare const transformTx: (tx: Transaction) => Transaction;
|
|
17
|
+
export declare const transformRawTx: (rawTx: RawTransaction) => RawTransaction;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAK/C,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAG3E,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC/C,cAAc,SAAS,CAAA;AAUvB,eAAO,MAAM,YAAY,eAAgB,MAAM,KAAG,eACH,CAAA;AAS/C,eAAO,MAAM,QAAQ,WAAY,MAAM,KAAG,WACH,CAAA;AASvC,eAAO,MAAM,WAAW,cAAe,MAAM,KAAG,cACH,CAAA;AAW7C,eAAO,MAAM,YAAY,WAAY,eAAe,KAAG,MACF,CAAA;AAUrD,eAAO,MAAM,QAAQ,OAAQ,WAAW,KAAG,MACE,CAAA;AAU7C,eAAO,MAAM,WAAW,UAAW,cAAc,KAAG,MACD,CAAA;AAUnD,eAAO,MAAM,cAAc,eAAgB,MAAM,KAAG,eAAe,EAIlE,CAAA;AASD,eAAO,MAAM,UAAU,WAAY,MAAM,KAAG,eAAe,EAI1D,CAAA;AASD,eAAO,MAAM,aAAa,cAAe,MAAM,KAAG,eAAe,EAIhE,CAAA;AAaD,eAAO,MAAM,eAAe,8CAA+B,CAAA;AAa3D,eAAO,MAAM,WAAW,kCAA2B,CAAA;AAYnD,eAAO,MAAM,cAAc,2CAA8B,CAAA"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
22
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.transformRawTx = exports.transformTx = exports.transformTxBody = exports.validateRawTx = exports.validateTx = exports.validateTxBody = exports.encodeRawTx = exports.encodeTx = exports.encodeTxBody = exports.decodeRawTx = exports.decodeTx = exports.decodeTxBody = void 0;
|
|
26
|
+
const parsers = __importStar(require("./txParsers"));
|
|
27
|
+
const serializers = __importStar(require("./txSerializers"));
|
|
28
|
+
const transformers = __importStar(require("./txTransformers"));
|
|
29
|
+
const txValidators_1 = require("./txValidators");
|
|
30
|
+
const utils_1 = require("./utils");
|
|
31
|
+
__exportStar(require("./types"), exports);
|
|
32
|
+
const decodeTxBody = (txBodyCbor) => parsers.parseTxBody((0, utils_1.decodeCbor)(txBodyCbor));
|
|
33
|
+
exports.decodeTxBody = decodeTxBody;
|
|
34
|
+
const decodeTx = (txCbor) => parsers.parseTx((0, utils_1.decodeCbor)(txCbor));
|
|
35
|
+
exports.decodeTx = decodeTx;
|
|
36
|
+
const decodeRawTx = (rawTxCbor) => parsers.parseRawTx((0, utils_1.decodeCbor)(rawTxCbor));
|
|
37
|
+
exports.decodeRawTx = decodeRawTx;
|
|
38
|
+
const encodeTxBody = (txBody) => (0, utils_1.encodeToCbor)(serializers.serializeTxBody(txBody));
|
|
39
|
+
exports.encodeTxBody = encodeTxBody;
|
|
40
|
+
const encodeTx = (tx) => (0, utils_1.encodeToCbor)(serializers.serializeTx(tx));
|
|
41
|
+
exports.encodeTx = encodeTx;
|
|
42
|
+
const encodeRawTx = (rawTx) => (0, utils_1.encodeToCbor)(serializers.serializeRawTx(rawTx));
|
|
43
|
+
exports.encodeRawTx = encodeRawTx;
|
|
44
|
+
const validateTxBody = (txBodyCbor) => {
|
|
45
|
+
const txBody = (0, exports.decodeTxBody)(txBodyCbor);
|
|
46
|
+
const canonicalTxBodyCbor = (0, exports.encodeTxBody)(txBody);
|
|
47
|
+
return (0, txValidators_1.validateTxCommon)(txBodyCbor, canonicalTxBodyCbor, txBody);
|
|
48
|
+
};
|
|
49
|
+
exports.validateTxBody = validateTxBody;
|
|
50
|
+
const validateTx = (txCbor) => {
|
|
51
|
+
const tx = (0, exports.decodeTx)(txCbor);
|
|
52
|
+
const canonicalTxCbor = (0, exports.encodeTx)(tx);
|
|
53
|
+
return (0, txValidators_1.validateTxCommon)(txCbor, canonicalTxCbor, tx.body);
|
|
54
|
+
};
|
|
55
|
+
exports.validateTx = validateTx;
|
|
56
|
+
const validateRawTx = (rawTxCbor) => {
|
|
57
|
+
const rawTx = (0, exports.decodeRawTx)(rawTxCbor);
|
|
58
|
+
const canonicalRawTxCbor = (0, exports.encodeRawTx)(rawTx);
|
|
59
|
+
return (0, txValidators_1.validateTxCommon)(rawTxCbor, canonicalRawTxCbor, rawTx.body);
|
|
60
|
+
};
|
|
61
|
+
exports.validateRawTx = validateRawTx;
|
|
62
|
+
exports.transformTxBody = transformers.transformTxBody;
|
|
63
|
+
exports.transformTx = transformers.transformTx;
|
|
64
|
+
exports.transformRawTx = transformers.transformRawTx;
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHFEQUFzQztBQUN0Qyw2REFBOEM7QUFDOUMsK0RBQWdEO0FBQ2hELGlEQUFpRDtBQUVqRCxtQ0FBa0Q7QUFHbEQsMENBQXVCO0FBVWhCLE1BQU0sWUFBWSxHQUFHLENBQUMsVUFBa0IsRUFBbUIsRUFBRSxDQUNoRSxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUEsa0JBQVUsRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0FBRGxDLFFBQUEsWUFBWSxnQkFDc0I7QUFTeEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFjLEVBQWUsRUFBRSxDQUNwRCxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUEsa0JBQVUsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBRDFCLFFBQUEsUUFBUSxZQUNrQjtBQVNoQyxNQUFNLFdBQVcsR0FBRyxDQUFDLFNBQWlCLEVBQWtCLEVBQUUsQ0FDN0QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFBLGtCQUFVLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtBQURoQyxRQUFBLFdBQVcsZUFDcUI7QUFXdEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUF1QixFQUFVLEVBQUUsQ0FDNUQsSUFBQSxvQkFBWSxFQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUR4QyxRQUFBLFlBQVksZ0JBQzRCO0FBVTlDLE1BQU0sUUFBUSxHQUFHLENBQUMsRUFBZSxFQUFVLEVBQUUsQ0FDaEQsSUFBQSxvQkFBWSxFQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQURoQyxRQUFBLFFBQVEsWUFDd0I7QUFVdEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFxQixFQUFVLEVBQUUsQ0FDekQsSUFBQSxvQkFBWSxFQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUR0QyxRQUFBLFdBQVcsZUFDMkI7QUFVNUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxVQUFrQixFQUFxQixFQUFFO0lBQ3BFLE1BQU0sTUFBTSxHQUFHLElBQUEsb0JBQVksRUFBQyxVQUFVLENBQUMsQ0FBQTtJQUN2QyxNQUFNLG1CQUFtQixHQUFHLElBQUEsb0JBQVksRUFBQyxNQUFNLENBQUMsQ0FBQTtJQUNoRCxPQUFPLElBQUEsK0JBQWdCLEVBQUMsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQ3BFLENBQUMsQ0FBQTtBQUpZLFFBQUEsY0FBYyxrQkFJMUI7QUFTTSxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQWMsRUFBcUIsRUFBRTtJQUM1RCxNQUFNLEVBQUUsR0FBRyxJQUFBLGdCQUFRLEVBQUMsTUFBTSxDQUFDLENBQUE7SUFDM0IsTUFBTSxlQUFlLEdBQUcsSUFBQSxnQkFBUSxFQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3BDLE9BQU8sSUFBQSwrQkFBZ0IsRUFBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUM3RCxDQUFDLENBQUE7QUFKWSxRQUFBLFVBQVUsY0FJdEI7QUFTTSxNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQWlCLEVBQXFCLEVBQUU7SUFDbEUsTUFBTSxLQUFLLEdBQUcsSUFBQSxtQkFBVyxFQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3BDLE1BQU0sa0JBQWtCLEdBQUcsSUFBQSxtQkFBVyxFQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzdDLE9BQU8sSUFBQSwrQkFBZ0IsRUFBQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3RFLENBQUMsQ0FBQTtBQUpZLFFBQUEsYUFBYSxpQkFJekI7QUFhWSxRQUFBLGVBQWUsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFBO0FBYTlDLFFBQUEsV0FBVyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUE7QUFZdEMsUUFBQSxjQUFjLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQSJ9
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { ParseErrorReason } from './errors';
|
|
3
|
+
import type { FixlenBuffer, Int, MaxlenBuffer, MaxlenString, MaxsizeUint, Uint } from './types';
|
|
4
|
+
export declare function validate(cond: boolean, errMsg: ParseErrorReason): asserts cond;
|
|
5
|
+
export declare const isArray: (data: unknown) => data is unknown[];
|
|
6
|
+
export declare const isMap: (data: unknown) => data is Map<unknown, unknown>;
|
|
7
|
+
export declare const isMapWithKeysOfType: <K>(data: unknown, keyTypeAssert: (key: unknown) => key is K) => data is Map<K, unknown>;
|
|
8
|
+
export declare const isStringOfMaxLength: <L extends number>(data: unknown, maxLength: L) => data is MaxlenString<L>;
|
|
9
|
+
export declare const isBuffer: (data: unknown) => data is Buffer;
|
|
10
|
+
export declare const isBufferOfLength: <L extends number>(data: unknown, expectedLength: L) => data is FixlenBuffer<L>;
|
|
11
|
+
export declare const isBufferOfMaxLength: <L extends number>(data: unknown, maxLength: L) => data is MaxlenBuffer<L>;
|
|
12
|
+
export declare const isNumber: (data: unknown) => data is number;
|
|
13
|
+
export declare const isInt: (data: unknown) => data is Int;
|
|
14
|
+
export declare const isUint: (data: unknown) => data is Uint;
|
|
15
|
+
export declare const isUintOfMaxSize: <N extends number>(data: unknown, maxSize: N) => data is MaxsizeUint<N>;
|
|
16
|
+
export declare const parseInt: (data: unknown, errMsg: ParseErrorReason) => Int;
|
|
17
|
+
export declare const parseUint: (data: unknown, errMsg: ParseErrorReason) => Uint;
|
|
18
|
+
export declare const parseStringOfMaxLength: <L extends number>(data: unknown, maxLength: L, errMsg: ParseErrorReason) => MaxlenString<L>;
|
|
19
|
+
export declare const parseBuffer: (data: unknown, errMsg: ParseErrorReason) => Buffer;
|
|
20
|
+
export declare const parseBufferOfLength: <L extends number>(data: unknown, length: L, errMsg: ParseErrorReason) => FixlenBuffer<L>;
|
|
21
|
+
export declare const parseBufferOfMaxLength: <L extends number>(data: unknown, maxLength: L, errMsg: ParseErrorReason) => MaxlenBuffer<L>;
|
|
22
|
+
export declare type Parser<T> = (data: unknown) => T;
|
|
23
|
+
export declare function createParser<L extends number>(parser: (data: unknown, length: L, errMsg: ParseErrorReason) => FixlenBuffer<L>, length: L, errMsg: ParseErrorReason): Parser<FixlenBuffer<L>>;
|
|
24
|
+
export declare function createParser<L extends number>(parser: (data: unknown, maxLength: L, errMsg: ParseErrorReason) => MaxlenBuffer<L>, maxLength: L, errMsg: ParseErrorReason): Parser<MaxlenBuffer<L>>;
|
|
25
|
+
export declare function createParser<L extends number>(parser: (data: unknown, maxLength: L, errMsg: ParseErrorReason) => MaxlenString<L>, maxLength: L, errMsg: ParseErrorReason): Parser<MaxlenString<L>>;
|
|
26
|
+
export declare function createParser<T, A extends any[]>(parser: (data: unknown, ...args: [...A]) => T, ...args: [...A]): Parser<T>;
|
|
27
|
+
export declare const parseMap: <K, V>(data: unknown, parseKey: Parser<K>, parseValue: Parser<V>, errMsg: ParseErrorReason) => Map<K, V>;
|
|
28
|
+
export declare const parseArray: <T>(data: unknown, parseEntry: Parser<T>, errMsg: ParseErrorReason) => T[];
|
|
29
|
+
export declare const parseTuple: <T extends any[]>(data: unknown, errMsg: ParseErrorReason, ...parsers: { [K in keyof T]: Parser<T[K]>; }) => T;
|
|
30
|
+
export declare const parseOptional: <T>(data: unknown, parser: Parser<T>) => T | undefined;
|
|
31
|
+
export declare const parseNullable: <T>(data: unknown, parser: Parser<T>) => T | null;
|
|
32
|
+
export declare type WithoutType<T> = Omit<T, 'type'>;
|
|
33
|
+
declare type ArrayParser<T> = (data: unknown[]) => T;
|
|
34
|
+
declare type ParsersWithoutType<T> = {
|
|
35
|
+
[K in keyof T]: ArrayParser<WithoutType<T[K]>>;
|
|
36
|
+
};
|
|
37
|
+
export declare const parseBasedOnType: <T extends number, U extends any[]>(data: unknown, errMsg: ParseErrorReason, typeParser: Parser<T>, ...parsers_0: ParsersWithoutType<U>) => U[T];
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=parsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parsers.d.ts","sourceRoot":"","sources":["../../src/parsers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseBasedOnType = exports.parseNullable = exports.parseOptional = exports.parseTuple = exports.parseArray = exports.parseMap = exports.createParser = exports.parseBufferOfMaxLength = exports.parseBufferOfLength = exports.parseBuffer = exports.parseStringOfMaxLength = exports.parseUint = exports.parseInt = exports.isUintOfMaxSize = exports.isUint = exports.isInt = exports.isNumber = exports.isBufferOfMaxLength = exports.isBufferOfLength = exports.isBuffer = exports.isStringOfMaxLength = exports.isMapWithKeysOfType = exports.isMap = exports.isArray = exports.validate = void 0;
|
|
4
|
+
const errors_1 = require("./errors");
|
|
5
|
+
function validate(cond, errMsg) {
|
|
6
|
+
if (!cond)
|
|
7
|
+
throw new errors_1.ParseError(errMsg);
|
|
8
|
+
}
|
|
9
|
+
exports.validate = validate;
|
|
10
|
+
const isArray = (data) => Array.isArray(data);
|
|
11
|
+
exports.isArray = isArray;
|
|
12
|
+
const isMap = (data) => data instanceof Map;
|
|
13
|
+
exports.isMap = isMap;
|
|
14
|
+
const isMapWithKeysOfType = (data, keyTypeAssert) => (0, exports.isMap)(data) && Array.from(data.keys()).every(keyTypeAssert);
|
|
15
|
+
exports.isMapWithKeysOfType = isMapWithKeysOfType;
|
|
16
|
+
const isStringOfMaxLength = (data, maxLength) => typeof data === 'string' && data.length <= maxLength;
|
|
17
|
+
exports.isStringOfMaxLength = isStringOfMaxLength;
|
|
18
|
+
const isBuffer = (data) => Buffer.isBuffer(data);
|
|
19
|
+
exports.isBuffer = isBuffer;
|
|
20
|
+
const isBufferOfLength = (data, expectedLength) => (0, exports.isBuffer)(data) && data.length === expectedLength;
|
|
21
|
+
exports.isBufferOfLength = isBufferOfLength;
|
|
22
|
+
const isBufferOfMaxLength = (data, maxLength) => (0, exports.isBuffer)(data) && data.length <= maxLength;
|
|
23
|
+
exports.isBufferOfMaxLength = isBufferOfMaxLength;
|
|
24
|
+
const isNumber = (data) => typeof data === 'number';
|
|
25
|
+
exports.isNumber = isNumber;
|
|
26
|
+
const isInt = (data) => (0, exports.isNumber)(data) || typeof data === 'bigint';
|
|
27
|
+
exports.isInt = isInt;
|
|
28
|
+
const isUint = (data) => (0, exports.isInt)(data) && data >= 0;
|
|
29
|
+
exports.isUint = isUint;
|
|
30
|
+
const isUintOfMaxSize = (data, maxSize) => (0, exports.isUint)(data) && data <= maxSize;
|
|
31
|
+
exports.isUintOfMaxSize = isUintOfMaxSize;
|
|
32
|
+
const parseInt = (data, errMsg) => {
|
|
33
|
+
validate((0, exports.isInt)(data), errMsg);
|
|
34
|
+
return data;
|
|
35
|
+
};
|
|
36
|
+
exports.parseInt = parseInt;
|
|
37
|
+
const parseUint = (data, errMsg) => {
|
|
38
|
+
validate((0, exports.isUint)(data), errMsg);
|
|
39
|
+
return data;
|
|
40
|
+
};
|
|
41
|
+
exports.parseUint = parseUint;
|
|
42
|
+
const parseStringOfMaxLength = (data, maxLength, errMsg) => {
|
|
43
|
+
validate((0, exports.isStringOfMaxLength)(data, maxLength), errMsg);
|
|
44
|
+
return data;
|
|
45
|
+
};
|
|
46
|
+
exports.parseStringOfMaxLength = parseStringOfMaxLength;
|
|
47
|
+
const parseBuffer = (data, errMsg) => {
|
|
48
|
+
validate((0, exports.isBuffer)(data), errMsg);
|
|
49
|
+
return data;
|
|
50
|
+
};
|
|
51
|
+
exports.parseBuffer = parseBuffer;
|
|
52
|
+
const parseBufferOfLength = (data, length, errMsg) => {
|
|
53
|
+
validate((0, exports.isBufferOfLength)(data, length), errMsg);
|
|
54
|
+
return data;
|
|
55
|
+
};
|
|
56
|
+
exports.parseBufferOfLength = parseBufferOfLength;
|
|
57
|
+
const parseBufferOfMaxLength = (data, maxLength, errMsg) => {
|
|
58
|
+
validate((0, exports.isBufferOfMaxLength)(data, maxLength), errMsg);
|
|
59
|
+
return data;
|
|
60
|
+
};
|
|
61
|
+
exports.parseBufferOfMaxLength = parseBufferOfMaxLength;
|
|
62
|
+
function createParser(parser, ...args) {
|
|
63
|
+
return (data) => parser(data, ...args);
|
|
64
|
+
}
|
|
65
|
+
exports.createParser = createParser;
|
|
66
|
+
const parseMap = (data, parseKey, parseValue, errMsg) => {
|
|
67
|
+
validate((0, exports.isMap)(data), errMsg);
|
|
68
|
+
return new Map(Array.from(data.entries()).map(([key, value]) => [parseKey(key), parseValue(value)]));
|
|
69
|
+
};
|
|
70
|
+
exports.parseMap = parseMap;
|
|
71
|
+
const parseArray = (data, parseEntry, errMsg) => {
|
|
72
|
+
validate((0, exports.isArray)(data), errMsg);
|
|
73
|
+
return data.map((value) => parseEntry(value));
|
|
74
|
+
};
|
|
75
|
+
exports.parseArray = parseArray;
|
|
76
|
+
const parseTuple = (data, errMsg, ...parsers) => {
|
|
77
|
+
validate((0, exports.isArray)(data), errMsg);
|
|
78
|
+
validate(data.length <= parsers.length, errMsg);
|
|
79
|
+
return parsers.map((parser, index) => parser(data[index]));
|
|
80
|
+
};
|
|
81
|
+
exports.parseTuple = parseTuple;
|
|
82
|
+
const parseOptional = (data, parser) => data === undefined ? undefined : parser(data);
|
|
83
|
+
exports.parseOptional = parseOptional;
|
|
84
|
+
const parseNullable = (data, parser) => data === null ? null : parser(data);
|
|
85
|
+
exports.parseNullable = parseNullable;
|
|
86
|
+
const parseBasedOnType = (data, errMsg, typeParser, ...parsers) => {
|
|
87
|
+
validate((0, exports.isArray)(data), errMsg);
|
|
88
|
+
validate(data.length >= 1, errMsg);
|
|
89
|
+
const [unparsedType, ...rest] = data;
|
|
90
|
+
const type = typeParser(unparsedType);
|
|
91
|
+
validate(parsers[type] !== undefined, errMsg);
|
|
92
|
+
return {
|
|
93
|
+
type,
|
|
94
|
+
...parsers[type](rest),
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
exports.parseBasedOnType = parseBasedOnType;
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Vycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJzZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFDQUFxQztBQUdyQyxTQUFnQixRQUFRLENBQUMsSUFBYSxFQUFFLE1BQXdCO0lBQzVELElBQUksQ0FBQyxJQUFJO1FBQUUsTUFBTSxJQUFJLG1CQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDM0MsQ0FBQztBQUZELDRCQUVDO0FBRU0sTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFhLEVBQTBCLEVBQUUsQ0FDN0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQURWLFFBQUEsT0FBTyxXQUNHO0FBRWhCLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBYSxFQUFpQyxFQUFFLENBQ2xFLElBQUksWUFBWSxHQUFHLENBQUE7QUFEVixRQUFBLEtBQUssU0FDSztBQUVoQixNQUFNLG1CQUFtQixHQUFHLENBQUksSUFBYSxFQUFFLGFBQXlDLEVBQTJCLEVBQUUsQ0FDeEgsSUFBQSxhQUFLLEVBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7QUFEbEQsUUFBQSxtQkFBbUIsdUJBQytCO0FBRXhELE1BQU0sbUJBQW1CLEdBQUcsQ0FBbUIsSUFBYSxFQUFFLFNBQVksRUFBMkIsRUFBRSxDQUMxRyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUE7QUFEM0MsUUFBQSxtQkFBbUIsdUJBQ3dCO0FBRWpELE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBYSxFQUFrQixFQUFFLENBQ3RELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7QUFEWixRQUFBLFFBQVEsWUFDSTtBQUVsQixNQUFNLGdCQUFnQixHQUFHLENBQW1CLElB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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Parser } from './parsers';
|
|
2
|
+
import type { GenesisKeyDelegation, MoveInstantaneousRewardsCertificate, Multiasset, PoolRegistrationCertificate, PoolRetirementCertificate, RawTransaction, StakeDelegationCertificate, StakeDeregistrationCertificate, StakeRegistrationCertificate, Transaction, TransactionBody, TransactionInput, TransactionOutput, Withdrawal } from './types';
|
|
3
|
+
export declare const parseWithdrawals: (unparsedWithdrawals: unknown) => Withdrawal[];
|
|
4
|
+
export declare const parseInputs: Parser<TransactionInput[]>;
|
|
5
|
+
export declare const parseOutputs: Parser<TransactionOutput[]>;
|
|
6
|
+
export declare const parseFee: Parser<import("./types").Uint>;
|
|
7
|
+
export declare const parseTtl: Parser<import("./types").Uint>;
|
|
8
|
+
export declare const parseCertificates: Parser<(StakeRegistrationCertificate | StakeDeregistrationCertificate | StakeDelegationCertificate | PoolRegistrationCertificate | PoolRetirementCertificate | GenesisKeyDelegation | MoveInstantaneousRewardsCertificate)[]>;
|
|
9
|
+
export declare const parseMetadataHash: Parser<import("./types").FixlenBuffer<32>>;
|
|
10
|
+
export declare const parseValidityIntervalStart: Parser<import("./types").Uint>;
|
|
11
|
+
export declare const parseMint: Parser<Multiasset<import("./types").Int>>;
|
|
12
|
+
export declare const parseTxBody: (unparsedTxBody: unknown) => TransactionBody;
|
|
13
|
+
export declare const parseTx: (unparsedTx: unknown) => Transaction;
|
|
14
|
+
export declare const parseRawTx: (unparsedRawTx: unknown) => RawTransaction;
|
|
15
|
+
//# sourceMappingURL=txParsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txParsers.d.ts","sourceRoot":"","sources":["../../src/txParsers.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,WAAW,CAAA;AAIpD,OAAO,KAAK,EAAU,oBAAoB,EAAE,mCAAmC,EAAE,UAAU,EAA4B,2BAA2B,EAAE,yBAAyB,EAAQ,cAAc,EAA8G,0BAA0B,EAAE,8BAA8B,EAAE,4BAA4B,EAAE,WAAW,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAY,UAAU,EAAE,MAAM,SAAS,CAAA;AA4Enf,eAAO,MAAM,gBAAgB,wBAAyB,OAAO,KAAG,UAAU,EAIzE,CAAA;AAoJD,eAAO,MAAM,WAAW,4BAA6E,CAAA;AACrG,eAAO,MAAM,YAAY,6BAA+E,CAAA;AACxG,eAAO,MAAM,QAAQ,gCAA2D,CAAA;AAChF,eAAO,MAAM,QAAQ,gCAA2D,CAAA;AAChF,eAAO,MAAM,iBAAiB,+NAAuF,CAAA;AACrH,eAAO,MAAM,iBAAiB,4CAAqG,CAAA;AACnI,eAAO,MAAM,0BAA0B,gCAA+E,CAAA;AACtH,eAAO,MAAM,SAAS,2CAAgI,CAAA;AAEtJ,eAAO,MAAM,WAAW,mBAAoB,OAAO,KAAG,eAerD,CAAA;AAED,eAAO,MAAM,OAAO,eAAgB,OAAO,KAAG,WAU7C,CAAA;AAED,eAAO,MAAM,UAAU,kBAAmB,OAAO,KAAG,cAenD,CAAA"}
|