@decocms/runtime 0.28.0-beta.1 → 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 +28 -28
  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-DqyElLzZ.d.ts → index-B7U9jXW4.d.ts} +3 -3
  16. package/dist/{index-COMJ3oN7.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-Dbqp-p04.d.ts → mcp-DYmQ2RQf.d.ts} +1 -1
  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 +9 -9
  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,14 +1,14 @@
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;
5
5
  uri: z.ZodString;
6
6
  }, "strip", z.ZodTypeAny, {
7
- uri: string;
8
7
  name: string;
9
- }, {
10
8
  uri: string;
9
+ }, {
11
10
  name: string;
11
+ uri: string;
12
12
  }>;
13
13
  declare const ResourcesReadOutputSchema: z.ZodObject<{
14
14
  name: z.ZodString;
@@ -25,9 +25,9 @@ declare const ResourcesReadOutputSchema: z.ZodObject<{
25
25
  type: z.ZodEnum<["text", "blob"]>;
26
26
  }, "strip", z.ZodTypeAny, {
27
27
  type: "text" | "blob";
28
+ name: string;
28
29
  data: string;
29
30
  uri: string;
30
- name: string;
31
31
  mimeType?: string | undefined;
32
32
  title?: string | undefined;
33
33
  description?: string | undefined;
@@ -37,9 +37,9 @@ declare const ResourcesReadOutputSchema: z.ZodObject<{
37
37
  size?: number | undefined;
38
38
  }, {
39
39
  type: "text" | "blob";
40
+ name: string;
40
41
  data: string;
41
42
  uri: string;
42
- name: string;
43
43
  mimeType?: string | undefined;
44
44
  title?: string | undefined;
45
45
  description?: string | undefined;
@@ -76,8 +76,8 @@ declare const ResourceSearchOutputSchema: z.ZodObject<{
76
76
  size: z.ZodOptional<z.ZodNumber>;
77
77
  annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
78
78
  }, "strip", z.ZodTypeAny, {
79
- uri: string;
80
79
  name: string;
80
+ uri: string;
81
81
  mimeType?: string | undefined;
82
82
  title?: string | undefined;
83
83
  description?: string | undefined;
@@ -86,8 +86,8 @@ declare const ResourceSearchOutputSchema: z.ZodObject<{
86
86
  timestamp?: string | undefined;
87
87
  size?: number | undefined;
88
88
  }, {
89
- uri: string;
90
89
  name: string;
90
+ uri: string;
91
91
  mimeType?: string | undefined;
92
92
  title?: string | undefined;
93
93
  description?: string | undefined;
@@ -100,8 +100,8 @@ declare const ResourceSearchOutputSchema: z.ZodObject<{
100
100
  nextCursor: z.ZodOptional<z.ZodString>;
101
101
  }, "strip", z.ZodTypeAny, {
102
102
  items: {
103
- uri: string;
104
103
  name: string;
104
+ uri: string;
105
105
  mimeType?: string | undefined;
106
106
  title?: string | undefined;
107
107
  description?: string | undefined;
@@ -114,8 +114,8 @@ declare const ResourceSearchOutputSchema: z.ZodObject<{
114
114
  nextCursor?: string | undefined;
115
115
  }, {
116
116
  items: {
117
- uri: string;
118
117
  name: string;
118
+ uri: string;
119
119
  mimeType?: string | undefined;
120
120
  title?: string | undefined;
121
121
  description?: string | undefined;
@@ -147,27 +147,27 @@ declare const ResourceCreateInputSchema: z.ZodObject<{
147
147
  }>;
148
148
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
149
149
  }, "strip", z.ZodTypeAny, {
150
+ name: string;
150
151
  content: {
151
152
  type: "text" | "blob";
152
153
  data: string;
153
154
  mimeType?: string | undefined;
154
155
  };
155
- name: string;
156
156
  resourceName: string;
157
+ metadata?: Record<string, any> | undefined;
157
158
  title?: string | undefined;
158
159
  description?: string | undefined;
159
- metadata?: Record<string, any> | undefined;
160
160
  }, {
161
+ name: string;
161
162
  content: {
162
163
  type: "text" | "blob";
163
164
  data: string;
164
165
  mimeType?: string | undefined;
165
166
  };
166
- name: string;
167
167
  resourceName: string;
168
+ metadata?: Record<string, any> | undefined;
168
169
  title?: string | undefined;
169
170
  description?: string | undefined;
170
- metadata?: Record<string, any> | undefined;
171
171
  }>;
172
172
  declare const ResourceCreateOutputSchema: z.ZodObject<{
173
173
  name: z.ZodString;
@@ -180,8 +180,8 @@ declare const ResourceCreateOutputSchema: z.ZodObject<{
180
180
  size: z.ZodOptional<z.ZodNumber>;
181
181
  annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
182
182
  }, "strip", z.ZodTypeAny, {
183
- uri: string;
184
183
  name: string;
184
+ uri: string;
185
185
  mimeType?: string | undefined;
186
186
  title?: string | undefined;
187
187
  description?: string | undefined;
@@ -190,8 +190,8 @@ declare const ResourceCreateOutputSchema: z.ZodObject<{
190
190
  timestamp?: string | undefined;
191
191
  size?: number | undefined;
192
192
  }, {
193
- uri: string;
194
193
  name: string;
194
+ uri: string;
195
195
  mimeType?: string | undefined;
196
196
  title?: string | undefined;
197
197
  description?: string | undefined;
@@ -221,8 +221,9 @@ declare const ResourceUpdateInputSchema: z.ZodObject<{
221
221
  }>>;
222
222
  metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
223
223
  }, "strip", z.ZodTypeAny, {
224
- uri: string;
225
224
  name: string;
225
+ uri: string;
226
+ metadata?: Record<string, any> | undefined;
226
227
  content?: {
227
228
  type: "text" | "blob";
228
229
  data: string;
@@ -230,11 +231,11 @@ declare const ResourceUpdateInputSchema: z.ZodObject<{
230
231
  } | undefined;
231
232
  title?: string | undefined;
232
233
  description?: string | undefined;
233
- metadata?: Record<string, any> | undefined;
234
234
  resourceName?: string | undefined;
235
235
  }, {
236
- uri: string;
237
236
  name: string;
237
+ uri: string;
238
+ metadata?: Record<string, any> | undefined;
238
239
  content?: {
239
240
  type: "text" | "blob";
240
241
  data: string;
@@ -242,7 +243,6 @@ declare const ResourceUpdateInputSchema: z.ZodObject<{
242
243
  } | undefined;
243
244
  title?: string | undefined;
244
245
  description?: string | undefined;
245
- metadata?: Record<string, any> | undefined;
246
246
  resourceName?: string | undefined;
247
247
  }>;
248
248
  declare const ResourceUpdateOutputSchema: z.ZodObject<{
@@ -256,8 +256,8 @@ declare const ResourceUpdateOutputSchema: z.ZodObject<{
256
256
  size: z.ZodOptional<z.ZodNumber>;
257
257
  annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
258
258
  }, "strip", z.ZodTypeAny, {
259
- uri: string;
260
259
  name: string;
260
+ uri: string;
261
261
  mimeType?: string | undefined;
262
262
  title?: string | undefined;
263
263
  description?: string | undefined;
@@ -266,8 +266,8 @@ declare const ResourceUpdateOutputSchema: z.ZodObject<{
266
266
  timestamp?: string | undefined;
267
267
  size?: number | undefined;
268
268
  }, {
269
- uri: string;
270
269
  name: string;
270
+ uri: string;
271
271
  mimeType?: string | undefined;
272
272
  title?: string | undefined;
273
273
  description?: string | undefined;
@@ -281,12 +281,12 @@ declare const ResourceDeleteInputSchema: z.ZodObject<{
281
281
  uri: z.ZodString;
282
282
  force: z.ZodOptional<z.ZodBoolean>;
283
283
  }, "strip", z.ZodTypeAny, {
284
- uri: string;
285
284
  name: string;
285
+ uri: string;
286
286
  force?: boolean | undefined;
287
287
  }, {
288
- uri: string;
289
288
  name: string;
289
+ uri: string;
290
290
  force?: boolean | undefined;
291
291
  }>;
292
292
  declare const ResourceDeleteOutputSchema: z.ZodObject<{
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<{
@@ -14,13 +14,13 @@ declare const ViewsListOutputSchema: z.ZodObject<{
14
14
  prompt: z.ZodOptional<z.ZodString>;
15
15
  installBehavior: z.ZodOptional<z.ZodEnum<["none", "open", "autoPin"]>>;
16
16
  }, "strip", z.ZodTypeAny, {
17
- title: string;
18
17
  tools: string[];
18
+ title: string;
19
19
  icon: string;
20
+ id?: string | undefined;
20
21
  url?: string | undefined;
21
22
  name?: string | undefined;
22
23
  description?: string | undefined;
23
- id?: string | undefined;
24
24
  resourceName?: string | undefined;
25
25
  mimeTypePattern?: string | undefined;
26
26
  prompt?: string | undefined;
@@ -28,11 +28,11 @@ declare const ViewsListOutputSchema: z.ZodObject<{
28
28
  }, {
29
29
  title: string;
30
30
  icon: string;
31
+ id?: string | undefined;
31
32
  url?: string | undefined;
32
33
  name?: string | undefined;
33
- description?: string | undefined;
34
34
  tools?: string[] | undefined;
35
- id?: string | undefined;
35
+ description?: string | undefined;
36
36
  resourceName?: string | undefined;
37
37
  mimeTypePattern?: string | undefined;
38
38
  prompt?: string | undefined;
@@ -40,13 +40,13 @@ declare const ViewsListOutputSchema: z.ZodObject<{
40
40
  }>, "many">;
41
41
  }, "strip", z.ZodTypeAny, {
42
42
  views: {
43
- title: string;
44
43
  tools: string[];
44
+ title: string;
45
45
  icon: string;
46
+ id?: string | undefined;
46
47
  url?: string | undefined;
47
48
  name?: string | undefined;
48
49
  description?: string | undefined;
49
- id?: string | undefined;
50
50
  resourceName?: string | undefined;
51
51
  mimeTypePattern?: string | undefined;
52
52
  prompt?: string | undefined;
@@ -56,11 +56,11 @@ declare const ViewsListOutputSchema: z.ZodObject<{
56
56
  views: {
57
57
  title: string;
58
58
  icon: string;
59
+ id?: string | undefined;
59
60
  url?: string | undefined;
60
61
  name?: string | undefined;
61
- description?: string | undefined;
62
62
  tools?: string[] | undefined;
63
- id?: string | undefined;
63
+ description?: string | undefined;
64
64
  resourceName?: string | undefined;
65
65
  mimeTypePattern?: string | undefined;
66
66
  prompt?: string | 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.1",
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": "workspace:*",
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"]}