@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.
- package/CHANGELOG.md +232 -0
- package/README.md +24 -0
- package/dist/abstractRunesProtocolNetwork.d.ts +13 -0
- package/dist/abstractRunesProtocolNetwork.d.ts.map +1 -0
- package/dist/abstractRunesProtocolNetwork.js +8 -0
- package/dist/bitcoinRunesAbstractObservationExtractor.d.ts +22 -0
- package/dist/bitcoinRunesAbstractObservationExtractor.d.ts.map +1 -0
- package/dist/bitcoinRunesAbstractObservationExtractor.js +81 -0
- package/dist/bitcoinRunesEsploraObservationExtractor.d.ts +18 -0
- package/dist/bitcoinRunesEsploraObservationExtractor.d.ts.map +1 -0
- package/dist/bitcoinRunesEsploraObservationExtractor.js +16 -0
- package/dist/bitcoinRunesRpcObservationExtractor.d.ts +18 -0
- package/dist/bitcoinRunesRpcObservationExtractor.d.ts.map +1 -0
- package/dist/bitcoinRunesRpcObservationExtractor.js +16 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +2 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/ordiscanRunesProtocolNetwork.d.ts +17 -0
- package/dist/ordiscanRunesProtocolNetwork.d.ts.map +1 -0
- package/dist/ordiscanRunesProtocolNetwork.js +53 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types.d.ts +57 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/unisatRunesProtocolNetwork.d.ts +18 -0
- package/dist/unisatRunesProtocolNetwork.d.ts.map +1 -0
- package/dist/unisatRunesProtocolNetwork.js +78 -0
- package/package.json +50 -0
package/dist/types.d.ts
ADDED
|
@@ -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
|
+
}
|