@mastra/cloudflare-d1 0.12.0 → 0.12.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.
- package/LICENSE.md +11 -42
- package/README.md +15 -0
- package/dist/_tsup-dts-rollup.d.cts +26 -3
- package/dist/_tsup-dts-rollup.d.ts +26 -3
- package/dist/index.cjs +50 -17
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +50 -17
- package/package.json +8 -8
package/LICENSE.md
CHANGED
|
@@ -1,46 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Apache License 2.0
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2025
|
|
3
|
+
Copyright (c) 2025 Kepler Software, Inc.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
you may not use this file except in compliance with the License.
|
|
7
|
+
You may obtain a copy of the License at
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
The licensor grants you a non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable license to use, copy, distribute, make available, and prepare derivative works of the software, in each case subject to the limitations and conditions below
|
|
9
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
You may not alter, remove, or obscure any licensing, copyright, or other notices of the licensor in the software. Any use of the licensor’s trademarks is subject to applicable law.
|
|
17
|
-
|
|
18
|
-
**Patents**
|
|
19
|
-
The licensor grants you a license, under any patent claims the licensor can license, or becomes able to license, to make, have made, use, sell, offer for sale, import and have imported the software, in each case subject to the limitations and conditions in this license. This license does not cover any patent claims that you cause to be infringed by modifications or additions to the software. If you or your company make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.
|
|
20
|
-
|
|
21
|
-
**Notices**
|
|
22
|
-
You must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms.
|
|
23
|
-
|
|
24
|
-
If you modify the software, you must include in any modified copies of the software prominent notices stating that you have modified the software.
|
|
25
|
-
|
|
26
|
-
**No Other Rights**
|
|
27
|
-
These terms do not imply any licenses other than those expressly granted in these terms.
|
|
28
|
-
|
|
29
|
-
**Termination**
|
|
30
|
-
If you use the software in violation of these terms, such use is not licensed, and your licenses will automatically terminate. If the licensor provides you with a notice of your violation, and you cease all violation of this license no later than 30 days after you receive that notice, your licenses will be reinstated retroactively. However, if you violate these terms after such reinstatement, any additional violation of these terms will cause your licenses to terminate automatically and permanently.
|
|
31
|
-
|
|
32
|
-
**No Liability**
|
|
33
|
-
As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.
|
|
34
|
-
|
|
35
|
-
**Definitions**
|
|
36
|
-
The _licensor_ is the entity offering these terms, and the _software_ is the software the licensor makes available under these terms, including any portion of it.
|
|
37
|
-
|
|
38
|
-
_you_ refers to the individual or entity agreeing to these terms.
|
|
39
|
-
|
|
40
|
-
_your company_ is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. _control_ means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.
|
|
41
|
-
|
|
42
|
-
_your licenses_ are all the licenses granted to you for the software under these terms.
|
|
43
|
-
|
|
44
|
-
_use_ means anything you do with the software requiring one of your licenses.
|
|
45
|
-
|
|
46
|
-
_trademark_ means trademarks, service marks, and similar rights.
|
|
11
|
+
Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
See the License for the specific language governing permissions and
|
|
15
|
+
limitations under the License.
|
package/README.md
CHANGED
|
@@ -54,6 +54,21 @@ const store = new D1Store({
|
|
|
54
54
|
});
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
+
### Or you can pass any client implementation you want
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
import { D1Store } from '@mastra/cloudflare-d1';
|
|
61
|
+
|
|
62
|
+
const store = new D1Store({
|
|
63
|
+
client: {
|
|
64
|
+
query: ({ sql, params }) => {
|
|
65
|
+
// do something
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
tablePrefix: 'mastra_', // optional
|
|
69
|
+
});
|
|
70
|
+
```
|
|
71
|
+
|
|
57
72
|
## Supported Methods
|
|
58
73
|
|
|
59
74
|
### Thread Operations
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { default as Cloudflare_2 } from 'cloudflare';
|
|
1
2
|
import type { D1Database as D1Database_2 } from '@cloudflare/workers-types';
|
|
2
3
|
import type { EvalRow } from '@mastra/core/storage';
|
|
3
4
|
import type { MastraMessageContentV2 } from '@mastra/core/agent';
|
|
@@ -33,6 +34,26 @@ export declare const createSampleTrace: (name: string, scope?: string, attribute
|
|
|
33
34
|
|
|
34
35
|
export declare function createSqlBuilder(): SqlBuilder;
|
|
35
36
|
|
|
37
|
+
declare interface D1Client {
|
|
38
|
+
query(args: {
|
|
39
|
+
sql: string;
|
|
40
|
+
params: string[];
|
|
41
|
+
}): Promise<{
|
|
42
|
+
result: D1QueryResult;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
export { D1Client }
|
|
46
|
+
export { D1Client as D1Client_alias_1 }
|
|
47
|
+
|
|
48
|
+
declare interface D1ClientConfig {
|
|
49
|
+
/** Optional prefix for table names */
|
|
50
|
+
tablePrefix?: string;
|
|
51
|
+
/** D1 Client */
|
|
52
|
+
client: D1Client;
|
|
53
|
+
}
|
|
54
|
+
export { D1ClientConfig }
|
|
55
|
+
export { D1ClientConfig as D1ClientConfig_alias_1 }
|
|
56
|
+
|
|
36
57
|
/**
|
|
37
58
|
* Configuration for D1 using the REST API
|
|
38
59
|
*/
|
|
@@ -49,10 +70,12 @@ declare interface D1Config {
|
|
|
49
70
|
export { D1Config }
|
|
50
71
|
export { D1Config as D1Config_alias_1 }
|
|
51
72
|
|
|
73
|
+
declare type D1QueryResult = Awaited<ReturnType<Cloudflare_2['d1']['database']['query']>>['result'];
|
|
74
|
+
export { D1QueryResult }
|
|
75
|
+
export { D1QueryResult as D1QueryResult_alias_1 }
|
|
76
|
+
|
|
52
77
|
declare class D1Store extends MastraStorage {
|
|
53
78
|
private client?;
|
|
54
|
-
private accountId?;
|
|
55
|
-
private databaseId?;
|
|
56
79
|
private binding?;
|
|
57
80
|
private tablePrefix;
|
|
58
81
|
/**
|
|
@@ -247,7 +270,7 @@ export { D1Store as D1Store_alias_1 }
|
|
|
247
270
|
/**
|
|
248
271
|
* Combined configuration type supporting both REST API and Workers Binding API
|
|
249
272
|
*/
|
|
250
|
-
declare type D1StoreConfig = D1Config | D1WorkersConfig;
|
|
273
|
+
declare type D1StoreConfig = D1Config | D1WorkersConfig | D1ClientConfig;
|
|
251
274
|
export { D1StoreConfig }
|
|
252
275
|
export { D1StoreConfig as D1StoreConfig_alias_1 }
|
|
253
276
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { default as Cloudflare_2 } from 'cloudflare';
|
|
1
2
|
import type { D1Database as D1Database_2 } from '@cloudflare/workers-types';
|
|
2
3
|
import type { EvalRow } from '@mastra/core/storage';
|
|
3
4
|
import type { MastraMessageContentV2 } from '@mastra/core/agent';
|
|
@@ -33,6 +34,26 @@ export declare const createSampleTrace: (name: string, scope?: string, attribute
|
|
|
33
34
|
|
|
34
35
|
export declare function createSqlBuilder(): SqlBuilder;
|
|
35
36
|
|
|
37
|
+
declare interface D1Client {
|
|
38
|
+
query(args: {
|
|
39
|
+
sql: string;
|
|
40
|
+
params: string[];
|
|
41
|
+
}): Promise<{
|
|
42
|
+
result: D1QueryResult;
|
|
43
|
+
}>;
|
|
44
|
+
}
|
|
45
|
+
export { D1Client }
|
|
46
|
+
export { D1Client as D1Client_alias_1 }
|
|
47
|
+
|
|
48
|
+
declare interface D1ClientConfig {
|
|
49
|
+
/** Optional prefix for table names */
|
|
50
|
+
tablePrefix?: string;
|
|
51
|
+
/** D1 Client */
|
|
52
|
+
client: D1Client;
|
|
53
|
+
}
|
|
54
|
+
export { D1ClientConfig }
|
|
55
|
+
export { D1ClientConfig as D1ClientConfig_alias_1 }
|
|
56
|
+
|
|
36
57
|
/**
|
|
37
58
|
* Configuration for D1 using the REST API
|
|
38
59
|
*/
|
|
@@ -49,10 +70,12 @@ declare interface D1Config {
|
|
|
49
70
|
export { D1Config }
|
|
50
71
|
export { D1Config as D1Config_alias_1 }
|
|
51
72
|
|
|
73
|
+
declare type D1QueryResult = Awaited<ReturnType<Cloudflare_2['d1']['database']['query']>>['result'];
|
|
74
|
+
export { D1QueryResult }
|
|
75
|
+
export { D1QueryResult as D1QueryResult_alias_1 }
|
|
76
|
+
|
|
52
77
|
declare class D1Store extends MastraStorage {
|
|
53
78
|
private client?;
|
|
54
|
-
private accountId?;
|
|
55
|
-
private databaseId?;
|
|
56
79
|
private binding?;
|
|
57
80
|
private tablePrefix;
|
|
58
81
|
/**
|
|
@@ -247,7 +270,7 @@ export { D1Store as D1Store_alias_1 }
|
|
|
247
270
|
/**
|
|
248
271
|
* Combined configuration type supporting both REST API and Workers Binding API
|
|
249
272
|
*/
|
|
250
|
-
declare type D1StoreConfig = D1Config | D1WorkersConfig;
|
|
273
|
+
declare type D1StoreConfig = D1Config | D1WorkersConfig | D1ClientConfig;
|
|
251
274
|
export { D1StoreConfig }
|
|
252
275
|
export { D1StoreConfig as D1StoreConfig_alias_1 }
|
|
253
276
|
|
package/dist/index.cjs
CHANGED
|
@@ -247,8 +247,6 @@ function isArrayOfRecords(value) {
|
|
|
247
247
|
}
|
|
248
248
|
var D1Store = class extends storage.MastraStorage {
|
|
249
249
|
client;
|
|
250
|
-
accountId;
|
|
251
|
-
databaseId;
|
|
252
250
|
binding;
|
|
253
251
|
// D1Database binding
|
|
254
252
|
tablePrefix;
|
|
@@ -269,15 +267,28 @@ var D1Store = class extends storage.MastraStorage {
|
|
|
269
267
|
}
|
|
270
268
|
this.binding = config.binding;
|
|
271
269
|
this.logger.info("Using D1 Workers Binding API");
|
|
270
|
+
} else if ("client" in config) {
|
|
271
|
+
if (!config.client) {
|
|
272
|
+
throw new Error("D1 client is required when using D1ClientConfig");
|
|
273
|
+
}
|
|
274
|
+
this.client = config.client;
|
|
275
|
+
this.logger.info("Using D1 Client");
|
|
272
276
|
} else {
|
|
273
277
|
if (!config.accountId || !config.databaseId || !config.apiToken) {
|
|
274
278
|
throw new Error("accountId, databaseId, and apiToken are required when using REST API");
|
|
275
279
|
}
|
|
276
|
-
|
|
277
|
-
this.databaseId = config.databaseId;
|
|
278
|
-
this.client = new Cloudflare__default.default({
|
|
280
|
+
const cfClient = new Cloudflare__default.default({
|
|
279
281
|
apiToken: config.apiToken
|
|
280
282
|
});
|
|
283
|
+
this.client = {
|
|
284
|
+
query: ({ sql, params }) => {
|
|
285
|
+
return cfClient.d1.database.query(config.databaseId, {
|
|
286
|
+
account_id: config.accountId,
|
|
287
|
+
sql,
|
|
288
|
+
params
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
};
|
|
281
292
|
this.logger.info("Using D1 REST API");
|
|
282
293
|
}
|
|
283
294
|
} catch (error$1) {
|
|
@@ -351,12 +362,11 @@ var D1Store = class extends storage.MastraStorage {
|
|
|
351
362
|
params = [],
|
|
352
363
|
first = false
|
|
353
364
|
}) {
|
|
354
|
-
if (!this.client
|
|
365
|
+
if (!this.client) {
|
|
355
366
|
throw new Error("Missing required REST API configuration");
|
|
356
367
|
}
|
|
357
368
|
try {
|
|
358
|
-
const response = await this.client.
|
|
359
|
-
account_id: this.accountId,
|
|
369
|
+
const response = await this.client.query({
|
|
360
370
|
sql,
|
|
361
371
|
params: this.formatSqlParams(params)
|
|
362
372
|
});
|
|
@@ -387,7 +397,7 @@ var D1Store = class extends storage.MastraStorage {
|
|
|
387
397
|
this.logger.debug("Executing SQL query", { sql, params, first });
|
|
388
398
|
if (this.binding) {
|
|
389
399
|
return this.executeWorkersBindingQuery({ sql, params, first });
|
|
390
|
-
} else if (this.client
|
|
400
|
+
} else if (this.client) {
|
|
391
401
|
return this.executeRestQuery({ sql, params, first });
|
|
392
402
|
} else {
|
|
393
403
|
throw new Error("No valid D1 configuration provided");
|
|
@@ -841,9 +851,15 @@ var D1Store = class extends storage.MastraStorage {
|
|
|
841
851
|
const threadId = messages[0]?.threadId;
|
|
842
852
|
for (const [i, message] of messages.entries()) {
|
|
843
853
|
if (!message.id) throw new Error(`Message at index ${i} missing id`);
|
|
844
|
-
if (!message.threadId)
|
|
845
|
-
|
|
846
|
-
|
|
854
|
+
if (!message.threadId) {
|
|
855
|
+
throw new Error(`Message at index ${i} missing threadId`);
|
|
856
|
+
}
|
|
857
|
+
if (!message.content) {
|
|
858
|
+
throw new Error(`Message at index ${i} missing content`);
|
|
859
|
+
}
|
|
860
|
+
if (!message.role) {
|
|
861
|
+
throw new Error(`Message at index ${i} missing role`);
|
|
862
|
+
}
|
|
847
863
|
const thread = await this.getThreadById({ threadId: message.threadId });
|
|
848
864
|
if (!thread) {
|
|
849
865
|
throw new Error(`Thread ${message.threadId} not found`);
|
|
@@ -940,7 +956,10 @@ var D1Store = class extends storage.MastraStorage {
|
|
|
940
956
|
format
|
|
941
957
|
}) {
|
|
942
958
|
const fullTableName = this.getTableName(storage.TABLE_MESSAGES);
|
|
943
|
-
const limit = this.resolveMessageLimit({
|
|
959
|
+
const limit = this.resolveMessageLimit({
|
|
960
|
+
last: selectBy?.last,
|
|
961
|
+
defaultLimit: 40
|
|
962
|
+
});
|
|
944
963
|
const include = selectBy?.include || [];
|
|
945
964
|
const messages = [];
|
|
946
965
|
try {
|
|
@@ -1433,7 +1452,11 @@ var D1Store = class extends storage.MastraStorage {
|
|
|
1433
1452
|
}
|
|
1434
1453
|
const { sql: countSql, params: countParams } = countQueryBuilder.build();
|
|
1435
1454
|
try {
|
|
1436
|
-
const countResult = await this.executeQuery({
|
|
1455
|
+
const countResult = await this.executeQuery({
|
|
1456
|
+
sql: countSql,
|
|
1457
|
+
params: countParams,
|
|
1458
|
+
first: true
|
|
1459
|
+
});
|
|
1437
1460
|
const total = Number(countResult?.count || 0);
|
|
1438
1461
|
const currentOffset = page * perPage;
|
|
1439
1462
|
if (total === 0) {
|
|
@@ -1451,7 +1474,10 @@ var D1Store = class extends storage.MastraStorage {
|
|
|
1451
1474
|
}
|
|
1452
1475
|
dataQueryBuilder.orderBy("createdAt", "DESC").limit(perPage).offset(currentOffset);
|
|
1453
1476
|
const { sql: dataSql, params: dataParams } = dataQueryBuilder.build();
|
|
1454
|
-
const rows = await this.executeQuery({
|
|
1477
|
+
const rows = await this.executeQuery({
|
|
1478
|
+
sql: dataSql,
|
|
1479
|
+
params: dataParams
|
|
1480
|
+
});
|
|
1455
1481
|
const evals = (isArrayOfRecords(rows) ? rows : []).map((row) => {
|
|
1456
1482
|
const result = this.deserializeValue(row.result);
|
|
1457
1483
|
const testInfo = row.test_info ? this.deserializeValue(row.test_info) : void 0;
|
|
@@ -1553,7 +1579,11 @@ var D1Store = class extends storage.MastraStorage {
|
|
|
1553
1579
|
let total = 0;
|
|
1554
1580
|
if (limit !== void 0 && offset !== void 0) {
|
|
1555
1581
|
const { sql: countSql, params: countParams } = countBuilder.build();
|
|
1556
|
-
const countResult = await this.executeQuery({
|
|
1582
|
+
const countResult = await this.executeQuery({
|
|
1583
|
+
sql: countSql,
|
|
1584
|
+
params: countParams,
|
|
1585
|
+
first: true
|
|
1586
|
+
});
|
|
1557
1587
|
total = Number(countResult?.count ?? 0);
|
|
1558
1588
|
}
|
|
1559
1589
|
const results = await this.executeQuery({ sql, params });
|
|
@@ -1566,7 +1596,10 @@ var D1Store = class extends storage.MastraStorage {
|
|
|
1566
1596
|
domain: error.ErrorDomain.STORAGE,
|
|
1567
1597
|
category: error.ErrorCategory.THIRD_PARTY,
|
|
1568
1598
|
text: `Failed to retrieve workflow runs: ${error$1 instanceof Error ? error$1.message : String(error$1)}`,
|
|
1569
|
-
details: {
|
|
1599
|
+
details: {
|
|
1600
|
+
workflowName: workflowName ?? "",
|
|
1601
|
+
resourceId: resourceId ?? ""
|
|
1602
|
+
}
|
|
1570
1603
|
},
|
|
1571
1604
|
error$1
|
|
1572
1605
|
);
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export { D1Config } from './_tsup-dts-rollup.cjs';
|
|
2
|
+
export { D1ClientConfig } from './_tsup-dts-rollup.cjs';
|
|
2
3
|
export { D1WorkersConfig } from './_tsup-dts-rollup.cjs';
|
|
3
4
|
export { D1StoreConfig } from './_tsup-dts-rollup.cjs';
|
|
5
|
+
export { D1QueryResult } from './_tsup-dts-rollup.cjs';
|
|
6
|
+
export { D1Client } from './_tsup-dts-rollup.cjs';
|
|
4
7
|
export { D1Store } from './_tsup-dts-rollup.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export { D1Config } from './_tsup-dts-rollup.js';
|
|
2
|
+
export { D1ClientConfig } from './_tsup-dts-rollup.js';
|
|
2
3
|
export { D1WorkersConfig } from './_tsup-dts-rollup.js';
|
|
3
4
|
export { D1StoreConfig } from './_tsup-dts-rollup.js';
|
|
5
|
+
export { D1QueryResult } from './_tsup-dts-rollup.js';
|
|
6
|
+
export { D1Client } from './_tsup-dts-rollup.js';
|
|
4
7
|
export { D1Store } from './_tsup-dts-rollup.js';
|
package/dist/index.js
CHANGED
|
@@ -241,8 +241,6 @@ function isArrayOfRecords(value) {
|
|
|
241
241
|
}
|
|
242
242
|
var D1Store = class extends MastraStorage {
|
|
243
243
|
client;
|
|
244
|
-
accountId;
|
|
245
|
-
databaseId;
|
|
246
244
|
binding;
|
|
247
245
|
// D1Database binding
|
|
248
246
|
tablePrefix;
|
|
@@ -263,15 +261,28 @@ var D1Store = class extends MastraStorage {
|
|
|
263
261
|
}
|
|
264
262
|
this.binding = config.binding;
|
|
265
263
|
this.logger.info("Using D1 Workers Binding API");
|
|
264
|
+
} else if ("client" in config) {
|
|
265
|
+
if (!config.client) {
|
|
266
|
+
throw new Error("D1 client is required when using D1ClientConfig");
|
|
267
|
+
}
|
|
268
|
+
this.client = config.client;
|
|
269
|
+
this.logger.info("Using D1 Client");
|
|
266
270
|
} else {
|
|
267
271
|
if (!config.accountId || !config.databaseId || !config.apiToken) {
|
|
268
272
|
throw new Error("accountId, databaseId, and apiToken are required when using REST API");
|
|
269
273
|
}
|
|
270
|
-
|
|
271
|
-
this.databaseId = config.databaseId;
|
|
272
|
-
this.client = new Cloudflare({
|
|
274
|
+
const cfClient = new Cloudflare({
|
|
273
275
|
apiToken: config.apiToken
|
|
274
276
|
});
|
|
277
|
+
this.client = {
|
|
278
|
+
query: ({ sql, params }) => {
|
|
279
|
+
return cfClient.d1.database.query(config.databaseId, {
|
|
280
|
+
account_id: config.accountId,
|
|
281
|
+
sql,
|
|
282
|
+
params
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
};
|
|
275
286
|
this.logger.info("Using D1 REST API");
|
|
276
287
|
}
|
|
277
288
|
} catch (error) {
|
|
@@ -345,12 +356,11 @@ var D1Store = class extends MastraStorage {
|
|
|
345
356
|
params = [],
|
|
346
357
|
first = false
|
|
347
358
|
}) {
|
|
348
|
-
if (!this.client
|
|
359
|
+
if (!this.client) {
|
|
349
360
|
throw new Error("Missing required REST API configuration");
|
|
350
361
|
}
|
|
351
362
|
try {
|
|
352
|
-
const response = await this.client.
|
|
353
|
-
account_id: this.accountId,
|
|
363
|
+
const response = await this.client.query({
|
|
354
364
|
sql,
|
|
355
365
|
params: this.formatSqlParams(params)
|
|
356
366
|
});
|
|
@@ -381,7 +391,7 @@ var D1Store = class extends MastraStorage {
|
|
|
381
391
|
this.logger.debug("Executing SQL query", { sql, params, first });
|
|
382
392
|
if (this.binding) {
|
|
383
393
|
return this.executeWorkersBindingQuery({ sql, params, first });
|
|
384
|
-
} else if (this.client
|
|
394
|
+
} else if (this.client) {
|
|
385
395
|
return this.executeRestQuery({ sql, params, first });
|
|
386
396
|
} else {
|
|
387
397
|
throw new Error("No valid D1 configuration provided");
|
|
@@ -835,9 +845,15 @@ var D1Store = class extends MastraStorage {
|
|
|
835
845
|
const threadId = messages[0]?.threadId;
|
|
836
846
|
for (const [i, message] of messages.entries()) {
|
|
837
847
|
if (!message.id) throw new Error(`Message at index ${i} missing id`);
|
|
838
|
-
if (!message.threadId)
|
|
839
|
-
|
|
840
|
-
|
|
848
|
+
if (!message.threadId) {
|
|
849
|
+
throw new Error(`Message at index ${i} missing threadId`);
|
|
850
|
+
}
|
|
851
|
+
if (!message.content) {
|
|
852
|
+
throw new Error(`Message at index ${i} missing content`);
|
|
853
|
+
}
|
|
854
|
+
if (!message.role) {
|
|
855
|
+
throw new Error(`Message at index ${i} missing role`);
|
|
856
|
+
}
|
|
841
857
|
const thread = await this.getThreadById({ threadId: message.threadId });
|
|
842
858
|
if (!thread) {
|
|
843
859
|
throw new Error(`Thread ${message.threadId} not found`);
|
|
@@ -934,7 +950,10 @@ var D1Store = class extends MastraStorage {
|
|
|
934
950
|
format
|
|
935
951
|
}) {
|
|
936
952
|
const fullTableName = this.getTableName(TABLE_MESSAGES);
|
|
937
|
-
const limit = this.resolveMessageLimit({
|
|
953
|
+
const limit = this.resolveMessageLimit({
|
|
954
|
+
last: selectBy?.last,
|
|
955
|
+
defaultLimit: 40
|
|
956
|
+
});
|
|
938
957
|
const include = selectBy?.include || [];
|
|
939
958
|
const messages = [];
|
|
940
959
|
try {
|
|
@@ -1427,7 +1446,11 @@ var D1Store = class extends MastraStorage {
|
|
|
1427
1446
|
}
|
|
1428
1447
|
const { sql: countSql, params: countParams } = countQueryBuilder.build();
|
|
1429
1448
|
try {
|
|
1430
|
-
const countResult = await this.executeQuery({
|
|
1449
|
+
const countResult = await this.executeQuery({
|
|
1450
|
+
sql: countSql,
|
|
1451
|
+
params: countParams,
|
|
1452
|
+
first: true
|
|
1453
|
+
});
|
|
1431
1454
|
const total = Number(countResult?.count || 0);
|
|
1432
1455
|
const currentOffset = page * perPage;
|
|
1433
1456
|
if (total === 0) {
|
|
@@ -1445,7 +1468,10 @@ var D1Store = class extends MastraStorage {
|
|
|
1445
1468
|
}
|
|
1446
1469
|
dataQueryBuilder.orderBy("createdAt", "DESC").limit(perPage).offset(currentOffset);
|
|
1447
1470
|
const { sql: dataSql, params: dataParams } = dataQueryBuilder.build();
|
|
1448
|
-
const rows = await this.executeQuery({
|
|
1471
|
+
const rows = await this.executeQuery({
|
|
1472
|
+
sql: dataSql,
|
|
1473
|
+
params: dataParams
|
|
1474
|
+
});
|
|
1449
1475
|
const evals = (isArrayOfRecords(rows) ? rows : []).map((row) => {
|
|
1450
1476
|
const result = this.deserializeValue(row.result);
|
|
1451
1477
|
const testInfo = row.test_info ? this.deserializeValue(row.test_info) : void 0;
|
|
@@ -1547,7 +1573,11 @@ var D1Store = class extends MastraStorage {
|
|
|
1547
1573
|
let total = 0;
|
|
1548
1574
|
if (limit !== void 0 && offset !== void 0) {
|
|
1549
1575
|
const { sql: countSql, params: countParams } = countBuilder.build();
|
|
1550
|
-
const countResult = await this.executeQuery({
|
|
1576
|
+
const countResult = await this.executeQuery({
|
|
1577
|
+
sql: countSql,
|
|
1578
|
+
params: countParams,
|
|
1579
|
+
first: true
|
|
1580
|
+
});
|
|
1551
1581
|
total = Number(countResult?.count ?? 0);
|
|
1552
1582
|
}
|
|
1553
1583
|
const results = await this.executeQuery({ sql, params });
|
|
@@ -1560,7 +1590,10 @@ var D1Store = class extends MastraStorage {
|
|
|
1560
1590
|
domain: ErrorDomain.STORAGE,
|
|
1561
1591
|
category: ErrorCategory.THIRD_PARTY,
|
|
1562
1592
|
text: `Failed to retrieve workflow runs: ${error instanceof Error ? error.message : String(error)}`,
|
|
1563
|
-
details: {
|
|
1593
|
+
details: {
|
|
1594
|
+
workflowName: workflowName ?? "",
|
|
1595
|
+
resourceId: resourceId ?? ""
|
|
1596
|
+
}
|
|
1564
1597
|
},
|
|
1565
1598
|
error
|
|
1566
1599
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/cloudflare-d1",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.1",
|
|
4
4
|
"description": "D1 provider for Mastra - includes db storage capabilities",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -25,18 +25,18 @@
|
|
|
25
25
|
"cloudflare": "^4.4.1"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@cloudflare/workers-types": "^4.
|
|
28
|
+
"@cloudflare/workers-types": "^4.20250705.0",
|
|
29
29
|
"@microsoft/api-extractor": "^7.52.8",
|
|
30
30
|
"@types/node": "^20.19.0",
|
|
31
|
-
"dotenv": "^
|
|
31
|
+
"dotenv": "^17.0.0",
|
|
32
32
|
"eslint": "^9.29.0",
|
|
33
|
-
"miniflare": "^4.20250617.
|
|
33
|
+
"miniflare": "^4.20250617.5",
|
|
34
34
|
"tsup": "^8.5.0",
|
|
35
35
|
"typescript": "^5.8.3",
|
|
36
|
-
"vitest": "^3.2.
|
|
37
|
-
"@internal/storage-test-utils": "0.0.
|
|
38
|
-
"@internal/lint": "0.0.
|
|
39
|
-
"@mastra/core": "0.10.
|
|
36
|
+
"vitest": "^3.2.4",
|
|
37
|
+
"@internal/storage-test-utils": "0.0.14",
|
|
38
|
+
"@internal/lint": "0.0.18",
|
|
39
|
+
"@mastra/core": "0.10.11"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@mastra/core": ">=0.10.7-0 <0.11.0-0"
|