stitchkit 0.7.0 → 0.8.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.
@@ -79,7 +79,11 @@ export interface RouteGroup {
79
79
  export type BunServer = ReturnType<typeof Bun.serve>;
80
80
  /** Context passed to a `RawRoute` handler alongside the raw `Request`. */
81
81
  export interface RawRouteContext {
82
- /** Matched `:param` path segments — empty object for exact / wildcard paths. */
82
+ /**
83
+ * Matched `:param` path segments. A trailing `/*` wildcard also adds its
84
+ * remainder (everything after the prefix) as `params['*']`. Empty for an exact
85
+ * path.
86
+ */
83
87
  params: Record<string, string>;
84
88
  /**
85
89
  * The `Bun.serve` instance — needed for connection upgrades (e.g. WebSocket).
@@ -94,7 +98,11 @@ export interface RawRouteContext {
94
98
  }
95
99
  export interface RawRoute {
96
100
  method: HttpMethod | 'ALL';
97
- /** Exact path, `:param` segments, or a trailing `/*` prefix wildcard. */
101
+ /**
102
+ * Exact path, `:param` segments, or a trailing `/*` prefix wildcard. The
103
+ * wildcard combines with params — `/app/:slug/*` matches `/app/x/a/b` with
104
+ * `params.slug === 'x'` and the remainder in `params['*']`.
105
+ */
98
106
  path: string;
99
107
  /**
100
108
  * Raw handler — a standard `Request → Response` fetch handler plus a routing
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-app.d.ts","sourceRoot":"","sources":["../../src/tools/mcp-app.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAE9D,oFAAoF;AACpF,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AAErE;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,kDAAkD;IAClD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACxB,uEAAuE;IACvE,IAAI,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtC;AAID;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4BvD"}
1
+ {"version":3,"file":"mcp-app.d.ts","sourceRoot":"","sources":["../../src/tools/mcp-app.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,8BAA8B,CAAC;AAE9D,oFAAoF;AACpF,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AAErE;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,kDAAkD;IAClD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACxB,uEAAuE;IACvE,IAAI,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkCvD"}
package/dist/tools.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import {
2
- ApiError,
3
- createClient
4
- } from "./index-kdkvp26v.js";
2
+ inputIsQuery,
3
+ signJwt,
4
+ verifyPkce
5
+ } from "./index-9zrq8x5z.js";
5
6
  import {
6
7
  coerceJsonArgs,
7
8
  collectTools,
@@ -13,27 +14,18 @@ import {
13
14
  pollUntil,
14
15
  readCapped,
15
16
  toolResultFromError
16
- } from "./index-p8byjw3e.js";
17
- import {
18
- signJwt,
19
- verifyPkce
20
- } from "./index-hty3443r.js";
21
- import"./index-48ffdxgk.js";
17
+ } from "./index-f39j6twc.js";
22
18
  import {
23
19
  toJsonSchema
24
20
  } from "./index-0ed3bx43.js";
25
21
  import {
22
+ AppError,
26
23
  isWithinDir
27
- } from "./index-x3fcszf8.js";
28
- import"./index-4843j09b.js";
29
- import {
30
- AppError
31
- } from "./index-9bk6r5ff.js";
32
- import"./index-kzfs85xp.js";
24
+ } from "./index-jgpsd7dy.js";
33
25
  import {
34
- isRecord
35
- } from "./index-809wc1tt.js";
36
- import"./index-37x76zdn.js";
26
+ isRecord,
27
+ typedEntries
28
+ } from "./index-tm7dqzxc.js";
37
29
 
38
30
  // src/tools/agent.ts
39
31
  import { tool, zodSchema } from "ai";
@@ -94,16 +86,15 @@ import { z } from "zod";
94
86
 
95
87
  // src/tools/mcp-app.ts
96
88
  import { readFileSync } from "node:fs";
97
- import { createRequire } from "node:module";
89
+ import { fileURLToPath } from "node:url";
98
90
  var RESOURCE_MIME_TYPE = "text/html;profile=mcp-app";
99
91
  var EXT_APPS_BUNDLE_PLACEHOLDER = "/*__EXT_APPS_BUNDLE__*/";
100
- var require2 = createRequire(import.meta.url);
101
92
  function inlineMcpAppBundle(html) {
102
93
  if (!html.includes(EXT_APPS_BUNDLE_PLACEHOLDER))
103
94
  return html;
104
95
  let bundlePath;
105
96
  try {
106
- bundlePath = require2.resolve("@modelcontextprotocol/ext-apps/app-with-deps");
97
+ bundlePath = fileURLToPath(import.meta.resolve("@modelcontextprotocol/ext-apps/app-with-deps"));
107
98
  } catch {
108
99
  throw new Error("[stitchkit] inlineMcpAppBundle: '@modelcontextprotocol/ext-apps' is not installed. " + "Add it as a dependency to serve MCP App widgets.");
109
100
  }
@@ -836,6 +827,247 @@ function mountOAuthProvider(config) {
836
827
  };
837
828
  return [metadataRoute, registerRoute, authorizeRoute, tokenRoute];
838
829
  }
830
+ // src/browser/http.ts
831
+ import ky, { isHTTPError } from "ky";
832
+ class ApiError extends Error {
833
+ code;
834
+ status;
835
+ details;
836
+ hint;
837
+ constructor(code, status = 0, details, message, hint) {
838
+ super(message ?? `API Error: ${code}`);
839
+ this.code = code;
840
+ this.status = status;
841
+ this.details = details;
842
+ this.hint = hint;
843
+ this.name = "ApiError";
844
+ }
845
+ static is(error) {
846
+ return error instanceof ApiError;
847
+ }
848
+ }
849
+ function parseApiErrorBody(body) {
850
+ if (!isRecord(body) || !isRecord(body.error))
851
+ return null;
852
+ const error = body.error;
853
+ if (typeof error.code !== "string")
854
+ return null;
855
+ return {
856
+ code: error.code,
857
+ message: typeof error.message === "string" ? error.message : undefined,
858
+ details: error.details,
859
+ hint: typeof error.hint === "string" ? error.hint : undefined
860
+ };
861
+ }
862
+
863
+ // src/browser/client.ts
864
+ function withTimeout(options, timeout) {
865
+ if (timeout === undefined)
866
+ return options;
867
+ return { ...options, timeout };
868
+ }
869
+ function isParamArray(value) {
870
+ return Array.isArray(value) && value.every((v) => typeof v === "string" || typeof v === "number");
871
+ }
872
+ function collectQueryParams(args, skipKeys) {
873
+ const params = {};
874
+ let hasParams = false;
875
+ for (const [key, value] of Object.entries(args)) {
876
+ if (skipKeys.has(key) || value === undefined || value === null)
877
+ continue;
878
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean" || isParamArray(value)) {
879
+ params[key] = value;
880
+ hasParams = true;
881
+ }
882
+ }
883
+ return hasParams ? params : undefined;
884
+ }
885
+ function createClient(contract, configOrClient, contractConfig) {
886
+ const client = {};
887
+ const makeMethod = isHttpAdapter(configOrClient) ? (endpoint) => createHttpMethod(endpoint, contract.meta.prefix, configOrClient, contractConfig) : (endpoint) => createFetchMethod(endpoint, contract.meta.prefix, configOrClient, contractConfig);
888
+ for (const [key, endpoint] of typedEntries(contract.endpoints)) {
889
+ if (endpoint.expose && !endpoint.expose.includes("HTTP"))
890
+ continue;
891
+ setClientMethod(client, key, makeMethod(endpoint));
892
+ }
893
+ return client;
894
+ }
895
+ function isHttpAdapter(value) {
896
+ return typeof value === "object" && "get" in value && typeof value.get === "function";
897
+ }
898
+ function setClientMethod(target, key, method) {
899
+ target[key] = method;
900
+ }
901
+ function createHttpMethod(endpoint, prefix, client, config) {
902
+ const httpMethod = endpoint.method.toLowerCase();
903
+ const isGet = httpMethod === "get";
904
+ const paramNames = extractParamNames(endpoint.path);
905
+ const prefixKeys = new Set([...config?.stripPrefixKeys ?? [], ...paramNames]);
906
+ return (...args) => {
907
+ const firstArg = args[0] ?? {};
908
+ let pathPrefixStr = "";
909
+ if (config?.pathPrefix) {
910
+ pathPrefixStr = typeof config.pathPrefix === "function" ? config.pathPrefix(firstArg) : config.pathPrefix;
911
+ if (pathPrefixStr && !pathPrefixStr.endsWith("/"))
912
+ pathPrefixStr += "/";
913
+ }
914
+ let url = `${pathPrefixStr}${prefix}${endpoint.path}`;
915
+ for (const name of paramNames) {
916
+ const value = firstArg[name];
917
+ if (value === undefined || value === null) {
918
+ throw new Error(`Missing path param: ${name}`);
919
+ }
920
+ url = url.replace(`:${name}`, encodeURIComponent(String(value)));
921
+ }
922
+ if (url.endsWith("/"))
923
+ url = url.slice(0, -1);
924
+ if (endpoint.multipart) {
925
+ const file = firstArg[endpoint.multipart];
926
+ if (!(file instanceof Blob)) {
927
+ throw new Error(`Missing multipart file field: ${endpoint.multipart}`);
928
+ }
929
+ const formData = new FormData;
930
+ formData.append(endpoint.multipart, file);
931
+ appendFormFields(formData, firstArg, new Set([...prefixKeys, endpoint.multipart]));
932
+ return client.post(url, formData, withTimeout(undefined, endpoint.timeout));
933
+ }
934
+ if (isGet) {
935
+ const params = collectQueryParams(firstArg, prefixKeys);
936
+ return client.get(url, withTimeout(params ? { params } : undefined, endpoint.timeout));
937
+ }
938
+ if (httpMethod === "delete") {
939
+ const params = collectQueryParams(firstArg, prefixKeys);
940
+ return client.delete(url, withTimeout(params ? { params } : undefined, endpoint.timeout));
941
+ }
942
+ const payload = {};
943
+ for (const [key, value] of Object.entries(firstArg)) {
944
+ if (!prefixKeys.has(key) && value !== undefined) {
945
+ payload[key] = value;
946
+ }
947
+ }
948
+ return client[httpMethod](url, Object.keys(payload).length > 0 ? payload : undefined, withTimeout(undefined, endpoint.timeout));
949
+ };
950
+ }
951
+ function createFetchMethod(endpoint, prefix, config, contractConfig) {
952
+ const prefixKeys = new Set(contractConfig?.stripPrefixKeys ?? []);
953
+ return async (args) => {
954
+ let pathPrefixStr = "";
955
+ if (contractConfig?.pathPrefix) {
956
+ pathPrefixStr = typeof contractConfig.pathPrefix === "function" ? contractConfig.pathPrefix(args ?? {}) : contractConfig.pathPrefix;
957
+ if (pathPrefixStr && !pathPrefixStr.endsWith("/"))
958
+ pathPrefixStr += "/";
959
+ }
960
+ let url = buildFetchUrl(config.baseUrl, prefix, endpoint.path, args, pathPrefixStr);
961
+ const headers = {
962
+ Accept: "application/json",
963
+ ...typeof config.headers === "function" ? config.headers() : config.headers
964
+ };
965
+ const isQuery = inputIsQuery(endpoint.method);
966
+ const hasBody = !isQuery && !endpoint.multipart && endpoint.input && args;
967
+ if (isQuery && args) {
968
+ const remaining = stripParams(args, endpoint.path, prefixKeys);
969
+ const searchParams = new URLSearchParams;
970
+ for (const [k, v] of Object.entries(remaining)) {
971
+ if (v === undefined || v === null)
972
+ continue;
973
+ if (isParamArray(v)) {
974
+ for (const item of v)
975
+ searchParams.append(k, String(item));
976
+ } else if (typeof v !== "object") {
977
+ searchParams.set(k, String(v));
978
+ }
979
+ }
980
+ if (searchParams.size > 0)
981
+ url += `?${searchParams}`;
982
+ }
983
+ if (hasBody)
984
+ headers["Content-Type"] = "application/json";
985
+ if (endpoint.multipart && args) {
986
+ const file = args[endpoint.multipart];
987
+ if (!(file instanceof Blob)) {
988
+ throw new Error(`Missing multipart file field: ${endpoint.multipart}`);
989
+ }
990
+ const formData = new FormData;
991
+ formData.append(endpoint.multipart, file);
992
+ appendFormFields(formData, stripParams(args, endpoint.path, prefixKeys), new Set([endpoint.multipart]));
993
+ const res2 = await fetch(url, {
994
+ method: endpoint.method,
995
+ headers,
996
+ credentials: config.credentials,
997
+ body: formData
998
+ });
999
+ if (!res2.ok) {
1000
+ await throwForErrorResponse(res2, config, null);
1001
+ }
1002
+ if (res2.status === 204)
1003
+ return;
1004
+ const json3 = await res2.json();
1005
+ return endpoint.output ? endpoint.output.parse(json3) : json3;
1006
+ }
1007
+ const res = await fetch(url, {
1008
+ method: endpoint.method,
1009
+ headers,
1010
+ credentials: config.credentials,
1011
+ ...hasBody && {
1012
+ body: JSON.stringify(stripParams(hasBody, endpoint.path, prefixKeys))
1013
+ }
1014
+ });
1015
+ if (!res.ok) {
1016
+ await throwForErrorResponse(res, config, { error: res.statusText });
1017
+ }
1018
+ if (res.status === 204)
1019
+ return;
1020
+ const json2 = await res.json();
1021
+ return endpoint.output ? endpoint.output.parse(json2) : json2;
1022
+ };
1023
+ }
1024
+ function appendFormFields(formData, values, skipKeys) {
1025
+ for (const [key, value] of Object.entries(values)) {
1026
+ if (skipKeys.has(key) || value === undefined || value === null)
1027
+ continue;
1028
+ formData.append(key, typeof value === "string" ? value : JSON.stringify(value));
1029
+ }
1030
+ }
1031
+ async function throwForErrorResponse(res, config, fallbackBody) {
1032
+ const body = await res.json().catch(() => fallbackBody);
1033
+ config.onError?.(res.status, body);
1034
+ const parsed = parseApiErrorBody(body);
1035
+ if (parsed) {
1036
+ throw new ApiError(parsed.code, res.status, parsed.details, parsed.message, parsed.hint);
1037
+ }
1038
+ throw new ApiError("HTTP_ERROR", res.status, { body });
1039
+ }
1040
+ function extractParamNames(path) {
1041
+ const matches = path.match(/:(\w+)/g);
1042
+ return matches ? matches.map((m) => m.slice(1)) : [];
1043
+ }
1044
+ function buildFetchUrl(baseUrl, prefix, path, args, pathPrefix = "") {
1045
+ let fullPath = `/${pathPrefix}${prefix}${path === "/" ? "" : path}`;
1046
+ if (args) {
1047
+ fullPath = fullPath.replace(/:(\w+)/g, (_, key) => {
1048
+ const val = args[key];
1049
+ if (val === undefined || val === null) {
1050
+ throw new Error(`Missing path param: ${key}`);
1051
+ }
1052
+ return encodeURIComponent(String(val));
1053
+ });
1054
+ }
1055
+ return `${baseUrl}${fullPath}`;
1056
+ }
1057
+ function stripParams(args, path, extra) {
1058
+ const skip = new Set(extra);
1059
+ for (const match of path.matchAll(/:(\w+)/g)) {
1060
+ if (match[1])
1061
+ skip.add(match[1]);
1062
+ }
1063
+ const result = {};
1064
+ for (const [k, v] of Object.entries(args)) {
1065
+ if (!skip.has(k))
1066
+ result[k] = v;
1067
+ }
1068
+ return result;
1069
+ }
1070
+
839
1071
  // src/tools/remote.ts
840
1072
  function toArgs(ctx) {
841
1073
  const { params, input } = ctx;