@my-packages-changeit/watcher-data-extractor 13.0.10

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 (127) hide show
  1. package/CHANGELOG.md +394 -0
  2. package/README.md +74 -0
  3. package/dist/actions/collateralAction.d.ts +25 -0
  4. package/dist/actions/collateralAction.d.ts.map +1 -0
  5. package/dist/actions/collateralAction.js +34 -0
  6. package/dist/actions/commitmentAction.d.ts +43 -0
  7. package/dist/actions/commitmentAction.d.ts.map +1 -0
  8. package/dist/actions/commitmentAction.js +138 -0
  9. package/dist/actions/eventTriggerAction.d.ts +29 -0
  10. package/dist/actions/eventTriggerAction.d.ts.map +1 -0
  11. package/dist/actions/eventTriggerAction.js +101 -0
  12. package/dist/actions/permitAction.d.ts +73 -0
  13. package/dist/actions/permitAction.d.ts.map +1 -0
  14. package/dist/actions/permitAction.js +187 -0
  15. package/dist/constants.d.ts +4 -0
  16. package/dist/constants.d.ts.map +1 -0
  17. package/dist/constants.js +4 -0
  18. package/dist/entities/collateralEntity.d.ts +8 -0
  19. package/dist/entities/collateralEntity.d.ts.map +1 -0
  20. package/dist/entities/collateralEntity.js +34 -0
  21. package/dist/entities/commitmentEntity.d.ts +19 -0
  22. package/dist/entities/commitmentEntity.d.ts.map +1 -0
  23. package/dist/entities/commitmentEntity.js +93 -0
  24. package/dist/entities/eventTriggerEntity.d.ts +24 -0
  25. package/dist/entities/eventTriggerEntity.d.ts.map +1 -0
  26. package/dist/entities/eventTriggerEntity.js +113 -0
  27. package/dist/entities/permitEntity.d.ts +14 -0
  28. package/dist/entities/permitEntity.d.ts.map +1 -0
  29. package/dist/entities/permitEntity.js +68 -0
  30. package/dist/extractor/collateralExtractor.d.ts +31 -0
  31. package/dist/extractor/collateralExtractor.d.ts.map +1 -0
  32. package/dist/extractor/collateralExtractor.js +72 -0
  33. package/dist/extractor/commitmentExtractor.d.ts +46 -0
  34. package/dist/extractor/commitmentExtractor.d.ts.map +1 -0
  35. package/dist/extractor/commitmentExtractor.js +125 -0
  36. package/dist/extractor/eventTriggerExtractor.d.ts +57 -0
  37. package/dist/extractor/eventTriggerExtractor.d.ts.map +1 -0
  38. package/dist/extractor/eventTriggerExtractor.js +215 -0
  39. package/dist/extractor/permitExtractor.d.ts +150 -0
  40. package/dist/extractor/permitExtractor.d.ts.map +1 -0
  41. package/dist/extractor/permitExtractor.js +235 -0
  42. package/dist/index.d.ts +12 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +12 -0
  45. package/dist/interfaces/extractedCollateral.d.ts +9 -0
  46. package/dist/interfaces/extractedCollateral.d.ts.map +1 -0
  47. package/dist/interfaces/extractedCollateral.js +2 -0
  48. package/dist/interfaces/extractedCommitment.d.ts +11 -0
  49. package/dist/interfaces/extractedCommitment.d.ts.map +1 -0
  50. package/dist/interfaces/extractedCommitment.js +2 -0
  51. package/dist/interfaces/extractedEventTrigger.d.ts +22 -0
  52. package/dist/interfaces/extractedEventTrigger.d.ts.map +1 -0
  53. package/dist/interfaces/extractedEventTrigger.js +2 -0
  54. package/dist/interfaces/extractedPermit.d.ts +12 -0
  55. package/dist/interfaces/extractedPermit.d.ts.map +1 -0
  56. package/dist/interfaces/extractedPermit.js +2 -0
  57. package/dist/interfaces/types.d.ts +25 -0
  58. package/dist/interfaces/types.d.ts.map +1 -0
  59. package/dist/interfaces/types.js +2 -0
  60. package/dist/migrations/index.d.ts +7 -0
  61. package/dist/migrations/index.d.ts.map +1 -0
  62. package/dist/migrations/index.js +45 -0
  63. package/dist/migrations/postgres/1688554842087-migration.d.ts +7 -0
  64. package/dist/migrations/postgres/1688554842087-migration.d.ts.map +1 -0
  65. package/dist/migrations/postgres/1688554842087-migration.js +82 -0
  66. package/dist/migrations/postgres/1689175974257-migration.d.ts +7 -0
  67. package/dist/migrations/postgres/1689175974257-migration.d.ts.map +1 -0
  68. package/dist/migrations/postgres/1689175974257-migration.js +50 -0
  69. package/dist/migrations/postgres/1699874447928-migration.d.ts +7 -0
  70. package/dist/migrations/postgres/1699874447928-migration.d.ts.map +1 -0
  71. package/dist/migrations/postgres/1699874447928-migration.js +36 -0
  72. package/dist/migrations/postgres/1706610773315-migration.d.ts +7 -0
  73. package/dist/migrations/postgres/1706610773315-migration.d.ts.map +1 -0
  74. package/dist/migrations/postgres/1706610773315-migration.js +69 -0
  75. package/dist/migrations/postgres/1709388482275-migration.d.ts +7 -0
  76. package/dist/migrations/postgres/1709388482275-migration.d.ts.map +1 -0
  77. package/dist/migrations/postgres/1709388482275-migration.js +29 -0
  78. package/dist/migrations/postgres/1737785036299-migration.d.ts +7 -0
  79. package/dist/migrations/postgres/1737785036299-migration.d.ts.map +1 -0
  80. package/dist/migrations/postgres/1737785036299-migration.js +32 -0
  81. package/dist/migrations/postgres/1746354253000-migration.d.ts +7 -0
  82. package/dist/migrations/postgres/1746354253000-migration.d.ts.map +1 -0
  83. package/dist/migrations/postgres/1746354253000-migration.js +15 -0
  84. package/dist/migrations/postgres/1758958886549-migration.d.ts +7 -0
  85. package/dist/migrations/postgres/1758958886549-migration.d.ts.map +1 -0
  86. package/dist/migrations/postgres/1758958886549-migration.js +30 -0
  87. package/dist/migrations/postgres/1766843825000-migration.d.ts +7 -0
  88. package/dist/migrations/postgres/1766843825000-migration.d.ts.map +1 -0
  89. package/dist/migrations/postgres/1766843825000-migration.js +42 -0
  90. package/dist/migrations/sqlite/1688555766601-migration.d.ts +7 -0
  91. package/dist/migrations/sqlite/1688555766601-migration.d.ts.map +1 -0
  92. package/dist/migrations/sqlite/1688555766601-migration.js +79 -0
  93. package/dist/migrations/sqlite/1689175103163-migration.d.ts +7 -0
  94. package/dist/migrations/sqlite/1689175103163-migration.d.ts.map +1 -0
  95. package/dist/migrations/sqlite/1689175103163-migration.js +392 -0
  96. package/dist/migrations/sqlite/1699872205117-migration.d.ts +7 -0
  97. package/dist/migrations/sqlite/1699872205117-migration.d.ts.map +1 -0
  98. package/dist/migrations/sqlite/1699872205117-migration.js +192 -0
  99. package/dist/migrations/sqlite/1706610773176-migration.d.ts +7 -0
  100. package/dist/migrations/sqlite/1706610773176-migration.d.ts.map +1 -0
  101. package/dist/migrations/sqlite/1706610773176-migration.js +421 -0
  102. package/dist/migrations/sqlite/1709388134975-migration.d.ts +7 -0
  103. package/dist/migrations/sqlite/1709388134975-migration.d.ts.map +1 -0
  104. package/dist/migrations/sqlite/1709388134975-migration.js +28 -0
  105. package/dist/migrations/sqlite/1737547743177-migration.d.ts +7 -0
  106. package/dist/migrations/sqlite/1737547743177-migration.d.ts.map +1 -0
  107. package/dist/migrations/sqlite/1737547743177-migration.js +204 -0
  108. package/dist/migrations/sqlite/1746354254000-migration.d.ts +7 -0
  109. package/dist/migrations/sqlite/1746354254000-migration.d.ts.map +1 -0
  110. package/dist/migrations/sqlite/1746354254000-migration.js +15 -0
  111. package/dist/migrations/sqlite/1761774736153-migration.d.ts +7 -0
  112. package/dist/migrations/sqlite/1761774736153-migration.d.ts.map +1 -0
  113. package/dist/migrations/sqlite/1761774736153-migration.js +204 -0
  114. package/dist/migrations/sqlite/1762768664031-migration.d.ts +7 -0
  115. package/dist/migrations/sqlite/1762768664031-migration.d.ts.map +1 -0
  116. package/dist/migrations/sqlite/1762768664031-migration.js +204 -0
  117. package/dist/migrations/sqlite/1766843824000-migration.d.ts +7 -0
  118. package/dist/migrations/sqlite/1766843824000-migration.d.ts.map +1 -0
  119. package/dist/migrations/sqlite/1766843824000-migration.js +109 -0
  120. package/dist/tsconfig.tsbuildinfo +1 -0
  121. package/dist/types.d.ts +6 -0
  122. package/dist/types.d.ts.map +1 -0
  123. package/dist/types.js +7 -0
  124. package/dist/utils.d.ts +25 -0
  125. package/dist/utils.d.ts.map +1 -0
  126. package/dist/utils.js +29 -0
  127. package/package.json +50 -0
