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 • 7.63 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","names":["DEFAULT_SHUTDOWN_SIGNALS","getProcessEnv","envKeys","ConnectionState","internalLoggerSymbol","prepareConnectionConfig","createStrategy"],"sources":["../../../src/components/connect/index.ts"],"sourcesContent":["import { envKeys } from \"../../helpers/consts.ts\";\nimport { getProcessEnv } from \"../../helpers/env.ts\";\nimport { type Inngest, internalLoggerSymbol } from \"../Inngest.ts\";\nimport { prepareConnectionConfig } from \"./config.ts\";\nimport { type ConnectionStrategy, createStrategy } from \"./strategies/index.ts\";\nimport {\n type ConnectApp,\n type ConnectDebugState,\n type ConnectHandlerOptions,\n ConnectionState,\n DEFAULT_SHUTDOWN_SIGNALS,\n type InFlightRequest,\n type WorkerConnection,\n} from \"./types.ts\";\n\n/**\n * WebSocket worker connection that implements the WorkerConnection interface.\n *\n * This class acts as a facade that delegates to a connection strategy.\n * The strategy determines how the WebSocket connection, heartbeater, and\n * lease extender are managed (same thread vs worker thread).\n */\nclass WebSocketWorkerConnection implements WorkerConnection {\n private inngest: Inngest.Any;\n private options: ConnectHandlerOptions;\n private strategy: ConnectionStrategy | undefined;\n\n constructor(options: ConnectHandlerOptions) {\n if (\n !Array.isArray(options.apps) ||\n options.apps.length === 0 ||\n !options.apps[0]\n ) {\n throw new Error(\"No apps provided\");\n }\n\n this.inngest = options.apps[0].client as Inngest.Any;\n for (const app of options.apps) {\n const client = app.client as Inngest.Any;\n\n if (client.env !== this.inngest.env) {\n throw new Error(\n `All apps must be configured to the same environment. ${client.id} is configured to ${client.env} but ${this.inngest.id} is configured to ${this.inngest.env}`,\n );\n }\n }\n\n this.options = this.applyDefaults(options);\n }\n\n private applyDefaults(opts: ConnectHandlerOptions): ConnectHandlerOptions {\n const options = { ...opts };\n if (!Array.isArray(options.handleShutdownSignals)) {\n options.handleShutdownSignals = DEFAULT_SHUTDOWN_SIGNALS;\n }\n\n const env = getProcessEnv();\n\n if (options.maxWorkerConcurrency === undefined) {\n const envValue = env[envKeys.InngestConnectMaxWorkerConcurrency];\n if (envValue) {\n const parsed = Number.parseInt(envValue, 10);\n if (!Number.isNaN(parsed) && parsed > 0) {\n options.maxWorkerConcurrency = parsed;\n }\n }\n }\n\n // Check for worker thread env var (opt-out: false/0 disables isolation)\n if (options.isolateExecution === undefined) {\n const envValue = env[envKeys.InngestConnectIsolateExecution];\n if (envValue === \"0\" || envValue === \"false\") {\n options.isolateExecution = false;\n }\n }\n\n if (options.gatewayUrl === undefined) {\n const envValue = env[envKeys.InngestConnectGatewayUrl];\n if (envValue) {\n options.gatewayUrl = envValue;\n }\n }\n\n return options;\n }\n\n get state(): ConnectionState {\n return this.strategy?.state ?? ConnectionState.CONNECTING;\n }\n\n get connectionId(): string {\n if (!this.strategy?.connectionId) {\n throw new Error(\"Connection not prepared\");\n }\n return this.strategy.connectionId;\n }\n\n get closed(): Promise<void> {\n if (!this.strategy) {\n throw new Error(\"No connection established\");\n }\n return this.strategy.closed;\n }\n\n getDebugState(): ConnectDebugState {\n if (!this.strategy) {\n return {\n state: ConnectionState.CONNECTING,\n activeConnectionId: undefined,\n drainingConnectionId: undefined,\n lastHeartbeatSentAt: undefined,\n lastHeartbeatReceivedAt: undefined,\n lastMessageReceivedAt: undefined,\n shutdownRequested: false,\n inFlightRequestCount: 0,\n inFlightRequests: [],\n };\n }\n return this.strategy.getDebugState();\n }\n\n async close(): Promise<void> {\n if (!this.strategy) {\n return;\n }\n return this.strategy.close();\n }\n\n /**\n * Establish a persistent connection to the gateway.\n */\n async connect(attempt = 0): Promise<void> {\n this.inngest[internalLoggerSymbol].debug(\n { attempt },\n \"Establishing connection\",\n );\n\n const {\n hashedSigningKey,\n hashedFallbackKey,\n envName,\n connectionData,\n requestHandlers,\n } = prepareConnectionConfig(this.options.apps, this.inngest);\n\n // Create and initialize the strategy\n this.strategy = await createStrategy(\n {\n hashedSigningKey,\n hashedFallbackKey,\n internalLogger: this.inngest[internalLoggerSymbol],\n envName,\n connectionData,\n requestHandlers,\n options: this.options,\n apiBaseUrl: this.inngest.apiBaseUrl,\n mode: this.inngest[\"mode\"],\n },\n this.options,\n );\n\n // Delegate to the strategy\n await this.strategy.connect(attempt);\n }\n}\n\n// Export types for convenience\nexport {\n DEFAULT_SHUTDOWN_SIGNALS,\n type ConnectApp,\n type ConnectDebugState,\n type ConnectHandlerOptions,\n ConnectionState,\n type InFlightRequest,\n type WorkerConnection,\n};\n\nexport const connect = async (\n options: ConnectHandlerOptions,\n): Promise<WorkerConnection> => {\n if (options.apps.length === 0) {\n throw new Error(\"No apps provided\");\n }\n\n const conn = new WebSocketWorkerConnection(options);\n\n await conn.connect();\n\n return conn;\n};\n"],"mappings":";;;;;;;;;;;;;;;AAsBA,IAAM,4BAAN,MAA4D;CAC1D,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YAAY,SAAgC;AAC1C,MACE,CAAC,MAAM,QAAQ,QAAQ,KAAK,IAC5B,QAAQ,KAAK,WAAW,KACxB,CAAC,QAAQ,KAAK,GAEd,OAAM,IAAI,MAAM,mBAAmB;AAGrC,OAAK,UAAU,QAAQ,KAAK,GAAG;AAC/B,OAAK,MAAM,OAAO,QAAQ,MAAM;GAC9B,MAAM,SAAS,IAAI;AAEnB,OAAI,OAAO,QAAQ,KAAK,QAAQ,IAC9B,OAAM,IAAI,MACR,wDAAwD,OAAO,GAAG,oBAAoB,OAAO,IAAI,OAAO,KAAK,QAAQ,GAAG,oBAAoB,KAAK,QAAQ,MAC1J;;AAIL,OAAK,UAAU,KAAK,cAAc,QAAQ;;CAG5C,AAAQ,cAAc,MAAoD;EACxE,MAAM,UAAU,EAAE,GAAG,MAAM;AAC3B,MAAI,CAAC,MAAM,QAAQ,QAAQ,sBAAsB,CAC/C,SAAQ,wBAAwBA;EAGlC,MAAM,MAAMC,2BAAe;AAE3B,MAAI,QAAQ,yBAAyB,QAAW;GAC9C,MAAM,WAAW,IAAIC,uBAAQ;AAC7B,OAAI,UAAU;IACZ,MAAM,SAAS,OAAO,SAAS,UAAU,GAAG;AAC5C,QAAI,CAAC,OAAO,MAAM,OAAO,IAAI,SAAS,EACpC,SAAQ,uBAAuB;;;AAMrC,MAAI,QAAQ,qBAAqB,QAAW;GAC1C,MAAM,WAAW,IAAIA,uBAAQ;AAC7B,OAAI,aAAa,OAAO,aAAa,QACnC,SAAQ,mBAAmB;;AAI/B,MAAI,QAAQ,eAAe,QAAW;GACpC,MAAM,WAAW,IAAIA,uBAAQ;AAC7B,OAAI,SACF,SAAQ,aAAa;;AAIzB,SAAO;;CAGT,IAAI,QAAyB;AAC3B,SAAO,KAAK,UAAU,SAASC,8BAAgB;;CAGjD,IAAI,eAAuB;AACzB,MAAI,CAAC,KAAK,UAAU,aAClB,OAAM,IAAI,MAAM,0BAA0B;AAE5C,SAAO,KAAK,SAAS;;CAGvB,IAAI,SAAwB;AAC1B,MAAI,CAAC,KAAK,SACR,OAAM,IAAI,MAAM,4BAA4B;AAE9C,SAAO,KAAK,SAAS;;CAGvB,gBAAmC;AACjC,MAAI,CAAC,KAAK,SACR,QAAO;GACL,OAAOA,8BAAgB;GACvB,oBAAoB;GACpB,sBAAsB;GACtB,qBAAqB;GACrB,yBAAyB;GACzB,uBAAuB;GACvB,mBAAmB;GACnB,sBAAsB;GACtB,kBAAkB,EAAE;GACrB;AAEH,SAAO,KAAK,SAAS,eAAe;;CAGtC,MAAM,QAAuB;AAC3B,MAAI,CAAC,KAAK,SACR;AAEF,SAAO,KAAK,SAAS,OAAO;;;;;CAM9B,MAAM,QAAQ,UAAU,GAAkB;AACxC,OAAK,QAAQC,sCAAsB,MACjC,EAAE,SAAS,EACX,0BACD;EAED,MAAM,EACJ,kBACA,mBACA,SACA,gBACA,oBACEC,uCAAwB,KAAK,QAAQ,MAAM,KAAK,QAAQ;AAG5D,OAAK,WAAW,MAAMC,6BACpB;GACE;GACA;GACA,gBAAgB,KAAK,QAAQF;GAC7B;GACA;GACA;GACA,SAAS,KAAK;GACd,YAAY,KAAK,QAAQ;GACzB,MAAM,KAAK,QAAQ;GACpB,EACD,KAAK,QACN;AAGD,QAAM,KAAK,SAAS,QAAQ,QAAQ;;;AAexC,MAAa,UAAU,OACrB,YAC8B;AAC9B,KAAI,QAAQ,KAAK,WAAW,EAC1B,OAAM,IAAI,MAAM,mBAAmB;CAGrC,MAAM,OAAO,IAAI,0BAA0B,QAAQ;AAEnD,OAAM,KAAK,SAAS;AAEpB,QAAO"}