From 48aed4f6c468a9387c92d166a68c0cbf822cb0f7 Mon Sep 17 00:00:00 2001 From: ryoppippi <1560508+ryoppippi@users.noreply.github.com> Date: Tue, 9 Dec 2025 14:13:07 +0000 Subject: [PATCH 1/6] chore(deps): upgrade to zod v4, ai SDK 5.0.108, and MCP SDK 1.24.3 - Upgrade zod from ^3.23.8 to ^4.1.13 for improved performance - Upgrade ai SDK from ^5.0.63 to ^5.0.108 for latest features - Upgrade @ai-sdk/openai from ^2.0.46 to ^2.0.80 - Upgrade @modelcontextprotocol/sdk from ^1.19.1 to ^1.24.3 - Add zod to examples devDependencies to ensure consistent type resolution across workspace packages This resolves TypeScript type errors where AISDKToolResult was not assignable to ToolSet due to different zod versions being resolved in root and examples packages. --- examples/package.json | 3 +- pnpm-lock.yaml | 96 +++++++++++++++---------------------------- pnpm-workspace.yaml | 8 ++-- 3 files changed, 40 insertions(+), 67 deletions(-) diff --git a/examples/package.json b/examples/package.json index a920acd..63dddcb 100644 --- a/examples/package.json +++ b/examples/package.json @@ -13,7 +13,8 @@ "@ai-sdk/openai": "catalog:dev", "@types/node": "catalog:dev", "ai": "catalog:peer", - "openai": "catalog:peer" + "openai": "catalog:peer", + "zod": "catalog:dev" }, "devEngines": { "runtime": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 981f299..d05e9cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,8 +7,8 @@ settings: catalogs: dev: '@ai-sdk/openai': - specifier: ^2.0.46 - version: 2.0.76 + specifier: ^2.0.80 + version: 2.0.80 '@ai-sdk/provider-utils': specifier: ^3.0.18 version: 3.0.18 @@ -61,19 +61,19 @@ catalogs: specifier: ^3.2.4 version: 3.2.4 zod: - specifier: ^3.23.8 - version: 3.25.76 + specifier: ^4.1.13 + version: 4.1.13 peer: ai: - specifier: ^5.0.63 - version: 5.0.106 + specifier: ^5.0.108 + version: 5.0.108 openai: specifier: ^6.2.0 version: 6.9.1 prod: '@modelcontextprotocol/sdk': - specifier: ^1.19.1 - version: 1.24.2 + specifier: ^1.24.3 + version: 1.24.3 '@orama/orama': specifier: ^3.1.11 version: 3.1.16 @@ -87,7 +87,7 @@ importers: dependencies: '@modelcontextprotocol/sdk': specifier: catalog:prod - version: 1.24.2(zod@3.25.76) + version: 1.24.3(zod@4.1.13) '@orama/orama': specifier: catalog:prod version: 3.1.16 @@ -97,13 +97,13 @@ importers: devDependencies: '@ai-sdk/provider-utils': specifier: catalog:dev - version: 3.0.18(zod@3.25.76) + version: 3.0.18(zod@4.1.13) '@biomejs/biome': specifier: catalog:dev version: 1.9.4 '@hono/mcp': specifier: catalog:dev - version: 0.1.5(@modelcontextprotocol/sdk@1.24.2(zod@3.25.76))(hono@4.10.7) + version: 0.1.5(@modelcontextprotocol/sdk@1.24.3(zod@4.1.13))(hono@4.10.7) '@types/json-schema': specifier: catalog:dev version: 7.0.15 @@ -118,7 +118,7 @@ importers: version: 3.2.4(vitest@3.2.4(@types/node@22.19.1)(jiti@2.6.1)(msw@2.12.3(@types/node@22.19.1)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2)) ai: specifier: catalog:peer - version: 5.0.106(zod@3.25.76) + version: 5.0.108(zod@4.1.13) hono: specifier: catalog:dev version: 4.10.7 @@ -136,7 +136,7 @@ importers: version: runtime:24.11.1 openai: specifier: catalog:peer - version: 6.9.1(zod@3.25.76) + version: 6.9.1(zod@4.1.13) publint: specifier: catalog:dev version: 0.3.15 @@ -157,7 +157,7 @@ importers: version: 3.2.4(@types/node@22.19.1)(jiti@2.6.1)(msw@2.12.3(@types/node@22.19.1)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) zod: specifier: catalog:dev - version: 3.25.76 + version: 4.1.13 examples: dependencies: @@ -167,19 +167,22 @@ importers: devDependencies: '@ai-sdk/openai': specifier: catalog:dev - version: 2.0.76(zod@4.1.13) + version: 2.0.80(zod@4.1.13) '@types/node': specifier: catalog:dev version: 22.19.1 ai: specifier: catalog:peer - version: 5.0.106(zod@4.1.13) + version: 5.0.108(zod@4.1.13) node: specifier: runtime:^24.11.0 version: runtime:24.11.1 openai: specifier: catalog:peer version: 6.9.1(zod@4.1.13) + zod: + specifier: catalog:dev + version: 4.1.13 packages: @@ -189,8 +192,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/openai@2.0.76': - resolution: {integrity: sha512-ryUkhTDVxe3D1GSAGc94vPZsJlSY8ZuBDLkpf4L81Dm7Ik5AgLfhQrZa8+0hD4kp0dxdVaIoxhpa3QOt1CmncA==} + '@ai-sdk/openai@2.0.80': + resolution: {integrity: sha512-tNHuraF11db+8xJEDBoU9E3vMcpnHFKRhnLQ3DQX2LnEzfPB9DksZ8rE+yVuDN1WRW9cm2OWAhgHFgVKs7ICuw==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -677,8 +680,8 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@modelcontextprotocol/sdk@1.24.2': - resolution: {integrity: sha512-hS/kzSfchqzvUeJUsdiDHi84/kNhLIZaZ6coGQVwbYIelOBbcAwUohUfaQTLa1MvFOK/jbTnGFzraHSFwB7pjQ==} + '@modelcontextprotocol/sdk@1.24.3': + resolution: {integrity: sha512-YgSHW29fuzKKAHTGe9zjNoo+yF8KaQPzDC2W9Pv41E7/57IfY+AMGJ/aDFlgTLcVVELoggKE4syABCE75u3NCw==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -1170,8 +1173,8 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - ai@5.0.106: - resolution: {integrity: sha512-M5obwavxSJJ3tGlAFqI6eltYNJB0D20X6gIBCFx/KVorb/X1fxVVfiZZpZb+Gslu4340droSOjT0aKQFCarNVg==} + ai@5.0.108: + resolution: {integrity: sha512-Jex3Lb7V41NNpuqJHKgrwoU6BCLHdI1Pg4qb4GJH4jRIDRXUBySJErHjyN4oTCwbiYCeb/8II9EnqSRPq9EifA==} engines: {node: '>=18'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -2408,21 +2411,11 @@ packages: peerDependencies: zod: ^3.25 || ^4 - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.1.13: resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} snapshots: - '@ai-sdk/gateway@2.0.18(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - '@vercel/oidc': 3.0.5 - zod: 3.25.76 - '@ai-sdk/gateway@2.0.18(zod@4.1.13)': dependencies: '@ai-sdk/provider': 2.0.0 @@ -2430,19 +2423,12 @@ snapshots: '@vercel/oidc': 3.0.5 zod: 4.1.13 - '@ai-sdk/openai@2.0.76(zod@4.1.13)': + '@ai-sdk/openai@2.0.80(zod@4.1.13)': dependencies: '@ai-sdk/provider': 2.0.0 '@ai-sdk/provider-utils': 3.0.18(zod@4.1.13) zod: 4.1.13 - '@ai-sdk/provider-utils@3.0.18(zod@3.25.76)': - dependencies: - '@ai-sdk/provider': 2.0.0 - '@standard-schema/spec': 1.0.0 - eventsource-parser: 3.0.6 - zod: 3.25.76 - '@ai-sdk/provider-utils@3.0.18(zod@4.1.13)': dependencies: '@ai-sdk/provider': 2.0.0 @@ -2689,9 +2675,9 @@ snapshots: '@esbuild/win32-x64@0.27.0': optional: true - '@hono/mcp@0.1.5(@modelcontextprotocol/sdk@1.24.2(zod@3.25.76))(hono@4.10.7)': + '@hono/mcp@0.1.5(@modelcontextprotocol/sdk@1.24.3(zod@4.1.13))(hono@4.10.7)': dependencies: - '@modelcontextprotocol/sdk': 1.24.2(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.24.3(zod@4.1.13) hono: 4.10.7 '@inquirer/ansi@1.0.2': {} @@ -2752,7 +2738,7 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@modelcontextprotocol/sdk@1.24.2(zod@3.25.76)': + '@modelcontextprotocol/sdk@1.24.3(zod@4.1.13)': dependencies: ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) @@ -2766,8 +2752,8 @@ snapshots: jose: 6.1.3 pkce-challenge: 5.0.1 raw-body: 3.0.2 - zod: 3.25.76 - zod-to-json-schema: 3.25.0(zod@3.25.76) + zod: 4.1.13 + zod-to-json-schema: 3.25.0(zod@4.1.13) transitivePeerDependencies: - supports-color @@ -3123,15 +3109,7 @@ snapshots: acorn@8.15.0: {} - ai@5.0.106(zod@3.25.76): - dependencies: - '@ai-sdk/gateway': 2.0.18(zod@3.25.76) - '@ai-sdk/provider': 2.0.0 - '@ai-sdk/provider-utils': 3.0.18(zod@3.25.76) - '@opentelemetry/api': 1.9.0 - zod: 3.25.76 - - ai@5.0.106(zod@4.1.13): + ai@5.0.108(zod@4.1.13): dependencies: '@ai-sdk/gateway': 2.0.18(zod@4.1.13) '@ai-sdk/provider': 2.0.0 @@ -3771,10 +3749,6 @@ snapshots: dependencies: wrappy: 1.0.2 - openai@6.9.1(zod@3.25.76): - optionalDependencies: - zod: 3.25.76 - openai@6.9.1(zod@4.1.13): optionalDependencies: zod: 4.1.13 @@ -4336,10 +4310,8 @@ snapshots: yoctocolors-cjs@2.1.3: {} - zod-to-json-schema@3.25.0(zod@3.25.76): + zod-to-json-schema@3.25.0(zod@4.1.13): dependencies: - zod: 3.25.76 - - zod@3.25.76: {} + zod: 4.1.13 zod@4.1.13: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0353d21..23f9ecc 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,7 +6,7 @@ catalogMode: strict catalogs: dev: - '@ai-sdk/openai': ^2.0.46 + '@ai-sdk/openai': ^2.0.80 '@ai-sdk/provider-utils': ^3.0.18 '@biomejs/biome': ^1.5.3 '@hono/mcp': ^0.1.4 @@ -24,12 +24,12 @@ catalogs: typescript: ^5.8.3 unplugin-unused: ^0.5.4 vitest: ^3.2.4 - zod: ^3.23.8 + zod: ^4.1.13 peer: - ai: ^5.0.63 + ai: ^5.0.108 openai: ^6.2.0 prod: - '@modelcontextprotocol/sdk': ^1.19.1 + '@modelcontextprotocol/sdk': ^1.24.3 '@orama/orama': ^3.1.11 json-schema: ^0.4.0 From 1823cba0a4d20b7597ef2296c7237e091f06645a Mon Sep 17 00:00:00 2001 From: ryoppippi <1560508+ryoppippi@users.noreply.github.com> Date: Tue, 9 Dec 2025 14:13:19 +0000 Subject: [PATCH 2/6] fix(types): use ToolSet from ai SDK for AISDKToolResult compatibility - Import ToolSet from 'ai' package in types.ts - Update AISDKToolResult to extend ToolSet for full compatibility with generateText, streamText, and other AI SDK functions - Add 'ai' and '@ai-sdk/provider-utils' to tsdown dts.resolve to ensure AI SDK types are properly bundled in declarations This ensures AISDKToolResult is properly assignable to ToolSet when used with AI SDK functions like generateText(). --- src/types.ts | 13 +++++++++---- tsdown.config.ts | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/types.ts b/src/types.ts index 4ab2294..52873ac 100644 --- a/src/types.ts +++ b/src/types.ts @@ -3,6 +3,7 @@ */ import type { Tool } from '@ai-sdk/provider-utils'; +import type { ToolSet } from 'ai'; import type { JSONSchema7, JSONSchema7Definition } from 'json-schema'; import type { ValueOf } from 'type-fest'; @@ -175,9 +176,13 @@ export type AISDKToolDefinition = Tool & { /** * Result type for toAISDK() method. - * Maps tool names to their AI SDK tool definitions. + * Uses the ToolSet type from AI SDK to ensure full compatibility with + * generateText, streamText, and other AI SDK functions. * - * NOTE: We avoid defining our own types as much as possible and use existing - * types from dependencies. This is a simple mapped type over AISDKToolDefinition. + * NOTE: We extend ToolSet with our custom AISDKToolDefinition to ensure + * both AI SDK compatibility and access to StackOne-specific properties + * like `execution` metadata. */ -export type AISDKToolResult = Record; +export type AISDKToolResult = ToolSet & { + [K in T]: AISDKToolDefinition; +}; diff --git a/tsdown.config.ts b/tsdown.config.ts index 559e512..638cee9 100644 --- a/tsdown.config.ts +++ b/tsdown.config.ts @@ -9,7 +9,7 @@ export default defineConfig({ treeshake: true, dts: { tsgo: true, - resolve: [/^@types\//, 'type-fest'], + resolve: [/^@types\//, 'type-fest', 'ai', '@ai-sdk/provider-utils'], }, publint: true, unused: true, From b63006cd6a1920afab0b3c8607e833f4e3f27ba0 Mon Sep 17 00:00:00 2001 From: ryoppippi <1560508+ryoppippi@users.noreply.github.com> Date: Tue, 9 Dec 2025 14:14:22 +0000 Subject: [PATCH 3/6] refactor(rpc-client): migrate to zod/mini for reduced bundle size - Replace 'zod' import with 'zod/mini' for smaller tree-shaken bundles - Use zod/mini wrapper functions instead of method chaining: - z.optional() instead of .optional() - z.nullable() instead of .nullish() - z.looseObject() instead of .passthrough() - Update z.record() calls to use two arguments (key, value) per zod v4 zod/mini provides a functional API that tree-shakes more effectively, resulting in smaller final bundles for consumers of this library. --- src/rpc-client.ts | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/rpc-client.ts b/src/rpc-client.ts index 8607a87..4a0dee9 100644 --- a/src/rpc-client.ts +++ b/src/rpc-client.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import { z } from 'zod/mini'; import { StackOneAPIError } from './utils/errors'; /** @@ -7,10 +7,10 @@ import { StackOneAPIError } from './utils/errors'; */ const rpcActionRequestSchema = z.object({ action: z.string(), - body: z.record(z.unknown()).optional(), - headers: z.record(z.unknown()).optional(), - path: z.record(z.unknown()).optional(), - query: z.record(z.unknown()).optional(), + body: z.optional(z.record(z.string(), z.unknown())), + headers: z.optional(z.record(z.string(), z.unknown())), + path: z.optional(z.record(z.string(), z.unknown())), + query: z.optional(z.record(z.string(), z.unknown())), }); /** @@ -22,8 +22,8 @@ type RpcActionRequest = z.infer; * Zod schema for RPC action response data */ const rpcActionResponseDataSchema = z.union([ - z.record(z.unknown()), - z.array(z.record(z.unknown())), + z.record(z.string(), z.unknown()), + z.array(z.record(z.string(), z.unknown())), z.null(), ]); @@ -37,12 +37,10 @@ const rpcActionResponseDataSchema = z.union([ * Additional fields from the connector response are passed through. * @see unified-cloud-api/src/unified-api-v2/unifiedAPIv2.service.ts processActionCall */ -const rpcActionResponseSchema = z - .object({ - next: z.string().nullish(), - data: rpcActionResponseDataSchema.optional(), - }) - .passthrough(); +const rpcActionResponseSchema = z.looseObject({ + next: z.nullable(z.optional(z.string())), + data: z.optional(rpcActionResponseDataSchema), +}); /** * RPC action response from the StackOne API @@ -54,10 +52,10 @@ export type RpcActionResponse = z.infer; * Zod schema for RPC client configuration validation */ const rpcClientConfigSchema = z.object({ - serverURL: z.string().optional(), + serverURL: z.optional(z.string()), security: z.object({ username: z.string(), - password: z.string().optional(), + password: z.optional(z.string()), }), }); From c2a09414bc4ebde8914f45c6f96e8285edc5316e Mon Sep 17 00:00:00 2001 From: ryoppippi <1560508+ryoppippi@users.noreply.github.com> Date: Tue, 9 Dec 2025 14:15:39 +0000 Subject: [PATCH 4/6] fix: move zod to dependencies --- package.json | 6 +++--- pnpm-lock.yaml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2c43bb4..cc41df6 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "dependencies": { "@modelcontextprotocol/sdk": "catalog:prod", "@orama/orama": "catalog:prod", - "json-schema": "catalog:prod" + "json-schema": "catalog:prod", + "zod": "catalog:dev" }, "devDependencies": { "@ai-sdk/provider-utils": "catalog:dev", @@ -58,8 +59,7 @@ "type-fest": "catalog:dev", "typescript": "catalog:dev", "unplugin-unused": "catalog:dev", - "vitest": "catalog:dev", - "zod": "catalog:dev" + "vitest": "catalog:dev" }, "peerDependencies": { "ai": "catalog:peer", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d05e9cb..c97156e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -94,6 +94,9 @@ importers: json-schema: specifier: catalog:prod version: 0.4.0 + zod: + specifier: catalog:dev + version: 4.1.13 devDependencies: '@ai-sdk/provider-utils': specifier: catalog:dev @@ -155,9 +158,6 @@ importers: vitest: specifier: catalog:dev version: 3.2.4(@types/node@22.19.1)(jiti@2.6.1)(msw@2.12.3(@types/node@22.19.1)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.2) - zod: - specifier: catalog:dev - version: 4.1.13 examples: dependencies: From b12ea8d3bdd2e1b737a3e736b257135199aba55d Mon Sep 17 00:00:00 2001 From: ryoppippi <1560508+ryoppippi@users.noreply.github.com> Date: Tue, 9 Dec 2025 14:18:45 +0000 Subject: [PATCH 5/6] Revert "refactor(rpc-client): migrate to zod/mini for reduced bundle size" This reverts commit b63006cd6a1920afab0b3c8607e833f4e3f27ba0. --- src/rpc-client.ts | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/rpc-client.ts b/src/rpc-client.ts index 4a0dee9..8607a87 100644 --- a/src/rpc-client.ts +++ b/src/rpc-client.ts @@ -1,4 +1,4 @@ -import { z } from 'zod/mini'; +import { z } from 'zod'; import { StackOneAPIError } from './utils/errors'; /** @@ -7,10 +7,10 @@ import { StackOneAPIError } from './utils/errors'; */ const rpcActionRequestSchema = z.object({ action: z.string(), - body: z.optional(z.record(z.string(), z.unknown())), - headers: z.optional(z.record(z.string(), z.unknown())), - path: z.optional(z.record(z.string(), z.unknown())), - query: z.optional(z.record(z.string(), z.unknown())), + body: z.record(z.unknown()).optional(), + headers: z.record(z.unknown()).optional(), + path: z.record(z.unknown()).optional(), + query: z.record(z.unknown()).optional(), }); /** @@ -22,8 +22,8 @@ type RpcActionRequest = z.infer; * Zod schema for RPC action response data */ const rpcActionResponseDataSchema = z.union([ - z.record(z.string(), z.unknown()), - z.array(z.record(z.string(), z.unknown())), + z.record(z.unknown()), + z.array(z.record(z.unknown())), z.null(), ]); @@ -37,10 +37,12 @@ const rpcActionResponseDataSchema = z.union([ * Additional fields from the connector response are passed through. * @see unified-cloud-api/src/unified-api-v2/unifiedAPIv2.service.ts processActionCall */ -const rpcActionResponseSchema = z.looseObject({ - next: z.nullable(z.optional(z.string())), - data: z.optional(rpcActionResponseDataSchema), -}); +const rpcActionResponseSchema = z + .object({ + next: z.string().nullish(), + data: rpcActionResponseDataSchema.optional(), + }) + .passthrough(); /** * RPC action response from the StackOne API @@ -52,10 +54,10 @@ export type RpcActionResponse = z.infer; * Zod schema for RPC client configuration validation */ const rpcClientConfigSchema = z.object({ - serverURL: z.optional(z.string()), + serverURL: z.string().optional(), security: z.object({ username: z.string(), - password: z.optional(z.string()), + password: z.string().optional(), }), }); From 67565c6726fdd87680b253cadf64ef5a3e032f32 Mon Sep 17 00:00:00 2001 From: ryoppippi <1560508+ryoppippi@users.noreply.github.com> Date: Tue, 9 Dec 2025 14:19:11 +0000 Subject: [PATCH 6/6] Reapply "refactor(rpc-client): migrate to zod/mini for reduced bundle size" This reverts commit b12ea8d3bdd2e1b737a3e736b257135199aba55d. --- src/rpc-client.ts | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/rpc-client.ts b/src/rpc-client.ts index 8607a87..4a0dee9 100644 --- a/src/rpc-client.ts +++ b/src/rpc-client.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import { z } from 'zod/mini'; import { StackOneAPIError } from './utils/errors'; /** @@ -7,10 +7,10 @@ import { StackOneAPIError } from './utils/errors'; */ const rpcActionRequestSchema = z.object({ action: z.string(), - body: z.record(z.unknown()).optional(), - headers: z.record(z.unknown()).optional(), - path: z.record(z.unknown()).optional(), - query: z.record(z.unknown()).optional(), + body: z.optional(z.record(z.string(), z.unknown())), + headers: z.optional(z.record(z.string(), z.unknown())), + path: z.optional(z.record(z.string(), z.unknown())), + query: z.optional(z.record(z.string(), z.unknown())), }); /** @@ -22,8 +22,8 @@ type RpcActionRequest = z.infer; * Zod schema for RPC action response data */ const rpcActionResponseDataSchema = z.union([ - z.record(z.unknown()), - z.array(z.record(z.unknown())), + z.record(z.string(), z.unknown()), + z.array(z.record(z.string(), z.unknown())), z.null(), ]); @@ -37,12 +37,10 @@ const rpcActionResponseDataSchema = z.union([ * Additional fields from the connector response are passed through. * @see unified-cloud-api/src/unified-api-v2/unifiedAPIv2.service.ts processActionCall */ -const rpcActionResponseSchema = z - .object({ - next: z.string().nullish(), - data: rpcActionResponseDataSchema.optional(), - }) - .passthrough(); +const rpcActionResponseSchema = z.looseObject({ + next: z.nullable(z.optional(z.string())), + data: z.optional(rpcActionResponseDataSchema), +}); /** * RPC action response from the StackOne API @@ -54,10 +52,10 @@ export type RpcActionResponse = z.infer; * Zod schema for RPC client configuration validation */ const rpcClientConfigSchema = z.object({ - serverURL: z.string().optional(), + serverURL: z.optional(z.string()), security: z.object({ username: z.string(), - password: z.string().optional(), + password: z.optional(z.string()), }), });