@my-packages-changeit/bitcoin-runes-observation-extractor 3.0.6

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 (31) hide show
  1. package/CHANGELOG.md +232 -0
  2. package/README.md +24 -0
  3. package/dist/abstractRunesProtocolNetwork.d.ts +13 -0
  4. package/dist/abstractRunesProtocolNetwork.d.ts.map +1 -0
  5. package/dist/abstractRunesProtocolNetwork.js +8 -0
  6. package/dist/bitcoinRunesAbstractObservationExtractor.d.ts +22 -0
  7. package/dist/bitcoinRunesAbstractObservationExtractor.d.ts.map +1 -0
  8. package/dist/bitcoinRunesAbstractObservationExtractor.js +81 -0
  9. package/dist/bitcoinRunesEsploraObservationExtractor.d.ts +18 -0
  10. package/dist/bitcoinRunesEsploraObservationExtractor.d.ts.map +1 -0
  11. package/dist/bitcoinRunesEsploraObservationExtractor.js +16 -0
  12. package/dist/bitcoinRunesRpcObservationExtractor.d.ts +18 -0
  13. package/dist/bitcoinRunesRpcObservationExtractor.d.ts.map +1 -0
  14. package/dist/bitcoinRunesRpcObservationExtractor.js +16 -0
  15. package/dist/constants.d.ts +2 -0
  16. package/dist/constants.d.ts.map +1 -0
  17. package/dist/constants.js +2 -0
  18. package/dist/index.d.ts +7 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +7 -0
  21. package/dist/ordiscanRunesProtocolNetwork.d.ts +17 -0
  22. package/dist/ordiscanRunesProtocolNetwork.d.ts.map +1 -0
  23. package/dist/ordiscanRunesProtocolNetwork.js +53 -0
  24. package/dist/tsconfig.tsbuildinfo +1 -0
  25. package/dist/types.d.ts +57 -0
  26. package/dist/types.d.ts.map +1 -0
  27. package/dist/types.js +2 -0
  28. package/dist/unisatRunesProtocolNetwork.d.ts +18 -0
  29. package/dist/unisatRunesProtocolNetwork.d.ts.map +1 -0
  30. package/dist/unisatRunesProtocolNetwork.js +78 -0
  31. package/package.json +50 -0
