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.
162 lines (160 loc) • 6.54 kB
JavaScript
const require_consts = require('../../helpers/consts.cjs');
const require_version = require('../../version.cjs');
const require_env = require('../../helpers/env.cjs');
const require_types = require('../../types.cjs');
const require_InngestExecution = require('../execution/InngestExecution.cjs');
const require_functions = require('../../helpers/functions.cjs');
const require_strings = require('../../helpers/strings.cjs');
const require_Inngest = require('../Inngest.cjs');
const require_InngestCommHandler = require('../InngestCommHandler.cjs');
const require_connect = require('../../proto/src/components/connect/protobuf/connect.cjs');
const require_util = require('./util.cjs');
//#region src/components/connect/config.ts
/**
* Connection configuration preparation.
*
* Encapsulates signing key hashing, function config building,
* InngestCommHandler creation, and connection data assembly — everything
* needed before handing off to a connection strategy.
*/
const InngestBranchEnvironmentSigningKeyPrefix = "signkey-branch-";
/**
* Collect per-app client + functions from ConnectApp definitions.
*/
function collectFunctions(apps) {
const result = {};
for (const app of apps) {
const client = app.client;
if (result[client.id]) throw new Error(`Duplicate app id: ${client.id}`);
result[client.id] = {
client: app.client,
functions: app.functions ?? client.funcs
};
}
return result;
}
/**
* Prepare all connection configuration: signing keys, function configs,
* connection data, and request handlers.
*/
function prepareConnectionConfig(apps, inngest) {
const envName = inngest.env ?? require_env.getEnvironmentName();
const hashedSigningKey = inngest.signingKey ? require_strings.hashSigningKey(inngest.signingKey) : void 0;
if (inngest.signingKey && inngest.signingKey.startsWith(InngestBranchEnvironmentSigningKeyPrefix) && !envName) throw new Error("Environment is required when using branch environment signing keys");
const hashedFallbackKey = inngest.signingKeyFallback ? require_strings.hashSigningKey(inngest.signingKeyFallback) : void 0;
const capabilities = {
trust_probe: "v1",
connect: "v1"
};
const functions = collectFunctions(apps);
const functionConfigs = {};
for (const [appId, { client, functions: fns }] of Object.entries(functions)) functionConfigs[appId] = {
client,
functions: fns.flatMap((f) => f["getConfig"]({
baseUrl: new URL("wss://connect"),
appPrefix: client.id,
isConnect: true
}))
};
inngest[require_Inngest.internalLoggerSymbol].debug({ functionSlugs: Object.entries(functionConfigs).map(([appId, { functions: fns }]) => {
return JSON.stringify({
appId,
functions: fns.map((f) => ({
id: f.id,
stepUrls: Object.values(f.steps).map((s) => s.runtime["url"])
}))
});
}) }, "Prepared sync data");
const connectionData = {
manualReadinessAck: true,
marshaledCapabilities: JSON.stringify(capabilities),
apps: Object.entries(functionConfigs).map(([appId, { client, functions: fns }]) => ({
appName: appId,
appVersion: client.appVersion,
functions: new TextEncoder().encode(JSON.stringify(fns))
}))
};
const requestHandlers = {};
for (const [appId, { client, functions: fns }] of Object.entries(functions)) {
const inngestCommHandler = new require_InngestCommHandler.InngestCommHandler({
client,
functions: fns,
frameworkName: "connect",
defaultMaxRuntime: require_types.DefaultMaxRuntime.connect,
skipSignatureValidation: true,
handler: (msg) => {
const asString = new TextDecoder().decode(msg.requestPayload);
const parsed = require_functions.parseFnData(JSON.parse(asString), void 0, inngest[require_Inngest.internalLoggerSymbol]);
const userTraceCtx = require_util.parseTraceCtx(msg.userTraceCtx);
return {
body() {
return parsed;
},
method() {
return "POST";
},
headers(key) {
switch (key) {
case require_consts.headerKeys.ContentLength.toString(): return asString.length.toString();
case require_consts.headerKeys.InngestExpectedServerKind.toString(): return "connect";
case require_consts.headerKeys.RequestVersion.toString(): return parsed.version.toString();
case require_consts.headerKeys.RequestId.toString(): return msg.requestId;
case require_consts.headerKeys.InngestJobId.toString(): return msg.jobId;
case require_consts.headerKeys.Signature.toString(): return null;
case require_consts.headerKeys.TraceParent.toString(): return userTraceCtx?.traceParent ?? null;
case require_consts.headerKeys.TraceState.toString(): return userTraceCtx?.traceState ?? null;
default: return null;
}
},
transformResponse({ body, headers, status }) {
let sdkResponseStatus = require_connect.SDKResponseStatus.DONE;
switch (status) {
case 200:
sdkResponseStatus = require_connect.SDKResponseStatus.DONE;
break;
case 206:
sdkResponseStatus = require_connect.SDKResponseStatus.NOT_COMPLETED;
break;
case 500:
sdkResponseStatus = require_connect.SDKResponseStatus.ERROR;
break;
}
return require_connect.SDKResponse.create({
requestId: msg.requestId,
accountId: msg.accountId,
envId: msg.envId,
appId: msg.appId,
status: sdkResponseStatus,
body: new TextEncoder().encode(body),
noRetry: headers[require_consts.headerKeys.NoRetry] === "true",
retryAfter: headers[require_consts.headerKeys.RetryAfter],
sdkVersion: `inngest-js:v${require_version.version}`,
requestVersion: parseInt(headers[require_consts.headerKeys.RequestVersion] ?? require_InngestExecution.PREFERRED_ASYNC_EXECUTION_VERSION.toString(), 10),
systemTraceCtx: msg.systemTraceCtx,
userTraceCtx: msg.userTraceCtx,
runId: msg.runId
});
},
url() {
const baseUrl = new URL("http://connect.inngest.com");
baseUrl.searchParams.set(require_consts.queryKeys.FnId, msg.functionSlug);
if (msg.stepId) baseUrl.searchParams.set(require_consts.queryKeys.StepId, msg.stepId);
return baseUrl;
}
};
}
});
if (!inngestCommHandler.checkModeConfiguration()) throw new Error("Signing key is required");
requestHandlers[appId] = inngestCommHandler.createHandler();
}
return {
hashedSigningKey,
hashedFallbackKey,
envName,
connectionData,
requestHandlers
};
}
//#endregion
exports.prepareConnectionConfig = prepareConnectionConfig;
//# sourceMappingURL=config.cjs.map