@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.
Files changed (98) hide show
  1. package/README.md +31 -0
  2. package/lib/__tests__/chunks.util.d.ts +2 -0
  3. package/lib/__tests__/chunks.util.d.ts.map +1 -0
  4. package/lib/__tests__/chunks.util.js +8 -0
  5. package/lib/__tests__/chunks.util.js.map +1 -0
  6. package/lib/__tests__/read-csv-fixture.util.d.ts +5 -0
  7. package/lib/__tests__/read-csv-fixture.util.d.ts.map +1 -0
  8. package/lib/__tests__/read-csv-fixture.util.js +35 -0
  9. package/lib/__tests__/read-csv-fixture.util.js.map +1 -0
  10. package/lib/as-table-name.util.d.ts +3 -0
  11. package/lib/as-table-name.util.d.ts.map +1 -0
  12. package/lib/as-table-name.util.js +4 -0
  13. package/lib/as-table-name.util.js.map +1 -0
  14. package/lib/build-indexing.d.ts +13 -0
  15. package/lib/build-indexing.d.ts.map +1 -0
  16. package/lib/build-indexing.js +55 -0
  17. package/lib/build-indexing.js.map +1 -0
  18. package/lib/column-name.util.d.ts +2 -0
  19. package/lib/column-name.util.d.ts.map +1 -0
  20. package/lib/column-name.util.js +5 -0
  21. package/lib/column-name.util.js.map +1 -0
  22. package/lib/config.d.ts +2 -0
  23. package/lib/config.d.ts.map +1 -0
  24. package/lib/config.js +2 -0
  25. package/lib/config.js.map +1 -0
  26. package/lib/database-index-api.d.ts +94 -0
  27. package/lib/database-index-api.d.ts.map +1 -0
  28. package/lib/database-index-api.js +228 -0
  29. package/lib/database-index-api.js.map +1 -0
  30. package/lib/history-sync/interfaces.d.ts +52 -0
  31. package/lib/history-sync/interfaces.d.ts.map +1 -0
  32. package/lib/history-sync/interfaces.js +11 -0
  33. package/lib/history-sync/interfaces.js.map +1 -0
  34. package/lib/history-sync/sync-api.d.ts +82 -0
  35. package/lib/history-sync/sync-api.d.ts.map +1 -0
  36. package/lib/history-sync/sync-api.js +276 -0
  37. package/lib/history-sync/sync-api.js.map +1 -0
  38. package/lib/history-sync/utils.d.ts +15 -0
  39. package/lib/history-sync/utils.d.ts.map +1 -0
  40. package/lib/history-sync/utils.js +23 -0
  41. package/lib/history-sync/utils.js.map +1 -0
  42. package/lib/history-sync/workers/rebuild-anchor.d.ts +15 -0
  43. package/lib/history-sync/workers/rebuild-anchor.d.ts.map +1 -0
  44. package/lib/history-sync/workers/rebuild-anchor.js +96 -0
  45. package/lib/history-sync/workers/rebuild-anchor.js.map +1 -0
  46. package/lib/history-sync/workers/sync.d.ts +24 -0
  47. package/lib/history-sync/workers/sync.d.ts.map +1 -0
  48. package/lib/history-sync/workers/sync.js +77 -0
  49. package/lib/history-sync/workers/sync.js.map +1 -0
  50. package/lib/index-query-not-available.error.d.ts +5 -0
  51. package/lib/index-query-not-available.error.d.ts.map +1 -0
  52. package/lib/index-query-not-available.error.js +6 -0
  53. package/lib/index-query-not-available.error.js.map +1 -0
  54. package/lib/index.d.ts +7 -0
  55. package/lib/index.d.ts.map +1 -0
  56. package/lib/index.js +6 -0
  57. package/lib/index.js.map +1 -0
  58. package/lib/insertion-order.d.ts +15 -0
  59. package/lib/insertion-order.d.ts.map +1 -0
  60. package/lib/insertion-order.js +180 -0
  61. package/lib/insertion-order.js.map +1 -0
  62. package/lib/local-index-api.d.ts +30 -0
  63. package/lib/local-index-api.d.ts.map +1 -0
  64. package/lib/local-index-api.js +118 -0
  65. package/lib/local-index-api.js.map +1 -0
  66. package/lib/make-index-api.d.ts +9 -0
  67. package/lib/make-index-api.d.ts.map +1 -0
  68. package/lib/make-index-api.js +27 -0
  69. package/lib/make-index-api.js.map +1 -0
  70. package/lib/migrations/1-create-model-table.d.ts +34 -0
  71. package/lib/migrations/1-create-model-table.d.ts.map +1 -0
  72. package/lib/migrations/1-create-model-table.js +243 -0
  73. package/lib/migrations/1-create-model-table.js.map +1 -0
  74. package/lib/migrations/cdb-schema-verification.d.ts +15 -0
  75. package/lib/migrations/cdb-schema-verification.d.ts.map +1 -0
  76. package/lib/migrations/cdb-schema-verification.js +272 -0
  77. package/lib/migrations/cdb-schema-verification.js.map +1 -0
  78. package/lib/parse-pagination.d.ts +18 -0
  79. package/lib/parse-pagination.d.ts.map +1 -0
  80. package/lib/parse-pagination.js +23 -0
  81. package/lib/parse-pagination.js.map +1 -0
  82. package/lib/query-filter-converter.d.ts +12 -0
  83. package/lib/query-filter-converter.d.ts.map +1 -0
  84. package/lib/query-filter-converter.js +231 -0
  85. package/lib/query-filter-converter.js.map +1 -0
  86. package/lib/query-filter-parser.d.ts +63 -0
  87. package/lib/query-filter-parser.d.ts.map +1 -0
  88. package/lib/query-filter-parser.js +178 -0
  89. package/lib/query-filter-parser.js.map +1 -0
  90. package/lib/tables-manager.d.ts +44 -0
  91. package/lib/tables-manager.d.ts.map +1 -0
  92. package/lib/tables-manager.js +218 -0
  93. package/lib/tables-manager.js.map +1 -0
  94. package/lib/unsupported-ordering-error.d.ts +4 -0
  95. package/lib/unsupported-ordering-error.d.ts.map +1 -0
  96. package/lib/unsupported-ordering-error.js +6 -0
  97. package/lib/unsupported-ordering-error.js.map +1 -0
  98. 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,2 @@
