{"version":3,"file":"config.cjs","names":["result: Record<\n    string,\n    { client: Inngest.Like; functions: InngestFunction.Any[] }\n  >","getEnvironmentName","hashSigningKey","capabilities: Capabilities","functionConfigs: Record<\n    string,\n    { client: Inngest.Like; functions: FunctionConfig[] }\n  >","internalLoggerSymbol","connectionData: ConnectionEstablishData","requestHandlers: Record<string, RequestHandler>","inngestCommHandler: ConnectCommHandler","InngestCommHandler","DefaultMaxRuntime","parseFnData","parseTraceCtx","headerKeys","sdkResponseStatus: SDKResponseStatus","SDKResponseStatus","SDKResponse","version","PREFERRED_ASYNC_EXECUTION_VERSION","queryKeys"],"sources":["../../../src/components/connect/config.ts"],"sourcesContent":["/**\n * Connection configuration preparation.\n *\n * Encapsulates signing key hashing, function config building,\n * InngestCommHandler creation, and connection data assembly — everything\n * needed before handing off to a connection strategy.\n */\n\nimport { envKeys, headerKeys, queryKeys } from \"../../helpers/consts.ts\";\nimport { getEnvironmentName } from \"../../helpers/env.ts\";\nimport { parseFnData } from \"../../helpers/functions.ts\";\nimport { hashSigningKey } from \"../../helpers/strings.ts\";\nimport {\n  type GatewayExecutorRequestData,\n  SDKResponse,\n  SDKResponseStatus,\n} from \"../../proto/src/components/connect/protobuf/connect.ts\";\nimport {\n  type Capabilities,\n  DefaultMaxRuntime,\n  type FunctionConfig,\n} from \"../../types.ts\";\nimport { version } from \"../../version.ts\";\nimport { PREFERRED_ASYNC_EXECUTION_VERSION } from \"../execution/InngestExecution.ts\";\nimport { type Inngest, internalLoggerSymbol } from \"../Inngest.ts\";\nimport { InngestCommHandler } from \"../InngestCommHandler.ts\";\nimport type { InngestFunction } from \"../InngestFunction.ts\";\nimport type {\n  ConnectionEstablishData,\n  RequestHandler,\n} from \"./strategies/index.ts\";\nimport type { ConnectApp } from \"./types.ts\";\nimport { parseTraceCtx } from \"./util.ts\";\n\nconst InngestBranchEnvironmentSigningKeyPrefix = \"signkey-branch-\";\n\ntype ConnectCommHandler = InngestCommHandler<\n  [GatewayExecutorRequestData],\n  SDKResponse,\n  // biome-ignore lint/suspicious/noExplicitAny: intentional\n  any\n>;\n\nexport interface PreparedConnectionConfig {\n  hashedSigningKey: string | undefined;\n  hashedFallbackKey: string | undefined;\n  envName: string | undefined;\n  connectionData: ConnectionEstablishData;\n  requestHandlers: Record<string, RequestHandler>;\n}\n\n/**\n * Collect per-app client + functions from ConnectApp definitions.\n */\nfunction collectFunctions(\n  apps: ConnectApp[],\n): Record<string, { client: Inngest.Like; functions: InngestFunction.Any[] }> {\n  const result: Record<\n    string,\n    { client: Inngest.Like; functions: InngestFunction.Any[] }\n  > = {};\n\n  for (const app of apps) {\n    const client = app.client as Inngest.Any;\n    if (result[client.id]) {\n      throw new Error(`Duplicate app id: ${client.id}`);\n    }\n    result[client.id] = {\n      client: app.client,\n      functions: (app.functions as InngestFunction.Any[]) ?? client.funcs,\n    };\n  }\n\n  return result;\n}\n\n/**\n * Prepare all connection configuration: signing keys, function configs,\n * connection data, and request handlers.\n */\nexport function prepareConnectionConfig(\n  apps: ConnectApp[],\n  inngest: Inngest.Any,\n): PreparedConnectionConfig {\n  const envName = inngest.env ?? getEnvironmentName();\n\n  const hashedSigningKey = inngest.signingKey\n    ? hashSigningKey(inngest.signingKey)\n    : undefined;\n\n  if (\n    inngest.signingKey &&\n    inngest.signingKey.startsWith(InngestBranchEnvironmentSigningKeyPrefix) &&\n    !envName\n  ) {\n    throw new Error(\n      \"Environment is required when using branch environment signing keys\",\n    );\n  }\n\n  const hashedFallbackKey = inngest.signingKeyFallback\n    ? hashSigningKey(inngest.signingKeyFallback)\n    : undefined;\n\n  // Build capabilities\n  const capabilities: Capabilities = {\n    trust_probe: \"v1\",\n    connect: \"v1\",\n  };\n\n  const functions = collectFunctions(apps);\n\n  // Build function configs\n  const functionConfigs: Record<\n    string,\n    { client: Inngest.Like; functions: FunctionConfig[] }\n  > = {};\n  for (const [appId, { client, functions: fns }] of Object.entries(functions)) {\n    functionConfigs[appId] = {\n      client: client,\n      functions: fns.flatMap((f) =>\n        f[\"getConfig\"]({\n          baseUrl: new URL(\"wss://connect\"),\n          appPrefix: (client as Inngest.Any).id,\n          isConnect: true,\n        }),\n      ),\n    };\n  }\n\n  inngest[internalLoggerSymbol].debug(\n    {\n      functionSlugs: Object.entries(functionConfigs).map(\n        ([appId, { functions: fns }]) => {\n          return JSON.stringify({\n            appId,\n            functions: fns.map((f) => ({\n              id: f.id,\n              stepUrls: Object.values(f.steps).map((s) => s.runtime[\"url\"]),\n            })),\n          });\n        },\n      ),\n    },\n    \"Prepared sync data\",\n  );\n\n  // Build connection establish data\n  const connectionData: ConnectionEstablishData = {\n    manualReadinessAck: true,\n    marshaledCapabilities: JSON.stringify(capabilities),\n    apps: Object.entries(functionConfigs).map(\n      ([appId, { client, functions: fns }]) => ({\n        appName: appId,\n        appVersion: (client as Inngest.Any).appVersion,\n        functions: new TextEncoder().encode(JSON.stringify(fns)),\n      }),\n    ),\n  };\n\n  // Build request handlers\n  const requestHandlers: Record<string, RequestHandler> = {};\n  for (const [appId, { client, functions: fns }] of Object.entries(functions)) {\n    const inngestCommHandler: ConnectCommHandler = new InngestCommHandler({\n      client: client,\n      functions: fns,\n      frameworkName: \"connect\",\n      defaultMaxRuntime: DefaultMaxRuntime.connect,\n      skipSignatureValidation: true,\n      handler: (msg: GatewayExecutorRequestData) => {\n        const asString = new TextDecoder().decode(msg.requestPayload);\n        const parsed = parseFnData(\n          JSON.parse(asString),\n          undefined,\n          inngest[internalLoggerSymbol],\n        );\n\n        const userTraceCtx = parseTraceCtx(msg.userTraceCtx);\n\n        return {\n          body() {\n            return parsed;\n          },\n          method() {\n            return \"POST\";\n          },\n          headers(key) {\n            switch (key) {\n              case headerKeys.ContentLength.toString():\n                return asString.length.toString();\n              case headerKeys.InngestExpectedServerKind.toString():\n                return \"connect\";\n              case headerKeys.RequestVersion.toString():\n                return parsed.version.toString();\n              case headerKeys.RequestId.toString():\n                return msg.requestId;\n              case headerKeys.InngestJobId.toString():\n                return msg.jobId;\n              case headerKeys.Signature.toString():\n                return null;\n              case headerKeys.TraceParent.toString():\n                return userTraceCtx?.traceParent ?? null;\n              case headerKeys.TraceState.toString():\n                return userTraceCtx?.traceState ?? null;\n              default:\n                return null;\n            }\n          },\n          transformResponse({ body, headers, status }) {\n            let sdkResponseStatus: SDKResponseStatus = SDKResponseStatus.DONE;\n            switch (status) {\n              case 200:\n                sdkResponseStatus = SDKResponseStatus.DONE;\n                break;\n              case 206:\n                sdkResponseStatus = SDKResponseStatus.NOT_COMPLETED;\n                break;\n              case 500:\n                sdkResponseStatus = SDKResponseStatus.ERROR;\n                break;\n            }\n\n            return SDKResponse.create({\n              requestId: msg.requestId,\n              accountId: msg.accountId,\n              envId: msg.envId,\n              appId: msg.appId,\n              status: sdkResponseStatus,\n              body: new TextEncoder().encode(body),\n              noRetry: headers[headerKeys.NoRetry] === \"true\",\n              retryAfter: headers[headerKeys.RetryAfter],\n              sdkVersion: `inngest-js:v${version}`,\n              requestVersion: parseInt(\n                headers[headerKeys.RequestVersion] ??\n                  PREFERRED_ASYNC_EXECUTION_VERSION.toString(),\n                10,\n              ),\n              systemTraceCtx: msg.systemTraceCtx,\n              userTraceCtx: msg.userTraceCtx,\n              runId: msg.runId,\n            });\n          },\n          url() {\n            const baseUrl = new URL(\"http://connect.inngest.com\");\n\n            baseUrl.searchParams.set(queryKeys.FnId, msg.functionSlug);\n\n            if (msg.stepId) {\n              baseUrl.searchParams.set(queryKeys.StepId, msg.stepId);\n            }\n\n            return baseUrl;\n          },\n        };\n      },\n    });\n\n    if (!inngestCommHandler.checkModeConfiguration()) {\n      throw new Error(\"Signing key is required\");\n    }\n\n    const requestHandler = inngestCommHandler.createHandler();\n    requestHandlers[appId] = requestHandler;\n  }\n\n  return {\n    hashedSigningKey,\n    hashedFallbackKey,\n    envName,\n    connectionData,\n    requestHandlers,\n  };\n}\n"],"mappings":"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"}