@rosen-bridge/cardano-scanner 0.1.0-52fc0239

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,9 @@
1
+ # @rosen-bridge/cardano-scanner
2
+
3
+ ---
4
+
5
+ ## 0.1.0
6
+
7
+ - Added optional suffix support for Cardano Ogmios scanner
8
+ - This package was **extracted** from `@rosen-bridge/scanner`.
9
+ You can follow the previous history in the old package’s changelog. The last changelog update is available [here](https://github.com/rosen-bridge/scanner/blob/d4a5539b01c523b101104470b03ff7023a10b70b/packages/scanner/CHANGELOG.md).
package/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # @rosen-bridge/cardano-scanner
2
+
3
+ ## Table of contents
4
+
5
+ - [Introduction](#introduction)
6
+ - [Installation](#installation)
7
+
8
+ ## Introduction
9
+
10
+ A Cardano blockchain scanner based on blackfrost , koios and ogmios API.
11
+
12
+ ## Installation
13
+
14
+ npm:
15
+
16
+ ```sh
17
+ npm i @rosen-bridge/cardano-scanner
18
+ ```
19
+
20
+ yarn:
21
+
22
+ ```sh
23
+ yarn add @rosen-bridge/cardano-scanner
24
+ ```
25
+
26
+ ### Usage
27
+
28
+ Cardano Scanner:
29
+
30
+ ```javascript
31
+ const cardanoScannerConfig = {
32
+ koiosUrl: <koios_url>,
33
+ timeout: <api_timeout>,
34
+ initialHeight: <cardano_initial_height>,
35
+ dataSource: dataSource,
36
+ }
37
+ cardanoScanner = new CardanoKoiosScanner(cardanoScannerConfig)
38
+ ```
@@ -0,0 +1,5 @@
1
+ export declare const SLOT_SHELLY_NUMBER = 1591566291;
2
+ export declare const RECONNECTION_MAX_DELAY: number;
3
+ export declare const RECONNECTION_INITIAL_DELAY: number;
4
+ export declare const RECONNECTION_MAX_ATTEMPTS: number;
5
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../lib/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAC7C,eAAO,MAAM,sBAAsB,QAAiB,CAAC;AACrD,eAAO,MAAM,0BAA0B,QAAY,CAAC;AACpD,eAAO,MAAM,yBAAyB,QAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ export const SLOT_SHELLY_NUMBER = 1591566291;
2
+ export const RECONNECTION_MAX_DELAY = 60 * 60 * 1000; // One hour
3
+ export const RECONNECTION_INITIAL_DELAY = 30 * 1000; // 30 seconds
4
+ export const RECONNECTION_MAX_ATTEMPTS = Infinity;
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQUM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxhQUFhO0FBQ2xFLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBTTE9UX1NIRUxMWV9OVU1CRVIgPSAxNTkxNTY2MjkxO1xuZXhwb3J0IGNvbnN0IFJFQ09OTkVDVElPTl9NQVhfREVMQVkgPSA2MCAqIDYwICogMTAwMDsgLy8gT25lIGhvdXJcbmV4cG9ydCBjb25zdCBSRUNPTk5FQ1RJT05fSU5JVElBTF9ERUxBWSA9IDMwICogMTAwMDsgLy8gMzAgc2Vjb25kc1xuZXhwb3J0IGNvbnN0IFJFQ09OTkVDVElPTl9NQVhfQVRURU1QVFMgPSBJbmZpbml0eTtcbiJdfQ==
@@ -0,0 +1,10 @@
1
+ export * from './scanner/blockfrost';
2
+ export * from './interfaces/BlockFrost';
3
+ export * from './interfaces/index';
4
+ export * from './interfaces/Koios';
5
+ export * from './scanner/koios';
6
+ export * from './scanner/ogmios';
7
+ export * from './constants';
8
+ export * from './network/blockfrost';
9
+ export * from './network/koios';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export * from './scanner/blockfrost';
2
+ export * from './interfaces/BlockFrost';
3
+ export * from './interfaces/index';
4
+ export * from './interfaces/Koios';
5
+ export * from './scanner/koios';
6
+ export * from './scanner/ogmios';
7
+ export * from './constants';
8
+ export * from './network/blockfrost';
9
+ export * from './network/koios';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zY2FubmVyL2Jsb2NrZnJvc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL0Jsb2NrRnJvc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcy9Lb2lvcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjYW5uZXIva29pb3MnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2FubmVyL29nbWlvcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL25ldHdvcmsvYmxvY2tmcm9zdCc7XG5leHBvcnQgKiBmcm9tICcuL25ldHdvcmsva29pb3MnO1xuIl19
@@ -0,0 +1,9 @@
1
+ import { components } from '@blockfrost/openapi';
2
+ export declare class BlockFrostNullValueError extends Error {
3
+ constructor(msg: string);
4
+ }
5
+ export interface BlockFrostTransaction {
6
+ utxos: components['schemas']['tx_content_utxo'];
7
+ metadata: components['schemas']['tx_content_metadata'];
8
+ }
9
+ //# sourceMappingURL=BlockFrost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockFrost.d.ts","sourceRoot":"","sources":["../../lib/interfaces/BlockFrost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,GAAG,EAAE,MAAM;CAGxB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAChD,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC;CACxD"}
@@ -0,0 +1,6 @@
1
+ export class BlockFrostNullValueError extends Error {
2
+ constructor(msg) {
3
+ super('BlockFrostNullValueError: ' + msg);
4
+ }
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmxvY2tGcm9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9pbnRlcmZhY2VzL0Jsb2NrRnJvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLHdCQUF5QixTQUFRLEtBQUs7SUFDakQsWUFBWSxHQUFXO1FBQ3JCLEtBQUssQ0FBQyw0QkFBNEIsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wb25lbnRzIH0gZnJvbSAnQGJsb2NrZnJvc3Qvb3BlbmFwaSc7XG5cbmV4cG9ydCBjbGFzcyBCbG9ja0Zyb3N0TnVsbFZhbHVlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1zZzogc3RyaW5nKSB7XG4gICAgc3VwZXIoJ0Jsb2NrRnJvc3ROdWxsVmFsdWVFcnJvcjogJyArIG1zZyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCbG9ja0Zyb3N0VHJhbnNhY3Rpb24ge1xuICB1dHhvczogY29tcG9uZW50c1snc2NoZW1hcyddWyd0eF9jb250ZW50X3V0eG8nXTtcbiAgbWV0YWRhdGE6IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsndHhfY29udGVudF9tZXRhZGF0YSddO1xufVxuIl19
@@ -0,0 +1,25 @@
1
+ import { TransactionJSON } from '@emurgo/cardano-serialization-lib-nodejs';
2
+ interface KoiosBlock {
3
+ hash: string;
4
+ block_height: number;
5
+ block_time: number;
6
+ tx_count: number;
7
+ }
8
+ interface KoiosBlockInfo {
9
+ hash: string;
10
+ block_height: number;
11
+ parent_hash: string;
12
+ child_hash?: string;
13
+ }
14
+ interface KoiosCborTx {
15
+ tx_hash: string;
16
+ block_hash: string;
17
+ block_height: number;
18
+ epoch_no: number;
19
+ absolute_slot: number;
20
+ tx_timestamp: number;
21
+ cbor: string;
22
+ }
23
+ type KoiosTransaction = KoiosCborTx & TransactionJSON;
24
+ export { KoiosBlock, KoiosBlockInfo, KoiosTransaction, KoiosCborTx };
25
+ //# sourceMappingURL=Koios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Koios.d.ts","sourceRoot":"","sources":["../../lib/interfaces/Koios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,WAAW;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,KAAK,gBAAgB,GAAG,WAAW,GAAG,eAAe,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiS29pb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW50ZXJmYWNlcy9Lb2lvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb25KU09OIH0gZnJvbSAnQGVtdXJnby9jYXJkYW5vLXNlcmlhbGl6YXRpb24tbGliLW5vZGVqcyc7XG5cbmludGVyZmFjZSBLb2lvc0Jsb2NrIHtcbiAgaGFzaDogc3RyaW5nO1xuICBibG9ja19oZWlnaHQ6IG51bWJlcjtcbiAgYmxvY2tfdGltZTogbnVtYmVyO1xuICB0eF9jb3VudDogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgS29pb3NCbG9ja0luZm8ge1xuICBoYXNoOiBzdHJpbmc7XG4gIGJsb2NrX2hlaWdodDogbnVtYmVyO1xuICBwYXJlbnRfaGFzaDogc3RyaW5nO1xuICBjaGlsZF9oYXNoPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgS29pb3NDYm9yVHgge1xuICB0eF9oYXNoOiBzdHJpbmc7XG4gIGJsb2NrX2hhc2g6IHN0cmluZztcbiAgYmxvY2tfaGVpZ2h0OiBudW1iZXI7XG4gIGVwb2NoX25vOiBudW1iZXI7XG4gIGFic29sdXRlX3Nsb3Q6IG51bWJlcjtcbiAgdHhfdGltZXN0YW1wOiBudW1iZXI7XG4gIGNib3I6IHN0cmluZztcbn1cblxudHlwZSBLb2lvc1RyYW5zYWN0aW9uID0gS29pb3NDYm9yVHggJiBUcmFuc2FjdGlvbkpTT047XG5cbmV4cG9ydCB7IEtvaW9zQmxvY2ssIEtvaW9zQmxvY2tJbmZvLCBLb2lvc1RyYW5zYWN0aW9uLCBLb2lvc0Nib3JUeCB9O1xuIl19
@@ -0,0 +1,19 @@
1
+ import { DataSource } from '@rosen-bridge/extended-typeorm';
2
+ interface OgmiosReconnectionConfig {
3
+ initialDelay?: number;
4
+ maxDelay?: number;
5
+ maxAttempts?: number;
6
+ }
7
+ interface CardanoOgmiosConfig {
8
+ nodeHostOrIp: string;
9
+ nodePort: number;
10
+ initialSlot: number;
11
+ initialHash: string;
12
+ maxTryBlock?: number;
13
+ dataSource: DataSource;
14
+ useTls?: boolean;
15
+ reconnectionConfig?: OgmiosReconnectionConfig;
16
+ suffix?: string;
17
+ }
18
+ export { OgmiosReconnectionConfig, CardanoOgmiosConfig };
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/interfaces/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,UAAU,wBAAwB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,mBAAmB;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvaW50ZXJmYWNlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5cbmludGVyZmFjZSBPZ21pb3NSZWNvbm5lY3Rpb25Db25maWcge1xuICBpbml0aWFsRGVsYXk/OiBudW1iZXI7XG4gIG1heERlbGF5PzogbnVtYmVyO1xuICBtYXhBdHRlbXB0cz86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIENhcmRhbm9PZ21pb3NDb25maWcge1xuICBub2RlSG9zdE9ySXA6IHN0cmluZztcbiAgbm9kZVBvcnQ6IG51bWJlcjtcbiAgaW5pdGlhbFNsb3Q6IG51bWJlcjtcbiAgaW5pdGlhbEhhc2g6IHN0cmluZztcbiAgbWF4VHJ5QmxvY2s/OiBudW1iZXI7XG4gIGRhdGFTb3VyY2U6IERhdGFTb3VyY2U7XG4gIHVzZVRscz86IGJvb2xlYW47XG4gIHJlY29ubmVjdGlvbkNvbmZpZz86IE9nbWlvc1JlY29ubmVjdGlvbkNvbmZpZztcbiAgc3VmZml4Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgeyBPZ21pb3NSZWNvbm5lY3Rpb25Db25maWcsIENhcmRhbm9PZ21pb3NDb25maWcgfTtcbiJdfQ==
@@ -0,0 +1,26 @@
1
+ import { AbstractNetworkConnector, Block } from '@rosen-bridge/scanner-interfaces';
2
+ import { BlockFrostTransaction } from '../interfaces/BlockFrost';
3
+ export declare class BlockFrostNetwork extends AbstractNetworkConnector<BlockFrostTransaction> {
4
+ private client;
5
+ constructor(projectId: string, url?: string);
6
+ /**
7
+ * get block header from height
8
+ * @param height
9
+ */
10
+ getBlockAtHeight: (height: number) => Promise<Block>;
11
+ /**
12
+ * get current height for blockchain
13
+ */
14
+ getCurrentHeight: () => Promise<number>;
15
+ /**
16
+ * Try getting transactions information.
17
+ * @param txHashes
18
+ */
19
+ getTxInformation: (txId: string) => Promise<BlockFrostTransaction>;
20
+ /**
21
+ * fetch list of transaction for a specific block
22
+ * @param blockId
23
+ */
24
+ getBlockTxs: (blockId: string) => Promise<Array<BlockFrostTransaction>>;
25
+ }
26
+ //# sourceMappingURL=blockfrost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockfrost.d.ts","sourceRoot":"","sources":["../../lib/network/blockfrost.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAEL,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAElC,qBAAa,iBAAkB,SAAQ,wBAAwB,CAAC,qBAAqB,CAAC;IACpF,OAAO,CAAC,MAAM,CAAgB;gBAElB,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IAS3C;;;OAGG;IACH,gBAAgB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,KAAK,CAAC,CAkBvD;IAEF;;OAEG;IACH,gBAAgB,QAAa,OAAO,CAAC,MAAM,CAAC,CAW1C;IAEF;;;OAGG;IACH,gBAAgB,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,qBAAqB,CAAC,CAQrE;IAEF;;;OAGG;IACH,WAAW,GACT,SAAS,MAAM,KACd,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAStC;CACH"}
@@ -0,0 +1,76 @@
1
+ import { BlockFrostAPI } from '@blockfrost/blockfrost-js';
2
+ import { AbstractNetworkConnector, } from '@rosen-bridge/scanner-interfaces';
3
+ import { BlockFrostNullValueError, } from '../interfaces/BlockFrost';
4
+ export class BlockFrostNetwork extends AbstractNetworkConnector {
5
+ client;
6
+ constructor(projectId, url) {
7
+ super();
8
+ this.client = new BlockFrostAPI({
9
+ projectId: projectId,
10
+ customBackend: url,
11
+ network: 'mainnet',
12
+ });
13
+ }
14
+ /**
15
+ * get block header from height
16
+ * @param height
17
+ */
18
+ getBlockAtHeight = async (height) => {
19
+ return this.client
20
+ .blocks(height)
21
+ .then((res) => {
22
+ if (!res.height || !res.previous_block)
23
+ throw new BlockFrostNullValueError(`Block height or previous_block is null`);
24
+ return {
25
+ hash: res.hash,
26
+ height: res.height,
27
+ parentHash: res.previous_block,
28
+ timestamp: res.time,
29
+ };
30
+ })
31
+ .catch((exp) => {
32
+ throw exp;
33
+ });
34
+ };
35
+ /**
36
+ * get current height for blockchain
37
+ */
38
+ getCurrentHeight = async () => {
39
+ return this.client
40
+ .blocksLatest()
41
+ .then((block) => {
42
+ const height = block.height;
43
+ if (height)
44
+ return height;
45
+ throw new BlockFrostNullValueError('Height of last block is null');
46
+ })
47
+ .catch((exp) => {
48
+ throw exp;
49
+ });
50
+ };
51
+ /**
52
+ * Try getting transactions information.
53
+ * @param txHashes
54
+ */
55
+ getTxInformation = async (txId) => {
56
+ const txUtxos = await this.client.txsUtxos(txId);
57
+ const txMetadata = await this.client.txsMetadata(txId);
58
+ return {
59
+ utxos: txUtxos,
60
+ metadata: txMetadata,
61
+ };
62
+ };
63
+ /**
64
+ * fetch list of transaction for a specific block
65
+ * @param blockId
66
+ */
67
+ getBlockTxs = async (blockId) => {
68
+ const blockTxIds = await this.client.blocksTxsAll(blockId);
69
+ const blockTxs = [];
70
+ for (const txId of blockTxIds) {
71
+ blockTxs.push(await this.getTxInformation(txId));
72
+ }
73
+ return blockTxs;
74
+ };
75
+ }
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tmcm9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9uZXR3b3JrL2Jsb2NrZnJvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFDTCx3QkFBd0IsR0FFekIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsd0JBQXdCLEdBRXpCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsTUFBTSxPQUFPLGlCQUFrQixTQUFRLHdCQUErQztJQUM1RSxNQUFNLENBQWdCO0lBRTlCLFlBQVksU0FBaUIsRUFBRSxHQUFZO1FBQ3pDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUM5QixTQUFTLEVBQUUsU0FBUztZQUNwQixhQUFhLEVBQUUsR0FBRztZQUNsQixPQUFPLEVBQUUsU0FBUztTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLE1BQWMsRUFBa0IsRUFBRTtRQUMxRCxPQUFPLElBQUksQ0FBQyxNQUFNO2FBQ2YsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUNkLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYztnQkFDcEMsTUFBTSxJQUFJLHdCQUF3QixDQUNoQyx3Q0FBd0MsQ0FDekMsQ0FBQztZQUNKLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO2dCQUNkLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtnQkFDbEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxjQUFjO2dCQUM5QixTQUFTLEVBQUUsR0FBRyxDQUFDLElBQUk7YUFDcEIsQ0FBQztRQUNKLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztJQUVGOztPQUVHO0lBQ0gsZ0JBQWdCLEdBQUcsS0FBSyxJQUFxQixFQUFFO1FBQzdDLE9BQU8sSUFBSSxDQUFDLE1BQU07YUFDZixZQUFZLEVBQUU7YUFDZCxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNkLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDNUIsSUFBSSxNQUFNO2dCQUFFLE9BQU8sTUFBTSxDQUFDO1lBQzFCLE1BQU0sSUFBSSx3QkFBd0IsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILGdCQUFnQixHQUFHLEtBQUssRUFBRSxJQUFZLEVBQWtDLEVBQUU7UUFDeEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZELE9BQU87WUFDTCxLQUFLLEVBQUUsT0FBTztZQUNkLFFBQVEsRUFBRSxVQUFVO1NBQ3JCLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxXQUFXLEdBQUcsS0FBSyxFQUNqQixPQUFlLEVBQ3dCLEVBQUU7UUFDekMsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUzRCxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDcEIsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM5QixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmxvY2tGcm9zdEFQSSB9IGZyb20gJ0BibG9ja2Zyb3N0L2Jsb2NrZnJvc3QtanMnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3ROZXR3b3JrQ29ubmVjdG9yLFxuICBCbG9jayxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgQmxvY2tGcm9zdE51bGxWYWx1ZUVycm9yLFxuICBCbG9ja0Zyb3N0VHJhbnNhY3Rpb24sXG59IGZyb20gJy4uL2ludGVyZmFjZXMvQmxvY2tGcm9zdCc7XG5cbmV4cG9ydCBjbGFzcyBCbG9ja0Zyb3N0TmV0d29yayBleHRlbmRzIEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcjxCbG9ja0Zyb3N0VHJhbnNhY3Rpb24+IHtcbiAgcHJpdmF0ZSBjbGllbnQ6IEJsb2NrRnJvc3RBUEk7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdElkOiBzdHJpbmcsIHVybD86IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jbGllbnQgPSBuZXcgQmxvY2tGcm9zdEFQSSh7XG4gICAgICBwcm9qZWN0SWQ6IHByb2plY3RJZCxcbiAgICAgIGN1c3RvbUJhY2tlbmQ6IHVybCxcbiAgICAgIG5ldHdvcms6ICdtYWlubmV0JyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgYmxvY2sgaGVhZGVyIGZyb20gaGVpZ2h0XG4gICAqIEBwYXJhbSBoZWlnaHRcbiAgICovXG4gIGdldEJsb2NrQXRIZWlnaHQgPSBhc3luYyAoaGVpZ2h0OiBudW1iZXIpOiBQcm9taXNlPEJsb2NrPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50XG4gICAgICAuYmxvY2tzKGhlaWdodClcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgaWYgKCFyZXMuaGVpZ2h0IHx8ICFyZXMucHJldmlvdXNfYmxvY2spXG4gICAgICAgICAgdGhyb3cgbmV3IEJsb2NrRnJvc3ROdWxsVmFsdWVFcnJvcihcbiAgICAgICAgICAgIGBCbG9jayBoZWlnaHQgb3IgcHJldmlvdXNfYmxvY2sgaXMgbnVsbGBcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhhc2g6IHJlcy5oYXNoLFxuICAgICAgICAgIGhlaWdodDogcmVzLmhlaWdodCxcbiAgICAgICAgICBwYXJlbnRIYXNoOiByZXMucHJldmlvdXNfYmxvY2ssXG4gICAgICAgICAgdGltZXN0YW1wOiByZXMudGltZSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGV4cCkgPT4ge1xuICAgICAgICB0aHJvdyBleHA7XG4gICAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogZ2V0IGN1cnJlbnQgaGVpZ2h0IGZvciBibG9ja2NoYWluXG4gICAqL1xuICBnZXRDdXJyZW50SGVpZ2h0ID0gYXN5bmMgKCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50XG4gICAgICAuYmxvY2tzTGF0ZXN0KClcbiAgICAgIC50aGVuKChibG9jaykgPT4ge1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBibG9jay5oZWlnaHQ7XG4gICAgICAgIGlmIChoZWlnaHQpIHJldHVybiBoZWlnaHQ7XG4gICAgICAgIHRocm93IG5ldyBCbG9ja0Zyb3N0TnVsbFZhbHVlRXJyb3IoJ0hlaWdodCBvZiBsYXN0IGJsb2NrIGlzIG51bGwnKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGV4cCkgPT4ge1xuICAgICAgICB0aHJvdyBleHA7XG4gICAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogVHJ5IGdldHRpbmcgdHJhbnNhY3Rpb25zIGluZm9ybWF0aW9uLlxuICAgKiBAcGFyYW0gdHhIYXNoZXNcbiAgICovXG4gIGdldFR4SW5mb3JtYXRpb24gPSBhc3luYyAodHhJZDogc3RyaW5nKTogUHJvbWlzZTxCbG9ja0Zyb3N0VHJhbnNhY3Rpb24+ID0+IHtcbiAgICBjb25zdCB0eFV0eG9zID0gYXdhaXQgdGhpcy5jbGllbnQudHhzVXR4b3ModHhJZCk7XG4gICAgY29uc3QgdHhNZXRhZGF0YSA9IGF3YWl0IHRoaXMuY2xpZW50LnR4c01ldGFkYXRhKHR4SWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHV0eG9zOiB0eFV0eG9zLFxuICAgICAgbWV0YWRhdGE6IHR4TWV0YWRhdGEsXG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogZmV0Y2ggbGlzdCBvZiB0cmFuc2FjdGlvbiBmb3IgYSBzcGVjaWZpYyBibG9ja1xuICAgKiBAcGFyYW0gYmxvY2tJZFxuICAgKi9cbiAgZ2V0QmxvY2tUeHMgPSBhc3luYyAoXG4gICAgYmxvY2tJZDogc3RyaW5nXG4gICk6IFByb21pc2U8QXJyYXk8QmxvY2tGcm9zdFRyYW5zYWN0aW9uPj4gPT4ge1xuICAgIGNvbnN0IGJsb2NrVHhJZHMgPSBhd2FpdCB0aGlzLmNsaWVudC5ibG9ja3NUeHNBbGwoYmxvY2tJZCk7XG5cbiAgICBjb25zdCBibG9ja1R4cyA9IFtdO1xuICAgIGZvciAoY29uc3QgdHhJZCBvZiBibG9ja1R4SWRzKSB7XG4gICAgICBibG9ja1R4cy5wdXNoKGF3YWl0IHRoaXMuZ2V0VHhJbmZvcm1hdGlvbih0eElkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJsb2NrVHhzO1xuICB9O1xufVxuIl19
@@ -0,0 +1,26 @@
1
+ import { AbstractNetworkConnector, Block } from '@rosen-bridge/scanner-interfaces';
2
+ import { KoiosTransaction } from '../interfaces/Koios';
3
+ export declare class KoiosNetwork extends AbstractNetworkConnector<KoiosTransaction> {
4
+ private readonly url;
5
+ private readonly timeout;
6
+ private koios;
7
+ constructor(url: string, timeout: number, authToken?: string);
8
+ /**
9
+ * Returns block at height
10
+ * @param height
11
+ * @returns Block
12
+ */
13
+ getBlockAtHeight: (height: number) => Promise<Block>;
14
+ /**
15
+ * Returns current network height
16
+ * @returns current height
17
+ */
18
+ getCurrentHeight: () => Promise<number>;
19
+ /**
20
+ * Return transactions in a block with specified hash
21
+ * @param blockHash
22
+ * @returns array of KoiosTransaction
23
+ */
24
+ getBlockTxs: (blockHash: string) => Promise<Array<KoiosTransaction>>;
25
+ }
26
+ //# sourceMappingURL=koios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"koios.d.ts","sourceRoot":"","sources":["../../lib/network/koios.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,KAAK,EACN,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAA2B,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGhF,qBAAa,YAAa,SAAQ,wBAAwB,CAAC,gBAAgB,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,KAAK,CAAQ;gBAET,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAgB5D;;;;OAIG;IACH,gBAAgB,GAAI,QAAQ,MAAM,KAAG,OAAO,CAAC,KAAK,CAAC,CAuBjD;IAEF;;;OAGG;IACH,gBAAgB,QAAO,OAAO,CAAC,MAAM,CAAC,CASpC;IAEF;;;;OAIG;IACH,WAAW,GAAI,WAAW,MAAM,KAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAmBjE;CACH"}
@@ -0,0 +1,89 @@
1
+ import axios from '@rosen-bridge/rate-limited-axios';
2
+ import { Transaction } from '@emurgo/cardano-serialization-lib-nodejs';
3
+ import { AbstractNetworkConnector, } from '@rosen-bridge/scanner-interfaces';
4
+ import JsonBigint from '@rosen-bridge/json-bigint';
5
+ export class KoiosNetwork extends AbstractNetworkConnector {
6
+ url;
7
+ timeout;
8
+ koios;
9
+ constructor(url, timeout, authToken) {
10
+ super();
11
+ this.url = url;
12
+ this.timeout = timeout;
13
+ this.koios = axios.create({
14
+ baseURL: this.url,
15
+ timeout: this.timeout,
16
+ headers: { 'Content-Type': 'application/json' },
17
+ });
18
+ if (authToken) {
19
+ this.koios.defaults.headers.common['Authorization'] = `Bearer ${authToken}`;
20
+ }
21
+ }
22
+ /**
23
+ * Returns block at height
24
+ * @param height
25
+ * @returns Block
26
+ */
27
+ getBlockAtHeight = (height) => {
28
+ return this.koios
29
+ .get('/blocks', {
30
+ params: {
31
+ block_height: `lte.${height}`,
32
+ limit: 2,
33
+ select: 'hash,block_height,block_time,tx_count',
34
+ },
35
+ })
36
+ .then((res) => {
37
+ const block = res.data[0];
38
+ const parentBlock = res.data[1];
39
+ return {
40
+ hash: block.hash,
41
+ height: block.block_height,
42
+ parentHash: parentBlock.hash,
43
+ timestamp: block.block_time,
44
+ txCount: block.tx_count,
45
+ };
46
+ })
47
+ .catch((exp) => {
48
+ throw exp;
49
+ });
50
+ };
51
+ /**
52
+ * Returns current network height
53
+ * @returns current height
54
+ */
55
+ getCurrentHeight = () => {
56
+ return this.koios
57
+ .get('/blocks', {
58
+ params: { offset: 0, limit: 1, select: 'hash,block_height' },
59
+ })
60
+ .then((res) => res.data[0].block_height)
61
+ .catch((exp) => {
62
+ throw exp;
63
+ });
64
+ };
65
+ /**
66
+ * Return transactions in a block with specified hash
67
+ * @param blockHash
68
+ * @returns array of KoiosTransaction
69
+ */
70
+ getBlockTxs = (blockHash) => {
71
+ return this.koios
72
+ .post('/block_tx_cbor', {
73
+ _block_hashes: [blockHash],
74
+ })
75
+ .then((res) => {
76
+ return res.data.map((tx) => {
77
+ const serializedTx = Transaction.from_bytes(new Uint8Array(Buffer.from(tx.cbor, 'hex')));
78
+ return {
79
+ ...tx,
80
+ ...JsonBigint.parse(serializedTx.to_json()),
81
+ };
82
+ });
83
+ })
84
+ .catch((exp) => {
85
+ throw exp;
86
+ });
87
+ };
88
+ }
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia29pb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvbmV0d29yay9rb2lvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQWdCLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3ZFLE9BQU8sRUFDTCx3QkFBd0IsR0FFekIsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxQyxPQUFPLFVBQVUsTUFBTSwyQkFBMkIsQ0FBQztBQUVuRCxNQUFNLE9BQU8sWUFBYSxTQUFRLHdCQUEwQztJQUN6RCxHQUFHLENBQVM7SUFDWixPQUFPLENBQVM7SUFDekIsS0FBSyxDQUFRO0lBRXJCLFlBQVksR0FBVyxFQUFFLE9BQWUsRUFBRSxTQUFrQjtRQUMxRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRztZQUNqQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1NBQ2hELENBQUMsQ0FBQztRQUNILElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNoQyxlQUFlLENBQ2hCLEdBQUcsVUFBVSxTQUFTLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsR0FBRyxDQUFDLE1BQWMsRUFBa0IsRUFBRTtRQUNwRCxPQUFPLElBQUksQ0FBQyxLQUFLO2FBQ2QsR0FBRyxDQUFvQixTQUFTLEVBQUU7WUFDakMsTUFBTSxFQUFFO2dCQUNOLFlBQVksRUFBRSxPQUFPLE1BQU0sRUFBRTtnQkFDN0IsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxFQUFFLHVDQUF1QzthQUNoRDtTQUNGLENBQUM7YUFDRCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNaLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsTUFBTSxFQUFFLEtBQUssQ0FBQyxZQUFZO2dCQUMxQixVQUFVLEVBQUUsV0FBVyxDQUFDLElBQUk7Z0JBQzVCLFNBQVMsRUFBRSxLQUFLLENBQUMsVUFBVTtnQkFDM0IsT0FBTyxFQUFFLEtBQUssQ0FBQyxRQUFRO2FBQ3hCLENBQUM7UUFDSixDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNiLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUM7SUFFRjs7O09BR0c7SUFDSCxnQkFBZ0IsR0FBRyxHQUFvQixFQUFFO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEtBQUs7YUFDZCxHQUFHLENBQW9CLFNBQVMsRUFBRTtZQUNqQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFO1NBQzdELENBQUM7YUFDRCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2FBQ3ZDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxXQUFXLEdBQUcsQ0FBQyxTQUFpQixFQUFvQyxFQUFFO1FBQ3BFLE9BQU8sSUFBSSxDQUFDLEtBQUs7YUFDZCxJQUFJLENBQXFCLGdCQUFnQixFQUFFO1lBQzFDLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztTQUMzQixDQUFDO2FBQ0QsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDWixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQ3pCLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQ3pDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUM1QyxDQUFDO2dCQUNGLE9BQU87b0JBQ0wsR0FBRyxFQUFFO29CQUNMLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQzVDLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2IsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zLCB7IEF4aW9zIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9yYXRlLWxpbWl0ZWQtYXhpb3MnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7XG4gIEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcixcbiAgQmxvY2ssXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcbmltcG9ydCB7IEtvaW9zQmxvY2ssIEtvaW9zQ2JvclR4LCBLb2lvc1RyYW5zYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Lb2lvcyc7XG5pbXBvcnQgSnNvbkJpZ2ludCBmcm9tICdAcm9zZW4tYnJpZGdlL2pzb24tYmlnaW50JztcblxuZXhwb3J0IGNsYXNzIEtvaW9zTmV0d29yayBleHRlbmRzIEFic3RyYWN0TmV0d29ya0Nvbm5lY3RvcjxLb2lvc1RyYW5zYWN0aW9uPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIGtvaW9zOiBBeGlvcztcblxuICBjb25zdHJ1Y3Rvcih1cmw6IHN0cmluZywgdGltZW91dDogbnVtYmVyLCBhdXRoVG9rZW4/OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgdGhpcy5rb2lvcyA9IGF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiB0aGlzLnVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgIH0pO1xuICAgIGlmIChhdXRoVG9rZW4pIHtcbiAgICAgIHRoaXMua29pb3MuZGVmYXVsdHMuaGVhZGVycy5jb21tb25bXG4gICAgICAgICdBdXRob3JpemF0aW9uJ1xuICAgICAgXSA9IGBCZWFyZXIgJHthdXRoVG9rZW59YDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBibG9jayBhdCBoZWlnaHRcbiAgICogQHBhcmFtIGhlaWdodFxuICAgKiBAcmV0dXJucyBCbG9ja1xuICAgKi9cbiAgZ2V0QmxvY2tBdEhlaWdodCA9IChoZWlnaHQ6IG51bWJlcik6IFByb21pc2U8QmxvY2s+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5rb2lvc1xuICAgICAgLmdldDxBcnJheTxLb2lvc0Jsb2NrPj4oJy9ibG9ja3MnLCB7XG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJsb2NrX2hlaWdodDogYGx0ZS4ke2hlaWdodH1gLFxuICAgICAgICAgIGxpbWl0OiAyLFxuICAgICAgICAgIHNlbGVjdDogJ2hhc2gsYmxvY2tfaGVpZ2h0LGJsb2NrX3RpbWUsdHhfY291bnQnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgY29uc3QgYmxvY2sgPSByZXMuZGF0YVswXTtcbiAgICAgICAgY29uc3QgcGFyZW50QmxvY2sgPSByZXMuZGF0YVsxXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBoYXNoOiBibG9jay5oYXNoLFxuICAgICAgICAgIGhlaWdodDogYmxvY2suYmxvY2tfaGVpZ2h0LFxuICAgICAgICAgIHBhcmVudEhhc2g6IHBhcmVudEJsb2NrLmhhc2gsXG4gICAgICAgICAgdGltZXN0YW1wOiBibG9jay5ibG9ja190aW1lLFxuICAgICAgICAgIHR4Q291bnQ6IGJsb2NrLnR4X2NvdW50LFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXhwKSA9PiB7XG4gICAgICAgIHRocm93IGV4cDtcbiAgICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnQgbmV0d29yayBoZWlnaHRcbiAgICogQHJldHVybnMgY3VycmVudCBoZWlnaHRcbiAgICovXG4gIGdldEN1cnJlbnRIZWlnaHQgPSAoKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5rb2lvc1xuICAgICAgLmdldDxBcnJheTxLb2lvc0Jsb2NrPj4oJy9ibG9ja3MnLCB7XG4gICAgICAgIHBhcmFtczogeyBvZmZzZXQ6IDAsIGxpbWl0OiAxLCBzZWxlY3Q6ICdoYXNoLGJsb2NrX2hlaWdodCcgfSxcbiAgICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuZGF0YVswXS5ibG9ja19oZWlnaHQpXG4gICAgICAuY2F0Y2goKGV4cCkgPT4ge1xuICAgICAgICB0aHJvdyBleHA7XG4gICAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJuIHRyYW5zYWN0aW9ucyBpbiBhIGJsb2NrIHdpdGggc3BlY2lmaWVkIGhhc2hcbiAgICogQHBhcmFtIGJsb2NrSGFzaFxuICAgKiBAcmV0dXJucyBhcnJheSBvZiBLb2lvc1RyYW5zYWN0aW9uXG4gICAqL1xuICBnZXRCbG9ja1R4cyA9IChibG9ja0hhc2g6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8S29pb3NUcmFuc2FjdGlvbj4+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5rb2lvc1xuICAgICAgLnBvc3Q8QXJyYXk8S29pb3NDYm9yVHg+PignL2Jsb2NrX3R4X2Nib3InLCB7XG4gICAgICAgIF9ibG9ja19oYXNoZXM6IFtibG9ja0hhc2hdLFxuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlcy5kYXRhLm1hcCgodHgpID0+IHtcbiAgICAgICAgICBjb25zdCBzZXJpYWxpemVkVHggPSBUcmFuc2FjdGlvbi5mcm9tX2J5dGVzKFxuICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20odHguY2JvciwgJ2hleCcpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnR4LFxuICAgICAgICAgICAgLi4uSnNvbkJpZ2ludC5wYXJzZShzZXJpYWxpemVkVHgudG9fanNvbigpKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGV4cCkgPT4ge1xuICAgICAgICB0aHJvdyBleHA7XG4gICAgICB9KTtcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ import { BlockFrostTransaction } from '../interfaces/BlockFrost';
2
+ import { GeneralScanner, ScannerConfig } from '@rosen-bridge/abstract-scanner';
3
+ declare class CardanoBlockFrostScanner extends GeneralScanner<BlockFrostTransaction> {
4
+ constructor(config: ScannerConfig<BlockFrostTransaction>);
5
+ }
6
+ export { CardanoBlockFrostScanner };
7
+ //# sourceMappingURL=blockfrost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockfrost.d.ts","sourceRoot":"","sources":["../../lib/scanner/blockfrost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/E,cAAM,wBAAyB,SAAQ,cAAc,CAAC,qBAAqB,CAAC;gBAC9D,MAAM,EAAE,aAAa,CAAC,qBAAqB,CAAC;CAWzD;AACD,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { GeneralScanner } from '@rosen-bridge/abstract-scanner';
2
+ class CardanoBlockFrostScanner extends GeneralScanner {
3
+ constructor(config) {
4
+ super('cardano', config.dataSource, config.initialHeight, config.network, config.blockRetrieveGap, config.logger, config.suffix);
5
+ }
6
+ }
7
+ export { CardanoBlockFrostScanner };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tmcm9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9zY2FubmVyL2Jsb2NrZnJvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBaUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUvRSxNQUFNLHdCQUF5QixTQUFRLGNBQXFDO0lBQzFFLFlBQVksTUFBNEM7UUFDdEQsS0FBSyxDQUNILFNBQVMsRUFDVCxNQUFNLENBQUMsVUFBVSxFQUNqQixNQUFNLENBQUMsYUFBYSxFQUNwQixNQUFNLENBQUMsT0FBTyxFQUNkLE1BQU0sQ0FBQyxnQkFBZ0IsRUFDdkIsTUFBTSxDQUFDLE1BQU0sRUFDYixNQUFNLENBQUMsTUFBTSxDQUNkLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFDRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJsb2NrRnJvc3RUcmFuc2FjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvQmxvY2tGcm9zdCc7XG5pbXBvcnQgeyBHZW5lcmFsU2Nhbm5lciwgU2Nhbm5lckNvbmZpZyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3Qtc2Nhbm5lcic7XG5cbmNsYXNzIENhcmRhbm9CbG9ja0Zyb3N0U2Nhbm5lciBleHRlbmRzIEdlbmVyYWxTY2FubmVyPEJsb2NrRnJvc3RUcmFuc2FjdGlvbj4ge1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IFNjYW5uZXJDb25maWc8QmxvY2tGcm9zdFRyYW5zYWN0aW9uPikge1xuICAgIHN1cGVyKFxuICAgICAgJ2NhcmRhbm8nLFxuICAgICAgY29uZmlnLmRhdGFTb3VyY2UsXG4gICAgICBjb25maWcuaW5pdGlhbEhlaWdodCxcbiAgICAgIGNvbmZpZy5uZXR3b3JrLFxuICAgICAgY29uZmlnLmJsb2NrUmV0cmlldmVHYXAsXG4gICAgICBjb25maWcubG9nZ2VyLFxuICAgICAgY29uZmlnLnN1ZmZpeFxuICAgICk7XG4gIH1cbn1cbmV4cG9ydCB7IENhcmRhbm9CbG9ja0Zyb3N0U2Nhbm5lciB9O1xuIl19
@@ -0,0 +1,7 @@
1
+ import { KoiosTransaction } from '../interfaces/Koios';
2
+ import { GeneralScanner, ScannerConfig } from '@rosen-bridge/abstract-scanner';
3
+ declare class CardanoKoiosScanner extends GeneralScanner<KoiosTransaction> {
4
+ constructor(config: ScannerConfig<KoiosTransaction>);
5
+ }
6
+ export { CardanoKoiosScanner };
7
+ //# sourceMappingURL=koios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"koios.d.ts","sourceRoot":"","sources":["../../lib/scanner/koios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/E,cAAM,mBAAoB,SAAQ,cAAc,CAAC,gBAAgB,CAAC;gBACpD,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC;CAWpD;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { GeneralScanner } from '@rosen-bridge/abstract-scanner';
2
+ class CardanoKoiosScanner extends GeneralScanner {
3
+ constructor(config) {
4
+ super('cardano', config.dataSource, config.initialHeight, config.network, config.blockRetrieveGap, config.logger, config.suffix);
5
+ }
6
+ }
7
+ export { CardanoKoiosScanner };
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia29pb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvc2Nhbm5lci9rb2lvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBRS9FLE1BQU0sbUJBQW9CLFNBQVEsY0FBZ0M7SUFDaEUsWUFBWSxNQUF1QztRQUNqRCxLQUFLLENBQ0gsU0FBUyxFQUNULE1BQU0sQ0FBQyxVQUFVLEVBQ2pCLE1BQU0sQ0FBQyxhQUFhLEVBQ3BCLE1BQU0sQ0FBQyxPQUFPLEVBQ2QsTUFBTSxDQUFDLGdCQUFnQixFQUN2QixNQUFNLENBQUMsTUFBTSxFQUNiLE1BQU0sQ0FBQyxNQUFNLENBQ2QsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQUVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgS29pb3NUcmFuc2FjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvS29pb3MnO1xuaW1wb3J0IHsgR2VuZXJhbFNjYW5uZXIsIFNjYW5uZXJDb25maWcgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LXNjYW5uZXInO1xuXG5jbGFzcyBDYXJkYW5vS29pb3NTY2FubmVyIGV4dGVuZHMgR2VuZXJhbFNjYW5uZXI8S29pb3NUcmFuc2FjdGlvbj4ge1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IFNjYW5uZXJDb25maWc8S29pb3NUcmFuc2FjdGlvbj4pIHtcbiAgICBzdXBlcihcbiAgICAgICdjYXJkYW5vJyxcbiAgICAgIGNvbmZpZy5kYXRhU291cmNlLFxuICAgICAgY29uZmlnLmluaXRpYWxIZWlnaHQsXG4gICAgICBjb25maWcubmV0d29yayxcbiAgICAgIGNvbmZpZy5ibG9ja1JldHJpZXZlR2FwLFxuICAgICAgY29uZmlnLmxvZ2dlcixcbiAgICAgIGNvbmZpZy5zdWZmaXhcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCB7IENhcmRhbm9Lb2lvc1NjYW5uZXIgfTtcbiJdfQ==
@@ -0,0 +1,51 @@
1
+ import { Point, Transaction } from '@cardano-ogmios/schema';
2
+ import { ChainSynchronizationClient } from '@cardano-ogmios/client/dist/ChainSynchronization';
3
+ import { WebSocketScanner } from '@rosen-bridge/abstract-scanner';
4
+ import { CardanoOgmiosConfig } from '../interfaces';
5
+ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
6
+ declare class CardanoOgmiosScanner extends WebSocketScanner<Transaction> {
7
+ client: ChainSynchronizationClient;
8
+ initPoint: Point;
9
+ host: string;
10
+ port: number;
11
+ useTls: boolean;
12
+ private connected;
13
+ private stopped;
14
+ private reconnectionConfig;
15
+ constructor(config: CardanoOgmiosConfig, logger?: AbstractLogger);
16
+ /**
17
+ * process block when a block forked library call this function
18
+ * @param response: forked block
19
+ * @param requestNext: a function to tell node to send next block
20
+ */
21
+ private rollBackward;
22
+ /**
23
+ * Step forward when new block arrived ogmios-client call this function
24
+ * @param response: new block
25
+ * @param requestNext: tell library that this block proceeds. pass next block when available
26
+ */
27
+ private rollForward;
28
+ /**
29
+ * find intersect between stored blocks and blockchain.
30
+ * @param context: blockchain context
31
+ */
32
+ private findIntersection;
33
+ /**
34
+ * Handles ogmios connection closure
35
+ */
36
+ private connectionCloseHandler;
37
+ /**
38
+ * start scanner. first find fork point. fork all blocks and request updates from node.
39
+ */
40
+ start: () => Promise<void>;
41
+ /**
42
+ * stop ws connection to node.
43
+ */
44
+ stop: () => Promise<void>;
45
+ /**
46
+ * @returns The connection status of ogmios scanner
47
+ */
48
+ getConnectionStatus: () => boolean;
49
+ }
50
+ export { CardanoOgmiosScanner };
51
+ //# sourceMappingURL=ogmios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ogmios.d.ts","sourceRoot":"","sources":["../../lib/scanner/ogmios.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,EAGL,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EACL,0BAA0B,EAE3B,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAEL,gBAAgB,EACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAA4B,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAmB/D,cAAM,oBAAqB,SAAQ,gBAAgB,CAAC,WAAW,CAAC;IAC9D,MAAM,EAAE,0BAA0B,CAAC;IACnC,SAAS,EAAE,KAAK,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,kBAAkB,CAA2B;gBAEzC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,cAAc;IAoBhE;;;;OAIG;IACH,OAAO,CAAC,YAAY,CAsBlB;IAEF;;;;OAIG;IACH,OAAO,CAAC,WAAW,CAuBjB;IAEF;;;OAGG;IACH,OAAO,CAAC,gBAAgB,CAkCtB;IAEF;;OAEG;IACH,OAAO,CAAC,sBAAsB,CA6B5B;IAEF;;OAEG;IACH,KAAK,QAAa,OAAO,CAAC,IAAI,CAAC,CAwB7B;IAEF;;OAEG;IACH,IAAI,QAAa,OAAO,CAAC,IAAI,CAAC,CAG5B;IAEF;;OAEG;IACH,mBAAmB,gBAAwB;CAC5C;AAED,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,172 @@
1
+ import { createInteractionContext, createChainSynchronizationClient, } from '@cardano-ogmios/client';
2
+ import { findIntersection, } from '@cardano-ogmios/client/dist/ChainSynchronization';
3
+ import { BlockDbAction, WebSocketScanner, } from '@rosen-bridge/abstract-scanner';
4
+ import { RECONNECTION_INITIAL_DELAY, RECONNECTION_MAX_DELAY, SLOT_SHELLY_NUMBER, RECONNECTION_MAX_ATTEMPTS, } from '../constants';
5
+ import { ExponentialBackoff, handleWhen, retry } from 'cockatiel';
6
+ class CardanoOgmiosScanner extends WebSocketScanner {
7
+ client;
8
+ initPoint;
9
+ host;
10
+ port;
11
+ useTls;
12
+ connected;
13
+ stopped;
14
+ reconnectionConfig;
15
+ constructor(config, logger) {
16
+ super('cardano', logger, config.maxTryBlock, config.suffix);
17
+ this.action = new BlockDbAction(config.dataSource, this.name(), logger);
18
+ this.host = config.nodeHostOrIp;
19
+ this.port = config.nodePort;
20
+ this.useTls = config.useTls ?? false;
21
+ this.connected = false;
22
+ this.initPoint = {
23
+ id: config.initialHash,
24
+ slot: config.initialSlot,
25
+ };
26
+ this.reconnectionConfig = {
27
+ initialDelay: config.reconnectionConfig?.initialDelay ?? RECONNECTION_INITIAL_DELAY,
28
+ maxDelay: config.reconnectionConfig?.maxDelay ?? RECONNECTION_MAX_DELAY,
29
+ maxAttempts: config.reconnectionConfig?.maxAttempts ?? RECONNECTION_MAX_ATTEMPTS,
30
+ };
31
+ }
32
+ /**
33
+ * process block when a block forked library call this function
34
+ * @param response: forked block
35
+ * @param requestNext: a function to tell node to send next block
36
+ */
37
+ rollBackward = async (response, requestNext) => {
38
+ const hash = response.point.id;
39
+ const savedBlock = await this.action.getBlockWithHash(hash);
40
+ this.logger.debug(`Rolling backward to height ${savedBlock?.height} in scanner ${this.name()}`);
41
+ if (savedBlock) {
42
+ const block = {
43
+ hash: savedBlock.hash,
44
+ height: savedBlock.height,
45
+ parentHash: savedBlock.parentHash,
46
+ extra: savedBlock.extra,
47
+ timestamp: savedBlock.timestamp,
48
+ };
49
+ await this.stepBackward(block);
50
+ }
51
+ requestNext();
52
+ };
53
+ /**
54
+ * Step forward when new block arrived ogmios-client call this function
55
+ * @param response: new block
56
+ * @param requestNext: tell library that this block proceeds. pass next block when available
57
+ */
58
+ rollForward = async (response, requestNext) => {
59
+ if (response.block.type === 'praos') {
60
+ const praosBlock = response.block;
61
+ this.logger.debug(`Queueing new block at height ${praosBlock.height} in scanner ${this.name()}`);
62
+ const block = {
63
+ hash: praosBlock.id,
64
+ height: praosBlock.height,
65
+ parentHash: praosBlock.ancestor,
66
+ extra: `${praosBlock.slot}`,
67
+ // Caution: In case of a hard fork and change in slot duration, this must change!
68
+ timestamp: praosBlock.slot + SLOT_SHELLY_NUMBER,
69
+ };
70
+ if (praosBlock.transactions)
71
+ await this.stepForward(block, praosBlock.transactions);
72
+ }
73
+ requestNext();
74
+ };
75
+ /**
76
+ * find intersect between stored blocks and blockchain.
77
+ * @param context: blockchain context
78
+ */
79
+ findIntersection = async (context) => {
80
+ let count = 1;
81
+ let skip = 0;
82
+ while (count !== 0) {
83
+ try {
84
+ const release = await this.mutex.acquire();
85
+ const blocks = await this.action.getLastSavedBlocks(skip, count);
86
+ release();
87
+ if (blocks.length === 0)
88
+ count = 0;
89
+ const points = blocks.length > 0
90
+ ? blocks.map((item) => ({
91
+ slot: item.extra ? parseInt(item.extra) : 0,
92
+ id: item.hash,
93
+ }))
94
+ : [this.initPoint];
95
+ const intersect = await findIntersection(context, points);
96
+ const intersectPoint = intersect.intersection;
97
+ let height = 0;
98
+ if (blocks.length) {
99
+ const foundedBlock = blocks.find((item) => (item.hash = intersectPoint.id));
100
+ if (foundedBlock) {
101
+ height = foundedBlock.height;
102
+ }
103
+ }
104
+ return { point: intersect.intersection, height: height };
105
+ }
106
+ catch {
107
+ skip += count;
108
+ count *= 2;
109
+ }
110
+ }
111
+ return undefined;
112
+ };
113
+ /**
114
+ * Handles ogmios connection closure
115
+ */
116
+ connectionCloseHandler = async () => {
117
+ this.connected = false;
118
+ this.logger.warn('Ogmios connection closed');
119
+ if (this.stopped)
120
+ return;
121
+ const retryPolicy = retry(handleWhen((error) => {
122
+ this.logger.warn(`An error occurred while reconnecting to ogmios client: ${error}`);
123
+ return true;
124
+ }), {
125
+ maxAttempts: this.reconnectionConfig.maxAttempts,
126
+ backoff: new ExponentialBackoff({
127
+ maxDelay: this.reconnectionConfig.maxDelay,
128
+ initialDelay: this.reconnectionConfig.initialDelay,
129
+ }),
130
+ });
131
+ let trial = 0;
132
+ retryPolicy.execute(async () => {
133
+ trial++;
134
+ this.logger.debug(`Retrying to connect to ogmios client in trial step #${trial}`);
135
+ return await this.start();
136
+ });
137
+ };
138
+ /**
139
+ * start scanner. first find fork point. fork all blocks and request updates from node.
140
+ */
141
+ start = async () => {
142
+ this.stopped = false;
143
+ const context = await createInteractionContext((err) => this.logger.error(`${err}`), this.connectionCloseHandler, { connection: { port: this.port, host: this.host, tls: this.useTls } });
144
+ const intersect = await this.findIntersection(context);
145
+ if (intersect) {
146
+ // find intersect then start from that point
147
+ this.client = await createChainSynchronizationClient(context, {
148
+ rollBackward: this.rollBackward,
149
+ rollForward: this.rollForward,
150
+ }, { sequential: true });
151
+ this.connected = true;
152
+ await this.forkBlock(intersect.height + 1);
153
+ await this.client.resume([intersect.point], 2);
154
+ }
155
+ else {
156
+ throw Error('Can not start scanner. initial block is invalid');
157
+ }
158
+ };
159
+ /**
160
+ * stop ws connection to node.
161
+ */
162
+ stop = async () => {
163
+ this.stopped = true;
164
+ await this.client.shutdown();
165
+ };
166
+ /**
167
+ * @returns The connection status of ogmios scanner
168
+ */
169
+ getConnectionStatus = () => this.connected;
170
+ }
171
+ export { CardanoOgmiosScanner };
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2dtaW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3NjYW5uZXIvb2dtaW9zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsZ0NBQWdDLEdBRWpDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLGtEQUFrRCxDQUFDO0FBQzFELE9BQU8sRUFDTCxhQUFhLEVBQ2IsZ0JBQWdCLEdBQ2pCLE1BQU0sZ0NBQWdDLENBQUM7QUFHeEMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLHlCQUF5QixHQUMxQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVlsRSxNQUFNLG9CQUFxQixTQUFRLGdCQUE2QjtJQUM5RCxNQUFNLENBQTZCO0lBQ25DLFNBQVMsQ0FBUTtJQUNqQixJQUFJLENBQVM7SUFDYixJQUFJLENBQVM7SUFDYixNQUFNLENBQVU7SUFDUixTQUFTLENBQVU7SUFDbkIsT0FBTyxDQUFVO0lBQ2pCLGtCQUFrQixDQUEyQjtJQUVyRCxZQUFZLE1BQTJCLEVBQUUsTUFBdUI7UUFDOUQsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFN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QUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0lBRUY7O09BRUc7SUFDSCxJQUFJLEdBQUcsS0FBSyxJQUFtQixFQUFFO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDLENBQUM7SUFFRjs7T0FFRztJQUNILG1CQUFtQixHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Q0FDNUM7QUFFRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJsb2NrLFxuICBCbG9ja1ByYW9zLFxuICBQb2ludCxcbiAgUG9pbnRPck9yaWdpbixcbiAgVGlwT3JPcmlnaW4sXG4gIFRyYW5zYWN0aW9uLFxufSBmcm9tICdAY2FyZGFuby1vZ21pb3Mvc2NoZW1hJztcbmltcG9ydCB7XG4gIGNyZWF0ZUludGVyYWN0aW9uQ29udGV4dCxcbiAgY3JlYXRlQ2hhaW5TeW5jaHJvbml6YXRpb25DbGllbnQsXG4gIEludGVyYWN0aW9uQ29udGV4dCxcbn0gZnJvbSAnQGNhcmRhbm8tb2dtaW9zL2NsaWVudCc7XG5pbXBvcnQge1xuICBDaGFpblN5bmNocm9uaXphdGlvbkNsaWVudCxcbiAgZmluZEludGVyc2VjdGlvbixcbn0gZnJvbSAnQGNhcmRhbm8tb2dtaW9zL2NsaWVudC9kaXN0L0NoYWluU3luY2hyb25pemF0aW9uJztcbmltcG9ydCB7XG4gIEJsb2NrRGJBY3Rpb24sXG4gIFdlYlNvY2tldFNjYW5uZXIsXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3Qtc2Nhbm5lcic7XG5pbXBvcnQgeyBDYXJkYW5vT2dtaW9zQ29uZmlnLCBPZ21pb3NSZWNvbm5lY3Rpb25Db25maWcgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHtcbiAgUkVDT05ORUNUSU9OX0lOSVRJQUxfREVMQVksXG4gIFJFQ09OTkVDVElPTl9NQVhfREVMQVksXG4gIFNMT1RfU0hFTExZX05VTUJFUixcbiAgUkVDT05ORUNUSU9OX01BWF9BVFRFTVBUUyxcbn0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEV4cG9uZW50aWFsQmFja29mZiwgaGFuZGxlV2hlbiwgcmV0cnkgfSBmcm9tICdjb2NrYXRpZWwnO1xuXG5pbnRlcmZhY2UgQmFja3dhcmRSZXNwb25zZSB7XG4gIHBvaW50OiBQb2ludE9yT3JpZ2luO1xuICB0aXA6IFRpcE9yT3JpZ2luO1xufVxuXG5pbnRlcmZhY2UgRm9yd2FyZFJlc3BvbnNlIHtcbiAgYmxvY2s6IEJsb2NrO1xuICB0aXA6IFRpcE9yT3JpZ2luO1xufVxuXG5jbGFzcyBDYXJkYW5vT2dtaW9zU2Nhbm5lciBleHRlbmRzIFdlYlNvY2tldFNjYW5uZXI8VHJhbnNhY3Rpb24+IHtcbiAgY2xpZW50OiBDaGFpblN5bmNocm9uaXphdGlvbkNsaWVudDtcbiAgaW5pdFBvaW50OiBQb2ludDtcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG4gIHVzZVRsczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBjb25uZWN0ZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgc3RvcHBlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWNvbm5lY3Rpb25Db25maWc6IE9nbWlvc1JlY29ubmVjdGlvbkNvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IENhcmRhbm9PZ21pb3NDb25maWcsIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgc3VwZXIoJ2NhcmRhbm8nLCBsb2dnZXIsIGNvbmZpZy5tYXhUcnlCbG9jaywgY29uZmlnLnN1ZmZpeCk7XG4gICAgdGhpcy5hY3Rpb24gPSBuZXcgQmxvY2tEYkFjdGlvbihjb25maWcuZGF0YVNvdXJjZSwgdGhpcy5uYW1lKCksIGxvZ2dlcik7XG4gICAgdGhpcy5ob3N0ID0gY29uZmlnLm5vZGVIb3N0T3JJcDtcbiAgICB0aGlzLnBvcnQgPSBjb25maWcubm9kZVBvcnQ7XG4gICAgdGhpcy51c2VUbHMgPSBjb25maWcudXNlVGxzID8/IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5pbml0UG9pbnQgPSB7XG4gICAgICBpZDogY29uZmlnLmluaXRpYWxIYXNoLFxuICAgICAgc2xvdDogY29uZmlnLmluaXRpYWxTbG90LFxuICAgIH07XG4gICAgdGhpcy5yZWNvbm5lY3Rpb25Db25maWcgPSB7XG4gICAgICBpbml0aWFsRGVsYXk6XG4gICAgICAgIGNvbmZpZy5yZWNvbm5lY3Rpb25Db25maWc/LmluaXRpYWxEZWxheSA/PyBSRUNPTk5FQ1RJT05fSU5JVElBTF9ERUxBWSxcbiAgICAgIG1heERlbGF5OiBjb25maWcucmVjb25uZWN0aW9uQ29uZmlnPy5tYXhEZWxheSA/PyBSRUNPTk5FQ1RJT05fTUFYX0RFTEFZLFxuICAgICAgbWF4QXR0ZW1wdHM6XG4gICAgICAgIGNvbmZpZy5yZWNvbm5lY3Rpb25Db25maWc/Lm1heEF0dGVtcHRzID8/IFJFQ09OTkVDVElPTl9NQVhfQVRURU1QVFMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwcm9jZXNzIGJsb2NrIHdoZW4gYSBibG9jayBmb3JrZWQgbGlicmFyeSBjYWxsIHRoaXMgZnVuY3Rpb25cbiAgICogQHBhcmFtIHJlc3BvbnNlOiBmb3JrZWQgYmxvY2tcbiAgICogQHBhcmFtIHJlcXVlc3ROZXh0OiBhIGZ1bmN0aW9uIHRvIHRlbGwgbm9kZSB0byBzZW5kIG5leHQgYmxvY2tcbiAgICovXG4gIHByaXZhdGUgcm9sbEJhY2t3YXJkID0gYXN5bmMgKFxuICAgIHJlc3BvbnNlOiBCYWNrd2FyZFJlc3BvbnNlLFxuICAgIHJlcXVlc3ROZXh0OiAoKSA9PiB2b2lkXG4gICkgPT4ge1xuICAgIGNvbnN0IGhhc2ggPSAocmVzcG9uc2UucG9pbnQgYXMgUG9pbnQpLmlkO1xuICAgIGNvbnN0IHNhdmVkQmxvY2sgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRCbG9ja1dpdGhIYXNoKGhhc2gpO1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgYFJvbGxpbmcgYmFja3dhcmQgdG8gaGVpZ2h0ICR7XG4gICAgICAgIHNhdmVkQmxvY2s/LmhlaWdodFxuICAgICAgfSBpbiBzY2FubmVyICR7dGhpcy5uYW1lKCl9YFxuICAgICk7XG4gICAgaWYgKHNhdmVkQmxvY2spIHtcbiAgICAgIGNvbnN0IGJsb2NrID0ge1xuICAgICAgICBoYXNoOiBzYXZlZEJsb2NrLmhhc2gsXG4gICAgICAgIGhlaWdodDogc2F2ZWRCbG9jay5oZWlnaHQsXG4gICAgICAgIHBhcmVudEhhc2g6IHNhdmVkQmxvY2sucGFyZW50SGFzaCxcbiAgICAgICAgZXh0cmE6IHNhdmVkQmxvY2suZXh0cmEsXG4gICAgICAgIHRpbWVzdGFtcDogc2F2ZWRCbG9jay50aW1lc3RhbXAsXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5zdGVwQmFja3dhcmQoYmxvY2spO1xuICAgIH1cbiAgICByZXF1ZXN0TmV4dCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTdGVwIGZvcndhcmQgd2hlbiBuZXcgYmxvY2sgYXJyaXZlZCBvZ21pb3MtY2xpZW50IGNhbGwgdGhpcyBmdW5jdGlvblxuICAgKiBAcGFyYW0gcmVzcG9uc2U6IG5ldyBibG9ja1xuICAgKiBAcGFyYW0gcmVxdWVzdE5leHQ6IHRlbGwgbGlicmFyeSB0aGF0IHRoaXMgYmxvY2sgcHJvY2VlZHMuIHBhc3MgbmV4dCBibG9jayB3aGVuIGF2YWlsYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSByb2xsRm9yd2FyZCA9IGFzeW5jIChcbiAgICByZXNwb25zZTogRm9yd2FyZFJlc3BvbnNlLFxuICAgIHJlcXVlc3ROZXh0OiAoKSA9PiB2b2lkXG4gICkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5ibG9jay50eXBlID09PSAncHJhb3MnKSB7XG4gICAgICBjb25zdCBwcmFvc0Jsb2NrID0gcmVzcG9uc2UuYmxvY2sgYXMgQmxvY2tQcmFvcztcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgUXVldWVpbmcgbmV3IGJsb2NrIGF0IGhlaWdodCAke1xuICAgICAgICAgIHByYW9zQmxvY2suaGVpZ2h0XG4gICAgICAgIH0gaW4gc2Nhbm5lciAke3RoaXMubmFtZSgpfWBcbiAgICAgICk7XG4gICAgICBjb25zdCBibG9jayA9IHtcbiAgICAgICAgaGFzaDogcHJhb3NCbG9jay5pZCxcbiAgICAgICAgaGVpZ2h0OiBwcmFvc0Jsb2NrLmhlaWdodCxcbiAgICAgICAgcGFyZW50SGFzaDogcHJhb3NCbG9jay5hbmNlc3RvcixcbiAgICAgICAgZXh0cmE6IGAke3ByYW9zQmxvY2suc2xvdH1gLFxuICAgICAgICAvLyBDYXV0aW9uOiBJbiBjYXNlIG9mIGEgaGFyZCBmb3JrIGFuZCBjaGFuZ2UgaW4gc2xvdCBkdXJhdGlvbiwgdGhpcyBtdXN0IGNoYW5nZSFcbiAgICAgICAgdGltZXN0YW1wOiBwcmFvc0Jsb2NrLnNsb3QgKyBTTE9UX1NIRUxMWV9OVU1CRVIsXG4gICAgICB9O1xuICAgICAgaWYgKHByYW9zQmxvY2sudHJhbnNhY3Rpb25zKVxuICAgICAgICBhd2FpdCB0aGlzLnN0ZXBGb3J3YXJkKGJsb2NrLCBwcmFvc0Jsb2NrLnRyYW5zYWN0aW9ucyk7XG4gICAgfVxuICAgIHJlcXVlc3ROZXh0KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGZpbmQgaW50ZXJzZWN0IGJldHdlZW4gc3RvcmVkIGJsb2NrcyBhbmQgYmxvY2tjaGFpbi5cbiAgICogQHBhcmFtIGNvbnRleHQ6IGJsb2NrY2hhaW4gY29udGV4dFxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kSW50ZXJzZWN0aW9uID0gYXN5bmMgKGNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dCkgPT4ge1xuICAgIGxldCBjb3VudCA9IDE7XG4gICAgbGV0IHNraXAgPSAwO1xuICAgIHdoaWxlIChjb3VudCAhPT0gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IHRoaXMubXV0ZXguYWNxdWlyZSgpO1xuICAgICAgICBjb25zdCBibG9ja3MgPSBhd2FpdCB0aGlzLmFjdGlvbi5nZXRMYXN0U2F2ZWRCbG9ja3Moc2tpcCwgY291bnQpO1xuICAgICAgICByZWxlYXNlKCk7XG4gICAgICAgIGlmIChibG9ja3MubGVuZ3RoID09PSAwKSBjb3VudCA9IDA7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9XG4gICAgICAgICAgYmxvY2tzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gYmxvY2tzLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICAgICAgICBzbG90OiBpdGVtLmV4dHJhID8gcGFyc2VJbnQoaXRlbS5leHRyYSkgOiAwLFxuICAgICAgICAgICAgICAgIGlkOiBpdGVtLmhhc2gsXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiBbdGhpcy5pbml0UG9pbnRdO1xuICAgICAgICBjb25zdCBpbnRlcnNlY3QgPSBhd2FpdCBmaW5kSW50ZXJzZWN0aW9uKGNvbnRleHQsIHBvaW50cyk7XG4gICAgICAgIGNvbnN0IGludGVyc2VjdFBvaW50ID0gaW50ZXJzZWN0LmludGVyc2VjdGlvbiBhcyBQb2ludDtcbiAgICAgICAgbGV0IGhlaWdodCA9IDA7XG4gICAgICAgIGlmIChibG9ja3MubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgZm91bmRlZEJsb2NrID0gYmxvY2tzLmZpbmQoXG4gICAgICAgICAgICAoaXRlbSkgPT4gKGl0ZW0uaGFzaCA9IGludGVyc2VjdFBvaW50LmlkKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGZvdW5kZWRCbG9jaykge1xuICAgICAgICAgICAgaGVpZ2h0ID0gZm91bmRlZEJsb2NrLmhlaWdodDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcG9pbnQ6IGludGVyc2VjdC5pbnRlcnNlY3Rpb24gYXMgUG9pbnQsIGhlaWdodDogaGVpZ2h0IH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgc2tpcCArPSBjb3VudDtcbiAgICAgICAgY291bnQgKj0gMjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfTtcblxuICAvKipcbiAgICogSGFuZGxlcyBvZ21pb3MgY29ubmVjdGlvbiBjbG9zdXJlXG4gICAqL1xuICBwcml2YXRlIGNvbm5lY3Rpb25DbG9zZUhhbmRsZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdPZ21pb3MgY29ubmVjdGlvbiBjbG9zZWQnKTtcbiAgICBpZiAodGhpcy5zdG9wcGVkKSByZXR1cm47XG5cbiAgICBjb25zdCByZXRyeVBvbGljeSA9IHJldHJ5KFxuICAgICAgaGFuZGxlV2hlbigoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgICAgYEFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlY29ubmVjdGluZyB0byBvZ21pb3MgY2xpZW50OiAke2Vycm9yfWBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgbWF4QXR0ZW1wdHM6IHRoaXMucmVjb25uZWN0aW9uQ29uZmlnLm1heEF0dGVtcHRzLFxuICAgICAgICBiYWNrb2ZmOiBuZXcgRXhwb25lbnRpYWxCYWNrb2ZmKHtcbiAgICAgICAgICBtYXhEZWxheTogdGhpcy5yZWNvbm5lY3Rpb25Db25maWcubWF4RGVsYXksXG4gICAgICAgICAgaW5pdGlhbERlbGF5OiB0aGlzLnJlY29ubmVjdGlvbkNvbmZpZy5pbml0aWFsRGVsYXksXG4gICAgICAgIH0pLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBsZXQgdHJpYWwgPSAwO1xuICAgIHJldHJ5UG9saWN5LmV4ZWN1dGUoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJpYWwrKztcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgUmV0cnlpbmcgdG8gY29ubmVjdCB0byBvZ21pb3MgY2xpZW50IGluIHRyaWFsIHN0ZXAgIyR7dHJpYWx9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnN0YXJ0KCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHN0YXJ0IHNjYW5uZXIuIGZpcnN0IGZpbmQgZm9yayBwb2ludC4gZm9yayBhbGwgYmxvY2tzIGFuZCByZXF1ZXN0IHVwZGF0ZXMgZnJvbSBub2RlLlxuICAgKi9cbiAgc3RhcnQgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdGhpcy5zdG9wcGVkID0gZmFsc2U7XG4gICAgY29uc3QgY29udGV4dDogSW50ZXJhY3Rpb25Db250ZXh0ID0gYXdhaXQgY3JlYXRlSW50ZXJhY3Rpb25Db250ZXh0KFxuICAgICAgKGVycikgPT4gdGhpcy5sb2dnZXIuZXJyb3IoYCR7ZXJyfWApLFxuICAgICAgdGhpcy5jb25uZWN0aW9uQ2xvc2VIYW5kbGVyLFxuICAgICAgeyBjb25uZWN0aW9uOiB7IHBvcnQ6IHRoaXMucG9ydCwgaG9zdDogdGhpcy5ob3N0LCB0bHM6IHRoaXMudXNlVGxzIH0gfVxuICAgICk7XG4gICAgY29uc3QgaW50ZXJzZWN0ID0gYXdhaXQgdGhpcy5maW5kSW50ZXJzZWN0aW9uKGNvbnRleHQpO1xuICAgIGlmIChpbnRlcnNlY3QpIHtcbiAgICAgIC8vIGZpbmQgaW50ZXJzZWN0IHRoZW4gc3RhcnQgZnJvbSB0aGF0IHBvaW50XG4gICAgICB0aGlzLmNsaWVudCA9IGF3YWl0IGNyZWF0ZUNoYWluU3luY2hyb25pemF0aW9uQ2xpZW50KFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB7XG4gICAgICAgICAgcm9sbEJhY2t3YXJkOiB0aGlzLnJvbGxCYWNrd2FyZCxcbiAgICAgICAgICByb2xsRm9yd2FyZDogdGhpcy5yb2xsRm9yd2FyZCxcbiAgICAgICAgfSxcbiAgICAgICAgeyBzZXF1ZW50aWFsOiB0cnVlIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmNvbm5lY3RlZCA9IHRydWU7XG4gICAgICBhd2FpdCB0aGlzLmZvcmtCbG9jayhpbnRlcnNlY3QuaGVpZ2h0ICsgMSk7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5yZXN1bWUoW2ludGVyc2VjdC5wb2ludF0sIDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCBzdGFydCBzY2FubmVyLiBpbml0aWFsIGJsb2NrIGlzIGludmFsaWQnKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIHN0b3Agd3MgY29ubmVjdGlvbiB0byBub2RlLlxuICAgKi9cbiAgc3RvcCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgIGF3YWl0IHRoaXMuY2xpZW50LnNodXRkb3duKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSBjb25uZWN0aW9uIHN0YXR1cyBvZiBvZ21pb3Mgc2Nhbm5lclxuICAgKi9cbiAgZ2V0Q29ubmVjdGlvblN0YXR1cyA9ICgpID0+IHRoaXMuY29ubmVjdGVkO1xufVxuXG5leHBvcnQgeyBDYXJkYW5vT2dtaW9zU2Nhbm5lciB9O1xuIl19
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@rosen-bridge/cardano-scanner",
3
+ "version": "0.1.0-52fc0239",
4
+ "description": "A Cardano chain scanner.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/rosen-bridge/scanner.git"
8
+ },
9
+ "license": "MIT",
10
+ "author": "Rosen Team",
11
+ "type": "module",
12
+ "main": "dist/index.js",
13
+ "types": "dist/index.d.ts",
14
+ "files": [
15
+ "dist",
16
+ "CHANGELOG.md"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsc --build tsconfig.build.json",
20
+ "lint": "eslint --fix . && npm run prettify",
21
+ "prettify": "prettier --write . --ignore-path ./.gitignore",
22
+ "release": "npm run test -- --run && npm run build && npm publish --access public",
23
+ "type-check": "tsc --noEmit"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^22.18.0",
27
+ "tsx": "^4.19.4",
28
+ "typescript": "^5.3.3",
29
+ "@rosen-bridge/extended-typeorm": "^0.2.1"
30
+ },
31
+ "engines": {
32
+ "node": ">=22.18.0"
33
+ },
34
+ "dependencies": {
35
+ "@rosen-bridge/abstract-scanner": "^0.1.0-52fc0239",
36
+ "@rosen-bridge/scanner-interfaces": "^0.1.1-52fc0239",
37
+ "@rosen-bridge/rate-limited-axios": "^0.2.1",
38
+ "@rosen-bridge/abstract-logger": "^2.0.1",
39
+ "@blockfrost/blockfrost-js": "^6.0.0",
40
+ "cockatiel": "^3.2.1",
41
+ "@blockfrost/openapi": "0.1.78",
42
+ "@emurgo/cardano-serialization-lib-nodejs": "^13.2.1",
43
+ "@cardano-ogmios/client": "^6.6.1",
44
+ "@cardano-ogmios/schema": "^6.6.1",
45
+ "@rosen-bridge/json-bigint": "^0.1.0"
46
+ }
47
+ }