@rosen-bridge/cardano-observation-extractor 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/dist/extractor/blockfrost.d.ts +8 -25
- package/dist/extractor/blockfrost.d.ts.map +1 -1
- package/dist/extractor/blockfrost.js +8 -73
- package/dist/extractor/koios.d.ts +7 -24
- package/dist/extractor/koios.d.ts.map +1 -1
- package/dist/extractor/koios.js +8 -73
- package/dist/extractor/ogmios.d.ts +7 -24
- package/dist/extractor/ogmios.d.ts.map +1 -1
- package/dist/extractor/ogmios.js +8 -73
- package/package.json +15 -22
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
# @rosen-bridge/cardano-observation-extractor
|
|
2
2
|
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- The observation extractor have been updated to follow the format defined in `abstract-observation-extractor`
|
|
8
|
+
- Update rosen-extractor version to the 10.1.0
|
|
9
|
+
|
|
10
|
+
### Patch Changes
|
|
11
|
+
|
|
12
|
+
- Fix package-lock and move typescript and types/node into root
|
|
13
|
+
- Update eslint and plugins:
|
|
14
|
+
- Apply new rules such as sort imports and file name
|
|
15
|
+
- Update dependencies
|
|
16
|
+
- @rosen-bridge/extended-typeorm@1.0.1
|
|
17
|
+
- @rosen-clients/rate-limited-axios@1.1.0
|
|
18
|
+
- @rosen-bridge/rosen-extractor@10.1.1
|
|
19
|
+
- @rosen-bridge/tokens@4.0.1
|
|
20
|
+
- @rosen-bridge/abstract-logger@3.0.1
|
|
21
|
+
- @rosen-bridge/json-bigint@1.1.0
|
|
22
|
+
- @rosen-clients/ergo-explorer@2.1.0
|
|
23
|
+
- @rosen-clients/ergo-node@3.1.0
|
|
24
|
+
- @rosen-bridge/abstract-observation-extractor@0.2.0
|
|
25
|
+
|
|
26
|
+
## 0.1.2
|
|
27
|
+
|
|
28
|
+
### Patch Changes
|
|
29
|
+
|
|
30
|
+
- Update dependencies
|
|
31
|
+
- @rosen-bridge/abstract-observation-extractor@0.1.2
|
|
32
|
+
- @rosen-bridge/abstract-extractor@2.1.1
|
|
33
|
+
- @rosen-bridge/extended-typeorm@1.0.0
|
|
34
|
+
- @rosen-bridge/tokens@4.0.0
|
|
35
|
+
- @rosen-bridge/rosen-extractor@10.0.0
|
|
36
|
+
- @rosen-bridge/abstract-logger@3.0.0
|
|
37
|
+
|
|
3
38
|
## 0.1.1
|
|
4
39
|
|
|
5
40
|
### Patch Changes
|
|
@@ -1,40 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { components } from '@blockfrost/openapi';
|
|
2
2
|
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
3
|
+
import { AbstractObservationExtractor } from '@rosen-bridge/abstract-observation-extractor';
|
|
4
|
+
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
3
5
|
import { TokenMap } from '@rosen-bridge/tokens';
|
|
4
|
-
import { components } from '@blockfrost/openapi';
|
|
5
|
-
import { Block } from '@rosen-bridge/scanner-interfaces';
|
|
6
|
-
import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
|
|
7
6
|
interface BlockFrostTransaction {
|
|
8
7
|
utxos: components['schemas']['tx_content_utxo'];
|
|
9
8
|
metadata: components['schemas']['tx_content_metadata'];
|
|
10
9
|
}
|
|
11
|
-
export declare class CardanoBlockFrostObservationExtractor extends
|
|
12
|
-
readonly
|
|
13
|
-
|
|
14
|
-
private readonly extractor;
|
|
15
|
-
static readonly FROM_CHAIN: string;
|
|
16
|
-
constructor(dataSource: DataSource, tokens: TokenMap, address: string, logger?: AbstractLogger);
|
|
10
|
+
export declare class CardanoBlockFrostObservationExtractor extends AbstractObservationExtractor<BlockFrostTransaction> {
|
|
11
|
+
readonly FROM_CHAIN: string;
|
|
12
|
+
constructor(lockAddress: string, dataSource: DataSource, tokens: TokenMap, logger?: AbstractLogger);
|
|
17
13
|
/**
|
|
18
14
|
* get Id for current extractor
|
|
19
15
|
*/
|
|
20
16
|
getId: () => string;
|
|
21
17
|
/**
|
|
22
|
-
* gets
|
|
23
|
-
* transactions and in case of success return true and in case of failure returns false
|
|
24
|
-
* @param block
|
|
25
|
-
* @param txs
|
|
26
|
-
*/
|
|
27
|
-
processTransactions: (txs: Array<BlockFrostTransaction>, block: Block) => Promise<boolean>;
|
|
28
|
-
/**
|
|
29
|
-
* fork one block and remove all stored information for this block
|
|
30
|
-
* @param hash: block hash
|
|
31
|
-
*/
|
|
32
|
-
forkBlock: (hash: string) => Promise<void>;
|
|
33
|
-
/**
|
|
34
|
-
* Extractor box initialization
|
|
35
|
-
* No action needed in cardano extractors
|
|
18
|
+
* gets transaction id from TransactionType
|
|
36
19
|
*/
|
|
37
|
-
|
|
20
|
+
getTxId: (tx: BlockFrostTransaction) => string;
|
|
38
21
|
}
|
|
39
22
|
export {};
|
|
40
23
|
//# sourceMappingURL=blockfrost.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockfrost.d.ts","sourceRoot":"","sources":["../../lib/extractor/blockfrost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"blockfrost.d.ts","sourceRoot":"","sources":["../../lib/extractor/blockfrost.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,UAAU,qBAAqB;IAC7B,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAChD,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC;CACxD;AAED,qBAAa,qCAAsC,SAAQ,4BAA4B,CAAC,qBAAqB,CAAC;IAC5G,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAa;gBAGtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,QAAQ,EAChB,MAAM,CAAC,EAAE,cAAc;IAUzB;;OAEG;IACH,KAAK,eAAwC;IAE7C;;OAEG;IACH,OAAO,GAAI,IAAI,qBAAqB,YAAmB;CACxD"}
|
|
@@ -1,82 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { blake2b } from 'blakejs';
|
|
3
|
-
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
1
|
+
import { AbstractObservationExtractor } from '@rosen-bridge/abstract-observation-extractor';
|
|
4
2
|
import { CardanoBlockFrostRosenExtractor } from '@rosen-bridge/rosen-extractor';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
actions;
|
|
10
|
-
extractor;
|
|
11
|
-
static FROM_CHAIN = 'cardano';
|
|
12
|
-
constructor(dataSource, tokens, address, logger) {
|
|
13
|
-
super();
|
|
14
|
-
this.logger = logger ? logger : new DummyLogger();
|
|
15
|
-
this.actions = new ObservationEntityAction(dataSource, this.logger);
|
|
16
|
-
this.extractor = new CardanoBlockFrostRosenExtractor(address, tokens, this.logger);
|
|
3
|
+
export class CardanoBlockFrostObservationExtractor extends AbstractObservationExtractor {
|
|
4
|
+
FROM_CHAIN = 'cardano';
|
|
5
|
+
constructor(lockAddress, dataSource, tokens, logger) {
|
|
6
|
+
super(dataSource, tokens, new CardanoBlockFrostRosenExtractor(lockAddress, tokens, logger), logger);
|
|
17
7
|
}
|
|
18
8
|
/**
|
|
19
9
|
* get Id for current extractor
|
|
20
10
|
*/
|
|
21
11
|
getId = () => 'cardano-blockfrost-extractor';
|
|
22
12
|
/**
|
|
23
|
-
* gets
|
|
24
|
-
* transactions and in case of success return true and in case of failure returns false
|
|
25
|
-
* @param block
|
|
26
|
-
* @param txs
|
|
13
|
+
* gets transaction id from TransactionType
|
|
27
14
|
*/
|
|
28
|
-
|
|
29
|
-
return new Promise((resolve, reject) => {
|
|
30
|
-
try {
|
|
31
|
-
const observations = [];
|
|
32
|
-
txs.forEach((transaction) => {
|
|
33
|
-
const data = this.extractor.get(transaction);
|
|
34
|
-
if (data) {
|
|
35
|
-
const requestId = Buffer.from(blake2b(transaction.utxos.hash, undefined, 32)).toString('hex');
|
|
36
|
-
observations.push({
|
|
37
|
-
fromChain: CardanoBlockFrostObservationExtractor.FROM_CHAIN,
|
|
38
|
-
toChain: data.toChain,
|
|
39
|
-
amount: data.amount,
|
|
40
|
-
sourceChainTokenId: data.sourceChainTokenId,
|
|
41
|
-
targetChainTokenId: data.targetChainTokenId,
|
|
42
|
-
sourceTxId: data.sourceTxId,
|
|
43
|
-
bridgeFee: data.bridgeFee,
|
|
44
|
-
networkFee: data.networkFee,
|
|
45
|
-
sourceBlockId: block.hash,
|
|
46
|
-
requestId: requestId,
|
|
47
|
-
toAddress: data.toAddress,
|
|
48
|
-
fromAddress: data.fromAddress,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
this.actions
|
|
53
|
-
.storeObservations(observations, block, this.getId())
|
|
54
|
-
.then((status) => {
|
|
55
|
-
resolve(status);
|
|
56
|
-
})
|
|
57
|
-
.catch((e) => {
|
|
58
|
-
this.logger.error(`An error occurred during store observations: ${e}`);
|
|
59
|
-
reject(e);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
reject(e);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
};
|
|
67
|
-
/**
|
|
68
|
-
* fork one block and remove all stored information for this block
|
|
69
|
-
* @param hash: block hash
|
|
70
|
-
*/
|
|
71
|
-
forkBlock = async (hash) => {
|
|
72
|
-
await this.actions.deleteBlockObservation(hash, this.getId());
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* Extractor box initialization
|
|
76
|
-
* No action needed in cardano extractors
|
|
77
|
-
*/
|
|
78
|
-
initializeBoxes = async () => {
|
|
79
|
-
return;
|
|
80
|
-
};
|
|
15
|
+
getTxId = (tx) => tx.utxos.hash;
|
|
81
16
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tmcm9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9leHRyYWN0b3IvYmxvY2tmcm9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUU1RixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQVFoRixNQUFNLE9BQU8scUNBQXNDLFNBQVEsNEJBQW1EO0lBQ25HLFVBQVUsR0FBVyxTQUFTLENBQUM7SUFFeEMsWUFDRSxXQUFtQixFQUNuQixVQUFzQixFQUN0QixNQUFnQixFQUNoQixNQUF1QjtRQUV2QixLQUFLLENBQ0gsVUFBVSxFQUNWLE1BQU0sRUFDTixJQUFJLCtCQUErQixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQ2hFLE1BQU0sQ0FDUCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLDhCQUE4QixDQUFDO0lBRTdDOztPQUVHO0lBQ0gsT0FBTyxHQUFHLENBQUMsRUFBeUIsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Q0FDeEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wb25lbnRzIH0gZnJvbSAnQGJsb2NrZnJvc3Qvb3BlbmFwaSc7XG5cbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgQWJzdHJhY3RPYnNlcnZhdGlvbkV4dHJhY3RvciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3Qtb2JzZXJ2YXRpb24tZXh0cmFjdG9yJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuaW1wb3J0IHsgQ2FyZGFub0Jsb2NrRnJvc3RSb3NlbkV4dHJhY3RvciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvcm9zZW4tZXh0cmFjdG9yJztcbmltcG9ydCB7IFRva2VuTWFwIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS90b2tlbnMnO1xuXG5pbnRlcmZhY2UgQmxvY2tGcm9zdFRyYW5zYWN0aW9uIHtcbiAgdXR4b3M6IGNvbXBvbmVudHNbJ3NjaGVtYXMnXVsndHhfY29udGVudF91dHhvJ107XG4gIG1ldGFkYXRhOiBjb21wb25lbnRzWydzY2hlbWFzJ11bJ3R4X2NvbnRlbnRfbWV0YWRhdGEnXTtcbn1cblxuZXhwb3J0IGNsYXNzIENhcmRhbm9CbG9ja0Zyb3N0T2JzZXJ2YXRpb25FeHRyYWN0b3IgZXh0ZW5kcyBBYnN0cmFjdE9ic2VydmF0aW9uRXh0cmFjdG9yPEJsb2NrRnJvc3RUcmFuc2FjdGlvbj4ge1xuICByZWFkb25seSBGUk9NX0NIQUlOOiBzdHJpbmcgPSAnY2FyZGFubyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbG9ja0FkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhU291cmNlOiBEYXRhU291cmNlLFxuICAgIHRva2VuczogVG9rZW5NYXAsXG4gICAgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIsXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgZGF0YVNvdXJjZSxcbiAgICAgIHRva2VucyxcbiAgICAgIG5ldyBDYXJkYW5vQmxvY2tGcm9zdFJvc2VuRXh0cmFjdG9yKGxvY2tBZGRyZXNzLCB0b2tlbnMsIGxvZ2dlciksXG4gICAgICBsb2dnZXIsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgSWQgZm9yIGN1cnJlbnQgZXh0cmFjdG9yXG4gICAqL1xuICBnZXRJZCA9ICgpID0+ICdjYXJkYW5vLWJsb2NrZnJvc3QtZXh0cmFjdG9yJztcblxuICAvKipcbiAgICogZ2V0cyB0cmFuc2FjdGlvbiBpZCBmcm9tIFRyYW5zYWN0aW9uVHlwZVxuICAgKi9cbiAgZ2V0VHhJZCA9ICh0eDogQmxvY2tGcm9zdFRyYW5zYWN0aW9uKSA9PiB0eC51dHhvcy5oYXNoO1xufVxuIl19
|
|
@@ -1,35 +1,18 @@
|
|
|
1
|
-
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
2
1
|
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { AbstractObservationExtractor } from '@rosen-bridge/abstract-observation-extractor';
|
|
3
|
+
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
3
4
|
import { TokenMap } from '@rosen-bridge/tokens';
|
|
4
|
-
import { Block } from '@rosen-bridge/scanner-interfaces';
|
|
5
|
-
import { AbstractExtractor } from '@rosen-bridge/abstract-extractor';
|
|
6
5
|
import { KoiosTransaction } from '../interfaces/koiosTransaction';
|
|
7
|
-
export declare class CardanoKoiosObservationExtractor extends
|
|
8
|
-
readonly
|
|
9
|
-
|
|
10
|
-
private readonly extractor;
|
|
11
|
-
static readonly FROM_CHAIN: string;
|
|
12
|
-
constructor(dataSource: DataSource, tokens: TokenMap, address: string, logger?: AbstractLogger);
|
|
6
|
+
export declare class CardanoKoiosObservationExtractor extends AbstractObservationExtractor<KoiosTransaction> {
|
|
7
|
+
readonly FROM_CHAIN: string;
|
|
8
|
+
constructor(lockAddress: string, dataSource: DataSource, tokens: TokenMap, logger?: AbstractLogger);
|
|
13
9
|
/**
|
|
14
10
|
* get Id for current extractor
|
|
15
11
|
*/
|
|
16
12
|
getId: () => string;
|
|
17
13
|
/**
|
|
18
|
-
* gets
|
|
19
|
-
* transactions and in case of success return true and in case of failure returns false
|
|
20
|
-
* @param block
|
|
21
|
-
* @param txs
|
|
22
|
-
*/
|
|
23
|
-
processTransactions: (txs: Array<KoiosTransaction>, block: Block) => Promise<boolean>;
|
|
24
|
-
/**
|
|
25
|
-
* fork one block and remove all stored information for this block
|
|
26
|
-
* @param hash: block hash
|
|
27
|
-
*/
|
|
28
|
-
forkBlock: (hash: string) => Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Extractor box initialization
|
|
31
|
-
* No action needed in cardano extractors
|
|
14
|
+
* gets transaction id from TransactionType
|
|
32
15
|
*/
|
|
33
|
-
|
|
16
|
+
getTxId: (tx: KoiosTransaction) => string;
|
|
34
17
|
}
|
|
35
18
|
//# sourceMappingURL=koios.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"koios.d.ts","sourceRoot":"","sources":["../../lib/extractor/koios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"koios.d.ts","sourceRoot":"","sources":["../../lib/extractor/koios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,qBAAa,gCAAiC,SAAQ,4BAA4B,CAAC,gBAAgB,CAAC;IAClG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAa;gBAGtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,QAAQ,EAChB,MAAM,CAAC,EAAE,cAAc;IAUzB;;OAEG;IACH,KAAK,eAAmC;IAExC;;OAEG;IACH,OAAO,GAAI,IAAI,gBAAgB,YAAgB;CAChD"}
|
package/dist/extractor/koios.js
CHANGED
|
@@ -1,82 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { blake2b } from 'blakejs';
|
|
3
|
-
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
1
|
+
import { AbstractObservationExtractor } from '@rosen-bridge/abstract-observation-extractor';
|
|
4
2
|
import { CardanoKoiosRosenExtractor } from '@rosen-bridge/rosen-extractor';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
actions;
|
|
10
|
-
extractor;
|
|
11
|
-
static FROM_CHAIN = 'cardano';
|
|
12
|
-
constructor(dataSource, tokens, address, logger) {
|
|
13
|
-
super();
|
|
14
|
-
this.logger = logger ? logger : new DummyLogger();
|
|
15
|
-
this.actions = new ObservationEntityAction(dataSource, this.logger);
|
|
16
|
-
this.extractor = new CardanoKoiosRosenExtractor(address, tokens, this.logger);
|
|
3
|
+
export class CardanoKoiosObservationExtractor extends AbstractObservationExtractor {
|
|
4
|
+
FROM_CHAIN = 'cardano';
|
|
5
|
+
constructor(lockAddress, dataSource, tokens, logger) {
|
|
6
|
+
super(dataSource, tokens, new CardanoKoiosRosenExtractor(lockAddress, tokens, logger), logger);
|
|
17
7
|
}
|
|
18
8
|
/**
|
|
19
9
|
* get Id for current extractor
|
|
20
10
|
*/
|
|
21
11
|
getId = () => 'cardano-koios-extractor';
|
|
22
12
|
/**
|
|
23
|
-
* gets
|
|
24
|
-
* transactions and in case of success return true and in case of failure returns false
|
|
25
|
-
* @param block
|
|
26
|
-
* @param txs
|
|
13
|
+
* gets transaction id from TransactionType
|
|
27
14
|
*/
|
|
28
|
-
|
|
29
|
-
return new Promise((resolve, reject) => {
|
|
30
|
-
try {
|
|
31
|
-
const observations = [];
|
|
32
|
-
txs.forEach((transaction) => {
|
|
33
|
-
const data = this.extractor.get(transaction);
|
|
34
|
-
if (data) {
|
|
35
|
-
const requestId = Buffer.from(blake2b(transaction.tx_hash, undefined, 32)).toString('hex');
|
|
36
|
-
observations.push({
|
|
37
|
-
fromChain: CardanoKoiosObservationExtractor.FROM_CHAIN,
|
|
38
|
-
toChain: data.toChain,
|
|
39
|
-
amount: data.amount,
|
|
40
|
-
sourceChainTokenId: data.sourceChainTokenId,
|
|
41
|
-
targetChainTokenId: data.targetChainTokenId,
|
|
42
|
-
sourceTxId: data.sourceTxId,
|
|
43
|
-
bridgeFee: data.bridgeFee,
|
|
44
|
-
networkFee: data.networkFee,
|
|
45
|
-
sourceBlockId: block.hash,
|
|
46
|
-
requestId: requestId,
|
|
47
|
-
toAddress: data.toAddress,
|
|
48
|
-
fromAddress: data.fromAddress,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
this.actions
|
|
53
|
-
.storeObservations(observations, block, this.getId())
|
|
54
|
-
.then((status) => {
|
|
55
|
-
resolve(status);
|
|
56
|
-
})
|
|
57
|
-
.catch((e) => {
|
|
58
|
-
this.logger.error(`An error occurred during store observations: ${e}`);
|
|
59
|
-
reject(e);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
reject(e);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
};
|
|
67
|
-
/**
|
|
68
|
-
* fork one block and remove all stored information for this block
|
|
69
|
-
* @param hash: block hash
|
|
70
|
-
*/
|
|
71
|
-
forkBlock = async (hash) => {
|
|
72
|
-
await this.actions.deleteBlockObservation(hash, this.getId());
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* Extractor box initialization
|
|
76
|
-
* No action needed in cardano extractors
|
|
77
|
-
*/
|
|
78
|
-
initializeBoxes = async () => {
|
|
79
|
-
return;
|
|
80
|
-
};
|
|
15
|
+
getTxId = (tx) => tx.tx_hash;
|
|
81
16
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia29pb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvZXh0cmFjdG9yL2tvaW9zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRTVGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBSzNFLE1BQU0sT0FBTyxnQ0FBaUMsU0FBUSw0QkFBOEM7SUFDekYsVUFBVSxHQUFXLFNBQVMsQ0FBQztJQUV4QyxZQUNFLFdBQW1CLEVBQ25CLFVBQXNCLEVBQ3RCLE1BQWdCLEVBQ2hCLE1BQXVCO1FBRXZCLEtBQUssQ0FDSCxVQUFVLEVBQ1YsTUFBTSxFQUNOLElBQUksMEJBQTBCLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFDM0QsTUFBTSxDQUNQLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUM7SUFFeEM7O09BRUc7SUFDSCxPQUFPLEdBQUcsQ0FBQyxFQUFvQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDO0NBQ2hEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBBYnN0cmFjdE9ic2VydmF0aW9uRXh0cmFjdG9yIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1vYnNlcnZhdGlvbi1leHRyYWN0b3InO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBDYXJkYW5vS29pb3NSb3NlbkV4dHJhY3RvciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvcm9zZW4tZXh0cmFjdG9yJztcbmltcG9ydCB7IFRva2VuTWFwIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS90b2tlbnMnO1xuXG5pbXBvcnQgeyBLb2lvc1RyYW5zYWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9rb2lvc1RyYW5zYWN0aW9uJztcblxuZXhwb3J0IGNsYXNzIENhcmRhbm9Lb2lvc09ic2VydmF0aW9uRXh0cmFjdG9yIGV4dGVuZHMgQWJzdHJhY3RPYnNlcnZhdGlvbkV4dHJhY3RvcjxLb2lvc1RyYW5zYWN0aW9uPiB7XG4gIHJlYWRvbmx5IEZST01fQ0hBSU46IHN0cmluZyA9ICdjYXJkYW5vJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBsb2NrQWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGFTb3VyY2U6IERhdGFTb3VyY2UsXG4gICAgdG9rZW5zOiBUb2tlbk1hcCxcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcixcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBkYXRhU291cmNlLFxuICAgICAgdG9rZW5zLFxuICAgICAgbmV3IENhcmRhbm9Lb2lvc1Jvc2VuRXh0cmFjdG9yKGxvY2tBZGRyZXNzLCB0b2tlbnMsIGxvZ2dlciksXG4gICAgICBsb2dnZXIsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgSWQgZm9yIGN1cnJlbnQgZXh0cmFjdG9yXG4gICAqL1xuICBnZXRJZCA9ICgpID0+ICdjYXJkYW5vLWtvaW9zLWV4dHJhY3Rvcic7XG5cbiAgLyoqXG4gICAqIGdldHMgdHJhbnNhY3Rpb24gaWQgZnJvbSBUcmFuc2FjdGlvblR5cGVcbiAgICovXG4gIGdldFR4SWQgPSAodHg6IEtvaW9zVHJhbnNhY3Rpb24pID0+IHR4LnR4X2hhc2g7XG59XG4iXX0=
|
|
@@ -1,35 +1,18 @@
|
|
|
1
|
-
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
1
|
import { Transaction } from '@cardano-ogmios/schema';
|
|
2
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
3
|
+
import { AbstractObservationExtractor } from '@rosen-bridge/abstract-observation-extractor';
|
|
3
4
|
import { DataSource } from '@rosen-bridge/extended-typeorm';
|
|
4
5
|
import { TokenMap } from '@rosen-bridge/tokens';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
readonly logger: AbstractLogger;
|
|
9
|
-
private readonly actions;
|
|
10
|
-
private readonly extractor;
|
|
11
|
-
static readonly FROM_CHAIN: string;
|
|
12
|
-
constructor(dataSource: DataSource, tokens: TokenMap, address: string, logger?: AbstractLogger);
|
|
6
|
+
export declare class CardanoOgmiosObservationExtractor extends AbstractObservationExtractor<Transaction> {
|
|
7
|
+
readonly FROM_CHAIN: string;
|
|
8
|
+
constructor(lockAddress: string, dataSource: DataSource, tokens: TokenMap, logger?: AbstractLogger);
|
|
13
9
|
/**
|
|
14
10
|
* get Id for current extractor
|
|
15
11
|
*/
|
|
16
12
|
getId: () => string;
|
|
17
13
|
/**
|
|
18
|
-
* gets
|
|
19
|
-
* transactions and in case of success return true and in case of failure returns false
|
|
20
|
-
* @param block
|
|
21
|
-
* @param txs
|
|
22
|
-
*/
|
|
23
|
-
processTransactions: (txs: Array<Transaction>, block: Block) => Promise<boolean>;
|
|
24
|
-
/**
|
|
25
|
-
* fork one block and remove all stored information for this block
|
|
26
|
-
* @param hash: block hash
|
|
27
|
-
*/
|
|
28
|
-
forkBlock: (hash: string) => Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Extractor box initialization
|
|
31
|
-
* No action needed in cardano extractors
|
|
14
|
+
* gets transaction id from TransactionType
|
|
32
15
|
*/
|
|
33
|
-
|
|
16
|
+
getTxId: (tx: Transaction) => string;
|
|
34
17
|
}
|
|
35
18
|
//# sourceMappingURL=ogmios.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ogmios.d.ts","sourceRoot":"","sources":["../../lib/extractor/ogmios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ogmios.d.ts","sourceRoot":"","sources":["../../lib/extractor/ogmios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,qBAAa,iCAAkC,SAAQ,4BAA4B,CAAC,WAAW,CAAC;IAC9F,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAa;gBAGtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,QAAQ,EAChB,MAAM,CAAC,EAAE,cAAc;IASzB;;OAEG;IACH,KAAK,eAAoC;IAEzC;;OAEG;IACH,OAAO,GAAI,IAAI,WAAW,YAAW;CACtC"}
|
package/dist/extractor/ogmios.js
CHANGED
|
@@ -1,82 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Buffer } from 'buffer';
|
|
3
|
-
import { blake2b } from 'blakejs';
|
|
1
|
+
import { AbstractObservationExtractor } from '@rosen-bridge/abstract-observation-extractor';
|
|
4
2
|
import { CardanoOgmiosRosenExtractor } from '@rosen-bridge/rosen-extractor';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
actions;
|
|
10
|
-
extractor;
|
|
11
|
-
static FROM_CHAIN = 'cardano';
|
|
12
|
-
constructor(dataSource, tokens, address, logger) {
|
|
13
|
-
super();
|
|
14
|
-
this.logger = logger ? logger : new DummyLogger();
|
|
15
|
-
this.actions = new ObservationEntityAction(dataSource, this.logger);
|
|
16
|
-
this.extractor = new CardanoOgmiosRosenExtractor(address, tokens, this.logger);
|
|
3
|
+
export class CardanoOgmiosObservationExtractor extends AbstractObservationExtractor {
|
|
4
|
+
FROM_CHAIN = 'cardano';
|
|
5
|
+
constructor(lockAddress, dataSource, tokens, logger) {
|
|
6
|
+
super(dataSource, tokens, new CardanoOgmiosRosenExtractor(lockAddress, tokens, logger));
|
|
17
7
|
}
|
|
18
8
|
/**
|
|
19
9
|
* get Id for current extractor
|
|
20
10
|
*/
|
|
21
11
|
getId = () => 'cardano-ogmios-extractor';
|
|
22
12
|
/**
|
|
23
|
-
* gets
|
|
24
|
-
* transactions and in case of success return true and in case of failure returns false
|
|
25
|
-
* @param block
|
|
26
|
-
* @param txs
|
|
13
|
+
* gets transaction id from TransactionType
|
|
27
14
|
*/
|
|
28
|
-
|
|
29
|
-
return new Promise((resolve, reject) => {
|
|
30
|
-
try {
|
|
31
|
-
const observations = [];
|
|
32
|
-
for (const transaction of txs) {
|
|
33
|
-
const data = this.extractor.get(transaction);
|
|
34
|
-
if (data) {
|
|
35
|
-
const requestId = Buffer.from(blake2b(transaction.id, undefined, 32)).toString('hex');
|
|
36
|
-
observations.push({
|
|
37
|
-
fromChain: CardanoOgmiosObservationExtractor.FROM_CHAIN,
|
|
38
|
-
toChain: data.toChain,
|
|
39
|
-
amount: data.amount,
|
|
40
|
-
sourceChainTokenId: data.sourceChainTokenId,
|
|
41
|
-
targetChainTokenId: data.targetChainTokenId,
|
|
42
|
-
sourceTxId: data.sourceTxId,
|
|
43
|
-
bridgeFee: data.bridgeFee,
|
|
44
|
-
networkFee: data.networkFee,
|
|
45
|
-
sourceBlockId: block.hash,
|
|
46
|
-
requestId: requestId,
|
|
47
|
-
toAddress: data.toAddress,
|
|
48
|
-
fromAddress: data.fromAddress,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
this.actions
|
|
53
|
-
.storeObservations(observations, block, this.getId())
|
|
54
|
-
.then((status) => {
|
|
55
|
-
resolve(status);
|
|
56
|
-
})
|
|
57
|
-
.catch((e) => {
|
|
58
|
-
this.logger.error(`An error occurred during store observations: ${e}`);
|
|
59
|
-
reject(e);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
reject(e);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
};
|
|
67
|
-
/**
|
|
68
|
-
* fork one block and remove all stored information for this block
|
|
69
|
-
* @param hash: block hash
|
|
70
|
-
*/
|
|
71
|
-
forkBlock = async (hash) => {
|
|
72
|
-
await this.actions.deleteBlockObservation(hash, this.getId());
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* Extractor box initialization
|
|
76
|
-
* No action needed in cardano extractors
|
|
77
|
-
*/
|
|
78
|
-
initializeBoxes = async () => {
|
|
79
|
-
return;
|
|
80
|
-
};
|
|
15
|
+
getTxId = (tx) => tx.id;
|
|
81
16
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2dtaW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2V4dHJhY3Rvci9vZ21pb3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFNUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHNUUsTUFBTSxPQUFPLGlDQUFrQyxTQUFRLDRCQUF5QztJQUNyRixVQUFVLEdBQVcsU0FBUyxDQUFDO0lBRXhDLFlBQ0UsV0FBbUIsRUFDbkIsVUFBc0IsRUFDdEIsTUFBZ0IsRUFDaEIsTUFBdUI7UUFFdkIsS0FBSyxDQUNILFVBQVUsRUFDVixNQUFNLEVBQ04sSUFBSSwyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUM3RCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO0lBRXpDOztPQUVHO0lBQ0gsT0FBTyxHQUFHLENBQUMsRUFBZSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0NBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICdAY2FyZGFuby1vZ21pb3Mvc2NoZW1hJztcblxuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgeyBBYnN0cmFjdE9ic2VydmF0aW9uRXh0cmFjdG9yIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1vYnNlcnZhdGlvbi1leHRyYWN0b3InO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBDYXJkYW5vT2dtaW9zUm9zZW5FeHRyYWN0b3IgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3Jvc2VuLWV4dHJhY3Rvcic7XG5pbXBvcnQgeyBUb2tlbk1hcCB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvdG9rZW5zJztcblxuZXhwb3J0IGNsYXNzIENhcmRhbm9PZ21pb3NPYnNlcnZhdGlvbkV4dHJhY3RvciBleHRlbmRzIEFic3RyYWN0T2JzZXJ2YXRpb25FeHRyYWN0b3I8VHJhbnNhY3Rpb24+IHtcbiAgcmVhZG9ubHkgRlJPTV9DSEFJTjogc3RyaW5nID0gJ2NhcmRhbm8nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGxvY2tBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICB0b2tlbnM6IFRva2VuTWFwLFxuICAgIGxvZ2dlcj86IEFic3RyYWN0TG9nZ2VyLFxuICApIHtcbiAgICBzdXBlcihcbiAgICAgIGRhdGFTb3VyY2UsXG4gICAgICB0b2tlbnMsXG4gICAgICBuZXcgQ2FyZGFub09nbWlvc1Jvc2VuRXh0cmFjdG9yKGxvY2tBZGRyZXNzLCB0b2tlbnMsIGxvZ2dlciksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXQgSWQgZm9yIGN1cnJlbnQgZXh0cmFjdG9yXG4gICAqL1xuICBnZXRJZCA9ICgpID0+ICdjYXJkYW5vLW9nbWlvcy1leHRyYWN0b3InO1xuXG4gIC8qKlxuICAgKiBnZXRzIHRyYW5zYWN0aW9uIGlkIGZyb20gVHJhbnNhY3Rpb25UeXBlXG4gICAqL1xuICBnZXRUeElkID0gKHR4OiBUcmFuc2FjdGlvbikgPT4gdHguaWQ7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rosen-bridge/cardano-observation-extractor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Event observation data extractor for Cardano chain",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -17,33 +17,26 @@
|
|
|
17
17
|
],
|
|
18
18
|
"scripts": {
|
|
19
19
|
"build": "tsc --build tsconfig.build.json",
|
|
20
|
-
"
|
|
20
|
+
"clean": "rimraf dist && rimraf tsconfig.build.tsbuildinfo",
|
|
21
21
|
"lint": "eslint --fix . && npm run prettify",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
22
|
+
"lint:check": "eslint . && npm run prettify:check",
|
|
23
|
+
"prettify": "prettier --write . --ignore-path ../../../.gitignore",
|
|
24
|
+
"prettify:check": "prettier --check . --ignore-path ../../../.gitignore",
|
|
25
|
+
"release": "npm run clean && npm run build && npm publish --access public",
|
|
25
26
|
"type-check": "tsc --noEmit"
|
|
26
27
|
},
|
|
27
|
-
"devDependencies": {
|
|
28
|
-
"@rosen-bridge/abstract-scanner": "^0.1.0",
|
|
29
|
-
"@types/node": "^22.18.0",
|
|
30
|
-
"@vitest/coverage-istanbul": "^3.1.4",
|
|
31
|
-
"tsx": "^4.19.4",
|
|
32
|
-
"typescript": "^5.3.3",
|
|
33
|
-
"vitest": "^3.1.4"
|
|
34
|
-
},
|
|
35
28
|
"dependencies": {
|
|
36
|
-
"@blockfrost/openapi": "0.1.
|
|
29
|
+
"@blockfrost/openapi": "0.1.81",
|
|
37
30
|
"@cardano-ogmios/schema": "^6.6.1",
|
|
38
31
|
"@emurgo/cardano-serialization-lib-nodejs": "^13.2.1",
|
|
39
|
-
"@rosen-bridge/abstract-
|
|
40
|
-
"@rosen-bridge/abstract-
|
|
41
|
-
"@rosen-bridge/
|
|
42
|
-
"@rosen-bridge/
|
|
43
|
-
"@rosen-bridge/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
32
|
+
"@rosen-bridge/abstract-logger": "^3.0.1",
|
|
33
|
+
"@rosen-bridge/abstract-observation-extractor": "^0.2.0",
|
|
34
|
+
"@rosen-bridge/extended-typeorm": "^1.0.1",
|
|
35
|
+
"@rosen-bridge/rosen-extractor": "^10.1.1",
|
|
36
|
+
"@rosen-bridge/tokens": "^4.0.1"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"tsx": "^4.19.4"
|
|
47
40
|
},
|
|
48
41
|
"engines": {
|
|
49
42
|
"node": ">=22.18.0"
|