@subsquid/fuel-stream 0.0.1
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/lib/archive/data-schema.d.ts +332 -0
- package/lib/archive/data-schema.d.ts.map +1 -0
- package/lib/archive/data-schema.js +293 -0
- package/lib/archive/data-schema.js.map +1 -0
- package/lib/archive/source.d.ts +14 -0
- package/lib/archive/source.d.ts.map +1 -0
- package/lib/archive/source.js +82 -0
- package/lib/archive/source.js.map +1 -0
- package/lib/data/data-partial.d.ts +20 -0
- package/lib/data/data-partial.d.ts.map +1 -0
- package/lib/data/data-partial.js +3 -0
- package/lib/data/data-partial.js.map +1 -0
- package/lib/data/data-request.d.ts +35 -0
- package/lib/data/data-request.d.ts.map +1 -0
- package/lib/data/data-request.js +3 -0
- package/lib/data/data-request.js.map +1 -0
- package/lib/data/model.d.ts +45 -0
- package/lib/data/model.d.ts.map +1 -0
- package/lib/data/model.js +19 -0
- package/lib/data/model.js.map +1 -0
- package/lib/data/util.d.ts +20 -0
- package/lib/data/util.d.ts.map +1 -0
- package/lib/data/util.js +3 -0
- package/lib/data/util.js.map +1 -0
- package/lib/fields.d.ts +6 -0
- package/lib/fields.d.ts.map +1 -0
- package/lib/fields.js +32 -0
- package/lib/fields.js.map +1 -0
- package/lib/filter.d.ts +6 -0
- package/lib/filter.d.ts.map +1 -0
- package/lib/filter.js +172 -0
- package/lib/filter.js.map +1 -0
- package/lib/graphql.d.ts +14 -0
- package/lib/graphql.d.ts.map +1 -0
- package/lib/graphql.js +40 -0
- package/lib/graphql.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +19 -0
- package/lib/index.js.map +1 -0
- package/lib/source.d.ts +118 -0
- package/lib/source.d.ts.map +1 -0
- package/lib/source.js +296 -0
- package/lib/source.js.map +1 -0
- package/package.json +34 -0
- package/src/archive/data-schema.ts +320 -0
- package/src/archive/source.ts +88 -0
- package/src/data/data-partial.ts +25 -0
- package/src/data/data-request.ts +44 -0
- package/src/data/model.ts +114 -0
- package/src/data/util.ts +42 -0
- package/src/fields.ts +35 -0
- package/src/filter.ts +229 -0
- package/src/graphql.ts +51 -0
- package/src/index.ts +2 -0
- package/src/source.ts +416 -0
package/lib/source.d.ts
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Logger } from '@subsquid/logger';
|
|
2
|
+
import { Range, FiniteRange } from '@subsquid/util-internal-range';
|
|
3
|
+
import { Block, FieldSelection } from './data/model';
|
|
4
|
+
import { ReceiptRequest, InputRequest, OutputRequest, TransactionRequest } from './data/data-request';
|
|
5
|
+
export interface GraphqlSettings {
|
|
6
|
+
/**
|
|
7
|
+
* GraphQL endpoint URL
|
|
8
|
+
*/
|
|
9
|
+
url: string;
|
|
10
|
+
/**
|
|
11
|
+
* Maximum number of concurrent `blocks` queries.
|
|
12
|
+
*
|
|
13
|
+
* Default is `10`
|
|
14
|
+
*/
|
|
15
|
+
strideConcurrency?: number;
|
|
16
|
+
/**
|
|
17
|
+
* `blocks` query size.
|
|
18
|
+
*
|
|
19
|
+
* Default is `5`.
|
|
20
|
+
*/
|
|
21
|
+
strideSize?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface GatewaySettings {
|
|
24
|
+
/**
|
|
25
|
+
* Subsquid Network Gateway url
|
|
26
|
+
*/
|
|
27
|
+
url: string;
|
|
28
|
+
/**
|
|
29
|
+
* Request timeout in ms
|
|
30
|
+
*/
|
|
31
|
+
requestTimeout?: number;
|
|
32
|
+
}
|
|
33
|
+
interface BlockRange {
|
|
34
|
+
range?: Range;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* API and data that is passed to the data handler
|
|
38
|
+
*/
|
|
39
|
+
export interface DataHandlerContext<Store, F extends FieldSelection = {}> {
|
|
40
|
+
/**
|
|
41
|
+
* An instance of a structured logger.
|
|
42
|
+
*/
|
|
43
|
+
log: Logger;
|
|
44
|
+
/**
|
|
45
|
+
* Storage interface provided by the database
|
|
46
|
+
*/
|
|
47
|
+
store: Store;
|
|
48
|
+
/**
|
|
49
|
+
* List of blocks to map and process
|
|
50
|
+
*/
|
|
51
|
+
blocks: Block<F>[];
|
|
52
|
+
/**
|
|
53
|
+
* Signals, that the processor reached the head of a chain.
|
|
54
|
+
*
|
|
55
|
+
* The head block is always included in `.blocks`.
|
|
56
|
+
*/
|
|
57
|
+
isHead: boolean;
|
|
58
|
+
}
|
|
59
|
+
export type FuelBatchProcessorFields<T> = T extends DataSourceBuilder<infer F> ? F : never;
|
|
60
|
+
export declare class DataSourceBuilder<F extends FieldSelection = {}> {
|
|
61
|
+
private requests;
|
|
62
|
+
private fields?;
|
|
63
|
+
private blockRange?;
|
|
64
|
+
private gateway?;
|
|
65
|
+
private graphql?;
|
|
66
|
+
private running;
|
|
67
|
+
private assertNotRunning;
|
|
68
|
+
/**
|
|
69
|
+
* Set Subsquid Network Gateway endpoint (ex Archive).
|
|
70
|
+
*
|
|
71
|
+
* Subsquid Network allows to get data from finalized blocks up to
|
|
72
|
+
* infinite times faster and more efficient than via regular GraphQL.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* processor.setGateway('https://v2.archive.subsquid.io/network/fuel-mainnet')
|
|
76
|
+
*/
|
|
77
|
+
setGateway(url: string | GatewaySettings): this;
|
|
78
|
+
/**
|
|
79
|
+
* Set up GraphQL data ingestion
|
|
80
|
+
*/
|
|
81
|
+
setGraphql(settings?: GraphqlSettings): this;
|
|
82
|
+
/**
|
|
83
|
+
* Limits the range of blocks to be processed.
|
|
84
|
+
*
|
|
85
|
+
* When the upper bound is specified,
|
|
86
|
+
* the processor will terminate with exit code 0 once it reaches it.
|
|
87
|
+
*/
|
|
88
|
+
setBlockRange(range?: Range): this;
|
|
89
|
+
/**
|
|
90
|
+
* Configure a set of fetched fields
|
|
91
|
+
*/
|
|
92
|
+
setFields<F extends FieldSelection>(fields: F): DataSourceBuilder<F>;
|
|
93
|
+
private add;
|
|
94
|
+
/**
|
|
95
|
+
* By default, the processor will fetch only blocks
|
|
96
|
+
* which contain requested items. This method
|
|
97
|
+
* modifies such behaviour to fetch all chain blocks.
|
|
98
|
+
*
|
|
99
|
+
* Optionally a range of blocks can be specified
|
|
100
|
+
* for which the setting should be effective.
|
|
101
|
+
*/
|
|
102
|
+
includeAllBlocks(range?: Range): this;
|
|
103
|
+
addTransaction(options: TransactionRequest & BlockRange): this;
|
|
104
|
+
addReceipt(options: ReceiptRequest & BlockRange): this;
|
|
105
|
+
addInput(options: InputRequest & BlockRange): this;
|
|
106
|
+
addOutput(options: OutputRequest & BlockRange): this;
|
|
107
|
+
private getRequests;
|
|
108
|
+
build(): DataSource<Block<F>>;
|
|
109
|
+
}
|
|
110
|
+
export interface DataSource<Block> {
|
|
111
|
+
getFinalizedHeight(): Promise<number>;
|
|
112
|
+
getBlockHash(height: number): Promise<string | undefined>;
|
|
113
|
+
getBlocksCountInRange(range: FiniteRange): number;
|
|
114
|
+
getBlockStream(fromBlockHeight?: number): AsyncIterable<Block[]>;
|
|
115
|
+
}
|
|
116
|
+
export type GetDataSourceBlock<T> = T extends DataSource<infer B> ? B : never;
|
|
117
|
+
export {};
|
|
118
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"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"}
|
package/lib/source.js
ADDED
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.DataSourceBuilder = void 0;
|
|
16
|
+
const http_client_1 = require("@subsquid/http-client");
|
|
17
|
+
const util_internal_1 = require("@subsquid/util-internal");
|
|
18
|
+
const util_internal_archive_client_1 = require("@subsquid/util-internal-archive-client");
|
|
19
|
+
const util_internal_processor_tools_1 = require("@subsquid/util-internal-processor-tools");
|
|
20
|
+
const util_internal_range_1 = require("@subsquid/util-internal-range");
|
|
21
|
+
const data_source_1 = require("@subsquid/fuel-data/lib/data-source");
|
|
22
|
+
const assert_1 = __importDefault(require("assert"));
|
|
23
|
+
const source_1 = require("./archive/source");
|
|
24
|
+
const fields_1 = require("./fields");
|
|
25
|
+
const graphql_1 = require("./graphql");
|
|
26
|
+
class DataSourceBuilder {
|
|
27
|
+
constructor() {
|
|
28
|
+
this.requests = [];
|
|
29
|
+
this.running = false;
|
|
30
|
+
}
|
|
31
|
+
assertNotRunning() {
|
|
32
|
+
if (this.running) {
|
|
33
|
+
throw new Error('Settings modifications are not allowed after start of processing');
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Set Subsquid Network Gateway endpoint (ex Archive).
|
|
38
|
+
*
|
|
39
|
+
* Subsquid Network allows to get data from finalized blocks up to
|
|
40
|
+
* infinite times faster and more efficient than via regular GraphQL.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* processor.setGateway('https://v2.archive.subsquid.io/network/fuel-mainnet')
|
|
44
|
+
*/
|
|
45
|
+
setGateway(url) {
|
|
46
|
+
this.assertNotRunning();
|
|
47
|
+
if (typeof url == 'string') {
|
|
48
|
+
this.gateway = { url };
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.gateway = url;
|
|
52
|
+
}
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Set up GraphQL data ingestion
|
|
57
|
+
*/
|
|
58
|
+
setGraphql(settings) {
|
|
59
|
+
this.assertNotRunning();
|
|
60
|
+
this.graphql = settings;
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Limits the range of blocks to be processed.
|
|
65
|
+
*
|
|
66
|
+
* When the upper bound is specified,
|
|
67
|
+
* the processor will terminate with exit code 0 once it reaches it.
|
|
68
|
+
*/
|
|
69
|
+
setBlockRange(range) {
|
|
70
|
+
this.assertNotRunning();
|
|
71
|
+
this.blockRange = range;
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Configure a set of fetched fields
|
|
76
|
+
*/
|
|
77
|
+
setFields(fields) {
|
|
78
|
+
this.assertNotRunning();
|
|
79
|
+
this.fields = fields;
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
add(range, request) {
|
|
83
|
+
this.requests.push({
|
|
84
|
+
range: range || { from: 0 },
|
|
85
|
+
request
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* By default, the processor will fetch only blocks
|
|
90
|
+
* which contain requested items. This method
|
|
91
|
+
* modifies such behaviour to fetch all chain blocks.
|
|
92
|
+
*
|
|
93
|
+
* Optionally a range of blocks can be specified
|
|
94
|
+
* for which the setting should be effective.
|
|
95
|
+
*/
|
|
96
|
+
includeAllBlocks(range) {
|
|
97
|
+
this.assertNotRunning();
|
|
98
|
+
this.add(range, { includeAllBlocks: true });
|
|
99
|
+
return this;
|
|
100
|
+
}
|
|
101
|
+
addTransaction(options) {
|
|
102
|
+
this.assertNotRunning();
|
|
103
|
+
let { range, ...req } = options;
|
|
104
|
+
this.add(range, {
|
|
105
|
+
transactions: [req]
|
|
106
|
+
});
|
|
107
|
+
return this;
|
|
108
|
+
}
|
|
109
|
+
addReceipt(options) {
|
|
110
|
+
this.assertNotRunning();
|
|
111
|
+
let { range, ...req } = options;
|
|
112
|
+
this.add(range, {
|
|
113
|
+
receipts: [req]
|
|
114
|
+
});
|
|
115
|
+
return this;
|
|
116
|
+
}
|
|
117
|
+
addInput(options) {
|
|
118
|
+
this.assertNotRunning();
|
|
119
|
+
let { range, ...req } = options;
|
|
120
|
+
this.add(range, {
|
|
121
|
+
inputs: [req]
|
|
122
|
+
});
|
|
123
|
+
return this;
|
|
124
|
+
}
|
|
125
|
+
addOutput(options) {
|
|
126
|
+
this.assertNotRunning();
|
|
127
|
+
let { range, ...req } = options;
|
|
128
|
+
this.add(range, {
|
|
129
|
+
outputs: [req]
|
|
130
|
+
});
|
|
131
|
+
return this;
|
|
132
|
+
}
|
|
133
|
+
getRequests() {
|
|
134
|
+
function concat(a, b) {
|
|
135
|
+
let result = [];
|
|
136
|
+
if (a) {
|
|
137
|
+
result.push(...a);
|
|
138
|
+
}
|
|
139
|
+
if (b) {
|
|
140
|
+
result.push(...b);
|
|
141
|
+
}
|
|
142
|
+
return result.length == 0 ? undefined : result;
|
|
143
|
+
}
|
|
144
|
+
let requests = (0, util_internal_range_1.mergeRangeRequests)(this.requests, (a, b) => {
|
|
145
|
+
return {
|
|
146
|
+
includeAllBlocks: a.includeAllBlocks || b.includeAllBlocks,
|
|
147
|
+
transactions: concat(a.transactions, b.transactions),
|
|
148
|
+
receipts: concat(a.receipts, b.receipts),
|
|
149
|
+
inputs: concat(a.inputs, b.inputs),
|
|
150
|
+
outputs: concat(a.outputs, b.outputs),
|
|
151
|
+
};
|
|
152
|
+
});
|
|
153
|
+
let fields = (0, fields_1.getFields)(this.fields);
|
|
154
|
+
requests = requests.map(({ range, request }) => {
|
|
155
|
+
return {
|
|
156
|
+
range,
|
|
157
|
+
request: {
|
|
158
|
+
fields,
|
|
159
|
+
...request
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
});
|
|
163
|
+
return (0, util_internal_range_1.applyRangeBound)(requests, this.blockRange);
|
|
164
|
+
}
|
|
165
|
+
build() {
|
|
166
|
+
return new FuelDataSource(this.getRequests(), this.gateway, this.graphql);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.DataSourceBuilder = DataSourceBuilder;
|
|
170
|
+
__decorate([
|
|
171
|
+
util_internal_1.def,
|
|
172
|
+
__metadata("design:type", Function),
|
|
173
|
+
__metadata("design:paramtypes", []),
|
|
174
|
+
__metadata("design:returntype", Array)
|
|
175
|
+
], DataSourceBuilder.prototype, "getRequests", null);
|
|
176
|
+
class FuelDataSource {
|
|
177
|
+
constructor(requests, gatewaySettings, graphqlSettings) {
|
|
178
|
+
this.requests = requests;
|
|
179
|
+
this.gatewaySettings = gatewaySettings;
|
|
180
|
+
(0, assert_1.default)(this.gatewaySettings || graphqlSettings, 'either gateway or GraphQL should be provided');
|
|
181
|
+
if (graphqlSettings) {
|
|
182
|
+
this.graphql = this.createGraphqlDataSource(graphqlSettings);
|
|
183
|
+
}
|
|
184
|
+
this.ranges = this.requests.map(req => req.range);
|
|
185
|
+
}
|
|
186
|
+
getFinalizedHeight() {
|
|
187
|
+
if (this.graphql) {
|
|
188
|
+
return this.graphql.getFinalizedHeight();
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
return this.createGateway().getFinalizedHeight();
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async getBlockHash(height) {
|
|
195
|
+
await this.assertConsistency();
|
|
196
|
+
if (this.gatewaySettings == null) {
|
|
197
|
+
(0, assert_1.default)(this.graphql);
|
|
198
|
+
return this.graphql.getBlockHash(height);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
let gateway = this.createGateway();
|
|
202
|
+
let head = await gateway.getFinalizedHeight();
|
|
203
|
+
if (head >= height)
|
|
204
|
+
return gateway.getBlockHash(height);
|
|
205
|
+
if (this.graphql)
|
|
206
|
+
return this.graphql.getBlockHash(height);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async assertConsistency() {
|
|
210
|
+
if (this.isConsistent || this.gatewaySettings == null || this.graphql == null)
|
|
211
|
+
return;
|
|
212
|
+
let blocks = await this.performConsistencyCheck().catch(err => {
|
|
213
|
+
throw (0, util_internal_1.addErrorContext)(new Error(`Failed to check consistency between Subsquid Gateway and GraphQL endpoints`), { reason: err });
|
|
214
|
+
});
|
|
215
|
+
if (blocks == null) {
|
|
216
|
+
this.isConsistent = true;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
throw (0, util_internal_1.addErrorContext)(new Error(`Provided Subsquid Gateway and GraphQL endpoints don't agree on block №${blocks.archiveBlock.height}`), blocks);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
async performConsistencyCheck() {
|
|
223
|
+
let archive = this.createGateway();
|
|
224
|
+
let height = await archive.getFinalizedHeight();
|
|
225
|
+
let archiveBlock = await archive.getBlockHeader(height);
|
|
226
|
+
let gqlBlock = await this.graphql.getBlockHeader(archiveBlock.height);
|
|
227
|
+
if (gqlBlock?.id === archiveBlock.hash && Number(gqlBlock.height) === archiveBlock.height)
|
|
228
|
+
return;
|
|
229
|
+
return { archiveBlock, gqlBlock: gqlBlock || null };
|
|
230
|
+
}
|
|
231
|
+
getBlocksCountInRange(range) {
|
|
232
|
+
return (0, util_internal_range_1.getSize)(this.ranges, range);
|
|
233
|
+
}
|
|
234
|
+
async *getBlockStream(fromBlockHeight) {
|
|
235
|
+
await this.assertConsistency();
|
|
236
|
+
let requests = fromBlockHeight == null
|
|
237
|
+
? this.requests
|
|
238
|
+
: (0, util_internal_range_1.applyRangeBound)(this.requests, { from: fromBlockHeight });
|
|
239
|
+
if (requests.length == 0)
|
|
240
|
+
return;
|
|
241
|
+
if (this.gatewaySettings) {
|
|
242
|
+
let agent = new http_client_1.HttpAgent({ keepAlive: true });
|
|
243
|
+
try {
|
|
244
|
+
let archive = this.createGateway(agent);
|
|
245
|
+
let height = await archive.getFinalizedHeight();
|
|
246
|
+
let from = requests[0].range.from;
|
|
247
|
+
if (height > from || !this.graphql) {
|
|
248
|
+
for await (let batch of archive.getBlockStream(requests, !!this.graphql)) {
|
|
249
|
+
yield batch;
|
|
250
|
+
from = (0, util_internal_1.last)(batch).header.height + 1;
|
|
251
|
+
}
|
|
252
|
+
requests = (0, util_internal_range_1.applyRangeBound)(requests, { from });
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
agent.close();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (requests.length == 0)
|
|
260
|
+
return;
|
|
261
|
+
(0, assert_1.default)(this.graphql);
|
|
262
|
+
yield* this.graphql.getBlockStream(requests);
|
|
263
|
+
}
|
|
264
|
+
createGateway(agent) {
|
|
265
|
+
(0, assert_1.default)(this.gatewaySettings);
|
|
266
|
+
let http = new http_client_1.HttpClient({
|
|
267
|
+
headers: {
|
|
268
|
+
'x-squid-id': this.getSquidId()
|
|
269
|
+
},
|
|
270
|
+
agent
|
|
271
|
+
});
|
|
272
|
+
return new source_1.FuelGateway(new util_internal_archive_client_1.ArchiveClient({
|
|
273
|
+
http,
|
|
274
|
+
url: this.gatewaySettings.url,
|
|
275
|
+
queryTimeout: this.gatewaySettings.requestTimeout,
|
|
276
|
+
}));
|
|
277
|
+
}
|
|
278
|
+
createGraphqlDataSource(settings) {
|
|
279
|
+
let dataSource = new data_source_1.HttpDataSource({
|
|
280
|
+
client: new http_client_1.HttpClient({ baseUrl: settings.url }),
|
|
281
|
+
strideConcurrency: settings.strideConcurrency,
|
|
282
|
+
strideSize: settings.strideSize,
|
|
283
|
+
});
|
|
284
|
+
return new graphql_1.GraphqlDataSource(dataSource);
|
|
285
|
+
}
|
|
286
|
+
getSquidId() {
|
|
287
|
+
return (0, util_internal_processor_tools_1.getOrGenerateSquidId)();
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
__decorate([
|
|
291
|
+
util_internal_1.def,
|
|
292
|
+
__metadata("design:type", Function),
|
|
293
|
+
__metadata("design:paramtypes", []),
|
|
294
|
+
__metadata("design:returntype", String)
|
|
295
|
+
], FuelDataSource.prototype, "getSquidId", null);
|
|
296
|
+
//# sourceMappingURL=source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../src/source.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@subsquid/fuel-stream",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Fuel block data streamer",
|
|
5
|
+
"license": "GPL-3.0-or-later",
|
|
6
|
+
"repository": "git@github.com:subsquid/squid.git",
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"lib",
|
|
12
|
+
"src"
|
|
13
|
+
],
|
|
14
|
+
"main": "lib/index.js",
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@subsquid/http-client": "^1.4.0",
|
|
17
|
+
"@subsquid/logger": "^1.3.3",
|
|
18
|
+
"@subsquid/fuel-normalization": "^0.0.1",
|
|
19
|
+
"@subsquid/fuel-data": "^0.0.1",
|
|
20
|
+
"@subsquid/util-internal": "^3.2.0",
|
|
21
|
+
"@subsquid/util-internal-archive-client": "^0.1.2",
|
|
22
|
+
"@subsquid/util-internal-ingest-tools": "^1.1.2",
|
|
23
|
+
"@subsquid/util-internal-processor-tools": "^4.1.1",
|
|
24
|
+
"@subsquid/util-internal-range": "^0.3.0",
|
|
25
|
+
"@subsquid/util-internal-validation": "^0.5.0"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^18.18.14",
|
|
29
|
+
"typescript": "~5.3.2"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "rm -rf lib && tsc"
|
|
33
|
+
}
|
|
34
|
+
}
|