@decocms/runtime 0.28.0-beta.2 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/bindings/deconfig/index.d.ts +5 -4
  2. package/dist/bindings/deconfig/index.js +4 -4
  3. package/dist/bindings/index.d.ts +24 -24
  4. package/dist/bindings/index.js +6 -6
  5. package/dist/bindings/index.js.map +1 -1
  6. package/dist/{chunk-NKUMVYKI.js → chunk-7ITSLORK.js} +3 -3
  7. package/dist/chunk-7ITSLORK.js.map +1 -0
  8. package/dist/{chunk-AOFOWQXY.js → chunk-L4OT2YDO.js} +3 -3
  9. package/dist/chunk-L4OT2YDO.js.map +1 -0
  10. package/dist/{chunk-GPIGZ6DL.js → chunk-SHQSNOFL.js} +5 -5
  11. package/dist/chunk-SHQSNOFL.js.map +1 -0
  12. package/dist/{chunk-LCU3FBI3.js → chunk-UIJGM3NV.js} +5 -5
  13. package/dist/chunk-UIJGM3NV.js.map +1 -0
  14. package/dist/drizzle.d.ts +3 -3
  15. package/dist/{index-n3Qln2L7.d.ts → index-B7U9jXW4.d.ts} +9 -9
  16. package/dist/{index-DjDlgN1G.d.ts → index-uCMd27hU.d.ts} +2 -2
  17. package/dist/index.d.ts +3 -3
  18. package/dist/index.js +5 -5
  19. package/dist/index.js.map +1 -1
  20. package/dist/mastra.d.ts +3 -3
  21. package/dist/mastra.js +3 -3
  22. package/dist/{mcp-DZsyjtAW.d.ts → mcp-DYmQ2RQf.d.ts} +5 -5
  23. package/dist/proxy.d.ts +2 -2
  24. package/dist/resources.d.ts +23 -23
  25. package/dist/resources.js +1 -1
  26. package/dist/views.d.ts +7 -7
  27. package/dist/views.js +1 -1
  28. package/package.json +3 -3
  29. package/src/bindings/README.md +1 -1
  30. package/src/bindings/binder.ts +1 -1
  31. package/src/bindings/channels.ts +1 -1
  32. package/src/bindings/deconfig/types.ts +1 -1
  33. package/src/bindings/language-model/ai-sdk.ts +1 -1
  34. package/src/bindings/resources/bindings.ts +1 -1
  35. package/src/bindings/resources/schemas.ts +1 -1
  36. package/src/bindings/views.ts +1 -1
  37. package/src/deprecated.ts +1 -1
  38. package/src/index.ts +1 -1
  39. package/src/mastra.ts +1 -1
  40. package/src/mcp.ts +1 -1
  41. package/src/resources.ts +1 -1
  42. package/src/state.ts +1 -1
  43. package/src/views.ts +1 -1
  44. package/dist/chunk-AOFOWQXY.js.map +0 -1
  45. package/dist/chunk-GPIGZ6DL.js.map +0 -1
  46. package/dist/chunk-LCU3FBI3.js.map +0 -1
  47. package/dist/chunk-NKUMVYKI.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
 
