UNPKG

inngest

Version:

Official SDK for Inngest.com. Inngest is the reliability layer for modern applications. Inngest combines durable execution, events, and queues into a zero-infra platform with built-in observability.

1 lines 12.5 kB
{"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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"}