@enbox/dwn-sql-store 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +178 -0
  3. package/dist/cjs/main.js +3784 -0
  4. package/dist/cjs/package.json +1 -0
  5. package/dist/esm/src/data-store-sql.js +103 -0
  6. package/dist/esm/src/data-store-sql.js.map +1 -0
  7. package/dist/esm/src/dialect/dialect.js +2 -0
  8. package/dist/esm/src/dialect/dialect.js.map +1 -0
  9. package/dist/esm/src/dialect/mysql-dialect.js +40 -0
  10. package/dist/esm/src/dialect/mysql-dialect.js.map +1 -0
  11. package/dist/esm/src/dialect/postgres-dialect.js +26 -0
  12. package/dist/esm/src/dialect/postgres-dialect.js.map +1 -0
  13. package/dist/esm/src/dialect/sqlite-dialect.js +33 -0
  14. package/dist/esm/src/dialect/sqlite-dialect.js.map +1 -0
  15. package/dist/esm/src/event-log-sql.js +169 -0
  16. package/dist/esm/src/event-log-sql.js.map +1 -0
  17. package/dist/esm/src/main.js +9 -0
  18. package/dist/esm/src/main.js.map +1 -0
  19. package/dist/esm/src/message-store-sql.js +317 -0
  20. package/dist/esm/src/message-store-sql.js.map +1 -0
  21. package/dist/esm/src/resumable-task-store-sql.js +141 -0
  22. package/dist/esm/src/resumable-task-store-sql.js.map +1 -0
  23. package/dist/esm/src/types.js +2 -0
  24. package/dist/esm/src/types.js.map +1 -0
  25. package/dist/esm/src/utils/filter.js +125 -0
  26. package/dist/esm/src/utils/filter.js.map +1 -0
  27. package/dist/esm/src/utils/sanitize.js +92 -0
  28. package/dist/esm/src/utils/sanitize.js.map +1 -0
  29. package/dist/esm/src/utils/tags.js +38 -0
  30. package/dist/esm/src/utils/tags.js.map +1 -0
  31. package/dist/esm/src/utils/transaction.js +25 -0
  32. package/dist/esm/src/utils/transaction.js.map +1 -0
  33. package/dist/types/src/data-store-sql.d.ts +14 -0
  34. package/dist/types/src/data-store-sql.d.ts.map +1 -0
  35. package/dist/types/src/dialect/dialect.d.ts +40 -0
  36. package/dist/types/src/dialect/dialect.d.ts.map +1 -0
  37. package/dist/types/src/dialect/mysql-dialect.d.ts +18 -0
  38. package/dist/types/src/dialect/mysql-dialect.d.ts.map +1 -0
  39. package/dist/types/src/dialect/postgres-dialect.d.ts +12 -0
  40. package/dist/types/src/dialect/postgres-dialect.d.ts.map +1 -0
  41. package/dist/types/src/dialect/sqlite-dialect.d.ts +12 -0
  42. package/dist/types/src/dialect/sqlite-dialect.d.ts.map +1 -0
  43. package/dist/types/src/event-log-sql.d.ts +24 -0
  44. package/dist/types/src/event-log-sql.d.ts.map +1 -0
  45. package/dist/types/src/main.d.ts +9 -0
  46. package/dist/types/src/main.d.ts.map +1 -0
  47. package/dist/types/src/message-store-sql.d.ts +46 -0
  48. package/dist/types/src/message-store-sql.d.ts.map +1 -0
  49. package/dist/types/src/resumable-task-store-sql.d.ts +16 -0
  50. package/dist/types/src/resumable-task-store-sql.d.ts.map +1 -0
  51. package/dist/types/src/types.d.ts +100 -0
  52. package/dist/types/src/types.d.ts.map +1 -0
  53. package/dist/types/src/utils/filter.d.ts +13 -0
  54. package/dist/types/src/utils/filter.d.ts.map +1 -0
  55. package/dist/types/src/utils/sanitize.d.ts +28 -0
  56. package/dist/types/src/utils/sanitize.d.ts.map +1 -0
  57. package/dist/types/src/utils/tags.d.ts +20 -0
  58. package/dist/types/src/utils/tags.d.ts.map +1 -0
  59. package/dist/types/src/utils/transaction.d.ts +7 -0
  60. package/dist/types/src/utils/transaction.d.ts.map +1 -0
  61. package/package.json +91 -0
  62. package/src/data-store-sql.ts +148 -0
  63. package/src/dialect/dialect.ts +77 -0
  64. package/src/dialect/mysql-dialect.ts +86 -0
  65. package/src/dialect/postgres-dialect.ts +66 -0
  66. package/src/dialect/sqlite-dialect.ts +72 -0
  67. package/src/event-log-sql.ts +227 -0
  68. package/src/main.ts +8 -0
  69. package/src/message-store-sql.ts +440 -0
  70. package/src/resumable-task-store-sql.ts +174 -0
  71. package/src/types.ts +109 -0
  72. package/src/utils/filter.ts +136 -0
  73. package/src/utils/sanitize.ts +117 -0
  74. package/src/utils/tags.ts +46 -0
  75. package/src/utils/transaction.ts +28 -0
