@enbox/dwn-sql-store 0.0.21 → 0.0.22

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.
@@ -1,4 +1,5 @@
1
1
  import { CID } from 'multiformats';
2
+ import { isDuplicateKeyError } from './utils/duplicate-key-error.js';
2
3
  /**
3
4
  * SQL-backed implementation of the `Blockstore` v5 interface, scoped to a
4
5
  * single `rootDataCid`. All block operations are constrained to the blocks
@@ -25,14 +26,23 @@ export class BlockstoreSql {
25
26
  }
26
27
  async put(key, val, _options) {
27
28
  const blockCid = key.toString();
28
- await this.#db
29
- .insertInto('dataBlocks')
30
- .values({
31
- rootDataCid: this.#rootDataCid,
32
- blockCid,
33
- data: Buffer.from(val),
34
- })
35
- .execute();
29
+ try {
30
+ await this.#db
31
+ .insertInto('dataBlocks')
32
+ .values({
33
+ rootDataCid: this.#rootDataCid,
34
+ blockCid,
35
+ data: Buffer.from(val),
36
+ })
37
+ .execute();
38
+ }
39
+ catch (error) {
40
+ if (!isDuplicateKeyError(error)) {
41
+ throw error;
42
+ }
43
+ // Idempotent block put: overlapping writes of the same dataCid can
44
+ // import the same content-addressed block concurrently.
45
+ }
36
46
  return key;
37
47
  }
38
48
  async get(key, _options) {
@@ -1 +1 @@
1
- {"version":3,"file":"blockstore-sql.js","sourceRoot":"","sources":["../../../src/blockstore-sql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blockstore-sql.js","sourceRoot":"","sources":["../../../src/blockstore-sql.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import * as DataRefs from './utils/data-refs.js';
1
2
  import { DataStream } from '@enbox/dwn-sdk-js';
2
3
  import { Readable } from 'stream';
3
4
  import { Upload } from '@aws-sdk/lib-storage';
@@ -49,14 +50,8 @@ export class DataStoreS3 {
49
50
  }
50
51
  async get(tenant, recordId, dataCid) {
51
52
  const db = this.#getDb('get');
52
- const ref = await db
53
- .selectFrom('dataRefs')
54
- .select('dataSize')
55
- .where('tenant', '=', tenant)
56
- .where('recordId', '=', recordId)
57
- .where('dataCid', '=', dataCid)
58
- .executeTakeFirst();
59
- if (!ref) {
53
+ const dataSize = await DataRefs.getDataRefSize(db, { tenant, recordId, dataCid });
54
+ if (dataSize === undefined) {
60
55
  return undefined;
61
56
  }
62
57
  const response = await this.#s3.send(new GetObjectCommand({
@@ -68,63 +63,37 @@ export class DataStoreS3 {
68
63
  }
69
64
  const dataStream = response.Body.transformToWebStream();
70
65
  return {
71
- dataSize: Number(ref.dataSize),
66
+ dataSize,
72
67
  dataStream,
73
68
  };
74
69
  }
75
70
  async put(tenant, recordId, dataCid, dataStream) {
76
71
  const db = this.#getDb('put');
77
- // Check if this exact ref already exists (idempotent put).
78
- const existingRef = await db
79
- .selectFrom('dataRefs')
80
- .select('dataSize')
81
- .where('tenant', '=', tenant)
82
- .where('recordId', '=', recordId)
83
- .where('dataCid', '=', dataCid)
84
- .executeTakeFirst();
85
- if (existingRef) {
72
+ const existingDataSize = await DataRefs.getDataRefSize(db, { tenant, recordId, dataCid });
73
+ if (existingDataSize !== undefined) {
86
74
  await DataStream.toBytes(dataStream);
87
- return { dataSize: Number(existingRef.dataSize) };
75
+ return { dataSize: existingDataSize };
88
76
  }
89
77
  // Check if another ref for this dataCid already exists (dedup path).
90
- const otherRef = await db
91
- .selectFrom('dataRefs')
92
- .select('dataSize')
93
- .where('dataCid', '=', dataCid)
94
- .executeTakeFirst();
78
+ const otherDataSize = await DataRefs.getAnyDataRefSize(db, dataCid);
95
79
  let dataSize;
96
- if (otherRef) {
97
- // S3 object already exists — skip upload.
98
- await DataStream.toBytes(dataStream);
99
- dataSize = Number(otherRef.dataSize);
100
- }
101
- else {
80
+ if (otherDataSize === undefined) {
102
81
  // New data — upload to S3 with a counting passthrough.
103
82
  dataSize = await this.#uploadToS3(dataCid, dataStream);
104
83
  }
105
- // Insert the reference.
106
- await db
107
- .insertInto('dataRefs')
108
- .values({ tenant, recordId, dataCid, dataSize })
109
- .execute();
84
+ else {
85
+ // S3 object already exists — skip upload.
86
+ await DataStream.toBytes(dataStream);
87
+ dataSize = otherDataSize;
88
+ }
89
+ dataSize = await DataRefs.insertDataRef(db, { tenant, recordId, dataCid }, dataSize);
110
90
  return { dataSize };
111
91
  }
112
92
  async delete(tenant, recordId, dataCid) {
113
93
  const db = this.#getDb('delete');
114
- // Remove the reference.
115
- await db
116
- .deleteFrom('dataRefs')
117
- .where('tenant', '=', tenant)
118
- .where('recordId', '=', recordId)
119
- .where('dataCid', '=', dataCid)
120
- .execute();
94
+ await DataRefs.deleteDataRef(db, { tenant, recordId, dataCid });
121
95
  // Garbage-collect the S3 object if no more refs point to this dataCid.
122
- const remaining = await db
123
- .selectFrom('dataRefs')
124
- .select('dataCid')
125
- .where('dataCid', '=', dataCid)
126
- .executeTakeFirst();
127
- if (!remaining) {
96
+ if (!await DataRefs.hasAnyDataRef(db, dataCid)) {
128
97
  await this.#s3.send(new DeleteObjectCommand({
129
98
  Bucket: this.#bucket,
130
99
  Key: dataCid,
@@ -1 +1 @@
1
- {"version":3,"file":"data-store-s3.js","sourceRoot":"","sources":["../../../src/data-store-s3.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-store-s3.js","sourceRoot":"","sources":["../../../src/data-store-s3.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import * as DataRefs from './utils/data-refs.js';
1
2
  import { BlockstoreSql } from './blockstore-sql.js';
2
3
  import { CID } from 'multiformats';
3
4
  import { DataStream } from '@enbox/dwn-sdk-js';
@@ -36,15 +37,8 @@ export class DataStoreSql {
36
37
  }
37
38
  async get(tenant, recordId, dataCid) {
38
39
  const db = this.#getDb('get');
39
- // Look up the reference to confirm this tenant+record has this data.
40
- const ref = await db
41
- .selectFrom('dataRefs')
42
- .select('dataSize')
43
- .where('tenant', '=', tenant)
44
- .where('recordId', '=', recordId)
45
- .where('dataCid', '=', dataCid)
46
- .executeTakeFirst();
47
- if (!ref) {
40
+ const dataSize = await DataRefs.getDataRefSize(db, { tenant, recordId, dataCid });
41
+ if (dataSize === undefined) {
48
42
  return undefined;
49
43
  }
50
44
  const blockstore = new BlockstoreSql(db, dataCid);
@@ -63,24 +57,17 @@ export class DataStoreSql {
63
57
  },
64
58
  });
65
59
  return {
66
- dataSize: Number(ref.dataSize),
60
+ dataSize,
67
61
  dataStream,
68
62
  };
69
63
  }
70
64
  async put(tenant, recordId, dataCid, dataStream) {
71
65
  const db = this.#getDb('put');
72
- // Check if this exact ref already exists (idempotent put).
73
- const existingRef = await db
74
- .selectFrom('dataRefs')
75
- .select('dataSize')
76
- .where('tenant', '=', tenant)
77
- .where('recordId', '=', recordId)
78
- .where('dataCid', '=', dataCid)
79
- .executeTakeFirst();
80
- if (existingRef) {
66
+ const existingDataSize = await DataRefs.getDataRefSize(db, { tenant, recordId, dataCid });
67
+ if (existingDataSize !== undefined) {
81
68
  // Drain the stream — caller expects it to be consumed.
82
69
  await DataStream.toBytes(dataStream);
83
- return { dataSize: Number(existingRef.dataSize) };
70
+ return { dataSize: existingDataSize };
84
71
  }
85
72
  // Check if blocks for this dataCid already exist (dedup path).
86
73
  const blockstore = new BlockstoreSql(db, dataCid);
@@ -90,21 +77,17 @@ export class DataStoreSql {
90
77
  if (blocksExist) {
91
78
  // Blocks already stored by a previous ref with the same dataCid.
92
79
  // Get the data size from that existing ref.
93
- const otherRef = await db
94
- .selectFrom('dataRefs')
95
- .select('dataSize')
96
- .where('dataCid', '=', dataCid)
97
- .executeTakeFirst();
98
- if (otherRef) {
99
- dataSize = Number(otherRef.dataSize);
100
- // Drain the stream — caller expects it to be consumed.
101
- await DataStream.toBytes(dataStream);
102
- }
103
- else {
80
+ const otherDataSize = await DataRefs.getAnyDataRefSize(db, dataCid);
81
+ if (otherDataSize === undefined) {
104
82
  // Edge case: blocks exist but no ref (interrupted previous put).
105
83
  // Count bytes without full buffering.
106
84
  dataSize = await DataStoreSql.#countStreamBytes(dataStream);
107
85
  }
86
+ else {
87
+ dataSize = otherDataSize;
88
+ // Drain the stream — caller expects it to be consumed.
89
+ await DataStream.toBytes(dataStream);
90
+ }
108
91
  }
109
92
  else {
110
93
  // New data — clean up any partial blocks from interrupted imports,
@@ -118,29 +101,14 @@ export class DataStoreSql {
118
101
  }
119
102
  dataSize = Number(dataDagRoot.unixfs?.fileSize() ?? dataDagRoot.size);
120
103
  }
121
- // Insert the reference.
122
- await db
123
- .insertInto('dataRefs')
124
- .values({ tenant, recordId, dataCid, dataSize })
125
- .execute();
104
+ dataSize = await DataRefs.insertDataRef(db, { tenant, recordId, dataCid }, dataSize);
126
105
  return { dataSize };
127
106
  }
128
107
  async delete(tenant, recordId, dataCid) {
129
108
  const db = this.#getDb('delete');
130
- // Remove the reference.
131
- await db
132
- .deleteFrom('dataRefs')
133
- .where('tenant', '=', tenant)
134
- .where('recordId', '=', recordId)
135
- .where('dataCid', '=', dataCid)
136
- .execute();
109
+ await DataRefs.deleteDataRef(db, { tenant, recordId, dataCid });
137
110
  // Garbage-collect blocks if no more refs point to this dataCid.
138
- const remaining = await db
139
- .selectFrom('dataRefs')
140
- .select('dataCid')
141
- .where('dataCid', '=', dataCid)
142
- .executeTakeFirst();
143
- if (!remaining) {
111
+ if (!await DataRefs.hasAnyDataRef(db, dataCid)) {
144
112
  await db
145
113
  .deleteFrom('dataBlocks')
146
114
  .where('rootDataCid', '=', dataCid)
@@ -1 +1 @@
1
- {"version":3,"file":"data-store-sql.js","sourceRoot":"","sources":["../../../src/data-store-sql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-store-sql.js","sourceRoot":"","sources":["../../../src/data-store-sql.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import * as cbor from '@ipld/dag-cbor';
3
3
  import { executeWithTransaction } from './utils/transaction.js';
4
4
  import { extractTagsAndSanitizeIndexes } from './utils/sanitize.js';
5
5
  import { filterSelectQuery } from './utils/filter.js';
6
+ import { isDuplicateKeyError } from './utils/duplicate-key-error.js';
6
7
  import { sha256 } from 'multiformats/hashes/sha2';
7
8
  import { TagTables } from './utils/tags.js';
8
9
  import { DwnInterfaceName, DwnMethodName, executeUnlessAborted, SortDirection } from '@enbox/dwn-sdk-js';
@@ -263,48 +264,5 @@ export class MessageStoreSql {
263
264
  }
264
265
  }
265
266
  }
266
- /**
267
- * Detect whether an error is a unique constraint violation from any
268
- * supported database dialect.
269
- *
270
- * Each dialect surfaces the error differently:
271
- *
272
- * | Dialect | Error code / errno | Message pattern |
273
- * |------------|-------------------------------|----------------------------------------------------|
274
- * | PostgreSQL | `code === '23505'` | "duplicate key value violates unique constraint" |
275
- * | MySQL | `errno === 1062` | "Duplicate entry '...' for key '...'" |
276
- * | SQLite | `code === 'SQLITE_CONSTRAINT'`| "UNIQUE constraint failed: ..." |
277
- * | bun:sqlite | `code === 'SQLITE_CONSTRAINT_PRIMARYKEY'` or includes "UNIQUE" | same as above |
278
- *
279
- * @internal Exported for testing.
280
- */
281
- export function isDuplicateKeyError(error) {
282
- if (error == null || typeof error !== 'object') {
283
- return false;
284
- }
285
- const err = error;
286
- const code = err.code;
287
- const errno = err.errno;
288
- const message = typeof err.message === 'string' ? err.message : '';
289
- // PostgreSQL: error code 23505 = unique_violation
290
- if (code === '23505') {
291
- return true;
292
- }
293
- // MySQL: errno 1062 = ER_DUP_ENTRY
294
- if (errno === 1062) {
295
- return true;
296
- }
297
- // SQLite (better-sqlite3 / bun:sqlite): SQLITE_CONSTRAINT with UNIQUE
298
- if (typeof code === 'string' &&
299
- code.startsWith('SQLITE_CONSTRAINT') &&
300
- message.includes('UNIQUE')) {
301
- return true;
302
- }
303
- // Fallback: message-based detection for unknown drivers
304
- if ((message.includes('duplicate key') || message.includes('Duplicate entry')) &&
305
- (message.includes('messageCid') || message.includes('unique constraint'))) {
306
- return true;
307
- }
308
- return false;
309
- }
267
+ export { isDuplicateKeyError } from './utils/duplicate-key-error.js';
310
268
  //# sourceMappingURL=message-store-sql.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-store-sql.js","sourceRoot":"","sources":["../../../src/message-store-sql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-store-sql.js","sourceRoot":"","sources":["../../../src/message-store-sql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { isDuplicateKeyError } from './duplicate-key-error.js';
