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.04 kB
Source Map (JSON)
{"version":3,"file":"middleware.cjs","names":["debugPrefix","#logger","DiagLogLevel","processor: InngestSpanProcessor | undefined","extendProvider","createProvider","Middleware","diag","trace","version"],"sources":["../../../../src/components/execution/otel/middleware.ts"],"sourcesContent":["import { type DiagLogger, DiagLogLevel, diag, trace } from \"@opentelemetry/api\";\nimport Debug from \"debug\";\nimport type { Logger } from \"../../../middleware/logger.ts\";\nimport { version } from \"../../../version.ts\";\nimport { Middleware } from \"../../middleware/middleware.ts\";\nimport { clientProcessorMap } from \"./access.ts\";\nimport { debugPrefix } from \"./consts.ts\";\nimport type { InngestSpanProcessor } from \"./processor.ts\";\nimport {\n type Behaviour,\n createProvider,\n extendProvider,\n type Instrumentations,\n} from \"./util.ts\";\n\nconst devDebug = Debug(`${debugPrefix}:middleware`);\n\nclass InngestTracesLogger implements DiagLogger {\n #logger = Debug(`${debugPrefix}:diag`);\n\n debug = this.#logger;\n error = this.#logger;\n info = this.#logger;\n verbose = this.#logger;\n warn = this.#logger;\n}\n\n/**\n * A set of options for the Extended Traces middleware.\n */\nexport interface ExtendedTracesMiddlewareOptions {\n /**\n * The behaviour of the Extended Traces middleware. This controls whether the\n * middleware will create a new OpenTelemetry provider, extend an existing one, or\n * do nothing. The default is \"auto\", which will attempt to extend an\n * existing provider, and if that fails, create a new one.\n *\n * - `\"auto\"`: Attempt to extend an existing provider, and if that fails,\n * create a new one.\n * - `\"createProvider\"`: Create a new OpenTelemetry provider.\n * - `\"extendProvider\"`: Attempt to extend an existing provider.\n * - `\"off\"`: Do nothing.\n */\n behaviour?: Behaviour;\n\n /**\n * Add additional instrumentations to the OpenTelemetry provider.\n *\n * Note that these only apply if the provider is created by the middleware;\n * extending an existing provider cannot add instrumentations and it instead\n * must be done wherever the provider is created.\n */\n instrumentations?: Instrumentations;\n\n /**\n * The log level for the Extended Traces middleware, specifically a diagnostic logger\n * attached to the global OpenTelemetry provider.\n *\n * Defaults to `DiagLogLevel.ERROR`.\n */\n logLevel?: DiagLogLevel;\n}\n\n/**\n * Middleware the captures and exports spans relevant to Inngest runs using\n * OTel.\n *\n * This can be used to attach additional spans and data to the existing traces\n * in your Inngest dashboard (or Dev Server).\n */\nexport const extendedTracesMiddleware = ({\n behaviour = \"auto\",\n instrumentations,\n logLevel = DiagLogLevel.ERROR,\n}: ExtendedTracesMiddlewareOptions = {}) => {\n devDebug(\"behaviour:\", behaviour);\n\n let processor: InngestSpanProcessor | undefined;\n\n switch (behaviour) {\n case \"auto\": {\n const extended = extendProvider(behaviour);\n if (extended.success) {\n devDebug(\"extended existing provider\");\n processor = extended.processor;\n break;\n }\n\n const created = createProvider(behaviour, instrumentations);\n if (created.success) {\n devDebug(\"created new provider\");\n processor = created.processor;\n break;\n }\n\n console.warn(\"no provider found to extend and unable to create one\");\n\n break;\n }\n case \"createProvider\": {\n const created = createProvider(behaviour, instrumentations);\n if (created.success) {\n devDebug(\"created new provider\");\n processor = created.processor;\n break;\n }\n\n console.warn(\n \"unable to create provider, Extended Traces middleware will not work\",\n );\n\n break;\n }\n case \"extendProvider\": {\n const extended = extendProvider(behaviour);\n if (extended.success) {\n devDebug(\"extended existing provider\");\n processor = extended.processor;\n break;\n }\n\n console.warn(\n 'unable to extend provider, Extended Traces middleware will not work. Either allow the middleware to create a provider by setting `behaviour: \"createProvider\"` or `behaviour: \"auto\"`, or make sure that the provider is created and imported before the middleware is used.',\n );\n\n break;\n }\n case \"off\": {\n break;\n }\n default: {\n // unknown\n console.warn(\n `unknown behaviour ${JSON.stringify(behaviour)}, defaulting to \"off\"`,\n );\n }\n }\n\n class ExtendedTracesMiddleware extends Middleware.BaseMiddleware {\n readonly id = \"inngest:extended-traces\";\n\n /**\n * Called by the Inngest constructor to associate the processor with the\n * client.\n */\n static override onRegister({ client }: Middleware.OnRegisterArgs) {\n // Set the logger for our otel processors and exporters.\n // If this is called multiple times, only the first call is set.\n devDebug(\n \"set otel diagLogger:\",\n diag.setLogger(new InngestTracesLogger(), logLevel),\n );\n\n if (processor) {\n clientProcessorMap.set(client, processor);\n }\n }\n\n override transformFunctionInput(\n arg: Middleware.TransformFunctionInputArgs,\n ) {\n return {\n ...arg,\n ctx: {\n ...arg.ctx,\n tracer: trace.getTracer(\"inngest\", version),\n },\n };\n }\n\n override wrapRequest({ next }: Middleware.WrapRequestArgs) {\n return next().finally(() => processor?.forceFlush());\n }\n }\n\n return ExtendedTracesMiddleware;\n};\n"],"mappings":";;;;;;;;;;;AAeA,MAAM,8BAAiB,GAAGA,2BAAY,aAAa;AAEnD,IAAM,sBAAN,MAAgD;CAC9C,6BAAgB,GAAGA,2BAAY,OAAO;CAEtC,QAAQ,MAAKC;CACb,QAAQ,MAAKA;CACb,OAAO,MAAKA;CACZ,UAAU,MAAKA;CACf,OAAO,MAAKA;;;;;;;;;AA8Cd,MAAa,4BAA4B,EACvC,YAAY,QACZ,kBACA,WAAWC,iCAAa,UACW,EAAE,KAAK;AAC1C,UAAS,cAAc,UAAU;CAEjC,IAAIC;AAEJ,SAAQ,WAAR;EACE,KAAK,QAAQ;GACX,MAAM,WAAWC,4BAAe,UAAU;AAC1C,OAAI,SAAS,SAAS;AACpB,aAAS,6BAA6B;AACtC,gBAAY,SAAS;AACrB;;GAGF,MAAM,UAAUC,4BAAe,WAAW,iBAAiB;AAC3D,OAAI,QAAQ,SAAS;AACnB,aAAS,uBAAuB;AAChC,gBAAY,QAAQ;AACpB;;AAGF,WAAQ,KAAK,uDAAuD;AAEpE;;EAEF,KAAK,kBAAkB;GACrB,MAAM,UAAUA,4BAAe,WAAW,iBAAiB;AAC3D,OAAI,QAAQ,SAAS;AACnB,aAAS,uBAAuB;AAChC,gBAAY,QAAQ;AACpB;;AAGF,WAAQ,KACN,sEACD;AAED;;EAEF,KAAK,kBAAkB;GACrB,MAAM,WAAWD,4BAAe,UAAU;AAC1C,OAAI,SAAS,SAAS;AACpB,aAAS,6BAA6B;AACtC,gBAAY,SAAS;AACrB;;AAGF,WAAQ,KACN,mRACD;AAED;;EAEF,KAAK,MACH;EAEF,QAEE,SAAQ,KACN,qBAAqB,KAAK,UAAU,UAAU,CAAC,uBAChD;;CAIL,MAAM,iCAAiCE,8BAAW,eAAe;EAC/D,AAAS,KAAK;;;;;EAMd,OAAgB,WAAW,EAAE,UAAqC;AAGhE,YACE,wBACAC,yBAAK,UAAU,IAAI,qBAAqB,EAAE,SAAS,CACpD;AAED,OAAI,UACF,mCAAmB,IAAI,QAAQ,UAAU;;EAI7C,AAAS,uBACP,KACA;AACA,UAAO;IACL,GAAG;IACH,KAAK;KACH,GAAG,IAAI;KACP,QAAQC,0BAAM,UAAU,WAAWC,wBAAQ;KAC5C;IACF;;EAGH,AAAS,YAAY,EAAE,QAAoC;AACzD,UAAO,MAAM,CAAC,cAAc,WAAW,YAAY,CAAC;;;AAIxD,QAAO"}