@@ -0,0 +1 @@
1
+ {"type": "commonjs"}
@@ -0,0 +1,103 @@
1
+ import { DataStream } from '@enbox/dwn-sdk-js';
2
+ import { Kysely } from 'kysely';
3
+ import { Readable } from 'readable-stream';
4
+ export class DataStoreSql {
5
+ #dialect;
6
+ #db = null;
7
+ constructor(dialect) {
8
+ this.#dialect = dialect;
9
+ }
10
+ async open() {
11
+ if (this.#db) {
12
+ return;
13
+ }
14
+ this.#db = new Kysely({ dialect: this.#dialect });
15
+ // if table already exists, there is no more things todo
16
+ const tableName = 'dataStore';
17
+ const tableExists = await this.#dialect.hasTable(this.#db, tableName);
18
+ if (tableExists) {
19
+ return;
20
+ }
21
+ // else create the table and corresponding indexes
22
+ let table = this.#db.schema
23
+ .createTable(tableName)
24
+ .ifNotExists() // kept to show supported by all dialects in contrast to ifNotExists() below, though not needed due to hasTable() check above
25
+ .addColumn('tenant', 'varchar(255)', (col) => col.notNull())
26
+ .addColumn('recordId', 'varchar(60)', (col) => col.notNull())
27
+ .addColumn('dataCid', 'varchar(60)', (col) => col.notNull());
28
+ // Add columns that have dialect-specific constraints
29
+ table = this.#dialect.addAutoIncrementingColumn(table, 'id', (col) => col.primaryKey());
30
+ table = this.#dialect.addBlobColumn(table, 'data', (col) => col.notNull());
31
+ await table.execute();
32
+ // Add index for efficient lookups.
33
+ await this.#db.schema
34
+ .createIndex('tenant_recordId_dataCid')
35
+ // .ifNotExists() // intentionally kept commented out code to show that it is not supported by all dialects (ie. MySQL)
36
+ .on(tableName)
37
+ .columns(['tenant', 'recordId', 'dataCid'])
38
+ .unique()
39
+ .execute();
40
+ }
41
+ async close() {
42
+ await this.#db?.destroy();
43
+ this.#db = null;
44
+ }
45
+ async get(tenant, recordId, dataCid) {
46
+ if (!this.#db) {
47
+ throw new Error('Connection to database not open. Call `open` before using `get`.');
48
+ }
49
+ const result = await this.#db
50
+ .selectFrom('dataStore')
51
+ .selectAll()
52
+ .where('tenant', '=', tenant)
53
+ .where('recordId', '=', recordId)
54
+ .where('dataCid', '=', dataCid)
55
+ .executeTakeFirst();
56
+ if (!result) {
57
+ return undefined;
58
+ }
59
+ return {
60
+ dataSize: result.data.length,
61
+ dataStream: new Readable({
62
+ read() {
63
+ this.push(Buffer.from(result.data));
64
+ this.push(null);
65
+ }
66
+ }),
67
+ };
68
+ }
69
+ async put(tenant, recordId, dataCid, dataStream) {
70
+ if (!this.#db) {
71
+ throw new Error('Connection to database not open. Call `open` before using `put`.');
72
+ }
73
+ const bytes = await DataStream.toBytes(dataStream);
74
+ const data = Buffer.from(bytes);
75
+ await this.#db
76
+ .insertInto('dataStore')
77
+ .values({ tenant, recordId, dataCid, data })
78
+ .executeTakeFirstOrThrow();
79
+ return {
80
+ dataSize: bytes.length
81
+ };
82
+ }
83
+ async delete(tenant, recordId, dataCid) {
84
+ if (!this.#db) {
85
+ throw new Error('Connection to database not open. Call `open` before using `delete`.');
86
+ }
87
+ await this.#db
88
+ .deleteFrom('dataStore')
89
+ .where('tenant', '=', tenant)
90
+ .where('recordId', '=', recordId)
91
+ .where('dataCid', '=', dataCid)
92
+ .execute();
93
+ }
94
+ async clear() {
95
+ if (!this.#db) {
96
+ throw new Error('Connection to database not open. Call `open` before using `clear`.');
97
+ }
98
+ await this.#db
99
+ .deleteFrom('dataStore')
100
+ .execute();
101
+ }
102
+ }
103
+ //# sourceMappingURL=data-store-sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store-sql.js","sourceRoot":"","sources":["../../../src/data-store-sql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dialect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialect.js","sourceRoot":"","sources":["../../../../src/dialect/dialect.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import { MysqlDialect as KyselyMysqlDialect, } from 'kysely';
2
+ export class MysqlDialect extends KyselyMysqlDialect {
3
+ name = 'MySQL';
4
+ isStreamingSupported = true;
5
+ async hasTable(db, tableName) {
6
+ const result = await db
7
+ .selectFrom('information_schema.tables')
8
+ .select('table_name')
9
+ .where('table_name', '=', tableName)
10
+ .execute();
11
+ return result.length > 0;
12
+ }
13
+ addAutoIncrementingColumn(builder, columnName, callback) {
14
+ return builder.addColumn(columnName, 'integer', (col) => {
15
+ col = col.autoIncrement();
16
+ if (callback) {
17
+ col = callback(col);
18
+ }
19
+ return col;
20
+ });
21
+ }
22
+ addBlobColumn(builder, columnName, callback) {
23
+ return builder.addColumn(columnName, 'blob', callback);
24
+ }
25
+ /**
26
+ * In MySQL, the ForeignKey name it creates in `mysql` will be in the following format:
27
+ * `${referenceTable}_${referenceColumnName}__${tableName}_${columnName}`
28
+ * ex: if the reference table is `users` and the reference column is `id` and the table is `profiles` and the column is `userId`,
29
+ * the resulting name for the foreign key is: `users_id__profiles_userId`
30
+ */
31
+ addReferencedColumn(builder, tableName, columnName, columnType, referenceTable, referenceColumnName, onDeleteAction) {
32
+ return builder
33
+ .addColumn(columnName, columnType, (col) => col.notNull())
34
+ .addForeignKeyConstraint(`${referenceTable}_${referenceColumnName}__${tableName}_${columnName}`, [columnName], referenceTable, [referenceColumnName], (constraint) => constraint.onDelete(onDeleteAction));
35
+ }
36
+ insertThenReturnId(db, table, values, _returning) {
37
+ return db.insertInto(table).values(values);
38
+ }
39
+ }
40
+ //# sourceMappingURL=mysql-dialect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql-dialect.js","sourceRoot":"","sources":["../../../../src/dialect/mysql-dialect.ts"],"names":[],"mappings":"AACA,OAAO,EAUL,YAAY,IAAI,kBAAkB,GAEnC,MAAM,QAAQ,CAAC;AAEhB,MAAM,OAAO,YAAa,SAAQ,kBAAkB;IAClD,IAAI,GAAG,OAAO,CAAC;IACf,oBAAoB,GAAG,IAAI,CAAC;IAE5B,KAAK,CAAC,QAAQ,CAAC,EAAe,EAAE,SAAiB;QAC/C,MAAM,MAAM,GAAG,MAAM,EAAE;aACpB,UAAU,CAAC,2BAA2B,CAAC;aACvC,MAAM,CAAC,YAAY,CAAC;aACpB,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,SAAS,CAAC;aACnC,OAAO,EAAE,CAAC;QAEb,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,yBAAyB,CACvB,OAA+B,EAC/B,UAAkB,EAClB,QAAgC;QAEhC,OAAO,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YACtD,GAAG,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,QAAQ,EAAE;gBACZ,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;aACrB;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CACX,OAA+B,EAC/B,UAAkB,EAClB,QAAgC;QAEhC,OAAO,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED;;;;;OAKG;IACH,mBAAmB,CACjB,OAAwC,EACxC,SAAa,EACb,UAAkB,EAClB,UAA0B,EAC1B,cAAsB,EACtB,mBAA2B,EAC3B,cAAiF;QAEjF,OAAO,OAAO;aACX,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;aACzD,uBAAuB,CACtB,GAAG,cAAc,IAAI,mBAAmB,KAAK,SAAS,IAAI,UAAU,EAAE,EACtE,CAAC,UAAU,CAAC,EACZ,cAAc,EACd,CAAC,mBAAmB,CAAC,EACrB,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CACpD,CAAC;IACN,CAAC;IAED,kBAAkB,CAChB,EAAgC,EAChC,KAAkB,EAClB,MAAqC,EACrC,UAAwC;QAExC,OAAO,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ import { PostgresDialect as KyselyPostgresDialect, } from 'kysely';
2
+ export class PostgresDialect extends KyselyPostgresDialect {
3
+ name = 'PostgreSQL';
4
+ isStreamingSupported = true;
5
+ async hasTable(db, tableName) {
6
+ const result = await db
7
+ .selectFrom('information_schema.tables')
8
+ .select('table_name')
9
+ .where('table_name', '=', tableName)
10
+ .execute();
11
+ return result.length > 0;
12
+ }
13
+ addAutoIncrementingColumn(builder, columnName, callback) {
14
+ return builder.addColumn(columnName, 'serial', callback);
15
+ }
16
+ addBlobColumn(builder, columnName, callback) {
17
+ return builder.addColumn(columnName, 'bytea', callback);
18
+ }
19
+ addReferencedColumn(builder, _tableName, columnName, columnType, referenceTable, referenceColumnName, onDeleteAction) {
20
+ return builder.addColumn(columnName, columnType, (col) => col.notNull().references(`${referenceTable}.${referenceColumnName}`).onDelete(onDeleteAction));
21
+ }
22
+ insertThenReturnId(db, table, values, returning) {
23
+ return db.insertInto(table).values(values).returning(returning);
24
+ }
25
+ }
26
+ //# sourceMappingURL=postgres-dialect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-dialect.js","sourceRoot":"","sources":["../../../../src/dialect/postgres-dialect.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,eAAe,IAAI,qBAAqB,GAIzC,MAAM,QAAQ,CAAC;AAEhB,MAAM,OAAO,eAAgB,SAAQ,qBAAqB;IACxD,IAAI,GAAG,YAAY,CAAC;IACpB,oBAAoB,GAAG,IAAI,CAAC;IAE5B,KAAK,CAAC,QAAQ,CAAC,EAAe,EAAE,SAAiB;QAC/C,MAAM,MAAM,GAAG,MAAM,EAAE;aACpB,UAAU,CAAC,2BAA2B,CAAC;aACvC,MAAM,CAAC,YAAY,CAAC;aACpB,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,SAAS,CAAC;aACnC,OAAO,EAAE,CAAC;QAEb,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,yBAAyB,CACvB,OAA+B,EAC/B,UAAkB,EAClB,QAAgC;QAEhC,OAAO,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,aAAa,CACX,OAA+B,EAC/B,UAAkB,EAClB,QAAgC;QAEhC,OAAO,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED,mBAAmB,CACjB,OAAwC,EACxC,UAAc,EACd,UAAkB,EAClB,UAA0B,EAC1B,cAAsB,EACtB,mBAA2B,EAC3B,cAAiF;QAEjF,OAAO,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,cAAc,IAAI,mBAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3J,CAAC;IAED,kBAAkB,CAChB,EAAgC,EAChC,KAAkB,EAClB,MAAqC,EACrC,SAAuC;QAEvC,OAAO,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC;CAEF"}
@@ -0,0 +1,33 @@
1
+ import { SqliteDialect as KyselySqliteDialect, } from 'kysely';
2
+ export class SqliteDialect extends KyselySqliteDialect {
3
+ name = 'SQLite';
4
+ isStreamingSupported = false;
5
+ async hasTable(db, tableName) {
6
+ const result = await db
7
+ .selectFrom('sqlite_master')
8
+ .select('name')
9
+ .where('type', '=', 'table')
10
+ .where('name', '=', tableName)
11
+ .execute();
12
+ return result.length > 0;
13
+ }
14
+ addAutoIncrementingColumn(builder, columnName, callback) {
15
+ return builder.addColumn(columnName, 'integer', (col) => {
16
+ col = col.autoIncrement();
17
+ if (callback) {
18
+ col = callback(col);
19
+ }
20
+ return col;
21
+ });
22
+ }
23
+ addBlobColumn(builder, columnName, callback) {
24
+ return builder.addColumn(columnName, 'blob', callback);
25
+ }
26
+ addReferencedColumn(builder, _tableName, columnName, columnType, referenceTable, referenceColumnName, onDeleteAction) {
27
+ return builder.addColumn(columnName, columnType, (col) => col.notNull().references(`${referenceTable}.${referenceColumnName}`).onDelete(onDeleteAction));
28
+ }
29
+ insertThenReturnId(db, table, values, returning) {
30
+ return db.insertInto(table).values(values).returning(returning);
31
+ }
32
+ }
33
+ //# sourceMappingURL=sqlite-dialect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-dialect.js","sourceRoot":"","sources":["../../../../src/dialect/sqlite-dialect.ts"],"names":[],"mappings":"AACA,OAAO,EASL,aAAa,IAAI,mBAAmB,GAErC,MAAM,QAAQ,CAAC;AAEhB,MAAM,OAAO,aAAc,SAAQ,mBAAmB;IACpD,IAAI,GAAG,QAAQ,CAAC;IAChB,oBAAoB,GAAG,KAAK,CAAC;IAE7B,KAAK,CAAC,QAAQ,CAAC,EAAe,EAAE,SAAiB;QAC/C,MAAM,MAAM,GAAG,MAAM,EAAE;aACpB,UAAU,CAAC,eAAe,CAAC;aAC3B,MAAM,CAAC,MAAM,CAAC;aACd,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC;aAC3B,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC;aAC7B,OAAO,EAAE,CAAC;QAEb,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,yBAAyB,CACvB,OAA+B,EAC/B,UAAkB,EAClB,QAAgC;QAEhC,OAAO,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YACtD,GAAG,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,QAAQ,EAAE;gBACZ,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;aACrB;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CACX,OAA+B,EAC/B,UAAkB,EAClB,QAAgC;QAEhC,OAAO,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,mBAAmB,CACjB,OAAwC,EACxC,UAAc,EACd,UAAkB,EAClB,UAA0B,EAC1B,cAAsB,EACtB,mBAA2B,EAC3B,cAAiF;QAEjF,OAAO,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,cAAc,IAAI,mBAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3J,CAAC;IAED,kBAAkB,CAChB,EAAgC,EAChC,KAAkB,EAClB,MAAqC,EACrC,SAAuC;QAEvC,OAAO,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAClE,CAAC;CACF"}
@@ -0,0 +1,169 @@
1
+ import { filterSelectQuery } from './utils/filter.js';
2
+ import { Kysely } from 'kysely';
3
+ import { executeWithRetryIfDatabaseIsLocked } from './utils/transaction.js';
4
+ import { extractTagsAndSanitizeIndexes } from './utils/sanitize.js';
5
+ import { TagTables } from './utils/tags.js';
6
+ export class EventLogSql {
7
+ #dialect;
8
+ #db = null;
9
+ #tags;
10
+ constructor(dialect) {
11
+ this.#dialect = dialect;
12
+ this.#tags = new TagTables(dialect, 'eventLogMessages');
13
+ }
14
+ async open() {
15
+ if (this.#db) {
16
+ return;
17
+ }
18
+ this.#db = new Kysely({ dialect: this.#dialect });
19
+ let createTable = this.#db.schema
20
+ .createTable('eventLogMessages')
21
+ .ifNotExists()
22
+ .addColumn('tenant', 'varchar(255)', (col) => col.notNull())
23
+ .addColumn('messageCid', 'varchar(60)', (col) => col.notNull())
24
+ .addColumn('interface', 'varchar(20)')
25
+ .addColumn('method', 'varchar(20)')
26
+ .addColumn('recordId', 'varchar(60)')
27
+ .addColumn('entryId', 'varchar(60)')
28
+ .addColumn('parentId', 'varchar(60)')
29
+ .addColumn('protocol', 'varchar(200)')
30
+ .addColumn('protocolPath', 'varchar(200)')
31
+ .addColumn('contextId', 'varchar(500)')
32
+ .addColumn('schema', 'varchar(200)')
33
+ .addColumn('author', 'varchar(255)')
34
+ .addColumn('recipient', 'varchar(255)')
35
+ .addColumn('messageTimestamp', 'varchar(30)')
36
+ .addColumn('dateCreated', 'varchar(30)')
37
+ .addColumn('datePublished', 'varchar(30)')
38
+ .addColumn('isLatestBaseState', 'boolean')
39
+ .addColumn('published', 'boolean')
40
+ .addColumn('prune', 'boolean')
41
+ .addColumn('dataFormat', 'varchar(30)')
42
+ .addColumn('dataCid', 'varchar(60)')
43
+ .addColumn('dataSize', 'integer')
44
+ // .addColumn('encodedData', 'text') // intentionally kept commented out code to show the only difference to `messageStoreMessages` table
45
+ .addColumn('attester', 'text')
46
+ .addColumn('permissionGrantId', 'varchar(60)')
47
+ .addColumn('latest', 'text'); // TODO: obsolete, remove once `dwn-sdk-js` is updated
48
+ let createRecordsTagsTable = this.#db.schema
49
+ .createTable('eventLogRecordsTags')
50
+ .ifNotExists()
51
+ .addColumn('tag', 'text', (col) => col.notNull())
52
+ .addColumn('valueString', 'text')
53
+ .addColumn('valueNumber', 'decimal');
54
+ // Add columns that have dialect-specific constraints
55
+ createTable = this.#dialect.addAutoIncrementingColumn(createTable, 'watermark', (col) => col.primaryKey());
56
+ createRecordsTagsTable = this.#dialect.addAutoIncrementingColumn(createRecordsTagsTable, 'id', (col) => col.primaryKey());
57
+ createRecordsTagsTable = this.#dialect.addReferencedColumn(createRecordsTagsTable, 'eventLogRecordsTags', 'eventWatermark', 'integer', 'eventLogMessages', 'watermark', 'cascade');
58
+ await createTable.execute();
59
+ await createRecordsTagsTable.execute();
60
+ }
61
+ async close() {
62
+ await this.#db?.destroy();
63
+ this.#db = null;
64
+ }
65
+ async append(tenant, messageCid, indexes) {
66
+ if (!this.#db) {
67
+ throw new Error('Connection to database not open. Call `open` before using `append`.');
68
+ }
69
+ // we execute the insert in a transaction as we are making multiple inserts into multiple tables.
70
+ // if any of these inserts would throw, the whole transaction would be rolled back.
71
+ // otherwise it is committed.
72
+ const putEventOperation = this.constructPutEventOperation({ tenant, messageCid, indexes });
73
+ await executeWithRetryIfDatabaseIsLocked(this.#db, putEventOperation);
74
+ }
75
+ /**
76
+ * Constructs a transactional operation to insert an event into the database.
77
+ */
78
+ constructPutEventOperation(queryOptions) {
79
+ const { tenant, messageCid, indexes } = queryOptions;
80
+ // we extract the tag indexes into their own object to be inserted separately.
81
+ // we also sanitize the indexes to convert any `boolean` values to `text` representations.
82
+ const { indexes: appendIndexes, tags } = extractTagsAndSanitizeIndexes(indexes);
83
+ return async (tx) => {
84
+ const eventIndexValues = {
85
+ tenant,
86
+ messageCid,
87
+ ...appendIndexes,
88
+ };
89
+ // we use the dialect-specific `insertThenReturnId` in order to be able to extract the `insertId`
90
+ const result = await this.#dialect
91
+ .insertThenReturnId(tx, 'eventLogMessages', eventIndexValues, 'watermark as insertId')
92
+ .executeTakeFirstOrThrow();
93
+ // if tags exist, we execute those within the transaction associating them with the `insertId`.
94
+ if (Object.keys(tags).length > 0) {
95
+ await this.#tags.executeTagsInsert(result.insertId, tags, tx);
96
+ }
97
+ };
98
+ }
99
+ async getEvents(tenant, cursor) {
100
+ // get events is simply a query without any filters. gets all events beyond the cursor.
101
+ return this.queryEvents(tenant, [], cursor);
102
+ }
103
+ async queryEvents(tenant, filters, cursor) {
104
+ if (!this.#db) {
105
+ throw new Error('Connection to database not open. Call `open` before using `queryEvents`.');
106
+ }
107
+ let query = this.#db
108
+ .selectFrom('eventLogMessages')
109
+ .leftJoin('eventLogRecordsTags', 'eventLogRecordsTags.eventWatermark', 'eventLogMessages.watermark')
110
+ .select('messageCid')
111
+ .distinct()
112
+ .select('watermark')
113
+ .where('tenant', '=', tenant);
114
+ if (filters.length > 0) {
115
+ // filter sanitization takes place within `filterSelectQuery`
116
+ query = filterSelectQuery(filters, query);
117
+ }
118
+ if (cursor !== undefined) {
119
+ // eventLogMessages in the sql store uses the watermark cursor value which is a number in SQL
120
+ // if not we will return empty results
121
+ const cursorValue = cursor.value;
122
+ const cursorMessageCid = cursor.messageCid;
123
+ query = query.where(({ eb, refTuple, tuple }) => {
124
+ // https://kysely-org.github.io/kysely-apidoc/interfaces/ExpressionBuilder.html#refTuple
125
+ return eb(refTuple('watermark', 'messageCid'), '>', tuple(cursorValue, cursorMessageCid));
126
+ });
127
+ }
128
+ query = query.orderBy('watermark', 'asc').orderBy('messageCid', 'asc');
129
+ const events = [];
130
+ // we always return a cursor with the event log query, so we set the return cursor to the properties of the last item.
131
+ let returnCursor;
132
+ if (this.#dialect.isStreamingSupported) {
133
+ for await (let { messageCid, watermark: value } of query.stream()) {
134
+ events.push(messageCid);
135
+ returnCursor = { messageCid, value };
136
+ }
137
+ }
138
+ else {
139
+ const results = await query.execute();
140
+ for (let { messageCid, watermark: value } of results) {
141
+ events.push(messageCid);
142
+ returnCursor = { messageCid, value };
143
+ }
144
+ }
145
+ return { events, cursor: returnCursor };
146
+ }
147
+ async deleteEventsByCid(tenant, messageCids) {
148
+ if (!this.#db) {
149
+ throw new Error('Connection to database not open. Call `open` before using `deleteEventsByCid`.');
150
+ }
151
+ if (messageCids.length === 0) {
152
+ return;
153
+ }
154
+ await this.#db
155
+ .deleteFrom('eventLogMessages')
156
+ .where('tenant', '=', tenant)
157
+ .where('messageCid', 'in', messageCids)
158
+ .execute();
159
+ }
160
+ async clear() {
161
+ if (!this.#db) {
162
+ throw new Error('Connection to database not open. Call `open` before using `clear`.');
163
+ }
164
+ await this.#db
165
+ .deleteFrom('eventLogMessages')
166
+ .execute();
167
+ }
168
+ }
169
+ //# sourceMappingURL=event-log-sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-log-sql.js","sourceRoot":"","sources":["../../../src/event-log-sql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export * from './dialect/dialect.js';
2
+ export * from './dialect/mysql-dialect.js';
3
+ export * from './dialect/postgres-dialect.js';
4
+ export * from './dialect/sqlite-dialect.js';
5
+ export * from './data-store-sql.js';
6
+ export * from './event-log-sql.js';
7
+ export * from './message-store-sql.js';
8
+ export * from './resumable-task-store-sql.js';
9
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../../src/main.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC"}