@ceramicnetwork/indexing 1.1.0-rc.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/README.md +31 -0
- package/lib/__tests__/chunks.util.d.ts +2 -0
- package/lib/__tests__/chunks.util.d.ts.map +1 -0
- package/lib/__tests__/chunks.util.js +8 -0
- package/lib/__tests__/chunks.util.js.map +1 -0
- package/lib/__tests__/read-csv-fixture.util.d.ts +5 -0
- package/lib/__tests__/read-csv-fixture.util.d.ts.map +1 -0
- package/lib/__tests__/read-csv-fixture.util.js +35 -0
- package/lib/__tests__/read-csv-fixture.util.js.map +1 -0
- package/lib/as-table-name.util.d.ts +3 -0
- package/lib/as-table-name.util.d.ts.map +1 -0
- package/lib/as-table-name.util.js +4 -0
- package/lib/as-table-name.util.js.map +1 -0
- package/lib/build-indexing.d.ts +13 -0
- package/lib/build-indexing.d.ts.map +1 -0
- package/lib/build-indexing.js +55 -0
- package/lib/build-indexing.js.map +1 -0
- package/lib/column-name.util.d.ts +2 -0
- package/lib/column-name.util.d.ts.map +1 -0
- package/lib/column-name.util.js +5 -0
- package/lib/column-name.util.js.map +1 -0
- package/lib/config.d.ts +2 -0
- package/lib/config.d.ts.map +1 -0
- package/lib/config.js +2 -0
- package/lib/config.js.map +1 -0
- package/lib/database-index-api.d.ts +94 -0
- package/lib/database-index-api.d.ts.map +1 -0
- package/lib/database-index-api.js +228 -0
- package/lib/database-index-api.js.map +1 -0
- package/lib/history-sync/interfaces.d.ts +52 -0
- package/lib/history-sync/interfaces.d.ts.map +1 -0
- package/lib/history-sync/interfaces.js +11 -0
- package/lib/history-sync/interfaces.js.map +1 -0
- package/lib/history-sync/sync-api.d.ts +82 -0
- package/lib/history-sync/sync-api.d.ts.map +1 -0
- package/lib/history-sync/sync-api.js +276 -0
- package/lib/history-sync/sync-api.js.map +1 -0
- package/lib/history-sync/utils.d.ts +15 -0
- package/lib/history-sync/utils.d.ts.map +1 -0
- package/lib/history-sync/utils.js +23 -0
- package/lib/history-sync/utils.js.map +1 -0
- package/lib/history-sync/workers/rebuild-anchor.d.ts +15 -0
- package/lib/history-sync/workers/rebuild-anchor.d.ts.map +1 -0
- package/lib/history-sync/workers/rebuild-anchor.js +96 -0
- package/lib/history-sync/workers/rebuild-anchor.js.map +1 -0
- package/lib/history-sync/workers/sync.d.ts +24 -0
- package/lib/history-sync/workers/sync.d.ts.map +1 -0
- package/lib/history-sync/workers/sync.js +77 -0
- package/lib/history-sync/workers/sync.js.map +1 -0
- package/lib/index-query-not-available.error.d.ts +5 -0
- package/lib/index-query-not-available.error.d.ts.map +1 -0
- package/lib/index-query-not-available.error.js +6 -0
- package/lib/index-query-not-available.error.js.map +1 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -0
- package/lib/insertion-order.d.ts +15 -0
- package/lib/insertion-order.d.ts.map +1 -0
- package/lib/insertion-order.js +180 -0
- package/lib/insertion-order.js.map +1 -0
- package/lib/local-index-api.d.ts +30 -0
- package/lib/local-index-api.d.ts.map +1 -0
- package/lib/local-index-api.js +118 -0
- package/lib/local-index-api.js.map +1 -0
- package/lib/make-index-api.d.ts +9 -0
- package/lib/make-index-api.d.ts.map +1 -0
- package/lib/make-index-api.js +27 -0
- package/lib/make-index-api.js.map +1 -0
- package/lib/migrations/1-create-model-table.d.ts +34 -0
- package/lib/migrations/1-create-model-table.d.ts.map +1 -0
- package/lib/migrations/1-create-model-table.js +243 -0
- package/lib/migrations/1-create-model-table.js.map +1 -0
- package/lib/migrations/cdb-schema-verification.d.ts +15 -0
- package/lib/migrations/cdb-schema-verification.d.ts.map +1 -0
- package/lib/migrations/cdb-schema-verification.js +272 -0
- package/lib/migrations/cdb-schema-verification.js.map +1 -0
- package/lib/parse-pagination.d.ts +18 -0
- package/lib/parse-pagination.d.ts.map +1 -0
- package/lib/parse-pagination.js +23 -0
- package/lib/parse-pagination.js.map +1 -0
- package/lib/query-filter-converter.d.ts +12 -0
- package/lib/query-filter-converter.d.ts.map +1 -0
- package/lib/query-filter-converter.js +231 -0
- package/lib/query-filter-converter.js.map +1 -0
- package/lib/query-filter-parser.d.ts +63 -0
- package/lib/query-filter-parser.d.ts.map +1 -0
- package/lib/query-filter-parser.js +178 -0
- package/lib/query-filter-parser.js.map +1 -0
- package/lib/tables-manager.d.ts +44 -0
- package/lib/tables-manager.d.ts.map +1 -0
- package/lib/tables-manager.js +218 -0
- package/lib/tables-manager.js.map +1 -0
- package/lib/unsupported-ordering-error.d.ts +4 -0
- package/lib/unsupported-ordering-error.d.ts.map +1 -0
- package/lib/unsupported-ordering-error.js +6 -0
- package/lib/unsupported-ordering-error.js.map +1 -0
- package/package.json +64 -0
package/README.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Ceramic indexing
|
|
2
|
+
|
|
3
|
+
## Installation
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
$ npm install @ceramicnetwork/indexing
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Development
|
|
10
|
+
|
|
11
|
+
Run tests:
|
|
12
|
+
|
|
13
|
+
```shell
|
|
14
|
+
npm test
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Run linter:
|
|
18
|
+
|
|
19
|
+
```shell
|
|
20
|
+
npm run lint
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Contributing
|
|
24
|
+
|
|
25
|
+
We are happy to accept small and large contributions. Make sure to check out the
|
|
26
|
+
[Ceramic specifications](https://github.com/ceramicnetwork/ceramic/blob/main/SPECIFICATION.md)
|
|
27
|
+
for details of how the protocol works.
|
|
28
|
+
|
|
29
|
+
## License
|
|
30
|
+
|
|
31
|
+
MIT or Apache-2.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunks.util.d.ts","sourceRoot":"","sources":["../../src/__tests__/chunks.util.ts"],"names":[],"mappings":"AAGA,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAMxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunks.util.js","sourceRoot":"","sources":["../../src/__tests__/chunks.util.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,MAAM,CAAI,KAAe,EAAE,IAAY;IACrD,MAAM,OAAO,GAAoB,EAAE,CAAA;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE;QAC3C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;KACvC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-csv-fixture.util.d.ts","sourceRoot":"","sources":["../../src/__tests__/read-csv-fixture.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAU1D,wBAAgB,cAAc,CAAC,QAAQ,EAAE,GAAG;;MA2B3C"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import csv from 'csv-parser';
|
|
3
|
+
import { StreamID } from '@ceramicnetwork/streamid';
|
|
4
|
+
import { CID } from 'multiformats/cid';
|
|
5
|
+
const MODEL_ID = 'kjzl6cwe1jw145m7jxh4jpa6iw1ps3jcjordpo81e0w04krcpz8knxvg5ygiabd';
|
|
6
|
+
const FAKE_CID = CID.parse('bafybeig6xv5nwphfmvcnektpnojts33jqcuam7bmye2pb54adnrtccjlsu');
|
|
7
|
+
const MODEL = StreamID.fromString(MODEL_ID);
|
|
8
|
+
export function readCsvFixture(filepath) {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
const result = new Array();
|
|
11
|
+
const csvReader = csv({
|
|
12
|
+
separator: ';',
|
|
13
|
+
mapHeaders: ({ header }) => (header ? header.replace(/\s+/g, '') : null),
|
|
14
|
+
});
|
|
15
|
+
fs.createReadStream(filepath)
|
|
16
|
+
.pipe(csvReader)
|
|
17
|
+
.on('data', (row) => {
|
|
18
|
+
result.push({
|
|
19
|
+
model: MODEL,
|
|
20
|
+
streamID: StreamID.fromString(row.stream_id),
|
|
21
|
+
controller: row.controller,
|
|
22
|
+
streamContent: row.stream_content ? row.stream_content : '{}',
|
|
23
|
+
tip: row.tip ? row.tip : FAKE_CID,
|
|
24
|
+
lastAnchor: row.last_anchored_at ? new Date(Number(row.last_anchored_at) * 1000) : null,
|
|
25
|
+
createdAt: row.created_at ? new Date(Number(row.created_at) * 1000) : null,
|
|
26
|
+
firstAnchor: null,
|
|
27
|
+
});
|
|
28
|
+
})
|
|
29
|
+
.on('error', (error) => reject(error))
|
|
30
|
+
.on('end', () => {
|
|
31
|
+
resolve(result);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=read-csv-fixture.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-csv-fixture.util.js","sourceRoot":"","sources":["../../src/__tests__/read-csv-fixture.util.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,GAAG,MAAM,YAAY,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAEtC,MAAM,QAAQ,GAAG,iEAAiE,CAAA;AAClF,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAA;AACzF,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;AAE3C,MAAM,UAAU,cAAc,CAAC,QAAa;IAE1C,OAAO,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,IAAI,KAAK,EAAc,CAAA;QACtC,MAAM,SAAS,GAAG,GAAG,CAAC;YACpB,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SACzE,CAAC,CAAA;QACF,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;aAC1B,IAAI,CAAC,SAAS,CAAC;aACf,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YAClB,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC;gBAC5C,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,aAAa,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;gBAC7D,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ;gBACjC,UAAU,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;gBACvF,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC1E,WAAW,EAAE,IAAI;aAClB,CAAC,CAAA;QACJ,CAAC,CAAC;aACD,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACrC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACd,OAAO,CAAC,MAAM,CAAC,CAAA;QACjB,CAAC,CAAC,CAAA;IACN,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"as-table-name.util.d.ts","sourceRoot":"","sources":["../src/as-table-name.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAKxD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAE5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"as-table-name.util.js","sourceRoot":"","sources":["../src/as-table-name.util.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,WAAW,CAAC,KAAwB;IAClD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type DatabaseIndexApi } from './database-index-api.js';
|
|
2
|
+
import { DiagnosticsLogger, Networks } from '@ceramicnetwork/common';
|
|
3
|
+
export declare type IndexingConfig = {
|
|
4
|
+
db: string;
|
|
5
|
+
allowQueriesBeforeHistoricalSync: boolean;
|
|
6
|
+
disableComposedb: boolean;
|
|
7
|
+
enableHistoricalSync: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare class UnsupportedDatabaseProtocolError extends Error {
|
|
10
|
+
constructor(protocol: string);
|
|
11
|
+
}
|
|
12
|
+
export declare function buildIndexing(indexingConfig: IndexingConfig, logger: DiagnosticsLogger, network: Networks): DatabaseIndexApi<Date | number>;
|
|
13
|
+
//# sourceMappingURL=build-indexing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-indexing.d.ts","sourceRoot":"","sources":["../src/build-indexing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,gBAAgB,EAAoC,MAAM,yBAAyB,CAAA;AAEjG,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAGpE,oBAAY,cAAc,GAAG;IAI3B,EAAE,EAAE,MAAM,CAAA;IAKV,gCAAgC,EAAE,OAAO,CAAA;IAKzC,gBAAgB,EAAE,OAAO,CAAA;IAKzB,oBAAoB,EAAE,OAAO,CAAA;CAC9B,CAAA;AAED,qBAAa,gCAAiC,SAAQ,KAAK;gBAC7C,QAAQ,EAAE,MAAM;CAG7B;AAmBD,wBAAgB,aAAa,CAC3B,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,QAAQ,GAChB,gBAAgB,CAAC,IAAI,GAAG,MAAM,CAAC,CAgDjC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { PostgresIndexApi, SqliteIndexApi } from './database-index-api.js';
|
|
2
|
+
import knex from 'knex';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
export class UnsupportedDatabaseProtocolError extends Error {
|
|
5
|
+
constructor(protocol) {
|
|
6
|
+
super(`Not supported database protocol ${protocol}`);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
class InvalidConnectionStringError extends Error {
|
|
10
|
+
constructor(connectionString) {
|
|
11
|
+
super(`Invalid database connection string: ${connectionString}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function parseURL(input) {
|
|
15
|
+
try {
|
|
16
|
+
return new URL(input);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
throw new InvalidConnectionStringError(input);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function buildIndexing(indexingConfig, logger, network) {
|
|
23
|
+
const connectionString = parseURL(indexingConfig.db);
|
|
24
|
+
const protocol = connectionString.protocol.replace(/:$/, '');
|
|
25
|
+
switch (protocol) {
|
|
26
|
+
case 'sqlite':
|
|
27
|
+
case 'sqlite3': {
|
|
28
|
+
logger.imp('Initializing SQLite connection');
|
|
29
|
+
if (fs) {
|
|
30
|
+
fs.mkdirSync(connectionString.pathname.substring(0, connectionString.pathname.lastIndexOf('/')), { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
const dbConnection = knex({
|
|
33
|
+
client: 'sqlite3',
|
|
34
|
+
useNullAsDefault: true,
|
|
35
|
+
connection: {
|
|
36
|
+
filename: connectionString.pathname,
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
return new SqliteIndexApi(dbConnection, indexingConfig.allowQueriesBeforeHistoricalSync, logger, network);
|
|
40
|
+
}
|
|
41
|
+
case 'postgres':
|
|
42
|
+
case 'postgresql': {
|
|
43
|
+
logger.imp('Initializing PostgreSQL connection');
|
|
44
|
+
const dataSource = knex({
|
|
45
|
+
client: 'pg',
|
|
46
|
+
connection: connectionString.toString(),
|
|
47
|
+
pool: { min: 0 },
|
|
48
|
+
});
|
|
49
|
+
return new PostgresIndexApi(dataSource, indexingConfig.allowQueriesBeforeHistoricalSync, logger, network);
|
|
50
|
+
}
|
|
51
|
+
default:
|
|
52
|
+
throw new UnsupportedDatabaseProtocolError(protocol);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=build-indexing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-indexing.js","sourceRoot":"","sources":["../src/build-indexing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,gBAAgB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACjG,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAwBxB,MAAM,OAAO,gCAAiC,SAAQ,KAAK;IACzD,YAAY,QAAgB;QAC1B,KAAK,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAA;IACtD,CAAC;CACF;AAED,MAAM,4BAA6B,SAAQ,KAAK;IAC9C,YAAY,gBAAwB;QAClC,KAAK,CAAC,uCAAuC,gBAAgB,EAAE,CAAC,CAAA;IAClE,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,IAAI;QACF,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;KACtB;IAAC,MAAM;QACN,MAAM,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAA;KAC9C;AACH,CAAC;AAKD,MAAM,UAAU,aAAa,CAC3B,cAA8B,EAC9B,MAAyB,EACzB,OAAiB;IAEjB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC5D,QAAQ,QAAQ,EAAE;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;YAC5C,IAAI,EAAE,EAAE;gBAIN,EAAE,CAAC,SAAS,CACV,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAClF,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAA;aACF;YACD,MAAM,YAAY,GAAG,IAAI,CAAC;gBACxB,MAAM,EAAE,SAAS;gBACjB,gBAAgB,EAAE,IAAI;gBACtB,UAAU,EAAE;oBACV,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;iBACpC;aACF,CAAC,CAAA;YACF,OAAO,IAAI,cAAc,CACvB,YAAY,EACZ,cAAc,CAAC,gCAAgC,EAC/C,MAAM,EACN,OAAO,CACR,CAAA;SACF;QACD,KAAK,UAAU,CAAC;QAChB,KAAK,YAAY,CAAC,CAAC;YACjB,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;YAChD,MAAM,UAAU,GAAG,IAAI,CAAC;gBACtB,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,gBAAgB,CAAC,QAAQ,EAAE;gBACvC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;aACjB,CAAC,CAAA;YACF,OAAO,IAAI,gBAAgB,CACzB,UAAU,EACV,cAAc,CAAC,gCAAgC,EAC/C,MAAM,EACN,OAAO,CACR,CAAA;SACF;QACD;YACE,MAAM,IAAI,gCAAgC,CAAC,QAAQ,CAAC,CAAA;KACvD;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-name.util.d.ts","sourceRoot":"","sources":["../src/column-name.util.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-name.util.js","sourceRoot":"","sources":["../src/column-name.util.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,SAAS,CAAA;AAEtC,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAA;AACnF,CAAC"}
|
package/lib/config.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB,mBAAmB,CAAA"}
|
package/lib/config.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { StreamID } from '@ceramicnetwork/streamid';
|
|
2
|
+
import type { BaseQuery, Pagination, Page, DiagnosticsLogger, Networks, FieldsIndex, ModelData } from '@ceramicnetwork/common';
|
|
3
|
+
import { Knex } from 'knex';
|
|
4
|
+
import type { CID } from 'multiformats/cid';
|
|
5
|
+
import { ModelRelationsDefinition } from '@ceramicnetwork/stream-model';
|
|
6
|
+
import { TablesManager } from './tables-manager.js';
|
|
7
|
+
import { ISyncQueryApi } from './history-sync/interfaces.js';
|
|
8
|
+
export declare const INDEXED_MODEL_CONFIG_TABLE_NAME = "ceramic_models";
|
|
9
|
+
export interface IndexStreamArgs {
|
|
10
|
+
readonly streamID: StreamID;
|
|
11
|
+
readonly model: StreamID;
|
|
12
|
+
readonly controller: string;
|
|
13
|
+
readonly streamContent: Record<string, any>;
|
|
14
|
+
readonly tip: CID;
|
|
15
|
+
readonly lastAnchor: Date | null;
|
|
16
|
+
readonly firstAnchor: Date | null;
|
|
17
|
+
}
|
|
18
|
+
export declare function fieldsIndexName(idx: FieldsIndex, table: string): string;
|
|
19
|
+
export interface IndexModelArgs {
|
|
20
|
+
readonly model: StreamID;
|
|
21
|
+
relations?: ModelRelationsDefinition;
|
|
22
|
+
indices?: Array<FieldsIndex>;
|
|
23
|
+
}
|
|
24
|
+
declare type IndexedData<DateType> = {
|
|
25
|
+
stream_id: string;
|
|
26
|
+
controller_did: string;
|
|
27
|
+
stream_content: Record<string, any> | string;
|
|
28
|
+
tip: string;
|
|
29
|
+
last_anchored_at: DateType | null;
|
|
30
|
+
first_anchored_at: DateType | null;
|
|
31
|
+
created_at?: DateType;
|
|
32
|
+
updated_at: DateType;
|
|
33
|
+
};
|
|
34
|
+
export declare abstract class DatabaseIndexApi<DateType = Date | number> {
|
|
35
|
+
protected readonly dbConnection: Knex;
|
|
36
|
+
private readonly allowQueriesBeforeHistoricalSync;
|
|
37
|
+
private readonly logger;
|
|
38
|
+
private readonly network;
|
|
39
|
+
private readonly insertionOrder;
|
|
40
|
+
private indexedModels;
|
|
41
|
+
private readonly modelRelations;
|
|
42
|
+
tablesManager: TablesManager;
|
|
43
|
+
syncApi: ISyncQueryApi;
|
|
44
|
+
protected constructor(dbConnection: Knex, allowQueriesBeforeHistoricalSync: boolean, logger: DiagnosticsLogger, network: Networks);
|
|
45
|
+
abstract getIndexedData(indexingArgs: IndexStreamArgs & {
|
|
46
|
+
createdAt?: Date;
|
|
47
|
+
updatedAt?: Date;
|
|
48
|
+
}): IndexedData<DateType>;
|
|
49
|
+
abstract now(): DateType;
|
|
50
|
+
abstract parseIndices(indices: unknown): Array<FieldsIndex>;
|
|
51
|
+
setSyncQueryApi(api: ISyncQueryApi): void;
|
|
52
|
+
indexModels(models: Array<IndexModelArgs>): Promise<void>;
|
|
53
|
+
private indexModelsInDatabase;
|
|
54
|
+
stopIndexingModels(models: Array<ModelData>): Promise<void>;
|
|
55
|
+
private stopIndexingModelsInDatabase;
|
|
56
|
+
indexStream(indexingArgs: IndexStreamArgs & {
|
|
57
|
+
createdAt?: Date;
|
|
58
|
+
updatedAt?: Date;
|
|
59
|
+
}): Promise<void>;
|
|
60
|
+
getIndexedModels(): Array<ModelData>;
|
|
61
|
+
private getIndexedModelsFromDatabase;
|
|
62
|
+
getModelsNoLongerIndexed(): Promise<Array<ModelData>>;
|
|
63
|
+
assertModelQueryable(modelStreamId: StreamID): Promise<void>;
|
|
64
|
+
assertModelIsIndexed(modelStreamId: StreamID): Promise<void>;
|
|
65
|
+
assertNoOngoingSyncForModel(modelStreamId: StreamID): Promise<void>;
|
|
66
|
+
abstract getCountFromResult(response: Array<Record<string, string | number>>): number;
|
|
67
|
+
count(query: BaseQuery): Promise<number>;
|
|
68
|
+
page(query: BaseQuery & Pagination): Promise<Page<StreamID>>;
|
|
69
|
+
init(): Promise<void>;
|
|
70
|
+
close(): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
export declare class PostgresIndexApi extends DatabaseIndexApi<Date> {
|
|
73
|
+
constructor(dbConnection: Knex, allowQueriesBeforeHistoricalSync: boolean, logger: DiagnosticsLogger, network: Networks);
|
|
74
|
+
now(): Date;
|
|
75
|
+
getCountFromResult(response: Array<Record<string, string | number>>): number;
|
|
76
|
+
getIndexedData(indexingArgs: IndexStreamArgs & {
|
|
77
|
+
createdAt?: Date;
|
|
78
|
+
updatedAt?: Date;
|
|
79
|
+
}): IndexedData<Date>;
|
|
80
|
+
parseIndices(indices: Array<FieldsIndex>): Array<FieldsIndex>;
|
|
81
|
+
}
|
|
82
|
+
export declare function asTimestamp(input: Date | null | undefined): number | null;
|
|
83
|
+
export declare class SqliteIndexApi extends DatabaseIndexApi<number> {
|
|
84
|
+
constructor(dbConnection: Knex, allowQueriesBeforeHistoricalSync: boolean, logger: DiagnosticsLogger, network: Networks);
|
|
85
|
+
now(): number;
|
|
86
|
+
getCountFromResult(response: [Record<string, string | number>]): number;
|
|
87
|
+
getIndexedData(indexingArgs: IndexStreamArgs & {
|
|
88
|
+
createdAt?: Date;
|
|
89
|
+
updatedAt?: Date;
|
|
90
|
+
}): IndexedData<number>;
|
|
91
|
+
parseIndices(indices: string): Array<FieldsIndex>;
|
|
92
|
+
}
|
|
93
|
+
export {};
|
|
94
|
+
//# sourceMappingURL=database-index-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-index-api.d.ts","sourceRoot":"","sources":["../src/database-index-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { StreamID } from '@ceramicnetwork/streamid';
|
|
2
|
+
import { InsertionOrder } from './insertion-order.js';
|
|
3
|
+
import { asTableName } from './as-table-name.util.js';
|
|
4
|
+
import { IndexQueryNotAvailableError } from './index-query-not-available.error.js';
|
|
5
|
+
import { PostgresTablesManager, SqliteTablesManager } from './tables-manager.js';
|
|
6
|
+
import { addColumnPrefix } from './column-name.util.js';
|
|
7
|
+
import cloneDeep from 'lodash.clonedeep';
|
|
8
|
+
import { indexNameFromTableName } from './migrations/1-create-model-table.js';
|
|
9
|
+
export const INDEXED_MODEL_CONFIG_TABLE_NAME = 'ceramic_models';
|
|
10
|
+
export function fieldsIndexName(idx, table) {
|
|
11
|
+
const fieldPath = idx.fields
|
|
12
|
+
.flatMap((f) => f.path)
|
|
13
|
+
.map((p) => p.slice(0, 5))
|
|
14
|
+
.join('_');
|
|
15
|
+
return `${indexNameFromTableName(table)}_${fieldPath}`.slice(0, 64);
|
|
16
|
+
}
|
|
17
|
+
export class DatabaseIndexApi {
|
|
18
|
+
constructor(dbConnection, allowQueriesBeforeHistoricalSync, logger, network) {
|
|
19
|
+
this.dbConnection = dbConnection;
|
|
20
|
+
this.allowQueriesBeforeHistoricalSync = allowQueriesBeforeHistoricalSync;
|
|
21
|
+
this.logger = logger;
|
|
22
|
+
this.network = network;
|
|
23
|
+
this.indexedModels = [];
|
|
24
|
+
this.modelRelations = new Map();
|
|
25
|
+
this.insertionOrder = new InsertionOrder(dbConnection);
|
|
26
|
+
}
|
|
27
|
+
setSyncQueryApi(api) {
|
|
28
|
+
this.syncApi = api;
|
|
29
|
+
}
|
|
30
|
+
async indexModels(models) {
|
|
31
|
+
await this.indexModelsInDatabase(models);
|
|
32
|
+
for (const modelArgs of models) {
|
|
33
|
+
await this.assertNoOngoingSyncForModel(modelArgs.model);
|
|
34
|
+
const foundModelToIndex = this.indexedModels.find((indexedModel) => indexedModel.streamID.equals(modelArgs.model));
|
|
35
|
+
if (!foundModelToIndex) {
|
|
36
|
+
this.indexedModels.push({
|
|
37
|
+
streamID: modelArgs.model,
|
|
38
|
+
indices: modelArgs.indices,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
if (modelArgs.relations) {
|
|
42
|
+
this.modelRelations.set(modelArgs.model.toString(), Object.keys(modelArgs.relations));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async indexModelsInDatabase(models) {
|
|
47
|
+
if (models.length === 0)
|
|
48
|
+
return;
|
|
49
|
+
await this.tablesManager.initMidTables(models);
|
|
50
|
+
await this.tablesManager.verifyTables(models);
|
|
51
|
+
await this.dbConnection(INDEXED_MODEL_CONFIG_TABLE_NAME)
|
|
52
|
+
.insert(models.map((indexModelArgs) => {
|
|
53
|
+
return {
|
|
54
|
+
model: indexModelArgs.model.toString(),
|
|
55
|
+
...(indexModelArgs.indices && { indices: JSON.stringify(indexModelArgs.indices) }),
|
|
56
|
+
is_indexed: true,
|
|
57
|
+
updated_by: '0',
|
|
58
|
+
updated_at: this.now(),
|
|
59
|
+
};
|
|
60
|
+
}))
|
|
61
|
+
.onConflict('model')
|
|
62
|
+
.merge({
|
|
63
|
+
updated_at: this.now(),
|
|
64
|
+
is_indexed: true,
|
|
65
|
+
updated_by: '0',
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
async stopIndexingModels(models) {
|
|
69
|
+
await this.stopIndexingModelsInDatabase(models);
|
|
70
|
+
this.indexedModels = this.indexedModels.filter((idx) => !models.some((data) => data.streamID.equals(idx.streamID)));
|
|
71
|
+
}
|
|
72
|
+
async stopIndexingModelsInDatabase(models) {
|
|
73
|
+
if (models.length === 0)
|
|
74
|
+
return;
|
|
75
|
+
await this.dbConnection(INDEXED_MODEL_CONFIG_TABLE_NAME)
|
|
76
|
+
.insert(models.map((model) => {
|
|
77
|
+
return {
|
|
78
|
+
model: model.streamID.toString(),
|
|
79
|
+
is_indexed: false,
|
|
80
|
+
updated_by: '0',
|
|
81
|
+
updated_at: this.now(),
|
|
82
|
+
};
|
|
83
|
+
}))
|
|
84
|
+
.onConflict('model')
|
|
85
|
+
.merge({
|
|
86
|
+
updated_at: this.now(),
|
|
87
|
+
is_indexed: false,
|
|
88
|
+
updated_by: '0',
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
async indexStream(indexingArgs) {
|
|
92
|
+
const tableName = asTableName(indexingArgs.model);
|
|
93
|
+
const indexedData = this.getIndexedData(indexingArgs);
|
|
94
|
+
const relations = this.modelRelations.get(indexingArgs.model.toString()) ?? [];
|
|
95
|
+
for (const relation of relations) {
|
|
96
|
+
indexedData[addColumnPrefix(relation)] = indexingArgs.streamContent[relation];
|
|
97
|
+
}
|
|
98
|
+
const toMerge = cloneDeep(indexedData);
|
|
99
|
+
delete toMerge['created_at'];
|
|
100
|
+
await this.dbConnection(tableName).insert(indexedData).onConflict('stream_id').merge(toMerge);
|
|
101
|
+
}
|
|
102
|
+
getIndexedModels() {
|
|
103
|
+
return this.indexedModels;
|
|
104
|
+
}
|
|
105
|
+
async getIndexedModelsFromDatabase() {
|
|
106
|
+
return (await this.dbConnection(INDEXED_MODEL_CONFIG_TABLE_NAME).select('model', 'indices').where({
|
|
107
|
+
is_indexed: true,
|
|
108
|
+
})).map((result) => {
|
|
109
|
+
return {
|
|
110
|
+
streamID: StreamID.fromString(result.model),
|
|
111
|
+
indices: this.parseIndices(result.indices),
|
|
112
|
+
};
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
async getModelsNoLongerIndexed() {
|
|
116
|
+
return (await this.dbConnection(INDEXED_MODEL_CONFIG_TABLE_NAME).select('model', 'indices').where({
|
|
117
|
+
is_indexed: false,
|
|
118
|
+
})).map((result) => {
|
|
119
|
+
return {
|
|
120
|
+
streamID: StreamID.fromString(result.model),
|
|
121
|
+
indices: result.indices,
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
async assertModelQueryable(modelStreamId) {
|
|
126
|
+
await this.assertModelIsIndexed(modelStreamId);
|
|
127
|
+
await this.assertNoOngoingSyncForModel(modelStreamId);
|
|
128
|
+
}
|
|
129
|
+
async assertModelIsIndexed(modelStreamId) {
|
|
130
|
+
const foundModelToIndex = this.indexedModels.find((indexedModel) => modelStreamId.equals(indexedModel.streamID));
|
|
131
|
+
if (foundModelToIndex == undefined) {
|
|
132
|
+
const err = new Error(`Query failed: Model ${modelStreamId.toString()} is not indexed on this node`);
|
|
133
|
+
this.logger.debug(err);
|
|
134
|
+
throw err;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
async assertNoOngoingSyncForModel(modelStreamId) {
|
|
138
|
+
if (!this.allowQueriesBeforeHistoricalSync &&
|
|
139
|
+
!(await this.syncApi.syncComplete(modelStreamId.toString()))) {
|
|
140
|
+
throw new IndexQueryNotAvailableError(modelStreamId);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
async count(query) {
|
|
144
|
+
const model = StreamID.fromString(query.model.toString());
|
|
145
|
+
await this.assertModelQueryable(model);
|
|
146
|
+
const tableName = asTableName(query.model);
|
|
147
|
+
let dbQuery = this.dbConnection(tableName).count('*');
|
|
148
|
+
dbQuery = this.insertionOrder.applyFilters(dbQuery, query);
|
|
149
|
+
return dbQuery.then((response) => this.getCountFromResult(response));
|
|
150
|
+
}
|
|
151
|
+
async page(query) {
|
|
152
|
+
const model = StreamID.fromString(query.model.toString());
|
|
153
|
+
await this.assertModelQueryable(model);
|
|
154
|
+
return this.insertionOrder.page(query);
|
|
155
|
+
}
|
|
156
|
+
async init() {
|
|
157
|
+
await this.tablesManager.initConfigTables(this.network);
|
|
158
|
+
this.indexedModels = await this.getIndexedModelsFromDatabase();
|
|
159
|
+
}
|
|
160
|
+
async close() {
|
|
161
|
+
await this.dbConnection.destroy();
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
export class PostgresIndexApi extends DatabaseIndexApi {
|
|
165
|
+
constructor(dbConnection, allowQueriesBeforeHistoricalSync, logger, network) {
|
|
166
|
+
super(dbConnection, allowQueriesBeforeHistoricalSync, logger, network);
|
|
167
|
+
this.tablesManager = new PostgresTablesManager(dbConnection, logger);
|
|
168
|
+
}
|
|
169
|
+
now() {
|
|
170
|
+
return new Date();
|
|
171
|
+
}
|
|
172
|
+
getCountFromResult(response) {
|
|
173
|
+
return Number(response[0]['count']);
|
|
174
|
+
}
|
|
175
|
+
getIndexedData(indexingArgs) {
|
|
176
|
+
const now = this.now();
|
|
177
|
+
return {
|
|
178
|
+
stream_id: indexingArgs.streamID.toString(),
|
|
179
|
+
controller_did: indexingArgs.controller.toString(),
|
|
180
|
+
stream_content: indexingArgs.streamContent,
|
|
181
|
+
tip: indexingArgs.tip.toString(),
|
|
182
|
+
last_anchored_at: indexingArgs.lastAnchor,
|
|
183
|
+
first_anchored_at: indexingArgs.firstAnchor,
|
|
184
|
+
created_at: indexingArgs.createdAt || now,
|
|
185
|
+
updated_at: indexingArgs.updatedAt || now,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
parseIndices(indices) {
|
|
189
|
+
return indices ?? undefined;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
export function asTimestamp(input) {
|
|
193
|
+
if (input) {
|
|
194
|
+
return input.valueOf();
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
export class SqliteIndexApi extends DatabaseIndexApi {
|
|
201
|
+
constructor(dbConnection, allowQueriesBeforeHistoricalSync, logger, network) {
|
|
202
|
+
super(dbConnection, allowQueriesBeforeHistoricalSync, logger, network);
|
|
203
|
+
this.tablesManager = new SqliteTablesManager(dbConnection, logger);
|
|
204
|
+
}
|
|
205
|
+
now() {
|
|
206
|
+
return new Date().valueOf();
|
|
207
|
+
}
|
|
208
|
+
getCountFromResult(response) {
|
|
209
|
+
return Number(response[0]['count(*)']);
|
|
210
|
+
}
|
|
211
|
+
getIndexedData(indexingArgs) {
|
|
212
|
+
const now = this.now();
|
|
213
|
+
return {
|
|
214
|
+
stream_id: indexingArgs.streamID.toString(),
|
|
215
|
+
controller_did: indexingArgs.controller.toString(),
|
|
216
|
+
stream_content: JSON.stringify(indexingArgs.streamContent),
|
|
217
|
+
tip: indexingArgs.tip.toString(),
|
|
218
|
+
last_anchored_at: asTimestamp(indexingArgs.lastAnchor),
|
|
219
|
+
first_anchored_at: asTimestamp(indexingArgs.firstAnchor),
|
|
220
|
+
created_at: asTimestamp(indexingArgs.createdAt) || now,
|
|
221
|
+
updated_at: asTimestamp(indexingArgs.updatedAt) || now,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
parseIndices(indices) {
|
|
225
|
+
return indices ? JSON.parse(indices) : undefined;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=database-index-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-index-api.js","sourceRoot":"","sources":["../src/database-index-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { CID } from 'multiformats/cid';
|
|
2
|
+
import type { StreamID } from '@ceramicnetwork/streamid';
|
|
3
|
+
import type { SupportedNetwork } from '@ceramicnetwork/anchor-utils';
|
|
4
|
+
export declare type SyncConfig = {
|
|
5
|
+
db: string;
|
|
6
|
+
chainId: SupportedNetwork;
|
|
7
|
+
};
|
|
8
|
+
export interface ISyncQueryApi {
|
|
9
|
+
syncComplete(model: string): boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ISyncApi extends ISyncQueryApi {
|
|
12
|
+
startModelSync(models: string | string[], startBlock?: number, endBlock?: number): Promise<void>;
|
|
13
|
+
stopModelSync(models: string | string[]): Promise<void>;
|
|
14
|
+
shutdown(): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare type HandleCommit = (streamId: StreamID, commit: CID, model?: StreamID) => Promise<void>;
|
|
17
|
+
export interface IpfsService {
|
|
18
|
+
retrieveFromIPFS(cid: CID | string, path?: string): Promise<any>;
|
|
19
|
+
retrieveCommit(cid: CID | string, streamId: StreamID): Promise<any>;
|
|
20
|
+
storeCommit(data: any, streamId?: StreamID): Promise<CID>;
|
|
21
|
+
storeRecord(record: Record<string, unknown>): Promise<CID>;
|
|
22
|
+
}
|
|
23
|
+
export interface TreeMetadata {
|
|
24
|
+
numEntries: number;
|
|
25
|
+
streamIds: string[];
|
|
26
|
+
}
|
|
27
|
+
export declare const REBUILD_ANCHOR_JOB = "rebuildAnchorJob";
|
|
28
|
+
export interface RebuildAnchorJobData {
|
|
29
|
+
models: string[];
|
|
30
|
+
chainId: string;
|
|
31
|
+
txHash: string;
|
|
32
|
+
root: string;
|
|
33
|
+
txType?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare const HISTORY_SYNC_JOB = "historySyncJob";
|
|
36
|
+
export declare const CONTINUOUS_SYNC_JOB = "continuousSyncJob";
|
|
37
|
+
export declare type SyncJob = typeof HISTORY_SYNC_JOB | typeof CONTINUOUS_SYNC_JOB;
|
|
38
|
+
export declare enum SyncJobType {
|
|
39
|
+
Catchup = 0,
|
|
40
|
+
Reorg = 1,
|
|
41
|
+
Full = 2,
|
|
42
|
+
Continuous = 3
|
|
43
|
+
}
|
|
44
|
+
export interface SyncJobData {
|
|
45
|
+
currentBlock?: number;
|
|
46
|
+
jobType: SyncJobType;
|
|
47
|
+
fromBlock: number;
|
|
48
|
+
toBlock: number;
|
|
49
|
+
models: string[];
|
|
50
|
+
}
|
|
51
|
+
export declare type JobData = RebuildAnchorJobData | SyncJobData;
|
|
52
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/history-sync/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAEpE,oBAAY,UAAU,GAAG;IAIvB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,gBAAgB,CAAA;CAC1B,CAAA;AAKD,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CACrC;AAMD,MAAM,WAAW,QAAS,SAAQ,aAAa;IAC7C,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAID,oBAAY,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAE/F,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IAChE,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACnE,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;IACzD,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;CAC3D;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,eAAO,MAAM,kBAAkB,qBAAqB,CAAA;AACpD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,gBAAgB,mBAAmB,CAAA;AAChD,eAAO,MAAM,mBAAmB,sBAAsB,CAAA;AAEtD,oBAAY,OAAO,GAAG,OAAO,gBAAgB,GAAG,OAAO,mBAAmB,CAAA;AAC1E,oBAAY,WAAW;IACrB,OAAO,IAAA;IACP,KAAK,IAAA;IACL,IAAI,IAAA;IACJ,UAAU,IAAA;CACX;AACD,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,WAAW,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,oBAAY,OAAO,GAAG,oBAAoB,GAAG,WAAW,CAAA"}
|