MCPcopy Create free account
hub / github.com/UsefulSoftwareCo/executor / buildBridge

Function buildBridge

packages/plugins/apps/src/plugin/bindings.ts:136–176  ·  view source on GitHub ↗
(input: {
  readonly declared: Readonly<Record<string, IntegrationDecl>>;
  readonly bindings: Readonly<Record<string, string | readonly string[]>>;
  readonly resolver: ClientResolver;
  readonly invokeOptions?: InvokeOptions;
})

Source from the content-addressed store, hash-verified

134 });
135
136export const buildBridge = (input: {
137 readonly declared: Readonly<Record<string, IntegrationDecl>>;
138 readonly bindings: Readonly<Record<string, string | readonly string[]>>;
139 readonly resolver: ClientResolver;
140 readonly invokeOptions?: InvokeOptions;
141}): AppToolBridge => ({
142 call: (toolPath, args) => {
143 const [root, ...path] = toolPath.split(".");
144 const [field, rawIndex] = (root ?? "").split("#");
145 const decl = input.declared[field ?? ""];
146 const binding = input.bindings[field ?? ""];
147 const connection =
148 rawIndex === undefined
149 ? typeof binding === "string"
150 ? binding
151 : undefined
152 : Array.isArray(binding)
153 ? binding[Number(rawIndex)]
154 : undefined;
155 if (!field || !decl || !connection || path.length === 0) {
156 return Effect.runPromise(
157 Effect.fail(
158 new BindingError({
159 role: field ?? "",
160 integration: decl?.slug ?? "",
161 message: `undeclared integration call: ${toolPath}`,
162 }),
163 ),
164 );
165 }
166 return Effect.runPromise(
167 input.resolver.call({
168 integration: decl.slug,
169 connection,
170 path,
171 args,
172 invokeOptions: input.invokeOptions,
173 }),
174 );
175 },
176});

Callers 2

bindings.test.tsFile · 0.90
makeAppsPluginFunction · 0.90

Calls 1

callMethod · 0.80

Tested by

no test coverage detected