@lowerdeck/execution-context 1.0.4 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/execution-context.d.ts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.module.js +1 -1
- package/dist/index.module.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/with-execution-context.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/execution-context.ts +6 -0
- package/src/with-execution-context.ts +27 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../src/execution-context.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,qBAAqB,CAAC;CAC/B,GAAG,CACA;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CACtB,CAAC;AAEF,eAAO,IAAI,sBAAsB,GAC/B,OAAO,gBAAgB,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"execution-context.d.ts","sourceRoot":"","sources":["../src/execution-context.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,qBAAqB,CAAC;CAC/B,GAAG,CACA;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CACtB,CAAC;AAEF,eAAO,IAAI,sBAAsB,GAC/B,OAAO,gBAAgB,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,KA4B5C,gBACjB,CAAC"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("@opentelemetry/api"),t=require("@lowerdeck/id"),r=require("@lowerdeck/sentry"),
|
|
1
|
+
var e=require("@opentelemetry/api"),t=require("@lowerdeck/id"),r=require("@lowerdeck/sentry"),n=require("async_hooks"),o=r.getSentry(),c=function(t,r){try{var n,o=function(t){if(n)return t;var o=e.propagation.extract(e.context.active(),c);return Promise.resolve(e.context.with(o,r))},c=function(e){for(var t=e;t;){var r,n,o,c={};if(null!=(r=t.trace)&&r.traceparent&&(c.traceparent=t.trace.traceparent),null!=(n=t.trace)&&n.tracestate&&(c.tracestate=t.trace.tracestate),null!=(o=t.trace)&&o.baggage&&(c.baggage=t.trace.baggage),Object.keys(c).length)return c;t=t.parent}return{}}(t),a=function(){if(!Object.keys(c).length)return Promise.resolve(r()).then(function(e){return n=1,e})}();return Promise.resolve(a&&a.then?a.then(o):o(a))}catch(e){return Promise.reject(e)}},a=new n.AsyncLocalStorage,i=function(){var e=a.getStore();if(!e)throw new Error("No execution context found");return e.context};exports.addAfterHook=function(e){try{var t=a.getStore();if(!t)throw new Error("No execution context found");if(!t.afterHooks)throw new Error("After hooks not enabled for this execution context");return t.afterHooks.push(e),Promise.resolve()}catch(e){return Promise.reject(e)}},exports.createExecutionContext=function(r){if(r.contextId||(r.contextId=t.generateId("ctx_")),!r.trace){var n,o={};try{e.propagation.inject(e.context.active(),o)}catch(e){o={}}o.traceparent||o.tracestate||o.baggage?r.trace={traceparent:o.traceparent,tracestate:o.tracestate,baggage:o.baggage}:null!=(n=r.parent)&&n.trace&&(r.trace={traceparent:r.parent.trace.traceparent,tracestate:r.parent.trace.tracestate,baggage:r.parent.trace.baggage})}return r},exports.ctxStorage=a,exports.getExecutionContext=i,exports.provideExecutionContext=function(e,t){try{var r=[];return o.setContext("executionContext",e),Promise.resolve(c(e,function(){try{return Promise.resolve(a.run({context:e,afterHooks:r},function(){try{return Promise.resolve(t())}catch(e){return Promise.reject(e)}}))}catch(e){return Promise.reject(e)}})).then(function(t){for(var n=0,c=r;n<c.length;n++)(0,c[n])().catch(function(t){o.captureException(t),console.error("Error in after hook",{err:t,context:e})});return t})}catch(e){return Promise.reject(e)}},exports.setExecutionContextSync=function(e){a.enterWith({context:e})},exports.updateExecutionContext=function(e){var t=i();return Object.assign(t,e),t},exports.withExecutionContext=function(e){try{var t=a.getStore();if(!t)throw new Error("No execution context found");return Promise.resolve(e(t.context))}catch(e){return Promise.reject(e)}},exports.withExecutionContextOptional=function(e){try{var t,r=a.getStore();return Promise.resolve(e(null!=(t=null==r?void 0:r.context)?t:null))}catch(e){return Promise.reject(e)}},exports.withExecutionTraceContext=c;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/with-execution-context.ts","../src/execution-context.ts"],"sourcesContent":["import { context as otelContext, propagation } from '@opentelemetry/api';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { AsyncLocalStorage } from 'async_hooks';\nimport { ExecutionContext } from './execution-context';\n\nlet Sentry = getSentry();\n\
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/with-execution-context.ts","../src/execution-context.ts"],"sourcesContent":["import { context as otelContext, propagation } from '@opentelemetry/api';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { AsyncLocalStorage } from 'async_hooks';\nimport { ExecutionContext } from './execution-context';\n\nlet Sentry = getSentry();\n\nlet getTraceCarrier = (executionContext: ExecutionContext): Record<string, string> => {\n let current: ExecutionContext | undefined = executionContext;\n\n while (current) {\n let carrier: Record<string, string> = {};\n\n if (current.trace?.traceparent) {\n carrier.traceparent = current.trace.traceparent;\n }\n if (current.trace?.tracestate) {\n carrier.tracestate = current.trace.tracestate;\n }\n if (current.trace?.baggage) {\n carrier.baggage = current.trace.baggage;\n }\n\n if (Object.keys(carrier).length) {\n return carrier;\n }\n\n current = current.parent;\n }\n\n return {};\n};\n\nexport let withExecutionTraceContext = async <T>(\n executionContext: ExecutionContext,\n cb: () => Promise<T>\n): Promise<T> => {\n let carrier = getTraceCarrier(executionContext);\n\n if (!Object.keys(carrier).length) {\n return await cb();\n }\n\n let extractedContext = propagation.extract(otelContext.active(), carrier);\n\n return await otelContext.with(extractedContext, cb);\n};\n\nexport let ctxStorage = new AsyncLocalStorage<{\n context: ExecutionContext;\n afterHooks?: Array<() => Promise<void | any>>;\n}>();\n\nexport let withExecutionContext = async <T>(\n cb: (ctx: ExecutionContext) => Promise<T>\n): Promise<T> => {\n let ctx = ctxStorage.getStore();\n if (!ctx) {\n throw new Error('No execution context found');\n }\n\n return await cb(ctx.context);\n};\n\nexport let withExecutionContextOptional = async <T>(\n cb: (ctx: ExecutionContext | null) => Promise<T>\n): Promise<T> => {\n let ctx = ctxStorage.getStore();\n return await cb(ctx?.context ?? null);\n};\n\nexport let addAfterHook = async (hook: () => Promise<void | any>) => {\n let ctx = ctxStorage.getStore();\n if (!ctx) {\n throw new Error('No execution context found');\n }\n\n if (!ctx.afterHooks) {\n throw new Error('After hooks not enabled for this execution context');\n }\n\n ctx.afterHooks.push(hook);\n};\n\nexport let provideExecutionContext = async <T>(\n ctx: ExecutionContext,\n cb: () => Promise<T>\n): Promise<T> => {\n let afterHooks: Array<() => Promise<void | any>> = [];\n\n Sentry.setContext('executionContext', ctx);\n\n let res = await withExecutionTraceContext(\n ctx,\n async () =>\n await ctxStorage.run(\n {\n context: ctx,\n afterHooks\n },\n async () => await cb()\n )\n );\n\n for (let hook of afterHooks) {\n hook().catch(err => {\n Sentry.captureException(err);\n\n console.error('Error in after hook', {\n err,\n context: ctx\n });\n });\n }\n\n return res;\n};\n\nexport let setExecutionContextSync = (ctx: ExecutionContext) => {\n ctxStorage.enterWith({\n context: ctx\n });\n};\n\nexport let updateExecutionContext = (ctx: Partial<ExecutionContext>) => {\n let currentCtx = getExecutionContext();\n\n Object.assign(currentCtx, ctx);\n\n return currentCtx;\n};\n\nexport let getExecutionContext = () => {\n let ctx = ctxStorage.getStore();\n if (!ctx) {\n throw new Error('No execution context found');\n }\n return ctx.context;\n};\n","import { context as otelContext, propagation } from '@opentelemetry/api';\nimport { generateId } from '@lowerdeck/id';\n\nexport type ExecutionTraceCarrier = {\n traceparent?: string;\n tracestate?: string;\n baggage?: string;\n};\n\nexport type ExecutionContext = {\n contextId: string;\n parent?: ExecutionContext;\n trace?: ExecutionTraceCarrier;\n} & (\n | {\n type: 'request';\n userId?: string;\n memberId?: string;\n apiKeyId?: string;\n machineAccessId?: string;\n ip: string;\n userAgent: string;\n }\n | { type: 'scheduled'; cron: string; name: string }\n | { type: 'job'; queue: string }\n | { type: 'unknown' }\n);\n\nexport let createExecutionContext = (\n input: ExecutionContext & { contextId?: string | undefined }\n) => {\n if (!input.contextId) input.contextId = generateId('ctx_');\n\n if (!input.trace) {\n let carrier: Record<string, string> = {};\n\n try {\n propagation.inject(otelContext.active(), carrier);\n } catch {\n carrier = {};\n }\n\n if (carrier.traceparent || carrier.tracestate || carrier.baggage) {\n input.trace = {\n traceparent: carrier.traceparent,\n tracestate: carrier.tracestate,\n baggage: carrier.baggage\n };\n } else if (input.parent?.trace) {\n input.trace = {\n traceparent: input.parent.trace.traceparent,\n tracestate: input.parent.trace.tracestate,\n baggage: input.parent.trace.baggage\n };\n }\n }\n\n return input as ExecutionContext;\n};\n"],"names":["Sentry","getSentry","withExecutionTraceContext","executionContext","cb","_temp2","_exit","_result","extractedContext","propagation","extract","otelContext","active","carrier","Promise","resolve","context","current","_current$trace","_current$trace2","_current$trace3","trace","traceparent","tracestate","baggage","Object","keys","length","parent","getTraceCarrier","_temp","then","_await$cb","e","reject","ctxStorage","AsyncLocalStorage","getExecutionContext","ctx","getStore","Error","hook","afterHooks","push","input","contextId","generateId","_input$parent","inject","_unused","setContext","run","res","_i","_afterHooks","err","captureException","console","error","enterWith","currentCtx","assign","_ctx$context"],"mappings":"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"}
|
package/dist/index.module.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{propagation as e,context as t}from"@opentelemetry/api";import{generateId as r}from"@lowerdeck/id";import{getSentry as n}from"@lowerdeck/sentry";import{AsyncLocalStorage as o}from"async_hooks";var c=function(n){if(n.contextId||(n.contextId=r("ctx_")),!n.trace){var o={};try{e.inject(t.active(),
|
|
1
|
+
import{propagation as e,context as t}from"@opentelemetry/api";import{generateId as r}from"@lowerdeck/id";import{getSentry as n}from"@lowerdeck/sentry";import{AsyncLocalStorage as o}from"async_hooks";var c=function(n){if(n.contextId||(n.contextId=r("ctx_")),!n.trace){var o,c={};try{e.inject(t.active(),c)}catch(e){c={}}c.traceparent||c.tracestate||c.baggage?n.trace={traceparent:c.traceparent,tracestate:c.tracestate,baggage:c.baggage}:null!=(o=n.parent)&&o.trace&&(n.trace={traceparent:n.parent.trace.traceparent,tracestate:n.parent.trace.tracestate,baggage:n.parent.trace.baggage})}return n},a=n(),i=function(r,n){try{var o,c=function(r){if(o)return r;var c=e.extract(t.active(),a);return Promise.resolve(t.with(c,n))},a=function(e){for(var t=e;t;){var r,n,o,c={};if(null!=(r=t.trace)&&r.traceparent&&(c.traceparent=t.trace.traceparent),null!=(n=t.trace)&&n.tracestate&&(c.tracestate=t.trace.tracestate),null!=(o=t.trace)&&o.baggage&&(c.baggage=t.trace.baggage),Object.keys(c).length)return c;t=t.parent}return{}}(r),i=function(){if(!Object.keys(a).length)return Promise.resolve(n()).then(function(e){return o=1,e})}();return Promise.resolve(i&&i.then?i.then(c):c(i))}catch(e){return Promise.reject(e)}},u=new o,s=function(e){try{var t=u.getStore();if(!t)throw new Error("No execution context found");return Promise.resolve(e(t.context))}catch(e){return Promise.reject(e)}},f=function(e){try{var t,r=u.getStore();return Promise.resolve(e(null!=(t=null==r?void 0:r.context)?t:null))}catch(e){return Promise.reject(e)}},g=function(e){try{var t=u.getStore();if(!t)throw new Error("No execution context found");if(!t.afterHooks)throw new Error("After hooks not enabled for this execution context");return t.afterHooks.push(e),Promise.resolve()}catch(e){return Promise.reject(e)}},l=function(e,t){try{var r=[];return a.setContext("executionContext",e),Promise.resolve(i(e,function(){try{return Promise.resolve(u.run({context:e,afterHooks:r},function(){try{return Promise.resolve(t())}catch(e){return Promise.reject(e)}}))}catch(e){return Promise.reject(e)}})).then(function(t){for(var n=0,o=r;n<o.length;n++)(0,o[n])().catch(function(t){a.captureException(t),console.error("Error in after hook",{err:t,context:e})});return t})}catch(e){return Promise.reject(e)}},h=function(e){u.enterWith({context:e})},m=function(e){var t=v();return Object.assign(t,e),t},v=function(){var e=u.getStore();if(!e)throw new Error("No execution context found");return e.context};export{g as addAfterHook,c as createExecutionContext,u as ctxStorage,v as getExecutionContext,l as provideExecutionContext,h as setExecutionContextSync,m as updateExecutionContext,s as withExecutionContext,f as withExecutionContextOptional,i as withExecutionTraceContext};
|
|
2
2
|
//# sourceMappingURL=index.module.js.map
|
package/dist/index.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.module.js","sources":["../src/execution-context.ts","../src/with-execution-context.ts"],"sourcesContent":["import { context as otelContext, propagation } from '@opentelemetry/api';\nimport { generateId } from '@lowerdeck/id';\n\nexport type ExecutionTraceCarrier = {\n traceparent?: string;\n tracestate?: string;\n baggage?: string;\n};\n\nexport type ExecutionContext = {\n contextId: string;\n parent?: ExecutionContext;\n trace?: ExecutionTraceCarrier;\n} & (\n | {\n type: 'request';\n userId?: string;\n memberId?: string;\n apiKeyId?: string;\n machineAccessId?: string;\n ip: string;\n userAgent: string;\n }\n | { type: 'scheduled'; cron: string; name: string }\n | { type: 'job'; queue: string }\n | { type: 'unknown' }\n);\n\nexport let createExecutionContext = (\n input: ExecutionContext & { contextId?: string | undefined }\n) => {\n if (!input.contextId) input.contextId = generateId('ctx_');\n\n if (!input.trace) {\n let carrier: Record<string, string> = {};\n\n try {\n propagation.inject(otelContext.active(), carrier);\n } catch {\n carrier = {};\n }\n\n if (carrier.traceparent || carrier.tracestate || carrier.baggage) {\n input.trace = {\n traceparent: carrier.traceparent,\n tracestate: carrier.tracestate,\n baggage: carrier.baggage\n };\n }\n }\n\n return input as ExecutionContext;\n};\n","import { context as otelContext, propagation } from '@opentelemetry/api';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { AsyncLocalStorage } from 'async_hooks';\nimport { ExecutionContext } from './execution-context';\n\nlet Sentry = getSentry();\n\
|
|
1
|
+
{"version":3,"file":"index.module.js","sources":["../src/execution-context.ts","../src/with-execution-context.ts"],"sourcesContent":["import { context as otelContext, propagation } from '@opentelemetry/api';\nimport { generateId } from '@lowerdeck/id';\n\nexport type ExecutionTraceCarrier = {\n traceparent?: string;\n tracestate?: string;\n baggage?: string;\n};\n\nexport type ExecutionContext = {\n contextId: string;\n parent?: ExecutionContext;\n trace?: ExecutionTraceCarrier;\n} & (\n | {\n type: 'request';\n userId?: string;\n memberId?: string;\n apiKeyId?: string;\n machineAccessId?: string;\n ip: string;\n userAgent: string;\n }\n | { type: 'scheduled'; cron: string; name: string }\n | { type: 'job'; queue: string }\n | { type: 'unknown' }\n);\n\nexport let createExecutionContext = (\n input: ExecutionContext & { contextId?: string | undefined }\n) => {\n if (!input.contextId) input.contextId = generateId('ctx_');\n\n if (!input.trace) {\n let carrier: Record<string, string> = {};\n\n try {\n propagation.inject(otelContext.active(), carrier);\n } catch {\n carrier = {};\n }\n\n if (carrier.traceparent || carrier.tracestate || carrier.baggage) {\n input.trace = {\n traceparent: carrier.traceparent,\n tracestate: carrier.tracestate,\n baggage: carrier.baggage\n };\n } else if (input.parent?.trace) {\n input.trace = {\n traceparent: input.parent.trace.traceparent,\n tracestate: input.parent.trace.tracestate,\n baggage: input.parent.trace.baggage\n };\n }\n }\n\n return input as ExecutionContext;\n};\n","import { context as otelContext, propagation } from '@opentelemetry/api';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { AsyncLocalStorage } from 'async_hooks';\nimport { ExecutionContext } from './execution-context';\n\nlet Sentry = getSentry();\n\nlet getTraceCarrier = (executionContext: ExecutionContext): Record<string, string> => {\n let current: ExecutionContext | undefined = executionContext;\n\n while (current) {\n let carrier: Record<string, string> = {};\n\n if (current.trace?.traceparent) {\n carrier.traceparent = current.trace.traceparent;\n }\n if (current.trace?.tracestate) {\n carrier.tracestate = current.trace.tracestate;\n }\n if (current.trace?.baggage) {\n carrier.baggage = current.trace.baggage;\n }\n\n if (Object.keys(carrier).length) {\n return carrier;\n }\n\n current = current.parent;\n }\n\n return {};\n};\n\nexport let withExecutionTraceContext = async <T>(\n executionContext: ExecutionContext,\n cb: () => Promise<T>\n): Promise<T> => {\n let carrier = getTraceCarrier(executionContext);\n\n if (!Object.keys(carrier).length) {\n return await cb();\n }\n\n let extractedContext = propagation.extract(otelContext.active(), carrier);\n\n return await otelContext.with(extractedContext, cb);\n};\n\nexport let ctxStorage = new AsyncLocalStorage<{\n context: ExecutionContext;\n afterHooks?: Array<() => Promise<void | any>>;\n}>();\n\nexport let withExecutionContext = async <T>(\n cb: (ctx: ExecutionContext) => Promise<T>\n): Promise<T> => {\n let ctx = ctxStorage.getStore();\n if (!ctx) {\n throw new Error('No execution context found');\n }\n\n return await cb(ctx.context);\n};\n\nexport let withExecutionContextOptional = async <T>(\n cb: (ctx: ExecutionContext | null) => Promise<T>\n): Promise<T> => {\n let ctx = ctxStorage.getStore();\n return await cb(ctx?.context ?? null);\n};\n\nexport let addAfterHook = async (hook: () => Promise<void | any>) => {\n let ctx = ctxStorage.getStore();\n if (!ctx) {\n throw new Error('No execution context found');\n }\n\n if (!ctx.afterHooks) {\n throw new Error('After hooks not enabled for this execution context');\n }\n\n ctx.afterHooks.push(hook);\n};\n\nexport let provideExecutionContext = async <T>(\n ctx: ExecutionContext,\n cb: () => Promise<T>\n): Promise<T> => {\n let afterHooks: Array<() => Promise<void | any>> = [];\n\n Sentry.setContext('executionContext', ctx);\n\n let res = await withExecutionTraceContext(\n ctx,\n async () =>\n await ctxStorage.run(\n {\n context: ctx,\n afterHooks\n },\n async () => await cb()\n )\n );\n\n for (let hook of afterHooks) {\n hook().catch(err => {\n Sentry.captureException(err);\n\n console.error('Error in after hook', {\n err,\n context: ctx\n });\n });\n }\n\n return res;\n};\n\nexport let setExecutionContextSync = (ctx: ExecutionContext) => {\n ctxStorage.enterWith({\n context: ctx\n });\n};\n\nexport let updateExecutionContext = (ctx: Partial<ExecutionContext>) => {\n let currentCtx = getExecutionContext();\n\n Object.assign(currentCtx, ctx);\n\n return currentCtx;\n};\n\nexport let getExecutionContext = () => {\n let ctx = ctxStorage.getStore();\n if (!ctx) {\n throw new Error('No execution context found');\n }\n return ctx.context;\n};\n"],"names":["createExecutionContext","input","contextId","generateId","trace","_input$parent","carrier","propagation","inject","otelContext","active","_unused","traceparent","tracestate","baggage","parent","Sentry","getSentry","withExecutionTraceContext","executionContext","cb","_temp2","_exit","_result","extractedContext","extract","Promise","resolve","current","_current$trace","_current$trace2","_current$trace3","Object","keys","length","getTraceCarrier","_temp","then","_await$cb","e","reject","ctxStorage","AsyncLocalStorage","withExecutionContext","ctx","getStore","Error","context","withExecutionContextOptional","_ctx$context","addAfterHook","hook","afterHooks","push","provideExecutionContext","setContext","run","res","_i","_afterHooks","err","captureException","console","error","setExecutionContextSync","enterWith","updateExecutionContext","currentCtx","getExecutionContext","assign"],"mappings":"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"}
|
package/dist/index.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@opentelemetry/api"),require("@lowerdeck/id"),require("@lowerdeck/sentry"),require("async_hooks")):"function"==typeof define&&define.amd?define(["exports","@opentelemetry/api","@lowerdeck/id","@lowerdeck/sentry","async_hooks"],t):t((e||self).executionContext={},e.api,e.id,e.sentry,e.async_hooks)}(this,function(e,t,r,n,o){var c=n.getSentry(),a=function(e,r){try{var n,o
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@opentelemetry/api"),require("@lowerdeck/id"),require("@lowerdeck/sentry"),require("async_hooks")):"function"==typeof define&&define.amd?define(["exports","@opentelemetry/api","@lowerdeck/id","@lowerdeck/sentry","async_hooks"],t):t((e||self).executionContext={},e.api,e.id,e.sentry,e.async_hooks)}(this,function(e,t,r,n,o){var c=n.getSentry(),a=function(e,r){try{var n,o=function(e){if(n)return e;var o=t.propagation.extract(t.context.active(),c);return Promise.resolve(t.context.with(o,r))},c=function(e){for(var t=e;t;){var r,n,o,c={};if(null!=(r=t.trace)&&r.traceparent&&(c.traceparent=t.trace.traceparent),null!=(n=t.trace)&&n.tracestate&&(c.tracestate=t.trace.tracestate),null!=(o=t.trace)&&o.baggage&&(c.baggage=t.trace.baggage),Object.keys(c).length)return c;t=t.parent}return{}}(e),a=function(){if(!Object.keys(c).length)return Promise.resolve(r()).then(function(e){return n=1,e})}();return Promise.resolve(a&&a.then?a.then(o):o(a))}catch(e){return Promise.reject(e)}},i=new o.AsyncLocalStorage,u=function(){var e=i.getStore();if(!e)throw new Error("No execution context found");return e.context};e.addAfterHook=function(e){try{var t=i.getStore();if(!t)throw new Error("No execution context found");if(!t.afterHooks)throw new Error("After hooks not enabled for this execution context");return t.afterHooks.push(e),Promise.resolve()}catch(e){return Promise.reject(e)}},e.createExecutionContext=function(e){if(e.contextId||(e.contextId=r.generateId("ctx_")),!e.trace){var n,o={};try{t.propagation.inject(t.context.active(),o)}catch(e){o={}}o.traceparent||o.tracestate||o.baggage?e.trace={traceparent:o.traceparent,tracestate:o.tracestate,baggage:o.baggage}:null!=(n=e.parent)&&n.trace&&(e.trace={traceparent:e.parent.trace.traceparent,tracestate:e.parent.trace.tracestate,baggage:e.parent.trace.baggage})}return e},e.ctxStorage=i,e.getExecutionContext=u,e.provideExecutionContext=function(e,t){try{var r=[];return c.setContext("executionContext",e),Promise.resolve(a(e,function(){try{return Promise.resolve(i.run({context:e,afterHooks:r},function(){try{return Promise.resolve(t())}catch(e){return Promise.reject(e)}}))}catch(e){return Promise.reject(e)}})).then(function(t){for(var n=0,o=r;n<o.length;n++)(0,o[n])().catch(function(t){c.captureException(t),console.error("Error in after hook",{err:t,context:e})});return t})}catch(e){return Promise.reject(e)}},e.setExecutionContextSync=function(e){i.enterWith({context:e})},e.updateExecutionContext=function(e){var t=u();return Object.assign(t,e),t},e.withExecutionContext=function(e){try{var t=i.getStore();if(!t)throw new Error("No execution context found");return Promise.resolve(e(t.context))}catch(e){return Promise.reject(e)}},e.withExecutionContextOptional=function(e){try{var t,r=i.getStore();return Promise.resolve(e(null!=(t=null==r?void 0:r.context)?t:null))}catch(e){return Promise.reject(e)}},e.withExecutionTraceContext=a});
|
|
2
2
|
//# sourceMappingURL=index.umd.js.map
|
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/execution-context.ts","../src/with-execution-context.ts"],"sourcesContent":["import { context as otelContext, propagation } from '@opentelemetry/api';\nimport { generateId } from '@lowerdeck/id';\n\nexport type ExecutionTraceCarrier = {\n traceparent?: string;\n tracestate?: string;\n baggage?: string;\n};\n\nexport type ExecutionContext = {\n contextId: string;\n parent?: ExecutionContext;\n trace?: ExecutionTraceCarrier;\n} & (\n | {\n type: 'request';\n userId?: string;\n memberId?: string;\n apiKeyId?: string;\n machineAccessId?: string;\n ip: string;\n userAgent: string;\n }\n | { type: 'scheduled'; cron: string; name: string }\n | { type: 'job'; queue: string }\n | { type: 'unknown' }\n);\n\nexport let createExecutionContext = (\n input: ExecutionContext & { contextId?: string | undefined }\n) => {\n if (!input.contextId) input.contextId = generateId('ctx_');\n\n if (!input.trace) {\n let carrier: Record<string, string> = {};\n\n try {\n propagation.inject(otelContext.active(), carrier);\n } catch {\n carrier = {};\n }\n\n if (carrier.traceparent || carrier.tracestate || carrier.baggage) {\n input.trace = {\n traceparent: carrier.traceparent,\n tracestate: carrier.tracestate,\n baggage: carrier.baggage\n };\n }\n }\n\n return input as ExecutionContext;\n};\n","import { context as otelContext, propagation } from '@opentelemetry/api';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { AsyncLocalStorage } from 'async_hooks';\nimport { ExecutionContext } from './execution-context';\n\nlet Sentry = getSentry();\n\
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/execution-context.ts","../src/with-execution-context.ts"],"sourcesContent":["import { context as otelContext, propagation } from '@opentelemetry/api';\nimport { generateId } from '@lowerdeck/id';\n\nexport type ExecutionTraceCarrier = {\n traceparent?: string;\n tracestate?: string;\n baggage?: string;\n};\n\nexport type ExecutionContext = {\n contextId: string;\n parent?: ExecutionContext;\n trace?: ExecutionTraceCarrier;\n} & (\n | {\n type: 'request';\n userId?: string;\n memberId?: string;\n apiKeyId?: string;\n machineAccessId?: string;\n ip: string;\n userAgent: string;\n }\n | { type: 'scheduled'; cron: string; name: string }\n | { type: 'job'; queue: string }\n | { type: 'unknown' }\n);\n\nexport let createExecutionContext = (\n input: ExecutionContext & { contextId?: string | undefined }\n) => {\n if (!input.contextId) input.contextId = generateId('ctx_');\n\n if (!input.trace) {\n let carrier: Record<string, string> = {};\n\n try {\n propagation.inject(otelContext.active(), carrier);\n } catch {\n carrier = {};\n }\n\n if (carrier.traceparent || carrier.tracestate || carrier.baggage) {\n input.trace = {\n traceparent: carrier.traceparent,\n tracestate: carrier.tracestate,\n baggage: carrier.baggage\n };\n } else if (input.parent?.trace) {\n input.trace = {\n traceparent: input.parent.trace.traceparent,\n tracestate: input.parent.trace.tracestate,\n baggage: input.parent.trace.baggage\n };\n }\n }\n\n return input as ExecutionContext;\n};\n","import { context as otelContext, propagation } from '@opentelemetry/api';\nimport { getSentry } from '@lowerdeck/sentry';\nimport { AsyncLocalStorage } from 'async_hooks';\nimport { ExecutionContext } from './execution-context';\n\nlet Sentry = getSentry();\n\nlet getTraceCarrier = (executionContext: ExecutionContext): Record<string, string> => {\n let current: ExecutionContext | undefined = executionContext;\n\n while (current) {\n let carrier: Record<string, string> = {};\n\n if (current.trace?.traceparent) {\n carrier.traceparent = current.trace.traceparent;\n }\n if (current.trace?.tracestate) {\n carrier.tracestate = current.trace.tracestate;\n }\n if (current.trace?.baggage) {\n carrier.baggage = current.trace.baggage;\n }\n\n if (Object.keys(carrier).length) {\n return carrier;\n }\n\n current = current.parent;\n }\n\n return {};\n};\n\nexport let withExecutionTraceContext = async <T>(\n executionContext: ExecutionContext,\n cb: () => Promise<T>\n): Promise<T> => {\n let carrier = getTraceCarrier(executionContext);\n\n if (!Object.keys(carrier).length) {\n return await cb();\n }\n\n let extractedContext = propagation.extract(otelContext.active(), carrier);\n\n return await otelContext.with(extractedContext, cb);\n};\n\nexport let ctxStorage = new AsyncLocalStorage<{\n context: ExecutionContext;\n afterHooks?: Array<() => Promise<void | any>>;\n}>();\n\nexport let withExecutionContext = async <T>(\n cb: (ctx: ExecutionContext) => Promise<T>\n): Promise<T> => {\n let ctx = ctxStorage.getStore();\n if (!ctx) {\n throw new Error('No execution context found');\n }\n\n return await cb(ctx.context);\n};\n\nexport let withExecutionContextOptional = async <T>(\n cb: (ctx: ExecutionContext | null) => Promise<T>\n): Promise<T> => {\n let ctx = ctxStorage.getStore();\n return await cb(ctx?.context ?? null);\n};\n\nexport let addAfterHook = async (hook: () => Promise<void | any>) => {\n let ctx = ctxStorage.getStore();\n if (!ctx) {\n throw new Error('No execution context found');\n }\n\n if (!ctx.afterHooks) {\n throw new Error('After hooks not enabled for this execution context');\n }\n\n ctx.afterHooks.push(hook);\n};\n\nexport let provideExecutionContext = async <T>(\n ctx: ExecutionContext,\n cb: () => Promise<T>\n): Promise<T> => {\n let afterHooks: Array<() => Promise<void | any>> = [];\n\n Sentry.setContext('executionContext', ctx);\n\n let res = await withExecutionTraceContext(\n ctx,\n async () =>\n await ctxStorage.run(\n {\n context: ctx,\n afterHooks\n },\n async () => await cb()\n )\n );\n\n for (let hook of afterHooks) {\n hook().catch(err => {\n Sentry.captureException(err);\n\n console.error('Error in after hook', {\n err,\n context: ctx\n });\n });\n }\n\n return res;\n};\n\nexport let setExecutionContextSync = (ctx: ExecutionContext) => {\n ctxStorage.enterWith({\n context: ctx\n });\n};\n\nexport let updateExecutionContext = (ctx: Partial<ExecutionContext>) => {\n let currentCtx = getExecutionContext();\n\n Object.assign(currentCtx, ctx);\n\n return currentCtx;\n};\n\nexport let getExecutionContext = () => {\n let ctx = ctxStorage.getStore();\n if (!ctx) {\n throw new Error('No execution context found');\n }\n return ctx.context;\n};\n"],"names":["Sentry","getSentry","withExecutionTraceContext","executionContext","cb","_temp2","_exit","_result","extractedContext","propagation","extract","otelContext","active","carrier","Promise","resolve","context","current","_current$trace","_current$trace2","_current$trace3","trace","traceparent","tracestate","baggage","Object","keys","length","parent","getTraceCarrier","_temp","then","_await$cb","e","reject","ctxStorage","AsyncLocalStorage","getExecutionContext","ctx","getStore","Error","hook","afterHooks","push","input","contextId","generateId","_input$parent","inject","_unused","setContext","run","res","_i","_afterHooks","err","captureException","console","error","enterWith","currentCtx","assign","_ctx$context"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-execution-context.d.ts","sourceRoot":"","sources":["../src/with-execution-context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"with-execution-context.d.ts","sourceRoot":"","sources":["../src/with-execution-context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA8BvD,eAAO,IAAI,yBAAyB,GAAU,CAAC,EAC7C,kBAAkB,gBAAgB,EAClC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,KACnB,OAAO,CAAC,CAAC,CAUX,CAAC;AAEF,eAAO,IAAI,UAAU;aACV,gBAAgB;iBACZ,KAAK,CAAC,MAAM,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;EAC3C,CAAC;AAEL,eAAO,IAAI,oBAAoB,GAAU,CAAC,EACxC,IAAI,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,CAAC,CAAC,KACxC,OAAO,CAAC,CAAC,CAOX,CAAC;AAEF,eAAO,IAAI,4BAA4B,GAAU,CAAC,EAChD,IAAI,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAC/C,OAAO,CAAC,CAAC,CAGX,CAAC;AAEF,eAAO,IAAI,YAAY,GAAU,MAAM,MAAM,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,kBAW/D,CAAC;AAEF,eAAO,IAAI,uBAAuB,GAAU,CAAC,EAC3C,KAAK,gBAAgB,EACrB,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,KACnB,OAAO,CAAC,CAAC,CA6BX,CAAC;AAEF,eAAO,IAAI,uBAAuB,GAAI,KAAK,gBAAgB,SAI1D,CAAC;AAEF,eAAO,IAAI,sBAAsB,GAAI,KAAK,OAAO,CAAC,gBAAgB,CAAC,qBAMlE,CAAC;AAEF,eAAO,IAAI,mBAAmB,wBAM7B,CAAC"}
|
package/package.json
CHANGED
package/src/execution-context.ts
CHANGED
|
@@ -46,6 +46,12 @@ export let createExecutionContext = (
|
|
|
46
46
|
tracestate: carrier.tracestate,
|
|
47
47
|
baggage: carrier.baggage
|
|
48
48
|
};
|
|
49
|
+
} else if (input.parent?.trace) {
|
|
50
|
+
input.trace = {
|
|
51
|
+
traceparent: input.parent.trace.traceparent,
|
|
52
|
+
tracestate: input.parent.trace.tracestate,
|
|
53
|
+
baggage: input.parent.trace.baggage
|
|
54
|
+
};
|
|
49
55
|
}
|
|
50
56
|
}
|
|
51
57
|
|
|
@@ -5,21 +5,37 @@ import { ExecutionContext } from './execution-context';
|
|
|
5
5
|
|
|
6
6
|
let Sentry = getSentry();
|
|
7
7
|
|
|
8
|
+
let getTraceCarrier = (executionContext: ExecutionContext): Record<string, string> => {
|
|
9
|
+
let current: ExecutionContext | undefined = executionContext;
|
|
10
|
+
|
|
11
|
+
while (current) {
|
|
12
|
+
let carrier: Record<string, string> = {};
|
|
13
|
+
|
|
14
|
+
if (current.trace?.traceparent) {
|
|
15
|
+
carrier.traceparent = current.trace.traceparent;
|
|
16
|
+
}
|
|
17
|
+
if (current.trace?.tracestate) {
|
|
18
|
+
carrier.tracestate = current.trace.tracestate;
|
|
19
|
+
}
|
|
20
|
+
if (current.trace?.baggage) {
|
|
21
|
+
carrier.baggage = current.trace.baggage;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (Object.keys(carrier).length) {
|
|
25
|
+
return carrier;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
current = current.parent;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return {};
|
|
32
|
+
};
|
|
33
|
+
|
|
8
34
|
export let withExecutionTraceContext = async <T>(
|
|
9
35
|
executionContext: ExecutionContext,
|
|
10
36
|
cb: () => Promise<T>
|
|
11
37
|
): Promise<T> => {
|
|
12
|
-
let carrier
|
|
13
|
-
|
|
14
|
-
if (executionContext.trace?.traceparent) {
|
|
15
|
-
carrier.traceparent = executionContext.trace.traceparent;
|
|
16
|
-
}
|
|
17
|
-
if (executionContext.trace?.tracestate) {
|
|
18
|
-
carrier.tracestate = executionContext.trace.tracestate;
|
|
19
|
-
}
|
|
20
|
-
if (executionContext.trace?.baggage) {
|
|
21
|
-
carrier.baggage = executionContext.trace.baggage;
|
|
22
|
-
}
|
|
38
|
+
let carrier = getTraceCarrier(executionContext);
|
|
23
39
|
|
|
24
40
|
if (!Object.keys(carrier).length) {
|
|
25
41
|
return await cb();
|