@@ -0,0 +1,57 @@
1
+ export type TxOutputRune = {
2
+ address: string;
3
+ vout: number;
4
+ runeId: string;
5
+ runeAmount: string;
6
+ };
7
+ export interface UnisatResponse<Data> {
8
+ code: number;
9
+ msg?: string;
10
+ data: Data;
11
+ }
12
+ export interface UnisatTxRunes {
13
+ detail: UnisatBoxDetail[];
14
+ height: number;
15
+ start: number;
16
+ total: number;
17
+ }
18
+ export interface UnisatBoxDetail {
19
+ type: string;
20
+ address: string;
21
+ amount: string;
22
+ height: number;
23
+ txidx: number;
24
+ txid: string;
25
+ timestamp: number;
26
+ runeId: string;
27
+ rune: string;
28
+ spacedRune: string;
29
+ divisibility: number;
30
+ vout: number;
31
+ spentTxid: string;
32
+ spentVout: number;
33
+ }
34
+ export interface OrdiscanRunesData {
35
+ txid: string;
36
+ runestone_messages: OrdiscanRunestoneMessage[];
37
+ inputs: OrdiscanRunesTxInputUtxo[];
38
+ outputs: OrdiscanRunesTxOutputUtxo[];
39
+ timestamp: string;
40
+ }
41
+ export interface OrdiscanRunesTxInputUtxo {
42
+ address: string;
43
+ output: string;
44
+ rune: string;
45
+ rune_amount: string;
46
+ }
47
+ export interface OrdiscanRunesTxOutputUtxo {
48
+ address: string;
49
+ rune: string;
50
+ rune_amount: string;
51
+ vout: number;
52
+ }
53
+ export interface OrdiscanRunestoneMessage {
54
+ rune: string;
55
+ type: 'TRANSFER' | 'MINT' | 'ETCH';
56
+ }
57
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,WAAW,cAAc,CAAC,IAAI;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,wBAAwB,EAAE,CAAC;IAC/C,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACnC,OAAO,EAAE,yBAAyB,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;CACpC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFR4T3V0cHV0UnVuZSA9IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICB2b3V0OiBudW1iZXI7XG4gIHJ1bmVJZDogc3RyaW5nO1xuICBydW5lQW1vdW50OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFVuaXNhdFJlc3BvbnNlPERhdGE+IHtcbiAgY29kZTogbnVtYmVyO1xuICBtc2c/OiBzdHJpbmc7XG4gIGRhdGE6IERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5pc2F0VHhSdW5lcyB7XG4gIGRldGFpbDogVW5pc2F0Qm94RGV0YWlsW107XG4gIGhlaWdodDogbnVtYmVyO1xuICBzdGFydDogbnVtYmVyO1xuICB0b3RhbDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaXNhdEJveERldGFpbCB7XG4gIHR5cGU6IHN0cmluZztcbiAgYWRkcmVzczogc3RyaW5nO1xuICBhbW91bnQ6IHN0cmluZztcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIHR4aWR4OiBudW1iZXI7XG4gIHR4aWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIHJ1bmVJZDogc3RyaW5nO1xuICBydW5lOiBzdHJpbmc7XG4gIHNwYWNlZFJ1bmU6IHN0cmluZztcbiAgZGl2aXNpYmlsaXR5OiBudW1iZXI7XG4gIHZvdXQ6IG51bWJlcjtcbiAgc3BlbnRUeGlkOiBzdHJpbmc7XG4gIHNwZW50Vm91dDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZGlzY2FuUnVuZXNEYXRhIHtcbiAgdHhpZDogc3RyaW5nO1xuICBydW5lc3RvbmVfbWVzc2FnZXM6IE9yZGlzY2FuUnVuZXN0b25lTWVzc2FnZVtdO1xuICBpbnB1dHM6IE9yZGlzY2FuUnVuZXNUeElucHV0VXR4b1tdO1xuICBvdXRwdXRzOiBPcmRpc2NhblJ1bmVzVHhPdXRwdXRVdHhvW107XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9yZGlzY2FuUnVuZXNUeElucHV0VXR4byB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgb3V0cHV0OiBzdHJpbmc7XG4gIHJ1bmU6IHN0cmluZztcbiAgcnVuZV9hbW91bnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmRpc2NhblJ1bmVzVHhPdXRwdXRVdHhvIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBydW5lOiBzdHJpbmc7XG4gIHJ1bmVfYW1vdW50OiBzdHJpbmc7XG4gIHZvdXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmRpc2NhblJ1bmVzdG9uZU1lc3NhZ2Uge1xuICBydW5lOiBzdHJpbmc7XG4gIHR5cGU6ICdUUkFOU0ZFUicgfCAnTUlOVCcgfCAnRVRDSCc7XG59XG4iXX0=
@@ -0,0 +1,18 @@
1
+ import { AbstractLogger } from '@rosen-bridge/abstract-logger';
2
+ import { Axios } from '@rosen-clients/rate-limited-axios';
3
+ import { AbstractRunesProtocolNetwork } from './abstractRunesProtocolNetwork';
4
+ import { TxOutputRune } from './types';
5
+ export declare class UnisatRunesProtocolNetwork extends AbstractRunesProtocolNetwork {
6
+ protected readonly unisatUrl: string;
7
+ protected readonly unisatApiKey: string;
8
+ protected unisatClient: Axios;
9
+ protected readonly PAGE_SIZE = 500;
10
+ constructor(unisatUrl: string, unisatApiKey: string, logger?: AbstractLogger);
11
+ /**
12
+ * returns the Runes transfer of a transaction
13
+ * @param txId
14
+ * @param height
15
+ */
16
+ getTxOutputRunes: (txId: string, height: number) => Promise<TxOutputRune[]>;
17
+ }
18
+ //# sourceMappingURL=unisatRunesProtocolNetwork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unisatRunesProtocolNetwork.d.ts","sourceRoot":"","sources":["../lib/unisatRunesProtocolNetwork.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAyB,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAE5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EACL,YAAY,EAIb,MAAM,SAAS,CAAC;AAEjB,qBAAa,0BAA2B,SAAQ,4BAA4B;IAKxE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM;IACpC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM;IALzC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC;IAC9B,SAAS,CAAC,QAAQ,CAAC,SAAS,OAAO;gBAGd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACvC,MAAM,CAAC,EAAE,cAAc;IAiBzB;;;;OAIG;IACH,gBAAgB,GACd,MAAM,MAAM,EACZ,QAAQ,MAAM,KACb,OAAO,CAAC,YAAY,EAAE,CAAC,CA8DxB;CACH"}
@@ -0,0 +1,78 @@
1
+ import JsonBigInt from '@rosen-bridge/json-bigint';
2
+ import RateLimitedAxios from '@rosen-clients/rate-limited-axios';
3
+ import { AbstractRunesProtocolNetwork } from './abstractRunesProtocolNetwork';
4
+ export class UnisatRunesProtocolNetwork extends AbstractRunesProtocolNetwork {
5
+ unisatUrl;
6
+ unisatApiKey;
7
+ unisatClient;
8
+ PAGE_SIZE = 500;
9
+ constructor(unisatUrl, unisatApiKey, logger) {
10
+ super(logger);
11
+ this.unisatUrl = unisatUrl;
12
+ this.unisatApiKey = unisatApiKey;
13
+ // init Unisat client
14
+ const unisatHeaders = { 'Content-Type': 'application/json' };
15
+ // Add API key to headers if provided
16
+ if (unisatApiKey) {
17
+ Object.assign(unisatHeaders, { Authorization: `Bearer ${unisatApiKey}` });
18
+ }
19
+ this.unisatClient = RateLimitedAxios.create({
20
+ baseURL: unisatUrl,
21
+ headers: unisatHeaders,
22
+ });
23
+ }
24
+ /**
25
+ * returns the Runes transfer of a transaction
26
+ * @param txId
27
+ * @param height
28
+ */
29
+ getTxOutputRunes = async (txId, height) => {
30
+ // Transform the RPC transaction to the expected BitcoinRunesTx format
31
+ const runes = [];
32
+ // get the runes transfers of the transaction from Unisat
33
+ let txRunes = [];
34
+ try {
35
+ let offset = 0;
36
+ let response = await this.unisatClient.get(`/v1/indexer/runes/event?txid=${txId}&start=${offset}&limit=${this.PAGE_SIZE}`);
37
+ this.logger.debug(`requested 'indexer/runes/event' filtering txId [${txId}] on offset|limit [${offset}|${this.PAGE_SIZE}]. Response: ${JsonBigInt.stringify(response.data)}`);
38
+ const total = response.data.data.total;
39
+ while (true) {
40
+ const runes = response.data.data;
41
+ if (height > runes.height) {
42
+ throw new Error(`UnisatRunesProtocolNetwork is not synced. processing block height is [${height}] and synced height of network is [${runes.height}]`);
43
+ }
44
+ if (runes.detail.length === 0)
45
+ break;
46
+ txRunes.push(...response.data.data.detail);
47
+ offset += this.PAGE_SIZE;
48
+ if (offset > total)
49
+ break;
50
+ response = await this.unisatClient.get(`/v1/indexer/runes/event?txid=${txId}&start=${offset}&limit=${this.PAGE_SIZE}`);
51
+ this.logger.debug(`requested 'indexer/runes/event' filtering txId [${txId}] on offset|limit [${offset}|${this.PAGE_SIZE}]. Response: ${JsonBigInt.stringify(response.data)}`);
52
+ }
53
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
+ }
55
+ catch (e) {
56
+ const baseError = `Failed to get runes event for tx [${txId}] from Unisat: `;
57
+ if (e.response) {
58
+ throw new Error(baseError + `${JsonBigInt.stringify(e.response.data)}`);
59
+ }
60
+ throw new Error(baseError + e.message);
61
+ }
62
+ for (const transfer of txRunes) {
63
+ if (transfer.txid !== txId) {
64
+ throw new Error(`ImpossibleBehavior: Fetched runes event for tx [${txId}] but got a transfer with txId [${transfer.txid}]`);
65
+ }
66
+ if (transfer.type === 'send')
67
+ continue;
68
+ runes.push({
69
+ address: transfer.address,
70
+ runeId: transfer.runeId,
71
+ runeAmount: transfer.amount,
72
+ vout: transfer.vout,
73
+ });
74
+ }
75
+ return runes;
76
+ };
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pc2F0UnVuZXNQcm90b2NvbE5ldHdvcmsuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvdW5pc2F0UnVuZXNQcm90b2NvbE5ldHdvcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxnQkFBMkIsTUFBTSxtQ0FBbUMsQ0FBQztBQUU1RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQVE5RSxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsNEJBQTRCO0lBS3JEO0lBQ0E7SUFMWCxZQUFZLENBQVE7SUFDWCxTQUFTLEdBQUcsR0FBRyxDQUFDO0lBRW5DLFlBQ3FCLFNBQWlCLEVBQ2pCLFlBQW9CLEVBQ3ZDLE1BQXVCO1FBRXZCLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUpLLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFLdkMscUJBQXFCO1FBQ3JCLE1BQU0sYUFBYSxHQUFHLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDN0QscUNBQXFDO1FBQ3JDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzFDLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLE9BQU8sRUFBRSxhQUFhO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZ0JBQWdCLEdBQUcsS0FBSyxFQUN0QixJQUFZLEVBQ1osTUFBYyxFQUNXLEVBQUU7UUFDM0Isc0VBQXNFO1FBQ3RFLE1BQU0sS0FBSyxHQUFtQixFQUFFLENBQUM7UUFFakMseURBQXlE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T0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IEpzb25CaWdJbnQgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5pbXBvcnQgUmF0ZUxpbWl0ZWRBeGlvcywgeyBBeGlvcyB9IGZyb20gJ0Byb3Nlbi1jbGllbnRzL3JhdGUtbGltaXRlZC1heGlvcyc7XG5cbmltcG9ydCB7IEFic3RyYWN0UnVuZXNQcm90b2NvbE5ldHdvcmsgfSBmcm9tICcuL2Fic3RyYWN0UnVuZXNQcm90b2NvbE5ldHdvcmsnO1xuaW1wb3J0IHtcbiAgVHhPdXRwdXRSdW5lLFxuICBVbmlzYXRCb3hEZXRhaWwsXG4gIFVuaXNhdFJlc3BvbnNlLFxuICBVbmlzYXRUeFJ1bmVzLFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFVuaXNhdFJ1bmVzUHJvdG9jb2xOZXR3b3JrIGV4dGVuZHMgQWJzdHJhY3RSdW5lc1Byb3RvY29sTmV0d29yayB7XG4gIHByb3RlY3RlZCB1bmlzYXRDbGllbnQ6IEF4aW9zO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgUEFHRV9TSVpFID0gNTAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSB1bmlzYXRVcmw6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdW5pc2F0QXBpS2V5OiBzdHJpbmcsXG4gICAgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIsXG4gICkge1xuICAgIHN1cGVyKGxvZ2dlcik7XG5cbiAgICAvLyBpbml0IFVuaXNhdCBjbGllbnRcbiAgICBjb25zdCB1bmlzYXRIZWFkZXJzID0geyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH07XG4gICAgLy8gQWRkIEFQSSBrZXkgdG8gaGVhZGVycyBpZiBwcm92aWRlZFxuICAgIGlmICh1bmlzYXRBcGlLZXkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odW5pc2F0SGVhZGVycywgeyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dW5pc2F0QXBpS2V5fWAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51bmlzYXRDbGllbnQgPSBSYXRlTGltaXRlZEF4aW9zLmNyZWF0ZSh7XG4gICAgICBiYXNlVVJMOiB1bmlzYXRVcmwsXG4gICAgICBoZWFkZXJzOiB1bmlzYXRIZWFkZXJzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHJldHVybnMgdGhlIFJ1bmVzIHRyYW5zZmVyIG9mIGEgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHR4SWRcbiAgICogQHBhcmFtIGhlaWdodFxuICAgKi9cbiAgZ2V0VHhPdXRwdXRSdW5lcyA9IGFzeW5jIChcbiAgICB0eElkOiBzdHJpbmcsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICk6IFByb21pc2U8VHhPdXRwdXRSdW5lW10+ID0+IHtcbiAgICAvLyBUcmFuc2Zvcm0gdGhlIFJQQyB0cmFuc2FjdGlvbiB0byB0aGUgZXhwZWN0ZWQgQml0Y29pblJ1bmVzVHggZm9ybWF0XG4gICAgY29uc3QgcnVuZXM6IFR4T3V0cHV0UnVuZVtdID0gW107XG5cbiAgICAvLyBnZXQgdGhlIHJ1bmVzIHRyYW5zZmVycyBvZiB0aGUgdHJhbnNhY3Rpb24gZnJvbSBVbmlzYXRcbiAgICBsZXQgdHhSdW5lczogVW5pc2F0Qm94RGV0YWlsW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVuaXNhdENsaWVudC5nZXQ8VW5pc2F0UmVzcG9uc2U8VW5pc2F0VHhSdW5lcz4+KFxuICAgICAgICBgL3YxL2luZGV4ZXIvcnVuZXMvZXZlbnQ/dHhpZD0ke3R4SWR9JnN0YXJ0PSR7b2Zmc2V0fSZsaW1pdD0ke3RoaXMuUEFHRV9TSVpFfWAsXG4gICAgICApO1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGByZXF1ZXN0ZWQgJ2luZGV4ZXIvcnVuZXMvZXZlbnQnIGZpbHRlcmluZyB0eElkIFske3R4SWR9XSBvbiBvZmZzZXR8bGltaXQgWyR7b2Zmc2V0fXwke3RoaXMuUEFHRV9TSVpFfV0uIFJlc3BvbnNlOiAke0pzb25CaWdJbnQuc3RyaW5naWZ5KFxuICAgICAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICAgICl9YCxcbiAgICAgICk7XG4gICAgICBjb25zdCB0b3RhbCA9IHJlc3BvbnNlLmRhdGEuZGF0YS50b3RhbDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGNvbnN0IHJ1bmVzID0gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgICAgICBpZiAoaGVpZ2h0ID4gcnVuZXMuaGVpZ2h0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFVuaXNhdFJ1bmVzUHJvdG9jb2xOZXR3b3JrIGlzIG5vdCBzeW5jZWQuIHByb2Nlc3NpbmcgYmxvY2sgaGVpZ2h0IGlzIFske2hlaWdodH1dIGFuZCBzeW5jZWQgaGVpZ2h0IG9mIG5ldHdvcmsgaXMgWyR7cnVuZXMuaGVpZ2h0fV1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1bmVzLmRldGFpbC5sZW5ndGggPT09IDApIGJyZWFrO1xuICAgICAgICB0eFJ1bmVzLnB1c2goLi4ucmVzcG9uc2UuZGF0YS5kYXRhLmRldGFpbCk7XG4gICAgICAgIG9mZnNldCArPSB0aGlzLlBBR0VfU0laRTtcbiAgICAgICAgaWYgKG9mZnNldCA+IHRvdGFsKSBicmVhaztcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVuaXNhdENsaWVudC5nZXQ8VW5pc2F0UmVzcG9uc2U8VW5pc2F0VHhSdW5lcz4+KFxuICAgICAgICAgIGAvdjEvaW5kZXhlci9ydW5lcy9ldmVudD90eGlkPSR7dHhJZH0mc3RhcnQ9JHtvZmZzZXR9JmxpbWl0PSR7dGhpcy5QQUdFX1NJWkV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgYHJlcXVlc3RlZCAnaW5kZXhlci9ydW5lcy9ldmVudCcgZmlsdGVyaW5nIHR4SWQgWyR7dHhJZH1dIG9uIG9mZnNldHxsaW1pdCBbJHtvZmZzZXR9fCR7dGhpcy5QQUdFX1NJWkV9XS4gUmVzcG9uc2U6ICR7SnNvbkJpZ0ludC5zdHJpbmdpZnkoXG4gICAgICAgICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgICAgICl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBjb25zdCBiYXNlRXJyb3IgPSBgRmFpbGVkIHRvIGdldCBydW5lcyBldmVudCBmb3IgdHggWyR7dHhJZH1dIGZyb20gVW5pc2F0OiBgO1xuICAgICAgaWYgKGUucmVzcG9uc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJhc2VFcnJvciArIGAke0pzb25CaWdJbnQuc3RyaW5naWZ5KGUucmVzcG9uc2UuZGF0YSl9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYmFzZUVycm9yICsgZS5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRyYW5zZmVyIG9mIHR4UnVuZXMpIHtcbiAgICAgIGlmICh0cmFuc2Zlci50eGlkICE9PSB0eElkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW1wb3NzaWJsZUJlaGF2aW9yOiBGZXRjaGVkIHJ1bmVzIGV2ZW50IGZvciB0eCBbJHt0eElkfV0gYnV0IGdvdCBhIHRyYW5zZmVyIHdpdGggdHhJZCBbJHt0cmFuc2Zlci50eGlkfV1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zZmVyLnR5cGUgPT09ICdzZW5kJykgY29udGludWU7XG4gICAgICBydW5lcy5wdXNoKHtcbiAgICAgICAgYWRkcmVzczogdHJhbnNmZXIuYWRkcmVzcyxcbiAgICAgICAgcnVuZUlkOiB0cmFuc2Zlci5ydW5lSWQsXG4gICAgICAgIHJ1bmVBbW91bnQ6IHRyYW5zZmVyLmFtb3VudCxcbiAgICAgICAgdm91dDogdHJhbnNmZXIudm91dCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBydW5lcztcbiAgfTtcbn1cbiJdfQ==
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@my-packages-changeit/bitcoin-runes-observation-extractor",
3
+ "version": "3.0.6",
4
+ "description": "Event observation data extractor for Bitcoin Runes chain",
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
+ "clean": "rimraf dist && rimraf tsconfig.build.tsbuildinfo",
21
+ "coverage": "npm run test -- --coverage",
22
+ "lint": "eslint --fix . && npm run prettify",
23
+ "lint:check": "eslint . && npm run prettify:check",
24
+ "prettify": "prettier --write . --ignore-path ../../../.gitignore",
25
+ "prettify:check": "prettier --check . --ignore-path ../../../.gitignore",
26
+ "release": "npm run test -- --run && npm run clean && npm run build && npm publish --access public",
27
+ "test": "NODE_OPTIONS='--import tsx' vitest",
28
+ "type-check": "tsc --noEmit"
29
+ },
30
+ "dependencies": {
31
+ "@rosen-bridge/abstract-logger": "^4.0.0",
32
+ "@rosen-bridge/abstract-observation-extractor": "^1.0.10",
33
+ "@rosen-bridge/bitcoin-scanner": "^1.1.3",
34
+ "@rosen-bridge/extended-typeorm": "^1.1.0",
35
+ "@rosen-bridge/json-bigint": "^1.1.0",
36
+ "@rosen-bridge/rosen-extractor": "^12.1.1",
37
+ "@rosen-bridge/scanner-interfaces": "^1.0.0",
38
+ "@rosen-bridge/tokens": "^6.0.2",
39
+ "@rosen-clients/rate-limited-axios": "^2.0.1",
40
+ "blakejs": "^1.2.1",
41
+ "ordiscan": "^1.3.0"
42
+ },
43
+ "devDependencies": {
44
+ "@rosen-bridge/abstract-scanner": "^2.0.3"
45
+ },
46
+ "engines": {
47
+ "node": ">=22.18.0",
48
+ "npm": "11.6.2"
49
+ }
50
+ }