@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
@@ -0,0 +1,77 @@
1
+ import { createBlocksProofsLoader } from '@ceramicnetwork/anchor-listener';
2
+ import { concatMap, lastValueFrom, of, catchError } from 'rxjs';
3
+ import { createRebuildAnchorJob } from './rebuild-anchor.js';
4
+ import { HISTORY_SYNC_JOB, CONTINUOUS_SYNC_JOB, } from '../interfaces.js';
5
+ const SYNC_JOB_OPTIONS = {
6
+ retryLimit: 5,
7
+ retryDelay: 60,
8
+ retryBackoff: true,
9
+ expireInHours: 12,
10
+ retentionDays: 3,
11
+ };
12
+ export function createContinuousSyncJob(data, options) {
13
+ return {
14
+ name: CONTINUOUS_SYNC_JOB,
15
+ data,
16
+ options: options || SYNC_JOB_OPTIONS,
17
+ };
18
+ }
19
+ export function createHistorySyncJob(data, options) {
20
+ return {
21
+ name: HISTORY_SYNC_JOB,
22
+ data,
23
+ options: options || SYNC_JOB_OPTIONS,
24
+ };
25
+ }
26
+ export class SyncWorker {
27
+ constructor(provider, jobQueue, chainId, logger, syncCompleteCallback) {
28
+ this.provider = provider;
29
+ this.jobQueue = jobQueue;
30
+ this.chainId = chainId;
31
+ this.logger = logger;
32
+ this.syncCompleteCallback = syncCompleteCallback;
33
+ }
34
+ async handler(job) {
35
+ const jobData = job.data;
36
+ const { jobType, fromBlock, toBlock, models } = jobData;
37
+ const currentBlock = jobData.currentBlock || fromBlock;
38
+ const blockProof$ = createBlocksProofsLoader({
39
+ provider: this.provider,
40
+ chainId: this.chainId,
41
+ fromBlock: currentBlock,
42
+ toBlock,
43
+ }).pipe(catchError((err) => {
44
+ this.logger.err(`Received error when retrieving block proofs for models ${models} from block ${currentBlock} to block ${toBlock}: ${err}`);
45
+ return of(null);
46
+ }), concatMap(async (blockProofs) => {
47
+ if (!blockProofs) {
48
+ throw Error('Error loading block proof');
49
+ }
50
+ const { proofs, blockNumber } = blockProofs;
51
+ if (proofs.length > 0) {
52
+ const jobs = proofs.map((proof) => createRebuildAnchorJob(proof, models));
53
+ await this.jobQueue.addJobs(jobs);
54
+ this.logger.debug(`Successfully created ${jobs.length} rebuild anchor commit jobs for block ${blockNumber}`);
55
+ }
56
+ await this.jobQueue.updateJob(job.id, {
57
+ fromBlock,
58
+ currentBlock: blockNumber + 1,
59
+ toBlock,
60
+ models,
61
+ jobType,
62
+ });
63
+ }));
64
+ await lastValueFrom(blockProof$).then(() => {
65
+ if (this.syncCompleteCallback) {
66
+ for (const model of models) {
67
+ this.syncCompleteCallback({
68
+ jobType: jobType,
69
+ modelId: model,
70
+ });
71
+ }
72
+ }
73
+ this.logger.debug(`Sync completed for models ${models} from block ${fromBlock} to block ${toBlock}`);
74
+ });
75
+ }
76
+ }
77
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/history-sync/workers/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { StreamID } from '@ceramicnetwork/streamid';
2
+ export declare class IndexQueryNotAvailableError extends Error {
3
+ constructor(model: StreamID | string);
4
+ }
5
+ //# sourceMappingURL=index-query-not-available.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-query-not-available.error.d.ts","sourceRoot":"","sources":["../src/index-query-not-available.error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAExD,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,KAAK,EAAE,QAAQ,GAAG,MAAM;CAKrC"}
@@ -0,0 +1,6 @@
1
+ export class IndexQueryNotAvailableError extends Error {
2
+ constructor(model) {
3
+ super(`Queries on Model ${model} are not currently available because historical data for that model is still syncing`);
4
+ }
5
+ }
6
+ //# sourceMappingURL=index-query-not-available.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-query-not-available.error.js","sourceRoot":"","sources":["../src/index-query-not-available.error.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IACpD,YAAY,KAAwB;QAClC,KAAK,CACH,oBAAoB,KAAK,sFAAsF,CAChH,CAAA;IACH,CAAC;CACF"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export type { IndexingConfig } from './build-indexing.js';
2
+ export { CONFIG_TABLE_NAME } from './config.js';
3
+ export { INDEXED_MODEL_CONFIG_TABLE_NAME } from './database-index-api.js';
4
+ export { BLOCK_CONFIRMATIONS, STATE_TABLE_NAME, SyncApi } from './history-sync/sync-api.js';
5
+ export { LocalIndexApi } from './local-index-api.js';
6
+ export { getDefaultCDBDatabaseConfig } from './migrations/1-create-model-table.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAA"}
package/lib/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { CONFIG_TABLE_NAME } from './config.js';
2
+ export { INDEXED_MODEL_CONFIG_TABLE_NAME } from './database-index-api.js';
3
+ export { BLOCK_CONFIRMATIONS, STATE_TABLE_NAME, SyncApi } from './history-sync/sync-api.js';
4
+ export { LocalIndexApi } from './local-index-api.js';
5
+ export { getDefaultCDBDatabaseConfig } from './migrations/1-create-model-table.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { type Knex } from 'knex';
2
+ import { StreamID } from '@ceramicnetwork/streamid';
3
+ import type { BaseQuery, Page, Pagination } from '@ceramicnetwork/common';
4
+ export declare class InsertionOrder {
5
+ private readonly dbConnection;
6
+ constructor(dbConnection: Knex);
7
+ page(query: BaseQuery & Pagination): Promise<Page<StreamID>>;
8
+ private forwardQuery;
9
+ private backwardQuery;
10
+ private query;
11
+ applyFilters(builder: Knex.QueryBuilder, query: BaseQuery): Knex.QueryBuilder;
12
+ private applyCursor;
13
+ private applySorting;
14
+ }
15
+ //# sourceMappingURL=insertion-order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insertion-order.d.ts","sourceRoot":"","sources":["../src/insertion-order.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,MAAM,CAAA;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAsB,MAAM,wBAAwB,CAAA;AA0G7F,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,IAAI;IAEzC,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAuDpD,YAAY;YAYZ,aAAa;IAY3B,OAAO,CAAC,KAAK;IAiBb,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC,YAAY;IAuB7E,OAAO,CAAC,WAAW;IA4BnB,OAAO,CAAC,YAAY;CAoBrB"}
@@ -0,0 +1,180 @@
1
+ import * as uint8arrays from 'uint8arrays';
2
+ import { StreamID } from '@ceramicnetwork/streamid';
3
+ import { PaginationKind, parsePagination, } from './parse-pagination.js';
4
+ import { asTableName } from './as-table-name.util.js';
5
+ import { UnsupportedOrderingError } from './unsupported-ordering-error.js';
6
+ import { addColumnPrefix } from './column-name.util.js';
7
+ import { contentKey, convertQueryFilter, DATA_FIELD } from './query-filter-converter.js';
8
+ import { parseQueryFilters } from './query-filter-parser.js';
9
+ class Cursor {
10
+ static parse(cursor) {
11
+ return cursor
12
+ ? JSON.parse(uint8arrays.toString(uint8arrays.fromString(cursor, 'base64url')))
13
+ : undefined;
14
+ }
15
+ static stringify(input, orderByKeys = []) {
16
+ if (input == null) {
17
+ return undefined;
18
+ }
19
+ let cursor;
20
+ if (orderByKeys.length === 0) {
21
+ cursor = { type: 'timestamp', id: input.stream_id, value: input.created_at };
22
+ }
23
+ else {
24
+ const content = typeof input.stream_content === 'string'
25
+ ? JSON.parse(input.stream_content)
26
+ : input.stream_content;
27
+ cursor = { type: 'content', id: input.stream_id, value: {} };
28
+ for (const key of orderByKeys) {
29
+ if (content[key] != null) {
30
+ cursor.value[key] = content[key];
31
+ }
32
+ }
33
+ }
34
+ return uint8arrays.toString(uint8arrays.fromString(JSON.stringify(cursor)), 'base64url');
35
+ }
36
+ }
37
+ const REVERSE_ORDER = {
38
+ ASC: 'DESC',
39
+ DESC: 'ASC',
40
+ };
41
+ function getComparisonSign(order = 'ASC', reverse = false) {
42
+ return order === 'ASC' ? (reverse ? '<' : '>') : reverse ? '>' : '<';
43
+ }
44
+ function reverseOrder(entries) {
45
+ return entries.map((entry) => ({ ...entry, order: REVERSE_ORDER[entry.order] }));
46
+ }
47
+ const INSERTION_ORDER = [{ column: 'created_at', order: 'ASC' }];
48
+ export class InsertionOrder {
49
+ constructor(dbConnection) {
50
+ this.dbConnection = dbConnection;
51
+ }
52
+ async page(query) {
53
+ const orderByKeys = Object.keys(query.sorting ?? {});
54
+ const pagination = parsePagination(query);
55
+ const paginationKind = pagination.kind;
56
+ switch (paginationKind) {
57
+ case PaginationKind.FORWARD: {
58
+ const limit = pagination.first;
59
+ const response = await this.forwardQuery(query, pagination);
60
+ const entries = response.slice(0, limit);
61
+ const firstEntry = entries[0];
62
+ const lastEntry = entries[entries.length - 1];
63
+ return {
64
+ edges: entries.map((row) => {
65
+ return {
66
+ cursor: Cursor.stringify(row, orderByKeys),
67
+ node: StreamID.fromString(row.stream_id),
68
+ };
69
+ }),
70
+ pageInfo: {
71
+ hasNextPage: response.length > limit,
72
+ hasPreviousPage: false,
73
+ endCursor: Cursor.stringify(lastEntry, orderByKeys),
74
+ startCursor: Cursor.stringify(firstEntry, orderByKeys),
75
+ },
76
+ };
77
+ }
78
+ case PaginationKind.BACKWARD: {
79
+ const limit = pagination.last;
80
+ const response = await this.backwardQuery(query, pagination);
81
+ const entries = response.slice(-limit);
82
+ const firstEntry = entries[0];
83
+ const lastEntry = entries[entries.length - 1];
84
+ return {
85
+ edges: entries.map((row) => {
86
+ return {
87
+ cursor: Cursor.stringify(row, orderByKeys),
88
+ node: StreamID.fromString(row.stream_id),
89
+ };
90
+ }),
91
+ pageInfo: {
92
+ hasNextPage: false,
93
+ hasPreviousPage: response.length > limit,
94
+ endCursor: Cursor.stringify(lastEntry, orderByKeys),
95
+ startCursor: Cursor.stringify(firstEntry, orderByKeys),
96
+ },
97
+ };
98
+ }
99
+ default:
100
+ throw new UnsupportedOrderingError(paginationKind);
101
+ }
102
+ }
103
+ async forwardQuery(query, pagination) {
104
+ return await this.query(query, false, Cursor.parse(pagination.after)).limit(pagination.first + 1);
105
+ }
106
+ async backwardQuery(query, pagination) {
107
+ const response = await this.query(query, true, Cursor.parse(pagination.before)).limit(pagination.last + 1);
108
+ response.reverse();
109
+ return response;
110
+ }
111
+ query(query, isReverseOrder, cursor) {
112
+ let builder = this.dbConnection
113
+ .from(asTableName(query.model))
114
+ .columns(['stream_id', 'last_anchored_at', 'created_at', DATA_FIELD])
115
+ .select();
116
+ builder = this.applyFilters(builder, query);
117
+ const sorting = query.sorting ?? {};
118
+ if (cursor != null) {
119
+ builder = this.applyCursor(builder, cursor, isReverseOrder, sorting);
120
+ }
121
+ builder = this.applySorting(builder, isReverseOrder, sorting);
122
+ return builder;
123
+ }
124
+ applyFilters(builder, query) {
125
+ if (query.account) {
126
+ builder = builder.where({ controller_did: query.account });
127
+ }
128
+ if (query.queryFilters) {
129
+ const parsed = parseQueryFilters(query.queryFilters);
130
+ const converted = convertQueryFilter(parsed);
131
+ if (converted) {
132
+ builder = builder.where(converted.where);
133
+ }
134
+ }
135
+ else if (query.filter) {
136
+ for (const [key, value] of Object.entries(query.filter)) {
137
+ const filterObj = {};
138
+ filterObj[addColumnPrefix(key)] = value;
139
+ builder = builder.andWhere(filterObj);
140
+ }
141
+ }
142
+ return builder;
143
+ }
144
+ applyCursor(builder, cursor, isReverseOrder, sorting) {
145
+ if (cursor.type === 'timestamp') {
146
+ builder = builder.where((qb) => {
147
+ qb.where('created_at', isReverseOrder ? '<' : '>', cursor.value)
148
+ .orWhere('created_at', '=', cursor.value)
149
+ .andWhere('stream_id', '>', cursor.id);
150
+ });
151
+ }
152
+ else {
153
+ for (const [key, value] of Object.entries(cursor.value)) {
154
+ const field = contentKey(key);
155
+ const sign = getComparisonSign(sorting[key], isReverseOrder);
156
+ builder = builder.where((qb) => {
157
+ qb.whereRaw(`${field} ${sign} ?`, [value])
158
+ .orWhereRaw(`${field} = ?`, [value])
159
+ .andWhere('stream_id', '>', cursor.id);
160
+ });
161
+ }
162
+ }
163
+ return builder;
164
+ }
165
+ applySorting(builder, isReverseOrder, sorting) {
166
+ const sortingEntries = Object.entries(sorting ?? {});
167
+ if (sortingEntries.length === 0) {
168
+ builder = builder.orderBy(isReverseOrder ? reverseOrder(INSERTION_ORDER) : INSERTION_ORDER);
169
+ }
170
+ else {
171
+ for (const [field, order] of sortingEntries) {
172
+ const orderBy = isReverseOrder ? REVERSE_ORDER[order] : order;
173
+ builder = builder.orderByRaw(`${contentKey(field)} ${orderBy}`);
174
+ }
175
+ }
176
+ builder = builder.orderBy('stream_id', 'asc');
177
+ return builder;
178
+ }
179
+ }
180
+ //# sourceMappingURL=insertion-order.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insertion-order.js","sourceRoot":"","sources":["../src/insertion-order.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { BaseQuery, IndexApi, ModelData, Page, PaginationQuery, StreamState, DiagnosticsLogger, LoadOpts, Stream } from '@ceramicnetwork/common';
2
+ import type { IndexModelArgs } from './database-index-api.js';
3
+ import { IndexStreamArgs } from './database-index-api.js';
4
+ import { type CommitID, StreamID } from '@ceramicnetwork/streamid';
5
+ import { IndexingConfig } from './build-indexing.js';
6
+ import { Networks } from '@ceramicnetwork/common';
7
+ import { ISyncQueryApi } from './history-sync/interfaces.js';
8
+ export declare type CeramicCoreApi = {
9
+ loadStream<T extends Stream>(streamId: StreamID | CommitID | string, opts?: LoadOpts): Promise<T>;
10
+ loadStreamState(streamId: StreamID): Promise<StreamState | undefined>;
11
+ };
12
+ export declare class LocalIndexApi implements IndexApi {
13
+ private readonly core;
14
+ private readonly logger;
15
+ private readonly databaseIndexApi;
16
+ readonly enabled: boolean;
17
+ constructor(indexingConfig: IndexingConfig | undefined, core: CeramicCoreApi, logger: DiagnosticsLogger, networkName: Networks);
18
+ setSyncQueryApi(api: ISyncQueryApi): void;
19
+ shouldIndexStream(args: StreamID): boolean;
20
+ indexStream(args: IndexStreamArgs): Promise<void>;
21
+ count(query: BaseQuery): Promise<number>;
22
+ query(query: PaginationQuery): Promise<Page<StreamState | null>>;
23
+ indexedModels(): Array<ModelData>;
24
+ convertModelDataToIndexModelsArgs(modelsNoLongerIndexed: Array<ModelData>, modelData: ModelData): Promise<IndexModelArgs>;
25
+ indexModels(models: Array<ModelData>): Promise<void>;
26
+ stopIndexingModels(models: Array<ModelData>): Promise<void>;
27
+ init(): Promise<void>;
28
+ close(): Promise<void>;
29
+ }
30
+ //# sourceMappingURL=local-index-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-index-api.d.ts","sourceRoot":"","sources":["../src/local-index-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,QAAQ,EACR,MAAM,EACP,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,KAAK,QAAQ,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAE5D,oBAAY,cAAc,GAAG;IAC3B,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACjG,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAA;CACtE,CAAA;AAgCD,qBAAa,aAAc,YAAW,QAAQ;IAM1C,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IANzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8B;IAC/D,SAAgB,OAAO,EAAE,OAAO,CAAA;gBAG9B,cAAc,EAAE,cAAc,GAAG,SAAS,EACzB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,iBAAiB,EAC1C,WAAW,EAAE,QAAQ;IAMvB,eAAe,CAAC,GAAG,EAAE,aAAa;IAMlC,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAcpC,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjD,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAUxC,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAwCtE,aAAa,IAAI,KAAK,CAAC,SAAS,CAAC;IAI3B,iCAAiC,CACrC,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAC,EACvC,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,cAAc,CAAC;IAiBpB,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpD,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAYrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -0,0 +1,118 @@
1
+ import { makeIndexApi } from './make-index-api.js';
2
+ import { Model } from '@ceramicnetwork/stream-model';
3
+ async function _getIndexModelArgs(req, core) {
4
+ const modelStreamId = req.streamID;
5
+ if (modelStreamId.type != Model.STREAM_TYPE_ID && !modelStreamId.equals(Model.MODEL)) {
6
+ throw new Error(`Cannot index ${modelStreamId.toString()}, it is not a Model StreamID`);
7
+ }
8
+ const opts = {
9
+ model: modelStreamId,
10
+ };
11
+ if (modelStreamId.type == Model.STREAM_TYPE_ID) {
12
+ const modelState = await core.loadStream(modelStreamId, {});
13
+ const content = modelState.state.next?.content ?? modelState.state.content;
14
+ Model.assertVersionValid(content, 'major');
15
+ if (content.relations) {
16
+ opts.relations = content.relations;
17
+ }
18
+ opts.indices = req.indices;
19
+ }
20
+ return opts;
21
+ }
22
+ export class LocalIndexApi {
23
+ constructor(indexingConfig, core, logger, networkName) {
24
+ this.core = core;
25
+ this.logger = logger;
26
+ this.databaseIndexApi = makeIndexApi(indexingConfig, networkName, logger);
27
+ this.enabled = indexingConfig != null && !indexingConfig.disableComposedb;
28
+ }
29
+ setSyncQueryApi(api) {
30
+ if (this.databaseIndexApi) {
31
+ this.databaseIndexApi.setSyncQueryApi(api);
32
+ }
33
+ }
34
+ shouldIndexStream(args) {
35
+ if (!this.databaseIndexApi) {
36
+ return false;
37
+ }
38
+ return this.databaseIndexApi.getIndexedModels().some(function (idx) {
39
+ return idx.streamID.equals(args);
40
+ });
41
+ }
42
+ async indexStream(args) {
43
+ if (!this.shouldIndexStream(args.model)) {
44
+ return;
45
+ }
46
+ await this.databaseIndexApi.indexStream(args);
47
+ }
48
+ async count(query) {
49
+ return this.databaseIndexApi.count(query);
50
+ }
51
+ async query(query) {
52
+ if (!this.databaseIndexApi) {
53
+ this.logger.warn(`Indexing is not configured. Unable to serve query ${JSON.stringify(query)}`);
54
+ return {
55
+ edges: [],
56
+ pageInfo: {
57
+ hasNextPage: false,
58
+ hasPreviousPage: false,
59
+ },
60
+ };
61
+ }
62
+ const page = await this.databaseIndexApi.page(query);
63
+ const edges = await Promise.all(page.edges.map(async (edge) => {
64
+ const node = (await this.core.loadStreamState(edge.node)) ?? null;
65
+ if (!node) {
66
+ this.logger.warn(`
67
+ Did not find stream state for streamid ${edge.node} in our state store when serving an indexed query.
68
+ This may indicate a problem with data persistence of your state store, which can result in data loss.
69
+ Please check that your state store is properly configured with strong persistence guarantees.
70
+ This query may have incomplete results. Affected query: ${JSON.stringify(query)}
71
+ `);
72
+ }
73
+ return {
74
+ cursor: edge.cursor,
75
+ node: node,
76
+ };
77
+ }));
78
+ return {
79
+ edges: edges,
80
+ pageInfo: page.pageInfo,
81
+ };
82
+ }
83
+ indexedModels() {
84
+ return this.databaseIndexApi?.getIndexedModels() ?? [];
85
+ }
86
+ async convertModelDataToIndexModelsArgs(modelsNoLongerIndexed, modelData) {
87
+ const modelStreamId = modelData.streamID;
88
+ this.logger.imp(`Starting indexing for Model ${modelStreamId.toString()}`);
89
+ const modelNoLongerIndexed = modelsNoLongerIndexed.some(function (oldIdx) {
90
+ return oldIdx.streamID.equals(modelStreamId);
91
+ });
92
+ if (modelNoLongerIndexed) {
93
+ throw new Error(`Cannot re-index model ${modelStreamId.toString()}, data may not be up-to-date`);
94
+ }
95
+ return await _getIndexModelArgs(modelData, this.core);
96
+ }
97
+ async indexModels(models) {
98
+ const modelsNoLongerIndexed = (await this.databaseIndexApi?.getModelsNoLongerIndexed()) ?? [];
99
+ const indexModelsArgs = await Promise.all(models.map(async (idx) => await this.convertModelDataToIndexModelsArgs(modelsNoLongerIndexed, idx)));
100
+ await this.databaseIndexApi?.indexModels(indexModelsArgs);
101
+ }
102
+ async stopIndexingModels(models) {
103
+ this.logger.imp(`Stopping indexing for Models: ${models.map(String).join(',')}`);
104
+ await this.databaseIndexApi?.stopIndexingModels(models);
105
+ }
106
+ async init() {
107
+ if (!this.databaseIndexApi) {
108
+ return;
109
+ }
110
+ await this.databaseIndexApi.init();
111
+ const modelsToIndex = this.databaseIndexApi.getIndexedModels();
112
+ await this.indexModels(modelsToIndex);
113
+ }
114
+ async close() {
115
+ await this.databaseIndexApi?.close();
116
+ }
117
+ }
118
+ //# sourceMappingURL=local-index-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-index-api.js","sourceRoot":"","sources":["../src/local-index-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { DiagnosticsLogger } from '@ceramicnetwork/common';
2
+ import { Networks } from '@ceramicnetwork/common';
3
+ import { IndexingConfig } from './build-indexing.js';
4
+ import { DatabaseIndexApi } from './database-index-api.js';
5
+ export declare class UnsupportedIndexingDatabaseError extends Error {
6
+ constructor();
7
+ }
8
+ export declare function makeIndexApi(indexingConfig: IndexingConfig | undefined, network: Networks, logger: DiagnosticsLogger): DatabaseIndexApi | undefined;
9
+ //# sourceMappingURL=make-index-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-index-api.d.ts","sourceRoot":"","sources":["../src/make-index-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAiB,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAkB,MAAM,yBAAyB,CAAA;AAE1E,qBAAa,gCAAiC,SAAQ,KAAK;;CAM1D;AAKD,wBAAgB,YAAY,CAC1B,cAAc,EAAE,cAAc,GAAG,SAAS,EAC1C,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,iBAAiB,GACxB,gBAAgB,GAAG,SAAS,CA2B9B"}
@@ -0,0 +1,27 @@
1
+ import { Networks } from '@ceramicnetwork/common';
2
+ import { buildIndexing } from './build-indexing.js';
3
+ import { SqliteIndexApi } from './database-index-api.js';
4
+ export class UnsupportedIndexingDatabaseError extends Error {
5
+ constructor() {
6
+ super('SQLite is not supported for the ComposeDB indexing database in production use. Please setup a Postgres instance and update the config file to use ComposeDB, or disable ComposeDB to start up without an indexing database.');
7
+ }
8
+ }
9
+ export function makeIndexApi(indexingConfig, network, logger) {
10
+ if (!indexingConfig) {
11
+ logger.warn(`ComposeDB Indexing is not configured. Please add the indexing settings to your config file`);
12
+ return undefined;
13
+ }
14
+ if (indexingConfig.disableComposedb === true) {
15
+ logger.warn('ComposeDB indexing is actively disabled. Change the corresponding CLI flag, config option or ENV variable to enable it.');
16
+ return undefined;
17
+ }
18
+ const indexApi = buildIndexing(indexingConfig, logger, network);
19
+ if (indexingConfig.enableHistoricalSync && indexApi instanceof SqliteIndexApi) {
20
+ throw new UnsupportedIndexingDatabaseError();
21
+ }
22
+ if (network === Networks.MAINNET && indexApi instanceof SqliteIndexApi) {
23
+ throw new UnsupportedIndexingDatabaseError();
24
+ }
25
+ return indexApi;
26
+ }
27
+ //# sourceMappingURL=make-index-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-index-api.js","sourceRoot":"","sources":["../src/make-index-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAkB,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAoB,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAE1E,MAAM,OAAO,gCAAiC,SAAQ,KAAK;IACzD;QACE,KAAK,CACH,6NAA6N,CAC9N,CAAA;IACH,CAAC;CACF;AAKD,MAAM,UAAU,YAAY,CAC1B,cAA0C,EAC1C,OAAiB,EACjB,MAAyB;IAEzB,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,CAAC,IAAI,CACT,4FAA4F,CAC7F,CAAA;QACD,OAAO,SAAS,CAAA;KACjB;IAED,IAAI,cAAc,CAAC,gBAAgB,KAAK,IAAI,EAAE;QAC5C,MAAM,CAAC,IAAI,CACT,yHAAyH,CAC1H,CAAA;QACD,OAAO,SAAS,CAAA;KACjB;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAE/D,IAAI,cAAc,CAAC,oBAAoB,IAAI,QAAQ,YAAY,cAAc,EAAE;QAC7E,MAAM,IAAI,gCAAgC,EAAE,CAAA;KAC7C;IAGD,IAAI,OAAO,KAAK,QAAQ,CAAC,OAAO,IAAI,QAAQ,YAAY,cAAc,EAAE;QACtE,MAAM,IAAI,gCAAgC,EAAE,CAAA;KAC7C;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { Knex } from 'knex';
2
+ import { FieldsIndex, Networks } from '@ceramicnetwork/common';
3
+ export declare enum DatabaseType {
4
+ POSTGRES = "postgres",
5
+ SQLITE = "sqlite"
6
+ }
7
+ export declare enum ColumnType {
8
+ STRING = 0
9
+ }
10
+ export declare type ColumnInfo = {
11
+ name: string;
12
+ type: ColumnType;
13
+ };
14
+ export declare type TableIndex = {
15
+ keys: Array<string>;
16
+ name: string;
17
+ indexType: Knex.storageEngineIndexType;
18
+ };
19
+ export declare type TableIndices = {
20
+ indexName: string;
21
+ indices: Array<TableIndex>;
22
+ };
23
+ export declare function indexNameFromTableName(tableName: string): string;
24
+ export declare function defaultIndices(tableName: string): TableIndices;
25
+ export declare function getDefaultCDBDatabaseConfig(networkName: string): {
26
+ [key: string]: any;
27
+ };
28
+ export declare function createPostgresModelTable(dataSource: Knex, tableName: string, extraColumns: Array<ColumnInfo>): Promise<void>;
29
+ export declare function createSqliteModelTable(dataSource: Knex, tableName: string, extraColumns: Array<ColumnInfo>): Promise<void>;
30
+ export declare function createPostgresIndices(dataSource: Knex, tableName: string, indices: Array<FieldsIndex>): Promise<void>;
31
+ export declare function createSqliteIndices(dataSource: Knex, tableName: string, indices: Array<FieldsIndex>): Promise<void>;
32
+ export declare function createConfigTable(dataSource: Knex, tableName: string, network: Networks, jsonb_support: boolean): Promise<void>;
33
+ export declare function migrateConfigTable(dataSource: Knex, tableName: string, jsonb_support: boolean): Promise<void>;
34
+ //# sourceMappingURL=1-create-model-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1-create-model-table.d.ts","sourceRoot":"","sources":["../../src/migrations/1-create-model-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAChC,OAAO,EAAwB,WAAW,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAKpF,oBAAY,YAAY;IACtB,QAAQ,aAAa;IACrB,MAAM,WAAW;CAClB;AAQD,oBAAY,UAAU;IACpB,MAAM,IAAA;CACP;AAKD,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,UAAU,CAAA;CACjB,CAAA;AAED,oBAAY,UAAU,GAAG;IACvB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,IAAI,CAAC,sBAAsB,CAAA;CACvC,CAAA;AAED,oBAAY,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAC3B,CAAA;AAMD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAKD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CA0C9D;AAWD,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CA0CvF;AAoBD,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,IAAI,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,IAAI,EAChB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAqBf;AAOD,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,IAAI,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,IAAI,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,IAAI,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,QAAQ,EACjB,aAAa,EAAE,OAAO,iBAgDvB;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,IAAI,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,OAAO,iBAoBvB"}