@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.
Files changed (158) hide show
  1. package/dist/getRosenData/abstract/AbstractRosenDataExtractor.d.ts +19 -0
  2. package/dist/getRosenData/abstract/AbstractRosenDataExtractor.d.ts.map +1 -0
  3. package/dist/getRosenData/abstract/AbstractRosenDataExtractor.js +32 -0
  4. package/dist/getRosenData/abstract/types.d.ts +18 -0
  5. package/dist/getRosenData/abstract/types.d.ts.map +1 -0
  6. package/dist/getRosenData/abstract/types.js +2 -0
  7. package/dist/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.d.ts +22 -0
  8. package/dist/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.d.ts.map +1 -0
  9. package/dist/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.js +105 -0
  10. package/dist/getRosenData/bitcoin/BitcoinRosenExtractor.d.ts +22 -0
  11. package/dist/getRosenData/bitcoin/BitcoinRosenExtractor.d.ts.map +1 -0
  12. package/dist/getRosenData/bitcoin/BitcoinRosenExtractor.js +113 -0
  13. package/dist/getRosenData/bitcoin/BitcoinRpcRosenExtractor.d.ts +22 -0
  14. package/dist/getRosenData/bitcoin/BitcoinRpcRosenExtractor.d.ts.map +1 -0
  15. package/dist/getRosenData/bitcoin/BitcoinRpcRosenExtractor.js +106 -0
  16. package/dist/getRosenData/bitcoin/types.d.ts +89 -0
  17. package/dist/getRosenData/bitcoin/types.d.ts.map +1 -0
  18. package/dist/getRosenData/bitcoin/types.js +2 -0
  19. package/dist/getRosenData/bitcoin/utils.d.ts +7 -0
  20. package/dist/getRosenData/bitcoin/utils.d.ts.map +1 -0
  21. package/dist/getRosenData/bitcoin/utils.js +17 -0
  22. package/dist/getRosenData/cardano/CardanoBlockFrostRosenExtractor.d.ts +18 -0
  23. package/dist/getRosenData/cardano/CardanoBlockFrostRosenExtractor.d.ts.map +1 -0
  24. package/dist/getRosenData/cardano/CardanoBlockFrostRosenExtractor.js +94 -0
  25. package/dist/getRosenData/cardano/CardanoGraphQLRosenExtractor.d.ts +18 -0
  26. package/dist/getRosenData/cardano/CardanoGraphQLRosenExtractor.d.ts.map +1 -0
  27. package/dist/getRosenData/cardano/CardanoGraphQLRosenExtractor.js +92 -0
  28. package/dist/getRosenData/cardano/CardanoKoiosRosenExtractor.d.ts +19 -0
  29. package/dist/getRosenData/cardano/CardanoKoiosRosenExtractor.d.ts.map +1 -0
  30. package/dist/getRosenData/cardano/CardanoKoiosRosenExtractor.js +95 -0
  31. package/dist/getRosenData/cardano/CardanoOgmiosRosenExtractor.d.ts +18 -0
  32. package/dist/getRosenData/cardano/CardanoOgmiosRosenExtractor.d.ts.map +1 -0
  33. package/dist/getRosenData/cardano/CardanoOgmiosRosenExtractor.js +97 -0
  34. package/dist/getRosenData/cardano/CardanoRosenExtractor.d.ts +18 -0
  35. package/dist/getRosenData/cardano/CardanoRosenExtractor.d.ts.map +1 -0
  36. package/dist/getRosenData/cardano/CardanoRosenExtractor.js +88 -0
  37. package/dist/getRosenData/cardano/types.d.ts +102 -0
  38. package/dist/getRosenData/cardano/types.d.ts.map +1 -0
  39. package/dist/getRosenData/cardano/types.js +2 -0
  40. package/dist/getRosenData/cardano/utils.d.ts +19 -0
  41. package/dist/getRosenData/cardano/utils.d.ts.map +1 -0
  42. package/dist/getRosenData/cardano/utils.js +32 -0
  43. package/dist/getRosenData/const.d.ts +13 -0
  44. package/dist/getRosenData/const.d.ts.map +1 -0
  45. package/dist/getRosenData/const.js +21 -0
  46. package/dist/getRosenData/doge/DogeEsploraRosenExtractor.d.ts +22 -0
  47. package/dist/getRosenData/doge/DogeEsploraRosenExtractor.d.ts.map +1 -0
  48. package/dist/getRosenData/doge/DogeEsploraRosenExtractor.js +104 -0
  49. package/dist/getRosenData/doge/DogeRosenExtractor.d.ts +22 -0
  50. package/dist/getRosenData/doge/DogeRosenExtractor.d.ts.map +1 -0
  51. package/dist/getRosenData/doge/DogeRosenExtractor.js +112 -0
  52. package/dist/getRosenData/doge/DogeRpcRosenExtractor.d.ts +22 -0
  53. package/dist/getRosenData/doge/DogeRpcRosenExtractor.d.ts.map +1 -0
  54. package/dist/getRosenData/doge/DogeRpcRosenExtractor.js +105 -0
  55. package/dist/getRosenData/doge/types.d.ts +87 -0
  56. package/dist/getRosenData/doge/types.d.ts.map +1 -0
  57. package/dist/getRosenData/doge/types.js +2 -0
  58. package/dist/getRosenData/doge/utils.d.ts +13 -0
  59. package/dist/getRosenData/doge/utils.d.ts.map +1 -0
  60. package/dist/getRosenData/doge/utils.js +58 -0
  61. package/dist/getRosenData/ergo/ErgoNodeRosenExtractor.d.ts +22 -0
  62. package/dist/getRosenData/ergo/ErgoNodeRosenExtractor.d.ts.map +1 -0
  63. package/dist/getRosenData/ergo/ErgoNodeRosenExtractor.js +105 -0
  64. package/dist/getRosenData/ergo/ErgoRosenExtractor.d.ts +15 -0
  65. package/dist/getRosenData/ergo/ErgoRosenExtractor.d.ts.map +1 -0
  66. package/dist/getRosenData/ergo/ErgoRosenExtractor.js +33 -0
  67. package/dist/getRosenData/ergo/types.d.ts +37 -0
  68. package/dist/getRosenData/ergo/types.d.ts.map +1 -0
  69. package/dist/getRosenData/ergo/types.js +2 -0
  70. package/dist/getRosenData/evm/EvmEthersRosenExtractor.d.ts +23 -0
  71. package/dist/getRosenData/evm/EvmEthersRosenExtractor.d.ts.map +1 -0
  72. package/dist/getRosenData/evm/EvmEthersRosenExtractor.js +54 -0
  73. package/dist/getRosenData/evm/EvmRosenExtractor.d.ts +16 -0
  74. package/dist/getRosenData/evm/EvmRosenExtractor.d.ts.map +1 -0
  75. package/dist/getRosenData/evm/EvmRosenExtractor.js +31 -0
  76. package/dist/getRosenData/evm/EvmRpcRosenExtractor.d.ts +26 -0
  77. package/dist/getRosenData/evm/EvmRpcRosenExtractor.d.ts.map +1 -0
  78. package/dist/getRosenData/evm/EvmRpcRosenExtractor.js +123 -0
  79. package/dist/getRosenData/evm/utils.d.ts +7 -0
  80. package/dist/getRosenData/evm/utils.d.ts.map +1 -0
  81. package/dist/getRosenData/evm/utils.js +9 -0
  82. package/dist/getRosenData/runes/RunesEsploraRosenExtractor.d.ts +36 -0
  83. package/dist/getRosenData/runes/RunesEsploraRosenExtractor.d.ts.map +1 -0
  84. package/dist/getRosenData/runes/RunesEsploraRosenExtractor.js +113 -0
  85. package/dist/getRosenData/runes/RunesRosenExtractor.d.ts +36 -0
  86. package/dist/getRosenData/runes/RunesRosenExtractor.d.ts.map +1 -0
  87. package/dist/getRosenData/runes/RunesRosenExtractor.js +120 -0
  88. package/dist/getRosenData/runes/RunesRpcRosenExtractor.d.ts +36 -0
  89. package/dist/getRosenData/runes/RunesRpcRosenExtractor.d.ts.map +1 -0
  90. package/dist/getRosenData/runes/RunesRpcRosenExtractor.js +113 -0
  91. package/dist/getRosenData/runes/constants.d.ts +2 -0
  92. package/dist/getRosenData/runes/constants.d.ts.map +1 -0
  93. package/dist/getRosenData/runes/constants.js +2 -0
  94. package/dist/getRosenData/runes/types.d.ts +5 -0
  95. package/dist/getRosenData/runes/types.d.ts.map +1 -0
  96. package/dist/getRosenData/runes/types.js +2 -0
  97. package/dist/getRosenData/runes/utils.d.ts +7 -0
  98. package/dist/getRosenData/runes/utils.d.ts.map +1 -0
  99. package/dist/getRosenData/runes/utils.js +9 -0
  100. package/dist/index.d.ts +23 -0
  101. package/dist/index.d.ts.map +1 -0
  102. package/dist/index.js +25 -0
  103. package/dist/lib/getRosenData/abstract/AbstractRosenDataExtractor.d.ts.map +1 -1
  104. package/dist/lib/getRosenData/abstract/AbstractRosenDataExtractor.js +1 -1
  105. package/dist/lib/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.d.ts.map +1 -1
  106. package/dist/lib/getRosenData/bitcoin/BitcoinEsploraRosenExtractor.js +1 -1
  107. package/dist/lib/getRosenData/bitcoin/BitcoinRosenExtractor.d.ts.map +1 -1
  108. package/dist/lib/getRosenData/bitcoin/BitcoinRosenExtractor.js +1 -1
  109. package/dist/lib/getRosenData/bitcoin/BitcoinRpcRosenExtractor.d.ts.map +1 -1
  110. package/dist/lib/getRosenData/bitcoin/BitcoinRpcRosenExtractor.js +1 -1
  111. package/dist/lib/getRosenData/bitcoin/utils.d.ts.map +1 -1
  112. package/dist/lib/getRosenData/cardano/CardanoBlockFrostRosenExtractor.d.ts.map +1 -1
  113. package/dist/lib/getRosenData/cardano/CardanoBlockFrostRosenExtractor.js +1 -1
  114. package/dist/lib/getRosenData/cardano/CardanoGraphQLRosenExtractor.d.ts.map +1 -1
  115. package/dist/lib/getRosenData/cardano/CardanoGraphQLRosenExtractor.js +1 -1
  116. package/dist/lib/getRosenData/cardano/CardanoKoiosRosenExtractor.d.ts.map +1 -1
  117. package/dist/lib/getRosenData/cardano/CardanoKoiosRosenExtractor.js +1 -1
  118. package/dist/lib/getRosenData/cardano/CardanoOgmiosRosenExtractor.d.ts.map +1 -1
  119. package/dist/lib/getRosenData/cardano/CardanoOgmiosRosenExtractor.js +1 -1
  120. package/dist/lib/getRosenData/cardano/CardanoRosenExtractor.d.ts.map +1 -1
  121. package/dist/lib/getRosenData/cardano/CardanoRosenExtractor.js +1 -1
  122. package/dist/lib/getRosenData/cardano/utils.d.ts.map +1 -1
  123. package/dist/lib/getRosenData/cardano/utils.js +1 -1
  124. package/dist/lib/getRosenData/doge/DogeEsploraRosenExtractor.d.ts.map +1 -1
  125. package/dist/lib/getRosenData/doge/DogeEsploraRosenExtractor.js +1 -1
  126. package/dist/lib/getRosenData/doge/DogeRosenExtractor.d.ts.map +1 -1
  127. package/dist/lib/getRosenData/doge/DogeRosenExtractor.js +1 -1
  128. package/dist/lib/getRosenData/doge/DogeRpcRosenExtractor.d.ts.map +1 -1
  129. package/dist/lib/getRosenData/doge/DogeRpcRosenExtractor.js +1 -1
  130. package/dist/lib/getRosenData/doge/utils.d.ts.map +1 -1
  131. package/dist/lib/getRosenData/ergo/ErgoNodeRosenExtractor.d.ts.map +1 -1
  132. package/dist/lib/getRosenData/ergo/ErgoNodeRosenExtractor.js +1 -1
  133. package/dist/lib/getRosenData/ergo/ErgoRosenExtractor.d.ts.map +1 -1
  134. package/dist/lib/getRosenData/ergo/ErgoRosenExtractor.js +2 -2
  135. package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.d.ts.map +1 -1
  136. package/dist/lib/getRosenData/evm/EvmEthersRosenExtractor.js +1 -1
  137. package/dist/lib/getRosenData/evm/EvmRosenExtractor.d.ts.map +1 -1
  138. package/dist/lib/getRosenData/evm/EvmRosenExtractor.js +1 -1
  139. package/dist/lib/getRosenData/evm/EvmRpcRosenExtractor.d.ts.map +1 -1
  140. package/dist/lib/getRosenData/evm/EvmRpcRosenExtractor.js +1 -1
  141. package/dist/lib/getRosenData/evm/utils.d.ts.map +1 -1
  142. package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.d.ts.map +1 -1
  143. package/dist/lib/getRosenData/runes/RunesEsploraRosenExtractor.js +1 -1
  144. package/dist/lib/getRosenData/runes/RunesRosenExtractor.d.ts.map +1 -1
  145. package/dist/lib/getRosenData/runes/RunesRosenExtractor.js +1 -1
  146. package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.d.ts.map +1 -1
  147. package/dist/lib/getRosenData/runes/RunesRpcRosenExtractor.js +1 -1
  148. package/dist/lib/getRosenData/runes/utils.d.ts.map +1 -1
  149. package/dist/lib/utils.d.ts.map +1 -1
  150. package/dist/tsconfig.build.tsbuildinfo +1 -0
  151. package/dist/types.d.ts +7 -0
  152. package/dist/types.d.ts.map +1 -0
  153. package/dist/types.js +2 -0
  154. package/dist/utils.d.ts +7 -0
  155. package/dist/utils.d.ts.map +1 -0
  156. package/dist/utils.js +31 -0
  157. package/package.json +12 -17
  158. 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":"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"}
@@ -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=