3
3
  declare const ResourcesReadInputSchema: z.ZodObject<{
4
4
  name: z.ZodString;
@@ -28,9 +28,9 @@ declare const ResourcesReadOutputSchema: z.ZodObject<{
28
28
  name: string;
29
29
  data: string;
30
30
  uri: string;
31
- description?: string | undefined;
32
31
  mimeType?: string | undefined;
33
32
  title?: string | undefined;
33
+ description?: string | undefined;
34
34
  annotations?: Record<string, string> | undefined;
35
35
  thumbnail?: string | undefined;
36
36
  timestamp?: string | undefined;
@@ -40,9 +40,9 @@ declare const ResourcesReadOutputSchema: z.ZodObject<{
40
40
  name: string;
41
41
  data: string;
42
42
  uri: string;
43
- description?: string | undefined;
44
43
  mimeType?: string | undefined;
45
44
  title?: string | undefined;
45
+ description?: string | undefined;
46
46
  annotations?: Record<string, string> | undefined;
47
47
  thumbnail?: string | undefined;
48
48
  timestamp?: string | undefined;
@@ -78,9 +78,9 @@ declare const ResourceSearchOutputSchema: z.ZodObject<{
78
78
  }, "strip", z.ZodTypeAny, {
79
79
  name: string;
80
80
  uri: string;
81
- description?: string | undefined;
82
81
  mimeType?: string | undefined;
83
82
  title?: string | undefined;
83
+ description?: string | undefined;
84
84
  annotations?: Record<string, string> | undefined;
85
85
  thumbnail?: string | undefined;
86
86
  timestamp?: string | undefined;
@@ -88,9 +88,9 @@ declare const ResourceSearchOutputSchema: z.ZodObject<{
88
88
  }, {
89
89
  name: string;
90
90
  uri: string;
91
- description?: string | undefined;
92
91
  mimeType?: string | undefined;
93
92
  title?: string | undefined;
93
+ description?: string | undefined;
94
94
  annotations?: Record<string, string> | undefined;
95
95
  thumbnail?: string | undefined;
96
96
  timestamp?: string | undefined;
@@ -102,9 +102,9 @@ declare const ResourceSearchOutputSchema: z.ZodObject<{
102
102
  items: {
103
103
  name: string;
104
104
  uri: string;
105
- description?: string | undefined;
106
105
  mimeType?: string | undefined;
107
106
  title?: string | undefined;
107
+ description?: string | undefined;
108
108
  annotations?: Record<string, string> | undefined;
109
109
  thumbnail?: string | undefined;
110
110
  timestamp?: string | undefined;
@@ -116,9 +116,9 @@ declare const ResourceSearchOutputSchema: z.ZodObject<{
116
116
  items: {
117
117
  name: string;
118
118
  uri: string;
119
- description?: string | undefined;
120
119
  mimeType?: string | undefined;
121
120
  title?: string | undefined;
121
+ description?: string | undefined;
122
122
  annotations?: Record<string, string> | undefined;
123
123
  thumbnail?: string | undefined;
124
124
  timestamp?: string | undefined;
@@ -148,26 +148,26 @@ declare const ResourceCreateInputSchema: z.ZodObject<{
148
148
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
149
149
  }, "strip", z.ZodTypeAny, {
150
150
  name: string;
151
- resourceName: string;
152
151
  content: {
153
152
  type: "text" | "blob";
154
153
  data: string;
155
154
  mimeType?: string | undefined;
156
155
  };
157
- description?: string | undefined;
156
+ resourceName: string;
158
157
  metadata?: Record<string, any> | undefined;
159
158
  title?: string | undefined;
159
+ description?: string | undefined;
160
160
  }, {
161
161
  name: string;
162
- resourceName: string;
163
162
  content: {
164
163
  type: "text" | "blob";
165
164
  data: string;
166
165
  mimeType?: string | undefined;
167
166
  };
168
- description?: string | undefined;
167
+ resourceName: string;
169
168
  metadata?: Record<string, any> | undefined;
170
169
  title?: string | undefined;
170
+ description?: string | undefined;
171
171
  }>;
172
172
  declare const ResourceCreateOutputSchema: z.ZodObject<{
173
173
  name: z.ZodString;
@@ -182,9 +182,9 @@ declare const ResourceCreateOutputSchema: z.ZodObject<{
182
182
  }, "strip", z.ZodTypeAny, {
183
183
  name: string;
184
184
  uri: string;
185
- description?: string | undefined;
186
185
  mimeType?: string | undefined;
187
186
  title?: string | undefined;
187
+ description?: string | undefined;
188
188
  annotations?: Record<string, string> | undefined;
189
189
  thumbnail?: string | undefined;
190
190
  timestamp?: string | undefined;
@@ -192,9 +192,9 @@ declare const ResourceCreateOutputSchema: z.ZodObject<{
192
192
  }, {
193
193
  name: string;
194
194
  uri: string;
195
- description?: string | undefined;
196
195
  mimeType?: string | undefined;
197
196
  title?: string | undefined;
197
+ description?: string | undefined;
198
198
  annotations?: Record<string, string> | undefined;
199
199
  thumbnail?: string | undefined;
200
200
  timestamp?: string | undefined;
@@ -223,8 +223,6 @@ declare const ResourceUpdateInputSchema: z.ZodObject<{
223
223
  }, "strip", z.ZodTypeAny, {
224
224
  name: string;
225
225
  uri: string;
226
- description?: string | undefined;
227
- resourceName?: string | undefined;
228
226
  metadata?: Record<string, any> | undefined;
229
227
  content?: {
230
228
  type: "text" | "blob";
@@ -232,11 +230,11 @@ declare const ResourceUpdateInputSchema: z.ZodObject<{
232
230
  mimeType?: string | undefined;
233
231
  } | undefined;
234
232
  title?: string | undefined;
233
+ description?: string | undefined;
234
+ resourceName?: string | undefined;
235
235
  }, {
236
236
  name: string;
237
237
  uri: string;
238
- description?: string | undefined;
239
- resourceName?: string | undefined;
240
238
  metadata?: Record<string, any> | undefined;
241
239
  content?: {
242
240
  type: "text" | "blob";
@@ -244,6 +242,8 @@ declare const ResourceUpdateInputSchema: z.ZodObject<{
244
242
  mimeType?: string | undefined;
245
243
  } | undefined;
246
244
  title?: string | undefined;
245
+ description?: string | undefined;
246
+ resourceName?: string | undefined;
247
247
  }>;
248
248
  declare const ResourceUpdateOutputSchema: z.ZodObject<{
249
249
  name: z.ZodString;
@@ -258,9 +258,9 @@ declare const ResourceUpdateOutputSchema: z.ZodObject<{
258
258
  }, "strip", z.ZodTypeAny, {
259
259
  name: string;
260
260
  uri: string;
261
- description?: string | undefined;
262
261
  mimeType?: string | undefined;
263
262
  title?: string | undefined;
263
+ description?: string | undefined;
264
264
  annotations?: Record<string, string> | undefined;
265
265
  thumbnail?: string | undefined;
266
266
  timestamp?: string | undefined;
@@ -268,9 +268,9 @@ declare const ResourceUpdateOutputSchema: z.ZodObject<{
268
268
  }, {
269
269
  name: string;
270
270
  uri: string;
271
- description?: string | undefined;
272
271
  mimeType?: string | undefined;
273
272
  title?: string | undefined;
273
+ description?: string | undefined;
274
274
  annotations?: Record<string, string> | undefined;
275
275
  thumbnail?: string | undefined;
276
276
  timestamp?: string | undefined;
@@ -308,16 +308,16 @@ declare const ResourcesListOutputSchema: z.ZodObject<{
308
308
  hasDelete: z.ZodOptional<z.ZodBoolean>;
309
309
  }, "strip", z.ZodTypeAny, {
310
310
  name: string;
311
- description: string;
312
311
  title: string;
312
+ description: string;
313
313
  icon: string;
314
314
  hasCreate?: boolean | undefined;
315
315
  hasUpdate?: boolean | undefined;
316
316
  hasDelete?: boolean | undefined;
317
317
  }, {
318
318
  name: string;
319
- description: string;
320
319
  title: string;
320
+ description: string;
321
321
  icon: string;
322
322
  hasCreate?: boolean | undefined;
323
323
  hasUpdate?: boolean | undefined;
@@ -326,8 +326,8 @@ declare const ResourcesListOutputSchema: z.ZodObject<{
326
326
  }, "strip", z.ZodTypeAny, {
327
327
  resources: {
328
328
  name: string;
329
- description: string;
330
329
  title: string;
330
+ description: string;
331
331
  icon: string;
332
332
  hasCreate?: boolean | undefined;
333
333
  hasUpdate?: boolean | undefined;
@@ -336,8 +336,8 @@ declare const ResourcesListOutputSchema: z.ZodObject<{
336
336
  }, {
337
337
  resources: {
338
338
  name: string;
339
- description: string;
340
339
  title: string;
340
+ description: string;
341
341
  icon: string;
342
342
  hasCreate?: boolean | undefined;
343
343
  hasUpdate?: boolean | undefined;
package/dist/resources.js CHANGED
@@ -1,4 +1,4 @@
1
- export { ResourceCreateInputSchema, ResourceCreateOutputSchema, ResourceDeleteInputSchema, ResourceDeleteOutputSchema, ResourceSearchInputSchema, ResourceSearchOutputSchema, ResourceUpdateInputSchema, ResourceUpdateOutputSchema, ResourcesListInputSchema, ResourcesListOutputSchema, ResourcesReadInputSchema, ResourcesReadOutputSchema, mimeType } from './chunk-NKUMVYKI.js';
1
+ export { ResourceCreateInputSchema, ResourceCreateOutputSchema, ResourceDeleteInputSchema, ResourceDeleteOutputSchema, ResourceSearchInputSchema, ResourceSearchOutputSchema, ResourceUpdateInputSchema, ResourceUpdateOutputSchema, ResourcesListInputSchema, ResourcesListOutputSchema, ResourcesReadInputSchema, ResourcesReadOutputSchema, mimeType } from './chunk-7ITSLORK.js';
2
2
  import './chunk-I7BWSAN6.js';
3
3
  //# sourceMappingURL=resources.js.map
4
4
  //# sourceMappingURL=resources.js.map
package/dist/views.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { z } from 'zod';
1
+ import { z } from 'zod/v3';
2
2
 
3
3
  declare const ViewsListOutputSchema: z.ZodObject<{
4
4
  views: z.ZodArray<z.ZodObject<{
@@ -18,8 +18,8 @@ declare const ViewsListOutputSchema: z.ZodObject<{
18
18
  title: string;
19
19
  icon: string;
20
20
  id?: string | undefined;
21
- name?: string | undefined;
22
21
  url?: string | undefined;
22
+ name?: string | undefined;
23
23
  description?: string | undefined;
24
24
  resourceName?: string | undefined;
25
25
  mimeTypePattern?: string | undefined;
@@ -29,11 +29,11 @@ declare const ViewsListOutputSchema: z.ZodObject<{
29
29
  title: string;
30
30
  icon: string;
31
31
  id?: string | undefined;
32
- name?: string | undefined;
33
32
  url?: string | undefined;
33
+ name?: string | undefined;
34
+ tools?: string[] | undefined;
34
35
  description?: string | undefined;
35
36
  resourceName?: string | undefined;
36
- tools?: string[] | undefined;
37
37
  mimeTypePattern?: string | undefined;
38
38
  prompt?: string | undefined;
39
39
  installBehavior?: "open" | "none" | "autoPin" | undefined;
@@ -44,8 +44,8 @@ declare const ViewsListOutputSchema: z.ZodObject<{
44
44
  title: string;
45
45
  icon: string;
46
46
  id?: string | undefined;
47
- name?: string | undefined;
48
47
  url?: string | undefined;
48
+ name?: string | undefined;
49
49
  description?: string | undefined;
50
50
  resourceName?: string | undefined;
51
51
  mimeTypePattern?: string | undefined;
@@ -57,11 +57,11 @@ declare const ViewsListOutputSchema: z.ZodObject<{
57
57
  title: string;
58
58
  icon: string;
59
59
  id?: string | undefined;
60
- name?: string | undefined;
61
60
  url?: string | undefined;
61
+ name?: string | undefined;
62
+ tools?: string[] | undefined;
62
63
  description?: string | undefined;
63
64
  resourceName?: string | undefined;
64
- tools?: string[] | undefined;
65
65
  mimeTypePattern?: string | undefined;
66
66
  prompt?: string | undefined;
67
67
  installBehavior?: "open" | "none" | "autoPin" | undefined;
package/dist/views.js CHANGED
@@ -1,4 +1,4 @@
1
- export { ViewsListOutputSchema } from './chunk-AOFOWQXY.js';
1
+ export { ViewsListOutputSchema } from './chunk-L4OT2YDO.js';
2
2
  import './chunk-I7BWSAN6.js';
3
3
  //# sourceMappingURL=views.js.map
4
4
  //# sourceMappingURL=views.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decocms/runtime",
3
- "version": "0.28.0-beta.2",
3
+ "version": "0.28.0",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "build": "tsup",
@@ -9,7 +9,7 @@
9
9
  "dependencies": {
10
10
  "@cloudflare/workers-types": "^4.20250617.0",
11
11
  "@deco/mcp": "npm:@jsr/deco__mcp@0.5.5",
12
- "@decocms/bindings": "^0.2.0",
12
+ "@decocms/bindings": "*",
13
13
  "@mastra/cloudflare-d1": "^0.13.4",
14
14
  "@mastra/core": "^0.20.2",
15
15
  "@modelcontextprotocol/sdk": "^1.19.1",
@@ -20,7 +20,7 @@
20
20
  "mime-db": "1.52.0",
21
21
  "zod": "^3.25.76",
22
22
  "zod-from-json-schema": "^0.0.5",
23
- "zod-to-json-schema": "^3.24.4"
23
+ "zod-to-json-schema": "3.25.0"
24
24
  },
25
25
  "main": "./dist/index.js",
26
26
  "types": "./dist/index.d.ts",
@@ -78,7 +78,7 @@ To create a new binding:
78
78
  input/output:
79
79
 
80
80
  ```ts
81
- import { z } from "zod";
81
+ import { z } from "zod/v3";
82
82
  import type { Binder } from "../index.ts";
83
83
 
84
84
  const myInputSchema = z.object({ ... });
@@ -1,5 +1,5 @@
1
1
  /* oxlint-disable no-explicit-any */
2
- import { z } from "zod";
2
+ import { z } from "zod/v3";
3
3
  import type { MCPConnection } from "../connection.ts";
4
4
  import { createPrivateTool, createStreamableTool } from "../mastra.ts";
5
5
  import {
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "zod/v3";
2
2
  import type { ToolBinder } from "../mcp.ts";
3
3
 
4
4
  const callbacksSchema = z.object({
@@ -1,5 +1,5 @@
1
1
  // Types for DeconfigResource
2
- import { z } from "zod";
2
+ import { z } from "zod/v3";
3
3
  import type { DefaultEnv } from "../../index.ts";
4
4
  import type { MCPClientFetchStub, ToolBinder } from "../../mcp.ts";
5
5
  import type { BaseResourceDataSchema } from "../resources/bindings.ts";
@@ -45,7 +45,7 @@ export const createProvider = (binding: LLMBindingClient): Provider => {
45
45
  const supportedUrls = lazy(() =>
46
46
  binding
47
47
  .LLM_METADATA({ modelId })
48
- .then((metadata) => toRegExp(metadata.supportedUrls))
48
+ .then((metadata) => toRegExp(metadata.supportedUrls)),
49
49
  );
50
50
 
51
51
  return {
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "zod/v3";
2
2
  import type { ToolBinder } from "../../mcp.ts";
3
3
  import {
4
4
  createCreateInputSchema,
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "zod/v3";
2
2
 
3
3
  /**
4
4
  * Resources 2.0 Schemas
@@ -1,5 +1,5 @@
1
1
  import { ViewsListOutputSchema } from "../views.ts";
2
- import { z } from "zod";
2
+ import { z } from "zod/v3";
3
3
  import type { ToolBinder } from "../mcp.ts";
4
4
 
5
5
  export const VIEW_BINDING = [
package/src/deprecated.ts CHANGED
@@ -2,7 +2,7 @@ import type { RequestContext } from "./index.ts";
2
2
  import type { DurableObjectNamespace } from "@cloudflare/workers-types";
3
3
  import type { WorkspaceDB } from "./index.ts";
4
4
  import type { WorkflowDO } from "./workflow.ts";
5
- import type { z } from "zod";
5
+ import type { z } from "zod/v3";
6
6
 
7
7
  // oxlint-disable-next-line no-explicit-any
8
8
  export interface DeprecatedEnv<TSchema extends z.ZodTypeAny = any> {
package/src/index.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /* oxlint-disable no-explicit-any */
2
2
  import type { ExecutionContext } from "@cloudflare/workers-types";
3
3
  import { decodeJwt } from "jose";
4
- import type { z } from "zod";
4
+ import type { z } from "zod/v3";
5
5
  import {
6
6
  getReqToken,
7
7
  handleAuthCallback,
package/src/mastra.ts CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  type Step as MastraStep,
18
18
  } from "@mastra/core/workflows";
19
19
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
20
- import { z } from "zod";
20
+ import { z } from "zod/v3";
21
21
  import { zodToJsonSchema } from "zod-to-json-schema";
22
22
  import type { DefaultEnv } from "./index.ts";
23
23
  import {
package/src/mcp.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /* oxlint-disable no-explicit-any */
2
2
  import { env } from "cloudflare:workers";
3
- import { z } from "zod";
3
+ import { z } from "zod/v3";
4
4
  import type { MCPConnection } from "./connection.ts";
5
5
  import type { DefaultEnv } from "./index.ts";
6
6
  import { createMCPClientProxy } from "./proxy.ts";
package/src/resources.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "zod/v3";
2
2
  import mimeDb from "mime-db";
3
3
 
4
4
  type MimeDb = Record<string, { extensions?: string[] }>;
package/src/state.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
- import { z } from "zod";
2
+ import { z } from "zod/v3";
3
3
  import type { AppContext } from "./mastra.ts";
4
4
  import { createTool } from "./mastra.ts";
5
5
 
package/src/views.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { z } from "zod";
1
+ import { z } from "zod/v3";
2
2
 
3
3
  const installBehavior = z.enum(["none", "open", "autoPin"]);
4
4
 
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/views.ts"],"names":[],"mappings":";;;AAEA,IAAM,kBAAkB,CAAA,CAAE,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAC,CAAA;AAGnD,IAAM,qBAAA,GAAwB,EAAE,MAAA,CAAO;AAAA,EAC5C,OAAO,CAAA,CAAE,KAAA;AAAA,IACP,EAAE,MAAA,CAAO;AAAA,MACP,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MACxB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAC1B,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,MAChB,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MACjC,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,MACf,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,MAEzB,eAAA,EAAiB,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MACrC,YAAA,EAAc,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,MAElC,KAAA,EAAO,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,MAChD,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,MAC5B,eAAA,EAAiB,gBAAgB,QAAA;AAAS,KAC3C;AAAA;AAEL,CAAC","file":"chunk-AOFOWQXY.js","sourcesContent":["import { z } from \"zod\";\n\nconst installBehavior = z.enum([\"none\", \"open\", \"autoPin\"]);\n\n// New, richer schema with backward-compat fields kept optional\nexport const ViewsListOutputSchema = z.object({\n views: z.array(\n z.object({\n id: z.string().optional(),\n name: z.string().optional(),\n title: z.string(),\n description: z.string().optional(),\n icon: z.string(),\n url: z.string().optional(),\n // New acceptance rules\n mimeTypePattern: z.string().optional(),\n resourceName: z.string().optional(),\n // Legacy/compat fields\n tools: z.array(z.string()).optional().default([]),\n prompt: z.string().optional(),\n installBehavior: installBehavior.optional(),\n }),\n ),\n});\n\nexport type ViewsListOutput = z.infer<typeof ViewsListOutputSchema>;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mcp.ts","../src/bindings/channels.ts","../src/bindings/views.ts","../src/bindings/binder.ts","../src/bindings/resources/schemas.ts","../src/bindings/resources/bindings.ts","../src/bindings/deconfig/resources.ts"],"names":["z","impl","env"],"mappings":"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","file":"chunk-GPIGZ6DL.js","sourcesContent":["/* oxlint-disable no-explicit-any */\nimport { env } from \"cloudflare:workers\";\nimport { z } from \"zod\";\nimport type { MCPConnection } from \"./connection.ts\";\nimport type { DefaultEnv } from \"./index.ts\";\nimport { createMCPClientProxy } from \"./proxy.ts\";\nimport type { ToolBinder } from \"@decocms/bindings\";\n\nexport interface FetchOptions extends RequestInit {\n path?: string;\n segments?: string[];\n}\n\nconst Timings = z.object({\n sql_duration_ms: z.number().optional(),\n});\n\nconst Meta = z.object({\n changed_db: z.boolean().optional(),\n changes: z.number().optional(),\n duration: z.number().optional(),\n last_row_id: z.number().optional(),\n rows_read: z.number().optional(),\n rows_written: z.number().optional(),\n served_by_primary: z.boolean().optional(),\n served_by_region: z\n .enum([\"WNAM\", \"ENAM\", \"WEUR\", \"EEUR\", \"APAC\", \"OC\"])\n .optional(),\n size_after: z.number().optional(),\n timings: Timings.optional(),\n});\n\nconst QueryResult = z.object({\n meta: Meta.optional(),\n results: z.array(z.unknown()).optional(),\n success: z.boolean().optional(),\n});\n\nexport type QueryResult = z.infer<typeof QueryResult>;\n\nconst workspaceTools = [\n {\n name: \"INTEGRATIONS_GET\" as const,\n inputSchema: z.object({\n id: z.string(),\n }),\n outputSchema: z.object({\n connection: z.object({}),\n }),\n },\n {\n name: \"DATABASES_RUN_SQL\" as const,\n inputSchema: z.object({\n sql: z.string().describe(\"The SQL query to run\"),\n params: z\n .array(z.string())\n .describe(\"The parameters to pass to the SQL query\"),\n }),\n outputSchema: z.object({\n result: z.array(QueryResult),\n }),\n },\n] satisfies ToolBinder<string, unknown, object>[];\n\n// Default fetcher instance with API_SERVER_URL and API_HEADERS\nconst global = createMCPFetchStub<[]>({});\nexport const MCPClient = new Proxy(\n {} as typeof global & {\n forWorkspace: (\n workspace: string,\n token?: string,\n ) => MCPClientFetchStub<typeof workspaceTools>;\n forConnection: <TDefinition extends readonly ToolBinder[]>(\n connection: MCPConnectionProvider,\n ) => MCPClientFetchStub<TDefinition>;\n },\n {\n get(_, name) {\n if (name === \"toJSON\") {\n return null;\n }\n\n if (name === \"forWorkspace\") {\n return (workspace: string, token?: string) =>\n createMCPFetchStub<[]>({\n workspace,\n token,\n decoCmsApiUrl: (env as DefaultEnv).DECO_API_URL,\n });\n }\n if (name === \"forConnection\") {\n return <TDefinition extends readonly ToolBinder[]>(\n connection: MCPConnectionProvider,\n ) =>\n createMCPFetchStub<TDefinition>({\n connection,\n decoCmsApiUrl: (env as DefaultEnv).DECO_API_URL,\n });\n }\n return global[name as keyof typeof global];\n },\n },\n);\n\nexport type { ToolBinder };\n\nexport const isStreamableToolBinder = (\n toolBinder: ToolBinder,\n): toolBinder is ToolBinder<string, any, any, true> => {\n return toolBinder.streamable === true;\n};\nexport type MCPClientStub<TDefinition extends readonly ToolBinder[]> = {\n [K in TDefinition[number] as K[\"name\"]]: K extends ToolBinder<\n string,\n infer TInput,\n infer TReturn\n >\n ? (params: TInput, init?: RequestInit) => Promise<TReturn>\n : never;\n};\n\nexport type MCPClientFetchStub<TDefinition extends readonly ToolBinder[]> = {\n [K in TDefinition[number] as K[\"name\"]]: K[\"streamable\"] extends true\n ? K extends ToolBinder<string, infer TInput, any, true>\n ? (params: TInput, init?: RequestInit) => Promise<Response>\n : never\n : K extends ToolBinder<string, infer TInput, infer TReturn, any>\n ? (params: TInput, init?: RequestInit) => Promise<Awaited<TReturn>>\n : never;\n};\n\nexport type MCPConnectionProvider = MCPConnection;\n\nexport interface MCPClientRaw {\n callTool: (tool: string, args: unknown) => Promise<unknown>;\n listTools: () => Promise<\n {\n name: string;\n inputSchema: any;\n outputSchema?: any;\n description: string;\n }[]\n >;\n}\nexport type JSONSchemaToZodConverter = (jsonSchema: any) => z.ZodTypeAny;\nexport interface CreateStubAPIOptions {\n mcpPath?: string;\n decoCmsApiUrl?: string;\n workspace?: string;\n token?: string;\n connection?: MCPConnectionProvider;\n streamable?: Record<string, boolean>;\n debugId?: () => string;\n getErrorByStatusCode?: (\n statusCode: number,\n message?: string,\n traceId?: string,\n errorObject?: unknown,\n ) => Error;\n supportsToolName?: boolean;\n}\n\nexport function createMCPFetchStub<TDefinition extends readonly ToolBinder[]>(\n options?: CreateStubAPIOptions,\n): MCPClientFetchStub<TDefinition> {\n return createMCPClientProxy<MCPClientFetchStub<TDefinition>>({\n ...(options ?? {}),\n });\n}\n","import { z } from \"zod\";\nimport type { ToolBinder } from \"../mcp.ts\";\n\nconst callbacksSchema = z.object({\n stream: z.string(),\n generate: z.string(),\n generateObject: z.string(),\n});\n\nconst channelIdSchema = z.object({\n workspace: z.string(),\n discriminator: z.string(),\n});\n\nconst channelBindingSchema = channelIdSchema.extend({\n agentId: z.string(),\n agentName: z.string(),\n agentLink: z.string(),\n});\n\nconst joinChannelSchema = channelBindingSchema.extend({\n callbacks: callbacksSchema,\n});\n\nconst listChannelsSchema = z.object({\n channels: z.array(\n z.object({\n label: z.string(),\n value: z.string(),\n }),\n ),\n});\n\nexport type Callbacks = z.infer<typeof callbacksSchema>;\nexport type JoinedChannelPayload = z.infer<typeof joinChannelSchema>;\nexport type ListChannelsSchema = z.infer<typeof listChannelsSchema>;\nexport const CHANNEL_BINDING = [\n {\n name: \"DECO_CHAT_CHANNELS_JOIN\" as const,\n inputSchema: joinChannelSchema,\n outputSchema: z.any(),\n },\n {\n name: \"DECO_CHAT_CHANNELS_LEAVE\" as const,\n inputSchema: channelIdSchema,\n outputSchema: z.any(),\n },\n {\n name: \"DECO_CHAT_CHANNELS_LIST\" as const,\n inputSchema: z.any(),\n outputSchema: listChannelsSchema,\n opt: true,\n },\n] as const satisfies readonly ToolBinder[];\n","import { ViewsListOutputSchema } from \"../views.ts\";\nimport { z } from \"zod\";\nimport type { ToolBinder } from \"../mcp.ts\";\n\nexport const VIEW_BINDING = [\n {\n name: \"DECO_CHAT_VIEWS_LIST\" as const,\n inputSchema: z.any(),\n outputSchema: ViewsListOutputSchema,\n },\n] as const satisfies readonly ToolBinder[];\n\n// Re-export for existing imports expecting listViewsSchema\nexport const listViewsSchema = ViewsListOutputSchema;\n","/* oxlint-disable no-explicit-any */\nimport { z } from \"zod\";\nimport type { MCPConnection } from \"../connection.ts\";\nimport { createPrivateTool, createStreamableTool } from \"../mastra.ts\";\nimport {\n createMCPFetchStub,\n type MCPClientFetchStub,\n type ToolBinder,\n} from \"../mcp.ts\";\nimport { CHANNEL_BINDING } from \"./channels.ts\";\nimport { VIEW_BINDING } from \"./views.ts\";\n\n// ToolLike is a simplified version of the Tool interface that matches what we need for bindings\nexport interface ToolLike<\n TName extends string = string,\n TInput = any,\n TReturn extends object | null | boolean = object,\n> {\n name: TName;\n description: string;\n inputSchema: z.ZodType<TInput>;\n outputSchema?: z.ZodType<TReturn>;\n handler: (props: TInput) => Promise<TReturn> | TReturn;\n}\n\nexport type Binder<\n TDefinition extends readonly ToolBinder[] = readonly ToolBinder[],\n> = TDefinition;\n\nexport type BinderImplementation<\n TBinder extends Binder<any>,\n TContext = any,\n> = TBinder extends Binder<infer TDefinition>\n ? {\n [K in keyof TDefinition]: Omit<\n ToolLike<\n TDefinition[K][\"name\"],\n z.infer<TDefinition[K][\"inputSchema\"]>,\n TDefinition[K] extends { outputSchema: infer Schema }\n ? Schema extends z.ZodType\n ? z.infer<Schema>\n : never\n : never\n >,\n \"name\" | \"inputSchema\" | \"outputSchema\" | \"handler\"\n > & {\n handler: (\n props: z.infer<TDefinition[K][\"inputSchema\"]>,\n c?: TContext,\n ) => ReturnType<\n ToolLike<\n TDefinition[K][\"name\"],\n z.infer<TDefinition[K][\"inputSchema\"]>,\n TDefinition[K] extends { outputSchema: infer Schema }\n ? Schema extends z.ZodType\n ? z.infer<Schema>\n : never\n : never\n >[\"handler\"]\n >;\n };\n }\n : never;\n\nexport const bindingClient = <TDefinition extends readonly ToolBinder[]>(\n binder: TDefinition,\n) => {\n return {\n implements: (tools: ToolBinder[]) => {\n return binder.every(\n (tool) =>\n tool.opt === true || (tools ?? []).some((t) => t.name === tool.name),\n );\n },\n forConnection: (\n mcpConnection: MCPConnection,\n ): MCPClientFetchStub<TDefinition> => {\n return createMCPFetchStub<TDefinition>({\n connection: mcpConnection,\n streamable: binder.reduce(\n (acc, tool) => {\n acc[tool.name] = tool.streamable === true;\n return acc;\n },\n {} as Record<string, boolean>,\n ),\n });\n },\n };\n};\n\nexport type MCPBindingClient<T extends ReturnType<typeof bindingClient>> =\n ReturnType<T[\"forConnection\"]>;\n\nexport const ChannelBinding = bindingClient(CHANNEL_BINDING);\nexport const ViewBinding = bindingClient(VIEW_BINDING);\n\nexport type { Callbacks } from \"./channels.ts\";\n\nexport const impl = <TBinder extends Binder>(\n schema: TBinder,\n implementation: BinderImplementation<TBinder>,\n createToolFn = createPrivateTool,\n createStreamableToolFn = createStreamableTool,\n) => {\n const impl: (\n | ReturnType<typeof createToolFn>\n | ReturnType<typeof createStreamableToolFn>\n )[] = [];\n for (const key in schema) {\n const toolSchema = schema[key];\n const toolImplementation = implementation[key];\n\n if (toolSchema.opt && !toolImplementation) {\n continue;\n }\n\n if (!toolImplementation) {\n throw new Error(`Implementation for ${key} is required`);\n }\n\n const { name, handler, streamable, ...toolLike } = {\n ...toolSchema,\n ...toolImplementation,\n };\n if (streamable) {\n impl.push(\n createStreamableToolFn({\n ...toolLike,\n streamable,\n id: name,\n execute: ({ context }) => Promise.resolve(handler(context)),\n }),\n );\n } else {\n impl.push(\n createToolFn({\n ...toolLike,\n id: name,\n execute: ({ context }) => Promise.resolve(handler(context)),\n }),\n );\n }\n }\n return impl;\n};\n","import { z } from \"zod\";\n\n/**\n * Resources 2.0 Schemas\n *\n * This module provides standardized schemas for Resources 2.0, a major version upgrade\n * that introduces standardized resource management with `rsc://` URI format and\n * consistent CRUD operations across all resource types.\n *\n * Key Features:\n * - Standardized `rsc://` URI format for all resources\n * - Generic CRUD operation schemas that work with any resource type\n * - Type-safe factory functions for creating resource-specific schemas\n * - Comprehensive validation and error handling\n * - Full TypeScript support with Zod validation\n */\n\n// Common URI format validation for Resources 2.0\nexport const ResourceUriSchema = z\n .string()\n .regex(\n /^rsc:\\/\\/[^/]+\\/[^/]+\\/.+$/,\n \"Invalid resource URI format. Expected format: rsc://workspace/project/resource-id\",\n );\n\nexport const DescribeInputSchema = z.object({});\nexport const DescribeOutputSchema = z.object({\n uriTemplate: ResourceUriSchema.describe(\"URI template for the resource\"),\n features: z.object({\n watch: z.object({\n pathname: z.string().describe(\"Pathname to watch\"),\n }),\n }),\n});\n\n/**\n * Search input schema for resource queries\n * Supports pagination, filtering, sorting, and search terms\n */\nexport const SearchInputSchema = z.object({\n term: z.string().optional().describe(\"Search term to filter resources\"),\n page: z.number().int().min(1).default(1).describe(\"Page number (1-based)\"),\n pageSize: z\n .number()\n .int()\n .min(1)\n .max(100)\n .default(20)\n .describe(\"Number of items per page\"),\n filters: z.record(z.any()).optional().describe(\"Additional filters to apply\"),\n sortBy: z.string().optional().describe(\"Field to sort by\"),\n sortOrder: z\n .enum([\"asc\", \"desc\"])\n .optional()\n .default(\"asc\")\n .describe(\"Sort order\"),\n});\n\n/**\n * Factory function to create search output schema for a specific resource type\n * @param itemSchema - The schema for individual resource items\n * @returns Zod schema for search results with pagination metadata\n */\nexport function createSearchOutputSchema<T extends z.ZodTypeAny>(\n itemSchema: T,\n) {\n return z.object({\n items: z.array(itemSchema).describe(\"Array of matching resources\"),\n totalCount: z\n .number()\n .int()\n .min(0)\n .describe(\"Total number of matching resources\"),\n page: z.number().int().min(1).describe(\"Current page number\"),\n pageSize: z.number().int().min(1).describe(\"Number of items per page\"),\n totalPages: z.number().int().min(0).describe(\"Total number of pages\"),\n hasNextPage: z.boolean().describe(\"Whether there are more pages available\"),\n hasPreviousPage: z\n .boolean()\n .describe(\"Whether there are previous pages available\"),\n });\n}\n\n/**\n * Read input schema for retrieving a single resource\n */\nexport const ReadInputSchema = z.object({\n uri: ResourceUriSchema.describe(\"URI of the resource to read\"),\n});\n\n/**\n * Factory function to create read output schema for a specific resource type\n * @param dataSchema - The schema for the resource data\n * @returns Zod schema for read operation results\n */\nexport function createReadOutputSchema<T extends z.ZodTypeAny>(dataSchema: T) {\n return z.object({\n uri: ResourceUriSchema.describe(\"URI of the resource\"),\n data: dataSchema.describe(\"Resource data\"),\n created_at: z.string().datetime().optional().describe(\"Creation timestamp\"),\n updated_at: z\n .string()\n .datetime()\n .optional()\n .describe(\"Last update timestamp\"),\n created_by: z.string().optional().describe(\"User who created the resource\"),\n updated_by: z\n .string()\n .optional()\n .describe(\"User who last updated the resource\"),\n });\n}\n\n/**\n * Factory function to create create input schema for a specific resource type\n * @param dataSchema - The schema for the resource data to create\n * @returns Zod schema for create operation input\n */\nexport function createCreateInputSchema<T extends z.ZodTypeAny>(dataSchema: T) {\n return z.object({\n data: dataSchema.describe(\"Resource data to create\"),\n });\n}\n\n/**\n * Factory function to create create output schema for a specific resource type\n * @param dataSchema - The schema for the created resource data\n * @returns Zod schema for create operation results\n */\nexport function createCreateOutputSchema<T extends z.ZodTypeAny>(\n dataSchema: T,\n) {\n return z.object({\n uri: ResourceUriSchema.describe(\"URI of the created resource\"),\n data: dataSchema.describe(\"Created resource data\"),\n created_at: z.string().datetime().optional().describe(\"Creation timestamp\"),\n updated_at: z\n .string()\n .datetime()\n .optional()\n .describe(\"Last update timestamp\"),\n created_by: z.string().optional().describe(\"User who created the resource\"),\n });\n}\n\n/**\n * Factory function to create update input schema for a specific resource type\n * @param dataSchema - The schema for the resource data to update\n * @returns Zod schema for update operation input\n */\nexport function createUpdateInputSchema<T extends z.ZodTypeAny>(dataSchema: T) {\n return z.object({\n uri: ResourceUriSchema.describe(\"URI of the resource to update\"),\n data: dataSchema.describe(\"Updated resource data\"),\n });\n}\n\n/**\n * Factory function to create update output schema for a specific resource type\n * @param dataSchema - The schema for the updated resource data\n * @returns Zod schema for update operation results\n */\nexport function createUpdateOutputSchema<T extends z.ZodTypeAny>(\n dataSchema: T,\n) {\n return z.object({\n uri: ResourceUriSchema.describe(\"URI of the updated resource\"),\n data: dataSchema.describe(\"Updated resource data\"),\n created_at: z\n .string()\n .datetime()\n .optional()\n .describe(\"Original creation timestamp\"),\n updated_at: z\n .string()\n .datetime()\n .optional()\n .describe(\"Last update timestamp\"),\n created_by: z\n .string()\n .optional()\n .describe(\"User who originally created the resource\"),\n updated_by: z\n .string()\n .optional()\n .describe(\"User who last updated the resource\"),\n });\n}\n\n/**\n * Delete input schema for removing a resource\n */\nexport const DeleteInputSchema = z.object({\n uri: ResourceUriSchema.describe(\"URI of the resource to delete\"),\n});\n\n/**\n * Delete output schema for delete operation results\n */\nexport const DeleteOutputSchema = z.object({\n success: z.boolean().describe(\"Whether the deletion was successful\"),\n uri: ResourceUriSchema.describe(\"URI of the deleted resource\"),\n});\n\n/**\n * Factory function to create item schema for a specific resource type\n * This schema is used in search results and lists\n * @param dataSchema - The schema for the resource data\n * @returns Zod schema for resource items with metadata\n */\nexport function createItemSchema<T extends z.ZodTypeAny>(dataSchema: T) {\n return z.object({\n uri: ResourceUriSchema.describe(\"URI of the resource\"),\n data: z\n .object({\n name: z.string().min(1, \"Name is required\"),\n description: z\n .string()\n .optional()\n .describe(\"Description of the resource\"),\n icon: z.string().url().optional().describe(\"URL to the resource icon\"),\n })\n .and(dataSchema)\n .describe(\"Resource data with required name\"),\n created_at: z.string().datetime().optional().describe(\"Creation timestamp\"),\n updated_at: z\n .string()\n .datetime()\n .optional()\n .describe(\"Last update timestamp\"),\n created_by: z.string().optional().describe(\"User who created the resource\"),\n updated_by: z\n .string()\n .optional()\n .describe(\"User who last updated the resource\"),\n });\n}\n\n// Export types for TypeScript usage\nexport type ResourceUri = z.infer<typeof ResourceUriSchema>;\nexport type SearchInput = z.infer<typeof SearchInputSchema>;\nexport type SearchOutput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createSearchOutputSchema<T>>\n>;\nexport type ReadInput = z.infer<typeof ReadInputSchema>;\nexport type ReadOutput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createReadOutputSchema<T>>\n>;\nexport type CreateInput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createCreateInputSchema<T>>\n>;\nexport type CreateOutput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createCreateOutputSchema<T>>\n>;\nexport type UpdateInput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createUpdateInputSchema<T>>\n>;\nexport type UpdateOutput<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createUpdateOutputSchema<T>>\n>;\nexport type DeleteInput = z.infer<typeof DeleteInputSchema>;\nexport type DeleteOutput = z.infer<typeof DeleteOutputSchema>;\nexport type ResourceItem<T extends z.ZodTypeAny> = z.infer<\n ReturnType<typeof createItemSchema<T>>\n>;\n","import { z } from \"zod\";\nimport type { ToolBinder } from \"../../mcp.ts\";\nimport {\n createCreateInputSchema,\n createCreateOutputSchema,\n createItemSchema,\n createReadOutputSchema,\n createSearchOutputSchema,\n createUpdateInputSchema,\n createUpdateOutputSchema,\n DeleteInputSchema,\n DeleteOutputSchema,\n DescribeInputSchema,\n DescribeOutputSchema,\n ReadInputSchema,\n SearchInputSchema,\n} from \"./schemas.ts\";\nexport type BaseResourceDataSchema = z.ZodObject<{\n name: z.ZodString;\n description: z.ZodString;\n}>;\n\n/**\n * Resources 2.0 Bindings\n *\n * This module provides standardized tool bindings for Resources 2.0, a major version upgrade\n * that introduces standardized resource management with `rsc://` URI format and\n * consistent CRUD operations across all resource types.\n *\n * Key Features:\n * - Generic resource bindings that work with any resource type\n * - Standardized tool naming: `deco_resource_*`\n * - Full TypeScript support with proper type constraints\n * - Integration with existing binding system\n */\n\n/**\n * Creates generic resource bindings for Resources 2.0\n *\n * This function generates standardized tool bindings that work with any resource type\n * by accepting a custom data schema and resource name. The bindings provide the standard CRUD operations:\n * - DECO_RESOURCE_{RESOURCE}_SEARCH - Search resources with pagination and filtering\n * - DECO_RESOURCE_{RESOURCE}_READ - Read a single resource by URI\n * - DECO_RESOURCE_{RESOURCE}_CREATE - Create new resources (optional)\n * - DECO_RESOURCE_{RESOURCE}_UPDATE - Update existing resources (optional)\n * - DECO_RESOURCE_{RESOURCE}_DELETE - Delete resources (optional)\n *\n * @param resourceName - The name of the resource type (e.g., \"workflow\", \"document\", \"user\")\n * @param dataSchema - The Zod schema for the resource data type\n * @returns Array of tool bindings for Resources 2.0 CRUD operations\n */\nexport function createResourceBindings<\n TDataSchema extends BaseResourceDataSchema,\n>(resourceName: string, dataSchema: TDataSchema) {\n const readOutputSchema = createReadOutputSchema(dataSchema);\n return [\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_SEARCH` as const,\n inputSchema: SearchInputSchema,\n outputSchema: createSearchOutputSchema(\n createItemSchema(dataSchema.pick({ name: true, description: true })),\n ),\n },\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_READ` as const,\n inputSchema: ReadInputSchema,\n outputSchema: readOutputSchema,\n },\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_CREATE` as const,\n inputSchema: createCreateInputSchema(dataSchema),\n outputSchema: createCreateOutputSchema(dataSchema),\n opt: true,\n },\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_UPDATE` as const,\n inputSchema: createUpdateInputSchema(dataSchema),\n outputSchema: createUpdateOutputSchema(dataSchema),\n opt: true,\n },\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_DELETE` as const,\n inputSchema: DeleteInputSchema,\n outputSchema: DeleteOutputSchema,\n opt: true,\n },\n {\n name: `DECO_RESOURCE_${resourceName.toUpperCase()}_DESCRIBE` as const,\n inputSchema: DescribeInputSchema,\n outputSchema: DescribeOutputSchema,\n opt: true,\n },\n ] as const satisfies readonly ToolBinder[];\n}\n\n// Export types for TypeScript usage\nexport type ResourceBinding<TDataSchema extends BaseResourceDataSchema> =\n ReturnType<typeof createResourceBindings<TDataSchema>>;\nexport type ResourceBindingsFunction = typeof createResourceBindings;\n","/**\n * DeconfigResources 2.0\n *\n * This module provides file-based resource management using the Resources 2.0 system\n * with standardized `rsc://` URI format and consistent CRUD operations.\n *\n * Key Features:\n * - File-based resource storage in DECONFIG directories\n * - Resources 2.0 standardized schemas and URI format\n * - Type-safe resource definitions with Zod validation\n * - Full CRUD operations with proper error handling\n * - Integration with existing deconfig file system\n * - Support for custom resource schemas and enhancements\n */\n\nimport { DefaultEnv } from \"../../index.ts\";\nimport { impl } from \"../binder.ts\";\nimport type { BaseResourceDataSchema } from \"../resources/bindings.ts\";\nimport { createResourceBindings } from \"../resources/bindings.ts\";\nimport { ResourceUriSchema } from \"../resources/schemas.ts\";\nimport {\n ResourcePath,\n ResourceUri,\n getMetadataString,\n normalizeDirectory,\n toAsyncIterator,\n} from \"./helpers.ts\";\nimport type { DeconfigClient, DeconfigResourceOptions } from \"./types.ts\";\nimport { WELL_KNOWN_ORIGINS } from \"../../well-known.ts\";\n\nexport type {\n EnhancedResourcesTools,\n ResourcesBinding,\n ResourcesTools,\n} from \"./types.ts\";\nexport type { DeconfigClient, DeconfigResourceOptions };\n\n// Error classes - these will be imported from SDK when used there\nexport class NotFoundError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"NotFoundError\";\n }\n}\n\nexport class UserInputError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UserInputError\";\n }\n}\n\nconst dirOf = (\n options: Pick<\n DeconfigResourceOptions<BaseResourceDataSchema>,\n \"directory\" | \"resourceName\"\n >,\n) => {\n return options.directory\n ? options.directory\n : `/resources/${options.resourceName}`;\n};\nexport const createDeconfigResource = <\n TDataSchema extends BaseResourceDataSchema,\n>(\n options: DeconfigResourceOptions<TDataSchema>,\n) => {\n const {\n resourceName,\n dataSchema,\n enhancements,\n env,\n validate: semanticValidate,\n } = options;\n const deconfig = env.DECONFIG;\n const directory = dirOf(options);\n\n // Create resource-specific bindings using the provided data schema\n const resourceBindings = createResourceBindings(resourceName, dataSchema);\n\n const tools = impl(resourceBindings, [\n // deco_resource_search\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_SEARCH` as keyof typeof enhancements\n ]?.description ||\n `Search ${resourceName} resources in the DECONFIG directory ${directory}`,\n handler: async ({\n term,\n page = 1,\n pageSize = 10,\n filters,\n sortBy,\n sortOrder,\n }) => {\n const normalizedDir = normalizeDirectory(directory);\n const offset = pageSize !== Infinity ? (page - 1) * pageSize : 0;\n\n // List all files in the directory\n const filesList = await deconfig.LIST_FILES({\n prefix: normalizedDir,\n });\n\n // Filter files that end with .json\n const allFiles = Object.entries(filesList.files)\n .filter(([path]) => path.endsWith(\".json\"))\n .map(([path, metadata]) => ({\n path,\n resourceId: path\n .replace(`${normalizedDir}/`, \"\")\n .replace(\".json\", \"\"),\n metadata,\n }));\n\n // Simple search - filter by resource ID, path, title, description, created_by, or updated_by\n let filteredFiles = allFiles;\n if (term) {\n filteredFiles = allFiles.filter(({ resourceId, path, metadata }) => {\n const searchTerm = term.toLowerCase();\n return (\n resourceId.toLowerCase().includes(searchTerm) ||\n path.toLowerCase().includes(searchTerm) ||\n (\n getMetadataString(metadata, \"name\")?.toLowerCase() ?? \"\"\n ).includes(searchTerm) ||\n (\n getMetadataString(metadata, \"description\")?.toLowerCase() ?? \"\"\n ).includes(searchTerm) ||\n (\n getMetadataString(metadata, \"createdBy\")?.toLowerCase() ?? \"\"\n ).includes(searchTerm) ||\n (\n getMetadataString(metadata, \"updatedBy\")?.toLowerCase() ?? \"\"\n ).includes(searchTerm)\n );\n });\n }\n\n // Apply additional filters if provided\n if (filters) {\n const createdByFilter = filters.created_by as\n | string\n | string[]\n | undefined;\n const updatedByFilter = filters.updated_by as\n | string\n | string[]\n | undefined;\n\n if (createdByFilter) {\n const createdBySet = new Set(\n Array.isArray(createdByFilter)\n ? createdByFilter.map((v: unknown) => String(v))\n : [String(createdByFilter)],\n );\n filteredFiles = filteredFiles.filter(({ metadata }) => {\n const value = getMetadataString(metadata, \"createdBy\");\n return value ? createdBySet.has(value) : false;\n });\n }\n\n if (updatedByFilter) {\n const updatedBySet = new Set(\n Array.isArray(updatedByFilter)\n ? updatedByFilter.map((v: unknown) => String(v))\n : [String(updatedByFilter)],\n );\n filteredFiles = filteredFiles.filter(({ metadata }) => {\n const value = getMetadataString(metadata, \"updatedBy\");\n return value ? updatedBySet.has(value) : false;\n });\n }\n }\n\n // Sort if specified\n if (sortBy) {\n filteredFiles.sort((a, b) => {\n let aValue: string | number;\n let bValue: string | number;\n\n if (sortBy === \"resourceId\") {\n aValue = a.resourceId;\n bValue = b.resourceId;\n } else if (sortBy === \"name\") {\n aValue = getMetadataString(a.metadata, \"name\") || a.resourceId;\n bValue = getMetadataString(b.metadata, \"name\") || b.resourceId;\n } else if (sortBy === \"description\") {\n aValue = getMetadataString(a.metadata, \"description\") || \"\";\n bValue = getMetadataString(b.metadata, \"description\") || \"\";\n } else {\n aValue = a.metadata.mtime;\n bValue = b.metadata.mtime;\n }\n\n if (sortOrder === \"desc\") {\n return aValue < bValue ? 1 : aValue > bValue ? -1 : 0;\n } else {\n return aValue > bValue ? 1 : aValue < bValue ? -1 : 0;\n }\n });\n }\n\n // Apply pagination\n const totalCount = filteredFiles.length;\n const totalPages = Math.ceil(totalCount / pageSize);\n const hasNextPage = offset + pageSize < totalCount;\n const hasPreviousPage = page > 1;\n const items = filteredFiles.slice(offset, offset + pageSize);\n\n return {\n items: items.map(({ resourceId, metadata }) => {\n // Construct Resources 2.0 URI\n const uri = ResourceUri.build(\n env.DECO_REQUEST_CONTEXT.integrationId as string,\n resourceName,\n resourceId,\n );\n\n // Extract title and description from metadata, with fallbacks\n const name = getMetadataString(metadata, \"name\") || resourceId;\n const description =\n getMetadataString(metadata, \"description\") || \"\";\n\n return {\n uri,\n data: { name, description },\n created_at:\n \"ctime\" in metadata && typeof metadata.ctime === \"number\"\n ? new Date(metadata.ctime).toISOString()\n : undefined,\n updated_at:\n \"mtime\" in metadata && typeof metadata.mtime === \"number\"\n ? new Date(metadata.mtime).toISOString()\n : undefined,\n created_by: getMetadataString(metadata, \"createdBy\"),\n updated_by:\n getMetadataString(metadata, \"updatedBy\") ||\n getMetadataString(metadata, \"createdBy\"),\n };\n }),\n totalCount,\n page,\n pageSize,\n totalPages,\n hasNextPage,\n hasPreviousPage,\n };\n },\n },\n\n // deco_resource_read\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_READ` as keyof typeof enhancements\n ]?.description ||\n `Read a ${resourceName} resource from the DECONFIG directory ${directory}`,\n handler: async ({ uri }) => {\n // Validate URI format\n ResourceUriSchema.parse(uri);\n\n const resourceId = ResourceUri.unwind(uri).resourceId;\n const filePath = ResourcePath.build(directory, resourceId);\n\n try {\n const fileData = await deconfig.READ_FILE({\n path: filePath,\n format: \"plainString\",\n });\n\n const content = fileData.content as string;\n\n // Parse the JSON content\n let parsedData: Record<string, unknown> = {};\n try {\n parsedData = JSON.parse(content);\n } catch {\n throw new UserInputError(\"Invalid JSON content in resource file\");\n }\n\n // Validate against schema\n const validatedData = dataSchema.parse(parsedData);\n\n return {\n uri,\n data: validatedData,\n created_at: new Date(fileData.ctime).toISOString(),\n updated_at: new Date(fileData.mtime).toISOString(),\n created_by:\n parsedData &&\n \"created_by\" in parsedData &&\n typeof parsedData.created_by === \"string\"\n ? parsedData.created_by\n : undefined,\n updated_by:\n parsedData &&\n \"updated_by\" in parsedData &&\n typeof parsedData.updated_by === \"string\"\n ? parsedData.updated_by\n : undefined,\n };\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"not found\")) {\n throw new NotFoundError(`Resource not found: ${uri}`);\n }\n throw error;\n }\n },\n },\n\n // deco_resource_create (optional)\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_CREATE` as keyof typeof enhancements\n ]?.description ||\n `Create a new ${resourceName} resource in the DECONFIG directory ${directory}`,\n handler: async ({ data }) => {\n // Validate data against schema\n const validatedData = dataSchema.parse(data);\n\n // Run semantic validation if provided\n if (semanticValidate) {\n await semanticValidate(validatedData);\n }\n\n // Extract resource ID from name or generate one\n const resourceId =\n (validatedData.name as string)?.replace(/[^a-zA-Z0-9-_]/g, \"-\") ||\n crypto.randomUUID();\n const uri = ResourceUri.build(\n env.DECO_REQUEST_CONTEXT.integrationId as string,\n resourceName,\n resourceId,\n );\n const filePath = ResourcePath.build(directory, resourceId);\n const user = env.DECO_REQUEST_CONTEXT.ensureAuthenticated();\n // Prepare resource data with metadata\n const resourceData = {\n ...validatedData,\n id: resourceId,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n created_by: user?.id ? String(user.id) : undefined,\n updated_by: user?.id ? String(user.id) : undefined,\n };\n\n const fileContent = JSON.stringify(resourceData, null, 2);\n const putResult = await deconfig.PUT_FILE({\n path: filePath,\n content: fileContent,\n metadata: {\n resourceType: resourceName,\n resourceId,\n createdBy: user?.id,\n name: validatedData.name || resourceId,\n description: validatedData.description || \"\",\n },\n });\n\n if (putResult.conflict) {\n throw new UserInputError(\n \"Resource write conflicted. Please refresh and retry.\",\n );\n }\n\n return {\n uri,\n data: validatedData,\n created_at: resourceData.created_at,\n updated_at: resourceData.updated_at,\n created_by: user?.id ? String(user.id) : undefined,\n updated_by: user?.id ? String(user.id) : undefined,\n };\n },\n },\n\n // deco_resource_update (optional)\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_UPDATE` as keyof typeof enhancements\n ]?.description ||\n `Update a ${resourceName} resource in the DECONFIG directory ${directory}`,\n handler: async ({ uri, data }) => {\n // Validate URI format\n ResourceUriSchema.parse(uri);\n\n const resourceId = ResourceUri.unwind(uri).resourceId;\n const filePath = ResourcePath.build(directory, resourceId);\n\n // Read existing file to get current data\n let existingData: Record<string, unknown> = {};\n try {\n const fileData = await deconfig.READ_FILE({\n path: filePath,\n format: \"plainString\",\n });\n existingData = JSON.parse(fileData.content as string);\n } catch {\n throw new NotFoundError(`Resource not found: ${uri}`);\n }\n\n // Validate new data against schema\n const validatedData = dataSchema.parse(data);\n\n // Run semantic validation if provided\n if (semanticValidate) {\n await semanticValidate(validatedData);\n }\n\n const user = env.DECO_REQUEST_CONTEXT.ensureAuthenticated();\n\n const previousCreatedBy =\n typeof existingData[\"created_by\"] === \"string\"\n ? (existingData[\"created_by\"] as string)\n : undefined;\n\n // Merge existing data with updates\n const updatedData = {\n ...existingData,\n ...validatedData,\n id: resourceId,\n createdBy: previousCreatedBy,\n updated_at: new Date().toISOString(),\n updated_by: user?.id ? String(user.id) : undefined,\n };\n\n const fileContent = JSON.stringify(updatedData, null, 2);\n\n const putResult = await deconfig.PUT_FILE({\n path: filePath,\n content: fileContent,\n metadata: {\n resourceType: resourceName,\n resourceId,\n updatedBy: user?.id,\n name: validatedData.name || resourceId,\n description: validatedData.description || \"\",\n },\n });\n\n if (putResult.conflict) {\n throw new UserInputError(\n \"Resource write conflicted. Please refresh and retry.\",\n );\n }\n\n return {\n uri,\n data: validatedData,\n created_at: existingData.created_at as string,\n updated_at: updatedData.updated_at,\n created_by: existingData.created_by as string,\n updated_by: user?.id ? String(user.id) : undefined,\n };\n },\n },\n // deco_resource_delete (optional)\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_DELETE` as keyof typeof enhancements\n ]?.description ||\n `Delete a ${resourceName} resource from the DECONFIG directory ${directory}`,\n handler: async ({ uri }) => {\n // Validate URI format\n ResourceUriSchema.parse(uri);\n\n const resourceId = ResourceUri.unwind(uri).resourceId;\n const filePath = ResourcePath.build(directory, resourceId);\n\n try {\n await deconfig.DELETE_FILE({\n path: filePath,\n });\n\n return {\n success: true,\n uri,\n };\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"not found\")) {\n throw new NotFoundError(`Resource not found: ${uri}`);\n }\n throw error;\n }\n },\n },\n {\n description:\n enhancements?.[\n `DECO_RESOURCE_${resourceName.toUpperCase()}_DESCRIBE` as keyof typeof enhancements\n ]?.description ||\n `Describe the ${resourceName} resource in the DECONFIG directory ${directory}`,\n handler: () => {\n return {\n uriTemplate: ResourceUri.build(\n env.DECO_REQUEST_CONTEXT.integrationId as string,\n resourceName,\n \"*\",\n ),\n features: {\n watch: {\n pathname: `${RESOURCE_WATCH_BASE_PATHNAME}${directory}`,\n },\n },\n };\n },\n },\n ]);\n\n return tools;\n};\n\nconst removeLeadingSlash = (url: string) => {\n return url.startsWith(\"/\") ? url.slice(1) : url;\n};\n\nexport interface WatchOptions {\n watcherId?: string;\n pathFilter: string;\n resourceName: string;\n env: DefaultEnv & { DECONFIG: DeconfigClient };\n}\nconst watcher = ({\n env,\n pathFilter,\n resourceName,\n ...options\n}: WatchOptions): AsyncIterableIterator<{ uri: string }> => {\n const url = new URL(\n `/${removeLeadingSlash(env.DECO_REQUEST_CONTEXT.workspace)}/deconfig/watch`,\n `${env.DECO_API_URL ?? \"https://api.decocms.com\"}`,\n );\n if (options.watcherId) {\n url.searchParams.set(\"watcher-id\", options.watcherId);\n }\n url.searchParams.set(\"path-filter\", pathFilter);\n url.searchParams.set(\"branch\", env.DECO_REQUEST_CONTEXT.branch ?? \"main\");\n url.searchParams.set(\"auth-token\", env.DECO_REQUEST_CONTEXT.token);\n url.searchParams.set(\"from-ctime\", \"1\");\n\n const eventSource = new EventSource(url);\n const it = toAsyncIterator<{\n path: string;\n metadata: { address: string };\n }>(eventSource, \"change\");\n const iterator = async function* () {\n for await (const event of it) {\n const { path } = event;\n try {\n const { resourceId } = ResourcePath.extract(path);\n const uri = ResourceUri.build(\n env.DECO_REQUEST_CONTEXT.integrationId as string,\n resourceName,\n resourceId,\n );\n yield { uri };\n } catch {\n // ignore\n }\n }\n };\n const mIterator = iterator();\n const retn = mIterator.return;\n mIterator.return = function (val) {\n eventSource.close();\n return retn?.call(mIterator, val) ?? val;\n };\n return mIterator;\n};\n\nconst hasDeconfigBinding = (\n env: unknown,\n): env is DefaultEnv & { DECONFIG: DeconfigClient } => {\n return (\n env !== undefined &&\n typeof env === \"object\" &&\n env !== null &&\n \"DECONFIG\" in env\n );\n};\nexport const RESOURCE_WATCH_BASE_PATHNAME = \"/resources/watch\";\nexport const DeconfigResource = {\n WatchPathNameBase: RESOURCE_WATCH_BASE_PATHNAME,\n watchAPI: (req: Request, env: DefaultEnv) => {\n if (!hasDeconfigBinding(env)) {\n return new Response(\"DECONFIG:@deco/deconfig binding is required\", {\n status: 400,\n });\n }\n\n const url = new URL(req.url);\n const uri = url.searchParams.get(\"uri\");\n if (!uri) {\n return new Response(\"URI is required\", { status: 400 });\n }\n const pathname = url.pathname;\n let pathFilter = pathname.slice(RESOURCE_WATCH_BASE_PATHNAME.length); // removes `${RESOURCE_WATCH_BASE_PATHNAME}`\n const { resourceName, resourceId } = ResourceUri.unwind(uri);\n pathFilter =\n resourceId === \"*\"\n ? pathFilter\n : ResourcePath.build(pathFilter, resourceId);\n const watch = watcher({\n env,\n resourceName,\n pathFilter,\n });\n\n // Create SSE-compatible ReadableStream\n const sseStream = new ReadableStream({\n async start(controller) {\n const encoder = new TextEncoder();\n\n try {\n for await (const event of watch) {\n // Format as SSE: data: {json}\\n\\n\n const sseData = `data: ${JSON.stringify(event)}\\n\\n`;\n controller.enqueue(encoder.encode(sseData));\n }\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n cancel() {\n watch.return?.();\n // Clean up the async iterator if needed\n },\n });\n\n return new Response(sseStream, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n \"Access-Control-Allow-Origin\": WELL_KNOWN_ORIGINS.join(\",\"),\n \"Access-Control-Allow-Headers\": \"Cache-Control\",\n },\n });\n },\n define: <TDataSchema extends BaseResourceDataSchema>(\n options: Omit<DeconfigResourceOptions<TDataSchema>, \"env\">,\n ) => {\n return {\n watcher,\n create: (env: DefaultEnv & { DECONFIG: DeconfigClient }) => {\n return createDeconfigResource({\n env,\n ...options,\n });\n },\n };\n },\n};\n"]}