@decocms/runtime 0.25.0 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,10 @@
1
- export { D as DeconfigClient, i as DeconfigResource, b as DeconfigResourceOptions, E as EnhancedResourcesTools, N as NotFoundError, h as RESOURCE_WATCH_BASE_PATHNAME, R as ResourcesBinding, d as ResourcesTools, U as UserInputError, W as WatchOptions, a as createDeconfigResource } from '../../index-DswRTp9B.js';
1
+ export { D as DeconfigClient, i as DeconfigResource, b as DeconfigResourceOptions, E as EnhancedResourcesTools, N as NotFoundError, h as RESOURCE_WATCH_BASE_PATHNAME, R as ResourcesBinding, d as ResourcesTools, U as UserInputError, W as WatchOptions, a as createDeconfigResource } from '../../index-SnnmAI05.js';
2
2
  import '@mastra/core';
3
3
  import 'zod';
4
- import '../../index-CStCyFvK.js';
4
+ import '../../index-D8GtUDPS.js';
5
5
  import '@cloudflare/workers-types';
6
6
  import '@mastra/core/di';
7
7
  import '@mastra/core/workflows';
8
8
  import '../../resources.js';
9
- import '../../mcp-yTBduksO.js';
9
+ import '../../mcp-Bv7IAgWX.js';
10
10
  import '../../connection-DDtQYrea.js';
@@ -1,10 +1,10 @@
1
1
  import * as zod from 'zod';
2
2
  import { z } from 'zod';
3
- export { B as BaseResourceDataSchema, D as DeconfigClient, b as DeconfigResourceOptions, E as EnhancedResourcesTools, f as ResourceBinding, g as ResourceBindingsFunction, R as ResourcesBinding, d as ResourcesTools, a as createDeconfigResource, c as createResourceBindings, e as deconfigTools } from '../index-DswRTp9B.js';
3
+ export { B as BaseResourceDataSchema, D as DeconfigClient, b as DeconfigResourceOptions, E as EnhancedResourcesTools, f as ResourceBinding, g as ResourceBindingsFunction, R as ResourcesBinding, d as ResourcesTools, a as createDeconfigResource, c as createResourceBindings, e as deconfigTools } from '../index-SnnmAI05.js';
4
4
  import * as _mastra_core from '@mastra/core';
5
5
  import { M as MCPConnection } from '../connection-DDtQYrea.js';
6
- import { c as createPrivateTool } from '../index-CStCyFvK.js';
7
- import { T as ToolBinder, M as MCPClientFetchStub } from '../mcp-yTBduksO.js';
6
+ import { c as createPrivateTool } from '../index-D8GtUDPS.js';
7
+ import { T as ToolBinder, M as MCPClientFetchStub } from '../mcp-Bv7IAgWX.js';
8
8
  import '@cloudflare/workers-types';
9
9
  import '@mastra/core/di';
10
10
  import '@mastra/core/workflows';