1
+ export declare function chunks<A>(array: Array<A>, size: number): Array<Array<A>>;
2
+ //# sourceMappingURL=chunks.util.d.ts.map
@@ -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,8 @@
1
+ export function chunks(array, size) {
2
+ const results = [];
3
+ for (let i = 0; i < array.length; i += size) {
4
+ results.push(array.slice(i, i + size));
5
+ }
6
+ return results;
7
+ }
8
+ //# sourceMappingURL=chunks.util.js.map
@@ -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,5 @@
1
+ import { IndexStreamArgs } from '../database-index-api.js';
2
+ export declare function readCsvFixture(filepath: URL): Promise<(IndexStreamArgs & {
3
+ createdAt?: Date | null | undefined;
4
+ })[]>;
5
+ //# sourceMappingURL=read-csv-fixture.util.d.ts.map
@@ -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,3 @@
1
+ import type { StreamID } from '@ceramicnetwork/streamid';
2
+ export declare function asTableName(model: StreamID | string): string;
3
+ //# sourceMappingURL=as-table-name.util.d.ts.map
@@ -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,4 @@
1
+ export function asTableName(model) {
2
+ return model.toString();
3
+ }
4
+ //# sourceMappingURL=as-table-name.util.js.map
@@ -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,2 @@
1
+ export declare function addColumnPrefix(name: string): string;
2
+ //# sourceMappingURL=column-name.util.d.ts.map
@@ -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,5 @@
1
+ const CUSTOM_COLUMN_PREFIX = 'custom_';
2
+ export function addColumnPrefix(name) {
3
+ return name.startsWith(CUSTOM_COLUMN_PREFIX) ? name : CUSTOM_COLUMN_PREFIX + name;
4
+ }
5
+ //# sourceMappingURL=column-name.util.js.map
@@ -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"}
@@ -0,0 +1,2 @@
1
+ export declare const CONFIG_TABLE_NAME = "ceramic_config";
2
+ //# sourceMappingURL=config.d.ts.map
@@ -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,2 @@
1
+ export const CONFIG_TABLE_NAME = 'ceramic_config';
2
+ //# sourceMappingURL=config.js.map
@@ -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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAanD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAA;AAClF,OAAO,EAAiB,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,SAAS,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAA;AAE7E,MAAM,CAAC,MAAM,+BAA+B,GAAG,gBAAgB,CAAA;AAiB/D,MAAM,UAAU,eAAe,CAAC,GAAgB,EAAE,KAAa;IAC7D,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM;SACzB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACzB,IAAI,CAAC,GAAG,CAAC,CAAA;IACZ,OAAO,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACrE,CAAC;AA4BD,MAAM,OAAgB,gBAAgB;IASpC,YACqB,YAAkB,EACpB,gCAAyC,EACzC,MAAyB,EACzB,OAAiB;QAHf,iBAAY,GAAZ,YAAY,CAAM;QACpB,qCAAgC,GAAhC,gCAAgC,CAAS;QACzC,WAAM,GAAN,MAAM,CAAmB;QACzB,YAAO,GAAP,OAAO,CAAU;QAX5B,kBAAa,GAAqB,EAAE,CAAA;QAG3B,mBAAc,GAAG,IAAI,GAAG,EAAyB,CAAA;QAUhE,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,YAAY,CAAC,CAAA;IACxD,CAAC;IAQD,eAAe,CAAC,GAAkB;QAChC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAA;IACpB,CAAC;IAOD,KAAK,CAAC,WAAW,CAAC,MAA6B;QAC7C,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAA;QACxC,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE;YAC9B,MAAM,IAAI,CAAC,2BAA2B,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACvD,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CACjE,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAC9C,CAAA;YACD,IAAI,CAAC,iBAAiB,EAAE;gBACtB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;oBACtB,QAAQ,EAAE,SAAS,CAAC,KAAK;oBACzB,OAAO,EAAE,SAAS,CAAC,OAAO;iBAC3B,CAAC,CAAA;aACH;YACD,IAAI,SAAS,CAAC,SAAS,EAAE;gBACvB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAA;aACtF;SACF;IACH,CAAC;IAEO,KAAK,CAAC,qBAAqB,CAAC,MAA6B;QAC/D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAC/B,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC9C,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAG7C,MAAM,IAAI,CAAC,YAAY,CAAC,+BAA+B,CAAC;aACrD,MAAM,CACL,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE;YAC5B,OAAO;gBACL,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACtC,GAAG,CAAC,cAAc,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClF,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;aACvB,CAAA;QACH,CAAC,CAAC,CACH;aACA,UAAU,CAAC,OAAO,CAAC;aACnB,KAAK,CAAC;YACL,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,GAAG;SAChB,CAAC,CAAA;IACN,CAAC;IAOD,KAAK,CAAC,kBAAkB,CAAC,MAAwB;QAC/C,MAAM,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAA;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAC5C,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CACpE,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,4BAA4B,CAAC,MAAwB;QACjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAE/B,MAAM,IAAI,CAAC,YAAY,CAAC,+BAA+B,CAAC;aACrD,MAAM,CACL,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACnB,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE;gBAChC,UAAU,EAAE,KAAK;gBACjB,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;aACvB,CAAA;QACH,CAAC,CAAC,CACH;aACA,UAAU,CAAC,OAAO,CAAC;aACnB,KAAK,CAAC;YACL,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,GAAG;SAChB,CAAC,CAAA;IACN,CAAC;IAOD,KAAK,CAAC,WAAW,CACf,YAAsE;QAEtE,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAA4B,CAAA;QAChF,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAA;QAC9E,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;SAC9E;QACD,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;QACtC,OAAO,OAAO,CAAC,YAAY,CAAC,CAAA;QAC5B,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC/F,CAAC;IAKM,gBAAgB;QAMrB,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAEO,KAAK,CAAC,4BAA4B;QACxC,OAAO,CACL,MAAM,IAAI,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC;YACxF,UAAU,EAAE,IAAI;SACjB,CAAC,CACH,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,OAAO;gBACL,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC3C,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;aAC3C,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,wBAAwB;QAC5B,OAAO,CACL,MAAM,IAAI,CAAC,YAAY,CAAC,+BAA+B,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC;YACxF,UAAU,EAAE,KAAK;SAClB,CAAC,CACH,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,OAAO;gBACL,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC3C,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAKD,KAAK,CAAC,oBAAoB,CAAC,aAAuB;QAChD,MAAM,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAA;QAC9C,MAAM,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAA;IACvD,CAAC;IAMD,KAAK,CAAC,oBAAoB,CAAC,aAAuB;QAChD,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,CACjE,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAC5C,CAAA;QACD,IAAI,iBAAiB,IAAI,SAAS,EAAE;YAClC,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,uBAAuB,aAAa,CAAC,QAAQ,EAAE,8BAA8B,CAC9E,CAAA;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACtB,MAAM,GAAG,CAAA;SACV;IACH,CAAC;IAMD,KAAK,CAAC,2BAA2B,CAAC,aAAuB;QACvD,IACE,CAAC,IAAI,CAAC,gCAAgC;YACtC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,EAC5D;YACA,MAAM,IAAI,2BAA2B,CAAC,aAAa,CAAC,CAAA;SACrD;IACH,CAAC;IAOD,KAAK,CAAC,KAAK,CAAC,KAAgB;QAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;QACzD,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAEtC,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAErD,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAE1D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtE,CAAC;IAKD,KAAK,CAAC,IAAI,CAAC,KAA6B;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;QACzD,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAA;QACtC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxC,CAAC;IAKD,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACvD,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAA;IAChE,CAAC;IAKD,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAA;IACnC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,gBAAsB;IAC1D,YACE,YAAkB,EAClB,gCAAyC,EACzC,MAAyB,EACzB,OAAiB;QAEjB,KAAK,CAAC,YAAY,EAAE,gCAAgC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACtE,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAqB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IACtE,CAAC;IAED,GAAG;QAED,OAAO,IAAI,IAAI,EAAE,CAAA;IACnB,CAAC;IAED,kBAAkB,CAAC,QAAgD;QACjE,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IACtC,CAAC;IAED,cAAc,CACZ,YAAsE;QAEtE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,OAAO;YACL,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC3C,cAAc,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE;YAClD,cAAc,EAAE,YAAY,CAAC,aAAa;YAC1C,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE;YAChC,gBAAgB,EAAE,YAAY,CAAC,UAAU;YACzC,iBAAiB,EAAE,YAAY,CAAC,WAAW;YAC3C,UAAU,EAAE,YAAY,CAAC,SAAS,IAAI,GAAG;YACzC,UAAU,EAAE,YAAY,CAAC,SAAS,IAAI,GAAG;SAC1C,CAAA;IACH,CAAC;IAED,YAAY,CAAC,OAA2B;QACtC,OAAO,OAAO,IAAI,SAAS,CAAA;IAC7B,CAAC;CACF;AAKD,MAAM,UAAU,WAAW,CAAC,KAA8B;IACxD,IAAI,KAAK,EAAE;QACT,OAAO,KAAK,CAAC,OAAO,EAAE,CAAA;KACvB;SAAM;QACL,OAAO,IAAI,CAAA;KACZ;AACH,CAAC;AAED,MAAM,OAAO,cAAe,SAAQ,gBAAwB;IAC1D,YACE,YAAkB,EAClB,gCAAyC,EACzC,MAAyB,EACzB,OAAiB;QAEjB,KAAK,CAAC,YAAY,EAAE,gCAAgC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACtE,IAAI,CAAC,aAAa,GAAG,IAAI,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IACpE,CAAC;IAED,GAAG;QACD,OAAO,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAC7B,CAAC;IAED,kBAAkB,CAAC,QAA2C;QAC5D,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;IACxC,CAAC;IAED,cAAc,CACZ,YAAsE;QAEtE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,OAAO;YACL,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC3C,cAAc,EAAE,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE;YAClD,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC;YAC1D,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE;YAChC,gBAAgB,EAAE,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC;YACtD,iBAAiB,EAAE,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC;YACxD,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG;YACtD,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,GAAG;SACvD,CAAA;IACH,CAAC;IAED,YAAY,CAAC,OAAe;QAC1B,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAClD,CAAC;CACF"}
@@ -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"}