@@ -0,0 +1,150 @@
1
+ import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
2
+ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
3
+ import { DataSource, SelectQueryBuilder } from '@rosen-bridge/extended-typeorm';
4
+ import { BlockInfo, Transaction } from '@rosen-bridge/scanner-interfaces';
5
+ import { V1 } from '@rosen-clients/ergo-explorer';
6
+ import PermitAction from '../actions/permitAction';
7
+ import PermitEntity from '../entities/permitEntity';
8
+ import { ExtractedPermit } from '../interfaces/extractedPermit';
9
+ declare class PermitExtractor extends AbstractExtractor<Transaction, PermitEntity> {
10
+ readonly logger: AbstractLogger;
11
+ id: string;
12
+ private readonly dataSource;
13
+ readonly actions: PermitAction;
14
+ private readonly permitErgoTree;
15
+ private readonly RWT;
16
+ readonly explorerApi: {
17
+ v0: {
18
+ getApiV0AddressesP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v0/types").GetApiV0AddressesP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").AddressInfo>;
19
+ getApiV0AddressesP1Transactions: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v0/types").GetApiV0AddressesP1TransactionsParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").ItemsTransactionInfo>;
20
+ getApiV0AddressesAssetholdersP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v0/types").GetApiV0AddressesAssetholdersP1Params) => Promise<string[]>;
21
+ getApiV0AddressesBalances: (params?: import("@rosen-clients/ergo-explorer/dist/v0/types").GetApiV0AddressesBalancesParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").ItemsBalanceInfo>;
22
+ getApiV0AssetsIssuingboxes: (params?: import("@rosen-clients/ergo-explorer/dist/v0/types").GetApiV0AssetsIssuingboxesParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").ItemsOutputInfo>;
23
+ getApiV0AssetsP1Issuingbox: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").OutputInfo[]>;
24
+ getApiV0Blocks: (params?: import("@rosen-clients/ergo-explorer/dist/v0/types").GetApiV0BlocksParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").ItemsBlockInfo>;
25
+ getApiV0BlocksP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").BlockSummary>;
26
+ getApiV0BlocksAtP1: (p1: number) => Promise<string[]>;
27
+ getApiV0DexTokensP1Unspentsellorders: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v0/types").GetApiV0DexTokensP1UnspentsellordersParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").DexSellOrderInfo[]>;
28
+ getApiV0DexTokensP1Unspentbuyorders: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v0/types").GetApiV0DexTokensP1UnspentbuyordersParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").DexBuyOrderInfo[]>;
29
+ getApiV0TransactionsP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").TransactionSummary>;
30
+ getApiV0TransactionsUnconfirmedP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").UTransactionSummary>;
31
+ getApiV0TransactionsUnconfirmedByaddressP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v0/types").GetApiV0TransactionsUnconfirmedByaddressP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").ItemsUTransactionInfo>;
32
+ getApiV0TransactionsUnconfirmed: (params?: import("@rosen-clients/ergo-explorer/dist/v0/types").GetApiV0TransactionsUnconfirmedParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").ItemsUTransactionInfo>;
33
+ getApiV0TransactionsSinceP1: (p1: number, params?: import("@rosen-clients/ergo-explorer/dist/v0/types").GetApiV0TransactionsSinceP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").TransactionInfo[]>;
34
+ postApiV0TransactionsSend: (postApiV0TransactionsSendBody: import("@rosen-clients/ergo-explorer/dist/v0/types").PostApiV0TransactionsSendBody) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").TxIdResponse>;
35
+ getApiV0TransactionsBoxesP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").OutputInfo>;
36
+ getApiV0TransactionsBoxesByergotreeP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").OutputInfo[]>;
37
+ getApiV0TransactionsBoxesByergotreeUnspentP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").OutputInfo[]>;
38
+ getApiV0TransactionsBoxesByaddressP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").OutputInfo[]>;
39
+ getApiV0TransactionsBoxesByaddressUnspentP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").OutputInfo[]>;
40
+ getApiV0Info: () => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").BlockChainInfo>;
41
+ getApiV0InfoSupply: () => Promise<string>;
42
+ getApiV0Stats: () => Promise<import("@rosen-clients/ergo-explorer/dist/v0/types").StatsSummary>;
43
+ getApiV0DocsOpenapi: () => Promise<string>;
44
+ };
45
+ v1: {
46
+ getApiV1TransactionsP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").TransactionInfo>;
47
+ getApiV1TransactionsByinputsscripttemplatehashP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1TransactionsByinputsscripttemplatehashP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsTransactionInfo>;
48
+ getApiV1TransactionsByglobalindexStream: (params: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1TransactionsByglobalindexStreamParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ListTransactionInfo>;
49
+ getApiV1BoxesUnspentBylastepochsStream: (params: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesUnspentBylastepochsStreamParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ListOutputInfo>;
50
+ getApiV1BoxesUnspentByglobalindexStream: (params: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesUnspentByglobalindexStreamParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ListOutputInfo>;
51
+ getApiV1BoxesUnspentStream: (params: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesUnspentStreamParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ListOutputInfo>;
52
+ getApiV1BoxesByergotreetemplatehashP1Stream: (p1: string, params: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesByergotreetemplatehashP1StreamParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ListOutputInfo>;
53
+ getApiV1BoxesUnspentByergotreetemplatehashP1Stream: (p1: string, params: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesUnspentByergotreetemplatehashP1StreamParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ListOutputInfo>;
54
+ getApiV1BoxesUnspentBytokenidP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesUnspentBytokenidP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsOutputInfo>;
55
+ getApiV1BoxesBytokenidP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesBytokenidP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsOutputInfo>;
56
+ getApiV1BoxesP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").OutputInfo>;
57
+ getApiV1BoxesByergotreeP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesByergotreeP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsOutputInfo>;
58
+ getApiV1BoxesByergotreetemplatehashP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesByergotreetemplatehashP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsOutputInfo>;
59
+ getApiV1BoxesUnspentByergotreeP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesUnspentByergotreeP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsOutputInfo>;
60
+ getApiV1BoxesUnspentByergotreetemplatehashP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesUnspentByergotreetemplatehashP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsOutputInfo>;
61
+ getApiV1BoxesByaddressP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesByaddressP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsOutputInfo>;
62
+ getApiV1BoxesUnspentUnconfirmedByaddressP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesUnspentUnconfirmedByaddressP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").MOutputInfo[]>;
63
+ getApiV1BoxesUnspentByaddressP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesUnspentByaddressP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsOutputInfo>;
64
+ getApiV1BoxesByglobalindexStream: (params: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BoxesByglobalindexStreamParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ListOutputInfo>;
65
+ postApiV1BoxesUnspentSearchUnion: (boxAssetsQuery: import("@rosen-clients/ergo-explorer/dist/v1/types").BoxAssetsQuery, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").PostApiV1BoxesUnspentSearchUnionParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsOutputInfo>;
66
+ postApiV1BoxesUnspentSearch: (boxQuery: import("@rosen-clients/ergo-explorer/dist/v1/types").BoxQuery, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").PostApiV1BoxesUnspentSearchParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsOutputInfo>;
67
+ postApiV1BoxesSearch: (boxQuery: import("@rosen-clients/ergo-explorer/dist/v1/types").BoxQuery, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").PostApiV1BoxesSearchParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsOutputInfo>;
68
+ getApiV1Tokens: (params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1TokensParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsTokenInfo>;
69
+ getApiV1TokensSearch: (params: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1TokensSearchParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsTokenInfo>;
70
+ getApiV1TokensBysymbolP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").TokenInfo[]>;
71
+ getApiV1TokensP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").TokenInfo>;
72
+ getApiV1Assets: (params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1AssetsParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsTokenInfo>;
73
+ getApiV1AssetsSearchBytokenid: (params: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1AssetsSearchBytokenidParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsAssetInfo>;
74
+ getApiV1EpochsParams: () => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").EpochInfo>;
75
+ getApiV1AddressesP1Transactions: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1AddressesP1TransactionsParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsTransactionInfo>;
76
+ getApiV1AddressesP1BalanceConfirmed: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1AddressesP1BalanceConfirmedParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").Balance>;
77
+ getApiV1AddressesP1BalanceTotal: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").TotalBalance>;
78
+ getApiV1Blocks: (params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BlocksParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsBlockInfo>;
79
+ getApiV1BlocksP1: (p1: string) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").BlockSummary>;
80
+ getApiV1BlocksHeaders: (params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BlocksHeadersParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsBlockHeader>;
81
+ getApiV1BlocksByglobalindexStream: (params: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BlocksByglobalindexStreamParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ListBlockInfo>;
82
+ getApiV1BlocksStreamSummary: (params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1BlocksStreamSummaryParams) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ListBlockSummaryV1>;
83
+ postApiV1MempoolTransactionsSubmit: (postApiV1MempoolTransactionsSubmitBody: import("@rosen-clients/ergo-explorer/dist/v1/types").PostApiV1MempoolTransactionsSubmitBody) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").TxIdResponse>;
84
+ getApiV1MempoolTransactionsByaddressP1: (p1: string, params?: import("@rosen-clients/ergo-explorer/dist/v1/types").GetApiV1MempoolTransactionsByaddressP1Params) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ItemsUTransactionInfo>;
85
+ getApiV1MempoolBoxesUnspent: () => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ListOutputInfo>;
86
+ getApiV1Info: () => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").NetworkState>;
87
+ getApiV1Networkstate: () => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").NetworkState>;
88
+ getApiV1Networkstats: () => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").NetworkStats>;
89
+ postApiV1ErgotreeConvert: (ergoTreeConversionRequest: import("@rosen-clients/ergo-explorer/dist/v1/types").ErgoTreeConversionRequest) => Promise<import("@rosen-clients/ergo-explorer/dist/v1/types").ErgoTreeHuman>;
90
+ };
91
+ };
92
+ constructor(id: string, dataSource: DataSource, address: string, RWT: string, explorerUrl: string, logger?: AbstractLogger);
93
+ getId: () => string;
94
+ /**
95
+ * gets block id and transactions corresponding to the block and saves if they are valid rosen
96
+ * transactions and in case of success return true and in case of failure returns false
97
+ * @param block
98
+ * @param txs
99
+ */
100
+ processTransactions: (txs: Array<Transaction>, block: BlockInfo) => Promise<boolean>;
101
+ forkBlock: (hash: string) => Promise<void>;
102
+ /**
103
+ * Initializes the database with older permits related to the address
104
+ */
105
+ initializeData: (initialBlock: BlockInfo) => Promise<void>;
106
+ /**
107
+ * Validate all remaining permits in the database
108
+ * update the correct ones and remove the invalid ones
109
+ * @param unchangedStoredBoxIds
110
+ * @param initialHeight
111
+ */
112
+ validateOldStoredPermits: (unchangedStoredBoxIds: Array<string>, initialHeight: number) => Promise<void>;
113
+ /**
114
+ * Return extracted permit from a box
115
+ * @param boxId
116
+ */
117
+ getPermitWithBoxId: (boxId: string) => Promise<ExtractedPermit | undefined>;
118
+ /**
119
+ * Return all unspent permits
120
+ * @param initialHeight
121
+ * @returns
122
+ */
123
+ getAllUnspentPermits: (initialHeight: number) => Promise<Array<ExtractedPermit>>;
124
+ /**
125
+ * Returns block information of tx
126
+ * @param txId
127
+ */
128
+ getTxBlock: (txId: string) => Promise<{
129
+ id: string;
130
+ height: number;
131
+ }>;
132
+ /**
133
+ * Extract permit data from json boxes
134
+ * and filter to fit in a specified height range
135
+ * @param boxes
136
+ * @param toHeight
137
+ * @param heightDifference
138
+ * @returns extracted permit
139
+ */
140
+ extractPermitData: (boxes: Array<V1.OutputInfo>) => Promise<ExtractedPermit[]>;
141
+ /**
142
+ * Builds a query that returns used blocks by selecting the `block` column from the `PermitEntity` repository,
143
+ * filtered by the provided `extractorId`
144
+ *
145
+ * @returns A query builder selecting used blocks
146
+ */
147
+ createUsedBlocksQuery: () => SelectQueryBuilder<PermitEntity>;
148
+ }
149
+ export default PermitExtractor;
150
+ //# sourceMappingURL=permitExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permitExtractor.d.ts","sourceRoot":"","sources":["../../lib/extractor/permitExtractor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAkC,EAAE,EAAE,EAAE,MAAM,8BAA8B,CAAC;AAE7E,OAAO,YAAY,MAAM,yBAAyB,CAAC;AAEnD,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGhE,cAAM,eAAgB,SAAQ,iBAAiB,CAAC,WAAW,EAAE,YAAY,CAAC;IACxE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,QAAQ,CAAC,WAAW;;oDAtBqB,CAAC;gEAIJ,CAAC;gEAEmB,CAAC;8CAG5B,CAAC;+CAGF,CAAA;;mCAMO,CAAC;;;qEAepC,CAAF;oEAMI,CAAC;;;2EAY0C,CAAC;oDAO/B,CAAC;4DAKL,CAAC;;;;;;;;;;;;;;iFAiCJ,CADL;;;;;;;gEA4CyB,CAAC;yDAIzB,CAAH;;0DAI+D,CAAC;sEAIL,CAAC;iEAMvD,CAAC;6EAGiD,CAAC;yDAOrD,CAAC;2EAM6B,CAAC;gEAI7B,CAAR;;0IAmBA,CAJC;yHAQqB,CAAC;kHAInB,CAAA;mCASY,CAAC;;;;mCAYO,CAAC;;;gEASL,CAAC;oEAUgB,CAAC;;mCAUD,CAAC;;0CAOD,CAAC;;gDAQ9B,CAAN;;uEAUM,CAAL;;;;;;;MAjQkB;gBAGnB,EAAE,EAAE,MAAM,EACV,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,cAAc;IAiBzB,KAAK,eAAiB;IAEtB;;;;;OAKG;IACH,mBAAmB,GACjB,KAAK,KAAK,CAAC,WAAW,CAAC,EACvB,OAAO,SAAS,KACf,OAAO,CAAC,OAAO,CAAC,CAoEjB;IAEF,SAAS,GAAU,MAAM,MAAM,mBAE7B;IAEF;;OAEG;IACH,cAAc,GAAU,cAAc,SAAS,mBA0B7C;IAEF;;;;;OAKG;IACH,wBAAwB,GACtB,uBAAuB,KAAK,CAAC,MAAM,CAAC,EACpC,eAAe,MAAM,mBAmBrB;IAEF;;;OAGG;IACH,kBAAkB,GAChB,OAAO,MAAM,KACZ,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAQrC;IAEF;;;;OAIG;IACH,oBAAoB,GAClB,eAAe,MAAM,KACpB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAuBhC;IAEF;;;OAGG;IACH,UAAU,GAAU,MAAM,MAAM;;;OAM9B;IAEF;;;;;;;OAOG;IACH,iBAAiB,GAAU,OAAO,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,gCA4BpD;IAEF;;;;;OAKG;IACH,qBAAqB,QAAO,kBAAkB,CAAC,YAAY,CAAC,CACT;CACpD;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,235 @@
1
+ import { Buffer } from 'buffer';
2
+ import * as wasm from 'ergo-lib-wasm-nodejs';
3
+ import * as ergoLib from 'ergo-lib-wasm-nodejs';
4
+ import { difference } from 'lodash-es';
5
+ import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
6
+ import { DummyLogger } from '@rosen-bridge/abstract-logger';
7
+ import ergoExplorerClientFactory from '@rosen-clients/ergo-explorer';
8
+ import PermitAction from '../actions/permitAction';
9
+ import { DefaultApiLimit } from '../constants';
10
+ import { JsonBI } from '../utils';
11
+ class PermitExtractor extends AbstractExtractor {
12
+ logger;
13
+ id;
14
+ dataSource;
15
+ actions;
16
+ permitErgoTree;
17
+ RWT;
18
+ explorerApi;
19
+ constructor(id, dataSource, address, RWT, explorerUrl, logger) {
20
+ super();
21
+ this.id = id;
22
+ this.dataSource = dataSource;
23
+ this.permitErgoTree = wasm.Address.from_base58(address)
24
+ .to_ergo_tree()
25
+ .to_base16_bytes();
26
+ this.RWT = RWT;
27
+ this.logger = logger ? logger : new DummyLogger();
28
+ this.actions = new PermitAction(dataSource, this.logger.child('PermitAction'));
29
+ this.explorerApi = ergoExplorerClientFactory(explorerUrl);
30
+ }
31
+ getId = () => this.id;
32
+ /**
33
+ * gets block id and transactions corresponding to the block and saves if they are valid rosen
34
+ * transactions and in case of success return true and in case of failure returns false
35
+ * @param block
36
+ * @param txs
37
+ */
38
+ processTransactions = (txs, block) => {
39
+ return new Promise((resolve, reject) => {
40
+ try {
41
+ const boxes = [];
42
+ const spendIds = [];
43
+ txs.forEach((transaction) => {
44
+ for (const output of transaction.outputs) {
45
+ try {
46
+ if (output.additionalRegisters &&
47
+ output.additionalRegisters.R4 &&
48
+ output.assets &&
49
+ output.assets.length > 0 &&
50
+ output.assets[0].tokenId === this.RWT &&
51
+ output.ergoTree === this.permitErgoTree) {
52
+ const boxOutput = wasm.ErgoBox.from_json(JsonBI.stringify(output));
53
+ const r4 = boxOutput.register_value(wasm.NonMandatoryRegisterId.R4);
54
+ if (r4) {
55
+ const R4Serialized = r4.to_byte_array();
56
+ if (R4Serialized.length >= 1) {
57
+ boxes.push({
58
+ boxId: output.boxId,
59
+ boxSerialized: Buffer.from(boxOutput.sigma_serialize_bytes()).toString('base64'),
60
+ WID: Buffer.from(R4Serialized).toString('hex'),
61
+ txId: output.transactionId,
62
+ });
63
+ }
64
+ }
65
+ }
66
+ }
67
+ catch {
68
+ // empty
69
+ }
70
+ }
71
+ // process inputs
72
+ for (const input of transaction.inputs) {
73
+ spendIds.push(input.boxId);
74
+ }
75
+ });
76
+ this.actions
77
+ .storePermits(boxes, block, this.getId())
78
+ .then(() => {
79
+ this.actions
80
+ .spendPermits(spendIds, block, this.getId())
81
+ .then(() => {
82
+ resolve(true);
83
+ });
84
+ })
85
+ .catch((e) => {
86
+ this.logger.error(`Error in storing permits of the block ${block}: ${e}`);
87
+ reject(e);
88
+ });
89
+ }
90
+ catch (e) {
91
+ this.logger.error(`block ${block} doesn't save in the database with error: ${e}`);
92
+ reject(e);
93
+ }
94
+ });
95
+ };
96
+ forkBlock = async (hash) => {
97
+ await this.actions.deleteBlock(hash, this.getId());
98
+ };
99
+ /**
100
+ * Initializes the database with older permits related to the address
101
+ */
102
+ initializeData = async (initialBlock) => {
103
+ let allStoredBoxIds = await this.actions.getAllPermitBoxIds(this.getId());
104
+ // Extract unspent permits
105
+ const unspentPermits = await this.getAllUnspentPermits(initialBlock.height);
106
+ const unspentBoxIds = unspentPermits.map((box) => box.boxId);
107
+ // Storing extracted permits
108
+ for (const permit of unspentPermits) {
109
+ if (allStoredBoxIds.includes(permit.boxId)) {
110
+ await this.actions.updatePermit(permit, this.getId());
111
+ this.logger.info(`Updated the existing unspent permit with boxId, [${permit.boxId}]`);
112
+ this.logger.debug(`Updated permit [${JSON.stringify(permit)}]`);
113
+ }
114
+ else {
115
+ await this.actions.insertPermit(permit, this.getId());
116
+ this.logger.info(`Inserted new unspent permit with boxId, [${permit.boxId}]`);
117
+ this.logger.debug(`Inserted permit [${JSON.stringify(permit)}]`);
118
+ }
119
+ }
120
+ // Remove updated permits from existing permits in database
121
+ allStoredBoxIds = difference(allStoredBoxIds, unspentBoxIds);
122
+ // Validating remained permits
123
+ // TODO: Fix validation process
124
+ // await this.validateOldStoredPermits(allStoredBoxIds, initialHeight);
125
+ };
126
+ /**
127
+ * Validate all remaining permits in the database
128
+ * update the correct ones and remove the invalid ones
129
+ * @param unchangedStoredBoxIds
130
+ * @param initialHeight
131
+ */
132
+ validateOldStoredPermits = async (unchangedStoredBoxIds, initialHeight) => {
133
+ for (const boxId of unchangedStoredBoxIds) {
134
+ const permit = await this.getPermitWithBoxId(boxId);
135
+ if (permit && permit.spendBlock && permit.spendHeight) {
136
+ if (permit.spendHeight < initialHeight)
137
+ await this.actions.updateSpendBlock(boxId, this.getId(), permit.spendBlock, permit.spendHeight);
138
+ }
139
+ else {
140
+ await this.actions.removePermit(boxId, this.getId());
141
+ this.logger.info(`Removed invalid box [${boxId}] in initialization validation`);
142
+ }
143
+ }
144
+ };
145
+ /**
146
+ * Return extracted permit from a box
147
+ * @param boxId
148
+ */
149
+ getPermitWithBoxId = async (boxId) => {
150
+ try {
151
+ const box = await this.explorerApi.v1.getApiV1BoxesP1(boxId);
152
+ return (await this.extractPermitData([box]))[0];
153
+ }
154
+ catch {
155
+ this.logger.warn(`Permit with boxId ${boxId} does not exist`);
156
+ return undefined;
157
+ }
158
+ };
159
+ /**
160
+ * Return all unspent permits
161
+ * @param initialHeight
162
+ * @returns
163
+ */
164
+ getAllUnspentPermits = async (initialHeight) => {
165
+ let extractedBoxes = [];
166
+ let offset = 0, total = DefaultApiLimit;
167
+ while (offset < total) {
168
+ const boxes = await this.explorerApi.v1.getApiV1BoxesUnspentByergotreeP1(this.permitErgoTree, { offset: offset, limit: DefaultApiLimit });
169
+ if (!boxes.items) {
170
+ this.logger.warn('Explorer api output items should not be undefined.');
171
+ throw new Error('Incorrect explorer api output');
172
+ }
173
+ const filteredBoxes = await this.extractPermitData(boxes.items.filter((box) => box.creationHeight && box.creationHeight < initialHeight));
174
+ extractedBoxes = [...extractedBoxes, ...filteredBoxes];
175
+ total = boxes.total;
176
+ offset += DefaultApiLimit;
177
+ }
178
+ return extractedBoxes;
179
+ };
180
+ /**
181
+ * Returns block information of tx
182
+ * @param txId
183
+ */
184
+ getTxBlock = async (txId) => {
185
+ const tx = await this.explorerApi.v1.getApiV1TransactionsP1(txId);
186
+ return {
187
+ id: tx.blockId,
188
+ height: tx.inclusionHeight,
189
+ };
190
+ };
191
+ /**
192
+ * Extract permit data from json boxes
193
+ * and filter to fit in a specified height range
194
+ * @param boxes
195
+ * @param toHeight
196
+ * @param heightDifference
197
+ * @returns extracted permit
198
+ */
199
+ extractPermitData = async (boxes) => {
200
+ const extractedBoxes = [];
201
+ for (const boxJson of boxes) {
202
+ const box = ergoLib.ErgoBox.from_json(JsonBI.stringify(boxJson));
203
+ const r4 = box.register_value(4);
204
+ if (r4) {
205
+ const R4Serialized = r4.to_byte_array();
206
+ let spendBlock, spendHeight;
207
+ if (boxJson.spentTransactionId) {
208
+ const block = await this.getTxBlock(boxJson.spentTransactionId);
209
+ spendBlock = block.id;
210
+ spendHeight = block.height;
211
+ }
212
+ extractedBoxes.push({
213
+ boxId: box.box_id().to_str(),
214
+ boxSerialized: Buffer.from(box.sigma_serialize_bytes()).toString('base64'),
215
+ block: boxJson.blockId,
216
+ height: boxJson.settlementHeight,
217
+ WID: Buffer.from(R4Serialized).toString('hex'),
218
+ txId: box.tx_id().to_str(),
219
+ spendBlock: spendBlock,
220
+ spendHeight: spendHeight,
221
+ });
222
+ }
223
+ }
224
+ return extractedBoxes;
225
+ };
226
+ /**
227
+ * Builds a query that returns used blocks by selecting the `block` column from the `PermitEntity` repository,
228
+ * filtered by the provided `extractorId`
229
+ *
230
+ * @returns A query builder selecting used blocks
231
+ */
232
+ createUsedBlocksQuery = () => this.actions.createUsedBlocksQuery(this.getId());
233
+ }
234
+ export default PermitExtractor;
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWl0RXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2V4dHJhY3Rvci9wZXJtaXRFeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEtBQUssSUFBSSxNQUFNLHNCQUFzQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxPQUFPLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV2QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzVFLE9BQU8seUJBQWlDLE1BQU0sOEJBQThCLENBQUM7QUFFN0UsT0FBTyxZQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUcvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWxDLE1BQU0sZUFBZ0IsU0FBUSxpQkFBNEM7SUFDL0QsTUFBTSxDQUFpQjtJQUNoQyxFQUFFLENBQVM7SUFDTSxVQUFVLENBQWE7SUFDL0IsT0FBTyxDQUFlO0lBQ2QsY0FBYyxDQUFTO0lBQ3ZCLEdBQUcsQ0FBUztJQUNwQixXQUFXLENBQUM7SUFFckIsWUFDRSxFQUFVLEVBQ1YsVUFBc0IsRUFDdEIsT0FBZSxFQUNmLEdBQVcsRUFDWCxXQUFtQixFQUNuQixNQUF1QjtRQUV2QixLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7YUFD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QUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQzlELFFBQVEsQ0FDVDtvQkFDRCxLQUFLLEVBQUUsT0FBTyxDQUFDLE9BQU87b0JBQ3RCLE1BQU0sRUFBRSxPQUFPLENBQUMsZ0JBQWdCO29CQUNoQyxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUM5QyxJQUFJLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sRUFBRTtvQkFDMUIsVUFBVSxFQUFFLFVBQVU7b0JBQ3RCLFdBQVcsRUFBRSxXQUFXO2lCQUN6QixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUMsQ0FBQztJQUVGOzs7OztPQUtHO0lBQ0gscUJBQXFCLEdBQUcsR0FBcUMsRUFBRSxDQUM3RCxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0NBQ3BEO0FBRUQsZUFBZSxlQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0ICogYXMgd2FzbSBmcm9tICdlcmdvLWxpYi13YXNtLW5vZGVqcyc7XG5pbXBvcnQgKiBhcyBlcmdvTGliIGZyb20gJ2VyZ28tbGliLXdhc20tbm9kZWpzJztcbmltcG9ydCB7IGRpZmZlcmVuY2UgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEV4dHJhY3RvciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtZXh0cmFjdG9yJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyLCBEdW1teUxvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCB7IERhdGFTb3VyY2UsIFNlbGVjdFF1ZXJ5QnVpbGRlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBCbG9ja0luZm8sIFRyYW5zYWN0aW9uIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuaW1wb3J0IGVyZ29FeHBsb3JlckNsaWVudEZhY3RvcnksIHsgVjEgfSBmcm9tICdAcm9zZW4tY2xpZW50cy9lcmdvLWV4cGxvcmVyJztcblxuaW1wb3J0IFBlcm1pdEFjdGlvbiBmcm9tICcuLi9hY3Rpb25zL3Blcm1pdEFjdGlvbic7XG5pbXBvcnQgeyBEZWZhdWx0QXBpTGltaXQgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IFBlcm1pdEVudGl0eSBmcm9tICcuLi9lbnRpdGllcy9wZXJtaXRFbnRpdHknO1xuaW1wb3J0IHsgRXh0cmFjdGVkUGVybWl0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9leHRyYWN0ZWRQZXJtaXQnO1xuaW1wb3J0IHsgSnNvbkJJIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jbGFzcyBQZXJtaXRFeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdEV4dHJhY3RvcjxUcmFuc2FjdGlvbiwgUGVybWl0RW50aXR5PiB7XG4gIHJlYWRvbmx5IGxvZ2dlcjogQWJzdHJhY3RMb2dnZXI7XG4gIGlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YVNvdXJjZTogRGF0YVNvdXJjZTtcbiAgcmVhZG9ubHkgYWN0aW9uczogUGVybWl0QWN0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcm1pdEVyZ29UcmVlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgUldUOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4cGxvcmVyQXBpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICBhZGRyZXNzOiBzdHJpbmcsXG4gICAgUldUOiBzdHJpbmcsXG4gICAgZXhwbG9yZXJVcmw6IHN0cmluZyxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcixcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB0aGlzLnBlcm1pdEVyZ29UcmVlID0gd2FzbS5BZGRyZXNzLmZyb21fYmFzZTU4KGFkZHJlc3MpXG4gICAgICAudG9fZXJnb190cmVlKClcbiAgICAgIC50b19iYXNlMTZfYnl0ZXMoKTtcbiAgICB0aGlzLlJXVCA9IFJXVDtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlciA/IGxvZ2dlciA6IG5ldyBEdW1teUxvZ2dlcigpO1xuICAgIHRoaXMuYWN0aW9ucyA9IG5ldyBQZXJtaXRBY3Rpb24oXG4gICAgICBkYXRhU291cmNlLFxuICAgICAgdGhpcy5sb2dnZXIuY2hpbGQoJ1Blcm1pdEFjdGlvbicpLFxuICAgICk7XG4gICAgdGhpcy5leHBsb3JlckFwaSA9IGVyZ29FeHBsb3JlckNsaWVudEZhY3RvcnkoZXhwbG9yZXJVcmwpO1xuICB9XG5cbiAgZ2V0SWQgPSAoKSA9PiB0aGlzLmlkO1xuXG4gIC8qKlxuICAgKiBnZXRzIGJsb2NrIGlkIGFuZCB0cmFuc2FjdGlvbnMgY29ycmVzcG9uZGluZyB0byB0aGUgYmxvY2sgYW5kIHNhdmVzIGlmIHRoZXkgYXJlIHZhbGlkIHJvc2VuXG4gICAqICB0cmFuc2FjdGlvbnMgYW5kIGluIGNhc2Ugb2Ygc3VjY2VzcyByZXR1cm4gdHJ1ZSBhbmQgaW4gY2FzZSBvZiBmYWlsdXJlIHJldHVybnMgZmFsc2VcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSB0eHNcbiAgICovXG4gIHByb2Nlc3NUcmFuc2FjdGlvbnMgPSAoXG4gICAgdHhzOiBBcnJheTxUcmFuc2FjdGlvbj4sXG4gICAgYmxvY2s6IEJsb2NrSW5mbyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJveGVzOiBBcnJheTxFeHRyYWN0ZWRQZXJtaXQ+ID0gW107XG4gICAgICAgIGNvbnN0IHNwZW5kSWRzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgICAgIHR4cy5mb3JFYWNoKCh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3Qgb3V0cHV0IG9mIHRyYW5zYWN0aW9uLm91dHB1dHMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvdXRwdXQuYWRkaXRpb25hbFJlZ2lzdGVycyAmJlxuICAgICAgICAgICAgICAgIG91dHB1dC5hZGRpdGlvbmFsUmVnaXN0ZXJzLlI0ICYmXG4gICAgICAgICAgICAgICAgb3V0cHV0LmFzc2V0cyAmJlxuICAgICAgICAgICAgICAgIG91dHB1dC5hc3NldHMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIG91dHB1dC5hc3NldHNbMF0udG9rZW5JZCA9PT0gdGhpcy5SV1QgJiZcbiAgICAgICAgICAgICAgICBvdXRwdXQuZXJnb1RyZWUgPT09IHRoaXMucGVybWl0RXJnb1RyZWVcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYm94T3V0cHV0ID0gd2FzbS5FcmdvQm94LmZyb21fanNvbihcbiAgICAgICAgICAgICAgICAgIEpzb25CSS5zdHJpbmdpZnkob3V0cHV0KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHI0ID0gYm94T3V0cHV0LnJlZ2lzdGVyX3ZhbHVlKFxuICAgICAgICAgICAgICAgICAgd2FzbS5Ob25NYW5kYXRvcnlSZWdpc3RlcklkLlI0LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHI0KSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBSNFNlcmlhbGl6ZWQgPSByNC50b19ieXRlX2FycmF5KCk7XG4gICAgICAgICAgICAgICAgICBpZiAoUjRTZXJpYWxpemVkLmxlbmd0aCA+PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGJveGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIGJveElkOiBvdXRwdXQuYm94SWQsXG4gICAgICAgICAgICAgICAgICAgICAgYm94U2VyaWFsaXplZDogQnVmZmVyLmZyb20oXG4gICAgICAgICAgICAgICAgICAgICAgICBib3hPdXRwdXQuc2lnbWFfc2VyaWFsaXplX2J5dGVzKCksXG4gICAgICAgICAgICAgICAgICAgICAgKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICAgICAgICAgICAgICAgV0lEOiBCdWZmZXIuZnJvbShSNFNlcmlhbGl6ZWQpLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgICAgICAgICAgICAgICB0eElkOiBvdXRwdXQudHJhbnNhY3Rpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgLy8gZW1wdHlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcHJvY2VzcyBpbnB1dHNcbiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRyYW5zYWN0aW9uLmlucHV0cykge1xuICAgICAgICAgICAgc3BlbmRJZHMucHVzaChpbnB1dC5ib3hJZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFjdGlvbnNcbiAgICAgICAgICAuc3RvcmVQZXJtaXRzKGJveGVzLCBibG9jaywgdGhpcy5nZXRJZCgpKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uc1xuICAgICAgICAgICAgICAuc3BlbmRQZXJtaXRzKHNwZW5kSWRzLCBibG9jaywgdGhpcy5nZXRJZCgpKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICBgRXJyb3IgaW4gc3RvcmluZyBwZXJtaXRzIG9mIHRoZSBibG9jayAke2Jsb2NrfTogJHtlfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgICBgYmxvY2sgJHtibG9ja30gZG9lc24ndCBzYXZlIGluIHRoZSBkYXRhYmFzZSB3aXRoIGVycm9yOiAke2V9YCxcbiAgICAgICAgKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvcmtCbG9jayA9IGFzeW5jIChoYXNoOiBzdHJpbmcpID0+IHtcbiAgICBhd2FpdCB0aGlzLmFjdGlvbnMuZGVsZXRlQmxvY2soaGFzaCwgdGhpcy5nZXRJZCgpKTtcbiAgfTtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGRhdGFiYXNlIHdpdGggb2xkZXIgcGVybWl0cyByZWxhdGVkIHRvIHRoZSBhZGRyZXNzXG4gICAqL1xuICBpbml0aWFsaXplRGF0YSA9IGFzeW5jIChpbml0aWFsQmxvY2s6IEJsb2NrSW5mbykgPT4ge1xuICAgIGxldCBhbGxTdG9yZWRCb3hJZHMgPSBhd2FpdCB0aGlzLmFjdGlvbnMuZ2V0QWxsUGVybWl0Qm94SWRzKHRoaXMuZ2V0SWQoKSk7XG4gICAgLy8gRXh0cmFjdCB1bnNwZW50IHBlcm1pdHNcbiAgICBjb25zdCB1bnNwZW50UGVybWl0cyA9IGF3YWl0IHRoaXMuZ2V0QWxsVW5zcGVudFBlcm1pdHMoaW5pdGlhbEJsb2NrLmhlaWdodCk7XG4gICAgY29uc3QgdW5zcGVudEJveElkcyA9IHVuc3BlbnRQZXJtaXRzLm1hcCgoYm94KSA9PiBib3guYm94SWQpO1xuICAgIC8vIFN0b3JpbmcgZXh0cmFjdGVkIHBlcm1pdHNcbiAgICBmb3IgKGNvbnN0IHBlcm1pdCBvZiB1bnNwZW50UGVybWl0cykge1xuICAgICAgaWYgKGFsbFN0b3JlZEJveElkcy5pbmNsdWRlcyhwZXJtaXQuYm94SWQpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWN0aW9ucy51cGRhdGVQZXJtaXQocGVybWl0LCB0aGlzLmdldElkKCkpO1xuICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBVcGRhdGVkIHRoZSBleGlzdGluZyB1bnNwZW50IHBlcm1pdCB3aXRoIGJveElkLCBbJHtwZXJtaXQuYm94SWR9XWAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBVcGRhdGVkIHBlcm1pdCBbJHtKU09OLnN0cmluZ2lmeShwZXJtaXQpfV1gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWN0aW9ucy5pbnNlcnRQZXJtaXQocGVybWl0LCB0aGlzLmdldElkKCkpO1xuICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBJbnNlcnRlZCBuZXcgdW5zcGVudCBwZXJtaXQgd2l0aCBib3hJZCwgWyR7cGVybWl0LmJveElkfV1gLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgSW5zZXJ0ZWQgcGVybWl0IFske0pTT04uc3RyaW5naWZ5KHBlcm1pdCl9XWApO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdXBkYXRlZCBwZXJtaXRzIGZyb20gZXhpc3RpbmcgcGVybWl0cyBpbiBkYXRhYmFzZVxuICAgIGFsbFN0b3JlZEJveElkcyA9IGRpZmZlcmVuY2UoYWxsU3RvcmVkQm94SWRzLCB1bnNwZW50Qm94SWRzKTtcbiAgICAvLyBWYWxpZGF0aW5nIHJlbWFpbmVkIHBlcm1pdHNcbiAgICAvLyBUT0RPOiBGaXggdmFsaWRhdGlvbiBwcm9jZXNzXG4gICAgLy8gYXdhaXQgdGhpcy52YWxpZGF0ZU9sZFN0b3JlZFBlcm1pdHMoYWxsU3RvcmVkQm94SWRzLCBpbml0aWFsSGVpZ2h0KTtcbiAgfTtcblxuICAvKipcbiAgICogVmFsaWRhdGUgYWxsIHJlbWFpbmluZyBwZXJtaXRzIGluIHRoZSBkYXRhYmFzZVxuICAgKiB1cGRhdGUgdGhlIGNvcnJlY3Qgb25lcyBhbmQgcmVtb3ZlIHRoZSBpbnZhbGlkIG9uZXNcbiAgICogQHBhcmFtIHVuY2hhbmdlZFN0b3JlZEJveElkc1xuICAgKiBAcGFyYW0gaW5pdGlhbEhlaWdodFxuICAgKi9cbiAgdmFsaWRhdGVPbGRTdG9yZWRQZXJtaXRzID0gYXN5bmMgKFxuICAgIHVuY2hhbmdlZFN0b3JlZEJveElkczogQXJyYXk8c3RyaW5nPixcbiAgICBpbml0aWFsSGVpZ2h0OiBudW1iZXIsXG4gICkgPT4ge1xuICAgIGZvciAoY29uc3QgYm94SWQgb2YgdW5jaGFuZ2VkU3RvcmVkQm94SWRzKSB7XG4gICAgICBjb25zdCBwZXJtaXQgPSBhd2FpdCB0aGlzLmdldFBlcm1pdFdpdGhCb3hJZChib3hJZCk7XG4gICAgICBpZiAocGVybWl0ICYmIHBlcm1pdC5zcGVuZEJsb2NrICYmIHBlcm1pdC5zcGVuZEhlaWdodCkge1xuICAgICAgICBpZiAocGVybWl0LnNwZW5kSGVpZ2h0IDwgaW5pdGlhbEhlaWdodClcbiAgICAgICAgICBhd2FpdCB0aGlzLmFjdGlvbnMudXBkYXRlU3BlbmRCbG9jayhcbiAgICAgICAgICAgIGJveElkLFxuICAgICAgICAgICAgdGhpcy5nZXRJZCgpLFxuICAgICAgICAgICAgcGVybWl0LnNwZW5kQmxvY2ssXG4gICAgICAgICAgICBwZXJtaXQuc3BlbmRIZWlnaHQsXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYWN0aW9ucy5yZW1vdmVQZXJtaXQoYm94SWQsIHRoaXMuZ2V0SWQoKSk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgYFJlbW92ZWQgaW52YWxpZCBib3ggWyR7Ym94SWR9XSBpbiBpbml0aWFsaXphdGlvbiB2YWxpZGF0aW9uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiBleHRyYWN0ZWQgcGVybWl0IGZyb20gYSBib3hcbiAgICogQHBhcmFtIGJveElkXG4gICAqL1xuICBnZXRQZXJtaXRXaXRoQm94SWQgPSBhc3luYyAoXG4gICAgYm94SWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxFeHRyYWN0ZWRQZXJtaXQgfCB1bmRlZmluZWQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYm94ID0gYXdhaXQgdGhpcy5leHBsb3JlckFwaS52MS5nZXRBcGlWMUJveGVzUDEoYm94SWQpO1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmV4dHJhY3RQZXJtaXREYXRhKFtib3hdKSlbMF07XG4gICAgfSBjYXRjaCB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKGBQZXJtaXQgd2l0aCBib3hJZCAke2JveElkfSBkb2VzIG5vdCBleGlzdGApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgdW5zcGVudCBwZXJtaXRzXG4gICAqIEBwYXJhbSBpbml0aWFsSGVpZ2h0XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRBbGxVbnNwZW50UGVybWl0cyA9IGFzeW5jIChcbiAgICBpbml0aWFsSGVpZ2h0OiBudW1iZXIsXG4gICk6IFByb21pc2U8QXJyYXk8RXh0cmFjdGVkUGVybWl0Pj4gPT4ge1xuICAgIGxldCBleHRyYWN0ZWRCb3hlczogQXJyYXk8RXh0cmFjdGVkUGVybWl0PiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwLFxuICAgICAgdG90YWwgPSBEZWZhdWx0QXBpTGltaXQ7XG4gICAgd2hpbGUgKG9mZnNldCA8IHRvdGFsKSB7XG4gICAgICBjb25zdCBib3hlcyA9IGF3YWl0IHRoaXMuZXhwbG9yZXJBcGkudjEuZ2V0QXBpVjFCb3hlc1Vuc3BlbnRCeWVyZ290cmVlUDEoXG4gICAgICAgIHRoaXMucGVybWl0RXJnb1RyZWUsXG4gICAgICAgIHsgb2Zmc2V0OiBvZmZzZXQsIGxpbWl0OiBEZWZhdWx0QXBpTGltaXQgfSxcbiAgICAgICk7XG4gICAgICBpZiAoIWJveGVzLml0ZW1zKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0V4cGxvcmVyIGFwaSBvdXRwdXQgaXRlbXMgc2hvdWxkIG5vdCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IGV4cGxvcmVyIGFwaSBvdXRwdXQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbHRlcmVkQm94ZXMgPSBhd2FpdCB0aGlzLmV4dHJhY3RQZXJtaXREYXRhKFxuICAgICAgICBib3hlcy5pdGVtcy5maWx0ZXIoXG4gICAgICAgICAgKGJveCkgPT4gYm94LmNyZWF0aW9uSGVpZ2h0ICYmIGJveC5jcmVhdGlvbkhlaWdodCA8IGluaXRpYWxIZWlnaHQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgZXh0cmFjdGVkQm94ZXMgPSBbLi4uZXh0cmFjdGVkQm94ZXMsIC4uLmZpbHRlcmVkQm94ZXNdO1xuICAgICAgdG90YWwgPSBib3hlcy50b3RhbDtcbiAgICAgIG9mZnNldCArPSBEZWZhdWx0QXBpTGltaXQ7XG4gICAgfVxuICAgIHJldHVybiBleHRyYWN0ZWRCb3hlcztcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBibG9jayBpbmZvcm1hdGlvbiBvZiB0eFxuICAgKiBAcGFyYW0gdHhJZFxuICAgKi9cbiAgZ2V0VHhCbG9jayA9IGFzeW5jICh0eElkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHRoaXMuZXhwbG9yZXJBcGkudjEuZ2V0QXBpVjFUcmFuc2FjdGlvbnNQMSh0eElkKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHR4LmJsb2NrSWQsXG4gICAgICBoZWlnaHQ6IHR4LmluY2x1c2lvbkhlaWdodCxcbiAgICB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHBlcm1pdCBkYXRhIGZyb20ganNvbiBib3hlc1xuICAgKiBhbmQgZmlsdGVyIHRvIGZpdCBpbiBhIHNwZWNpZmllZCBoZWlnaHQgcmFuZ2VcbiAgICogQHBhcmFtIGJveGVzXG4gICAqIEBwYXJhbSB0b0hlaWdodFxuICAgKiBAcGFyYW0gaGVpZ2h0RGlmZmVyZW5jZVxuICAgKiBAcmV0dXJucyBleHRyYWN0ZWQgcGVybWl0XG4gICAqL1xuICBleHRyYWN0UGVybWl0RGF0YSA9IGFzeW5jIChib3hlczogQXJyYXk8VjEuT3V0cHV0SW5mbz4pID0+IHtcbiAgICBjb25zdCBleHRyYWN0ZWRCb3hlczogQXJyYXk8RXh0cmFjdGVkUGVybWl0PiA9IFtdO1xuICAgIGZvciAoY29uc3QgYm94SnNvbiBvZiBib3hlcykge1xuICAgICAgY29uc3QgYm94ID0gZXJnb0xpYi5FcmdvQm94LmZyb21fanNvbihKc29uQkkuc3RyaW5naWZ5KGJveEpzb24pKTtcbiAgICAgIGNvbnN0IHI0ID0gYm94LnJlZ2lzdGVyX3ZhbHVlKDQpO1xuICAgICAgaWYgKHI0KSB7XG4gICAgICAgIGNvbnN0IFI0U2VyaWFsaXplZCA9IHI0LnRvX2J5dGVfYXJyYXkoKTtcbiAgICAgICAgbGV0IHNwZW5kQmxvY2ssIHNwZW5kSGVpZ2h0O1xuICAgICAgICBpZiAoYm94SnNvbi5zcGVudFRyYW5zYWN0aW9uSWQpIHtcbiAgICAgICAgICBjb25zdCBibG9jayA9IGF3YWl0IHRoaXMuZ2V0VHhCbG9jayhib3hKc29uLnNwZW50VHJhbnNhY3Rpb25JZCk7XG4gICAgICAgICAgc3BlbmRCbG9jayA9IGJsb2NrLmlkO1xuICAgICAgICAgIHNwZW5kSGVpZ2h0ID0gYmxvY2suaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGV4dHJhY3RlZEJveGVzLnB1c2goe1xuICAgICAgICAgIGJveElkOiBib3guYm94X2lkKCkudG9fc3RyKCksXG4gICAgICAgICAgYm94U2VyaWFsaXplZDogQnVmZmVyLmZyb20oYm94LnNpZ21hX3NlcmlhbGl6ZV9ieXRlcygpKS50b1N0cmluZyhcbiAgICAgICAgICAgICdiYXNlNjQnLFxuICAgICAgICAgICksXG4gICAgICAgICAgYmxvY2s6IGJveEpzb24uYmxvY2tJZCxcbiAgICAgICAgICBoZWlnaHQ6IGJveEpzb24uc2V0dGxlbWVudEhlaWdodCxcbiAgICAgICAgICBXSUQ6IEJ1ZmZlci5mcm9tKFI0U2VyaWFsaXplZCkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICAgIHR4SWQ6IGJveC50eF9pZCgpLnRvX3N0cigpLFxuICAgICAgICAgIHNwZW5kQmxvY2s6IHNwZW5kQmxvY2ssXG4gICAgICAgICAgc3BlbmRIZWlnaHQ6IHNwZW5kSGVpZ2h0LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4dHJhY3RlZEJveGVzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBxdWVyeSB0aGF0IHJldHVybnMgdXNlZCBibG9ja3MgYnkgc2VsZWN0aW5nIHRoZSBgYmxvY2tgIGNvbHVtbiBmcm9tIHRoZSBgUGVybWl0RW50aXR5YCByZXBvc2l0b3J5LFxuICAgKiBmaWx0ZXJlZCBieSB0aGUgcHJvdmlkZWQgYGV4dHJhY3RvcklkYFxuICAgKlxuICAgKiBAcmV0dXJucyBBIHF1ZXJ5IGJ1aWxkZXIgc2VsZWN0aW5nIHVzZWQgYmxvY2tzXG4gICAqL1xuICBjcmVhdGVVc2VkQmxvY2tzUXVlcnkgPSAoKTogU2VsZWN0UXVlcnlCdWlsZGVyPFBlcm1pdEVudGl0eT4gPT5cbiAgICB0aGlzLmFjdGlvbnMuY3JlYXRlVXNlZEJsb2Nrc1F1ZXJ5KHRoaXMuZ2V0SWQoKSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBlcm1pdEV4dHJhY3RvcjtcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ import CollateralEntity from './entities/collateralEntity';
2
+ import CommitmentEntity from './entities/commitmentEntity';
3
+ import EventTriggerEntity from './entities/eventTriggerEntity';
4
+ import PermitEntity from './entities/permitEntity';
5
+ import { CollateralExtractor } from './extractor/collateralExtractor';
6
+ import CommitmentExtractor from './extractor/commitmentExtractor';
7
+ import EventTriggerExtractor from './extractor/eventTriggerExtractor';
8
+ import PermitExtractor from './extractor/permitExtractor';
9
+ export { migrations } from './migrations/index';
10
+ export { PermitExtractor, EventTriggerExtractor, CommitmentExtractor, CollateralExtractor, CommitmentEntity, EventTriggerEntity, PermitEntity, CollateralEntity, };
11
+ export * from './types';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,kBAAkB,MAAM,+BAA+B,CAAC;AAC/D,OAAO,YAAY,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,mBAAmB,MAAM,iCAAiC,CAAC;AAClE,OAAO,qBAAqB,MAAM,mCAAmC,CAAC;AACtE,OAAO,eAAe,MAAM,6BAA6B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,GACjB,CAAC;AACF,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ import CollateralEntity from './entities/collateralEntity';
2
+ import CommitmentEntity from './entities/commitmentEntity';
3
+ import EventTriggerEntity from './entities/eventTriggerEntity';
4
+ import PermitEntity from './entities/permitEntity';
5
+ import { CollateralExtractor } from './extractor/collateralExtractor';
6
+ import CommitmentExtractor from './extractor/commitmentExtractor';
7
+ import EventTriggerExtractor from './extractor/eventTriggerExtractor';
8
+ import PermitExtractor from './extractor/permitExtractor';
9
+ export { migrations } from './migrations/index';
10
+ export { PermitExtractor, EventTriggerExtractor, CommitmentExtractor, CollateralExtractor, CommitmentEntity, EventTriggerEntity, PermitEntity, CollateralEntity, };
11
+ export * from './types';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxnQkFBZ0IsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLGdCQUFnQixNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sa0JBQWtCLE1BQU0sK0JBQStCLENBQUM7QUFDL0QsT0FBTyxZQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxtQkFBbUIsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLHFCQUFxQixNQUFNLG1DQUFtQyxDQUFDO0FBQ3RFLE9BQU8sZUFBZSxNQUFNLDZCQUE2QixDQUFDO0FBRTFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixDQUFDO0FBQ0YsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29sbGF0ZXJhbEVudGl0eSBmcm9tICcuL2VudGl0aWVzL2NvbGxhdGVyYWxFbnRpdHknO1xuaW1wb3J0IENvbW1pdG1lbnRFbnRpdHkgZnJvbSAnLi9lbnRpdGllcy9jb21taXRtZW50RW50aXR5JztcbmltcG9ydCBFdmVudFRyaWdnZXJFbnRpdHkgZnJvbSAnLi9lbnRpdGllcy9ldmVudFRyaWdnZXJFbnRpdHknO1xuaW1wb3J0IFBlcm1pdEVudGl0eSBmcm9tICcuL2VudGl0aWVzL3Blcm1pdEVudGl0eSc7XG5pbXBvcnQgeyBDb2xsYXRlcmFsRXh0cmFjdG9yIH0gZnJvbSAnLi9leHRyYWN0b3IvY29sbGF0ZXJhbEV4dHJhY3Rvcic7XG5pbXBvcnQgQ29tbWl0bWVudEV4dHJhY3RvciBmcm9tICcuL2V4dHJhY3Rvci9jb21taXRtZW50RXh0cmFjdG9yJztcbmltcG9ydCBFdmVudFRyaWdnZXJFeHRyYWN0b3IgZnJvbSAnLi9leHRyYWN0b3IvZXZlbnRUcmlnZ2VyRXh0cmFjdG9yJztcbmltcG9ydCBQZXJtaXRFeHRyYWN0b3IgZnJvbSAnLi9leHRyYWN0b3IvcGVybWl0RXh0cmFjdG9yJztcblxuZXhwb3J0IHsgbWlncmF0aW9ucyB9IGZyb20gJy4vbWlncmF0aW9ucy9pbmRleCc7XG5leHBvcnQge1xuICBQZXJtaXRFeHRyYWN0b3IsXG4gIEV2ZW50VHJpZ2dlckV4dHJhY3RvcixcbiAgQ29tbWl0bWVudEV4dHJhY3RvcixcbiAgQ29sbGF0ZXJhbEV4dHJhY3RvcixcbiAgQ29tbWl0bWVudEVudGl0eSxcbiAgRXZlbnRUcmlnZ2VyRW50aXR5LFxuICBQZXJtaXRFbnRpdHksXG4gIENvbGxhdGVyYWxFbnRpdHksXG59O1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG4iXX0=
@@ -0,0 +1,9 @@
1
+ import { AbstractEntityData } from '@rosen-bridge/abstract-extractor';
2
+ export interface ExtractedCollateral extends AbstractEntityData {
3
+ txId: string;
4
+ wid: string;
5
+ rwtCount: bigint;
6
+ spendBlock?: string | null;
7
+ spendHeight?: number | null;
8
+ }
9
+ //# sourceMappingURL=extractedCollateral.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractedCollateral.d.ts","sourceRoot":"","sources":["../../lib/interfaces/extractedCollateral.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdGVkQ29sbGF0ZXJhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbnRlcmZhY2VzL2V4dHJhY3RlZENvbGxhdGVyYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0RW50aXR5RGF0YSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtZXh0cmFjdG9yJztcblxuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0ZWRDb2xsYXRlcmFsIGV4dGVuZHMgQWJzdHJhY3RFbnRpdHlEYXRhIHtcbiAgdHhJZDogc3RyaW5nO1xuICB3aWQ6IHN0cmluZztcbiAgcnd0Q291bnQ6IGJpZ2ludDtcbiAgc3BlbmRCbG9jaz86IHN0cmluZyB8IG51bGw7XG4gIHNwZW5kSGVpZ2h0PzogbnVtYmVyIHwgbnVsbDtcbn1cbiJdfQ==
@@ -0,0 +1,11 @@
1
+ interface extractedCommitment {
2
+ txId: string;
3
+ WID: string;
4
+ commitment: string;
5
+ eventId: string;
6
+ boxId: string;
7
+ boxSerialized: string;
8
+ rwtCount: string;
9
+ }
10
+ export { extractedCommitment };
11
+ //# sourceMappingURL=extractedCommitment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractedCommitment.d.ts","sourceRoot":"","sources":["../../lib/interfaces/extractedCommitment.ts"],"names":[],"mappings":"AAAA,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdGVkQ29tbWl0bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbnRlcmZhY2VzL2V4dHJhY3RlZENvbW1pdG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBleHRyYWN0ZWRDb21taXRtZW50IHtcbiAgdHhJZDogc3RyaW5nO1xuICBXSUQ6IHN0cmluZztcbiAgY29tbWl0bWVudDogc3RyaW5nO1xuICBldmVudElkOiBzdHJpbmc7XG4gIGJveElkOiBzdHJpbmc7XG4gIGJveFNlcmlhbGl6ZWQ6IHN0cmluZztcbiAgcnd0Q291bnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHsgZXh0cmFjdGVkQ29tbWl0bWVudCB9O1xuIl19
@@ -0,0 +1,22 @@
1
+ interface ExtractedEventTrigger {
2
+ eventId: string;
3
+ txId: string;
4
+ identifier: string;
5
+ serialized: string;
6
+ fromChain: string;
7
+ toChain: string;
8
+ fromAddress: string;
9
+ toAddress: string;
10
+ amount: string;
11
+ bridgeFee: string;
12
+ networkFee: string;
13
+ sourceChainTokenId: string;
14
+ targetChainTokenId: string;
15
+ sourceBlockId: string;
16
+ sourceTxId: string;
17
+ WIDsCount: number;
18
+ WIDsHash: string;
19
+ sourceChainHeight: number;
20
+ }
21
+ export { ExtractedEventTrigger };
22
+ //# sourceMappingURL=extractedEventTrigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractedEventTrigger.d.ts","sourceRoot":"","sources":["../../lib/interfaces/extractedEventTrigger.ts"],"names":[],"mappings":"AAAA,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdGVkRXZlbnRUcmlnZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2ludGVyZmFjZXMvZXh0cmFjdGVkRXZlbnRUcmlnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgRXh0cmFjdGVkRXZlbnRUcmlnZ2VyIHtcbiAgZXZlbnRJZDogc3RyaW5nO1xuICB0eElkOiBzdHJpbmc7XG4gIGlkZW50aWZpZXI6IHN0cmluZztcbiAgc2VyaWFsaXplZDogc3RyaW5nO1xuICBmcm9tQ2hhaW46IHN0cmluZztcbiAgdG9DaGFpbjogc3RyaW5nO1xuICBmcm9tQWRkcmVzczogc3RyaW5nO1xuICB0b0FkZHJlc3M6IHN0cmluZztcbiAgYW1vdW50OiBzdHJpbmc7XG4gIGJyaWRnZUZlZTogc3RyaW5nO1xuICBuZXR3b3JrRmVlOiBzdHJpbmc7XG4gIHNvdXJjZUNoYWluVG9rZW5JZDogc3RyaW5nO1xuICB0YXJnZXRDaGFpblRva2VuSWQ6IHN0cmluZztcbiAgc291cmNlQmxvY2tJZDogc3RyaW5nO1xuICBzb3VyY2VUeElkOiBzdHJpbmc7XG4gIFdJRHNDb3VudDogbnVtYmVyO1xuICBXSURzSGFzaDogc3RyaW5nO1xuICBzb3VyY2VDaGFpbkhlaWdodDogbnVtYmVyO1xufVxuXG5leHBvcnQgeyBFeHRyYWN0ZWRFdmVudFRyaWdnZXIgfTtcbiJdfQ==
@@ -0,0 +1,12 @@
1
+ interface ExtractedPermit {
2
+ boxId: string;
3
+ boxSerialized: string;
4
+ WID: string;
5
+ txId: string;
6
+ block?: string;
7
+ height?: number;
8
+ spendBlock?: string;
9
+ spendHeight?: number;
10
+ }
11
+ export { ExtractedPermit };
12
+ //# sourceMappingURL=extractedPermit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractedPermit.d.ts","sourceRoot":"","sources":["../../lib/interfaces/extractedPermit.ts"],"names":[],"mappings":"AAAA,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0cmFjdGVkUGVybWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2ludGVyZmFjZXMvZXh0cmFjdGVkUGVybWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgRXh0cmFjdGVkUGVybWl0IHtcbiAgYm94SWQ6IHN0cmluZztcbiAgYm94U2VyaWFsaXplZDogc3RyaW5nO1xuICBXSUQ6IHN0cmluZztcbiAgdHhJZDogc3RyaW5nO1xuICBibG9jaz86IHN0cmluZztcbiAgaGVpZ2h0PzogbnVtYmVyO1xuICBzcGVuZEJsb2NrPzogc3RyaW5nO1xuICBzcGVuZEhlaWdodD86IG51bWJlcjtcbn1cblxuZXhwb3J0IHsgRXh0cmFjdGVkUGVybWl0IH07XG4iXX0=
@@ -0,0 +1,25 @@
1
+ type Asset = {
2
+ tokenId: string;
3
+ index: number;
4
+ amount: bigint;
5
+ name: string;
6
+ };
7
+ export interface ErgoBoxJson {
8
+ boxId: string;
9
+ address: string;
10
+ value: bigint;
11
+ blockId: string;
12
+ settlementHeight: number;
13
+ assets: Array<Asset>;
14
+ }
15
+ export interface AddressBoxes {
16
+ items: Array<ErgoBoxJson>;
17
+ total: number;
18
+ }
19
+ export interface SpendInfo {
20
+ boxId: string;
21
+ txId: string;
22
+ index?: number;
23
+ }
24
+ export {};
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/interfaces/types.ts"],"names":[],"mappings":"AAAA,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW50ZXJmYWNlcy90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsidHlwZSBBc3NldCA9IHtcbiAgdG9rZW5JZDogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xuICBhbW91bnQ6IGJpZ2ludDtcbiAgbmFtZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBFcmdvQm94SnNvbiB7XG4gIGJveElkOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgdmFsdWU6IGJpZ2ludDtcbiAgYmxvY2tJZDogc3RyaW5nO1xuICBzZXR0bGVtZW50SGVpZ2h0OiBudW1iZXI7XG4gIGFzc2V0czogQXJyYXk8QXNzZXQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZHJlc3NCb3hlcyB7XG4gIGl0ZW1zOiBBcnJheTxFcmdvQm94SnNvbj47XG4gIHRvdGFsOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3BlbmRJbmZvIHtcbiAgYm94SWQ6IHN0cmluZztcbiAgdHhJZDogc3RyaW5nO1xuICBpbmRleD86IG51bWJlcjtcbn1cbiJdfQ==