@rosen-bridge/rosen-extractor 8.0.0 → 8.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/dist/getRosenData/abstract/AbstractRosenDataExtractor.d.ts +19 -0
- package/dist/getRosenData/abstract/AbstractRosenDataExtractor.d.ts.map +1 -0
- package/dist/getRosenData/abstract/AbstractRosenDataExtractor.js +32 -0
- package/dist/getRosenData/abstract/types.d.ts +18 -0
- package/dist/getRosenData/abstract/types.d.ts.map +1 -0
- package/dist/getRosenData/abstract/types.js +2 -0
- package/dist/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.d.ts +22 -0
- package/dist/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.js +105 -0
- package/dist/getRosenData/bitcoin/BitcoinRosenExtractor.d.ts +22 -0
- package/dist/getRosenData/bitcoin/BitcoinRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin/BitcoinRosenExtractor.js +113 -0
- package/dist/getRosenData/bitcoin/BitcoinRpcRosenExtractor.d.ts +22 -0
- package/dist/getRosenData/bitcoin/BitcoinRpcRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin/BitcoinRpcRosenExtractor.js +106 -0
- package/dist/getRosenData/bitcoin/types.d.ts +89 -0
- package/dist/getRosenData/bitcoin/types.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin/types.js +2 -0
- package/dist/getRosenData/bitcoin/utils.d.ts +7 -0
- package/dist/getRosenData/bitcoin/utils.d.ts.map +1 -0
- package/dist/getRosenData/bitcoin/utils.js +17 -0
- package/dist/getRosenData/cardano/CardanoBlockFrostRosenExtractor.d.ts +18 -0
- package/dist/getRosenData/cardano/CardanoBlockFrostRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/cardano/CardanoBlockFrostRosenExtractor.js +94 -0
- package/dist/getRosenData/cardano/CardanoGraphQLRosenExtractor.d.ts +18 -0
- package/dist/getRosenData/cardano/CardanoGraphQLRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/cardano/CardanoGraphQLRosenExtractor.js +92 -0
- package/dist/getRosenData/cardano/CardanoKoiosRosenExtractor.d.ts +19 -0
- package/dist/getRosenData/cardano/CardanoKoiosRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/cardano/CardanoKoiosRosenExtractor.js +95 -0
- package/dist/getRosenData/cardano/CardanoOgmiosRosenExtractor.d.ts +18 -0
- package/dist/getRosenData/cardano/CardanoOgmiosRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/cardano/CardanoOgmiosRosenExtractor.js +97 -0
- package/dist/getRosenData/cardano/CardanoRosenExtractor.d.ts +18 -0
- package/dist/getRosenData/cardano/CardanoRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/cardano/CardanoRosenExtractor.js +88 -0
- package/dist/getRosenData/cardano/types.d.ts +102 -0
- package/dist/getRosenData/cardano/types.d.ts.map +1 -0
- package/dist/getRosenData/cardano/types.js +2 -0
- package/dist/getRosenData/cardano/utils.d.ts +19 -0
- package/dist/getRosenData/cardano/utils.d.ts.map +1 -0
- package/dist/getRosenData/cardano/utils.js +32 -0
- package/dist/getRosenData/const.d.ts +13 -0
- package/dist/getRosenData/const.d.ts.map +1 -0
- package/dist/getRosenData/const.js +21 -0
- package/dist/getRosenData/doge/DogeEsploraRosenExtractor.d.ts +22 -0
- package/dist/getRosenData/doge/DogeEsploraRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/doge/DogeEsploraRosenExtractor.js +104 -0
- package/dist/getRosenData/doge/DogeRosenExtractor.d.ts +22 -0
- package/dist/getRosenData/doge/DogeRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/doge/DogeRosenExtractor.js +112 -0
- package/dist/getRosenData/doge/DogeRpcRosenExtractor.d.ts +22 -0
- package/dist/getRosenData/doge/DogeRpcRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/doge/DogeRpcRosenExtractor.js +105 -0
- package/dist/getRosenData/doge/types.d.ts +87 -0
- package/dist/getRosenData/doge/types.d.ts.map +1 -0
- package/dist/getRosenData/doge/types.js +2 -0
- package/dist/getRosenData/doge/utils.d.ts +13 -0
- package/dist/getRosenData/doge/utils.d.ts.map +1 -0
- package/dist/getRosenData/doge/utils.js +58 -0
- package/dist/getRosenData/ergo/ErgoNodeRosenExtractor.d.ts +22 -0
- package/dist/getRosenData/ergo/ErgoNodeRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/ergo/ErgoNodeRosenExtractor.js +105 -0
- package/dist/getRosenData/ergo/ErgoRosenExtractor.d.ts +15 -0
- package/dist/getRosenData/ergo/ErgoRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/ergo/ErgoRosenExtractor.js +33 -0
- package/dist/getRosenData/ergo/types.d.ts +37 -0
- package/dist/getRosenData/ergo/types.d.ts.map +1 -0
- package/dist/getRosenData/ergo/types.js +2 -0
- package/dist/getRosenData/evm/EvmEthersRosenExtractor.d.ts +23 -0
- package/dist/getRosenData/evm/EvmEthersRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/evm/EvmEthersRosenExtractor.js +54 -0
- package/dist/getRosenData/evm/EvmRosenExtractor.d.ts +16 -0
- package/dist/getRosenData/evm/EvmRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/evm/EvmRosenExtractor.js +31 -0
- package/dist/getRosenData/evm/EvmRpcRosenExtractor.d.ts +26 -0
- package/dist/getRosenData/evm/EvmRpcRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/evm/EvmRpcRosenExtractor.js +123 -0
- package/dist/getRosenData/evm/utils.d.ts +7 -0
- package/dist/getRosenData/evm/utils.d.ts.map +1 -0
- package/dist/getRosenData/evm/utils.js +9 -0
- package/dist/getRosenData/runes/RunesEsploraRosenExtractor.d.ts +36 -0
- package/dist/getRosenData/runes/RunesEsploraRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/runes/RunesEsploraRosenExtractor.js +113 -0
- package/dist/getRosenData/runes/RunesRosenExtractor.d.ts +36 -0
- package/dist/getRosenData/runes/RunesRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/runes/RunesRosenExtractor.js +120 -0
- package/dist/getRosenData/runes/RunesRpcRosenExtractor.d.ts +36 -0
- package/dist/getRosenData/runes/RunesRpcRosenExtractor.d.ts.map +1 -0
- package/dist/getRosenData/runes/RunesRpcRosenExtractor.js +113 -0
- package/dist/getRosenData/runes/constants.d.ts +2 -0
- package/dist/getRosenData/runes/constants.d.ts.map +1 -0
- package/dist/getRosenData/runes/constants.js +2 -0
- package/dist/getRosenData/runes/types.d.ts +5 -0
- package/dist/getRosenData/runes/types.d.ts.map +1 -0
- package/dist/getRosenData/runes/types.js +2 -0
- package/dist/getRosenData/runes/utils.d.ts +7 -0
- package/dist/getRosenData/runes/utils.d.ts.map +1 -0
- package/dist/getRosenData/runes/utils.js +9 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/lib/getRosenData/abstract/AbstractRosenDataExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/abstract/AbstractRosenDataExtractor.js +1 -1
- package/dist/lib/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/bitcoin/BitcoinRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/bitcoin/BitcoinRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/bitcoin/BitcoinRpcRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/bitcoin/BitcoinRpcRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/bitcoin/utils.d.ts.map +1 -1
- package/dist/lib/getRosenData/cardano/CardanoBlockFrostRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/cardano/CardanoBlockFrostRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/cardano/CardanoGraphQLRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/cardano/CardanoGraphQLRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/cardano/CardanoKoiosRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/cardano/CardanoKoiosRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/cardano/CardanoOgmiosRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/cardano/CardanoOgmiosRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/cardano/CardanoRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/cardano/CardanoRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/cardano/utils.d.ts.map +1 -1
- package/dist/lib/getRosenData/cardano/utils.js +1 -1
- package/dist/lib/getRosenData/doge/DogeEsploraRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/doge/DogeEsploraRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/doge/DogeRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/doge/DogeRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/doge/DogeRpcRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/doge/DogeRpcRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/doge/utils.d.ts.map +1 -1
- package/dist/lib/getRosenData/ergo/ErgoNodeRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/ergo/ErgoNodeRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/ergo/ErgoRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/ergo/ErgoRosenExtractor.js +2 -2
- package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/evm/EvmRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/evm/EvmRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/evm/EvmRpcRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/evm/EvmRpcRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/evm/utils.d.ts.map +1 -1
- package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/runes/RunesRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/runes/RunesRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.d.ts.map +1 -1
- package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.js +1 -1
- package/dist/lib/getRosenData/runes/utils.d.ts.map +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +31 -0
- package/package.json +12 -17
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
|
|
2
|
+
import { CARDANO_CHAIN, CARDANO_NATIVE_TOKEN } from '../const';
|
|
3
|
+
import JsonBigInt from '@rosen-bridge/json-bigint';
|
|
4
|
+
import { getCardanoTokenId, parseRosenData } from './utils';
|
|
5
|
+
export class CardanoOgmiosRosenExtractor extends AbstractRosenDataExtractor {
|
|
6
|
+
chain = CARDANO_CHAIN;
|
|
7
|
+
/**
|
|
8
|
+
* extracts RosenData from given lock transaction in Ogmios format
|
|
9
|
+
* @param transaction the lock transaction in Koios format
|
|
10
|
+
*/
|
|
11
|
+
extractRawData = (transaction) => {
|
|
12
|
+
const baseError = `No rosen data found for tx [${transaction.id}]`;
|
|
13
|
+
const metadata = transaction.metadata;
|
|
14
|
+
try {
|
|
15
|
+
if (metadata) {
|
|
16
|
+
const blob = metadata.labels;
|
|
17
|
+
if (blob && blob['0'] && blob['0'].json) {
|
|
18
|
+
const data = blob['0'].json;
|
|
19
|
+
const rosenData = parseRosenData(data);
|
|
20
|
+
if (rosenData) {
|
|
21
|
+
const lockOutputs = transaction.outputs.filter((output) => output.address === this.lockAddress);
|
|
22
|
+
for (const output of lockOutputs) {
|
|
23
|
+
const assetTransformation = this.getAssetTransformation(output, rosenData.toChain);
|
|
24
|
+
if (assetTransformation) {
|
|
25
|
+
return {
|
|
26
|
+
...rosenData,
|
|
27
|
+
sourceChainTokenId: assetTransformation.from,
|
|
28
|
+
amount: assetTransformation.amount,
|
|
29
|
+
targetChainTokenId: assetTransformation.to,
|
|
30
|
+
sourceTxId: transaction.id,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
this.logger.debug(baseError + `: No valid transformation found in any output boxes`);
|
|
35
|
+
}
|
|
36
|
+
else
|
|
37
|
+
this.logger.debug(baseError +
|
|
38
|
+
`: Incomplete metadata: ${JsonBigInt.stringify(metadata)}`);
|
|
39
|
+
}
|
|
40
|
+
else
|
|
41
|
+
this.logger.debug(baseError + `: Invalid blob: ${JsonBigInt.stringify(metadata)}`);
|
|
42
|
+
}
|
|
43
|
+
else
|
|
44
|
+
this.logger.debug(baseError + `: Invalid metadata: ${JsonBigInt.stringify(metadata)}`);
|
|
45
|
+
}
|
|
46
|
+
catch (e) {
|
|
47
|
+
this.logger.debug(`An error occurred while getting Cardano rosen data from Ogmios: ${e}`);
|
|
48
|
+
if (e instanceof Error && e.stack) {
|
|
49
|
+
this.logger.debug(e.stack);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return undefined;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* extracts and builds token transformation from TxOut and tokenMap
|
|
56
|
+
* @param box transaction output
|
|
57
|
+
* @param toChain event target chain
|
|
58
|
+
*/
|
|
59
|
+
getAssetTransformation = (box, toChain) => {
|
|
60
|
+
// try to build transformation using locked assets
|
|
61
|
+
const assets = box.value;
|
|
62
|
+
for (const policyId of Object.keys(assets)) {
|
|
63
|
+
if (policyId === CARDANO_NATIVE_TOKEN)
|
|
64
|
+
continue;
|
|
65
|
+
// according to ogmios v6 docs assets are stores as
|
|
66
|
+
// [policyId]: {[assetName]: amount}
|
|
67
|
+
for (const assetName of Object.keys(assets[policyId])) {
|
|
68
|
+
const token = this.tokens.search(CARDANO_CHAIN, {
|
|
69
|
+
tokenId: getCardanoTokenId(policyId, assetName),
|
|
70
|
+
});
|
|
71
|
+
if (token.length > 0 && Object.hasOwn(token[0], toChain)) {
|
|
72
|
+
return {
|
|
73
|
+
from: this.tokens.getID(token[0], CARDANO_CHAIN),
|
|
74
|
+
to: this.tokens.getID(token[0], toChain),
|
|
75
|
+
amount: assets[policyId][assetName].toString(),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// try to build transformation using locked ADA
|
|
81
|
+
const lovelace = this.tokens.search(CARDANO_CHAIN, {
|
|
82
|
+
tokenId: CARDANO_NATIVE_TOKEN,
|
|
83
|
+
});
|
|
84
|
+
if (lovelace.length > 0 && Object.hasOwn(lovelace[0], toChain)) {
|
|
85
|
+
return {
|
|
86
|
+
from: CARDANO_NATIVE_TOKEN,
|
|
87
|
+
to: this.tokens.getID(lovelace[0], toChain),
|
|
88
|
+
amount: assets.ada.lovelace.toString(),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
this.logger.debug(`No rosen asset transformation found for Ogmios box with assets: ${JsonBigInt.stringify(box.value.assets)}`);
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FyZGFub09nbWlvc1Jvc2VuRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2dldFJvc2VuRGF0YS9jYXJkYW5vL0NhcmRhbm9PZ21pb3NSb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFNL0QsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU1RCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsMEJBQXVDO0lBQzdFLEtBQUssR0FBRyxhQUFhLENBQUM7SUFDL0I7OztPQUdHO0lBQ0gsY0FBYyxHQUFHLENBQUMsV0FBd0IsRUFBeUIsRUFBRTtRQUNuRSxNQUFNLFNBQVMsR0FBRywrQkFBK0IsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDO1FBQ25FLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDdEMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUM3QixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN4QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBc0IsQ0FBQztvQkFDOUMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QyxJQUFJLFNBQVMsRUFBRSxDQUFDO3dCQUNkLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUM1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SyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQzt3QkFDeEMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUU7cUJBQy9DLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsK0NBQStDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUNqRCxPQUFPLEVBQUUsb0JBQW9CO1NBQzlCLENBQUMsQ0FBQztRQUNILElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMvRCxPQUFPO2dCQUNMLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO2dCQUMzQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFO2FBQ3ZDLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLG1FQUFtRSxVQUFVLENBQUMsU0FBUyxDQUNyRixHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDakIsRUFBRSxDQUNKLENBQUM7WUFDRixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3NlbkRhdGEsIFRva2VuVHJhbnNmb3JtYXRpb24gfSBmcm9tICcuLi9hYnN0cmFjdC90eXBlcyc7XG5pbXBvcnQgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3IgZnJvbSAnLi4vYWJzdHJhY3QvQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3InO1xuaW1wb3J0IHsgQ0FSREFOT19DSEFJTiwgQ0FSREFOT19OQVRJVkVfVE9LRU4gfSBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQge1xuICBPYmplY3ROb1NjaGVtYSxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uT3V0cHV0LFxufSBmcm9tICdAY2FyZGFuby1vZ21pb3Mvc2NoZW1hJztcbmltcG9ydCBKc29uQmlnSW50IGZyb20gJ0Byb3Nlbi1icmlkZ2UvanNvbi1iaWdpbnQnO1xuaW1wb3J0IHsgZ2V0Q2FyZGFub1Rva2VuSWQsIHBhcnNlUm9zZW5EYXRhIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBDYXJkYW5vT2dtaW9zUm9zZW5FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdFJvc2VuRGF0YUV4dHJhY3RvcjxUcmFuc2FjdGlvbj4ge1xuICByZWFkb25seSBjaGFpbiA9IENBUkRBTk9fQ0hBSU47XG4gIC8qKlxuICAgKiBleHRyYWN0cyBSb3NlbkRhdGEgZnJvbSBnaXZlbiBsb2NrIHRyYW5zYWN0aW9uIGluIE9nbWlvcyBmb3JtYXRcbiAgICogQHBhcmFtIHRyYW5zYWN0aW9uIHRoZSBsb2NrIHRyYW5zYWN0aW9uIGluIEtvaW9zIGZvcm1hdFxuICAgKi9cbiAgZXh0cmFjdFJhd0RhdGEgPSAodHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgTm8gcm9zZW4gZGF0YSBmb3VuZCBmb3IgdHggWyR7dHJhbnNhY3Rpb24uaWR9XWA7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0cmFuc2FjdGlvbi5tZXRhZGF0YTtcbiAgICB0cnkge1xuICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBtZXRhZGF0YS5sYWJlbHM7XG4gICAgICAgIGlmIChibG9iICYmIGJsb2JbJzAnXSAmJiBibG9iWycwJ10uanNvbikge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBibG9iWycwJ10uanNvbiBhcyBPYmplY3ROb1NjaGVtYTtcbiAgICAgICAgICBjb25zdCByb3NlbkRhdGEgPSBwYXJzZVJvc2VuRGF0YShkYXRhKTtcbiAgICAgICAgICBpZiAocm9zZW5EYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NrT3V0cHV0cyA9IHRyYW5zYWN0aW9uLm91dHB1dHMuZmlsdGVyKFxuICAgICAgICAgICAgICAob3V0cHV0KSA9PiBvdXRwdXQuYWRkcmVzcyA9PT0gdGhpcy5sb2NrQWRkcmVzc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGxvY2tPdXRwdXRzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFzc2V0VHJhbnNmb3JtYXRpb24gPSB0aGlzLmdldEFzc2V0VHJhbnNmb3JtYXRpb24oXG4gICAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICAgIHJvc2VuRGF0YS50b0NoYWluXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChhc3NldFRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIC4uLnJvc2VuRGF0YSxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUNoYWluVG9rZW5JZDogYXNzZXRUcmFuc2Zvcm1hdGlvbi5mcm9tLFxuICAgICAgICAgICAgICAgICAgYW1vdW50OiBhc3NldFRyYW5zZm9ybWF0aW9uLmFtb3VudCxcbiAgICAgICAgICAgICAgICAgIHRhcmdldENoYWluVG9rZW5JZDogYXNzZXRUcmFuc2Zvcm1hdGlvbi50byxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZVR4SWQ6IHRyYW5zYWN0aW9uLmlkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgICBiYXNlRXJyb3IgKyBgOiBObyB2YWxpZCB0cmFuc2Zvcm1hdGlvbiBmb3VuZCBpbiBhbnkgb3V0cHV0IGJveGVzYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgICBiYXNlRXJyb3IgK1xuICAgICAgICAgICAgICAgIGA6IEluY29tcGxldGUgbWV0YWRhdGE6ICR7SnNvbkJpZ0ludC5zdHJpbmdpZnkobWV0YWRhdGEpfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYmFzZUVycm9yICsgYDogSW52YWxpZCBibG9iOiAke0pzb25CaWdJbnQuc3RyaW5naWZ5KG1ldGFkYXRhKX1gXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBiYXNlRXJyb3IgKyBgOiBJbnZhbGlkIG1ldGFkYXRhOiAke0pzb25CaWdJbnQuc3RyaW5naWZ5KG1ldGFkYXRhKX1gXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIENhcmRhbm8gcm9zZW4gZGF0YSBmcm9tIE9nbWlvczogJHtlfWBcbiAgICAgICk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIGFuZCBidWlsZHMgdG9rZW4gdHJhbnNmb3JtYXRpb24gZnJvbSBUeE91dCBhbmQgdG9rZW5NYXBcbiAgICogQHBhcmFtIGJveCB0cmFuc2FjdGlvbiBvdXRwdXRcbiAgICogQHBhcmFtIHRvQ2hhaW4gZXZlbnQgdGFyZ2V0IGNoYWluXG4gICAqL1xuICBnZXRBc3NldFRyYW5zZm9ybWF0aW9uID0gKFxuICAgIGJveDogVHJhbnNhY3Rpb25PdXRwdXQsXG4gICAgdG9DaGFpbjogc3RyaW5nXG4gICk6IFRva2VuVHJhbnNmb3JtYXRpb24gfCB1bmRlZmluZWQgPT4ge1xuICAgIC8vIHRyeSB0byBidWlsZCB0cmFuc2Zvcm1hdGlvbiB1c2luZyBsb2NrZWQgYXNzZXRzXG4gICAgY29uc3QgYXNzZXRzID0gYm94LnZhbHVlO1xuICAgIGZvciAoY29uc3QgcG9saWN5SWQgb2YgT2JqZWN0LmtleXMoYXNzZXRzKSkge1xuICAgICAgaWYgKHBvbGljeUlkID09PSBDQVJEQU5PX05BVElWRV9UT0tFTikgY29udGludWU7XG4gICAgICAvLyBhY2NvcmRpbmcgdG8gb2dtaW9zIHY2IGRvY3MgYXNzZXRzIGFyZSBzdG9yZXMgYXNcbiAgICAgIC8vICAgICAgW3BvbGljeUlkXToge1thc3NldE5hbWVdOiBhbW91bnR9XG4gICAgICBmb3IgKGNvbnN0IGFzc2V0TmFtZSBvZiBPYmplY3Qua2V5cyhhc3NldHNbcG9saWN5SWRdKSkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zLnNlYXJjaChDQVJEQU5PX0NIQUlOLCB7XG4gICAgICAgICAgdG9rZW5JZDogZ2V0Q2FyZGFub1Rva2VuSWQocG9saWN5SWQsIGFzc2V0TmFtZSksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodG9rZW4ubGVuZ3RoID4gMCAmJiBPYmplY3QuaGFzT3duKHRva2VuWzBdLCB0b0NoYWluKSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmcm9tOiB0aGlzLnRva2Vucy5nZXRJRCh0b2tlblswXSwgQ0FSREFOT19DSEFJTiksXG4gICAgICAgICAgICB0bzogdGhpcy50b2tlbnMuZ2V0SUQodG9rZW5bMF0sIHRvQ2hhaW4pLFxuICAgICAgICAgICAgYW1vdW50OiBhc3NldHNbcG9saWN5SWRdW2Fzc2V0TmFtZV0udG9TdHJpbmcoKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHJ5IHRvIGJ1aWxkIHRyYW5zZm9ybWF0aW9uIHVzaW5nIGxvY2tlZCBBREFcbiAgICBjb25zdCBsb3ZlbGFjZSA9IHRoaXMudG9rZW5zLnNlYXJjaChDQVJEQU5PX0NIQUlOLCB7XG4gICAgICB0b2tlbklkOiBDQVJEQU5PX05BVElWRV9UT0tFTixcbiAgICB9KTtcbiAgICBpZiAobG92ZWxhY2UubGVuZ3RoID4gMCAmJiBPYmplY3QuaGFzT3duKGxvdmVsYWNlWzBdLCB0b0NoYWluKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogQ0FSREFOT19OQVRJVkVfVE9LRU4sXG4gICAgICAgIHRvOiB0aGlzLnRva2Vucy5nZXRJRChsb3ZlbGFjZVswXSwgdG9DaGFpbiksXG4gICAgICAgIGFtb3VudDogYXNzZXRzLmFkYS5sb3ZlbGFjZS50b1N0cmluZygpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBObyByb3NlbiBhc3NldCB0cmFuc2Zvcm1hdGlvbiBmb3VuZCBmb3IgT2dtaW9zIGJveCB3aXRoIGFzc2V0czogJHtKc29uQmlnSW50LnN0cmluZ2lmeShcbiAgICAgICAgICBib3gudmFsdWUuYXNzZXRzXG4gICAgICAgICl9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
|
|
2
|
+
import { RosenData, TokenTransformation } from '../abstract/types';
|
|
3
|
+
import { CardanoBoxCandidate } from './types';
|
|
4
|
+
export declare class CardanoRosenExtractor extends AbstractRosenDataExtractor<string> {
|
|
5
|
+
readonly chain = "cardano";
|
|
6
|
+
/**
|
|
7
|
+
* extracts RosenData from given lock transaction in CardanoTx format
|
|
8
|
+
* @param serializedTransaction stringified transaction in CardanoTx format
|
|
9
|
+
*/
|
|
10
|
+
extractRawData: (serializedTransaction: string) => RosenData | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* extracts and builds token transformation from CardanoBoxCandidate and tokenMap
|
|
13
|
+
* @param box transaction output in CardanoBoxCandidate format
|
|
14
|
+
* @param toChain event target chain
|
|
15
|
+
*/
|
|
16
|
+
getAssetTransformation: (box: CardanoBoxCandidate, toChain: string) => TokenTransformation | undefined;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=CardanoRosenExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardanoRosenExtractor.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/cardano/CardanoRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAa,MAAM,SAAS,CAAC;AAKzD,qBAAa,qBAAsB,SAAQ,0BAA0B,CAAC,MAAM,CAAC;IAC3E,QAAQ,CAAC,KAAK,aAAiB;IAC/B;;;OAGG;IACH,cAAc,GAAI,uBAAuB,MAAM,KAAG,SAAS,GAAG,SAAS,CAiDrE;IAEF;;;;OAIG;IACH,sBAAsB,GACpB,KAAK,mBAAmB,EACxB,SAAS,MAAM,KACd,mBAAmB,GAAG,SAAS,CAkChC;CACH"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
|
|
2
|
+
import { CARDANO_CHAIN, CARDANO_NATIVE_TOKEN } from '../const';
|
|
3
|
+
import JsonBigInt from '@rosen-bridge/json-bigint';
|
|
4
|
+
import { getCardanoTokenId, parseRosenData } from './utils';
|
|
5
|
+
export class CardanoRosenExtractor extends AbstractRosenDataExtractor {
|
|
6
|
+
chain = CARDANO_CHAIN;
|
|
7
|
+
/**
|
|
8
|
+
* extracts RosenData from given lock transaction in CardanoTx format
|
|
9
|
+
* @param serializedTransaction stringified transaction in CardanoTx format
|
|
10
|
+
*/
|
|
11
|
+
extractRawData = (serializedTransaction) => {
|
|
12
|
+
let transaction;
|
|
13
|
+
try {
|
|
14
|
+
transaction = JsonBigInt.parse(serializedTransaction);
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
throw new Error(`Failed to parse transaction json to CardanoTx format while extracting rosen data: ${e}`);
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const baseError = `No rosen data found for tx [${transaction.id}]`;
|
|
21
|
+
const data = transaction.metadata?.['0'];
|
|
22
|
+
const rosenData = parseRosenData(data);
|
|
23
|
+
if (rosenData) {
|
|
24
|
+
const lockOutputs = transaction.outputs.filter((output) => output.address === this.lockAddress);
|
|
25
|
+
for (const output of lockOutputs) {
|
|
26
|
+
const assetTransformation = this.getAssetTransformation(output, rosenData.toChain);
|
|
27
|
+
if (assetTransformation) {
|
|
28
|
+
return {
|
|
29
|
+
...rosenData,
|
|
30
|
+
sourceChainTokenId: assetTransformation.from,
|
|
31
|
+
amount: assetTransformation.amount,
|
|
32
|
+
targetChainTokenId: assetTransformation.to,
|
|
33
|
+
sourceTxId: transaction.id,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
this.logger.debug(baseError + `: No valid transformation found in any output boxes`);
|
|
38
|
+
}
|
|
39
|
+
else
|
|
40
|
+
this.logger.debug(baseError +
|
|
41
|
+
`: Incomplete metadata: ${JsonBigInt.stringify(transaction.metadata)}`);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
this.logger.debug(`An error occurred while extracting rosen data: ${e}`);
|
|
45
|
+
if (e instanceof Error && e.stack) {
|
|
46
|
+
this.logger.debug(e.stack);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* extracts and builds token transformation from CardanoBoxCandidate and tokenMap
|
|
53
|
+
* @param box transaction output in CardanoBoxCandidate format
|
|
54
|
+
* @param toChain event target chain
|
|
55
|
+
*/
|
|
56
|
+
getAssetTransformation = (box, toChain) => {
|
|
57
|
+
// try to build transformation using locked assets
|
|
58
|
+
if (box.assets.length > 0) {
|
|
59
|
+
for (const asset of box.assets) {
|
|
60
|
+
const token = this.tokens.search(CARDANO_CHAIN, {
|
|
61
|
+
tokenId: getCardanoTokenId(asset.policyId, asset.assetName),
|
|
62
|
+
});
|
|
63
|
+
if (token.length > 0 && Object.hasOwn(token[0], toChain))
|
|
64
|
+
return {
|
|
65
|
+
from: this.tokens.getID(token[0], CARDANO_CHAIN),
|
|
66
|
+
to: this.tokens.getID(token[0], toChain),
|
|
67
|
+
amount: asset.quantity,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// try to build transformation using locked ADA
|
|
72
|
+
const lovelace = this.tokens.search(CARDANO_CHAIN, {
|
|
73
|
+
tokenId: CARDANO_NATIVE_TOKEN,
|
|
74
|
+
});
|
|
75
|
+
if (lovelace.length > 0 && Object.hasOwn(lovelace[0], toChain)) {
|
|
76
|
+
return {
|
|
77
|
+
from: CARDANO_NATIVE_TOKEN,
|
|
78
|
+
to: this.tokens.getID(lovelace[0], toChain),
|
|
79
|
+
amount: box.value.toString(),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
this.logger.debug(`No rosen asset transformation found for CardanoBoxCandidate with assets: ${JsonBigInt.stringify(box.assets)}`);
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FyZGFub1Jvc2VuRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2dldFJvc2VuRGF0YS9jYXJkYW5vL0NhcmRhbm9Sb3NlbkV4dHJhY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLDBCQUEwQixNQUFNLHdDQUF3QyxDQUFDO0FBR2hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0QsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU1RCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsMEJBQWtDO0lBQ2xFLEtBQUssR0FBRyxhQUFhLENBQUM7SUFDL0I7OztPQUdHO0lBQ0gsY0FBYyxHQUFHLENBQUMscUJBQTZCLEVBQXlCLEVBQUU7UUFDeEUsSUFBSSxXQUFzQixDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILFdBQVcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxNQUFNLElBQUksS0FBSyxDQUNiLHFGQUFxRixDQUFDLEVBQUUsQ0FDekYsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUM7WUFDSCxNQUFNLFNBQVMsR0FBRywrQkFBK0IsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDO1lBQ25FLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QyxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkMsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDNUMsQ0FBQyxNQUFNLEVBQUUs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SUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztnQkFDM0MsTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO2FBQzdCLENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLDRFQUE0RSxVQUFVLENBQUMsU0FBUyxDQUM5RixHQUFHLENBQUMsTUFBTSxDQUNYLEVBQUUsQ0FDSixDQUFDO1lBQ0YsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEFic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yIGZyb20gJy4uL2Fic3RyYWN0L0Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yJztcbmltcG9ydCB7IFJvc2VuRGF0YSwgVG9rZW5UcmFuc2Zvcm1hdGlvbiB9IGZyb20gJy4uL2Fic3RyYWN0L3R5cGVzJztcbmltcG9ydCB7IENhcmRhbm9Cb3hDYW5kaWRhdGUsIENhcmRhbm9UeCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQ0FSREFOT19DSEFJTiwgQ0FSREFOT19OQVRJVkVfVE9LRU4gfSBmcm9tICcuLi9jb25zdCc7XG5pbXBvcnQgSnNvbkJpZ0ludCBmcm9tICdAcm9zZW4tYnJpZGdlL2pzb24tYmlnaW50JztcbmltcG9ydCB7IGdldENhcmRhbm9Ub2tlbklkLCBwYXJzZVJvc2VuRGF0YSB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQ2FyZGFub1Jvc2VuRXh0cmFjdG9yIGV4dGVuZHMgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3I8c3RyaW5nPiB7XG4gIHJlYWRvbmx5IGNoYWluID0gQ0FSREFOT19DSEFJTjtcbiAgLyoqXG4gICAqIGV4dHJhY3RzIFJvc2VuRGF0YSBmcm9tIGdpdmVuIGxvY2sgdHJhbnNhY3Rpb24gaW4gQ2FyZGFub1R4IGZvcm1hdFxuICAgKiBAcGFyYW0gc2VyaWFsaXplZFRyYW5zYWN0aW9uIHN0cmluZ2lmaWVkIHRyYW5zYWN0aW9uIGluIENhcmRhbm9UeCBmb3JtYXRcbiAgICovXG4gIGV4dHJhY3RSYXdEYXRhID0gKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbjogc3RyaW5nKTogUm9zZW5EYXRhIHwgdW5kZWZpbmVkID0+IHtcbiAgICBsZXQgdHJhbnNhY3Rpb246IENhcmRhbm9UeDtcbiAgICB0cnkge1xuICAgICAgdHJhbnNhY3Rpb24gPSBKc29uQmlnSW50LnBhcnNlKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIHRyYW5zYWN0aW9uIGpzb24gdG8gQ2FyZGFub1R4IGZvcm1hdCB3aGlsZSBleHRyYWN0aW5nIHJvc2VuIGRhdGE6ICR7ZX1gXG4gICAgICApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFzZUVycm9yID0gYE5vIHJvc2VuIGRhdGEgZm91bmQgZm9yIHR4IFske3RyYW5zYWN0aW9uLmlkfV1gO1xuICAgICAgY29uc3QgZGF0YSA9IHRyYW5zYWN0aW9uLm1ldGFkYXRhPy5bJzAnXTtcbiAgICAgIGNvbnN0IHJvc2VuRGF0YSA9IHBhcnNlUm9zZW5EYXRhKGRhdGEpO1xuICAgICAgaWYgKHJvc2VuRGF0YSkge1xuICAgICAgICBjb25zdCBsb2NrT3V0cHV0cyA9IHRyYW5zYWN0aW9uLm91dHB1dHMuZmlsdGVyKFxuICAgICAgICAgIChvdXRwdXQpID0+IG91dHB1dC5hZGRyZXNzID09PSB0aGlzLmxvY2tBZGRyZXNzXG4gICAgICAgICk7XG4gICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIGxvY2tPdXRwdXRzKSB7XG4gICAgICAgICAgY29uc3QgYXNzZXRUcmFuc2Zvcm1hdGlvbiA9IHRoaXMuZ2V0QXNzZXRUcmFuc2Zvcm1hdGlvbihcbiAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgIHJvc2VuRGF0YS50b0NoYWluXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoYXNzZXRUcmFuc2Zvcm1hdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ucm9zZW5EYXRhLFxuICAgICAgICAgICAgICBzb3VyY2VDaGFpblRva2VuSWQ6IGFzc2V0VHJhbnNmb3JtYXRpb24uZnJvbSxcbiAgICAgICAgICAgICAgYW1vdW50OiBhc3NldFRyYW5zZm9ybWF0aW9uLmFtb3VudCxcbiAgICAgICAgICAgICAgdGFyZ2V0Q2hhaW5Ub2tlbklkOiBhc3NldFRyYW5zZm9ybWF0aW9uLnRvLFxuICAgICAgICAgICAgICBzb3VyY2VUeElkOiB0cmFuc2FjdGlvbi5pZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGJhc2VFcnJvciArIGA6IE5vIHZhbGlkIHRyYW5zZm9ybWF0aW9uIGZvdW5kIGluIGFueSBvdXRwdXQgYm94ZXNgXG4gICAgICAgICk7XG4gICAgICB9IGVsc2VcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYmFzZUVycm9yICtcbiAgICAgICAgICAgIGA6IEluY29tcGxldGUgbWV0YWRhdGE6ICR7SnNvbkJpZ0ludC5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm1ldGFkYXRhXG4gICAgICAgICAgICApfWBcbiAgICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZXh0cmFjdGluZyByb3NlbiBkYXRhOiAke2V9YCk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIGFuZCBidWlsZHMgdG9rZW4gdHJhbnNmb3JtYXRpb24gZnJvbSBDYXJkYW5vQm94Q2FuZGlkYXRlIGFuZCB0b2tlbk1hcFxuICAgKiBAcGFyYW0gYm94IHRyYW5zYWN0aW9uIG91dHB1dCBpbiBDYXJkYW5vQm94Q2FuZGlkYXRlIGZvcm1hdFxuICAgKiBAcGFyYW0gdG9DaGFpbiBldmVudCB0YXJnZXQgY2hhaW5cbiAgICovXG4gIGdldEFzc2V0VHJhbnNmb3JtYXRpb24gPSAoXG4gICAgYm94OiBDYXJkYW5vQm94Q2FuZGlkYXRlLFxuICAgIHRvQ2hhaW46IHN0cmluZ1xuICApOiBUb2tlblRyYW5zZm9ybWF0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgICAvLyB0cnkgdG8gYnVpbGQgdHJhbnNmb3JtYXRpb24gdXNpbmcgbG9ja2VkIGFzc2V0c1xuICAgIGlmIChib3guYXNzZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgYXNzZXQgb2YgYm94LmFzc2V0cykge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMudG9rZW5zLnNlYXJjaChDQVJEQU5PX0NIQUlOLCB7XG4gICAgICAgICAgdG9rZW5JZDogZ2V0Q2FyZGFub1Rva2VuSWQoYXNzZXQucG9saWN5SWQsIGFzc2V0LmFzc2V0TmFtZSksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodG9rZW4ubGVuZ3RoID4gMCAmJiBPYmplY3QuaGFzT3duKHRva2VuWzBdLCB0b0NoYWluKSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZnJvbTogdGhpcy50b2tlbnMuZ2V0SUQodG9rZW5bMF0sIENBUkRBTk9fQ0hBSU4pLFxuICAgICAgICAgICAgdG86IHRoaXMudG9rZW5zLmdldElEKHRva2VuWzBdLCB0b0NoYWluKSxcbiAgICAgICAgICAgIGFtb3VudDogYXNzZXQucXVhbnRpdHksXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0cnkgdG8gYnVpbGQgdHJhbnNmb3JtYXRpb24gdXNpbmcgbG9ja2VkIEFEQVxuICAgIGNvbnN0IGxvdmVsYWNlID0gdGhpcy50b2tlbnMuc2VhcmNoKENBUkRBTk9fQ0hBSU4sIHtcbiAgICAgIHRva2VuSWQ6IENBUkRBTk9fTkFUSVZFX1RPS0VOLFxuICAgIH0pO1xuICAgIGlmIChsb3ZlbGFjZS5sZW5ndGggPiAwICYmIE9iamVjdC5oYXNPd24obG92ZWxhY2VbMF0sIHRvQ2hhaW4pKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmcm9tOiBDQVJEQU5PX05BVElWRV9UT0tFTixcbiAgICAgICAgdG86IHRoaXMudG9rZW5zLmdldElEKGxvdmVsYWNlWzBdLCB0b0NoYWluKSxcbiAgICAgICAgYW1vdW50OiBib3gudmFsdWUudG9TdHJpbmcoKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTm8gcm9zZW4gYXNzZXQgdHJhbnNmb3JtYXRpb24gZm91bmQgZm9yIENhcmRhbm9Cb3hDYW5kaWRhdGUgd2l0aCBhc3NldHM6ICR7SnNvbkJpZ0ludC5zdHJpbmdpZnkoXG4gICAgICAgICAgYm94LmFzc2V0c1xuICAgICAgICApfWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { components } from '@blockfrost/openapi';
|
|
2
|
+
import { TransactionJSON } from '@emurgo/cardano-serialization-lib-nodejs';
|
|
3
|
+
interface KoiosCborTx {
|
|
4
|
+
tx_hash: string;
|
|
5
|
+
block_hash: string;
|
|
6
|
+
block_height: number;
|
|
7
|
+
epoch_no: number;
|
|
8
|
+
absolute_slot: number;
|
|
9
|
+
tx_timestamp: number;
|
|
10
|
+
cbor: string;
|
|
11
|
+
}
|
|
12
|
+
type KoiosTransaction = KoiosCborTx & TransactionJSON;
|
|
13
|
+
interface CardanoRosenData {
|
|
14
|
+
toChain: string;
|
|
15
|
+
toAddress: string;
|
|
16
|
+
bridgeFee: string;
|
|
17
|
+
networkFee: string;
|
|
18
|
+
fromAddress: string;
|
|
19
|
+
}
|
|
20
|
+
interface CardanoMetadataRosenData {
|
|
21
|
+
to: string;
|
|
22
|
+
networkFee: string;
|
|
23
|
+
bridgeFee: string;
|
|
24
|
+
toAddress: string;
|
|
25
|
+
fromAddress: string[];
|
|
26
|
+
}
|
|
27
|
+
interface CardanoAsset {
|
|
28
|
+
policyId: string;
|
|
29
|
+
assetName: string;
|
|
30
|
+
quantity: string;
|
|
31
|
+
}
|
|
32
|
+
interface CardanoTxInput {
|
|
33
|
+
txId: string;
|
|
34
|
+
index: number;
|
|
35
|
+
}
|
|
36
|
+
interface CardanoBoxCandidate {
|
|
37
|
+
address: string;
|
|
38
|
+
value: bigint;
|
|
39
|
+
assets: Array<CardanoAsset>;
|
|
40
|
+
}
|
|
41
|
+
type CardanoMetadata = Record<string, string | Record<string, any>>;
|
|
42
|
+
interface CardanoTx {
|
|
43
|
+
id: string;
|
|
44
|
+
inputs: CardanoTxInput[];
|
|
45
|
+
outputs: CardanoBoxCandidate[];
|
|
46
|
+
fee: bigint;
|
|
47
|
+
metadata?: CardanoMetadata;
|
|
48
|
+
}
|
|
49
|
+
interface BlockFrostTransaction {
|
|
50
|
+
utxos: components['schemas']['tx_content_utxo'];
|
|
51
|
+
metadata: components['schemas']['tx_content_metadata'];
|
|
52
|
+
}
|
|
53
|
+
type BlockFrostOutputBox = components['schemas']['tx_content_utxo']['outputs'][0];
|
|
54
|
+
type GraphQLBlockTxsQuery = {
|
|
55
|
+
__typename?: 'Query';
|
|
56
|
+
blocks: Array<{
|
|
57
|
+
__typename?: 'Block';
|
|
58
|
+
transactions: Array<{
|
|
59
|
+
__typename?: 'Transaction';
|
|
60
|
+
hash: any;
|
|
61
|
+
fee: any;
|
|
62
|
+
inputs: Array<{
|
|
63
|
+
__typename?: 'TransactionInput';
|
|
64
|
+
sourceTxIndex: number;
|
|
65
|
+
sourceTxHash: any;
|
|
66
|
+
value: any;
|
|
67
|
+
tokens: Array<{
|
|
68
|
+
__typename?: 'Token';
|
|
69
|
+
quantity: string;
|
|
70
|
+
asset: {
|
|
71
|
+
__typename?: 'Asset';
|
|
72
|
+
assetName?: any | null;
|
|
73
|
+
policyId: any;
|
|
74
|
+
};
|
|
75
|
+
} | null>;
|
|
76
|
+
}>;
|
|
77
|
+
outputs: Array<{
|
|
78
|
+
__typename?: 'TransactionOutput';
|
|
79
|
+
address: string;
|
|
80
|
+
value: any;
|
|
81
|
+
tokens: Array<{
|
|
82
|
+
__typename?: 'Token';
|
|
83
|
+
quantity: string;
|
|
84
|
+
asset: {
|
|
85
|
+
__typename?: 'Asset';
|
|
86
|
+
assetName?: any | null;
|
|
87
|
+
policyId: any;
|
|
88
|
+
};
|
|
89
|
+
}>;
|
|
90
|
+
} | null>;
|
|
91
|
+
metadata?: Array<{
|
|
92
|
+
__typename?: 'TransactionMetadata';
|
|
93
|
+
key: string;
|
|
94
|
+
value: any;
|
|
95
|
+
} | null> | null;
|
|
96
|
+
} | null>;
|
|
97
|
+
} | null>;
|
|
98
|
+
};
|
|
99
|
+
type GraphQLTransaction = NonNullable<NonNullable<GraphQLBlockTxsQuery['blocks'][0]>['transactions'][0]>;
|
|
100
|
+
type GraphQLTxOutput = NonNullable<GraphQLTransaction['outputs'][0]>;
|
|
101
|
+
export { KoiosTransaction as KoiosCborTransaction, KoiosTransaction, CardanoRosenData, CardanoMetadataRosenData, CardanoMetadata, CardanoTx, CardanoTxInput, CardanoBoxCandidate, BlockFrostTransaction, BlockFrostOutputBox, GraphQLTransaction, GraphQLTxOutput, };
|
|
102
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/cardano/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,KAAK,gBAAgB,GAAG,WAAW,GAAG,eAAe,CAAC;AAEtD,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,wBAAwB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,UAAU,YAAY;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;CAC7B;AAED,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAEpE,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED,UAAU,qBAAqB;IAC7B,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAChD,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC;CACxD;AAED,KAAK,mBAAmB,GACtB,UAAU,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzD,KAAK,oBAAoB,GAAG;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,KAAK,CAAC;QACZ,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,YAAY,EAAE,KAAK,CAAC;YAClB,UAAU,CAAC,EAAE,aAAa,CAAC;YAC3B,IAAI,EAAE,GAAG,CAAC;YACV,GAAG,EAAE,GAAG,CAAC;YACT,MAAM,EAAE,KAAK,CAAC;gBACZ,UAAU,CAAC,EAAE,kBAAkB,CAAC;gBAChC,aAAa,EAAE,MAAM,CAAC;gBACtB,YAAY,EAAE,GAAG,CAAC;gBAClB,KAAK,EAAE,GAAG,CAAC;gBACX,MAAM,EAAE,KAAK,CAAC;oBACZ,UAAU,CAAC,EAAE,OAAO,CAAC;oBACrB,QAAQ,EAAE,MAAM,CAAC;oBACjB,KAAK,EAAE;wBACL,UAAU,CAAC,EAAE,OAAO,CAAC;wBACrB,SAAS,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;wBACvB,QAAQ,EAAE,GAAG,CAAC;qBACf,CAAC;iBACH,GAAG,IAAI,CAAC,CAAC;aACX,CAAC,CAAC;YACH,OAAO,EAAE,KAAK,CAAC;gBACb,UAAU,CAAC,EAAE,mBAAmB,CAAC;gBACjC,OAAO,EAAE,MAAM,CAAC;gBAChB,KAAK,EAAE,GAAG,CAAC;gBACX,MAAM,EAAE,KAAK,CAAC;oBACZ,UAAU,CAAC,EAAE,OAAO,CAAC;oBACrB,QAAQ,EAAE,MAAM,CAAC;oBACjB,KAAK,EAAE;wBACL,UAAU,CAAC,EAAE,OAAO,CAAC;wBACrB,SAAS,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;wBACvB,QAAQ,EAAE,GAAG,CAAC;qBACf,CAAC;iBACH,CAAC,CAAC;aACJ,GAAG,IAAI,CAAC,CAAC;YACV,QAAQ,CAAC,EAAE,KAAK,CAAC;gBACf,UAAU,CAAC,EAAE,qBAAqB,CAAC;gBACnC,GAAG,EAAE,MAAM,CAAC;gBACZ,KAAK,EAAE,GAAG,CAAC;aACZ,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;SAClB,GAAG,IAAI,CAAC,CAAC;KACX,GAAG,IAAI,CAAC,CAAC;CACX,CAAC;AACF,KAAK,kBAAkB,GAAG,WAAW,CACnC,WAAW,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAClE,CAAC;AACF,KAAK,eAAe,GAAG,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAErE,OAAO,EACL,gBAAgB,IAAI,oBAAoB,EACxC,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,EACf,SAAS,EACT,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GAChB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2NhcmRhbm8vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXBvbmVudHMgfSBmcm9tICdAYmxvY2tmcm9zdC9vcGVuYXBpJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uSlNPTiB9IGZyb20gJ0BlbXVyZ28vY2FyZGFuby1zZXJpYWxpemF0aW9uLWxpYi1ub2RlanMnO1xuXG5pbnRlcmZhY2UgS29pb3NDYm9yVHgge1xuICB0eF9oYXNoOiBzdHJpbmc7XG4gIGJsb2NrX2hhc2g6IHN0cmluZztcbiAgYmxvY2tfaGVpZ2h0OiBudW1iZXI7XG4gIGVwb2NoX25vOiBudW1iZXI7XG4gIGFic29sdXRlX3Nsb3Q6IG51bWJlcjtcbiAgdHhfdGltZXN0YW1wOiBudW1iZXI7XG4gIGNib3I6IHN0cmluZztcbn1cblxudHlwZSBLb2lvc1RyYW5zYWN0aW9uID0gS29pb3NDYm9yVHggJiBUcmFuc2FjdGlvbkpTT047XG5cbmludGVyZmFjZSBDYXJkYW5vUm9zZW5EYXRhIHtcbiAgdG9DaGFpbjogc3RyaW5nO1xuICB0b0FkZHJlc3M6IHN0cmluZztcbiAgYnJpZGdlRmVlOiBzdHJpbmc7XG4gIG5ldHdvcmtGZWU6IHN0cmluZztcbiAgZnJvbUFkZHJlc3M6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENhcmRhbm9NZXRhZGF0YVJvc2VuRGF0YSB7XG4gIHRvOiBzdHJpbmc7XG4gIG5ldHdvcmtGZWU6IHN0cmluZztcbiAgYnJpZGdlRmVlOiBzdHJpbmc7XG4gIHRvQWRkcmVzczogc3RyaW5nO1xuICBmcm9tQWRkcmVzczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBDYXJkYW5vQXNzZXQge1xuICBwb2xpY3lJZDogc3RyaW5nO1xuICBhc3NldE5hbWU6IHN0cmluZztcbiAgcXVhbnRpdHk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENhcmRhbm9UeElucHV0IHtcbiAgdHhJZDogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgQ2FyZGFub0JveENhbmRpZGF0ZSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgdmFsdWU6IGJpZ2ludDtcbiAgYXNzZXRzOiBBcnJheTxDYXJkYW5vQXNzZXQ+O1xufVxuXG50eXBlIENhcmRhbm9NZXRhZGF0YSA9IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIGFueT4+O1xuXG5pbnRlcmZhY2UgQ2FyZGFub1R4IHtcbiAgaWQ6IHN0cmluZztcbiAgaW5wdXRzOiBDYXJkYW5vVHhJbnB1dFtdO1xuICBvdXRwdXRzOiBDYXJkYW5vQm94Q2FuZGlkYXRlW107XG4gIGZlZTogYmlnaW50O1xuICBtZXRhZGF0YT86IENhcmRhbm9NZXRhZGF0YTtcbn1cblxuaW50ZXJmYWNlIEJsb2NrRnJvc3RUcmFuc2FjdGlvbiB7XG4gIHV0eG9zOiBjb21wb25lbnRzWydzY2hlbWFzJ11bJ3R4X2NvbnRlbnRfdXR4byddO1xuICBtZXRhZGF0YTogY29tcG9uZW50c1snc2NoZW1hcyddWyd0eF9jb250ZW50X21ldGFkYXRhJ107XG59XG5cbnR5cGUgQmxvY2tGcm9zdE91dHB1dEJveCA9XG4gIGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsndHhfY29udGVudF91dHhvJ11bJ291dHB1dHMnXVswXTtcblxudHlwZSBHcmFwaFFMQmxvY2tUeHNRdWVyeSA9IHtcbiAgX190eXBlbmFtZT86ICdRdWVyeSc7XG4gIGJsb2NrczogQXJyYXk8e1xuICAgIF9fdHlwZW5hbWU/OiAnQmxvY2snO1xuICAgIHRyYW5zYWN0aW9uczogQXJyYXk8e1xuICAgICAgX190eXBlbmFtZT86ICdUcmFuc2FjdGlvbic7XG4gICAgICBoYXNoOiBhbnk7XG4gICAgICBmZWU6IGFueTtcbiAgICAgIGlucHV0czogQXJyYXk8e1xuICAgICAgICBfX3R5cGVuYW1lPzogJ1RyYW5zYWN0aW9uSW5wdXQnO1xuICAgICAgICBzb3VyY2VUeEluZGV4OiBudW1iZXI7XG4gICAgICAgIHNvdXJjZVR4SGFzaDogYW55O1xuICAgICAgICB2YWx1ZTogYW55O1xuICAgICAgICB0b2tlbnM6IEFycmF5PHtcbiAgICAgICAgICBfX3R5cGVuYW1lPzogJ1Rva2VuJztcbiAgICAgICAgICBxdWFudGl0eTogc3RyaW5nO1xuICAgICAgICAgIGFzc2V0OiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lPzogJ0Fzc2V0JztcbiAgICAgICAgICAgIGFzc2V0TmFtZT86IGFueSB8IG51bGw7XG4gICAgICAgICAgICBwb2xpY3lJZDogYW55O1xuICAgICAgICAgIH07XG4gICAgICAgIH0gfCBudWxsPjtcbiAgICAgIH0+O1xuICAgICAgb3V0cHV0czogQXJyYXk8e1xuICAgICAgICBfX3R5cGVuYW1lPzogJ1RyYW5zYWN0aW9uT3V0cHV0JztcbiAgICAgICAgYWRkcmVzczogc3RyaW5nO1xuICAgICAgICB2YWx1ZTogYW55O1xuICAgICAgICB0b2tlbnM6IEFycmF5PHtcbiAgICAgICAgICBfX3R5cGVuYW1lPzogJ1Rva2VuJztcbiAgICAgICAgICBxdWFudGl0eTogc3RyaW5nO1xuICAgICAgICAgIGFzc2V0OiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lPzogJ0Fzc2V0JztcbiAgICAgICAgICAgIGFzc2V0TmFtZT86IGFueSB8IG51bGw7XG4gICAgICAgICAgICBwb2xpY3lJZDogYW55O1xuICAgICAgICAgIH07XG4gICAgICAgIH0+O1xuICAgICAgfSB8IG51bGw+O1xuICAgICAgbWV0YWRhdGE/OiBBcnJheTx7XG4gICAgICAgIF9fdHlwZW5hbWU/OiAnVHJhbnNhY3Rpb25NZXRhZGF0YSc7XG4gICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICB2YWx1ZTogYW55O1xuICAgICAgfSB8IG51bGw+IHwgbnVsbDtcbiAgICB9IHwgbnVsbD47XG4gIH0gfCBudWxsPjtcbn07XG50eXBlIEdyYXBoUUxUcmFuc2FjdGlvbiA9IE5vbk51bGxhYmxlPFxuICBOb25OdWxsYWJsZTxHcmFwaFFMQmxvY2tUeHNRdWVyeVsnYmxvY2tzJ11bMF0+Wyd0cmFuc2FjdGlvbnMnXVswXVxuPjtcbnR5cGUgR3JhcGhRTFR4T3V0cHV0ID0gTm9uTnVsbGFibGU8R3JhcGhRTFRyYW5zYWN0aW9uWydvdXRwdXRzJ11bMF0+O1xuXG5leHBvcnQge1xuICBLb2lvc1RyYW5zYWN0aW9uIGFzIEtvaW9zQ2JvclRyYW5zYWN0aW9uLFxuICBLb2lvc1RyYW5zYWN0aW9uLFxuICBDYXJkYW5vUm9zZW5EYXRhLFxuICBDYXJkYW5vTWV0YWRhdGFSb3NlbkRhdGEsXG4gIENhcmRhbm9NZXRhZGF0YSxcbiAgQ2FyZGFub1R4LFxuICBDYXJkYW5vVHhJbnB1dCxcbiAgQ2FyZGFub0JveENhbmRpZGF0ZSxcbiAgQmxvY2tGcm9zdFRyYW5zYWN0aW9uLFxuICBCbG9ja0Zyb3N0T3V0cHV0Qm94LFxuICBHcmFwaFFMVHJhbnNhY3Rpb24sXG4gIEdyYXBoUUxUeE91dHB1dCxcbn07XG4iXX0=
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse and validate Rosen data encoded in transaction metadata
|
|
3
|
+
* @param data
|
|
4
|
+
* @returns Rosen data or undefined if metadata is invalid
|
|
5
|
+
*/
|
|
6
|
+
export declare const parseRosenData: (data: any) => {
|
|
7
|
+
toChain: any;
|
|
8
|
+
toAddress: any;
|
|
9
|
+
bridgeFee: any;
|
|
10
|
+
networkFee: any;
|
|
11
|
+
fromAddress: any;
|
|
12
|
+
} | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* @param policyId
|
|
15
|
+
* @param assetName
|
|
16
|
+
* @returns the concatenation of policyId and assetName by '.' which represents the token Id in Rosen packages and services
|
|
17
|
+
*/
|
|
18
|
+
export declare const getCardanoTokenId: (policyId: string, assetName: string) => string;
|
|
19
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/cardano/utils.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,GAAG;;;;;;aAoBvC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,WACzC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { isArray, isString, isPlainObject } from 'lodash-es';
|
|
2
|
+
/**
|
|
3
|
+
* Parse and validate Rosen data encoded in transaction metadata
|
|
4
|
+
* @param data
|
|
5
|
+
* @returns Rosen data or undefined if metadata is invalid
|
|
6
|
+
*/
|
|
7
|
+
export const parseRosenData = (data) => {
|
|
8
|
+
if (data &&
|
|
9
|
+
isPlainObject(data) &&
|
|
10
|
+
isString(data.to) &&
|
|
11
|
+
isString(data.networkFee) &&
|
|
12
|
+
isString(data.bridgeFee) &&
|
|
13
|
+
isString(data.toAddress) &&
|
|
14
|
+
isArray(data.fromAddress) &&
|
|
15
|
+
data.fromAddress.every(isString)) {
|
|
16
|
+
return {
|
|
17
|
+
toChain: data.to,
|
|
18
|
+
toAddress: data.toAddress,
|
|
19
|
+
bridgeFee: data.bridgeFee,
|
|
20
|
+
networkFee: data.networkFee,
|
|
21
|
+
fromAddress: data.fromAddress.join(''),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* @param policyId
|
|
28
|
+
* @param assetName
|
|
29
|
+
* @returns the concatenation of policyId and assetName by '.' which represents the token Id in Rosen packages and services
|
|
30
|
+
*/
|
|
31
|
+
export const getCardanoTokenId = (policyId, assetName) => `${policyId}.${assetName}`;
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2NhcmRhbm8vdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTdEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtJQUMxQyxJQUNFLElBQUk7UUFDSixhQUFhLENBQUMsSUFBSSxDQUFDO1FBQ25CLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUNoQyxDQUFDO1FBQ0QsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNoQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLEVBQUUsQ0FDdkUsR0FBRyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZywgaXNQbGFpbk9iamVjdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbi8qKlxuICogUGFyc2UgYW5kIHZhbGlkYXRlIFJvc2VuIGRhdGEgZW5jb2RlZCBpbiB0cmFuc2FjdGlvbiBtZXRhZGF0YVxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zIFJvc2VuIGRhdGEgb3IgdW5kZWZpbmVkIGlmIG1ldGFkYXRhIGlzIGludmFsaWRcbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlUm9zZW5EYXRhID0gKGRhdGE6IGFueSkgPT4ge1xuICBpZiAoXG4gICAgZGF0YSAmJlxuICAgIGlzUGxhaW5PYmplY3QoZGF0YSkgJiZcbiAgICBpc1N0cmluZyhkYXRhLnRvKSAmJlxuICAgIGlzU3RyaW5nKGRhdGEubmV0d29ya0ZlZSkgJiZcbiAgICBpc1N0cmluZyhkYXRhLmJyaWRnZUZlZSkgJiZcbiAgICBpc1N0cmluZyhkYXRhLnRvQWRkcmVzcykgJiZcbiAgICBpc0FycmF5KGRhdGEuZnJvbUFkZHJlc3MpICYmXG4gICAgZGF0YS5mcm9tQWRkcmVzcy5ldmVyeShpc1N0cmluZylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvQ2hhaW46IGRhdGEudG8sXG4gICAgICB0b0FkZHJlc3M6IGRhdGEudG9BZGRyZXNzLFxuICAgICAgYnJpZGdlRmVlOiBkYXRhLmJyaWRnZUZlZSxcbiAgICAgIG5ldHdvcmtGZWU6IGRhdGEubmV0d29ya0ZlZSxcbiAgICAgIGZyb21BZGRyZXNzOiBkYXRhLmZyb21BZGRyZXNzLmpvaW4oJycpLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogQHBhcmFtIHBvbGljeUlkXG4gKiBAcGFyYW0gYXNzZXROYW1lXG4gKiBAcmV0dXJucyB0aGUgY29uY2F0ZW5hdGlvbiBvZiBwb2xpY3lJZCBhbmQgYXNzZXROYW1lIGJ5ICcuJyB3aGljaCByZXByZXNlbnRzIHRoZSB0b2tlbiBJZCBpbiBSb3NlbiBwYWNrYWdlcyBhbmQgc2VydmljZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENhcmRhbm9Ub2tlbklkID0gKHBvbGljeUlkOiBzdHJpbmcsIGFzc2V0TmFtZTogc3RyaW5nKSA9PlxuICBgJHtwb2xpY3lJZH0uJHthc3NldE5hbWV9YDtcbiJdfQ==
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const CARDANO_NATIVE_TOKEN = "ada";
|
|
2
|
+
export declare const ERGO_NATIVE_TOKEN = "erg";
|
|
3
|
+
export declare const BITCOIN_NATIVE_TOKEN = "btc";
|
|
4
|
+
export declare const BITCOIN_CHAIN = "bitcoin";
|
|
5
|
+
export declare const ETHEREUM_CHAIN = "ethereum";
|
|
6
|
+
export declare const BINANCE_CHAIN = "binance";
|
|
7
|
+
export declare const CARDANO_CHAIN = "cardano";
|
|
8
|
+
export declare const ERGO_CHAIN = "ergo";
|
|
9
|
+
export declare const DOGE_CHAIN = "doge";
|
|
10
|
+
export declare const DOGE_NATIVE_TOKEN = "doge";
|
|
11
|
+
export declare const RUNES_CHAIN = "bitcoin-runes";
|
|
12
|
+
export declare const SUPPORTED_CHAINS: string[];
|
|
13
|
+
//# sourceMappingURL=const.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../lib/getRosenData/const.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAC1C,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AACvC,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAC1C,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,cAAc,aAAa,CAAC;AACzC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,aAAa,YAAY,CAAC;AACvC,eAAO,MAAM,UAAU,SAAS,CAAC;AACjC,eAAO,MAAM,UAAU,SAAS,CAAC;AACjC,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,WAAW,kBAAkB,CAAC;AAC3C,eAAO,MAAM,gBAAgB,UAQ5B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const CARDANO_NATIVE_TOKEN = 'ada';
|
|
2
|
+
export const ERGO_NATIVE_TOKEN = 'erg';
|
|
3
|
+
export const BITCOIN_NATIVE_TOKEN = 'btc';
|
|
4
|
+
export const BITCOIN_CHAIN = 'bitcoin';
|
|
5
|
+
export const ETHEREUM_CHAIN = 'ethereum';
|
|
6
|
+
export const BINANCE_CHAIN = 'binance';
|
|
7
|
+
export const CARDANO_CHAIN = 'cardano';
|
|
8
|
+
export const ERGO_CHAIN = 'ergo';
|
|
9
|
+
export const DOGE_CHAIN = 'doge';
|
|
10
|
+
export const DOGE_NATIVE_TOKEN = 'doge';
|
|
11
|
+
export const RUNES_CHAIN = 'bitcoin-runes';
|
|
12
|
+
export const SUPPORTED_CHAINS = [
|
|
13
|
+
ERGO_CHAIN,
|
|
14
|
+
CARDANO_CHAIN,
|
|
15
|
+
BITCOIN_CHAIN,
|
|
16
|
+
ETHEREUM_CHAIN,
|
|
17
|
+
BINANCE_CHAIN,
|
|
18
|
+
DOGE_CHAIN,
|
|
19
|
+
RUNES_CHAIN,
|
|
20
|
+
];
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvZ2V0Um9zZW5EYXRhL2NvbnN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQztBQUMxQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0FBQzFDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQztBQUN6QyxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUNqQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztBQUN4QyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDO0FBQzNDLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHO0lBQzlCLFVBQVU7SUFDVixhQUFhO0lBQ2IsYUFBYTtJQUNiLGNBQWM7SUFDZCxhQUFhO0lBQ2IsVUFBVTtJQUNWLFdBQVc7Q0FDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IENBUkRBTk9fTkFUSVZFX1RPS0VOID0gJ2FkYSc7XG5leHBvcnQgY29uc3QgRVJHT19OQVRJVkVfVE9LRU4gPSAnZXJnJztcbmV4cG9ydCBjb25zdCBCSVRDT0lOX05BVElWRV9UT0tFTiA9ICdidGMnO1xuZXhwb3J0IGNvbnN0IEJJVENPSU5fQ0hBSU4gPSAnYml0Y29pbic7XG5leHBvcnQgY29uc3QgRVRIRVJFVU1fQ0hBSU4gPSAnZXRoZXJldW0nO1xuZXhwb3J0IGNvbnN0IEJJTkFOQ0VfQ0hBSU4gPSAnYmluYW5jZSc7XG5leHBvcnQgY29uc3QgQ0FSREFOT19DSEFJTiA9ICdjYXJkYW5vJztcbmV4cG9ydCBjb25zdCBFUkdPX0NIQUlOID0gJ2VyZ28nO1xuZXhwb3J0IGNvbnN0IERPR0VfQ0hBSU4gPSAnZG9nZSc7XG5leHBvcnQgY29uc3QgRE9HRV9OQVRJVkVfVE9LRU4gPSAnZG9nZSc7XG5leHBvcnQgY29uc3QgUlVORVNfQ0hBSU4gPSAnYml0Y29pbi1ydW5lcyc7XG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX0NIQUlOUyA9IFtcbiAgRVJHT19DSEFJTixcbiAgQ0FSREFOT19DSEFJTixcbiAgQklUQ09JTl9DSEFJTixcbiAgRVRIRVJFVU1fQ0hBSU4sXG4gIEJJTkFOQ0VfQ0hBSU4sXG4gIERPR0VfQ0hBSU4sXG4gIFJVTkVTX0NIQUlOLFxuXTtcbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RosenData, TokenTransformation } from '../abstract/types';
|
|
2
|
+
import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
|
|
3
|
+
import { DogeEsploraTransaction, EsploraTxOutput } from './types';
|
|
4
|
+
import { TokenMap } from '@rosen-bridge/tokens';
|
|
5
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
6
|
+
export declare class DogeEsploraRosenExtractor extends AbstractRosenDataExtractor<DogeEsploraTransaction> {
|
|
7
|
+
readonly chain = "doge";
|
|
8
|
+
protected lockScriptPubKey: string;
|
|
9
|
+
constructor(lockAddress: string, tokens: TokenMap, logger?: AbstractLogger);
|
|
10
|
+
/**
|
|
11
|
+
* extracts RosenData from given lock transaction in Esplora format
|
|
12
|
+
* @param transaction the lock transaction in Esplora format
|
|
13
|
+
*/
|
|
14
|
+
extractRawData: (transaction: DogeEsploraTransaction) => RosenData | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* extracts and builds token transformation from UTXO and tokenMap
|
|
17
|
+
* @param box transaction output
|
|
18
|
+
* @param toChain event target chain
|
|
19
|
+
*/
|
|
20
|
+
getAssetTransformation: (box: EsploraTxOutput, toChain: string) => TokenTransformation | undefined;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=DogeEsploraRosenExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DogeEsploraRosenExtractor.d.ts","sourceRoot":"","sources":["../../../lib/getRosenData/doge/DogeEsploraRosenExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,0BAA0B,MAAM,wCAAwC,CAAC;AAEhF,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAgB,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,qBAAa,yBAA0B,SAAQ,0BAA0B,CAAC,sBAAsB,CAAC;IAC/F,QAAQ,CAAC,KAAK,UAAc;IAC5B,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAEvB,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,cAAc;IAK1E;;;OAGG;IACH,cAAc,GACZ,aAAa,sBAAsB,KAClC,SAAS,GAAG,SAAS,CA6EtB;IAEF;;;;OAIG;IACH,sBAAsB,GACpB,KAAK,eAAe,EACpB,SAAS,MAAM,KACd,mBAAmB,GAAG,SAAS,CAehC;CACH"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import AbstractRosenDataExtractor from '../abstract/AbstractRosenDataExtractor';
|
|
2
|
+
import { DOGE_CHAIN, DOGE_NATIVE_TOKEN } from '../const';
|
|
3
|
+
import { parseRosenData, addressToOutputScript } from './utils';
|
|
4
|
+
export class DogeEsploraRosenExtractor extends AbstractRosenDataExtractor {
|
|
5
|
+
chain = DOGE_CHAIN;
|
|
6
|
+
lockScriptPubKey;
|
|
7
|
+
constructor(lockAddress, tokens, logger) {
|
|
8
|
+
super(lockAddress, tokens, logger);
|
|
9
|
+
this.lockScriptPubKey = addressToOutputScript(lockAddress);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* extracts RosenData from given lock transaction in Esplora format
|
|
13
|
+
* @param transaction the lock transaction in Esplora format
|
|
14
|
+
*/
|
|
15
|
+
extractRawData = (transaction) => {
|
|
16
|
+
const baseError = `No rosen data found for tx [${transaction.txid}]`;
|
|
17
|
+
try {
|
|
18
|
+
const outputs = transaction.vout;
|
|
19
|
+
if (outputs.length < 2) {
|
|
20
|
+
this.logger.debug(baseError + `: Insufficient number of boxes`);
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
let validData = false; // an OP_RETURN box with valid data is found
|
|
24
|
+
let validLock = false; // a lock box is found with available asset transformation
|
|
25
|
+
// parse rosen data from OP_RETURN box
|
|
26
|
+
let opReturnData;
|
|
27
|
+
for (let i = 0; i < outputs.length; i++) {
|
|
28
|
+
const output = outputs[i];
|
|
29
|
+
if (output.scriptpubkey.slice(0, 2) !== '6a')
|
|
30
|
+
continue; // not an OP_RETURN utxo
|
|
31
|
+
try {
|
|
32
|
+
opReturnData = parseRosenData(output.scriptpubkey);
|
|
33
|
+
validData = true;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
this.logger.debug(`Failed to extract data from OP_RETURN box [${transaction.txid}.${i}]: ${e}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (!validData || !opReturnData) {
|
|
41
|
+
this.logger.debug(baseError + `: No OP_RETURN box with valid data is found`);
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
// find target chain token id
|
|
45
|
+
let assetTransformation;
|
|
46
|
+
for (let i = 0; i < outputs.length; i++) {
|
|
47
|
+
const output = outputs[i];
|
|
48
|
+
if (output.scriptpubkey !== this.lockScriptPubKey)
|
|
49
|
+
continue; // utxo address is not lock address
|
|
50
|
+
assetTransformation = this.getAssetTransformation(output, opReturnData.toChain);
|
|
51
|
+
if (assetTransformation) {
|
|
52
|
+
validLock = true;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (!validLock || !assetTransformation) {
|
|
57
|
+
this.logger.debug(baseError + `: Failed to find rosen asset transformation`);
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
const fromAddress = `box:${transaction.vin[0].txid}.${transaction.vin[0].vout}`;
|
|
61
|
+
return {
|
|
62
|
+
toChain: opReturnData.toChain,
|
|
63
|
+
toAddress: opReturnData.toAddress,
|
|
64
|
+
bridgeFee: opReturnData.bridgeFee,
|
|
65
|
+
networkFee: opReturnData.networkFee,
|
|
66
|
+
fromAddress: fromAddress,
|
|
67
|
+
sourceChainTokenId: assetTransformation.from,
|
|
68
|
+
amount: assetTransformation.amount,
|
|
69
|
+
targetChainTokenId: assetTransformation.to,
|
|
70
|
+
sourceTxId: transaction.txid,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
this.logger.debug(`An error occurred while getting Doge rosen data from Esplora: ${e}`);
|
|
75
|
+
if (e instanceof Error && e.stack) {
|
|
76
|
+
this.logger.debug(e.stack);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* extracts and builds token transformation from UTXO and tokenMap
|
|
83
|
+
* @param box transaction output
|
|
84
|
+
* @param toChain event target chain
|
|
85
|
+
*/
|
|
86
|
+
getAssetTransformation = (box, toChain) => {
|
|
87
|
+
// try to build transformation using locked DOGE
|
|
88
|
+
const wrappedDoge = this.tokens.search(DOGE_CHAIN, {
|
|
89
|
+
tokenId: DOGE_NATIVE_TOKEN,
|
|
90
|
+
});
|
|
91
|
+
if (wrappedDoge.length > 0 && Object.hasOwn(wrappedDoge[0], toChain)) {
|
|
92
|
+
const dogeAmount = box.value;
|
|
93
|
+
return {
|
|
94
|
+
from: DOGE_NATIVE_TOKEN,
|
|
95
|
+
to: this.tokens.getID(wrappedDoge[0], toChain),
|
|
96
|
+
amount: dogeAmount.toString(),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG9nZUVzcGxvcmFSb3NlbkV4dHJhY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9nZXRSb3NlbkRhdGEvZG9nZS9Eb2dlRXNwbG9yYVJvc2VuRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sMEJBQTBCLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUl6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWhFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSwwQkFBa0Q7SUFDdEYsS0FBSyxHQUFHLFVBQVUsQ0FBQztJQUNsQixnQkFBZ0IsQ0FBUztJQUVuQyxZQUFZLFdBQW1CLEVBQUUsTUFBZ0IsRUFBRSxNQUF1QjtRQUN4RSxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsR0FBRyxDQUNmLFdBQW1DLEVBQ1osRUFBRTtRQUN6QixNQUFNLFNBQVMsR0FBRywrQkFBK0IsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ3JFLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDakMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsZ0NBQWdDLENBQUMsQ0FBQztnQkFDaEUsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUVELElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLDRDQUE0QztZQUNuRSxJQUFJLFNBQVMsR0FB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Q0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILHNCQUFzQixHQUFHLENBQ3ZCLEdBQW9CLEVBQ3BCLE9BQWUsRUFDa0IsRUFBRTtRQUNuQyxnREFBZ0Q7UUFDaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ2pELE9BQU8sRUFBRSxpQkFBaUI7U0FDM0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JFLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDN0IsT0FBTztnQkFDTCxJQUFJLEVBQUUsaUJBQWlCO2dCQUN2QixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztnQkFDOUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUU7YUFDOUIsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm9zZW5EYXRhLCBUb2tlblRyYW5zZm9ybWF0aW9uIH0gZnJvbSAnLi4vYWJzdHJhY3QvdHlwZXMnO1xuaW1wb3J0IEFic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yIGZyb20gJy4uL2Fic3RyYWN0L0Fic3RyYWN0Um9zZW5EYXRhRXh0cmFjdG9yJztcbmltcG9ydCB7IERPR0VfQ0hBSU4sIERPR0VfTkFUSVZFX1RPS0VOIH0gZnJvbSAnLi4vY29uc3QnO1xuaW1wb3J0IHsgRG9nZUVzcGxvcmFUcmFuc2FjdGlvbiwgRXNwbG9yYVR4T3V0cHV0LCBPcFJldHVybkRhdGEgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFRva2VuTWFwIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS90b2tlbnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBwYXJzZVJvc2VuRGF0YSwgYWRkcmVzc1RvT3V0cHV0U2NyaXB0IH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBEb2dlRXNwbG9yYVJvc2VuRXh0cmFjdG9yIGV4dGVuZHMgQWJzdHJhY3RSb3NlbkRhdGFFeHRyYWN0b3I8RG9nZUVzcGxvcmFUcmFuc2FjdGlvbj4ge1xuICByZWFkb25seSBjaGFpbiA9IERPR0VfQ0hBSU47XG4gIHByb3RlY3RlZCBsb2NrU2NyaXB0UHViS2V5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IobG9ja0FkZHJlc3M6IHN0cmluZywgdG9rZW5zOiBUb2tlbk1hcCwgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIpIHtcbiAgICBzdXBlcihsb2NrQWRkcmVzcywgdG9rZW5zLCBsb2dnZXIpO1xuICAgIHRoaXMubG9ja1NjcmlwdFB1YktleSA9IGFkZHJlc3NUb091dHB1dFNjcmlwdChsb2NrQWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogZXh0cmFjdHMgUm9zZW5EYXRhIGZyb20gZ2l2ZW4gbG9jayB0cmFuc2FjdGlvbiBpbiBFc3Bsb3JhIGZvcm1hdFxuICAgKiBAcGFyYW0gdHJhbnNhY3Rpb24gdGhlIGxvY2sgdHJhbnNhY3Rpb24gaW4gRXNwbG9yYSBmb3JtYXRcbiAgICovXG4gIGV4dHJhY3RSYXdEYXRhID0gKFxuICAgIHRyYW5zYWN0aW9uOiBEb2dlRXNwbG9yYVRyYW5zYWN0aW9uXG4gICk6IFJvc2VuRGF0YSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgYmFzZUVycm9yID0gYE5vIHJvc2VuIGRhdGEgZm91bmQgZm9yIHR4IFske3RyYW5zYWN0aW9uLnR4aWR9XWA7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG91dHB1dHMgPSB0cmFuc2FjdGlvbi52b3V0O1xuICAgICAgaWYgKG91dHB1dHMubGVuZ3RoIDwgMikge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhiYXNlRXJyb3IgKyBgOiBJbnN1ZmZpY2llbnQgbnVtYmVyIG9mIGJveGVzYCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGxldCB2YWxpZERhdGEgPSBmYWxzZTsgLy8gYW4gT1BfUkVUVVJOIGJveCB3aXRoIHZhbGlkIGRhdGEgaXMgZm91bmRcbiAgICAgIGxldCB2YWxpZExvY2sgPSBmYWxzZTsgLy8gYSBsb2NrIGJveCBpcyBmb3VuZCB3aXRoIGF2YWlsYWJsZSBhc3NldCB0cmFuc2Zvcm1hdGlvblxuXG4gICAgICAvLyBwYXJzZSByb3NlbiBkYXRhIGZyb20gT1BfUkVUVVJOIGJveFxuICAgICAgbGV0IG9wUmV0dXJuRGF0YTogT3BSZXR1cm5EYXRhIHwgdW5kZWZpbmVkO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbaV07XG4gICAgICAgIGlmIChvdXRwdXQuc2NyaXB0cHVia2V5LnNsaWNlKDAsIDIpICE9PSAnNmEnKSBjb250aW51ZTsgLy8gbm90IGFuIE9QX1JFVFVSTiB1dHhvXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvcFJldHVybkRhdGEgPSBwYXJzZVJvc2VuRGF0YShvdXRwdXQuc2NyaXB0cHVia2V5KTtcbiAgICAgICAgICB2YWxpZERhdGEgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIGV4dHJhY3QgZGF0YSBmcm9tIE9QX1JFVFVSTiBib3ggWyR7dHJhbnNhY3Rpb24udHhpZH0uJHtpfV06ICR7ZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCF2YWxpZERhdGEgfHwgIW9wUmV0dXJuRGF0YSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBiYXNlRXJyb3IgKyBgOiBObyBPUF9SRVRVUk4gYm94IHdpdGggdmFsaWQgZGF0YSBpcyBmb3VuZGBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgLy8gZmluZCB0YXJnZXQgY2hhaW4gdG9rZW4gaWRcbiAgICAgIGxldCBhc3NldFRyYW5zZm9ybWF0aW9uOiBUb2tlblRyYW5zZm9ybWF0aW9uIHwgdW5kZWZpbmVkO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvdXRwdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dHNbaV07XG4gICAgICAgIGlmIChvdXRwdXQuc2NyaXB0cHVia2V5ICE9PSB0aGlzLmxvY2tTY3JpcHRQdWJLZXkpIGNvbnRpbnVlOyAvLyB1dHhvIGFkZHJlc3MgaXMgbm90IGxvY2sgYWRkcmVzc1xuICAgICAgICBhc3NldFRyYW5zZm9ybWF0aW9uID0gdGhpcy5nZXRBc3NldFRyYW5zZm9ybWF0aW9uKFxuICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICBvcFJldHVybkRhdGEudG9DaGFpblxuICAgICAgICApO1xuICAgICAgICBpZiAoYXNzZXRUcmFuc2Zvcm1hdGlvbikge1xuICAgICAgICAgIHZhbGlkTG9jayA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghdmFsaWRMb2NrIHx8ICFhc3NldFRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGJhc2VFcnJvciArIGA6IEZhaWxlZCB0byBmaW5kIHJvc2VuIGFzc2V0IHRyYW5zZm9ybWF0aW9uYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmcm9tQWRkcmVzcyA9IGBib3g6JHt0cmFuc2FjdGlvbi52aW5bMF0udHhpZH0uJHt0cmFuc2FjdGlvbi52aW5bMF0udm91dH1gO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9DaGFpbjogb3BSZXR1cm5EYXRhLnRvQ2hhaW4sXG4gICAgICAgIHRvQWRkcmVzczogb3BSZXR1cm5EYXRhLnRvQWRkcmVzcyxcbiAgICAgICAgYnJpZGdlRmVlOiBvcFJldHVybkRhdGEuYnJpZGdlRmVlLFxuICAgICAgICBuZXR3b3JrRmVlOiBvcFJldHVybkRhdGEubmV0d29ya0ZlZSxcbiAgICAgICAgZnJvbUFkZHJlc3M6IGZyb21BZGRyZXNzLFxuICAgICAgICBzb3VyY2VDaGFpblRva2VuSWQ6IGFzc2V0VHJhbnNmb3JtYXRpb24uZnJvbSxcbiAgICAgICAgYW1vdW50OiBhc3NldFRyYW5zZm9ybWF0aW9uLmFtb3VudCxcbiAgICAgICAgdGFyZ2V0Q2hhaW5Ub2tlbklkOiBhc3NldFRyYW5zZm9ybWF0aW9uLnRvLFxuICAgICAgICBzb3VyY2VUeElkOiB0cmFuc2FjdGlvbi50eGlkLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgRG9nZSByb3NlbiBkYXRhIGZyb20gRXNwbG9yYTogJHtlfWBcbiAgICAgICk7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUuc3RhY2spIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoZS5zdGFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3RzIGFuZCBidWlsZHMgdG9rZW4gdHJhbnNmb3JtYXRpb24gZnJvbSBVVFhPIGFuZCB0b2tlbk1hcFxuICAgKiBAcGFyYW0gYm94IHRyYW5zYWN0aW9uIG91dHB1dFxuICAgKiBAcGFyYW0gdG9DaGFpbiBldmVudCB0YXJnZXQgY2hhaW5cbiAgICovXG4gIGdldEFzc2V0VHJhbnNmb3JtYXRpb24gPSAoXG4gICAgYm94OiBFc3Bsb3JhVHhPdXRwdXQsXG4gICAgdG9DaGFpbjogc3RyaW5nXG4gICk6IFRva2VuVHJhbnNmb3JtYXRpb24gfCB1bmRlZmluZWQgPT4ge1xuICAgIC8vIHRyeSB0byBidWlsZCB0cmFuc2Zvcm1hdGlvbiB1c2luZyBsb2NrZWQgRE9HRVxuICAgIGNvbnN0IHdyYXBwZWREb2dlID0gdGhpcy50b2tlbnMuc2VhcmNoKERPR0VfQ0hBSU4sIHtcbiAgICAgIHRva2VuSWQ6IERPR0VfTkFUSVZFX1RPS0VOLFxuICAgIH0pO1xuICAgIGlmICh3cmFwcGVkRG9nZS5sZW5ndGggPiAwICYmIE9iamVjdC5oYXNPd24od3JhcHBlZERvZ2VbMF0sIHRvQ2hhaW4pKSB7XG4gICAgICBjb25zdCBkb2dlQW1vdW50ID0gYm94LnZhbHVlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbTogRE9HRV9OQVRJVkVfVE9LRU4sXG4gICAgICAgIHRvOiB0aGlzLnRva2Vucy5nZXRJRCh3cmFwcGVkRG9nZVswXSwgdG9DaGFpbiksXG4gICAgICAgIGFtb3VudDogZG9nZUFtb3VudC50b1N0cmluZygpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG59XG4iXX0=
|