2
+ export async function getDataRefSize(db, { tenant, recordId, dataCid }) {
3
+ const ref = await db
4
+ .selectFrom('dataRefs')
5
+ .select('dataSize')
6
+ .where('tenant', '=', tenant)
7
+ .where('recordId', '=', recordId)
8
+ .where('dataCid', '=', dataCid)
9
+ .executeTakeFirst();
10
+ return ref === undefined ? undefined : Number(ref.dataSize);
11
+ }
12
+ export async function getAnyDataRefSize(db, dataCid) {
13
+ const ref = await db
14
+ .selectFrom('dataRefs')
15
+ .select('dataSize')
16
+ .where('dataCid', '=', dataCid)
17
+ .executeTakeFirst();
18
+ return ref === undefined ? undefined : Number(ref.dataSize);
19
+ }
20
+ export async function insertDataRef(db, key, dataSize) {
21
+ try {
22
+ await db
23
+ .insertInto('dataRefs')
24
+ .values({ ...key, dataSize })
25
+ .execute();
26
+ return dataSize;
27
+ }
28
+ catch (error) {
29
+ if (!isDuplicateKeyError(error)) {
30
+ throw error;
31
+ }
32
+ const racedDataSize = await getDataRefSize(db, key);
33
+ if (racedDataSize === undefined) {
34
+ throw error;
35
+ }
36
+ return racedDataSize;
37
+ }
38
+ }
39
+ export async function deleteDataRef(db, { tenant, recordId, dataCid }) {
40
+ await db
41
+ .deleteFrom('dataRefs')
42
+ .where('tenant', '=', tenant)
43
+ .where('recordId', '=', recordId)
44
+ .where('dataCid', '=', dataCid)
45
+ .execute();
46
+ }
47
+ export async function hasAnyDataRef(db, dataCid) {
48
+ const ref = await db
49
+ .selectFrom('dataRefs')
50
+ .select('dataCid')
51
+ .where('dataCid', '=', dataCid)
52
+ .executeTakeFirst();
53
+ return ref !== undefined;
54
+ }
55
+ //# sourceMappingURL=data-refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-refs.js","sourceRoot":"","sources":["../../../../src/utils/data-refs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAQ/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAA2B,EAC3B,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAc;IAEzC,MAAM,GAAG,GAAG,MAAM,EAAE;SACjB,UAAU,CAAC,UAAU,CAAC;SACtB,MAAM,CAAC,UAAU,CAAC;SAClB,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC;SAC5B,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC;SAChC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;SAC9B,gBAAgB,EAAE,CAAC;IAEtB,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,EAA2B,EAC3B,OAAe;IAEf,MAAM,GAAG,GAAG,MAAM,EAAE;SACjB,UAAU,CAAC,UAAU,CAAC;SACtB,MAAM,CAAC,UAAU,CAAC;SAClB,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;SAC9B,gBAAgB,EAAE,CAAC;IAEtB,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAA2B,EAC3B,GAAe,EACf,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,EAAE;aACL,UAAU,CAAC,UAAU,CAAC;aACtB,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,CAAC;aAC5B,OAAO,EAAE,CAAC;QAEb,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACpD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAA2B,EAC3B,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAc;IAEzC,MAAM,EAAE;SACL,UAAU,CAAC,UAAU,CAAC;SACtB,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC;SAC5B,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC;SAChC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;SAC9B,OAAO,EAAE,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAA2B,EAC3B,OAAe;IAEf,MAAM,GAAG,GAAG,MAAM,EAAE;SACjB,UAAU,CAAC,UAAU,CAAC;SACtB,MAAM,CAAC,SAAS,CAAC;SACjB,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;SAC9B,gBAAgB,EAAE,CAAC;IAEtB,OAAO,GAAG,KAAK,SAAS,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Detect whether an error is a unique constraint violation from any
3
+ * supported database dialect.
4
+ */
5
+ export function isDuplicateKeyError(error) {
6
+ if (error == null || typeof error !== 'object') {
7
+ return false;
8
+ }
9
+ const err = error;
10
+ const code = err.code;
11
+ const errno = err.errno;
12
+ const message = typeof err.message === 'string' ? err.message : '';
13
+ if (code === '23505') {
14
+ return true;
15
+ }
16
+ if (errno === 1062) {
17
+ return true;
18
+ }
19
+ if (typeof code === 'string' &&
20
+ code.startsWith('SQLITE_CONSTRAINT') &&
21
+ message.includes('UNIQUE')) {
22
+ return true;
23
+ }
24
+ if ((message.includes('duplicate key') || message.includes('Duplicate entry')) &&
25
+ (message.includes('messageCid') ||
26
+ message.includes('dataRefs') ||
27
+ message.includes('dataBlocks') ||
28
+ message.includes('unique constraint'))) {
29
+ return true;
30
+ }
31
+ return false;
32
+ }
33
+ //# sourceMappingURL=duplicate-key-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duplicate-key-error.js","sourceRoot":"","sources":["../../../../src/utils/duplicate-key-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAEnE,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IACE,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC;QACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IACE,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAC1E,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;YAC9B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EACxC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"blockstore-sql.d.ts","sourceRoot":"","sources":["../../../src/blockstore-sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC;;;;;;;;;;GAUG;AACH,qBAAa,aAAc,YAAW,UAAU;;gBAIlC,EAAE,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,MAAM;IAK/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IAerE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAe3D,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAWxD,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxD,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAUhD,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC;IAOhF,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC;IAShF,MAAM,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC;IAepD,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC;IAOjG;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAMpC"}
1
+ {"version":3,"file":"blockstore-sql.d.ts","sourceRoot":"","sources":["../../../src/blockstore-sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAGnC;;;;;;;;;;GAUG;AACH,qBAAa,aAAc,YAAW,UAAU;;gBAIlC,EAAE,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,MAAM;IAK/C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IAuBrE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC;IAe3D,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAWxD,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxD,OAAO,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC;IAUhD,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC;IAOhF,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC;IAShF,MAAM,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC;IAepD,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC;IAOjG;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAMpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-store-s3.d.ts","sourceRoot":"","sources":["../../../src/data-store-s3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAK3F,OAAO,EAML,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAG5B;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAY,YAAW,SAAS;;gBAQ/B,MAAM,EAAE,iBAAiB;IAcxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,GAAG,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAgC7B,GAAG,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC,GACrC,OAAO,CAAC,kBAAkB,CAAC;IA4CjB,MAAM,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IA0BH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA+GpC;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IAEjB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IAEf,kGAAkG;IAClG,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8FAA8F;IAC9F,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,2GAA2G;IAC3G,WAAW,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IAE/D,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC"}
1
+ {"version":3,"file":"data-store-s3.d.ts","sourceRoot":"","sources":["../../../src/data-store-s3.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAM3F,OAAO,EAML,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAG5B;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAY,YAAW,SAAS;;gBAQ/B,MAAM,EAAE,iBAAiB;IAcxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,GAAG,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAyB7B,GAAG,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC,GACrC,OAAO,CAAC,kBAAkB,CAAC;IA2BjB,MAAM,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAcH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CA+GpC;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IAEjB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IAEf,kGAAkG;IAClG,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,8FAA8F;IAC9F,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,2GAA2G;IAC3G,WAAW,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IAE/D,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-store-sql.d.ts","sourceRoot":"","sources":["../../../src/data-store-sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAS3F;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,YAAW,SAAS;;gBAIhC,OAAO,EAAE,OAAO;IAIf,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,GAAG,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAuC7B,GAAG,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC,GACrC,OAAO,CAAC,kBAAkB,CAAC;IAsEjB,MAAM,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IA0BH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAqDpC"}
1
+ {"version":3,"file":"data-store-sql.d.ts","sourceRoot":"","sources":["../../../src/data-store-sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAU3F;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,YAAW,SAAS;;gBAIhC,OAAO,EAAE,OAAO;IAIf,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,GAAG,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IA+B7B,GAAG,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC,GACrC,OAAO,CAAC,kBAAkB,CAAC;IAoDjB,MAAM,CACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAcH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAqDpC"}
@@ -36,20 +36,5 @@ export declare class MessageStoreSql implements MessageStore {
36
36
  */
37
37
  private extractSortProperties;
38
38
  }
39
- /**
40
- * Detect whether an error is a unique constraint violation from any
41
- * supported database dialect.
42
- *
43
- * Each dialect surfaces the error differently:
44
- *
45
- * | Dialect | Error code / errno | Message pattern |
46
- * |------------|-------------------------------|----------------------------------------------------|
47
- * | PostgreSQL | `code === '23505'` | "duplicate key value violates unique constraint" |
48
- * | MySQL | `errno === 1062` | "Duplicate entry '...' for key '...'" |
49
- * | SQLite | `code === 'SQLITE_CONSTRAINT'`| "UNIQUE constraint failed: ..." |
50
- * | bun:sqlite | `code === 'SQLITE_CONSTRAINT_PRIMARYKEY'` or includes "UNIQUE" | same as above |
51
- *
52
- * @internal Exported for testing.
53
- */
54
- export declare function isDuplicateKeyError(error: unknown): boolean;
39
+ export { isDuplicateKeyError } from './utils/duplicate-key-error.js';
55
40
  //# sourceMappingURL=message-store-sql.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"message-store-sql.d.ts","sourceRoot":"","sources":["../../../src/message-store-sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAmB,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EACV,MAAM,EACN,cAAc,EACd,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAkB9C,qBAAa,eAAgB,YAAW,YAAY;;gBAKtC,OAAO,EAAE,OAAO;IAKtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,GAAG,CACP,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAqDhB;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAoC9B,GAAG,CACP,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IA0BhC,KAAK,CACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;QAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;KAAC,CAAC;IA6D9D,KAAK,CACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,CAAC,EAAE,WAAW,EACzB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,MAAM,CAAC;IAsBZ,MAAM,CACV,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAmBV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAYd,mBAAmB;IAuBjC;;;;;;;;;OASG;YACW,wBAAwB;IAsBtC;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAa9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAsC3D"}
1
+ {"version":3,"file":"message-store-sql.d.ts","sourceRoot":"","sources":["../../../src/message-store-sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,EAAmB,SAAS,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,EACV,MAAM,EACN,cAAc,EACd,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAmB9C,qBAAa,eAAgB,YAAW,YAAY;;gBAKtC,OAAO,EAAE,OAAO;IAKtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,GAAG,CACP,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,SAAS,EAClB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAqDhB;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAoC9B,GAAG,CACP,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IA0BhC,KAAK,CACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,UAAU,EACvB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC;QAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;KAAC,CAAC;IA6D9D,KAAK,CACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,CAAC,EAAE,WAAW,EACzB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,MAAM,CAAC;IAsBZ,MAAM,CACV,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC;IAmBV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAYd,mBAAmB;IAuBjC;;;;;;;;;OASG;YACW,wBAAwB;IAsBtC;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAa9B;AAED,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { DwnDatabaseType } from '../types.js';
2
+ import type { Kysely } from 'kysely';
3
+ export type DataRefKey = {
4
+ tenant: string;
5
+ recordId: string;
6
+ dataCid: string;
7
+ };
8
+ export declare function getDataRefSize(db: Kysely<DwnDatabaseType>, { tenant, recordId, dataCid }: DataRefKey): Promise<number | undefined>;
9
+ export declare function getAnyDataRefSize(db: Kysely<DwnDatabaseType>, dataCid: string): Promise<number | undefined>;
10
+ export declare function insertDataRef(db: Kysely<DwnDatabaseType>, key: DataRefKey, dataSize: number): Promise<number>;
11
+ export declare function deleteDataRef(db: Kysely<DwnDatabaseType>, { tenant, recordId, dataCid }: DataRefKey): Promise<void>;
12
+ export declare function hasAnyDataRef(db: Kysely<DwnDatabaseType>, dataCid: string): Promise<boolean>;
13
+ //# sourceMappingURL=data-refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-refs.d.ts","sourceRoot":"","sources":["../../../../src/utils/data-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,cAAc,CAClC,EAAE,EAAE,MAAM,CAAC,eAAe,CAAC,EAC3B,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,GACxC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU7B;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,MAAM,CAAC,eAAe,CAAC,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,CAAC,eAAe,CAAC,EAC3B,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,CAAC,eAAe,CAAC,EAC3B,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,UAAU,GACxC,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,CAAC,eAAe,CAAC,EAC3B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAQlB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Detect whether an error is a unique constraint violation from any
3
+ * supported database dialect.
4
+ */
5
+ export declare function isDuplicateKeyError(error: unknown): boolean;
6
+ //# sourceMappingURL=duplicate-key-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duplicate-key-error.d.ts","sourceRoot":"","sources":["../../../../src/utils/duplicate-key-error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAqC3D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enbox/dwn-sql-store",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "description": "SQL backed implementations of DWN MessageStore, DataStore, and StateIndex",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -25,7 +25,7 @@
25
25
  "dependencies": {
26
26
  "@aws-sdk/client-s3": "3.700.0",
27
27
  "@aws-sdk/lib-storage": "3.700.0",
28
- "@enbox/dwn-sdk-js": "0.3.6",
28
+ "@enbox/dwn-sdk-js": "0.3.7",
29
29
  "@ipld/dag-cbor": "9.0.5",
30
30
  "interface-blockstore": "5.2.3",
31
31
  "interface-store": "5.1.2",
@@ -4,6 +4,7 @@ import type { AbortOptions, AwaitIterable } from 'interface-store';
4
4
  import type { Blockstore, Pair } from 'interface-blockstore';
5
5
 
6
6
  import { CID } from 'multiformats';
7
+ import { isDuplicateKeyError } from './utils/duplicate-key-error.js';
7
8
 
8
9
  /**
9
10
  * SQL-backed implementation of the `Blockstore` v5 interface, scoped to a
@@ -36,14 +37,22 @@ export class BlockstoreSql implements Blockstore {
36
37
  public async put(key: CID, val: Uint8Array, _options?: AbortOptions): Promise<CID> {
37
38
  const blockCid = key.toString();
38
39
 
39
- await this.#db
40
- .insertInto('dataBlocks')
41
- .values({
42
- rootDataCid : this.#rootDataCid,
43
- blockCid,
44
- data : Buffer.from(val),
45
- })
46
- .execute();
40
+ try {
41
+ await this.#db
42
+ .insertInto('dataBlocks')
43
+ .values({
44
+ rootDataCid : this.#rootDataCid,
45
+ blockCid,
46
+ data : Buffer.from(val),
47
+ })
48
+ .execute();
49
+ } catch (error: unknown) {
50
+ if (!isDuplicateKeyError(error)) {
51
+ throw error;
52
+ }
53
+ // Idempotent block put: overlapping writes of the same dataCid can
54
+ // import the same content-addressed block concurrently.
55
+ }
47
56
 
48
57
  return key;
49
58
  }
@@ -2,6 +2,7 @@ import type { Dialect } from './dialect/dialect.js';
2
2
  import type { DwnDatabaseType } from './types.js';
3
3
  import type { DataStore, DataStoreGetResult, DataStorePutResult } from '@enbox/dwn-sdk-js';
4
4
 
5
+ import * as DataRefs from './utils/data-refs.js';
5
6
  import { DataStream } from '@enbox/dwn-sdk-js';
6
7
  import { Readable } from 'stream';
7
8
  import { Upload } from '@aws-sdk/lib-storage';
@@ -73,15 +74,8 @@ export class DataStoreS3 implements DataStore {
73
74
  ): Promise<DataStoreGetResult | undefined> {
74
75
  const db = this.#getDb('get');
75
76
 
76
- const ref = await db
77
- .selectFrom('dataRefs')
78
- .select('dataSize')
79
- .where('tenant', '=', tenant)
80
- .where('recordId', '=', recordId)
81
- .where('dataCid', '=', dataCid)
82
- .executeTakeFirst();
83
-
84
- if (!ref) {
77
+ const dataSize = await DataRefs.getDataRefSize(db, { tenant, recordId, dataCid });
78
+ if (dataSize === undefined) {
85
79
  return undefined;
86
80
  }
87
81
 
@@ -97,7 +91,7 @@ export class DataStoreS3 implements DataStore {
97
91
  const dataStream = response.Body.transformToWebStream() as ReadableStream<Uint8Array>;
98
92
 
99
93
  return {
100
- dataSize: Number(ref.dataSize),
94
+ dataSize,
101
95
  dataStream,
102
96
  };
103
97
  }
@@ -110,44 +104,27 @@ export class DataStoreS3 implements DataStore {
110
104
  ): Promise<DataStorePutResult> {
111
105
  const db = this.#getDb('put');
112
106
 
113
- // Check if this exact ref already exists (idempotent put).
114
- const existingRef = await db
115
- .selectFrom('dataRefs')
116
- .select('dataSize')
117
- .where('tenant', '=', tenant)
118
- .where('recordId', '=', recordId)
119
- .where('dataCid', '=', dataCid)
120
- .executeTakeFirst();
121
-
122
- if (existingRef) {
107
+ const existingDataSize = await DataRefs.getDataRefSize(db, { tenant, recordId, dataCid });
108
+ if (existingDataSize !== undefined) {
123
109
  await DataStream.toBytes(dataStream);
124
- return { dataSize: Number(existingRef.dataSize) };
110
+ return { dataSize: existingDataSize };
125
111
  }
126
112
 
127
113
  // Check if another ref for this dataCid already exists (dedup path).
128
- const otherRef = await db
129
- .selectFrom('dataRefs')
130
- .select('dataSize')
131
- .where('dataCid', '=', dataCid)
132
- .executeTakeFirst();
114
+ const otherDataSize = await DataRefs.getAnyDataRefSize(db, dataCid);
133
115
 
134
116
  let dataSize: number;
135
117
 
136
- if (otherRef) {
137
- // S3 object already exists — skip upload.
138
- await DataStream.toBytes(dataStream);
139
- dataSize = Number(otherRef.dataSize);
140
- } else {
118
+ if (otherDataSize === undefined) {
141
119
  // New data — upload to S3 with a counting passthrough.
142
120
  dataSize = await this.#uploadToS3(dataCid, dataStream);
121
+ } else {
122
+ // S3 object already exists — skip upload.
123
+ await DataStream.toBytes(dataStream);
124
+ dataSize = otherDataSize;
143
125
  }
144
126
 
145
- // Insert the reference.
146
- await db
147
- .insertInto('dataRefs')
148
- .values({ tenant, recordId, dataCid, dataSize })
149
- .execute();
150
-
127
+ dataSize = await DataRefs.insertDataRef(db, { tenant, recordId, dataCid }, dataSize);
151
128
  return { dataSize };
152
129
  }
153
130
 
@@ -158,22 +135,10 @@ export class DataStoreS3 implements DataStore {
158
135
  ): Promise<void> {
159
136
  const db = this.#getDb('delete');
160
137
 
161
- // Remove the reference.
162
- await db
163
- .deleteFrom('dataRefs')
164
- .where('tenant', '=', tenant)
165
- .where('recordId', '=', recordId)
166
- .where('dataCid', '=', dataCid)
167
- .execute();
138
+ await DataRefs.deleteDataRef(db, { tenant, recordId, dataCid });
168
139
 
169
140
  // Garbage-collect the S3 object if no more refs point to this dataCid.
170
- const remaining = await db
171
- .selectFrom('dataRefs')
172
- .select('dataCid')
173
- .where('dataCid', '=', dataCid)
174
- .executeTakeFirst();
175
-
176
- if (!remaining) {
141
+ if (!await DataRefs.hasAnyDataRef(db, dataCid)) {
177
142
  await this.#s3.send(new DeleteObjectCommand({
178
143
  Bucket : this.#bucket,
179
144
  Key : dataCid,
@@ -3,6 +3,7 @@ import type { DwnDatabaseType } from './types.js';
3
3
  import type { ImportResult } from 'ipfs-unixfs-importer';
4
4
  import type { DataStore, DataStoreGetResult, DataStorePutResult } from '@enbox/dwn-sdk-js';
5
5
 
6
+ import * as DataRefs from './utils/data-refs.js';
6
7
  import { BlockstoreSql } from './blockstore-sql.js';
7
8
  import { CID } from 'multiformats';
8
9
  import { DataStream } from '@enbox/dwn-sdk-js';
@@ -53,16 +54,8 @@ export class DataStoreSql implements DataStore {
53
54
  ): Promise<DataStoreGetResult | undefined> {
54
55
  const db = this.#getDb('get');
55
56
 
56
- // Look up the reference to confirm this tenant+record has this data.
57
- const ref = await db
58
- .selectFrom('dataRefs')
59
- .select('dataSize')
60
- .where('tenant', '=', tenant)
61
- .where('recordId', '=', recordId)
62
- .where('dataCid', '=', dataCid)
63
- .executeTakeFirst();
64
-
65
- if (!ref) {
57
+ const dataSize = await DataRefs.getDataRefSize(db, { tenant, recordId, dataCid });
58
+ if (dataSize === undefined) {
66
59
  return undefined;
67
60
  }
68
61
 
@@ -84,7 +77,7 @@ export class DataStoreSql implements DataStore {
84
77
  });
85
78
 
86
79
  return {
87
- dataSize: Number(ref.dataSize),
80
+ dataSize,
88
81
  dataStream,
89
82
  };
90
83
  }
@@ -97,19 +90,11 @@ export class DataStoreSql implements DataStore {
97
90
  ): Promise<DataStorePutResult> {
98
91
  const db = this.#getDb('put');
99
92
 
100
- // Check if this exact ref already exists (idempotent put).
101
- const existingRef = await db
102
- .selectFrom('dataRefs')
103
- .select('dataSize')
104
- .where('tenant', '=', tenant)
105
- .where('recordId', '=', recordId)
106
- .where('dataCid', '=', dataCid)
107
- .executeTakeFirst();
108
-
109
- if (existingRef) {
93
+ const existingDataSize = await DataRefs.getDataRefSize(db, { tenant, recordId, dataCid });
94
+ if (existingDataSize !== undefined) {
110
95
  // Drain the stream — caller expects it to be consumed.
111
96
  await DataStream.toBytes(dataStream);
112
- return { dataSize: Number(existingRef.dataSize) };
97
+ return { dataSize: existingDataSize };
113
98
  }
114
99
 
115
100
  // Check if blocks for this dataCid already exist (dedup path).
@@ -122,20 +107,15 @@ export class DataStoreSql implements DataStore {
122
107
  if (blocksExist) {
123
108
  // Blocks already stored by a previous ref with the same dataCid.
124
109
  // Get the data size from that existing ref.
125
- const otherRef = await db
126
- .selectFrom('dataRefs')
127
- .select('dataSize')
128
- .where('dataCid', '=', dataCid)
129
- .executeTakeFirst();
130
-
131
- if (otherRef) {
132
- dataSize = Number(otherRef.dataSize);
133
- // Drain the stream — caller expects it to be consumed.
134
- await DataStream.toBytes(dataStream);
135
- } else {
110
+ const otherDataSize = await DataRefs.getAnyDataRefSize(db, dataCid);
111
+ if (otherDataSize === undefined) {
136
112
  // Edge case: blocks exist but no ref (interrupted previous put).
137
113
  // Count bytes without full buffering.
138
114
  dataSize = await DataStoreSql.#countStreamBytes(dataStream);
115
+ } else {
116
+ dataSize = otherDataSize;
117
+ // Drain the stream — caller expects it to be consumed.
118
+ await DataStream.toBytes(dataStream);
139
119
  }
140
120
  } else {
141
121
  // New data — clean up any partial blocks from interrupted imports,
@@ -155,12 +135,7 @@ export class DataStoreSql implements DataStore {
155
135
  dataSize = Number(dataDagRoot.unixfs?.fileSize() ?? dataDagRoot.size);
156
136
  }
157
137
 
158
- // Insert the reference.
159
- await db
160
- .insertInto('dataRefs')
161
- .values({ tenant, recordId, dataCid, dataSize })
162
- .execute();
163
-
138
+ dataSize = await DataRefs.insertDataRef(db, { tenant, recordId, dataCid }, dataSize);
164
139
  return { dataSize };
165
140
  }
166
141
 
@@ -171,22 +146,10 @@ export class DataStoreSql implements DataStore {
171
146
  ): Promise<void> {
172
147
  const db = this.#getDb('delete');
173
148
 
174
- // Remove the reference.
175
- await db
176
- .deleteFrom('dataRefs')
177
- .where('tenant', '=', tenant)
178
- .where('recordId', '=', recordId)
179
- .where('dataCid', '=', dataCid)
180
- .execute();
149
+ await DataRefs.deleteDataRef(db, { tenant, recordId, dataCid });
181
150
 
182
151
  // Garbage-collect blocks if no more refs point to this dataCid.
183
- const remaining = await db
184
- .selectFrom('dataRefs')
185
- .select('dataCid')
186
- .where('dataCid', '=', dataCid)
187
- .executeTakeFirst();
188
-
189
- if (!remaining) {
152
+ if (!await DataRefs.hasAnyDataRef(db, dataCid)) {
190
153
  await db
191
154
  .deleteFrom('dataBlocks')
192
155
  .where('rootDataCid', '=', dataCid)
@@ -15,6 +15,7 @@ import * as cbor from '@ipld/dag-cbor';
15
15
  import { executeWithTransaction } from './utils/transaction.js';
16
16
  import { extractTagsAndSanitizeIndexes } from './utils/sanitize.js';
17
17
  import { filterSelectQuery } from './utils/filter.js';
18
+ import { isDuplicateKeyError } from './utils/duplicate-key-error.js';
18
19
  import { sha256 } from 'multiformats/hashes/sha2';
19
20
  import { TagTables } from './utils/tags.js';
20
21
  import {
@@ -398,57 +399,4 @@ export class MessageStoreSql implements MessageStore {
398
399
  }
399
400
  }
400
401
 
401
- /**
402
- * Detect whether an error is a unique constraint violation from any
403
- * supported database dialect.
404
- *
405
- * Each dialect surfaces the error differently:
406
- *
407
- * | Dialect | Error code / errno | Message pattern |
408
- * |------------|-------------------------------|----------------------------------------------------|
409
- * | PostgreSQL | `code === '23505'` | "duplicate key value violates unique constraint" |
410
- * | MySQL | `errno === 1062` | "Duplicate entry '...' for key '...'" |
411
- * | SQLite | `code === 'SQLITE_CONSTRAINT'`| "UNIQUE constraint failed: ..." |
412
- * | bun:sqlite | `code === 'SQLITE_CONSTRAINT_PRIMARYKEY'` or includes "UNIQUE" | same as above |
413
- *
414
- * @internal Exported for testing.
415
- */
416
- export function isDuplicateKeyError(error: unknown): boolean {
417
- if (error == null || typeof error !== 'object') {
418
- return false;
419
- }
420
-
421
- const err = error as Record<string, unknown>;
422
- const code = err.code;
423
- const errno = err.errno;
424
- const message = typeof err.message === 'string' ? err.message : '';
425
-
426
- // PostgreSQL: error code 23505 = unique_violation
427
- if (code === '23505') {
428
- return true;
429
- }
430
-
431
- // MySQL: errno 1062 = ER_DUP_ENTRY
432
- if (errno === 1062) {
433
- return true;
434
- }
435
-
436
- // SQLite (better-sqlite3 / bun:sqlite): SQLITE_CONSTRAINT with UNIQUE
437
- if (
438
- typeof code === 'string' &&
439
- code.startsWith('SQLITE_CONSTRAINT') &&
440
- message.includes('UNIQUE')
441
- ) {
442
- return true;
443
- }
444
-
445
- // Fallback: message-based detection for unknown drivers
446
- if (
447
- (message.includes('duplicate key') || message.includes('Duplicate entry')) &&
448
- (message.includes('messageCid') || message.includes('unique constraint'))
449
- ) {
450
- return true;
451
- }
452
-
453
- return false;
454
- }
402
+ export { isDuplicateKeyError } from './utils/duplicate-key-error.js';
@@ -0,0 +1,89 @@
1
+ import type { DwnDatabaseType } from '../types.js';
2
+ import type { Kysely } from 'kysely';
3
+
4
+ import { isDuplicateKeyError } from './duplicate-key-error.js';
5
+
6
+ export type DataRefKey = {
7
+ tenant: string;
8
+ recordId: string;
9
+ dataCid: string;
10
+ };
11
+
12
+ export async function getDataRefSize(
13
+ db: Kysely<DwnDatabaseType>,
14
+ { tenant, recordId, dataCid }: DataRefKey,
15
+ ): Promise<number | undefined> {
16
+ const ref = await db
17
+ .selectFrom('dataRefs')
18
+ .select('dataSize')
19
+ .where('tenant', '=', tenant)
20
+ .where('recordId', '=', recordId)
21
+ .where('dataCid', '=', dataCid)
22
+ .executeTakeFirst();
23
+
24
+ return ref === undefined ? undefined : Number(ref.dataSize);
25
+ }
26
+
27
+ export async function getAnyDataRefSize(
28
+ db: Kysely<DwnDatabaseType>,
29
+ dataCid: string,
30
+ ): Promise<number | undefined> {
31
+ const ref = await db
32
+ .selectFrom('dataRefs')
33
+ .select('dataSize')
34
+ .where('dataCid', '=', dataCid)
35
+ .executeTakeFirst();
36
+
37
+ return ref === undefined ? undefined : Number(ref.dataSize);
38
+ }
39
+
40
+ export async function insertDataRef(
41
+ db: Kysely<DwnDatabaseType>,
42
+ key: DataRefKey,
43
+ dataSize: number,
44
+ ): Promise<number> {
45
+ try {
46
+ await db
47
+ .insertInto('dataRefs')
48
+ .values({ ...key, dataSize })
49
+ .execute();
50
+
51
+ return dataSize;
52
+ } catch (error: unknown) {
53
+ if (!isDuplicateKeyError(error)) {
54
+ throw error;
55
+ }
56
+
57
+ const racedDataSize = await getDataRefSize(db, key);
58
+ if (racedDataSize === undefined) {
59
+ throw error;
60
+ }
61
+
62
+ return racedDataSize;
63
+ }
64
+ }
65
+
66
+ export async function deleteDataRef(
67
+ db: Kysely<DwnDatabaseType>,
68
+ { tenant, recordId, dataCid }: DataRefKey,
69
+ ): Promise<void> {
70
+ await db
71
+ .deleteFrom('dataRefs')
72
+ .where('tenant', '=', tenant)
73
+ .where('recordId', '=', recordId)
74
+ .where('dataCid', '=', dataCid)
75
+ .execute();
76
+ }
77
+
78
+ export async function hasAnyDataRef(
79
+ db: Kysely<DwnDatabaseType>,
80
+ dataCid: string,
81
+ ): Promise<boolean> {
82
+ const ref = await db
83
+ .selectFrom('dataRefs')
84
+ .select('dataCid')
85
+ .where('dataCid', '=', dataCid)
86
+ .executeTakeFirst();
87
+
88
+ return ref !== undefined;
89
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Detect whether an error is a unique constraint violation from any
3
+ * supported database dialect.
4
+ */
5
+ export function isDuplicateKeyError(error: unknown): boolean {
6
+ if (error == null || typeof error !== 'object') {
7
+ return false;
8
+ }
9
+
10
+ const err = error as Record<string, unknown>;
11
+ const code = err.code;
12
+ const errno = err.errno;
13
+ const message = typeof err.message === 'string' ? err.message : '';
14
+
15
+ if (code === '23505') {
16
+ return true;
17
+ }
18
+
19
+ if (errno === 1062) {
20
+ return true;
21
+ }
22
+
23
+ if (
24
+ typeof code === 'string' &&
25
+ code.startsWith('SQLITE_CONSTRAINT') &&
26
+ message.includes('UNIQUE')
27
+ ) {
28
+ return true;
29
+ }
30
+
31
+ if (
32
+ (message.includes('duplicate key') || message.includes('Duplicate entry')) &&
33
+ (message.includes('messageCid') ||
34
+ message.includes('dataRefs') ||
35
+ message.includes('dataBlocks') ||
36
+ message.includes('unique constraint'))
37
+ ) {
38
+ return true;
39
+ }
40
+
41
+ return false;
42
+ }