@@ -311,13 +311,13 @@ declare const ViewBinding: {
311
311
  prompt: z.ZodOptional<z.ZodString>;
312
312
  installBehavior: z.ZodOptional<z.ZodEnum<["none", "open", "autoPin"]>>;
313
313
  }, "strip", z.ZodTypeAny, {
314
- title: string;
315
314
  tools: string[];
315
+ title: string;
316
316
  icon: string;
317
- url?: string | undefined;
317
+ id?: string | undefined;
318
318
  name?: string | undefined;
319
+ url?: string | undefined;
319
320
  description?: string | undefined;
320
- id?: string | undefined;
321
321
  resourceName?: string | undefined;
322
322
  mimeTypePattern?: string | undefined;
323
323
  prompt?: string | undefined;
@@ -325,25 +325,25 @@ declare const ViewBinding: {
325
325
  }, {
326
326
  title: string;
327
327
  icon: string;
328
- url?: string | undefined;
328
+ id?: string | undefined;
329
329
  name?: string | undefined;
330
+ url?: string | undefined;
330
331
  description?: string | undefined;
331
- tools?: string[] | undefined;
332
- id?: string | undefined;
333
332
  resourceName?: string | undefined;
333
+ tools?: string[] | undefined;
334
334
  mimeTypePattern?: string | undefined;
335
335
  prompt?: string | undefined;
336
336
  installBehavior?: "open" | "none" | "autoPin" | undefined;
337
337
  }>, "many">;
338
338
  }, "strip", z.ZodTypeAny, {
339
339
  views: {
340
- title: string;
341
340
  tools: string[];
341
+ title: string;
342
342
  icon: string;
343
- url?: string | undefined;
343
+ id?: string | undefined;
344
344
  name?: string | undefined;
345
+ url?: string | undefined;
345
346
  description?: string | undefined;
346
- id?: string | undefined;
347
347
  resourceName?: string | undefined;
348
348
  mimeTypePattern?: string | undefined;
349
349
  prompt?: string | undefined;
@@ -353,12 +353,12 @@ declare const ViewBinding: {
353
353
  views: {
354
354
  title: string;
355
355
  icon: string;
356
- url?: string | undefined;
356
+ id?: string | undefined;
357
357
  name?: string | undefined;
358
+ url?: string | undefined;
358
359
  description?: string | undefined;
359
- tools?: string[] | undefined;
360
- id?: string | undefined;
361
360
  resourceName?: string | undefined;
361
+ tools?: string[] | undefined;
362
362
  mimeTypePattern?: string | undefined;
363
363
  prompt?: string | undefined;
364
364
  installBehavior?: "open" | "none" | "autoPin" | undefined;
@@ -390,13 +390,13 @@ declare const VIEW_BINDING_SCHEMA: readonly [{
390
390
  prompt: z.ZodOptional<z.ZodString>;
391
391
  installBehavior: z.ZodOptional<z.ZodEnum<["none", "open", "autoPin"]>>;
392
392
  }, "strip", z.ZodTypeAny, {
393
- title: string;
394
393
  tools: string[];
394
+ title: string;
395
395
  icon: string;
396
- url?: string | undefined;
396
+ id?: string | undefined;
397
397
  name?: string | undefined;
398
+ url?: string | undefined;
398
399
  description?: string | undefined;
399
- id?: string | undefined;
400
400
  resourceName?: string | undefined;
401
401
  mimeTypePattern?: string | undefined;
402
402
  prompt?: string | undefined;
@@ -404,25 +404,25 @@ declare const VIEW_BINDING_SCHEMA: readonly [{
404
404
  }, {
405
405
  title: string;
406
406
  icon: string;
407
- url?: string | undefined;
407
+ id?: string | undefined;
408
408
  name?: string | undefined;
409
+ url?: string | undefined;
409
410
  description?: string | undefined;
410
- tools?: string[] | undefined;
411
- id?: string | undefined;
412
411
  resourceName?: string | undefined;
412
+ tools?: string[] | undefined;
413
413
  mimeTypePattern?: string | undefined;
414
414
  prompt?: string | undefined;
415
415
  installBehavior?: "open" | "none" | "autoPin" | undefined;
416
416
  }>, "many">;
417
417
  }, "strip", z.ZodTypeAny, {
418
418
  views: {
419
- title: string;
420
419
  tools: string[];
420
+ title: string;
421
421
  icon: string;
422
- url?: string | undefined;
422
+ id?: string | undefined;
423
423
  name?: string | undefined;
424
+ url?: string | undefined;
424
425
  description?: string | undefined;
425
- id?: string | undefined;
426
426
  resourceName?: string | undefined;
427
427
  mimeTypePattern?: string | undefined;
428
428
  prompt?: string | undefined;
@@ -432,12 +432,12 @@ declare const VIEW_BINDING_SCHEMA: readonly [{
432
432
  views: {
433
433
  title: string;
434
434
  icon: string;
435
- url?: string | undefined;
435
+ id?: string | undefined;
436
436
  name?: string | undefined;
437
+ url?: string | undefined;
437
438
  description?: string | undefined;
438
- tools?: string[] | undefined;
439
- id?: string | undefined;
440
439
  resourceName?: string | undefined;
440
+ tools?: string[] | undefined;
441
441
  mimeTypePattern?: string | undefined;
442
442
  prompt?: string | undefined;
443
443
  installBehavior?: "open" | "none" | "autoPin" | undefined;
@@ -458,13 +458,13 @@ declare const listViewsSchema: z.ZodObject<{
458
458
  prompt: z.ZodOptional<z.ZodString>;
459
459
  installBehavior: z.ZodOptional<z.ZodEnum<["none", "open", "autoPin"]>>;
460
460
  }, "strip", z.ZodTypeAny, {
461
- title: string;
462
461
  tools: string[];
462
+ title: string;
463
463
  icon: string;
464
- url?: string | undefined;
464
+ id?: string | undefined;
465
465
  name?: string | undefined;
466
+ url?: string | undefined;
466
467
  description?: string | undefined;
467
- id?: string | undefined;
468
468
  resourceName?: string | undefined;
469
469
  mimeTypePattern?: string | undefined;
470
470
  prompt?: string | undefined;
@@ -472,25 +472,25 @@ declare const listViewsSchema: z.ZodObject<{
472
472
  }, {
473
473
  title: string;
474
474
  icon: string;
475
- url?: string | undefined;
475
+ id?: string | undefined;
476
476
  name?: string | undefined;
477
+ url?: string | undefined;
477
478
  description?: string | undefined;
478
- tools?: string[] | undefined;
479
- id?: string | undefined;
480
479
  resourceName?: string | undefined;
480
+ tools?: string[] | undefined;
481
481
  mimeTypePattern?: string | undefined;
482
482
  prompt?: string | undefined;
483
483
  installBehavior?: "open" | "none" | "autoPin" | undefined;
484
484
  }>, "many">;
485
485
  }, "strip", z.ZodTypeAny, {
486
486
  views: {
487
- title: string;
488
487
  tools: string[];
488
+ title: string;
489
489
  icon: string;
490
- url?: string | undefined;
490
+ id?: string | undefined;
491
491
  name?: string | undefined;
492
+ url?: string | undefined;
492
493
  description?: string | undefined;
493
- id?: string | undefined;
494
494
  resourceName?: string | undefined;
495
495
  mimeTypePattern?: string | undefined;
496
496
  prompt?: string | undefined;
@@ -500,12 +500,12 @@ declare const listViewsSchema: z.ZodObject<{
500
500
  views: {
501
501
  title: string;
502
502
  icon: string;
503
- url?: string | undefined;
503
+ id?: string | undefined;
504
504
  name?: string | undefined;
505
+ url?: string | undefined;
505
506
  description?: string | undefined;
506
- tools?: string[] | undefined;
507
- id?: string | undefined;
508
507
  resourceName?: string | undefined;
508
+ tools?: string[] | undefined;
509
509
  mimeTypePattern?: string | undefined;
510
510
  prompt?: string | undefined;
511
511
  installBehavior?: "open" | "none" | "autoPin" | undefined;
@@ -750,11 +750,11 @@ declare const DeleteOutputSchema: z.ZodObject<{
750
750
  success: z.ZodBoolean;
751
751
  uri: z.ZodString;
752
752
  }, "strip", z.ZodTypeAny, {
753
- uri: string;
754
753
  success: boolean;
755
- }, {
756
754
  uri: string;
755
+ }, {
757
756
  success: boolean;
757
+ uri: string;
758
758
  }>;
759
759
  /**
760
760
  * Factory function to create item schema for a specific resource type
package/dist/drizzle.d.ts CHANGED
@@ -3,14 +3,14 @@ import * as drizzleOrm from 'drizzle-orm';
3
3
  export { drizzleOrm as orm };
4
4
  import { SqliteRemoteDatabase } from 'drizzle-orm/sqlite-proxy';
5
5
  export * from 'drizzle-orm/sqlite-core';
6
- import { D as DefaultEnv } from './index-CStCyFvK.js';
6
+ import { D as DefaultEnv } from './index-D8GtUDPS.js';
7
7
  import '@cloudflare/workers-types';
8
8
  import 'zod';
9
9
  import '@mastra/core';
10
10
  import '@mastra/core/di';
11
11
  import '@mastra/core/workflows';
12
12
  import './resources.js';
13
- import './mcp-yTBduksO.js';
13
+ import './mcp-Bv7IAgWX.js';
14
14
  import './connection-DDtQYrea.js';
15
15
 
16
16
  declare function drizzle<TSchema extends Record<string, unknown> = Record<string, never>>({ DECO_WORKSPACE_DB }: Pick<DefaultEnv, "DECO_WORKSPACE_DB">, config?: DrizzleConfig<TSchema>): SqliteRemoteDatabase<TSchema>;
@@ -4,7 +4,7 @@ import { ToolExecutionContext, ToolAction, Tool, Workflow as Workflow$1 } from '
4
4
  import { RuntimeContext } from '@mastra/core/di';
5
5
  import { createWorkflow, Step as Step$1, ExecuteFunction, DefaultEngineType } from '@mastra/core/workflows';
6
6
  import { ResourceCreateInputSchema, ResourceUpdateInputSchema, ResourceDeleteInputSchema } from './resources.js';
7
- import { Q as QueryResult } from './mcp-yTBduksO.js';
7
+ import { Q as QueryResult } from './mcp-Bv7IAgWX.js';
8
8
  import { M as MCPConnection } from './connection-DDtQYrea.js';
9
9
 
10
10
  declare const createRuntimeContext: (prev?: RuntimeContext<AppContext>) => RuntimeContext<AppContext<any>>;
@@ -1,8 +1,8 @@
1
1
  import * as _mastra_core from '@mastra/core';
2
2
  import * as zod from 'zod';
3
3
  import { z } from 'zod';
4
- import { D as DefaultEnv } from './index-CStCyFvK.js';
5
- import { M as MCPClientFetchStub } from './mcp-yTBduksO.js';
4
+ import { D as DefaultEnv } from './index-D8GtUDPS.js';
5
+ import { M as MCPClientFetchStub } from './mcp-Bv7IAgWX.js';
6
6
 
7
7
  type BaseResourceDataSchema = z.ZodObject<{
8
8
  name: z.ZodString;
@@ -277,11 +277,11 @@ declare function createResourceBindings<TDataSchema extends BaseResourceDataSche
277
277
  success: z.ZodBoolean;
278
278
  uri: z.ZodString;
279
279
  }, "strip", z.ZodTypeAny, {
280
- uri: string;
281
280
  success: boolean;
282
- }, {
283
281
  uri: string;
282
+ }, {
284
283
  success: boolean;
284
+ uri: string;
285
285
  }>;
286
286
  readonly opt: true;
287
287
  }, {
@@ -402,12 +402,12 @@ declare const deconfigTools: readonly [{
402
402
  format: z.ZodOptional<z.ZodEnum<["base64", "byteArray", "plainString", "json"]>>;
403
403
  }, "strip", z.ZodTypeAny, {
404
404
  path: string;
405
- format?: "json" | "base64" | "byteArray" | "plainString" | undefined;
406
405
  branch?: string | undefined;
406
+ format?: "json" | "base64" | "byteArray" | "plainString" | undefined;
407
407
  }, {
408
408
  path: string;
409
- format?: "json" | "base64" | "byteArray" | "plainString" | undefined;
410
409
  branch?: string | undefined;
410
+ format?: "json" | "base64" | "byteArray" | "plainString" | undefined;
411
411
  }>;
412
412
  readonly outputSchema: z.ZodObject<{
413
413
  content: z.ZodAny;
@@ -447,16 +447,16 @@ declare const deconfigTools: readonly [{
447
447
  content: string | number[] | {
448
448
  base64: string;
449
449
  };
450
- metadata?: Record<string, any> | undefined;
451
450
  branch?: string | undefined;
451
+ metadata?: Record<string, any> | undefined;
452
452
  expectedCtime?: number | undefined;
453
453
  }, {
454
454
  path: string;
455
455
  content: string | number[] | {
456
456
  base64: string;
457
457
  };
458
- metadata?: Record<string, any> | undefined;
459
458
  branch?: string | undefined;
459
+ metadata?: Record<string, any> | undefined;
460
460
  expectedCtime?: number | undefined;
461
461
  }>;
462
462
  readonly outputSchema: z.ZodObject<{
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import '@cloudflare/workers-types';
2
2
  import 'zod';
3
- export { B as BindingsObject, r as Contract, D as DefaultEnv, s as Migration, n as RequestContext, o as UnauthorizedError, m as User, U as UserDefaultExport, l as WorkersMCPBindings, W as WorkspaceDB, t as WranglerConfig, q as proxyConnectionForId, w as withBindings, p as withRuntime } from './index-CStCyFvK.js';
4
- export { C as CreateStubAPIOptions, T as ToolBinder, c as createMCPFetchStub } from './mcp-yTBduksO.js';
3
+ export { B as BindingsObject, r as Contract, D as DefaultEnv, s as Migration, n as RequestContext, o as UnauthorizedError, m as User, U as UserDefaultExport, l as WorkersMCPBindings, W as WorkspaceDB, t as WranglerConfig, q as proxyConnectionForId, w as withBindings, p as withRuntime } from './index-D8GtUDPS.js';
4
+ export { C as CreateStubAPIOptions, T as ToolBinder, c as createMCPFetchStub } from './mcp-Bv7IAgWX.js';
5
5
  import '@mastra/core';
6
6
  import '@mastra/core/di';
7
7
  import '@mastra/core/workflows';
package/dist/index.js CHANGED
@@ -580,6 +580,9 @@ var withRuntime = (userFns) => {
580
580
  toolCallId,
581
581
  toolCallInput
582
582
  });
583
+ if (result instanceof Response) {
584
+ return result;
585
+ }
583
586
  return new Response(JSON.stringify(result), {
584
587
  headers: {
585
588
  "Content-Type": "application/json"
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auth.ts","../src/bindings.ts","../src/workflow.ts","../src/index.ts"],"names":["ctx","client"],"mappings":"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","file":"index.js","sourcesContent":["import { JWK, jwtVerify } from \"jose\";\nimport type { DefaultEnv } from \"./index.ts\";\n\nconst DECO_APP_AUTH_COOKIE_NAME = \"deco_page_auth\";\nconst MAX_COOKIE_SIZE = 4000; // Leave some buffer below the 4096 limit\n\nexport interface State {\n next?: string;\n}\n\nexport const StateParser = {\n parse: (state: string) => {\n return JSON.parse(decodeURIComponent(atob(state))) as State;\n },\n stringify: (state: State) => {\n return btoa(encodeURIComponent(JSON.stringify(state)));\n },\n};\n\n// Helper function to chunk a value into multiple cookies\nconst chunkValue = (value: string): string[] => {\n if (value.length <= MAX_COOKIE_SIZE) {\n return [value];\n }\n\n const chunks: string[] = [];\n for (let i = 0; i < value.length; i += MAX_COOKIE_SIZE) {\n chunks.push(value.slice(i, i + MAX_COOKIE_SIZE));\n }\n return chunks;\n};\n\n// Helper function to reassemble chunked cookies\nconst reassembleChunkedCookies = (\n cookies: Record<string, string>,\n baseName: string,\n): string | undefined => {\n // First try the base cookie (non-chunked)\n if (cookies[baseName]) {\n return cookies[baseName];\n }\n\n // Try to reassemble from chunks\n const chunks: string[] = [];\n let index = 0;\n\n while (true) {\n const chunkName = `${baseName}_${index}`;\n if (!cookies[chunkName]) {\n break;\n }\n chunks.push(cookies[chunkName]);\n index++;\n }\n\n return chunks.length > 0 ? chunks.join(\"\") : undefined;\n};\n\n// Helper function to parse cookies from request\nconst parseCookies = (cookieHeader: string): Record<string, string> => {\n const cookies: Record<string, string> = {};\n if (!cookieHeader) return cookies;\n\n cookieHeader.split(\";\").forEach((cookie) => {\n const [name, ...rest] = cookie.trim().split(\"=\");\n if (name && rest.length > 0) {\n cookies[name] = decodeURIComponent(rest.join(\"=\"));\n }\n });\n\n return cookies;\n};\n\nconst parseJWK = (jwk: string): JWK => JSON.parse(atob(jwk)) as JWK;\n\nexport const getReqToken = async (req: Request, env: DefaultEnv) => {\n const token = () => {\n // First try to get token from Authorization header\n const authHeader = req.headers.get(\"Authorization\");\n if (authHeader) {\n return authHeader.split(\" \")[1];\n }\n\n // If not found, try to get from cookie\n const cookieHeader = req.headers.get(\"Cookie\");\n if (cookieHeader) {\n const cookies = parseCookies(cookieHeader);\n return reassembleChunkedCookies(cookies, DECO_APP_AUTH_COOKIE_NAME);\n }\n\n return undefined;\n };\n\n const authToken = token();\n if (!authToken) {\n return undefined;\n }\n\n env.DECO_API_JWT_PUBLIC_KEY &&\n (await jwtVerify(authToken, parseJWK(env.DECO_API_JWT_PUBLIC_KEY), {\n issuer: \"https://api.decocms.com\",\n algorithms: [\"RS256\"],\n typ: \"JWT\",\n }).catch((err) => {\n console.error(\n `[auth-token]: error validating: ${err} ${env.DECO_API_JWT_PUBLIC_KEY}`,\n );\n }));\n\n return authToken;\n};\n\nexport interface AuthCallbackOptions {\n apiUrl?: string;\n appName: string;\n}\n\nexport const handleAuthCallback = async (\n req: Request,\n options: AuthCallbackOptions,\n): Promise<Response> => {\n const url = new URL(req.url);\n const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n\n if (!code) {\n return new Response(\"Missing authorization code\", { status: 400 });\n }\n\n // Parse state to get the next URL\n let next = \"/\";\n if (state) {\n try {\n const parsedState = StateParser.parse(state);\n next = parsedState.next || \"/\";\n } catch {\n // ignore parse errors\n }\n }\n\n try {\n // Exchange code for token\n const apiUrl = options.apiUrl ?? \"https://api.decocms.com\";\n const exchangeResponse = await fetch(`${apiUrl}/apps/code-exchange`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n client_id: options.appName,\n }),\n });\n\n if (!exchangeResponse.ok) {\n console.error(\n \"authentication failed\",\n code,\n options.appName,\n await exchangeResponse.text().catch((_) => \"\"),\n );\n return new Response(\"Authentication failed\", { status: 401 });\n }\n\n const { access_token } = (await exchangeResponse.json()) as {\n access_token: string;\n };\n\n if (!access_token) {\n return new Response(\"No access token received\", { status: 401 });\n }\n\n // Chunk the token if it's too large\n const chunks = chunkValue(access_token);\n const headers = new Headers();\n headers.set(\"Location\", next);\n\n // Set cookies for each chunk\n if (chunks.length === 1) {\n // Single cookie for small tokens\n headers.set(\n \"Set-Cookie\",\n `${DECO_APP_AUTH_COOKIE_NAME}=${access_token}; HttpOnly; SameSite=None; Secure; Path=/`,\n );\n } else {\n // Multiple cookies for large tokens\n chunks.forEach((chunk, index) => {\n headers.append(\n \"Set-Cookie\",\n `${DECO_APP_AUTH_COOKIE_NAME}_${index}=${chunk}; HttpOnly; SameSite=None; Secure; Path=/`,\n );\n });\n }\n\n return new Response(null, {\n status: 302,\n headers,\n });\n } catch (err) {\n return new Response(`Authentication failed ${err}`, { status: 500 });\n }\n};\n\nconst removeAuthCookie = (headers: Headers) => {\n // Clear the base cookie\n headers.append(\n \"Set-Cookie\",\n `${DECO_APP_AUTH_COOKIE_NAME}=; HttpOnly; SameSite=None; Secure; Path=/; Max-Age=0`,\n );\n\n // Clear all potential chunked cookies\n // We'll try to clear up to 10 chunks (which would support tokens up to 40KB)\n // This is a reasonable upper limit\n for (let i = 0; i < 10; i++) {\n headers.append(\n \"Set-Cookie\",\n `${DECO_APP_AUTH_COOKIE_NAME}_${i}=; HttpOnly; SameSite=None; Secure; Path=/; Max-Age=0`,\n );\n }\n};\n\nexport const handleLogout = (req: Request) => {\n const url = new URL(req.url);\n const next = url.searchParams.get(\"next\");\n const redirectTo = new URL(\"/\", url);\n const headers = new Headers();\n removeAuthCookie(headers);\n headers.set(\"Location\", next ?? redirectTo.href);\n return new Response(null, {\n status: 302,\n headers,\n });\n};\n","import type { MCPConnection } from \"./connection.ts\";\nimport type { DefaultEnv, RequestContext } from \"./index.ts\";\nimport { MCPClient } from \"./mcp.ts\";\nimport type {\n BindingBase,\n ContractBinding,\n MCPBinding,\n MCPIntegrationNameBinding,\n} from \"./wrangler.ts\";\n\ninterface IntegrationContext {\n integrationId: string;\n workspace: string;\n branch?: string;\n decoCmsApiUrl?: string;\n}\n\nconst normalizeWorkspace = (workspace: string) => {\n if (workspace.startsWith(\"/users\")) {\n return workspace;\n }\n if (workspace.startsWith(\"/shared\")) {\n return workspace;\n }\n if (workspace.includes(\"/\")) {\n return workspace;\n }\n return `/shared/${workspace}`;\n};\n\n/**\n * Url: /apps/mcp?appName=$appName\n */\nconst createAppsUrl = ({\n appName,\n decoChatApiUrl,\n}: {\n appName: string;\n decoChatApiUrl?: string;\n}) =>\n new URL(\n `/apps/mcp?appName=${appName}`,\n decoChatApiUrl ?? \"https://api.decocms.com\",\n ).href;\n/**\n * Url: /:workspace.root/:workspace.slug/:integrationId/mcp\n */\nconst createIntegrationsUrl = ({\n integrationId,\n workspace,\n decoCmsApiUrl,\n branch,\n}: IntegrationContext) => {\n const base = `${normalizeWorkspace(workspace)}/${integrationId}/mcp`;\n const url = new URL(base, decoCmsApiUrl ?? \"https://api.decocms.com\");\n branch && url.searchParams.set(\"branch\", branch);\n return url.href;\n};\n\ntype WorkspaceClientContext = Omit<\n RequestContext,\n \"ensureAuthenticated\" | \"state\" | \"fetchIntegrationMetadata\"\n>;\nexport const workspaceClient = (\n ctx: WorkspaceClientContext,\n): ReturnType<(typeof MCPClient)[\"forWorkspace\"]> => {\n return MCPClient.forWorkspace(ctx.workspace, ctx.token);\n};\n\nconst mcpClientForAppName = (appName: string, decoChatApiUrl?: string) => {\n const mcpConnection: MCPConnection = {\n type: \"HTTP\",\n url: createAppsUrl({\n appName,\n decoChatApiUrl,\n }),\n };\n\n return MCPClient.forConnection(mcpConnection);\n};\n\nexport const proxyConnectionForId = (\n integrationId: string,\n ctx: Omit<WorkspaceClientContext, \"token\"> & {\n token?: string;\n cookie?: string;\n },\n decoChatApiUrl?: string,\n appName?: string,\n): MCPConnection => {\n let headers: Record<string, string> | undefined = appName\n ? { \"x-caller-app\": appName }\n : undefined;\n if (ctx.cookie) {\n headers ??= {};\n headers.cookie = ctx.cookie;\n }\n return {\n type: \"HTTP\",\n url: createIntegrationsUrl({\n integrationId,\n workspace: ctx.workspace,\n decoCmsApiUrl: decoChatApiUrl,\n branch: ctx.branch,\n }),\n token: ctx.token,\n headers,\n };\n};\nconst mcpClientForIntegrationId = (\n integrationId: string,\n ctx: WorkspaceClientContext,\n decoChatApiUrl?: string,\n appName?: string,\n) => {\n const mcpConnection = proxyConnectionForId(\n integrationId,\n ctx,\n decoChatApiUrl,\n appName,\n );\n\n // TODO(@igorbrasileiro): Switch this proxy to be a proxy that call MCP Client.toolCall from @modelcontextprotocol\n return MCPClient.forConnection(mcpConnection);\n};\n\nfunction mcpClientFromState(\n binding: BindingBase | MCPIntegrationNameBinding,\n env: DefaultEnv,\n) {\n const ctx = env.DECO_REQUEST_CONTEXT;\n const bindingFromState = ctx?.state?.[binding.name];\n const integrationId =\n bindingFromState &&\n typeof bindingFromState === \"object\" &&\n \"value\" in bindingFromState\n ? bindingFromState.value\n : undefined;\n if (typeof integrationId !== \"string\" && \"integration_name\" in binding) {\n // in case of a binding to an app name, we need to use the new apps/mcp endpoint which will proxy the request to the app but without any token\n return mcpClientForAppName(binding.integration_name, env.DECO_API_URL);\n }\n return mcpClientForIntegrationId(\n integrationId,\n ctx,\n env.DECO_API_URL,\n env.DECO_APP_NAME,\n );\n}\n\nexport const createContractBinding = (\n binding: ContractBinding,\n env: DefaultEnv,\n) => {\n return mcpClientFromState(binding, env);\n};\n\nexport const createIntegrationBinding = (\n binding: MCPBinding,\n env: DefaultEnv,\n) => {\n const integrationId =\n \"integration_id\" in binding ? binding.integration_id : undefined;\n if (!integrationId) {\n return mcpClientFromState(binding, env);\n }\n // bindings pointed to an specific integration id are binded using the app deployment workspace\n return mcpClientForIntegrationId(\n integrationId,\n {\n workspace: env.DECO_WORKSPACE,\n token: env.DECO_API_TOKEN,\n branch: env.DECO_REQUEST_CONTEXT?.branch,\n },\n env.DECO_API_URL,\n env.DECO_APP_NAME,\n );\n};\n","/* oxlint-disable no-explicit-any */\nimport { type DefaultEnv, type RequestContext, withBindings } from \"./index.ts\";\nimport {\n type AppContext,\n type CreateMCPServerOptions,\n isWorkflow,\n MCPServer,\n} from \"./mastra.ts\";\n\nimport { D1Store } from \"./d1-store.ts\";\nimport { Mastra, type Workflow as MastraWorkflow } from \"@mastra/core\";\nimport { RuntimeContext } from \"@mastra/core/di\";\nimport { DurableObject } from \"./cf-imports.ts\";\nimport { State } from \"./state.ts\";\n\nconst createRuntimeContext = (env: DefaultEnv, ctx: DurableObjectState) => {\n const runtimeContext = new RuntimeContext<AppContext>();\n runtimeContext.set(\"env\", env);\n runtimeContext.set(\"ctx\", ctx);\n return runtimeContext;\n};\nexport interface StartWorkflowArgs {\n workflowId: string;\n args: unknown;\n runId?: string;\n ctx: RequestContext;\n}\n\nexport interface CancelWorkflowArgs {\n workflowId: string;\n runId?: string;\n ctx: RequestContext;\n}\n\nexport interface ResumeWorkflowArgs {\n workflowId: string;\n runId?: string;\n resumeData: unknown;\n stepId: string;\n ctx: RequestContext;\n}\nexport interface WorkflowDO extends Rpc.DurableObjectBranded {\n start: (args: StartWorkflowArgs) => Promise<{ runId: string }>;\n cancel: (args: CancelWorkflowArgs) => Promise<{ cancelled: boolean }>;\n resume: (args: ResumeWorkflowArgs) => Promise<{ resumed: boolean }>;\n}\n\nexport const Workflow = (\n server: MCPServer<any, any>,\n workflows?: CreateMCPServerOptions[\"workflows\"],\n) => {\n return class Workflow\n extends DurableObject<DefaultEnv>\n implements WorkflowDO\n {\n constructor(\n // @ts-ignore: This is a workaround to fix the type error\n // oxlint-disable-next-line ban-types\n public override ctx: DurableObjectState<{}>,\n public override env: DefaultEnv,\n ) {\n super(ctx, env);\n }\n\n bindings(ctx: RequestContext) {\n return withBindings<DefaultEnv>({\n env: this.env,\n server,\n tokenOrContext: ctx,\n });\n }\n\n runWithContext<T>(\n ctx: RequestContext,\n f: (ctx: DefaultEnv) => Promise<T>,\n ): Promise<T> {\n const bindings = this.bindings(ctx);\n return State.run(\n {\n ctx: {\n waitUntil: this.ctx.waitUntil.bind(this.ctx),\n },\n env: this.bindings(ctx),\n },\n () => f(bindings),\n );\n }\n\n async #getWorkflow(\n workflowId: string,\n bindings: DefaultEnv,\n ): Promise<{ workflow: MastraWorkflow }> {\n const bindedWorkflows = await Promise.all(\n workflows?.map(async (workflow) => {\n const workflowResult = workflow(bindings);\n if (isWorkflow(workflowResult)) {\n return { workflow: workflowResult };\n }\n\n return await workflowResult;\n }) ?? [],\n );\n const workflowsMap = Object.fromEntries(\n bindedWorkflows.map((w) => [w.workflow.id, w.workflow]),\n );\n const d1Storage = new D1Store({\n client: bindings.DECO_WORKSPACE_DB,\n });\n const mastra = new Mastra({\n storage: d1Storage,\n workflows: {\n [workflowId]: workflowsMap[workflowId],\n },\n telemetry: {\n enabled: true,\n serviceName: `app-${\n this.env.DECO_CHAT_SCRIPT_SLUG ?? this.env.DECO_APP_SLUG\n }`,\n },\n });\n // since mastra workflows are thenables, so we need to wrap then into an object\n return { workflow: mastra.getWorkflow(workflowId) };\n }\n\n start({ workflowId, runId, args, ctx }: StartWorkflowArgs) {\n return this.runWithContext(ctx, async (bindings) => {\n const { workflow } = await this.#getWorkflow(workflowId, bindings);\n\n const run = await workflow.createRunAsync({\n runId: this.ctx.id.name ?? runId,\n });\n\n const promise = run.start({\n inputData: args,\n runtimeContext: createRuntimeContext(bindings, this.ctx),\n });\n\n this.ctx.waitUntil(\n promise\n .then(() => {\n console.debug(\"workflow\", run.runId, \"finished successfully\");\n })\n .catch((e) => {\n console.error(\"workflow\", run.runId, \"finished with error\", e);\n throw e;\n }),\n );\n\n return {\n runId: run.runId,\n };\n });\n }\n\n cancel({ workflowId, runId, ctx }: CancelWorkflowArgs) {\n return this.runWithContext(ctx, async () => {\n const { workflow } = await this.#getWorkflow(\n workflowId,\n this.bindings(ctx),\n );\n const run = await workflow.createRunAsync({\n runId: this.ctx.id.name ?? runId,\n });\n\n this.ctx.waitUntil(run.cancel());\n\n return {\n cancelled: true,\n };\n });\n }\n resume({ workflowId, runId, resumeData, stepId, ctx }: ResumeWorkflowArgs) {\n return this.runWithContext(ctx, async (bindings) => {\n const { workflow } = await this.#getWorkflow(workflowId, bindings);\n const run = await workflow.createRunAsync({\n runId: this.ctx.id.name ?? runId,\n });\n\n this.ctx.waitUntil(\n run.resume({\n resumeData,\n step: stepId,\n runtimeContext: createRuntimeContext(bindings, this.ctx),\n }),\n );\n\n return {\n resumed: true,\n };\n });\n }\n };\n};\n","/* oxlint-disable no-explicit-any */\nimport type { ExecutionContext } from \"@cloudflare/workers-types\";\nimport { decodeJwt } from \"jose\";\nimport type { z } from \"zod\";\nimport {\n getReqToken,\n handleAuthCallback,\n handleLogout,\n StateParser,\n} from \"./auth.ts\";\nimport {\n createContractBinding,\n createIntegrationBinding,\n workspaceClient,\n} from \"./bindings.ts\";\nimport { DeconfigResource } from \"./bindings/deconfig/index.ts\";\nimport { DECO_MCP_CLIENT_HEADER } from \"./client.ts\";\nimport { DeprecatedEnv } from \"./deprecated.ts\";\nimport {\n createMCPServer,\n type CreateMCPServerOptions,\n MCPServer,\n} from \"./mastra.ts\";\nimport { MCPClient, type QueryResult } from \"./mcp.ts\";\nimport { State } from \"./state.ts\";\nimport type { WorkflowDO } from \"./workflow.ts\";\nimport { Workflow } from \"./workflow.ts\";\nimport type { Binding, ContractBinding, MCPBinding } from \"./wrangler.ts\";\nexport { proxyConnectionForId } from \"./bindings.ts\";\nexport {\n createMCPFetchStub,\n type CreateStubAPIOptions,\n type ToolBinder,\n} from \"./mcp.ts\";\nexport interface WorkspaceDB {\n query: (params: {\n sql: string;\n params: string[];\n }) => Promise<{ result: QueryResult[] }>;\n}\n\nexport interface DefaultEnv<TSchema extends z.ZodTypeAny = any>\n extends DeprecatedEnv<TSchema> {\n DECO_REQUEST_CONTEXT: RequestContext<TSchema>;\n DECO_APP_NAME: string;\n DECO_APP_SLUG: string;\n DECO_APP_ENTRYPOINT: string;\n DECO_API_URL?: string;\n DECO_WORKSPACE: string;\n DECO_API_JWT_PUBLIC_KEY: string;\n DECO_APP_DEPLOYMENT_ID: string;\n DECO_BINDINGS: string;\n DECO_API_TOKEN: string;\n DECO_WORKFLOW_DO: DurableObjectNamespace<WorkflowDO>;\n DECO_WORKSPACE_DB: WorkspaceDB & {\n forContext: (ctx: RequestContext) => WorkspaceDB;\n };\n IS_LOCAL: boolean;\n [key: string]: unknown;\n}\n\nexport interface BindingsObject {\n bindings?: Binding[];\n}\n\nexport const WorkersMCPBindings = {\n parse: (bindings?: string): Binding[] => {\n if (!bindings) return [];\n try {\n return JSON.parse(atob(bindings)) as Binding[];\n } catch {\n return [];\n }\n },\n stringify: (bindings: Binding[]): string => {\n return btoa(JSON.stringify(bindings));\n },\n};\n\nexport interface UserDefaultExport<\n TUserEnv = Record<string, unknown>,\n TSchema extends z.ZodTypeAny = never,\n TEnv = TUserEnv & DefaultEnv<TSchema>,\n> extends CreateMCPServerOptions<TEnv, TSchema> {\n fetch?: (\n req: Request,\n env: TEnv,\n ctx: ExecutionContext,\n ) => Promise<Response> | Response;\n}\n\n// 1. Map binding type to its interface\ninterface BindingTypeMap {\n mcp: MCPBinding;\n contract: ContractBinding;\n}\n\nexport interface User {\n id: string;\n email: string;\n workspace: string;\n user_metadata: {\n avatar_url: string;\n full_name: string;\n picture: string;\n [key: string]: unknown;\n };\n}\n\nexport interface RequestContext<TSchema extends z.ZodTypeAny = any> {\n state: z.infer<TSchema>;\n branch?: string;\n token: string;\n workspace: string;\n ensureAuthenticated: (options?: {\n workspaceHint?: string;\n }) => User | undefined;\n callerApp?: string;\n integrationId?: string;\n}\n\n// 2. Map binding type to its creator function\ntype CreatorByType = {\n [K in keyof BindingTypeMap]: (\n value: BindingTypeMap[K],\n env: DefaultEnv,\n ) => unknown;\n};\n\n// 3. Strongly type creatorByType\nconst creatorByType: CreatorByType = {\n mcp: createIntegrationBinding,\n contract: createContractBinding,\n};\n\nconst withDefaultBindings = ({\n env,\n server,\n ctx,\n url,\n}: {\n env: DefaultEnv;\n server: MCPServer<any, any>;\n ctx: RequestContext;\n url?: string;\n}) => {\n const client = workspaceClient(ctx);\n const createWorkspaceDB = (ctx: RequestContext): WorkspaceDB => {\n const client = workspaceClient(ctx);\n return {\n query: ({ sql, params }) => {\n return client.DATABASES_RUN_SQL({\n sql,\n params,\n });\n },\n };\n };\n env[\"SELF\"] = new Proxy(\n {},\n {\n get: (_, prop) => {\n if (prop === \"toJSON\") {\n return null;\n }\n\n return async (args: unknown) => {\n return await server.callTool({\n toolCallId: prop as string,\n toolCallInput: args,\n });\n };\n },\n },\n );\n\n const workspaceDbBinding = {\n ...createWorkspaceDB(ctx),\n forContext: createWorkspaceDB,\n };\n\n env[\"DECO_API\"] = MCPClient;\n env[\"DECO_WORKSPACE_API\"] = client;\n env[\"DECO_WORKSPACE_DB\"] = workspaceDbBinding;\n\n // Backwards compatibility\n env[\"DECO_CHAT_API\"] = MCPClient;\n env[\"DECO_CHAT_WORKSPACE_API\"] = client;\n env[\"DECO_CHAT_WORKSPACE_DB\"] = workspaceDbBinding;\n\n env[\"IS_LOCAL\"] =\n (url?.startsWith(\"http://localhost\") ||\n url?.startsWith(\"http://127.0.0.1\")) ??\n false;\n};\n\nexport class UnauthorizedError extends Error {\n constructor(\n message: string,\n public redirectTo: URL,\n ) {\n super(message);\n this.name = \"UnauthorizedError\";\n }\n}\n\nconst AUTH_CALLBACK_ENDPOINT = \"/oauth/callback\";\nconst AUTH_START_ENDPOINT = \"/oauth/start\";\nconst AUTH_LOGOUT_ENDPOINT = \"/oauth/logout\";\nconst AUTHENTICATED = (user?: unknown, workspace?: string) => () => {\n return {\n ...((user as User) ?? {}),\n workspace,\n } as User;\n};\n\nexport const withBindings = <TEnv>({\n env: _env,\n server,\n tokenOrContext,\n origin,\n url,\n branch,\n}: {\n env: TEnv;\n server: MCPServer<TEnv, any>;\n tokenOrContext?: string | RequestContext;\n origin?: string | null;\n url?: string;\n branch?: string | null;\n}): TEnv => {\n branch ??= undefined;\n const env = _env as DefaultEnv<any>;\n\n const apiUrl = env.DECO_API_URL ?? \"https://api.decocms.com\";\n let context;\n if (typeof tokenOrContext === \"string\") {\n const decoded = decodeJwt(tokenOrContext);\n const workspace = decoded.aud as string;\n\n context = {\n state: decoded.state as Record<string, unknown>,\n token: tokenOrContext,\n integrationId: decoded.integrationId as string,\n workspace,\n ensureAuthenticated: AUTHENTICATED(decoded.user, workspace),\n branch,\n } as RequestContext<any>;\n } else if (typeof tokenOrContext === \"object\") {\n context = tokenOrContext;\n const decoded = decodeJwt(tokenOrContext.token);\n const workspace = decoded.aud as string;\n const appName = decoded.appName as string | undefined;\n context.callerApp = appName;\n context.integrationId ??= decoded.integrationId as string;\n context.ensureAuthenticated = AUTHENTICATED(decoded.user, workspace);\n } else {\n context = {\n state: undefined,\n token: env.DECO_API_TOKEN,\n workspace: env.DECO_WORKSPACE,\n branch,\n ensureAuthenticated: (options?: { workspaceHint?: string }) => {\n const workspaceHint = options?.workspaceHint ?? env.DECO_WORKSPACE;\n const authUri = new URL(\"/apps/oauth\", apiUrl);\n authUri.searchParams.set(\"client_id\", env.DECO_APP_NAME);\n authUri.searchParams.set(\n \"redirect_uri\",\n new URL(AUTH_CALLBACK_ENDPOINT, origin ?? env.DECO_APP_ENTRYPOINT)\n .href,\n );\n workspaceHint &&\n authUri.searchParams.set(\"workspace_hint\", workspaceHint);\n throw new UnauthorizedError(\"Unauthorized\", authUri);\n },\n };\n }\n\n env.DECO_REQUEST_CONTEXT = context;\n // Backwards compatibility\n env.DECO_CHAT_REQUEST_CONTEXT = context;\n const bindings = WorkersMCPBindings.parse(env.DECO_BINDINGS);\n\n for (const binding of bindings) {\n env[binding.name] = creatorByType[binding.type](binding as any, env);\n }\n\n withDefaultBindings({\n env,\n server,\n ctx: env.DECO_REQUEST_CONTEXT,\n url,\n });\n\n return env as TEnv;\n};\n\nexport const withRuntime = <TEnv, TSchema extends z.ZodTypeAny = never>(\n userFns: UserDefaultExport<TEnv, TSchema>,\n): ExportedHandler<TEnv & DefaultEnv<TSchema>> & {\n Workflow: ReturnType<typeof Workflow>;\n} => {\n const server = createMCPServer<TEnv, TSchema>(userFns);\n const fetcher = async (\n req: Request,\n env: TEnv & DefaultEnv<TSchema>,\n ctx: ExecutionContext,\n ) => {\n const url = new URL(req.url);\n if (url.pathname === AUTH_CALLBACK_ENDPOINT) {\n return handleAuthCallback(req, {\n apiUrl: env.DECO_API_URL,\n appName: env.DECO_APP_NAME,\n });\n }\n if (url.pathname === AUTH_START_ENDPOINT) {\n env.DECO_REQUEST_CONTEXT.ensureAuthenticated();\n const redirectTo = new URL(\"/\", url);\n const next = url.searchParams.get(\"next\");\n return Response.redirect(next ?? redirectTo, 302);\n }\n if (url.pathname === AUTH_LOGOUT_ENDPOINT) {\n return handleLogout(req);\n }\n if (url.pathname === \"/mcp\") {\n return server.fetch(req, env, ctx);\n }\n\n if (url.pathname.startsWith(\"/mcp/call-tool\")) {\n const toolCallId = url.pathname.split(\"/\").pop();\n if (!toolCallId) {\n return new Response(\"Not found\", { status: 404 });\n }\n const toolCallInput = await req.json();\n const result = await server.callTool({\n toolCallId,\n toolCallInput,\n });\n\n return new Response(JSON.stringify(result), {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n }\n\n if (url.pathname.startsWith(DeconfigResource.WatchPathNameBase)) {\n return DeconfigResource.watchAPI(req, env);\n }\n return (\n userFns.fetch?.(req, env, ctx) ||\n new Response(\"Not found\", { status: 404 })\n );\n };\n return {\n Workflow: Workflow(server, userFns.workflows),\n fetch: async (\n req: Request,\n env: TEnv & DefaultEnv<TSchema>,\n ctx: ExecutionContext,\n ) => {\n const referer = req.headers.get(\"referer\");\n const isFetchRequest = req.headers.has(DECO_MCP_CLIENT_HEADER);\n\n try {\n const bindings = withBindings({\n env,\n server,\n branch:\n req.headers.get(\"x-deco-branch\") ??\n new URL(req.url).searchParams.get(\"__b\"),\n tokenOrContext: await getReqToken(req, env),\n origin:\n referer ?? req.headers.get(\"origin\") ?? new URL(req.url).origin,\n url: req.url,\n });\n return await State.run(\n { req, env: bindings, ctx },\n async () => await fetcher(req, bindings, ctx),\n );\n } catch (error) {\n if (error instanceof UnauthorizedError) {\n if (!isFetchRequest) {\n const url = new URL(req.url);\n error.redirectTo.searchParams.set(\n \"state\",\n StateParser.stringify({\n next: url.searchParams.get(\"next\") ?? referer ?? req.url,\n }),\n );\n return Response.redirect(error.redirectTo, 302);\n }\n return new Response(null, { status: 401 });\n }\n throw error;\n }\n },\n };\n};\n\nexport {\n type Contract,\n type Migration,\n type WranglerConfig,\n} from \"./wrangler.ts\";\n"]}
1
+ {"version":3,"sources":["../src/auth.ts","../src/bindings.ts","../src/workflow.ts","../src/index.ts"],"names":["ctx","client"],"mappings":"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","file":"index.js","sourcesContent":["import { JWK, jwtVerify } from \"jose\";\nimport type { DefaultEnv } from \"./index.ts\";\n\nconst DECO_APP_AUTH_COOKIE_NAME = \"deco_page_auth\";\nconst MAX_COOKIE_SIZE = 4000; // Leave some buffer below the 4096 limit\n\nexport interface State {\n next?: string;\n}\n\nexport const StateParser = {\n parse: (state: string) => {\n return JSON.parse(decodeURIComponent(atob(state))) as State;\n },\n stringify: (state: State) => {\n return btoa(encodeURIComponent(JSON.stringify(state)));\n },\n};\n\n// Helper function to chunk a value into multiple cookies\nconst chunkValue = (value: string): string[] => {\n if (value.length <= MAX_COOKIE_SIZE) {\n return [value];\n }\n\n const chunks: string[] = [];\n for (let i = 0; i < value.length; i += MAX_COOKIE_SIZE) {\n chunks.push(value.slice(i, i + MAX_COOKIE_SIZE));\n }\n return chunks;\n};\n\n// Helper function to reassemble chunked cookies\nconst reassembleChunkedCookies = (\n cookies: Record<string, string>,\n baseName: string,\n): string | undefined => {\n // First try the base cookie (non-chunked)\n if (cookies[baseName]) {\n return cookies[baseName];\n }\n\n // Try to reassemble from chunks\n const chunks: string[] = [];\n let index = 0;\n\n while (true) {\n const chunkName = `${baseName}_${index}`;\n if (!cookies[chunkName]) {\n break;\n }\n chunks.push(cookies[chunkName]);\n index++;\n }\n\n return chunks.length > 0 ? chunks.join(\"\") : undefined;\n};\n\n// Helper function to parse cookies from request\nconst parseCookies = (cookieHeader: string): Record<string, string> => {\n const cookies: Record<string, string> = {};\n if (!cookieHeader) return cookies;\n\n cookieHeader.split(\";\").forEach((cookie) => {\n const [name, ...rest] = cookie.trim().split(\"=\");\n if (name && rest.length > 0) {\n cookies[name] = decodeURIComponent(rest.join(\"=\"));\n }\n });\n\n return cookies;\n};\n\nconst parseJWK = (jwk: string): JWK => JSON.parse(atob(jwk)) as JWK;\n\nexport const getReqToken = async (req: Request, env: DefaultEnv) => {\n const token = () => {\n // First try to get token from Authorization header\n const authHeader = req.headers.get(\"Authorization\");\n if (authHeader) {\n return authHeader.split(\" \")[1];\n }\n\n // If not found, try to get from cookie\n const cookieHeader = req.headers.get(\"Cookie\");\n if (cookieHeader) {\n const cookies = parseCookies(cookieHeader);\n return reassembleChunkedCookies(cookies, DECO_APP_AUTH_COOKIE_NAME);\n }\n\n return undefined;\n };\n\n const authToken = token();\n if (!authToken) {\n return undefined;\n }\n\n env.DECO_API_JWT_PUBLIC_KEY &&\n (await jwtVerify(authToken, parseJWK(env.DECO_API_JWT_PUBLIC_KEY), {\n issuer: \"https://api.decocms.com\",\n algorithms: [\"RS256\"],\n typ: \"JWT\",\n }).catch((err) => {\n console.error(\n `[auth-token]: error validating: ${err} ${env.DECO_API_JWT_PUBLIC_KEY}`,\n );\n }));\n\n return authToken;\n};\n\nexport interface AuthCallbackOptions {\n apiUrl?: string;\n appName: string;\n}\n\nexport const handleAuthCallback = async (\n req: Request,\n options: AuthCallbackOptions,\n): Promise<Response> => {\n const url = new URL(req.url);\n const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n\n if (!code) {\n return new Response(\"Missing authorization code\", { status: 400 });\n }\n\n // Parse state to get the next URL\n let next = \"/\";\n if (state) {\n try {\n const parsedState = StateParser.parse(state);\n next = parsedState.next || \"/\";\n } catch {\n // ignore parse errors\n }\n }\n\n try {\n // Exchange code for token\n const apiUrl = options.apiUrl ?? \"https://api.decocms.com\";\n const exchangeResponse = await fetch(`${apiUrl}/apps/code-exchange`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n code,\n client_id: options.appName,\n }),\n });\n\n if (!exchangeResponse.ok) {\n console.error(\n \"authentication failed\",\n code,\n options.appName,\n await exchangeResponse.text().catch((_) => \"\"),\n );\n return new Response(\"Authentication failed\", { status: 401 });\n }\n\n const { access_token } = (await exchangeResponse.json()) as {\n access_token: string;\n };\n\n if (!access_token) {\n return new Response(\"No access token received\", { status: 401 });\n }\n\n // Chunk the token if it's too large\n const chunks = chunkValue(access_token);\n const headers = new Headers();\n headers.set(\"Location\", next);\n\n // Set cookies for each chunk\n if (chunks.length === 1) {\n // Single cookie for small tokens\n headers.set(\n \"Set-Cookie\",\n `${DECO_APP_AUTH_COOKIE_NAME}=${access_token}; HttpOnly; SameSite=None; Secure; Path=/`,\n );\n } else {\n // Multiple cookies for large tokens\n chunks.forEach((chunk, index) => {\n headers.append(\n \"Set-Cookie\",\n `${DECO_APP_AUTH_COOKIE_NAME}_${index}=${chunk}; HttpOnly; SameSite=None; Secure; Path=/`,\n );\n });\n }\n\n return new Response(null, {\n status: 302,\n headers,\n });\n } catch (err) {\n return new Response(`Authentication failed ${err}`, { status: 500 });\n }\n};\n\nconst removeAuthCookie = (headers: Headers) => {\n // Clear the base cookie\n headers.append(\n \"Set-Cookie\",\n `${DECO_APP_AUTH_COOKIE_NAME}=; HttpOnly; SameSite=None; Secure; Path=/; Max-Age=0`,\n );\n\n // Clear all potential chunked cookies\n // We'll try to clear up to 10 chunks (which would support tokens up to 40KB)\n // This is a reasonable upper limit\n for (let i = 0; i < 10; i++) {\n headers.append(\n \"Set-Cookie\",\n `${DECO_APP_AUTH_COOKIE_NAME}_${i}=; HttpOnly; SameSite=None; Secure; Path=/; Max-Age=0`,\n );\n }\n};\n\nexport const handleLogout = (req: Request) => {\n const url = new URL(req.url);\n const next = url.searchParams.get(\"next\");\n const redirectTo = new URL(\"/\", url);\n const headers = new Headers();\n removeAuthCookie(headers);\n headers.set(\"Location\", next ?? redirectTo.href);\n return new Response(null, {\n status: 302,\n headers,\n });\n};\n","import type { MCPConnection } from \"./connection.ts\";\nimport type { DefaultEnv, RequestContext } from \"./index.ts\";\nimport { MCPClient } from \"./mcp.ts\";\nimport type {\n BindingBase,\n ContractBinding,\n MCPBinding,\n MCPIntegrationNameBinding,\n} from \"./wrangler.ts\";\n\ninterface IntegrationContext {\n integrationId: string;\n workspace: string;\n branch?: string;\n decoCmsApiUrl?: string;\n}\n\nconst normalizeWorkspace = (workspace: string) => {\n if (workspace.startsWith(\"/users\")) {\n return workspace;\n }\n if (workspace.startsWith(\"/shared\")) {\n return workspace;\n }\n if (workspace.includes(\"/\")) {\n return workspace;\n }\n return `/shared/${workspace}`;\n};\n\n/**\n * Url: /apps/mcp?appName=$appName\n */\nconst createAppsUrl = ({\n appName,\n decoChatApiUrl,\n}: {\n appName: string;\n decoChatApiUrl?: string;\n}) =>\n new URL(\n `/apps/mcp?appName=${appName}`,\n decoChatApiUrl ?? \"https://api.decocms.com\",\n ).href;\n/**\n * Url: /:workspace.root/:workspace.slug/:integrationId/mcp\n */\nconst createIntegrationsUrl = ({\n integrationId,\n workspace,\n decoCmsApiUrl,\n branch,\n}: IntegrationContext) => {\n const base = `${normalizeWorkspace(workspace)}/${integrationId}/mcp`;\n const url = new URL(base, decoCmsApiUrl ?? \"https://api.decocms.com\");\n branch && url.searchParams.set(\"branch\", branch);\n return url.href;\n};\n\ntype WorkspaceClientContext = Omit<\n RequestContext,\n \"ensureAuthenticated\" | \"state\" | \"fetchIntegrationMetadata\"\n>;\nexport const workspaceClient = (\n ctx: WorkspaceClientContext,\n): ReturnType<(typeof MCPClient)[\"forWorkspace\"]> => {\n return MCPClient.forWorkspace(ctx.workspace, ctx.token);\n};\n\nconst mcpClientForAppName = (appName: string, decoChatApiUrl?: string) => {\n const mcpConnection: MCPConnection = {\n type: \"HTTP\",\n url: createAppsUrl({\n appName,\n decoChatApiUrl,\n }),\n };\n\n return MCPClient.forConnection(mcpConnection);\n};\n\nexport const proxyConnectionForId = (\n integrationId: string,\n ctx: Omit<WorkspaceClientContext, \"token\"> & {\n token?: string;\n cookie?: string;\n },\n decoChatApiUrl?: string,\n appName?: string,\n): MCPConnection => {\n let headers: Record<string, string> | undefined = appName\n ? { \"x-caller-app\": appName }\n : undefined;\n if (ctx.cookie) {\n headers ??= {};\n headers.cookie = ctx.cookie;\n }\n return {\n type: \"HTTP\",\n url: createIntegrationsUrl({\n integrationId,\n workspace: ctx.workspace,\n decoCmsApiUrl: decoChatApiUrl,\n branch: ctx.branch,\n }),\n token: ctx.token,\n headers,\n };\n};\nconst mcpClientForIntegrationId = (\n integrationId: string,\n ctx: WorkspaceClientContext,\n decoChatApiUrl?: string,\n appName?: string,\n) => {\n const mcpConnection = proxyConnectionForId(\n integrationId,\n ctx,\n decoChatApiUrl,\n appName,\n );\n\n // TODO(@igorbrasileiro): Switch this proxy to be a proxy that call MCP Client.toolCall from @modelcontextprotocol\n return MCPClient.forConnection(mcpConnection);\n};\n\nfunction mcpClientFromState(\n binding: BindingBase | MCPIntegrationNameBinding,\n env: DefaultEnv,\n) {\n const ctx = env.DECO_REQUEST_CONTEXT;\n const bindingFromState = ctx?.state?.[binding.name];\n const integrationId =\n bindingFromState &&\n typeof bindingFromState === \"object\" &&\n \"value\" in bindingFromState\n ? bindingFromState.value\n : undefined;\n if (typeof integrationId !== \"string\" && \"integration_name\" in binding) {\n // in case of a binding to an app name, we need to use the new apps/mcp endpoint which will proxy the request to the app but without any token\n return mcpClientForAppName(binding.integration_name, env.DECO_API_URL);\n }\n return mcpClientForIntegrationId(\n integrationId,\n ctx,\n env.DECO_API_URL,\n env.DECO_APP_NAME,\n );\n}\n\nexport const createContractBinding = (\n binding: ContractBinding,\n env: DefaultEnv,\n) => {\n return mcpClientFromState(binding, env);\n};\n\nexport const createIntegrationBinding = (\n binding: MCPBinding,\n env: DefaultEnv,\n) => {\n const integrationId =\n \"integration_id\" in binding ? binding.integration_id : undefined;\n if (!integrationId) {\n return mcpClientFromState(binding, env);\n }\n // bindings pointed to an specific integration id are binded using the app deployment workspace\n return mcpClientForIntegrationId(\n integrationId,\n {\n workspace: env.DECO_WORKSPACE,\n token: env.DECO_API_TOKEN,\n branch: env.DECO_REQUEST_CONTEXT?.branch,\n },\n env.DECO_API_URL,\n env.DECO_APP_NAME,\n );\n};\n","/* oxlint-disable no-explicit-any */\nimport { type DefaultEnv, type RequestContext, withBindings } from \"./index.ts\";\nimport {\n type AppContext,\n type CreateMCPServerOptions,\n isWorkflow,\n MCPServer,\n} from \"./mastra.ts\";\n\nimport { D1Store } from \"./d1-store.ts\";\nimport { Mastra, type Workflow as MastraWorkflow } from \"@mastra/core\";\nimport { RuntimeContext } from \"@mastra/core/di\";\nimport { DurableObject } from \"./cf-imports.ts\";\nimport { State } from \"./state.ts\";\n\nconst createRuntimeContext = (env: DefaultEnv, ctx: DurableObjectState) => {\n const runtimeContext = new RuntimeContext<AppContext>();\n runtimeContext.set(\"env\", env);\n runtimeContext.set(\"ctx\", ctx);\n return runtimeContext;\n};\nexport interface StartWorkflowArgs {\n workflowId: string;\n args: unknown;\n runId?: string;\n ctx: RequestContext;\n}\n\nexport interface CancelWorkflowArgs {\n workflowId: string;\n runId?: string;\n ctx: RequestContext;\n}\n\nexport interface ResumeWorkflowArgs {\n workflowId: string;\n runId?: string;\n resumeData: unknown;\n stepId: string;\n ctx: RequestContext;\n}\nexport interface WorkflowDO extends Rpc.DurableObjectBranded {\n start: (args: StartWorkflowArgs) => Promise<{ runId: string }>;\n cancel: (args: CancelWorkflowArgs) => Promise<{ cancelled: boolean }>;\n resume: (args: ResumeWorkflowArgs) => Promise<{ resumed: boolean }>;\n}\n\nexport const Workflow = (\n server: MCPServer<any, any>,\n workflows?: CreateMCPServerOptions[\"workflows\"],\n) => {\n return class Workflow\n extends DurableObject<DefaultEnv>\n implements WorkflowDO\n {\n constructor(\n // @ts-ignore: This is a workaround to fix the type error\n // oxlint-disable-next-line ban-types\n public override ctx: DurableObjectState<{}>,\n public override env: DefaultEnv,\n ) {\n super(ctx, env);\n }\n\n bindings(ctx: RequestContext) {\n return withBindings<DefaultEnv>({\n env: this.env,\n server,\n tokenOrContext: ctx,\n });\n }\n\n runWithContext<T>(\n ctx: RequestContext,\n f: (ctx: DefaultEnv) => Promise<T>,\n ): Promise<T> {\n const bindings = this.bindings(ctx);\n return State.run(\n {\n ctx: {\n waitUntil: this.ctx.waitUntil.bind(this.ctx),\n },\n env: this.bindings(ctx),\n },\n () => f(bindings),\n );\n }\n\n async #getWorkflow(\n workflowId: string,\n bindings: DefaultEnv,\n ): Promise<{ workflow: MastraWorkflow }> {\n const bindedWorkflows = await Promise.all(\n workflows?.map(async (workflow) => {\n const workflowResult = workflow(bindings);\n if (isWorkflow(workflowResult)) {\n return { workflow: workflowResult };\n }\n\n return await workflowResult;\n }) ?? [],\n );\n const workflowsMap = Object.fromEntries(\n bindedWorkflows.map((w) => [w.workflow.id, w.workflow]),\n );\n const d1Storage = new D1Store({\n client: bindings.DECO_WORKSPACE_DB,\n });\n const mastra = new Mastra({\n storage: d1Storage,\n workflows: {\n [workflowId]: workflowsMap[workflowId],\n },\n telemetry: {\n enabled: true,\n serviceName: `app-${\n this.env.DECO_CHAT_SCRIPT_SLUG ?? this.env.DECO_APP_SLUG\n }`,\n },\n });\n // since mastra workflows are thenables, so we need to wrap then into an object\n return { workflow: mastra.getWorkflow(workflowId) };\n }\n\n start({ workflowId, runId, args, ctx }: StartWorkflowArgs) {\n return this.runWithContext(ctx, async (bindings) => {\n const { workflow } = await this.#getWorkflow(workflowId, bindings);\n\n const run = await workflow.createRunAsync({\n runId: this.ctx.id.name ?? runId,\n });\n\n const promise = run.start({\n inputData: args,\n runtimeContext: createRuntimeContext(bindings, this.ctx),\n });\n\n this.ctx.waitUntil(\n promise\n .then(() => {\n console.debug(\"workflow\", run.runId, \"finished successfully\");\n })\n .catch((e) => {\n console.error(\"workflow\", run.runId, \"finished with error\", e);\n throw e;\n }),\n );\n\n return {\n runId: run.runId,\n };\n });\n }\n\n cancel({ workflowId, runId, ctx }: CancelWorkflowArgs) {\n return this.runWithContext(ctx, async () => {\n const { workflow } = await this.#getWorkflow(\n workflowId,\n this.bindings(ctx),\n );\n const run = await workflow.createRunAsync({\n runId: this.ctx.id.name ?? runId,\n });\n\n this.ctx.waitUntil(run.cancel());\n\n return {\n cancelled: true,\n };\n });\n }\n resume({ workflowId, runId, resumeData, stepId, ctx }: ResumeWorkflowArgs) {\n return this.runWithContext(ctx, async (bindings) => {\n const { workflow } = await this.#getWorkflow(workflowId, bindings);\n const run = await workflow.createRunAsync({\n runId: this.ctx.id.name ?? runId,\n });\n\n this.ctx.waitUntil(\n run.resume({\n resumeData,\n step: stepId,\n runtimeContext: createRuntimeContext(bindings, this.ctx),\n }),\n );\n\n return {\n resumed: true,\n };\n });\n }\n };\n};\n","/* oxlint-disable no-explicit-any */\nimport type { ExecutionContext } from \"@cloudflare/workers-types\";\nimport { decodeJwt } from \"jose\";\nimport type { z } from \"zod\";\nimport {\n getReqToken,\n handleAuthCallback,\n handleLogout,\n StateParser,\n} from \"./auth.ts\";\nimport {\n createContractBinding,\n createIntegrationBinding,\n workspaceClient,\n} from \"./bindings.ts\";\nimport { DeconfigResource } from \"./bindings/deconfig/index.ts\";\nimport { DECO_MCP_CLIENT_HEADER } from \"./client.ts\";\nimport { DeprecatedEnv } from \"./deprecated.ts\";\nimport {\n createMCPServer,\n type CreateMCPServerOptions,\n MCPServer,\n} from \"./mastra.ts\";\nimport { MCPClient, type QueryResult } from \"./mcp.ts\";\nimport { State } from \"./state.ts\";\nimport type { WorkflowDO } from \"./workflow.ts\";\nimport { Workflow } from \"./workflow.ts\";\nimport type { Binding, ContractBinding, MCPBinding } from \"./wrangler.ts\";\nexport { proxyConnectionForId } from \"./bindings.ts\";\nexport {\n createMCPFetchStub,\n type CreateStubAPIOptions,\n type ToolBinder,\n} from \"./mcp.ts\";\nexport interface WorkspaceDB {\n query: (params: {\n sql: string;\n params: string[];\n }) => Promise<{ result: QueryResult[] }>;\n}\n\nexport interface DefaultEnv<TSchema extends z.ZodTypeAny = any>\n extends DeprecatedEnv<TSchema> {\n DECO_REQUEST_CONTEXT: RequestContext<TSchema>;\n DECO_APP_NAME: string;\n DECO_APP_SLUG: string;\n DECO_APP_ENTRYPOINT: string;\n DECO_API_URL?: string;\n DECO_WORKSPACE: string;\n DECO_API_JWT_PUBLIC_KEY: string;\n DECO_APP_DEPLOYMENT_ID: string;\n DECO_BINDINGS: string;\n DECO_API_TOKEN: string;\n DECO_WORKFLOW_DO: DurableObjectNamespace<WorkflowDO>;\n DECO_WORKSPACE_DB: WorkspaceDB & {\n forContext: (ctx: RequestContext) => WorkspaceDB;\n };\n IS_LOCAL: boolean;\n [key: string]: unknown;\n}\n\nexport interface BindingsObject {\n bindings?: Binding[];\n}\n\nexport const WorkersMCPBindings = {\n parse: (bindings?: string): Binding[] => {\n if (!bindings) return [];\n try {\n return JSON.parse(atob(bindings)) as Binding[];\n } catch {\n return [];\n }\n },\n stringify: (bindings: Binding[]): string => {\n return btoa(JSON.stringify(bindings));\n },\n};\n\nexport interface UserDefaultExport<\n TUserEnv = Record<string, unknown>,\n TSchema extends z.ZodTypeAny = never,\n TEnv = TUserEnv & DefaultEnv<TSchema>,\n> extends CreateMCPServerOptions<TEnv, TSchema> {\n fetch?: (\n req: Request,\n env: TEnv,\n ctx: ExecutionContext,\n ) => Promise<Response> | Response;\n}\n\n// 1. Map binding type to its interface\ninterface BindingTypeMap {\n mcp: MCPBinding;\n contract: ContractBinding;\n}\n\nexport interface User {\n id: string;\n email: string;\n workspace: string;\n user_metadata: {\n avatar_url: string;\n full_name: string;\n picture: string;\n [key: string]: unknown;\n };\n}\n\nexport interface RequestContext<TSchema extends z.ZodTypeAny = any> {\n state: z.infer<TSchema>;\n branch?: string;\n token: string;\n workspace: string;\n ensureAuthenticated: (options?: {\n workspaceHint?: string;\n }) => User | undefined;\n callerApp?: string;\n integrationId?: string;\n}\n\n// 2. Map binding type to its creator function\ntype CreatorByType = {\n [K in keyof BindingTypeMap]: (\n value: BindingTypeMap[K],\n env: DefaultEnv,\n ) => unknown;\n};\n\n// 3. Strongly type creatorByType\nconst creatorByType: CreatorByType = {\n mcp: createIntegrationBinding,\n contract: createContractBinding,\n};\n\nconst withDefaultBindings = ({\n env,\n server,\n ctx,\n url,\n}: {\n env: DefaultEnv;\n server: MCPServer<any, any>;\n ctx: RequestContext;\n url?: string;\n}) => {\n const client = workspaceClient(ctx);\n const createWorkspaceDB = (ctx: RequestContext): WorkspaceDB => {\n const client = workspaceClient(ctx);\n return {\n query: ({ sql, params }) => {\n return client.DATABASES_RUN_SQL({\n sql,\n params,\n });\n },\n };\n };\n env[\"SELF\"] = new Proxy(\n {},\n {\n get: (_, prop) => {\n if (prop === \"toJSON\") {\n return null;\n }\n\n return async (args: unknown) => {\n return await server.callTool({\n toolCallId: prop as string,\n toolCallInput: args,\n });\n };\n },\n },\n );\n\n const workspaceDbBinding = {\n ...createWorkspaceDB(ctx),\n forContext: createWorkspaceDB,\n };\n\n env[\"DECO_API\"] = MCPClient;\n env[\"DECO_WORKSPACE_API\"] = client;\n env[\"DECO_WORKSPACE_DB\"] = workspaceDbBinding;\n\n // Backwards compatibility\n env[\"DECO_CHAT_API\"] = MCPClient;\n env[\"DECO_CHAT_WORKSPACE_API\"] = client;\n env[\"DECO_CHAT_WORKSPACE_DB\"] = workspaceDbBinding;\n\n env[\"IS_LOCAL\"] =\n (url?.startsWith(\"http://localhost\") ||\n url?.startsWith(\"http://127.0.0.1\")) ??\n false;\n};\n\nexport class UnauthorizedError extends Error {\n constructor(\n message: string,\n public redirectTo: URL,\n ) {\n super(message);\n this.name = \"UnauthorizedError\";\n }\n}\n\nconst AUTH_CALLBACK_ENDPOINT = \"/oauth/callback\";\nconst AUTH_START_ENDPOINT = \"/oauth/start\";\nconst AUTH_LOGOUT_ENDPOINT = \"/oauth/logout\";\nconst AUTHENTICATED = (user?: unknown, workspace?: string) => () => {\n return {\n ...((user as User) ?? {}),\n workspace,\n } as User;\n};\n\nexport const withBindings = <TEnv>({\n env: _env,\n server,\n tokenOrContext,\n origin,\n url,\n branch,\n}: {\n env: TEnv;\n server: MCPServer<TEnv, any>;\n tokenOrContext?: string | RequestContext;\n origin?: string | null;\n url?: string;\n branch?: string | null;\n}): TEnv => {\n branch ??= undefined;\n const env = _env as DefaultEnv<any>;\n\n const apiUrl = env.DECO_API_URL ?? \"https://api.decocms.com\";\n let context;\n if (typeof tokenOrContext === \"string\") {\n const decoded = decodeJwt(tokenOrContext);\n const workspace = decoded.aud as string;\n\n context = {\n state: decoded.state as Record<string, unknown>,\n token: tokenOrContext,\n integrationId: decoded.integrationId as string,\n workspace,\n ensureAuthenticated: AUTHENTICATED(decoded.user, workspace),\n branch,\n } as RequestContext<any>;\n } else if (typeof tokenOrContext === \"object\") {\n context = tokenOrContext;\n const decoded = decodeJwt(tokenOrContext.token);\n const workspace = decoded.aud as string;\n const appName = decoded.appName as string | undefined;\n context.callerApp = appName;\n context.integrationId ??= decoded.integrationId as string;\n context.ensureAuthenticated = AUTHENTICATED(decoded.user, workspace);\n } else {\n context = {\n state: undefined,\n token: env.DECO_API_TOKEN,\n workspace: env.DECO_WORKSPACE,\n branch,\n ensureAuthenticated: (options?: { workspaceHint?: string }) => {\n const workspaceHint = options?.workspaceHint ?? env.DECO_WORKSPACE;\n const authUri = new URL(\"/apps/oauth\", apiUrl);\n authUri.searchParams.set(\"client_id\", env.DECO_APP_NAME);\n authUri.searchParams.set(\n \"redirect_uri\",\n new URL(AUTH_CALLBACK_ENDPOINT, origin ?? env.DECO_APP_ENTRYPOINT)\n .href,\n );\n workspaceHint &&\n authUri.searchParams.set(\"workspace_hint\", workspaceHint);\n throw new UnauthorizedError(\"Unauthorized\", authUri);\n },\n };\n }\n\n env.DECO_REQUEST_CONTEXT = context;\n // Backwards compatibility\n env.DECO_CHAT_REQUEST_CONTEXT = context;\n const bindings = WorkersMCPBindings.parse(env.DECO_BINDINGS);\n\n for (const binding of bindings) {\n env[binding.name] = creatorByType[binding.type](binding as any, env);\n }\n\n withDefaultBindings({\n env,\n server,\n ctx: env.DECO_REQUEST_CONTEXT,\n url,\n });\n\n return env as TEnv;\n};\n\nexport const withRuntime = <TEnv, TSchema extends z.ZodTypeAny = never>(\n userFns: UserDefaultExport<TEnv, TSchema>,\n): ExportedHandler<TEnv & DefaultEnv<TSchema>> & {\n Workflow: ReturnType<typeof Workflow>;\n} => {\n const server = createMCPServer<TEnv, TSchema>(userFns);\n const fetcher = async (\n req: Request,\n env: TEnv & DefaultEnv<TSchema>,\n ctx: ExecutionContext,\n ) => {\n const url = new URL(req.url);\n if (url.pathname === AUTH_CALLBACK_ENDPOINT) {\n return handleAuthCallback(req, {\n apiUrl: env.DECO_API_URL,\n appName: env.DECO_APP_NAME,\n });\n }\n if (url.pathname === AUTH_START_ENDPOINT) {\n env.DECO_REQUEST_CONTEXT.ensureAuthenticated();\n const redirectTo = new URL(\"/\", url);\n const next = url.searchParams.get(\"next\");\n return Response.redirect(next ?? redirectTo, 302);\n }\n if (url.pathname === AUTH_LOGOUT_ENDPOINT) {\n return handleLogout(req);\n }\n if (url.pathname === \"/mcp\") {\n return server.fetch(req, env, ctx);\n }\n\n if (url.pathname.startsWith(\"/mcp/call-tool\")) {\n const toolCallId = url.pathname.split(\"/\").pop();\n if (!toolCallId) {\n return new Response(\"Not found\", { status: 404 });\n }\n const toolCallInput = await req.json();\n const result = await server.callTool({\n toolCallId,\n toolCallInput,\n });\n\n if (result instanceof Response) {\n return result;\n }\n\n return new Response(JSON.stringify(result), {\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n }\n\n if (url.pathname.startsWith(DeconfigResource.WatchPathNameBase)) {\n return DeconfigResource.watchAPI(req, env);\n }\n return (\n userFns.fetch?.(req, env, ctx) ||\n new Response(\"Not found\", { status: 404 })\n );\n };\n return {\n Workflow: Workflow(server, userFns.workflows),\n fetch: async (\n req: Request,\n env: TEnv & DefaultEnv<TSchema>,\n ctx: ExecutionContext,\n ) => {\n const referer = req.headers.get(\"referer\");\n const isFetchRequest = req.headers.has(DECO_MCP_CLIENT_HEADER);\n\n try {\n const bindings = withBindings({\n env,\n server,\n branch:\n req.headers.get(\"x-deco-branch\") ??\n new URL(req.url).searchParams.get(\"__b\"),\n tokenOrContext: await getReqToken(req, env),\n origin:\n referer ?? req.headers.get(\"origin\") ?? new URL(req.url).origin,\n url: req.url,\n });\n return await State.run(\n { req, env: bindings, ctx },\n async () => await fetcher(req, bindings, ctx),\n );\n } catch (error) {\n if (error instanceof UnauthorizedError) {\n if (!isFetchRequest) {\n const url = new URL(req.url);\n error.redirectTo.searchParams.set(\n \"state\",\n StateParser.stringify({\n next: url.searchParams.get(\"next\") ?? referer ?? req.url,\n }),\n );\n return Response.redirect(error.redirectTo, 302);\n }\n return new Response(null, { status: 401 });\n }\n throw error;\n }\n },\n };\n};\n\nexport {\n type Contract,\n type Migration,\n type WranglerConfig,\n} from \"./wrangler.ts\";\n"]}
package/dist/mastra.d.ts CHANGED
@@ -2,8 +2,8 @@ import '@mastra/core';
2
2
  import '@mastra/core/di';
3
3
  export { cloneStep, cloneWorkflow, createWorkflow } from '@mastra/core/workflows';
4
4
  import 'zod';
5
- export { A as AppContext, h as CreateMCPServerOptions, C as CreatedTool, E as ExecWithContext, F as Fetch, I as Integration, M as MCPServer, R as Resources, e as Step, S as StreamableTool, V as ViewExport, k as createMCPServer, c as createPrivateTool, a as createRuntimeContext, g as createStep, f as createStepFromTool, b as createStreamableTool, d as createTool, i as isStreamableTool, j as isWorkflow } from './index-CStCyFvK.js';
5
+ export { A as AppContext, h as CreateMCPServerOptions, C as CreatedTool, E as ExecWithContext, F as Fetch, I as Integration, M as MCPServer, R as Resources, e as Step, S as StreamableTool, V as ViewExport, k as createMCPServer, c as createPrivateTool, a as createRuntimeContext, g as createStep, f as createStepFromTool, b as createStreamableTool, d as createTool, i as isStreamableTool, j as isWorkflow } from './index-D8GtUDPS.js';
6
6
  import './resources.js';
7
7
  import '@cloudflare/workers-types';
8
- import './mcp-yTBduksO.js';
8
+ import './mcp-Bv7IAgWX.js';
9
9
  import './connection-DDtQYrea.js';
@@ -27,7 +27,7 @@ declare const QueryResult: z.ZodObject<{
27
27
  rows_read?: number | undefined;
28
28
  rows_written?: number | undefined;
29
29
  served_by_primary?: boolean | undefined;
30
- served_by_region?: "OC" | "WNAM" | "ENAM" | "WEUR" | "EEUR" | "APAC" | undefined;
30
+ served_by_region?: "WNAM" | "ENAM" | "WEUR" | "EEUR" | "APAC" | "OC" | undefined;
31
31
  size_after?: number | undefined;
32
32
  timings?: {
33
33
  sql_duration_ms?: number | undefined;
@@ -40,7 +40,7 @@ declare const QueryResult: z.ZodObject<{
40
40
  rows_read?: number | undefined;
41
41
  rows_written?: number | undefined;
42
42
  served_by_primary?: boolean | undefined;
43
- served_by_region?: "OC" | "WNAM" | "ENAM" | "WEUR" | "EEUR" | "APAC" | undefined;
43
+ served_by_region?: "WNAM" | "ENAM" | "WEUR" | "EEUR" | "APAC" | "OC" | undefined;
44
44
  size_after?: number | undefined;
45
45
  timings?: {
46
46
  sql_duration_ms?: number | undefined;
@@ -57,7 +57,7 @@ declare const QueryResult: z.ZodObject<{
57
57
  rows_read?: number | undefined;
58
58
  rows_written?: number | undefined;
59
59
  served_by_primary?: boolean | undefined;
60
- served_by_region?: "OC" | "WNAM" | "ENAM" | "WEUR" | "EEUR" | "APAC" | undefined;
60
+ served_by_region?: "WNAM" | "ENAM" | "WEUR" | "EEUR" | "APAC" | "OC" | undefined;
61
61
  size_after?: number | undefined;
62
62
  timings?: {
63
63
  sql_duration_ms?: number | undefined;
@@ -74,7 +74,7 @@ declare const QueryResult: z.ZodObject<{
74
74
  rows_read?: number | undefined;
75
75
  rows_written?: number | undefined;
76
76
  served_by_primary?: boolean | undefined;
77
- served_by_region?: "OC" | "WNAM" | "ENAM" | "WEUR" | "EEUR" | "APAC" | undefined;
77
+ served_by_region?: "WNAM" | "ENAM" | "WEUR" | "EEUR" | "APAC" | "OC" | undefined;
78
78
  size_after?: number | undefined;
79
79
  timings?: {
80
80
  sql_duration_ms?: number | undefined;
package/dist/proxy.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { C as CreateStubAPIOptions } from './mcp-yTBduksO.js';
1
+ import { C as CreateStubAPIOptions } from './mcp-Bv7IAgWX.js';
2
2
  import 'zod';
3
3
  import './connection-DDtQYrea.js';
4
4
 
@@ -4,11 +4,11 @@ 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,24 +25,24 @@ 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
+ description?: string | undefined;
31
32
  mimeType?: string | undefined;
32
33
  title?: string | undefined;
33
- description?: string | undefined;
34
34
  annotations?: Record<string, string> | undefined;
35
35
  thumbnail?: string | undefined;
36
36
  timestamp?: string | undefined;
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
+ description?: string | undefined;
43
44
  mimeType?: string | undefined;
44
45
  title?: string | undefined;
45
- description?: string | undefined;
46
46
  annotations?: Record<string, string> | undefined;
47
47
  thumbnail?: string | undefined;
48
48
  timestamp?: string | undefined;
@@ -76,21 +76,21 @@ 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
+ description?: string | undefined;
81
82
  mimeType?: string | undefined;
82
83
  title?: string | undefined;
83
- description?: string | undefined;
84
84
  annotations?: Record<string, string> | undefined;
85
85
  thumbnail?: string | undefined;
86
86
  timestamp?: string | undefined;
87
87
  size?: number | undefined;
88
88
  }, {
89
- uri: string;
90
89
  name: string;
90
+ uri: string;
91
+ description?: string | undefined;
91
92
  mimeType?: string | undefined;
92
93
  title?: string | undefined;
93
- description?: string | undefined;
94
94
  annotations?: Record<string, string> | undefined;
95
95
  thumbnail?: string | undefined;
96
96
  timestamp?: string | undefined;
@@ -100,11 +100,11 @@ 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
+ description?: string | undefined;
105
106
  mimeType?: string | undefined;
106
107
  title?: string | undefined;
107
- description?: string | undefined;
108
108
  annotations?: Record<string, string> | undefined;
109
109
  thumbnail?: string | undefined;
110
110
  timestamp?: string | undefined;
@@ -114,11 +114,11 @@ 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
+ description?: string | undefined;
119
120
  mimeType?: string | undefined;
120
121
  title?: string | undefined;
121
- description?: string | undefined;
122
122
  annotations?: Record<string, string> | undefined;
123
123
  thumbnail?: string | undefined;
124
124
  timestamp?: 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;
151
+ resourceName: string;
150
152
  content: {
151
153
  type: "text" | "blob";
152
154
  data: string;
153
155
  mimeType?: string | undefined;
154
156
  };
155
- name: string;
156
- resourceName: string;
157
- title?: string | undefined;
158
157
  description?: string | undefined;
159
158
  metadata?: Record<string, any> | undefined;
159
+ title?: string | undefined;
160
160
  }, {
161
+ name: string;
162
+ resourceName: string;
161
163
  content: {
162
164
  type: "text" | "blob";
163
165
  data: string;
164
166
  mimeType?: string | undefined;
165
167
  };
166
- name: string;
167
- resourceName: string;
168
- title?: string | undefined;
169
168
  description?: string | undefined;
170
169
  metadata?: Record<string, any> | undefined;
170
+ title?: string | undefined;
171
171
  }>;
172
172
  declare const ResourceCreateOutputSchema: z.ZodObject<{
173
173
  name: z.ZodString;
@@ -180,21 +180,21 @@ 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
+ description?: string | undefined;
185
186
  mimeType?: string | undefined;
186
187
  title?: string | undefined;
187
- description?: string | undefined;
188
188
  annotations?: Record<string, string> | undefined;
189
189
  thumbnail?: string | undefined;
190
190
  timestamp?: string | undefined;
191
191
  size?: number | undefined;
192
192
  }, {
193
- uri: string;
194
193
  name: string;
194
+ uri: string;
195
+ description?: string | undefined;
195
196
  mimeType?: string | undefined;
196
197
  title?: string | undefined;
197
- description?: string | undefined;
198
198
  annotations?: Record<string, string> | undefined;
199
199
  thumbnail?: string | undefined;
200
200
  timestamp?: string | undefined;
@@ -221,29 +221,29 @@ 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
+ description?: string | undefined;
227
+ resourceName?: string | undefined;
228
+ metadata?: Record<string, any> | undefined;
226
229
  content?: {
227
230
  type: "text" | "blob";
228
231
  data: string;
229
232
  mimeType?: string | undefined;
230
233
  } | undefined;
231
234
  title?: string | undefined;
232
- description?: string | undefined;
233
- metadata?: Record<string, any> | undefined;
234
- resourceName?: string | undefined;
235
235
  }, {
236
- uri: string;
237
236
  name: string;
237
+ uri: string;
238
+ description?: string | undefined;
239
+ resourceName?: string | undefined;
240
+ metadata?: Record<string, any> | undefined;
238
241
  content?: {
239
242
  type: "text" | "blob";
240
243
  data: string;
241
244
  mimeType?: string | undefined;
242
245
  } | undefined;
243
246
  title?: string | undefined;
244
- description?: string | undefined;
245
- metadata?: Record<string, any> | undefined;
246
- resourceName?: string | undefined;
247
247
  }>;
248
248
  declare const ResourceUpdateOutputSchema: z.ZodObject<{
249
249
  name: z.ZodString;
@@ -256,21 +256,21 @@ 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
+ description?: string | undefined;
261
262
  mimeType?: string | undefined;
262
263
  title?: string | undefined;
263
- description?: string | undefined;
264
264
  annotations?: Record<string, string> | undefined;
265
265
  thumbnail?: string | undefined;
266
266
  timestamp?: string | undefined;
267
267
  size?: number | undefined;
268
268
  }, {
269
- uri: string;
270
269
  name: string;
270
+ uri: string;
271
+ description?: string | undefined;
271
272
  mimeType?: string | undefined;
272
273
  title?: string | undefined;
273
- description?: string | undefined;
274
274
  annotations?: Record<string, string> | undefined;
275
275
  thumbnail?: string | undefined;
276
276
  timestamp?: 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<{
@@ -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
- title: string;
312
311
  description: string;
312
+ title: 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
- title: string;
320
319
  description: string;
320
+ title: 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
- title: string;
330
329
  description: string;
330
+ title: 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
- title: string;
340
339
  description: string;
340
+ title: string;
341
341
  icon: string;
342
342
  hasCreate?: boolean | undefined;
343
343
  hasUpdate?: boolean | undefined;
package/dist/views.d.ts CHANGED
@@ -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
- url?: string | undefined;
20
+ id?: string | undefined;
21
21
  name?: string | undefined;
22
+ url?: 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,25 +28,25 @@ declare const ViewsListOutputSchema: z.ZodObject<{
28
28
  }, {
29
29
  title: string;
30
30
  icon: string;
31
- url?: string | undefined;
31
+ id?: string | undefined;
32
32
  name?: string | undefined;
33
+ url?: string | undefined;
33
34
  description?: string | undefined;
34
- tools?: string[] | undefined;
35
- id?: string | undefined;
36
35
  resourceName?: string | undefined;
36
+ tools?: string[] | undefined;
37
37
  mimeTypePattern?: string | undefined;
38
38
  prompt?: string | undefined;
39
39
  installBehavior?: "open" | "none" | "autoPin" | undefined;
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
- url?: string | undefined;
46
+ id?: string | undefined;
47
47
  name?: string | undefined;
48
+ url?: 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,12 +56,12 @@ declare const ViewsListOutputSchema: z.ZodObject<{
56
56
  views: {
57
57
  title: string;
58
58
  icon: string;
59
- url?: string | undefined;
59
+ id?: string | undefined;
60
60
  name?: string | undefined;
61
+ url?: string | undefined;
61
62
  description?: string | undefined;
62
- tools?: string[] | undefined;
63
- id?: string | undefined;
64
63
  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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decocms/runtime",
3
- "version": "0.25.0",
3
+ "version": "0.25.1",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "build": "tsup",
package/src/index.ts CHANGED
@@ -337,6 +337,10 @@ export const withRuntime = <TEnv, TSchema extends z.ZodTypeAny = never>(
337
337
  toolCallInput,
338
338
  });
339
339
 
340
+ if (result instanceof Response) {
341
+ return result;
342
+ }
343
+
340
344
  return new Response(JSON.stringify(result), {
341
345
  headers: {
342
346
  "Content-Type": "application/json",