autotel-aws 0.2.0 → 0.3.1

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.
@@ -32,7 +32,7 @@ function extractStepFunctionsContext(input) {
32
32
  ...traceContext.baggage && { baggage: traceContext.baggage }
33
33
  };
34
34
  const extractedContext = propagation.extract(context.active(), carrier);
35
- const span = extractedContext.getValue(Symbol.for("OpenTelemetry Context Key SPAN"));
35
+ const span = extractedContext.getValue(/* @__PURE__ */ Symbol.for("OpenTelemetry Context Key SPAN"));
36
36
  if (span && typeof span === "object") {
37
37
  if ("spanContext" in span && typeof span.spanContext === "function") {
38
38
  return span.spanContext();
@@ -383,5 +383,5 @@ var StepFunctionsActivityWorker = class {
383
383
  };
384
384
 
385
385
  export { StepFunctionsActivityWorker, StepFunctionsExecutor, extractStepFunctionsContext, injectTraceContext, stripTraceContext, traceStepFunction };
386
- //# sourceMappingURL=chunk-DF5PT3JK.js.map
387
- //# sourceMappingURL=chunk-DF5PT3JK.js.map
386
+ //# sourceMappingURL=chunk-4THGOYZL.js.map
387
+ //# sourceMappingURL=chunk-4THGOYZL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/step-functions/index.ts"],"names":[],"mappings":";;;;;AAoMO,SAAS,mBACd,KAAA,EACwB;AACxB,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,MAAA,EAAO,EAAG,OAAO,CAAA;AAE5C,EAAA,IAAI,CAAC,QAAQ,WAAA,EAAa;AACxB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,aAAA,EAAe;AAAA,MACb,aAAa,OAAA,CAAQ,WAAA;AAAA,MACrB,GAAI,OAAA,CAAQ,UAAA,IAAc,EAAE,UAAA,EAAY,QAAQ,UAAA,EAAW;AAAA,MAC3D,GAAI,OAAA,CAAQ,OAAA,IAAW,EAAE,OAAA,EAAS,QAAQ,OAAA;AAAQ;AACpD,GACF;AACF;AAuBO,SAAS,4BACd,KAAA,EACyB;AACzB,EAAA,IACE,OAAO,KAAA,KAAU,QAAA,IACjB,UAAU,IAAA,IACV,EAAE,mBAAmB,KAAA,CAAA,EACrB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,eAAgB,KAAA,CAA6B,aAAA;AACnD,EAAA,IAAI,CAAC,cAAc,WAAA,EAAa;AAC9B,IAAA,OAAO,MAAA;AAAA,EACT;AAGA,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,aAAa,YAAA,CAAa,WAAA;AAAA,IAC1B,GAAI,YAAA,CAAa,UAAA,IAAc,EAAE,UAAA,EAAY,aAAa,UAAA,EAAW;AAAA,IACrE,GAAI,YAAA,CAAa,OAAA,IAAW,EAAE,OAAA,EAAS,aAAa,OAAA;AAAQ,GAC9D;AAEA,EAAA,MAAM,mBAAmB,WAAA,CAAY,OAAA,CAAQ,OAAA,CAAQ,MAAA,IAAU,OAAO,CAAA;AACtE,EAAA,MAAM,OAAO,gBAAA,CAAiB,QAAA,iBAAS,MAAA,CAAO,GAAA,CAAI,gCAAgC,CAAC,CAAA;AAGnF,EAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,IAAA,IAAI,aAAA,IAAiB,IAAA,IAAQ,OAAO,IAAA,CAAK,gBAAgB,UAAA,EAAY;AACnE,MAAA,OAAO,KAAK,WAAA,EAAY;AAAA,IAC1B;AAEA,IAAA,IAAI,SAAA,IAAa,IAAA,IAAQ,QAAA,IAAY,IAAA,EAAM;AACzC,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAiBO,SAAS,kBACd,KAAA,EAC0B;AAC1B,EAAA,MAAM,EAAE,aAAA,EAAe,CAAA,EAAG,GAAG,MAAK,GAAI,KAAA;AACtC,EAAA,OAAO,IAAA;AACT;AAuCO,SAAS,kBAAkB,MAAA,EAAiC;AACjE,EAAA,MAAM,SAAA,GAAY,OAAO,SAAA,IAAa,SAAA;AAEtC,EAAA,OAAO,SAAS,QACd,EAAA,EACsC;AAEtC,IAAA,OAAO,KAAA;AAAA,MACL,iBAAiB,SAAS,CAAA,CAAA;AAAA,MAC1B,CAAC,GAAA,KACC,OAAA,GAAU,IAAA,KAAkC;AAE1C,QAAA,GAAA,CAAI,aAAA;AAAA,UACF,4BAAA,CAA6B;AAAA,YAC3B,iBAAiB,MAAA,CAAO;AAAA,WACzB;AAAA,SACH;AAGA,QAAA,MAAM,OAAA,GAAU,GAAG,GAAG,CAAA;AACtB,QAAA,OAAO,OAAA,CAAQ,GAAG,IAAI,CAAA;AAAA,MACxB;AAAA,KACJ;AAAA,EACF,CAAA;AACF;AA8CO,IAAM,wBAAN,MAGL;AAAA,EACQ,MAAA;AAAA,EACA,MAAA;AAAA,EAEA,gBAAA;AAAA,EAER,WAAA,CAAY,QAAiB,MAAA,EAAqC;AAChE,IAAA,IAAA,CAAK,MAAA,GAAS,aAAA,CAAc,MAAA,EAAe,MAAA,CAAO,OAAO,CAAA;AACzD,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,kBAAA,EAAoB,IAAA;AAAA,MACpB,GAAG;AAAA,KACL;AAEA,IAAA,IAAA,CAAK,mBAAmB,MAAA,CAAO,eAAA,CAAgB,MAAM,GAAG,CAAA,CAAE,KAAI,IAAK,SAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eACJ,SAAA,EAIC;AACD,IAAA,OAAO,KAAA,CAAM,CAAA,4BAAA,CAAA,EAAgC,OAAO,GAAA,KAAsB;AACxE,MAAA,GAAA,CAAI,aAAA;AAAA,QACF,4BAAA,CAA6B;AAAA,UAC3B,eAAA,EAAiB,KAAK,MAAA,CAAO;AAAA,SAC9B;AAAA,OACH;AACA,MAAA,GAAA,CAAI,YAAA,CAAa,sCAAA,EAAwC,IAAA,CAAK,gBAAgB,CAAA;AAE9E,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,GAAA,CAAI,YAAA,CAAa,kCAAA,EAAoC,SAAA,CAAU,IAAI,CAAA;AAAA,MACrE;AAGA,MAAA,MAAM,SAAA,GAAY,KAAK,MAAA,CAAO,kBAAA,GAC1B,mBAAmB,SAAA,CAAU,KAAK,IAClC,SAAA,CAAU,KAAA;AAEd,MAAA,MAAM,KAAA,GAAQ;AAAA,QACZ,eAAA,EAAiB,KAAK,MAAA,CAAO,eAAA;AAAA,QAC7B,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAAA,QAC/B,MAAM,SAAA,CAAU,IAAA;AAAA,QAChB,aAAa,SAAA,CAAU;AAAA,OACzB;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,qBAAA,EAAsB,GAAI,MAAM,OAAO,qBAAqB,CAAA;AACpE,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,qBAAA,CAAsB,KAAK,CAAC,CAAA;AAEtE,QAAA,IAAI,OAAO,YAAA,EAAc;AACvB,UAAA,GAAA,CAAI,YAAA,CAAa,iCAAA,EAAmC,MAAA,CAAO,YAAY,CAAA;AAAA,QACzE;AAEA,QAAA,GAAA,CAAI,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAEzC,QAAA,OAAO;AAAA,UACL,cAAc,MAAA,CAAO,YAAA;AAAA,UACrB,WAAW,MAAA,CAAO;AAAA,SACpB;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,SAAA,CAAU;AAAA,UACZ,MAAM,cAAA,CAAe,KAAA;AAAA,UACrB,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,SACnD,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,mBACJ,SAAA,EAWC;AACD,IAAA,OAAO,KAAA,CAAM,CAAA,gCAAA,CAAA,EAAoC,OAAO,GAAA,KAAsB;AAC5E,MAAA,GAAA,CAAI,aAAA;AAAA,QACF,4BAAA,CAA6B;AAAA,UAC3B,eAAA,EAAiB,KAAK,MAAA,CAAO;AAAA,SAC9B;AAAA,OACH;AACA,MAAA,GAAA,CAAI,YAAA,CAAa,sCAAA,EAAwC,IAAA,CAAK,gBAAgB,CAAA;AAC9E,MAAA,GAAA,CAAI,YAAA,CAAa,oCAAoC,SAAS,CAAA;AAE9D,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,GAAA,CAAI,YAAA,CAAa,kCAAA,EAAoC,SAAA,CAAU,IAAI,CAAA;AAAA,MACrE;AAGA,MAAA,MAAM,SAAA,GAAY,KAAK,MAAA,CAAO,kBAAA,GAC1B,mBAAmB,SAAA,CAAU,KAAK,IAClC,SAAA,CAAU,KAAA;AAEd,MAAA,MAAM,KAAA,GAAQ;AAAA,QACZ,eAAA,EAAiB,KAAK,MAAA,CAAO,eAAA;AAAA,QAC7B,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAAA,QAC/B,MAAM,SAAA,CAAU,IAAA;AAAA,QAChB,aAAa,SAAA,CAAU;AAAA,OACzB;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,yBAAA,EAA0B,GAAI,MAAM,OAAO,qBAAqB,CAAA;AACxE,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,yBAAA,CAA0B,KAAK,CAAC,CAAA;AAE1E,QAAA,IAAI,OAAO,YAAA,EAAc;AACvB,UAAA,GAAA,CAAI,YAAA,CAAa,iCAAA,EAAmC,MAAA,CAAO,YAAY,CAAA;AAAA,QACzE;AACA,QAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,UAAA,GAAA,CAAI,YAAA,CAAa,oCAAA,EAAsC,MAAA,CAAO,MAAM,CAAA;AAAA,QACtE;AAEA,QAAA,IAAI,MAAA,CAAO,MAAA,KAAW,QAAA,IAAY,MAAA,CAAO,WAAW,WAAA,EAAa;AAC/D,UAAA,GAAA,CAAI,SAAA,CAAU;AAAA,YACZ,MAAM,cAAA,CAAe,KAAA;AAAA,YACrB,OAAA,EAAS,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO;AAAA,WACjC,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAAA,QAC3C;AAEA,QAAA,OAAO;AAAA,UACL,cAAc,MAAA,CAAO,YAAA;AAAA,UACrB,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,cAAA,EAAgB,OAAO,cAAA,GACnB;AAAA,YACE,oBAAA,EAAsB,OAAO,cAAA,CAAe,oBAAA;AAAA,YAC5C,4BAAA,EACE,OAAO,cAAA,CAAe;AAAA,WAC1B,GACA,KAAA;AAAA,SACN;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,SAAA,CAAU;AAAA,UACZ,MAAM,cAAA,CAAe,KAAA;AAAA,UACrB,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,SACnD,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,kBAAkB,YAAA,EAWrB;AACD,IAAA,OAAO,KAAA,CAAM,CAAA,+BAAA,CAAA,EAAmC,OAAO,GAAA,KAAsB;AAC3E,MAAA,GAAA,CAAI,aAAA;AAAA,QACF,4BAAA,CAA6B;AAAA,UAC3B,eAAA,EAAiB,KAAK,MAAA,CAAO;AAAA,SAC9B;AAAA,OACH;AACA,MAAA,GAAA,CAAI,YAAA,CAAa,mCAAmC,YAAY,CAAA;AAEhE,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,wBAAA,EAAyB,GAAI,MAAM,OAAO,qBAAqB,CAAA;AACvE,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,UAC/B,IAAI,wBAAA,CAAyB,EAAE,YAAA,EAAc;AAAA,SAC/C;AAEA,QAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,UAAA,GAAA,CAAI,YAAA,CAAa,oCAAA,EAAsC,MAAA,CAAO,MAAM,CAAA;AAAA,QACtE;AAEA,QAAA,GAAA,CAAI,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAEzC,QAAA,OAAO;AAAA,UACL,cAAc,MAAA,CAAO,YAAA;AAAA,UACrB,iBAAiB,MAAA,CAAO,eAAA;AAAA,UACxB,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,OAAO,MAAA,CAAO;AAAA,SAChB;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,SAAA,CAAU;AAAA,UACZ,MAAM,cAAA,CAAe,KAAA;AAAA,UACrB,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,SACnD,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,aAAA,CACJ,YAAA,EACA,OAAA,EAC8B;AAC9B,IAAA,OAAO,KAAA,CAAM,CAAA,2BAAA,CAAA,EAA+B,OAAO,GAAA,KAAsB;AACvE,MAAA,GAAA,CAAI,aAAA;AAAA,QACF,4BAAA,CAA6B;AAAA,UAC3B,eAAA,EAAiB,KAAK,MAAA,CAAO;AAAA,SAC9B;AAAA,OACH;AACA,MAAA,GAAA,CAAI,YAAA,CAAa,mCAAmC,YAAY,CAAA;AAEhE,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,oBAAA,EAAqB,GAAI,MAAM,OAAO,qBAAqB,CAAA;AACnE,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,UAC/B,IAAI,oBAAA,CAAqB;AAAA,YACvB,YAAA;AAAA,YACA,OAAO,OAAA,EAAS,KAAA;AAAA,YAChB,OAAO,OAAA,EAAS;AAAA,WACjB;AAAA,SACH;AAEA,QAAA,GAAA,CAAI,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAEzC,QAAA,OAAO,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS;AAAA,MACrC,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,SAAA,CAAU;AAAA,UACZ,MAAM,cAAA,CAAe,KAAA;AAAA,UACrB,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,SACnD,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF;AAoDO,IAAM,8BAAN,MAGL;AAAA,EACQ,MAAA;AAAA,EACA,MAAA;AAAA,EAEA,YAAA;AAAA,EAER,WAAA,CAAY,QAAiB,MAAA,EAA2C;AACtE,IAAA,IAAA,CAAK,MAAA,GAAS,aAAA,CAAc,MAAA,EAAe,MAAA,CAAO,OAAO,CAAA;AACzD,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,mBAAA,EAAqB,IAAA;AAAA,MACrB,GAAG;AAAA,KACL;AAEA,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,WAAA,CAAY,MAAM,GAAG,CAAA,CAAE,KAAI,IAAK,SAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KACJ,SAAA,EAKe;AACf,IAAA,OAAO,KAAA,CAAM,CAAA,2BAAA,CAAA,EAA+B,OAAO,GAAA,KAAsB;AACvE,MAAA,GAAA,CAAI,YAAA,CAAa,gCAAA,EAAkC,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA;AAC1E,MAAA,GAAA,CAAI,YAAA,CAAa,iCAAA,EAAmC,IAAA,CAAK,YAAY,CAAA;AAErE,MAAA,IAAI,IAAA,CAAK,OAAO,UAAA,EAAY;AAC1B,QAAA,GAAA,CAAI,YAAA,CAAa,+BAAA,EAAiC,IAAA,CAAK,MAAA,CAAO,UAAU,CAAA;AAAA,MAC1E;AAEA,MAAA,IAAI;AAEF,QAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,MAAM,OAAO,qBAAqB,CAAA;AACrE,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,UAC7B,IAAI,sBAAA,CAAuB;AAAA,YACzB,WAAA,EAAa,KAAK,MAAA,CAAO,WAAA;AAAA,YACzB,UAAA,EAAY,KAAK,MAAA,CAAO;AAAA,WACzB;AAAA,SACH;AAEA,QAAA,IAAI,CAAC,IAAA,CAAK,SAAA,IAAa,CAAC,KAAK,KAAA,EAAO;AAElC,UAAA,GAAA,CAAI,YAAA,CAAa,4CAA4C,KAAK,CAAA;AAClE,UAAA,GAAA,CAAI,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AACzC,UAAA;AAAA,QACF;AAEA,QAAA,GAAA,CAAI,YAAA,CAAa,4CAA4C,IAAI,CAAA;AAGjE,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA;AAGtC,QAAA,IAAI,IAAA,CAAK,OAAO,mBAAA,EAAqB;AACnC,UAAA,MAAM,aAAA,GAAgB,4BAA4B,QAAQ,CAAA;AAC1D,UAAA,IAAI,aAAA,EAAe;AACjB,YAAA,GAAA,CAAI,YAAA,CAAa,6CAA6C,IAAI,CAAA;AAAA,UACpE;AAAA,QACF;AAGA,QAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAG7C,QAAA,MAAM,SAAS,MAAM,SAAA,CAAU,UAAA,EAAY,IAAA,CAAK,WAAW,GAAG,CAAA;AAG9D,QAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,MAAM,OAAO,qBAAqB,CAAA;AACrE,QAAA,MAAM,KAAK,MAAA,CAAO,IAAA;AAAA,UAChB,IAAI,sBAAA,CAAuB;AAAA,YACzB,WAAW,IAAA,CAAK,SAAA;AAAA,YAChB,MAAA,EAAQ,IAAA,CAAK,SAAA,CAAU,MAAM;AAAA,WAC9B;AAAA,SACH;AAEA,QAAA,GAAA,CAAI,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAAA,MAC3C,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,SAAA,CAAU;AAAA,UACZ,MAAM,cAAA,CAAe,KAAA;AAAA,UACrB,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,SACnD,CAAA;AAMD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,cAAc,SAAA,EAAkC;AACpD,IAAA,OAAO,KAAA,CAAM,CAAA,+BAAA,CAAA,EAAmC,OAAO,GAAA,KAAsB;AAC3E,MAAA,GAAA,CAAI,YAAA,CAAa,gCAAA,EAAkC,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA;AAE1E,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,wBAAA,EAAyB,GAAI,MAAM,OAAO,qBAAqB,CAAA;AACvE,QAAA,MAAM,IAAA,CAAK,OAAO,IAAA,CAAK,IAAI,yBAAyB,EAAE,SAAA,EAAW,CAAC,CAAA;AAElE,QAAA,GAAA,CAAI,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAAA,MAC3C,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,SAAA,CAAU;AAAA,UACZ,MAAM,cAAA,CAAe,KAAA;AAAA,UACrB,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,SACnD,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,WAAA,CACJ,SAAA,EACA,KAAA,EACA,KAAA,EACe;AACf,IAAA,OAAO,KAAA,CAAM,CAAA,6BAAA,CAAA,EAAiC,OAAO,GAAA,KAAsB;AACzE,MAAA,GAAA,CAAI,YAAA,CAAa,gCAAA,EAAkC,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA;AAC1E,MAAA,GAAA,CAAI,YAAA,CAAa,gCAAgC,KAAK,CAAA;AAEtD,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,sBAAA,EAAuB,GAAI,MAAM,OAAO,qBAAqB,CAAA;AACrE,QAAA,MAAM,KAAK,MAAA,CAAO,IAAA;AAAA,UAChB,IAAI,sBAAA,CAAuB;AAAA,YACzB,SAAA;AAAA,YACA,KAAA;AAAA,YACA;AAAA,WACD;AAAA,SACH;AAEA,QAAA,GAAA,CAAI,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAAA,MAC3C,SAAS,MAAA,EAAQ;AACf,QAAA,GAAA,CAAI,SAAA,CAAU;AAAA,UACZ,MAAM,cAAA,CAAe,KAAA;AAAA,UACrB,OAAA,EAAS,MAAA,YAAkB,KAAA,GAAQ,MAAA,CAAO,OAAA,GAAU;AAAA,SACrD,CAAA;AACD,QAAA,MAAM,MAAA;AAAA,MACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF","file":"chunk-4THGOYZL.js","sourcesContent":["/**\n * Step Functions instrumentation\n *\n * Provides semantic helpers for tracing AWS Step Functions operations\n * with context propagation for distributed tracing across state machines.\n *\n * @example Start workflow with trace context\n * ```typescript\n * import { StepFunctionsExecutor, injectTraceContext } from 'autotel-aws/step-functions';\n * import { SFNClient } from '@aws-sdk/client-sfn';\n *\n * const sfn = new SFNClient({});\n * const executor = new StepFunctionsExecutor(sfn, {\n * stateMachineArn: 'arn:aws:states:us-east-1:123456789:stateMachine:OrderProcessor'\n * });\n *\n * // Start execution with automatic trace context injection\n * const result = await executor.startExecution({\n * input: { orderId: '123', items: [...] },\n * name: 'order-123-execution'\n * });\n * ```\n *\n * @example Extract context in Lambda invoked by Step Functions\n * ```typescript\n * import { extractStepFunctionsContext } from 'autotel-aws/step-functions';\n * import { wrapHandler } from 'autotel-aws/lambda';\n *\n * export const handler = wrapHandler(async (event) => {\n * // Extract trace context from Step Functions input\n * const parentContext = extractStepFunctionsContext(event);\n *\n * // Process the order (without the trace context fields)\n * const { orderId, items } = event;\n * await processOrder(orderId, items);\n *\n * return { status: 'completed' };\n * });\n * ```\n *\n * @example Activity worker with context propagation\n * ```typescript\n * import { StepFunctionsActivityWorker } from 'autotel-aws/step-functions';\n *\n * const worker = new StepFunctionsActivityWorker(sfn, {\n * activityArn: 'arn:aws:states:us-east-1:123456789:activity:ProcessPayment'\n * });\n *\n * // Worker extracts trace context and creates child spans\n * await worker.poll(async (input, taskToken, ctx) => {\n * ctx.setAttribute('payment.amount', input.amount);\n * const result = await processPayment(input);\n * return result;\n * });\n * ```\n */\n\nimport { trace, type TraceContext } from 'autotel';\nimport { context, propagation, SpanStatusCode } from '@opentelemetry/api';\nimport type { SpanContext } from '@opentelemetry/api';\nimport { buildStepFunctionsAttributes } from '../attributes';\nimport { wrapSDKClient } from '../common/sdk-wrapper';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Step Functions operation configuration\n */\nexport interface TraceStepFunctionConfig {\n /**\n * State machine ARN\n * Sets `aws.stepfunctions.state_machine_arn` attribute.\n */\n stateMachineArn: string;\n\n /**\n * Operation type\n * Used to generate the span name: `stepfunctions.{operation}`\n * @default 'execute'\n */\n operation?:\n | 'StartExecution'\n | 'DescribeExecution'\n | 'StopExecution'\n | 'ListExecutions'\n | 'SendTaskSuccess'\n | 'SendTaskFailure'\n | 'execute'; // Legacy alias for StartExecution\n}\n\n/**\n * Configuration for StepFunctionsExecutor\n */\nexport interface StepFunctionsExecutorConfig {\n /**\n * State machine ARN\n */\n stateMachineArn: string;\n\n /**\n * Inject W3C Trace Context into execution input\n * @default true\n */\n injectTraceContext?: boolean;\n\n /**\n * Optional service name for tracing\n */\n service?: string;\n}\n\n/**\n * Execution input with optional trace context\n */\nexport interface ExecutionInput<T = Record<string, unknown>> {\n /**\n * The input data for the execution\n */\n input: T;\n\n /**\n * Optional execution name (must be unique within 90 days)\n */\n name?: string;\n\n /**\n * Optional trace ID for idempotency\n */\n traceHeader?: string;\n}\n\n/**\n * Configuration for StepFunctionsActivityWorker\n */\nexport interface StepFunctionsActivityWorkerConfig {\n /**\n * Activity ARN\n */\n activityArn: string;\n\n /**\n * Worker name for identification\n */\n workerName?: string;\n\n /**\n * Extract trace context from activity input\n * @default true\n */\n extractTraceContext?: boolean;\n\n /**\n * Optional service name for tracing\n */\n service?: string;\n}\n\n/**\n * Trace context fields injected into Step Functions input\n */\ninterface TraceContextFields {\n _traceContext?: {\n traceparent: string;\n tracestate?: string;\n baggage?: string;\n };\n}\n\n// ============================================================================\n// Context Propagation Helpers\n// ============================================================================\n\n/**\n * Inject W3C Trace Context into Step Functions execution input\n *\n * Adds `_traceContext` field with traceparent, tracestate, and baggage.\n * This enables distributed tracing across Step Functions executions\n * and Lambda functions invoked by the state machine.\n *\n * @param input - The original execution input\n * @returns Input with trace context injected\n *\n * @example\n * ```typescript\n * const input = { orderId: '123', items: [...] };\n * const inputWithContext = injectTraceContext(input);\n * // { orderId: '123', items: [...], _traceContext: { traceparent: '...' } }\n *\n * await sfn.send(new StartExecutionCommand({\n * stateMachineArn: 'arn:...',\n * input: JSON.stringify(inputWithContext)\n * }));\n * ```\n */\nexport function injectTraceContext<T extends Record<string, unknown>>(\n input: T,\n): T & TraceContextFields {\n const carrier: Record<string, string> = {};\n propagation.inject(context.active(), carrier);\n\n if (!carrier.traceparent) {\n return input;\n }\n\n return {\n ...input,\n _traceContext: {\n traceparent: carrier.traceparent,\n ...(carrier.tracestate && { tracestate: carrier.tracestate }),\n ...(carrier.baggage && { baggage: carrier.baggage }),\n },\n };\n}\n\n/**\n * Extract W3C Trace Context from Step Functions input\n *\n * Extracts the `_traceContext` field added by injectTraceContext.\n * Returns the SpanContext if present, or undefined.\n *\n * @param input - Step Functions input (event in Lambda handler)\n * @returns SpanContext if trace context was found, undefined otherwise\n *\n * @example\n * ```typescript\n * // In a Lambda invoked by Step Functions\n * export const handler = async (event) => {\n * const parentContext = extractStepFunctionsContext(event);\n * // Use parentContext to link traces...\n *\n * // Access data without trace context\n * const { orderId, items } = stripTraceContext(event);\n * };\n * ```\n */\nexport function extractStepFunctionsContext(\n input: unknown,\n): SpanContext | undefined {\n if (\n typeof input !== 'object' ||\n input === null ||\n !('_traceContext' in input)\n ) {\n return undefined;\n }\n\n const traceContext = (input as TraceContextFields)._traceContext;\n if (!traceContext?.traceparent) {\n return undefined;\n }\n\n // Use W3C Trace Context propagator to extract\n const carrier: Record<string, string> = {\n traceparent: traceContext.traceparent,\n ...(traceContext.tracestate && { tracestate: traceContext.tracestate }),\n ...(traceContext.baggage && { baggage: traceContext.baggage }),\n };\n\n const extractedContext = propagation.extract(context.active(), carrier);\n const span = extractedContext.getValue(Symbol.for('OpenTelemetry Context Key SPAN'));\n\n // Handle both Span and SpanContext\n if (span && typeof span === 'object') {\n if ('spanContext' in span && typeof span.spanContext === 'function') {\n return span.spanContext() as SpanContext;\n }\n // Might already be a SpanContext\n if ('traceId' in span && 'spanId' in span) {\n return span as SpanContext;\n }\n }\n\n return undefined;\n}\n\n/**\n * Strip trace context fields from Step Functions input\n *\n * Returns the input without `_traceContext` field for cleaner processing.\n *\n * @param input - Step Functions input with optional trace context\n * @returns Input without trace context fields\n *\n * @example\n * ```typescript\n * const event = { orderId: '123', _traceContext: { ... } };\n * const cleanInput = stripTraceContext(event);\n * // { orderId: '123' }\n * ```\n */\nexport function stripTraceContext<T extends Record<string, unknown>>(\n input: T,\n): Omit<T, '_traceContext'> {\n const { _traceContext: _, ...rest } = input as T & TraceContextFields;\n return rest as Omit<T, '_traceContext'>;\n}\n\n// ============================================================================\n// Trace Helper (Original API)\n// ============================================================================\n\n/**\n * Trace Step Functions operations\n *\n * Creates a traced function that automatically sets Step Functions attributes.\n *\n * @param config - Step Functions operation configuration\n * @returns A higher-order function that wraps your Step Functions operation with tracing\n *\n * @remarks\n * Semantic attributes set automatically:\n * - `aws.stepfunctions.state_machine_arn` - State machine ARN\n *\n * Additional attributes you should set in your handler:\n * - `aws.stepfunctions.execution_arn` - Execution ARN\n * - `aws.stepfunctions.execution_name` - Execution name\n *\n * @example\n * ```typescript\n * export const startWorkflow = traceStepFunction({\n * stateMachineArn: 'arn:aws:states:us-east-1:123456789:stateMachine:OrderProcessor',\n * operation: 'StartExecution'\n * })(ctx => async (input: object, executionName?: string) => {\n * const result = await sfn.send(new StartExecutionCommand({\n * stateMachineArn: 'arn:aws:states:...',\n * input: JSON.stringify(injectTraceContext(input)),\n * name: executionName\n * }));\n *\n * ctx.setAttribute('aws.stepfunctions.execution_arn', result.executionArn ?? '');\n * return result;\n * });\n * ```\n */\nexport function traceStepFunction(config: TraceStepFunctionConfig) {\n const operation = config.operation ?? 'execute';\n\n return function wrapper<TArgs extends unknown[], TReturn>(\n fn: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n ): (...args: TArgs) => Promise<TReturn> {\n // Use autotel's trace() which properly handles the factory pattern\n return trace(\n `stepfunctions.${operation}`,\n (ctx: TraceContext) =>\n async (...args: TArgs): Promise<TReturn> => {\n // Set Step Functions attributes\n ctx.setAttributes(\n buildStepFunctionsAttributes({\n stateMachineArn: config.stateMachineArn,\n }),\n );\n\n // Get the user's handler and execute with forwarded arguments\n const handler = fn(ctx);\n return handler(...args);\n },\n );\n };\n}\n\n// ============================================================================\n// StepFunctionsExecutor Class\n// ============================================================================\n\n/**\n * Step Functions Executor with automatic trace context injection\n *\n * Wraps an SFN client to automatically:\n * - Create spans for all operations\n * - Inject W3C Trace Context into execution input\n * - Set proper semantic attributes\n *\n * @example Basic usage\n * ```typescript\n * import { StepFunctionsExecutor } from 'autotel-aws/step-functions';\n * import { SFNClient } from '@aws-sdk/client-sfn';\n *\n * const sfn = new SFNClient({ region: 'us-east-1' });\n * const executor = new StepFunctionsExecutor(sfn, {\n * stateMachineArn: 'arn:aws:states:us-east-1:123456789:stateMachine:OrderProcessor'\n * });\n *\n * // Start execution with automatic trace context\n * const result = await executor.startExecution({\n * input: { orderId: '123', items: ['item1', 'item2'] },\n * name: 'order-123-execution'\n * });\n *\n * console.log('Execution ARN:', result.executionArn);\n * ```\n *\n * @example Express workflow (sync execution)\n * ```typescript\n * // Express workflows return synchronously\n * const result = await executor.startSyncExecution({\n * input: { orderId: '123' }\n * });\n *\n * if (result.status === 'SUCCEEDED') {\n * const output = JSON.parse(result.output || '{}');\n * console.log('Workflow output:', output);\n * }\n * ```\n */\nexport class StepFunctionsExecutor<\n \n TClient extends { send: (command: any) => Promise<any> } = any,\n> {\n private client: TClient;\n private config: Required<Pick<StepFunctionsExecutorConfig, 'stateMachineArn'>> &\n StepFunctionsExecutorConfig;\n private stateMachineName: string;\n\n constructor(client: TClient, config: StepFunctionsExecutorConfig) {\n this.client = wrapSDKClient(client as any, config.service) as TClient;\n this.config = {\n injectTraceContext: true,\n ...config,\n };\n // Extract state machine name from ARN (last segment)\n this.stateMachineName = config.stateMachineArn.split(':').pop() || 'unknown';\n }\n\n /**\n * Start a new execution of the state machine\n *\n * @param execution - Execution input and optional name\n * @returns Promise with execution ARN and start date\n */\n async startExecution<T extends Record<string, unknown>>(\n execution: ExecutionInput<T>,\n ): Promise<{\n executionArn?: string;\n startDate?: Date;\n }> {\n return trace(`stepfunctions.StartExecution`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildStepFunctionsAttributes({\n stateMachineArn: this.config.stateMachineArn,\n }),\n );\n ctx.setAttribute('aws.stepfunctions.state_machine_name', this.stateMachineName);\n\n if (execution.name) {\n ctx.setAttribute('aws.stepfunctions.execution_name', execution.name);\n }\n\n // Optionally inject trace context\n const inputData = this.config.injectTraceContext\n ? injectTraceContext(execution.input)\n : execution.input;\n\n const input = {\n stateMachineArn: this.config.stateMachineArn,\n input: JSON.stringify(inputData),\n name: execution.name,\n traceHeader: execution.traceHeader,\n };\n\n try {\n const { StartExecutionCommand } = await import('@aws-sdk/client-sfn');\n const result = await this.client.send(new StartExecutionCommand(input));\n\n if (result.executionArn) {\n ctx.setAttribute('aws.stepfunctions.execution_arn', result.executionArn);\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n\n return {\n executionArn: result.executionArn,\n startDate: result.startDate,\n };\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'StartExecution failed',\n });\n throw error;\n }\n });\n }\n\n /**\n * Start a synchronous execution (Express workflows only)\n *\n * @param execution - Execution input and optional name\n * @returns Promise with execution result including output\n */\n async startSyncExecution<T extends Record<string, unknown>>(\n execution: ExecutionInput<T>,\n ): Promise<{\n executionArn?: string;\n status?: 'SUCCEEDED' | 'FAILED' | 'TIMED_OUT';\n output?: string;\n error?: string;\n cause?: string;\n billingDetails?: {\n billedMemoryUsedInMB?: number;\n billedDurationInMilliseconds?: number;\n };\n }> {\n return trace(`stepfunctions.StartSyncExecution`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildStepFunctionsAttributes({\n stateMachineArn: this.config.stateMachineArn,\n }),\n );\n ctx.setAttribute('aws.stepfunctions.state_machine_name', this.stateMachineName);\n ctx.setAttribute('aws.stepfunctions.execution_type', 'express');\n\n if (execution.name) {\n ctx.setAttribute('aws.stepfunctions.execution_name', execution.name);\n }\n\n // Optionally inject trace context\n const inputData = this.config.injectTraceContext\n ? injectTraceContext(execution.input)\n : execution.input;\n\n const input = {\n stateMachineArn: this.config.stateMachineArn,\n input: JSON.stringify(inputData),\n name: execution.name,\n traceHeader: execution.traceHeader,\n };\n\n try {\n const { StartSyncExecutionCommand } = await import('@aws-sdk/client-sfn');\n const result = await this.client.send(new StartSyncExecutionCommand(input));\n\n if (result.executionArn) {\n ctx.setAttribute('aws.stepfunctions.execution_arn', result.executionArn);\n }\n if (result.status) {\n ctx.setAttribute('aws.stepfunctions.execution_status', result.status);\n }\n\n if (result.status === 'FAILED' || result.status === 'TIMED_OUT') {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: result.error || result.status,\n });\n } else {\n ctx.setStatus({ code: SpanStatusCode.OK });\n }\n\n return {\n executionArn: result.executionArn,\n status: result.status as 'SUCCEEDED' | 'FAILED' | 'TIMED_OUT' | undefined,\n output: result.output,\n error: result.error,\n cause: result.cause,\n billingDetails: result.billingDetails\n ? {\n billedMemoryUsedInMB: result.billingDetails.billedMemoryUsedInMB,\n billedDurationInMilliseconds:\n result.billingDetails.billedDurationInMilliseconds,\n }\n : undefined,\n };\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'StartSyncExecution failed',\n });\n throw error;\n }\n });\n }\n\n /**\n * Describe an execution\n *\n * @param executionArn - ARN of the execution to describe\n * @returns Promise with execution details\n */\n async describeExecution(executionArn: string): Promise<{\n executionArn?: string;\n stateMachineArn?: string;\n name?: string;\n status?: string;\n startDate?: Date;\n stopDate?: Date;\n input?: string;\n output?: string;\n error?: string;\n cause?: string;\n }> {\n return trace(`stepfunctions.DescribeExecution`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildStepFunctionsAttributes({\n stateMachineArn: this.config.stateMachineArn,\n }),\n );\n ctx.setAttribute('aws.stepfunctions.execution_arn', executionArn);\n\n try {\n const { DescribeExecutionCommand } = await import('@aws-sdk/client-sfn');\n const result = await this.client.send(\n new DescribeExecutionCommand({ executionArn }),\n );\n\n if (result.status) {\n ctx.setAttribute('aws.stepfunctions.execution_status', result.status);\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n\n return {\n executionArn: result.executionArn,\n stateMachineArn: result.stateMachineArn,\n name: result.name,\n status: result.status,\n startDate: result.startDate,\n stopDate: result.stopDate,\n input: result.input,\n output: result.output,\n error: result.error,\n cause: result.cause,\n };\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'DescribeExecution failed',\n });\n throw error;\n }\n });\n }\n\n /**\n * Stop an execution\n *\n * @param executionArn - ARN of the execution to stop\n * @param options - Optional error and cause for the stop\n * @returns Promise with stop date\n */\n async stopExecution(\n executionArn: string,\n options?: { error?: string; cause?: string },\n ): Promise<{ stopDate?: Date }> {\n return trace(`stepfunctions.StopExecution`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildStepFunctionsAttributes({\n stateMachineArn: this.config.stateMachineArn,\n }),\n );\n ctx.setAttribute('aws.stepfunctions.execution_arn', executionArn);\n\n try {\n const { StopExecutionCommand } = await import('@aws-sdk/client-sfn');\n const result = await this.client.send(\n new StopExecutionCommand({\n executionArn,\n error: options?.error,\n cause: options?.cause,\n }),\n );\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n\n return { stopDate: result.stopDate };\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'StopExecution failed',\n });\n throw error;\n }\n });\n }\n}\n\n// ============================================================================\n// StepFunctionsActivityWorker Class\n// ============================================================================\n\n/**\n * Step Functions Activity Worker with trace context extraction\n *\n * Polls for activity tasks and processes them with automatic tracing.\n * Extracts trace context from task input for distributed tracing.\n *\n * @example Basic activity worker\n * ```typescript\n * import { StepFunctionsActivityWorker } from 'autotel-aws/step-functions';\n * import { SFNClient } from '@aws-sdk/client-sfn';\n *\n * const sfn = new SFNClient({ region: 'us-east-1' });\n * const worker = new StepFunctionsActivityWorker(sfn, {\n * activityArn: 'arn:aws:states:us-east-1:123456789:activity:ProcessPayment',\n * workerName: 'payment-worker-1'\n * });\n *\n * // Process tasks with automatic tracing\n * await worker.poll(async (input, taskToken, ctx) => {\n * ctx.setAttribute('payment.amount', input.amount);\n * ctx.setAttribute('payment.currency', input.currency);\n *\n * const result = await processPayment(input);\n *\n * ctx.setAttribute('payment.status', result.status);\n * return result;\n * });\n * ```\n *\n * @example Continuous polling with error handling\n * ```typescript\n * async function runWorker() {\n * while (true) {\n * try {\n * await worker.poll(async (input, taskToken, ctx) => {\n * return await processTask(input);\n * });\n * } catch (error) {\n * console.error('Worker error:', error);\n * // Brief pause before retrying\n * await new Promise(resolve => setTimeout(resolve, 1000));\n * }\n * }\n * }\n * ```\n */\nexport class StepFunctionsActivityWorker<\n \n TClient extends { send: (command: any) => Promise<any> } = any,\n> {\n private client: TClient;\n private config: Required<Pick<StepFunctionsActivityWorkerConfig, 'activityArn'>> &\n StepFunctionsActivityWorkerConfig;\n private activityName: string;\n\n constructor(client: TClient, config: StepFunctionsActivityWorkerConfig) {\n this.client = wrapSDKClient(client as any, config.service) as TClient;\n this.config = {\n extractTraceContext: true,\n ...config,\n };\n // Extract activity name from ARN\n this.activityName = config.activityArn.split(':').pop() || 'unknown';\n }\n\n /**\n * Poll for an activity task and process it\n *\n * @param processor - Function to process the task input\n * @returns Promise that resolves when the task is processed\n */\n async poll<TInput extends Record<string, unknown>, TOutput>(\n processor: (\n input: TInput,\n taskToken: string,\n ctx: TraceContext,\n ) => Promise<TOutput>,\n ): Promise<void> {\n return trace(`stepfunctions.activity.poll`, async (ctx: TraceContext) => {\n ctx.setAttribute('aws.stepfunctions.activity_arn', this.config.activityArn);\n ctx.setAttribute('aws.stepfunctions.activity_name', this.activityName);\n\n if (this.config.workerName) {\n ctx.setAttribute('aws.stepfunctions.worker_name', this.config.workerName);\n }\n\n try {\n // Poll for task\n const { GetActivityTaskCommand } = await import('@aws-sdk/client-sfn');\n const task = await this.client.send(\n new GetActivityTaskCommand({\n activityArn: this.config.activityArn,\n workerName: this.config.workerName,\n }),\n );\n\n if (!task.taskToken || !task.input) {\n // No task available (timeout)\n ctx.setAttribute('aws.stepfunctions.activity_task_received', false);\n ctx.setStatus({ code: SpanStatusCode.OK });\n return;\n }\n\n ctx.setAttribute('aws.stepfunctions.activity_task_received', true);\n\n // Parse input\n const rawInput = JSON.parse(task.input) as TInput & TraceContextFields;\n\n // Extract trace context if enabled\n if (this.config.extractTraceContext) {\n const parentContext = extractStepFunctionsContext(rawInput);\n if (parentContext) {\n ctx.setAttribute('aws.stepfunctions.trace_context_extracted', true);\n }\n }\n\n // Strip trace context from input\n const cleanInput = stripTraceContext(rawInput) as TInput;\n\n // Process the task\n const output = await processor(cleanInput, task.taskToken, ctx);\n\n // Send success\n const { SendTaskSuccessCommand } = await import('@aws-sdk/client-sfn');\n await this.client.send(\n new SendTaskSuccessCommand({\n taskToken: task.taskToken,\n output: JSON.stringify(output),\n }),\n );\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Activity processing failed',\n });\n\n // If we have a task token, send failure\n // Note: In a real implementation, you'd want to track the token\n // This is simplified for the example\n\n throw error;\n }\n });\n }\n\n /**\n * Send a task heartbeat\n *\n * For long-running activities, send heartbeats to prevent timeout.\n *\n * @param taskToken - The task token from GetActivityTask\n */\n async sendHeartbeat(taskToken: string): Promise<void> {\n return trace(`stepfunctions.SendTaskHeartbeat`, async (ctx: TraceContext) => {\n ctx.setAttribute('aws.stepfunctions.activity_arn', this.config.activityArn);\n\n try {\n const { SendTaskHeartbeatCommand } = await import('@aws-sdk/client-sfn');\n await this.client.send(new SendTaskHeartbeatCommand({ taskToken }));\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'SendTaskHeartbeat failed',\n });\n throw error;\n }\n });\n }\n\n /**\n * Send task failure\n *\n * @param taskToken - The task token from GetActivityTask\n * @param error - Error code\n * @param cause - Error cause description\n */\n async sendFailure(\n taskToken: string,\n error: string,\n cause?: string,\n ): Promise<void> {\n return trace(`stepfunctions.SendTaskFailure`, async (ctx: TraceContext) => {\n ctx.setAttribute('aws.stepfunctions.activity_arn', this.config.activityArn);\n ctx.setAttribute('aws.stepfunctions.task_error', error);\n\n try {\n const { SendTaskFailureCommand } = await import('@aws-sdk/client-sfn');\n await this.client.send(\n new SendTaskFailureCommand({\n taskToken,\n error,\n cause,\n }),\n );\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n } catch (error_) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error_ instanceof Error ? error_.message : 'SendTaskFailure failed',\n });\n throw error_;\n }\n });\n }\n}\n"]}
@@ -2,7 +2,7 @@ import { wrapSDKClient } from './chunk-YG56NRIO.js';
2
2
  import { __require } from './chunk-DGUM43GV.js';
3
3
 
4
4
  // src/sdk/auto-instrument.ts
5
- var INSTRUMENTED_SYMBOL = Symbol.for("autotel-aws.instrumented");
5
+ var INSTRUMENTED_SYMBOL = /* @__PURE__ */ Symbol.for("autotel-aws.instrumented");
6
6
  var globalAutoInstrumentEnabled = false;
7
7
  var originalSmithyClientSend = null;
8
8
  function isInstrumented(client) {
@@ -74,5 +74,5 @@ function isAutoInstrumentEnabled() {
74
74
  }
75
75
 
76
76
  export { autoInstrumentAWS, createTracedClient, disableAutoInstrumentAWS, instrumentSDK, isAutoInstrumentEnabled };
77
- //# sourceMappingURL=chunk-FKZOELBT.js.map
78
- //# sourceMappingURL=chunk-FKZOELBT.js.map
77
+ //# sourceMappingURL=chunk-JPDJPOIB.js.map
78
+ //# sourceMappingURL=chunk-JPDJPOIB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sdk/auto-instrument.ts"],"names":[],"mappings":";;;;AA2BA,IAAM,mBAAA,mBAAsB,MAAA,CAAO,GAAA,CAAI,0BAA0B,CAAA;AAGjE,IAAI,2BAAA,GAA8B,KAAA;AAGlC,IAAI,wBAAA,GAA8E,IAAA;AAKlF,SAAS,eAAe,MAAA,EAA0B;AAChD,EAAA,OACE,OAAO,MAAA,KAAW,QAAA,IAClB,WAAW,IAAA,IACV,MAAA,CAAmC,mBAAmB,CAAA,KAAM,IAAA;AAEjE;AAKA,SAAS,mBAAsB,MAAA,EAAc;AAC3C,EAAC,MAAA,CAAmC,mBAAmB,CAAA,GAAI,IAAA;AAC3D,EAAA,OAAO,MAAA;AACT;AAuCO,SAAS,aAAA,CACd,QACA,MAAA,EACG;AAEH,EAAA,IAAI,cAAA,CAAe,MAAM,CAAA,EAAG;AAC1B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AAC3D,EAAA,OAAO,mBAAmB,aAAa,CAAA;AACzC;AAyBO,SAAS,kBAAA,CAId,aACA,MAAA,EACiB;AAEjB,EAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,MAAa,CAAA;AAC5C,EAAA,OAAO,aAAA,CAAc,QAAQ,MAAM,CAAA;AACrC;AA6CO,SAAS,kBAAkB,MAAA,EAAyC;AAEzE,EAAA,IAAI,2BAAA,EAA6B;AAC/B,IAAA;AAAA,EACF;AAIA,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI;AAGF,IAAA,YAAA,GAAe,SAAA,CAAQ,wBAAwB,CAAA,CAAE,MAAA;AAAA,EACnD,CAAA,CAAA,MAAQ;AAEN,IAAA,IAAI;AAEF,MAAA,YAAA,GAAe,SAAA,CAAQ,uBAAuB,CAAA,CAAE,MAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,OAEF;AACA,MAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,wBAAA,GAA2B,aAAa,SAAA,CAAU,IAAA;AAGlD,EAAA,MAAM,YAAA,GAAe,aAAa,SAAA,CAAU,IAAA;AAE5C,EAAA,YAAA,CAAa,SAAA,CAAU,IAAA,GAAO,SAAS,WAAA,CAErC,YACG,IAAA,EACe;AAElB,IAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACxB,MAAA,OAAO,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,IACjD;AAIA,IAAA,MAAM,aAAA,GAAgB,aAAA,CAAc,IAAA,EAAoD,MAAA,EAAQ,OAAO,CAAA;AAEvG,IAAA,OAAQ,aAAA,CAAsB,IAAA,CAAK,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,EACrD,CAAA;AAEA,EAAA,2BAAA,GAA8B,IAAA;AAChC;AAmBO,SAAS,wBAAA,GAAiC;AAC/C,EAAA,IAAI,CAAC,2BAAA,IAA+B,CAAC,wBAAA,EAA0B;AAC7D,IAAA;AAAA,EACF;AAGA,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI;AAEF,IAAA,YAAA,GAAe,SAAA,CAAQ,wBAAwB,CAAA,CAAE,MAAA;AAAA,EACnD,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI;AAEF,MAAA,YAAA,GAAe,SAAA,CAAQ,uBAAuB,CAAA,CAAE,MAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,YAAA,CAAa,UAAU,IAAA,GAAO,wBAAA;AAC9B,EAAA,wBAAA,GAA2B,IAAA;AAC3B,EAAA,2BAAA,GAA8B,KAAA;AAChC;AAKO,SAAS,uBAAA,GAAmC;AACjD,EAAA,OAAO,2BAAA;AACT","file":"chunk-JPDJPOIB.js","sourcesContent":["/**\n * AWS SDK v3 auto-instrumentation\n *\n * Provides multiple approaches for instrumenting AWS SDK v3 clients:\n * 1. `instrumentSDK()` - Wrap an existing client instance\n * 2. `createTracedClient()` - Create a pre-instrumented client\n * 3. `autoInstrumentAWS()` - Globally patch all AWS SDK clients\n *\n * @example Basic instrumentation\n * ```typescript\n * import { instrumentSDK } from 'autotel-aws/sdk';\n * import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';\n *\n * const s3 = instrumentSDK(new S3Client({ region: 'us-east-1' }));\n *\n * // All send() calls are now traced\n * await s3.send(new PutObjectCommand({ Bucket: 'my-bucket', Key: 'file.txt' }));\n * ```\n */\n\n// Type-only import from optional peer dependency\n// @ts-expect-error - Optional peer dependency, may not be installed\nimport type { Client, Command } from '@aws-sdk/smithy-client';\nimport { wrapSDKClient } from '../common/sdk-wrapper';\nimport type { SDKInstrumentationConfig } from '../config';\n\n// Symbol to mark clients as instrumented (prevents double-wrapping)\nconst INSTRUMENTED_SYMBOL = Symbol.for('autotel-aws.instrumented');\n\n// Track whether global auto-instrumentation is active\nlet globalAutoInstrumentEnabled = false;\n\n// Store original send method for restoration\nlet originalSmithyClientSend: ((...args: unknown[]) => Promise<unknown>) | null = null;\n\n/**\n * Check if a client is already instrumented\n */\nfunction isInstrumented(client: unknown): boolean {\n return (\n typeof client === 'object' &&\n client !== null &&\n (client as Record<symbol, boolean>)[INSTRUMENTED_SYMBOL] === true\n );\n}\n\n/**\n * Mark a client as instrumented\n */\nfunction markAsInstrumented<T>(client: T): T {\n (client as Record<symbol, boolean>)[INSTRUMENTED_SYMBOL] = true;\n return client;\n}\n\n/**\n * Instrument an existing AWS SDK v3 client\n *\n * Wraps the client's `send()` method to automatically create spans\n * for all AWS API calls with proper semantic attributes.\n *\n * @param client - An AWS SDK v3 client instance\n * @param config - Optional instrumentation configuration\n * @returns The instrumented client (same instance, modified)\n *\n * @example Basic usage\n * ```typescript\n * import { instrumentSDK } from 'autotel-aws/sdk';\n * import { S3Client } from '@aws-sdk/client-s3';\n *\n * const s3 = instrumentSDK(new S3Client({ region: 'us-east-1' }));\n * ```\n *\n * @example With configuration\n * ```typescript\n * const s3 = instrumentSDK(new S3Client({}), {\n * service: 's3',\n * captureRequest: true,\n * captureResponse: true\n * });\n * ```\n *\n * @remarks\n * Semantic attributes set automatically:\n * - `rpc.system` - 'aws-api'\n * - `rpc.service` - AWS service name (e.g., 'S3', 'DynamoDB')\n * - `rpc.method` - Operation name (e.g., 'GetObject', 'PutItem')\n * - `aws.request_id` - AWS request ID from response\n * - `http.status_code` - HTTP status code\n *\n * @see https://opentelemetry.io/docs/specs/semconv/cloud-providers/aws-sdk/\n */\nexport function instrumentSDK<T extends Client<unknown, unknown, unknown, unknown>>(\n client: T,\n config?: SDKInstrumentationConfig,\n): T {\n // Prevent double-instrumentation\n if (isInstrumented(client)) {\n return client;\n }\n\n const wrappedClient = wrapSDKClient(client, config?.service);\n return markAsInstrumented(wrappedClient);\n}\n\n/**\n * Create a pre-instrumented AWS SDK v3 client\n *\n * Convenience factory that creates and instruments a client in one call.\n *\n * @param ClientClass - The AWS SDK client class constructor\n * @param config - Client configuration merged with instrumentation config\n * @returns A new instrumented client instance\n *\n * @example\n * ```typescript\n * import { createTracedClient } from 'autotel-aws/sdk';\n * import { S3Client } from '@aws-sdk/client-s3';\n * import { DynamoDBClient } from '@aws-sdk/client-dynamodb';\n *\n * // Create instrumented clients\n * const s3 = createTracedClient(S3Client, { region: 'us-east-1' });\n * const dynamodb = createTracedClient(DynamoDBClient, {\n * region: 'us-east-1',\n * captureRequest: true\n * });\n * ```\n */\nexport function createTracedClient<\n \n T extends new (...args: any[]) => Client<unknown, unknown, unknown, unknown>,\n>(\n ClientClass: T,\n config?: SDKInstrumentationConfig & ConstructorParameters<T>[0],\n): InstanceType<T> {\n \n const client = new ClientClass(config as any);\n return instrumentSDK(client, config) as InstanceType<T>;\n}\n\n/**\n * Auto-instrument all AWS SDK v3 clients globally\n *\n * Patches the AWS SDK's base Client class to automatically instrument\n * all client instances created after this call. This is the most convenient\n * approach but requires the AWS SDK to be installed.\n *\n * Call this once at application startup, before creating any clients.\n *\n * @param config - Optional default instrumentation configuration\n *\n * @example Basic usage\n * ```typescript\n * import { autoInstrumentAWS } from 'autotel-aws/sdk';\n *\n * // Call once at startup\n * autoInstrumentAWS();\n *\n * // All subsequent clients are automatically instrumented\n * const s3 = new S3Client({ region: 'us-east-1' });\n * const dynamodb = new DynamoDBClient({ region: 'us-east-1' });\n *\n * // Both are traced automatically\n * await s3.send(new GetObjectCommand({ Bucket: 'b', Key: 'k' }));\n * await dynamodb.send(new GetItemCommand({ TableName: 't', Key: {} }));\n * ```\n *\n * @example With default configuration\n * ```typescript\n * autoInstrumentAWS({\n * captureRequest: false,\n * captureResponse: false\n * });\n * ```\n *\n * @remarks\n * - This function is idempotent - calling it multiple times has no effect\n * - Clients created before calling this function are NOT instrumented\n * - Use `instrumentSDK()` for clients created before auto-instrumentation\n * - Requires `@aws-sdk/smithy-client` to be installed (peer dependency)\n *\n * @throws Error if AWS SDK is not installed\n */\nexport function autoInstrumentAWS(config?: SDKInstrumentationConfig): void {\n // Idempotency check\n if (globalAutoInstrumentEnabled) {\n return;\n }\n\n // Try to get the smithy-client module\n \n let SmithyClient: any;\n try {\n // Dynamic require to avoid bundling issues\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@aws-sdk/smithy-client').Client;\n } catch {\n // Try the core package (newer SDK versions)\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@smithy/smithy-client').Client;\n } catch {\n console.warn(\n '[autotel-aws] autoInstrumentAWS() requires @aws-sdk/smithy-client or @smithy/smithy-client. ' +\n 'Install an AWS SDK v3 client package (e.g., @aws-sdk/client-s3) or use instrumentSDK() directly.',\n );\n return;\n }\n }\n\n // Store original send for potential restoration\n originalSmithyClientSend = SmithyClient.prototype.send;\n\n // Patch the prototype's send method\n const originalSend = SmithyClient.prototype.send;\n\n SmithyClient.prototype.send = function patchedSend(\n this: Client<unknown, unknown, unknown, unknown>,\n command: Command<unknown, unknown, unknown, unknown, unknown>,\n ...args: unknown[]\n ): Promise<unknown> {\n // Skip if this specific client is already instrumented (via instrumentSDK)\n if (isInstrumented(this)) {\n return originalSend.call(this, command, ...args);\n }\n\n // Create a one-time wrapped client for this call\n // This is less efficient than pre-wrapping, but ensures all calls are traced\n const wrappedClient = wrapSDKClient(this as Client<unknown, unknown, unknown, unknown>, config?.service);\n \n return (wrappedClient as any).send(command, ...args);\n };\n\n globalAutoInstrumentEnabled = true;\n}\n\n/**\n * Disable global auto-instrumentation\n *\n * Restores the original AWS SDK behavior. Useful for testing or\n * when you need to disable instrumentation temporarily.\n *\n * @example\n * ```typescript\n * import { autoInstrumentAWS, disableAutoInstrumentAWS } from 'autotel-aws/sdk';\n *\n * autoInstrumentAWS();\n * // ... use instrumented clients ...\n *\n * disableAutoInstrumentAWS();\n * // Subsequent operations are not traced\n * ```\n */\nexport function disableAutoInstrumentAWS(): void {\n if (!globalAutoInstrumentEnabled || !originalSmithyClientSend) {\n return;\n }\n\n \n let SmithyClient: any;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@aws-sdk/smithy-client').Client;\n } catch {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@smithy/smithy-client').Client;\n } catch {\n return;\n }\n }\n\n // Restore original send\n SmithyClient.prototype.send = originalSmithyClientSend;\n originalSmithyClientSend = null;\n globalAutoInstrumentEnabled = false;\n}\n\n/**\n * Check if global auto-instrumentation is enabled\n */\nexport function isAutoInstrumentEnabled(): boolean {\n return globalAutoInstrumentEnabled;\n}\n"]}
@@ -34,7 +34,7 @@ function extractStepFunctionsContext(input) {
34
34
  ...traceContext.baggage && { baggage: traceContext.baggage }
35
35
  };
36
36
  const extractedContext = api.propagation.extract(api.context.active(), carrier);
37
- const span = extractedContext.getValue(Symbol.for("OpenTelemetry Context Key SPAN"));
37
+ const span = extractedContext.getValue(/* @__PURE__ */ Symbol.for("OpenTelemetry Context Key SPAN"));
38
38
  if (span && typeof span === "object") {
39
39
  if ("spanContext" in span && typeof span.spanContext === "function") {
40
40
  return span.spanContext();
@@ -390,5 +390,5 @@ exports.extractStepFunctionsContext = extractStepFunctionsContext;
390
390
  exports.injectTraceContext = injectTraceContext;
391
391
  exports.stripTraceContext = stripTraceContext;
392
392
  exports.traceStepFunction = traceStepFunction;
393
- //# sourceMappingURL=chunk-KUIOI74B.cjs.map
394
- //# sourceMappingURL=chunk-KUIOI74B.cjs.map
393
+ //# sourceMappingURL=chunk-KNRQYDAS.cjs.map
394
+ //# sourceMappingURL=chunk-KNRQYDAS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/step-functions/index.ts"],"names":["propagation","context","trace","buildStepFunctionsAttributes","wrapSDKClient","SpanStatusCode"],"mappings":"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","file":"chunk-KNRQYDAS.cjs","sourcesContent":["/**\n * Step Functions instrumentation\n *\n * Provides semantic helpers for tracing AWS Step Functions operations\n * with context propagation for distributed tracing across state machines.\n *\n * @example Start workflow with trace context\n * ```typescript\n * import { StepFunctionsExecutor, injectTraceContext } from 'autotel-aws/step-functions';\n * import { SFNClient } from '@aws-sdk/client-sfn';\n *\n * const sfn = new SFNClient({});\n * const executor = new StepFunctionsExecutor(sfn, {\n * stateMachineArn: 'arn:aws:states:us-east-1:123456789:stateMachine:OrderProcessor'\n * });\n *\n * // Start execution with automatic trace context injection\n * const result = await executor.startExecution({\n * input: { orderId: '123', items: [...] },\n * name: 'order-123-execution'\n * });\n * ```\n *\n * @example Extract context in Lambda invoked by Step Functions\n * ```typescript\n * import { extractStepFunctionsContext } from 'autotel-aws/step-functions';\n * import { wrapHandler } from 'autotel-aws/lambda';\n *\n * export const handler = wrapHandler(async (event) => {\n * // Extract trace context from Step Functions input\n * const parentContext = extractStepFunctionsContext(event);\n *\n * // Process the order (without the trace context fields)\n * const { orderId, items } = event;\n * await processOrder(orderId, items);\n *\n * return { status: 'completed' };\n * });\n * ```\n *\n * @example Activity worker with context propagation\n * ```typescript\n * import { StepFunctionsActivityWorker } from 'autotel-aws/step-functions';\n *\n * const worker = new StepFunctionsActivityWorker(sfn, {\n * activityArn: 'arn:aws:states:us-east-1:123456789:activity:ProcessPayment'\n * });\n *\n * // Worker extracts trace context and creates child spans\n * await worker.poll(async (input, taskToken, ctx) => {\n * ctx.setAttribute('payment.amount', input.amount);\n * const result = await processPayment(input);\n * return result;\n * });\n * ```\n */\n\nimport { trace, type TraceContext } from 'autotel';\nimport { context, propagation, SpanStatusCode } from '@opentelemetry/api';\nimport type { SpanContext } from '@opentelemetry/api';\nimport { buildStepFunctionsAttributes } from '../attributes';\nimport { wrapSDKClient } from '../common/sdk-wrapper';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Step Functions operation configuration\n */\nexport interface TraceStepFunctionConfig {\n /**\n * State machine ARN\n * Sets `aws.stepfunctions.state_machine_arn` attribute.\n */\n stateMachineArn: string;\n\n /**\n * Operation type\n * Used to generate the span name: `stepfunctions.{operation}`\n * @default 'execute'\n */\n operation?:\n | 'StartExecution'\n | 'DescribeExecution'\n | 'StopExecution'\n | 'ListExecutions'\n | 'SendTaskSuccess'\n | 'SendTaskFailure'\n | 'execute'; // Legacy alias for StartExecution\n}\n\n/**\n * Configuration for StepFunctionsExecutor\n */\nexport interface StepFunctionsExecutorConfig {\n /**\n * State machine ARN\n */\n stateMachineArn: string;\n\n /**\n * Inject W3C Trace Context into execution input\n * @default true\n */\n injectTraceContext?: boolean;\n\n /**\n * Optional service name for tracing\n */\n service?: string;\n}\n\n/**\n * Execution input with optional trace context\n */\nexport interface ExecutionInput<T = Record<string, unknown>> {\n /**\n * The input data for the execution\n */\n input: T;\n\n /**\n * Optional execution name (must be unique within 90 days)\n */\n name?: string;\n\n /**\n * Optional trace ID for idempotency\n */\n traceHeader?: string;\n}\n\n/**\n * Configuration for StepFunctionsActivityWorker\n */\nexport interface StepFunctionsActivityWorkerConfig {\n /**\n * Activity ARN\n */\n activityArn: string;\n\n /**\n * Worker name for identification\n */\n workerName?: string;\n\n /**\n * Extract trace context from activity input\n * @default true\n */\n extractTraceContext?: boolean;\n\n /**\n * Optional service name for tracing\n */\n service?: string;\n}\n\n/**\n * Trace context fields injected into Step Functions input\n */\ninterface TraceContextFields {\n _traceContext?: {\n traceparent: string;\n tracestate?: string;\n baggage?: string;\n };\n}\n\n// ============================================================================\n// Context Propagation Helpers\n// ============================================================================\n\n/**\n * Inject W3C Trace Context into Step Functions execution input\n *\n * Adds `_traceContext` field with traceparent, tracestate, and baggage.\n * This enables distributed tracing across Step Functions executions\n * and Lambda functions invoked by the state machine.\n *\n * @param input - The original execution input\n * @returns Input with trace context injected\n *\n * @example\n * ```typescript\n * const input = { orderId: '123', items: [...] };\n * const inputWithContext = injectTraceContext(input);\n * // { orderId: '123', items: [...], _traceContext: { traceparent: '...' } }\n *\n * await sfn.send(new StartExecutionCommand({\n * stateMachineArn: 'arn:...',\n * input: JSON.stringify(inputWithContext)\n * }));\n * ```\n */\nexport function injectTraceContext<T extends Record<string, unknown>>(\n input: T,\n): T & TraceContextFields {\n const carrier: Record<string, string> = {};\n propagation.inject(context.active(), carrier);\n\n if (!carrier.traceparent) {\n return input;\n }\n\n return {\n ...input,\n _traceContext: {\n traceparent: carrier.traceparent,\n ...(carrier.tracestate && { tracestate: carrier.tracestate }),\n ...(carrier.baggage && { baggage: carrier.baggage }),\n },\n };\n}\n\n/**\n * Extract W3C Trace Context from Step Functions input\n *\n * Extracts the `_traceContext` field added by injectTraceContext.\n * Returns the SpanContext if present, or undefined.\n *\n * @param input - Step Functions input (event in Lambda handler)\n * @returns SpanContext if trace context was found, undefined otherwise\n *\n * @example\n * ```typescript\n * // In a Lambda invoked by Step Functions\n * export const handler = async (event) => {\n * const parentContext = extractStepFunctionsContext(event);\n * // Use parentContext to link traces...\n *\n * // Access data without trace context\n * const { orderId, items } = stripTraceContext(event);\n * };\n * ```\n */\nexport function extractStepFunctionsContext(\n input: unknown,\n): SpanContext | undefined {\n if (\n typeof input !== 'object' ||\n input === null ||\n !('_traceContext' in input)\n ) {\n return undefined;\n }\n\n const traceContext = (input as TraceContextFields)._traceContext;\n if (!traceContext?.traceparent) {\n return undefined;\n }\n\n // Use W3C Trace Context propagator to extract\n const carrier: Record<string, string> = {\n traceparent: traceContext.traceparent,\n ...(traceContext.tracestate && { tracestate: traceContext.tracestate }),\n ...(traceContext.baggage && { baggage: traceContext.baggage }),\n };\n\n const extractedContext = propagation.extract(context.active(), carrier);\n const span = extractedContext.getValue(Symbol.for('OpenTelemetry Context Key SPAN'));\n\n // Handle both Span and SpanContext\n if (span && typeof span === 'object') {\n if ('spanContext' in span && typeof span.spanContext === 'function') {\n return span.spanContext() as SpanContext;\n }\n // Might already be a SpanContext\n if ('traceId' in span && 'spanId' in span) {\n return span as SpanContext;\n }\n }\n\n return undefined;\n}\n\n/**\n * Strip trace context fields from Step Functions input\n *\n * Returns the input without `_traceContext` field for cleaner processing.\n *\n * @param input - Step Functions input with optional trace context\n * @returns Input without trace context fields\n *\n * @example\n * ```typescript\n * const event = { orderId: '123', _traceContext: { ... } };\n * const cleanInput = stripTraceContext(event);\n * // { orderId: '123' }\n * ```\n */\nexport function stripTraceContext<T extends Record<string, unknown>>(\n input: T,\n): Omit<T, '_traceContext'> {\n const { _traceContext: _, ...rest } = input as T & TraceContextFields;\n return rest as Omit<T, '_traceContext'>;\n}\n\n// ============================================================================\n// Trace Helper (Original API)\n// ============================================================================\n\n/**\n * Trace Step Functions operations\n *\n * Creates a traced function that automatically sets Step Functions attributes.\n *\n * @param config - Step Functions operation configuration\n * @returns A higher-order function that wraps your Step Functions operation with tracing\n *\n * @remarks\n * Semantic attributes set automatically:\n * - `aws.stepfunctions.state_machine_arn` - State machine ARN\n *\n * Additional attributes you should set in your handler:\n * - `aws.stepfunctions.execution_arn` - Execution ARN\n * - `aws.stepfunctions.execution_name` - Execution name\n *\n * @example\n * ```typescript\n * export const startWorkflow = traceStepFunction({\n * stateMachineArn: 'arn:aws:states:us-east-1:123456789:stateMachine:OrderProcessor',\n * operation: 'StartExecution'\n * })(ctx => async (input: object, executionName?: string) => {\n * const result = await sfn.send(new StartExecutionCommand({\n * stateMachineArn: 'arn:aws:states:...',\n * input: JSON.stringify(injectTraceContext(input)),\n * name: executionName\n * }));\n *\n * ctx.setAttribute('aws.stepfunctions.execution_arn', result.executionArn ?? '');\n * return result;\n * });\n * ```\n */\nexport function traceStepFunction(config: TraceStepFunctionConfig) {\n const operation = config.operation ?? 'execute';\n\n return function wrapper<TArgs extends unknown[], TReturn>(\n fn: (ctx: TraceContext) => (...args: TArgs) => Promise<TReturn>,\n ): (...args: TArgs) => Promise<TReturn> {\n // Use autotel's trace() which properly handles the factory pattern\n return trace(\n `stepfunctions.${operation}`,\n (ctx: TraceContext) =>\n async (...args: TArgs): Promise<TReturn> => {\n // Set Step Functions attributes\n ctx.setAttributes(\n buildStepFunctionsAttributes({\n stateMachineArn: config.stateMachineArn,\n }),\n );\n\n // Get the user's handler and execute with forwarded arguments\n const handler = fn(ctx);\n return handler(...args);\n },\n );\n };\n}\n\n// ============================================================================\n// StepFunctionsExecutor Class\n// ============================================================================\n\n/**\n * Step Functions Executor with automatic trace context injection\n *\n * Wraps an SFN client to automatically:\n * - Create spans for all operations\n * - Inject W3C Trace Context into execution input\n * - Set proper semantic attributes\n *\n * @example Basic usage\n * ```typescript\n * import { StepFunctionsExecutor } from 'autotel-aws/step-functions';\n * import { SFNClient } from '@aws-sdk/client-sfn';\n *\n * const sfn = new SFNClient({ region: 'us-east-1' });\n * const executor = new StepFunctionsExecutor(sfn, {\n * stateMachineArn: 'arn:aws:states:us-east-1:123456789:stateMachine:OrderProcessor'\n * });\n *\n * // Start execution with automatic trace context\n * const result = await executor.startExecution({\n * input: { orderId: '123', items: ['item1', 'item2'] },\n * name: 'order-123-execution'\n * });\n *\n * console.log('Execution ARN:', result.executionArn);\n * ```\n *\n * @example Express workflow (sync execution)\n * ```typescript\n * // Express workflows return synchronously\n * const result = await executor.startSyncExecution({\n * input: { orderId: '123' }\n * });\n *\n * if (result.status === 'SUCCEEDED') {\n * const output = JSON.parse(result.output || '{}');\n * console.log('Workflow output:', output);\n * }\n * ```\n */\nexport class StepFunctionsExecutor<\n \n TClient extends { send: (command: any) => Promise<any> } = any,\n> {\n private client: TClient;\n private config: Required<Pick<StepFunctionsExecutorConfig, 'stateMachineArn'>> &\n StepFunctionsExecutorConfig;\n private stateMachineName: string;\n\n constructor(client: TClient, config: StepFunctionsExecutorConfig) {\n this.client = wrapSDKClient(client as any, config.service) as TClient;\n this.config = {\n injectTraceContext: true,\n ...config,\n };\n // Extract state machine name from ARN (last segment)\n this.stateMachineName = config.stateMachineArn.split(':').pop() || 'unknown';\n }\n\n /**\n * Start a new execution of the state machine\n *\n * @param execution - Execution input and optional name\n * @returns Promise with execution ARN and start date\n */\n async startExecution<T extends Record<string, unknown>>(\n execution: ExecutionInput<T>,\n ): Promise<{\n executionArn?: string;\n startDate?: Date;\n }> {\n return trace(`stepfunctions.StartExecution`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildStepFunctionsAttributes({\n stateMachineArn: this.config.stateMachineArn,\n }),\n );\n ctx.setAttribute('aws.stepfunctions.state_machine_name', this.stateMachineName);\n\n if (execution.name) {\n ctx.setAttribute('aws.stepfunctions.execution_name', execution.name);\n }\n\n // Optionally inject trace context\n const inputData = this.config.injectTraceContext\n ? injectTraceContext(execution.input)\n : execution.input;\n\n const input = {\n stateMachineArn: this.config.stateMachineArn,\n input: JSON.stringify(inputData),\n name: execution.name,\n traceHeader: execution.traceHeader,\n };\n\n try {\n const { StartExecutionCommand } = await import('@aws-sdk/client-sfn');\n const result = await this.client.send(new StartExecutionCommand(input));\n\n if (result.executionArn) {\n ctx.setAttribute('aws.stepfunctions.execution_arn', result.executionArn);\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n\n return {\n executionArn: result.executionArn,\n startDate: result.startDate,\n };\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'StartExecution failed',\n });\n throw error;\n }\n });\n }\n\n /**\n * Start a synchronous execution (Express workflows only)\n *\n * @param execution - Execution input and optional name\n * @returns Promise with execution result including output\n */\n async startSyncExecution<T extends Record<string, unknown>>(\n execution: ExecutionInput<T>,\n ): Promise<{\n executionArn?: string;\n status?: 'SUCCEEDED' | 'FAILED' | 'TIMED_OUT';\n output?: string;\n error?: string;\n cause?: string;\n billingDetails?: {\n billedMemoryUsedInMB?: number;\n billedDurationInMilliseconds?: number;\n };\n }> {\n return trace(`stepfunctions.StartSyncExecution`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildStepFunctionsAttributes({\n stateMachineArn: this.config.stateMachineArn,\n }),\n );\n ctx.setAttribute('aws.stepfunctions.state_machine_name', this.stateMachineName);\n ctx.setAttribute('aws.stepfunctions.execution_type', 'express');\n\n if (execution.name) {\n ctx.setAttribute('aws.stepfunctions.execution_name', execution.name);\n }\n\n // Optionally inject trace context\n const inputData = this.config.injectTraceContext\n ? injectTraceContext(execution.input)\n : execution.input;\n\n const input = {\n stateMachineArn: this.config.stateMachineArn,\n input: JSON.stringify(inputData),\n name: execution.name,\n traceHeader: execution.traceHeader,\n };\n\n try {\n const { StartSyncExecutionCommand } = await import('@aws-sdk/client-sfn');\n const result = await this.client.send(new StartSyncExecutionCommand(input));\n\n if (result.executionArn) {\n ctx.setAttribute('aws.stepfunctions.execution_arn', result.executionArn);\n }\n if (result.status) {\n ctx.setAttribute('aws.stepfunctions.execution_status', result.status);\n }\n\n if (result.status === 'FAILED' || result.status === 'TIMED_OUT') {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: result.error || result.status,\n });\n } else {\n ctx.setStatus({ code: SpanStatusCode.OK });\n }\n\n return {\n executionArn: result.executionArn,\n status: result.status as 'SUCCEEDED' | 'FAILED' | 'TIMED_OUT' | undefined,\n output: result.output,\n error: result.error,\n cause: result.cause,\n billingDetails: result.billingDetails\n ? {\n billedMemoryUsedInMB: result.billingDetails.billedMemoryUsedInMB,\n billedDurationInMilliseconds:\n result.billingDetails.billedDurationInMilliseconds,\n }\n : undefined,\n };\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'StartSyncExecution failed',\n });\n throw error;\n }\n });\n }\n\n /**\n * Describe an execution\n *\n * @param executionArn - ARN of the execution to describe\n * @returns Promise with execution details\n */\n async describeExecution(executionArn: string): Promise<{\n executionArn?: string;\n stateMachineArn?: string;\n name?: string;\n status?: string;\n startDate?: Date;\n stopDate?: Date;\n input?: string;\n output?: string;\n error?: string;\n cause?: string;\n }> {\n return trace(`stepfunctions.DescribeExecution`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildStepFunctionsAttributes({\n stateMachineArn: this.config.stateMachineArn,\n }),\n );\n ctx.setAttribute('aws.stepfunctions.execution_arn', executionArn);\n\n try {\n const { DescribeExecutionCommand } = await import('@aws-sdk/client-sfn');\n const result = await this.client.send(\n new DescribeExecutionCommand({ executionArn }),\n );\n\n if (result.status) {\n ctx.setAttribute('aws.stepfunctions.execution_status', result.status);\n }\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n\n return {\n executionArn: result.executionArn,\n stateMachineArn: result.stateMachineArn,\n name: result.name,\n status: result.status,\n startDate: result.startDate,\n stopDate: result.stopDate,\n input: result.input,\n output: result.output,\n error: result.error,\n cause: result.cause,\n };\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'DescribeExecution failed',\n });\n throw error;\n }\n });\n }\n\n /**\n * Stop an execution\n *\n * @param executionArn - ARN of the execution to stop\n * @param options - Optional error and cause for the stop\n * @returns Promise with stop date\n */\n async stopExecution(\n executionArn: string,\n options?: { error?: string; cause?: string },\n ): Promise<{ stopDate?: Date }> {\n return trace(`stepfunctions.StopExecution`, async (ctx: TraceContext) => {\n ctx.setAttributes(\n buildStepFunctionsAttributes({\n stateMachineArn: this.config.stateMachineArn,\n }),\n );\n ctx.setAttribute('aws.stepfunctions.execution_arn', executionArn);\n\n try {\n const { StopExecutionCommand } = await import('@aws-sdk/client-sfn');\n const result = await this.client.send(\n new StopExecutionCommand({\n executionArn,\n error: options?.error,\n cause: options?.cause,\n }),\n );\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n\n return { stopDate: result.stopDate };\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'StopExecution failed',\n });\n throw error;\n }\n });\n }\n}\n\n// ============================================================================\n// StepFunctionsActivityWorker Class\n// ============================================================================\n\n/**\n * Step Functions Activity Worker with trace context extraction\n *\n * Polls for activity tasks and processes them with automatic tracing.\n * Extracts trace context from task input for distributed tracing.\n *\n * @example Basic activity worker\n * ```typescript\n * import { StepFunctionsActivityWorker } from 'autotel-aws/step-functions';\n * import { SFNClient } from '@aws-sdk/client-sfn';\n *\n * const sfn = new SFNClient({ region: 'us-east-1' });\n * const worker = new StepFunctionsActivityWorker(sfn, {\n * activityArn: 'arn:aws:states:us-east-1:123456789:activity:ProcessPayment',\n * workerName: 'payment-worker-1'\n * });\n *\n * // Process tasks with automatic tracing\n * await worker.poll(async (input, taskToken, ctx) => {\n * ctx.setAttribute('payment.amount', input.amount);\n * ctx.setAttribute('payment.currency', input.currency);\n *\n * const result = await processPayment(input);\n *\n * ctx.setAttribute('payment.status', result.status);\n * return result;\n * });\n * ```\n *\n * @example Continuous polling with error handling\n * ```typescript\n * async function runWorker() {\n * while (true) {\n * try {\n * await worker.poll(async (input, taskToken, ctx) => {\n * return await processTask(input);\n * });\n * } catch (error) {\n * console.error('Worker error:', error);\n * // Brief pause before retrying\n * await new Promise(resolve => setTimeout(resolve, 1000));\n * }\n * }\n * }\n * ```\n */\nexport class StepFunctionsActivityWorker<\n \n TClient extends { send: (command: any) => Promise<any> } = any,\n> {\n private client: TClient;\n private config: Required<Pick<StepFunctionsActivityWorkerConfig, 'activityArn'>> &\n StepFunctionsActivityWorkerConfig;\n private activityName: string;\n\n constructor(client: TClient, config: StepFunctionsActivityWorkerConfig) {\n this.client = wrapSDKClient(client as any, config.service) as TClient;\n this.config = {\n extractTraceContext: true,\n ...config,\n };\n // Extract activity name from ARN\n this.activityName = config.activityArn.split(':').pop() || 'unknown';\n }\n\n /**\n * Poll for an activity task and process it\n *\n * @param processor - Function to process the task input\n * @returns Promise that resolves when the task is processed\n */\n async poll<TInput extends Record<string, unknown>, TOutput>(\n processor: (\n input: TInput,\n taskToken: string,\n ctx: TraceContext,\n ) => Promise<TOutput>,\n ): Promise<void> {\n return trace(`stepfunctions.activity.poll`, async (ctx: TraceContext) => {\n ctx.setAttribute('aws.stepfunctions.activity_arn', this.config.activityArn);\n ctx.setAttribute('aws.stepfunctions.activity_name', this.activityName);\n\n if (this.config.workerName) {\n ctx.setAttribute('aws.stepfunctions.worker_name', this.config.workerName);\n }\n\n try {\n // Poll for task\n const { GetActivityTaskCommand } = await import('@aws-sdk/client-sfn');\n const task = await this.client.send(\n new GetActivityTaskCommand({\n activityArn: this.config.activityArn,\n workerName: this.config.workerName,\n }),\n );\n\n if (!task.taskToken || !task.input) {\n // No task available (timeout)\n ctx.setAttribute('aws.stepfunctions.activity_task_received', false);\n ctx.setStatus({ code: SpanStatusCode.OK });\n return;\n }\n\n ctx.setAttribute('aws.stepfunctions.activity_task_received', true);\n\n // Parse input\n const rawInput = JSON.parse(task.input) as TInput & TraceContextFields;\n\n // Extract trace context if enabled\n if (this.config.extractTraceContext) {\n const parentContext = extractStepFunctionsContext(rawInput);\n if (parentContext) {\n ctx.setAttribute('aws.stepfunctions.trace_context_extracted', true);\n }\n }\n\n // Strip trace context from input\n const cleanInput = stripTraceContext(rawInput) as TInput;\n\n // Process the task\n const output = await processor(cleanInput, task.taskToken, ctx);\n\n // Send success\n const { SendTaskSuccessCommand } = await import('@aws-sdk/client-sfn');\n await this.client.send(\n new SendTaskSuccessCommand({\n taskToken: task.taskToken,\n output: JSON.stringify(output),\n }),\n );\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Activity processing failed',\n });\n\n // If we have a task token, send failure\n // Note: In a real implementation, you'd want to track the token\n // This is simplified for the example\n\n throw error;\n }\n });\n }\n\n /**\n * Send a task heartbeat\n *\n * For long-running activities, send heartbeats to prevent timeout.\n *\n * @param taskToken - The task token from GetActivityTask\n */\n async sendHeartbeat(taskToken: string): Promise<void> {\n return trace(`stepfunctions.SendTaskHeartbeat`, async (ctx: TraceContext) => {\n ctx.setAttribute('aws.stepfunctions.activity_arn', this.config.activityArn);\n\n try {\n const { SendTaskHeartbeatCommand } = await import('@aws-sdk/client-sfn');\n await this.client.send(new SendTaskHeartbeatCommand({ taskToken }));\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n } catch (error) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'SendTaskHeartbeat failed',\n });\n throw error;\n }\n });\n }\n\n /**\n * Send task failure\n *\n * @param taskToken - The task token from GetActivityTask\n * @param error - Error code\n * @param cause - Error cause description\n */\n async sendFailure(\n taskToken: string,\n error: string,\n cause?: string,\n ): Promise<void> {\n return trace(`stepfunctions.SendTaskFailure`, async (ctx: TraceContext) => {\n ctx.setAttribute('aws.stepfunctions.activity_arn', this.config.activityArn);\n ctx.setAttribute('aws.stepfunctions.task_error', error);\n\n try {\n const { SendTaskFailureCommand } = await import('@aws-sdk/client-sfn');\n await this.client.send(\n new SendTaskFailureCommand({\n taskToken,\n error,\n cause,\n }),\n );\n\n ctx.setStatus({ code: SpanStatusCode.OK });\n } catch (error_) {\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: error_ instanceof Error ? error_.message : 'SendTaskFailure failed',\n });\n throw error_;\n }\n });\n }\n}\n"]}
@@ -221,8 +221,8 @@ function traceLambda(factory, config) {
221
221
  return executeWithTracing();
222
222
  };
223
223
  }
224
- var SPAN_SYMBOL = Symbol.for("autotel-aws.span");
225
- var CONTEXT_SYMBOL = Symbol.for("autotel-aws.context");
224
+ var SPAN_SYMBOL = /* @__PURE__ */ Symbol.for("autotel-aws.span");
225
+ var CONTEXT_SYMBOL = /* @__PURE__ */ Symbol.for("autotel-aws.context");
226
226
  var coldStartMap2 = /* @__PURE__ */ new Map();
227
227
  var MAX_ERROR_MESSAGE_LENGTH2 = 500;
228
228
  function createContextWithParent2(parentSpanContext) {
@@ -337,5 +337,5 @@ function getContextFromRequest(request) {
337
337
  }
338
338
 
339
339
  export { LambdaMiddleware, detectTriggerType, extractTraceContext, getContextFromRequest, getSpanFromRequest, traceLambda, tracingMiddleware, wrapHandler };
340
- //# sourceMappingURL=chunk-V4IQWFYN.js.map
341
- //# sourceMappingURL=chunk-V4IQWFYN.js.map
340
+ //# sourceMappingURL=chunk-O2HC5VUM.js.map
341
+ //# sourceMappingURL=chunk-O2HC5VUM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lambda/context-extractor.ts","../src/lambda/handler.ts","../src/lambda/middleware.ts"],"names":["carrier","otelTrace","context","autotelTrace","coldStartMap","MAX_ERROR_MESSAGE_LENGTH","createContextWithParent","truncateErrorMessage","extractAccountIdFromArn","SpanStatusCode"],"mappings":"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","file":"chunk-O2HC5VUM.js","sourcesContent":["/**\n * Extract trace context from Lambda events\n */\n\nimport { context, propagation, trace } from '@opentelemetry/api';\nimport type { SpanContext } from '@opentelemetry/api';\nimport type { LambdaEvent } from '../types';\nimport { AWSXRayPropagator } from '@opentelemetry/propagator-aws-xray';\n\n/**\n * Extract trace context from Lambda event\n *\n * Supports:\n * - API Gateway (W3C Trace Context headers)\n * - SQS (message attributes)\n * - SNS (message attributes)\n * - X-Ray header (Lambda integration)\n * - Step Functions (payload context)\n */\nexport function extractTraceContext(event: LambdaEvent): SpanContext | undefined {\n // API Gateway - W3C Trace Context\n if (event.headers?.traceparent) {\n const carrier: Record<string, string> = {};\n if (event.headers.traceparent) carrier.traceparent = event.headers.traceparent;\n if (event.headers.tracestate) carrier.tracestate = event.headers.tracestate;\n if (event.headers.baggage) carrier.baggage = event.headers.baggage;\n\n const extractedContext = propagation.extract(context.active(), carrier);\n const spanContext = trace.getSpanContext(extractedContext);\n return spanContext;\n }\n\n // SQS - message attributes\n if (event.Records?.[0]?.messageAttributes?.traceparent) {\n const record = event.Records[0];\n if (!record.messageAttributes) return undefined;\n \n const carrier: Record<string, string> = {};\n if (record.messageAttributes.traceparent?.StringValue) {\n carrier.traceparent = record.messageAttributes.traceparent.StringValue;\n }\n if (record.messageAttributes.tracestate?.StringValue) {\n carrier.tracestate = record.messageAttributes.tracestate.StringValue;\n }\n if (record.messageAttributes.baggage?.StringValue) {\n carrier.baggage = record.messageAttributes.baggage.StringValue;\n }\n\n const extractedContext = propagation.extract(context.active(), carrier);\n const spanContext = trace.getSpanContext(extractedContext);\n return spanContext;\n }\n\n // SNS - message attributes\n if (event.Records?.[0]?.Sns?.MessageAttributes?.traceparent) {\n const sns = event.Records[0].Sns;\n if (!sns.MessageAttributes) return undefined;\n \n const carrier: Record<string, string> = {};\n if (sns.MessageAttributes.traceparent?.Value) {\n carrier.traceparent = sns.MessageAttributes.traceparent.Value;\n }\n if (sns.MessageAttributes.tracestate?.Value) {\n carrier.tracestate = sns.MessageAttributes.tracestate.Value;\n }\n if (sns.MessageAttributes.baggage?.Value) {\n carrier.baggage = sns.MessageAttributes.baggage.Value;\n }\n\n const extractedContext = propagation.extract(context.active(), carrier);\n const spanContext = trace.getSpanContext(extractedContext);\n return spanContext;\n }\n\n // X-Ray header (Lambda integration)\n if (event.headers?.['x-amzn-trace-id']) {\n const xrayPropagator = new AWSXRayPropagator();\n const carrier: Record<string, string> = {\n 'x-amzn-trace-id': event.headers['x-amzn-trace-id'],\n };\n\n // AWSXRayPropagator.extract() requires a getter function\n // Use a simple getter for Record<string, string>\n const getter = {\n get(carrier: Record<string, string>, key: string): string | string[] | undefined {\n return carrier[key];\n },\n keys(carrier: Record<string, string>): string[] {\n return Object.keys(carrier);\n },\n };\n\n const extractedContext = xrayPropagator.extract(context.active(), carrier, getter);\n const spanContext = trace.getSpanContext(extractedContext);\n return spanContext;\n }\n\n // Step Functions - payload context\n if (event._autotel_trace_context) {\n return event._autotel_trace_context as SpanContext;\n }\n\n return undefined;\n}\n\n/**\n * Detect Lambda trigger type from event\n */\nexport function detectTriggerType(event: LambdaEvent): 'http' | 'pubsub' | 'datasource' | 'timer' | 'other' {\n // API Gateway / ALB\n if (event.headers || event.requestContext || event.httpMethod) {\n return 'http';\n }\n\n // SQS\n if (event.Records?.some((r) => r.messageAttributes || 'messageId' in r)) {\n return 'pubsub';\n }\n\n // SNS\n if (event.Records?.some((r) => r.Sns)) {\n return 'pubsub';\n }\n\n // Kinesis\n if (event.Records?.some((r) => r.kinesis)) {\n return 'datasource';\n }\n\n // EventBridge / Scheduled\n if (event.source === 'aws.events' || event['detail-type']) {\n return 'timer';\n }\n\n return 'other';\n}\n","/**\n * Lambda handler wrappers\n *\n * Provides instrumentation wrappers for AWS Lambda handlers with automatic\n * trace context extraction from various event sources (API Gateway, SQS, SNS, etc.).\n *\n * @example Simple wrapper\n * ```typescript\n * import { wrapHandler } from 'autotel-aws/lambda';\n *\n * export const handler = wrapHandler(async (event, context) => {\n * return { statusCode: 200 };\n * });\n * ```\n *\n * @example With context access\n * ```typescript\n * import { traceLambda } from 'autotel-aws/lambda';\n *\n * export const handler = traceLambda(ctx => async (event, context) => {\n * ctx.setAttribute('user.id', event.userId);\n * return { statusCode: 200 };\n * });\n * ```\n */\n\nimport { context, trace as otelTrace, SpanStatusCode } from '@opentelemetry/api';\nimport type { SpanContext, Context } from '@opentelemetry/api';\nimport { trace as autotelTrace, type TraceContext } from 'autotel';\nimport type { LambdaHandler } from './types';\nimport type { LambdaEvent, LambdaContext } from '../types';\nimport { extractTraceContext, detectTriggerType } from './context-extractor';\nimport { buildLambdaAttributes } from '../attributes';\nimport type { LambdaInstrumentationConfig } from '../config';\n\n// Track cold starts per function instance\n// Using WeakMap-like pattern to avoid memory leaks in long-running containers\nconst coldStartMap = new Map<string, boolean>();\n\n/**\n * Maximum error message length to prevent span attribute bloat\n */\nconst MAX_ERROR_MESSAGE_LENGTH = 500;\n\n/**\n * Create an OpenTelemetry context with the given span context as parent\n *\n * This properly sets up the parent-child relationship for distributed tracing\n * by creating a context that contains the extracted span context.\n */\nfunction createContextWithParent(parentSpanContext: SpanContext): Context {\n // Create a non-recording span that carries the parent context\n // This is the standard OTel pattern for context propagation\n const parentSpan = otelTrace.wrapSpanContext(parentSpanContext);\n return otelTrace.setSpan(context.active(), parentSpan);\n}\n\n/**\n * Truncate error message to prevent span bloat\n */\nfunction truncateErrorMessage(message: string): string {\n if (message.length <= MAX_ERROR_MESSAGE_LENGTH) {\n return message;\n }\n return `${message.slice(0, MAX_ERROR_MESSAGE_LENGTH)}... (truncated)`;\n}\n\n/**\n * Extract AWS account ID from Lambda ARN\n */\nfunction extractAccountIdFromArn(arn: string): string | undefined {\n // ARN format: arn:aws:lambda:region:account-id:function:name\n const arnParts = arn.split(':');\n if (arnParts.length >= 5) {\n return arnParts[4];\n }\n return undefined;\n}\n\n/**\n * Wrap Lambda handler with OpenTelemetry instrumentation\n *\n * Automatically extracts trace context from incoming events and creates\n * a root span for the Lambda invocation with proper semantic attributes.\n *\n * @param handler - The Lambda handler function to wrap\n * @param config - Optional instrumentation configuration\n * @returns Wrapped handler with automatic tracing\n *\n * @example Basic usage\n * ```typescript\n * export const handler = wrapHandler(async (event, context) => {\n * // Your handler code - automatically traced\n * return { statusCode: 200 };\n * });\n * ```\n *\n * @example With configuration\n * ```typescript\n * export const handler = wrapHandler(\n * async (event, context) => {\n * return { statusCode: 200, body: JSON.stringify({ result: 'ok' }) };\n * },\n * { captureResponse: true, extractTraceContext: true }\n * );\n * ```\n *\n * @remarks\n * Semantic attributes set automatically:\n * - `faas.name` - Function name\n * - `faas.version` - Function version\n * - `faas.invocation_id` - AWS request ID\n * - `faas.coldstart` - Whether this is a cold start\n * - `faas.trigger` - Trigger type (http, pubsub, datasource, timer, other)\n * - `cloud.provider` - 'aws'\n * - `cloud.region` - AWS region\n * - `cloud.account.id` - AWS account ID (extracted from ARN)\n */\nexport function wrapHandler<TEvent = LambdaEvent, TResult = unknown>(\n handler: LambdaHandler<TEvent, TResult>,\n config?: LambdaInstrumentationConfig,\n): LambdaHandler<TEvent, TResult> {\n // Return the wrapped handler\n return async (event: TEvent, lambdaContext: LambdaContext): Promise<TResult> => {\n const functionName = lambdaContext.functionName;\n\n // Detect cold start (first invocation for this function instance)\n const isColdStart = !coldStartMap.has(functionName);\n if (isColdStart) {\n coldStartMap.set(functionName, true);\n }\n\n // Extract parent trace context from event (if enabled, default: true)\n const shouldExtractContext = config?.extractTraceContext !== false;\n const parentSpanContext = shouldExtractContext\n ? extractTraceContext(event as LambdaEvent)\n : undefined;\n\n // Detect trigger type for semantic attributes\n const trigger = detectTriggerType(event as LambdaEvent);\n\n // Core tracing logic\n const executeWithTracing = async (): Promise<TResult> => {\n return autotelTrace(\n `lambda.${functionName}`,\n async (ctx: TraceContext): Promise<TResult> => {\n // Set Lambda semantic attributes\n ctx.setAttributes(\n buildLambdaAttributes({\n awsRequestId: lambdaContext.awsRequestId,\n functionName,\n functionVersion: lambdaContext.functionVersion,\n coldStart: isColdStart,\n trigger,\n }),\n );\n\n // Extract and set account ID from ARN\n const accountId = extractAccountIdFromArn(lambdaContext.invokedFunctionArn);\n if (accountId) {\n ctx.setAttribute('cloud.account.id', accountId);\n }\n\n // Set region from environment\n const region = process.env.AWS_REGION;\n if (region) {\n ctx.setAttribute('cloud.region', region);\n }\n\n try {\n const result = await handler(event, lambdaContext);\n\n // Capture response if configured (be careful with large payloads)\n if (config?.captureResponse && result != null) {\n try {\n const responseJson = JSON.stringify(result);\n // Only capture if not too large\n if (responseJson.length <= 4096) {\n ctx.setAttribute('lambda.response', responseJson);\n } else {\n ctx.setAttribute('lambda.response.truncated', true);\n ctx.setAttribute('lambda.response.size', responseJson.length);\n }\n } catch {\n // Ignore serialization errors (circular references, etc.)\n ctx.setAttribute('lambda.response.serialization_failed', true);\n }\n }\n\n return result;\n } catch (error) {\n // Record error details\n const errorMessage = error instanceof Error ? error.message : String(error);\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: truncateErrorMessage(errorMessage),\n });\n\n // Add exception attributes\n ctx.setAttribute('exception.type', error instanceof Error ? error.constructor.name : 'Error');\n ctx.setAttribute('exception.message', truncateErrorMessage(errorMessage));\n\n if (error instanceof Error && error.stack) {\n ctx.setAttribute('exception.stacktrace', error.stack.slice(0, MAX_ERROR_MESSAGE_LENGTH));\n }\n\n throw error;\n }\n },\n );\n };\n\n // Execute with proper parent context if available\n if (parentSpanContext) {\n const parentContext = createContextWithParent(parentSpanContext);\n return context.with(parentContext, executeWithTracing);\n }\n\n return executeWithTracing();\n };\n}\n\n/**\n * Functional API for Lambda with trace context access\n *\n * Similar to `wrapHandler`, but provides access to the trace context\n * for setting custom attributes during handler execution.\n *\n * @param factory - Factory function that receives trace context and returns a handler\n * @param config - Optional instrumentation configuration\n * @returns Wrapped handler with automatic tracing\n *\n * @example\n * ```typescript\n * export const handler = traceLambda(ctx => async (event, context) => {\n * // Access trace context for custom attributes\n * ctx.setAttribute('user.id', event.userId);\n * ctx.setAttribute('order.id', event.orderId);\n *\n * // Use X-Ray annotations for indexed attributes\n * setXRayAnnotation('user.tier', event.userTier);\n *\n * const result = await processOrder(event);\n * ctx.setAttribute('order.status', result.status);\n *\n * return { statusCode: 200, body: JSON.stringify(result) };\n * });\n * ```\n *\n * @remarks\n * The trace context (`ctx`) provides:\n * - `setAttribute(key, value)` - Set a single attribute\n * - `setAttributes(attrs)` - Set multiple attributes\n * - `setStatus(status)` - Set span status\n * - `recordException(error)` - Record an exception\n * - `traceId`, `spanId` - Trace identifiers\n */\nexport function traceLambda<TEvent = LambdaEvent, TResult = unknown>(\n factory: (ctx: TraceContext) => LambdaHandler<TEvent, TResult>,\n config?: LambdaInstrumentationConfig,\n): LambdaHandler<TEvent, TResult> {\n return async (event: TEvent, lambdaContext: LambdaContext): Promise<TResult> => {\n const functionName = lambdaContext.functionName;\n\n // Detect cold start\n const isColdStart = !coldStartMap.has(functionName);\n if (isColdStart) {\n coldStartMap.set(functionName, true);\n }\n\n // Extract parent trace context\n const shouldExtractContext = config?.extractTraceContext !== false;\n const parentSpanContext = shouldExtractContext\n ? extractTraceContext(event as LambdaEvent)\n : undefined;\n\n // Detect trigger type\n const trigger = detectTriggerType(event as LambdaEvent);\n\n // Core tracing logic\n const executeWithTracing = async (): Promise<TResult> => {\n return autotelTrace(\n `lambda.${functionName}`,\n async (ctx: TraceContext): Promise<TResult> => {\n // Set Lambda semantic attributes\n ctx.setAttributes(\n buildLambdaAttributes({\n awsRequestId: lambdaContext.awsRequestId,\n functionName,\n functionVersion: lambdaContext.functionVersion,\n coldStart: isColdStart,\n trigger,\n }),\n );\n\n // Extract and set account ID from ARN\n const accountId = extractAccountIdFromArn(lambdaContext.invokedFunctionArn);\n if (accountId) {\n ctx.setAttribute('cloud.account.id', accountId);\n }\n\n // Set region from environment\n const region = process.env.AWS_REGION;\n if (region) {\n ctx.setAttribute('cloud.region', region);\n }\n\n // Create handler with context access and execute\n const handler = factory(ctx);\n return handler(event, lambdaContext);\n },\n );\n };\n\n // Execute with proper parent context if available\n if (parentSpanContext) {\n const parentContext = createContextWithParent(parentSpanContext);\n return context.with(parentContext, executeWithTracing);\n }\n\n return executeWithTracing();\n };\n}\n","/**\n * Middy-compatible Lambda middleware for OpenTelemetry instrumentation\n *\n * Provides full span lifecycle management for Lambda handlers using Middy.\n *\n * @example Basic usage\n * ```typescript\n * import middy from '@middy/core';\n * import { tracingMiddleware } from 'autotel-aws/lambda';\n *\n * const baseHandler = async (event, context) => {\n * return { statusCode: 200 };\n * };\n *\n * export const handler = middy(baseHandler)\n * .use(tracingMiddleware());\n * ```\n *\n * @example With configuration\n * ```typescript\n * export const handler = middy(baseHandler)\n * .use(tracingMiddleware({\n * captureResponse: true,\n * extractTraceContext: true\n * }));\n * ```\n *\n * @example Combined with other middleware\n * ```typescript\n * export const handler = middy(baseHandler)\n * .use(tracingMiddleware())\n * .use(jsonBodyParser())\n * .use(httpErrorHandler());\n * ```\n */\n\nimport type { MiddlewareObj, Request } from '@middy/core';\nimport type { Context as AWSLambdaContext } from 'aws-lambda';\nimport { context, trace as otelTrace, SpanStatusCode } from '@opentelemetry/api';\nimport type { Span, SpanContext, Context as OtelContext } from '@opentelemetry/api';\nimport type { LambdaEvent } from '../types';\nimport type { LambdaInstrumentationConfig } from '../config';\nimport { extractTraceContext, detectTriggerType } from './context-extractor';\nimport { buildLambdaAttributes } from '../attributes';\n\n// Symbol to store span on request object\nconst SPAN_SYMBOL = Symbol.for('autotel-aws.span');\nconst CONTEXT_SYMBOL = Symbol.for('autotel-aws.context');\n\n// Track cold starts per function instance\nconst coldStartMap = new Map<string, boolean>();\n\n/**\n * Maximum error message length to prevent span attribute bloat\n */\nconst MAX_ERROR_MESSAGE_LENGTH = 500;\n\n/**\n * Create an OpenTelemetry context with the given span context as parent\n */\nfunction createContextWithParent(parentSpanContext: SpanContext): OtelContext {\n const parentSpan = otelTrace.wrapSpanContext(parentSpanContext);\n return otelTrace.setSpan(context.active(), parentSpan);\n}\n\n/**\n * Truncate error message to prevent span bloat\n */\nfunction truncateErrorMessage(message: string): string {\n if (message.length <= MAX_ERROR_MESSAGE_LENGTH) {\n return message;\n }\n return `${message.slice(0, MAX_ERROR_MESSAGE_LENGTH)}... (truncated)`;\n}\n\n/**\n * Extract AWS account ID from Lambda ARN\n */\nfunction extractAccountIdFromArn(arn: string): string | undefined {\n const arnParts = arn.split(':');\n if (arnParts.length >= 5) {\n return arnParts[4];\n }\n return undefined;\n}\n\n// Extended request type with our symbols\ninterface TracingRequest<TEvent = LambdaEvent, TResult = unknown>\n extends Request<TEvent, TResult, Error, AWSLambdaContext> {\n [SPAN_SYMBOL]?: Span;\n [CONTEXT_SYMBOL]?: OtelContext;\n}\n\n/**\n * Middy middleware for Lambda instrumentation with full span lifecycle\n *\n * Creates a span that wraps the entire handler execution, including:\n * - Trace context extraction from incoming events\n * - Cold start detection\n * - Semantic attributes for Lambda (faas.*, cloud.*)\n * - Error recording and status\n * - Response capture (optional)\n *\n * @param config - Optional instrumentation configuration\n * @returns Middy middleware object\n *\n * @remarks\n * This middleware uses Middy's before/after/onError hooks to manage\n * the span lifecycle. The span is created in `before`, ended in `after`\n * or `onError`.\n *\n * Semantic attributes set automatically:\n * - `faas.name` - Function name\n * - `faas.version` - Function version\n * - `faas.invocation_id` - AWS request ID\n * - `faas.coldstart` - Whether this is a cold start\n * - `faas.trigger` - Trigger type (http, pubsub, datasource, timer, other)\n * - `cloud.provider` - 'aws'\n * - `cloud.region` - AWS region\n * - `cloud.account.id` - AWS account ID (extracted from ARN)\n */\nexport function tracingMiddleware(\n config?: LambdaInstrumentationConfig,\n): MiddlewareObj<LambdaEvent, unknown, Error, AWSLambdaContext> {\n const tracer = otelTrace.getTracer('autotel-aws');\n\n return {\n before: async (request: TracingRequest) => {\n const { event, context: lambdaContext } = request;\n const functionName = lambdaContext.functionName;\n\n // Detect cold start\n const isColdStart = !coldStartMap.has(functionName);\n if (isColdStart) {\n coldStartMap.set(functionName, true);\n }\n\n // Extract parent trace context from event\n const shouldExtractContext = config?.extractTraceContext !== false;\n const parentSpanContext = shouldExtractContext ? extractTraceContext(event) : undefined;\n\n // Detect trigger type\n const trigger = detectTriggerType(event);\n\n // Create parent context if available\n let parentContext = context.active();\n if (parentSpanContext) {\n parentContext = createContextWithParent(parentSpanContext);\n }\n\n // Start span with parent context\n const span = tracer.startSpan(\n `lambda.${functionName}`,\n {\n attributes: buildLambdaAttributes({\n awsRequestId: lambdaContext.awsRequestId,\n functionName,\n functionVersion: lambdaContext.functionVersion,\n coldStart: isColdStart,\n trigger,\n }),\n },\n parentContext,\n );\n\n // Extract and set account ID from ARN\n const accountId = extractAccountIdFromArn(lambdaContext.invokedFunctionArn);\n if (accountId) {\n span.setAttribute('cloud.account.id', accountId);\n }\n\n // Set region from environment\n const region = process.env.AWS_REGION;\n if (region) {\n span.setAttribute('cloud.region', region);\n }\n\n // Store span and context on request for later use\n request[SPAN_SYMBOL] = span;\n request[CONTEXT_SYMBOL] = otelTrace.setSpan(parentContext, span);\n\n // Set the context as active for the handler execution\n // This ensures child spans created during handler execution are linked\n return new Promise<void>((resolve) => {\n context.with(request[CONTEXT_SYMBOL]!, () => {\n resolve();\n });\n });\n },\n\n after: async (request: TracingRequest) => {\n const span = request[SPAN_SYMBOL];\n if (!span) return;\n\n // Capture response if configured\n if (config?.captureResponse && request.response != null) {\n try {\n const responseJson = JSON.stringify(request.response);\n if (responseJson.length <= 4096) {\n span.setAttribute('lambda.response', responseJson);\n } else {\n span.setAttribute('lambda.response.truncated', true);\n span.setAttribute('lambda.response.size', responseJson.length);\n }\n } catch {\n span.setAttribute('lambda.response.serialization_failed', true);\n }\n }\n\n // Set success status\n span.setStatus({ code: SpanStatusCode.OK });\n\n // End the span\n span.end();\n },\n\n onError: async (request: TracingRequest) => {\n const span = request[SPAN_SYMBOL];\n if (!span) return;\n\n const error = request.error;\n if (error) {\n // Record error details\n const errorMessage = error.message || String(error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: truncateErrorMessage(errorMessage),\n });\n\n // Add exception attributes\n span.setAttribute('exception.type', error.name || 'Error');\n span.setAttribute('exception.message', truncateErrorMessage(errorMessage));\n\n if (error.stack) {\n span.setAttribute('exception.stacktrace', error.stack.slice(0, MAX_ERROR_MESSAGE_LENGTH));\n }\n\n // Record exception event\n span.recordException(error);\n }\n\n // End the span\n span.end();\n },\n };\n}\n\n/**\n * @deprecated Use tracingMiddleware instead. LambdaMiddleware is an alias for backwards compatibility.\n */\nexport const LambdaMiddleware = tracingMiddleware;\n\n/**\n * Get the current span from a Middy request object\n *\n * Useful for setting custom attributes within your handler when using\n * the tracing middleware.\n *\n * @param request - Middy request object\n * @returns The active span, or undefined if not available\n *\n * @example\n * ```typescript\n * const baseHandler = async (event, context) => {\n * const span = getSpanFromRequest(request);\n * if (span) {\n * span.setAttribute('user.id', event.userId);\n * }\n * return { statusCode: 200 };\n * };\n * ```\n */\nexport function getSpanFromRequest(request: Request<any, any, any, any>): Span | undefined {\n return (request as TracingRequest)[SPAN_SYMBOL];\n}\n\n/**\n * Get the OpenTelemetry context from a Middy request object\n *\n * @param request - Middy request object\n * @returns The active context, or undefined if not available\n */\nexport function getContextFromRequest(request: Request<any, any, any, any>): OtelContext | undefined {\n return (request as TracingRequest)[CONTEXT_SYMBOL];\n}\n"]}
@@ -223,8 +223,8 @@ function traceLambda(factory, config) {
223
223
  return executeWithTracing();
224
224
  };
225
225
  }
226
- var SPAN_SYMBOL = Symbol.for("autotel-aws.span");
227
- var CONTEXT_SYMBOL = Symbol.for("autotel-aws.context");
226
+ var SPAN_SYMBOL = /* @__PURE__ */ Symbol.for("autotel-aws.span");
227
+ var CONTEXT_SYMBOL = /* @__PURE__ */ Symbol.for("autotel-aws.context");
228
228
  var coldStartMap2 = /* @__PURE__ */ new Map();
229
229
  var MAX_ERROR_MESSAGE_LENGTH2 = 500;
230
230
  function createContextWithParent2(parentSpanContext) {
@@ -346,5 +346,5 @@ exports.getSpanFromRequest = getSpanFromRequest;
346
346
  exports.traceLambda = traceLambda;
347
347
  exports.tracingMiddleware = tracingMiddleware;
348
348
  exports.wrapHandler = wrapHandler;
349
- //# sourceMappingURL=chunk-D5INYMRP.cjs.map
350
- //# sourceMappingURL=chunk-D5INYMRP.cjs.map
349
+ //# sourceMappingURL=chunk-Q65NDS7W.cjs.map
350
+ //# sourceMappingURL=chunk-Q65NDS7W.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lambda/context-extractor.ts","../src/lambda/handler.ts","../src/lambda/middleware.ts"],"names":["propagation","context","trace","AWSXRayPropagator","carrier","otelTrace","autotelTrace","buildLambdaAttributes","SpanStatusCode","coldStartMap","MAX_ERROR_MESSAGE_LENGTH","createContextWithParent","truncateErrorMessage","extractAccountIdFromArn"],"mappings":"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","file":"chunk-Q65NDS7W.cjs","sourcesContent":["/**\n * Extract trace context from Lambda events\n */\n\nimport { context, propagation, trace } from '@opentelemetry/api';\nimport type { SpanContext } from '@opentelemetry/api';\nimport type { LambdaEvent } from '../types';\nimport { AWSXRayPropagator } from '@opentelemetry/propagator-aws-xray';\n\n/**\n * Extract trace context from Lambda event\n *\n * Supports:\n * - API Gateway (W3C Trace Context headers)\n * - SQS (message attributes)\n * - SNS (message attributes)\n * - X-Ray header (Lambda integration)\n * - Step Functions (payload context)\n */\nexport function extractTraceContext(event: LambdaEvent): SpanContext | undefined {\n // API Gateway - W3C Trace Context\n if (event.headers?.traceparent) {\n const carrier: Record<string, string> = {};\n if (event.headers.traceparent) carrier.traceparent = event.headers.traceparent;\n if (event.headers.tracestate) carrier.tracestate = event.headers.tracestate;\n if (event.headers.baggage) carrier.baggage = event.headers.baggage;\n\n const extractedContext = propagation.extract(context.active(), carrier);\n const spanContext = trace.getSpanContext(extractedContext);\n return spanContext;\n }\n\n // SQS - message attributes\n if (event.Records?.[0]?.messageAttributes?.traceparent) {\n const record = event.Records[0];\n if (!record.messageAttributes) return undefined;\n \n const carrier: Record<string, string> = {};\n if (record.messageAttributes.traceparent?.StringValue) {\n carrier.traceparent = record.messageAttributes.traceparent.StringValue;\n }\n if (record.messageAttributes.tracestate?.StringValue) {\n carrier.tracestate = record.messageAttributes.tracestate.StringValue;\n }\n if (record.messageAttributes.baggage?.StringValue) {\n carrier.baggage = record.messageAttributes.baggage.StringValue;\n }\n\n const extractedContext = propagation.extract(context.active(), carrier);\n const spanContext = trace.getSpanContext(extractedContext);\n return spanContext;\n }\n\n // SNS - message attributes\n if (event.Records?.[0]?.Sns?.MessageAttributes?.traceparent) {\n const sns = event.Records[0].Sns;\n if (!sns.MessageAttributes) return undefined;\n \n const carrier: Record<string, string> = {};\n if (sns.MessageAttributes.traceparent?.Value) {\n carrier.traceparent = sns.MessageAttributes.traceparent.Value;\n }\n if (sns.MessageAttributes.tracestate?.Value) {\n carrier.tracestate = sns.MessageAttributes.tracestate.Value;\n }\n if (sns.MessageAttributes.baggage?.Value) {\n carrier.baggage = sns.MessageAttributes.baggage.Value;\n }\n\n const extractedContext = propagation.extract(context.active(), carrier);\n const spanContext = trace.getSpanContext(extractedContext);\n return spanContext;\n }\n\n // X-Ray header (Lambda integration)\n if (event.headers?.['x-amzn-trace-id']) {\n const xrayPropagator = new AWSXRayPropagator();\n const carrier: Record<string, string> = {\n 'x-amzn-trace-id': event.headers['x-amzn-trace-id'],\n };\n\n // AWSXRayPropagator.extract() requires a getter function\n // Use a simple getter for Record<string, string>\n const getter = {\n get(carrier: Record<string, string>, key: string): string | string[] | undefined {\n return carrier[key];\n },\n keys(carrier: Record<string, string>): string[] {\n return Object.keys(carrier);\n },\n };\n\n const extractedContext = xrayPropagator.extract(context.active(), carrier, getter);\n const spanContext = trace.getSpanContext(extractedContext);\n return spanContext;\n }\n\n // Step Functions - payload context\n if (event._autotel_trace_context) {\n return event._autotel_trace_context as SpanContext;\n }\n\n return undefined;\n}\n\n/**\n * Detect Lambda trigger type from event\n */\nexport function detectTriggerType(event: LambdaEvent): 'http' | 'pubsub' | 'datasource' | 'timer' | 'other' {\n // API Gateway / ALB\n if (event.headers || event.requestContext || event.httpMethod) {\n return 'http';\n }\n\n // SQS\n if (event.Records?.some((r) => r.messageAttributes || 'messageId' in r)) {\n return 'pubsub';\n }\n\n // SNS\n if (event.Records?.some((r) => r.Sns)) {\n return 'pubsub';\n }\n\n // Kinesis\n if (event.Records?.some((r) => r.kinesis)) {\n return 'datasource';\n }\n\n // EventBridge / Scheduled\n if (event.source === 'aws.events' || event['detail-type']) {\n return 'timer';\n }\n\n return 'other';\n}\n","/**\n * Lambda handler wrappers\n *\n * Provides instrumentation wrappers for AWS Lambda handlers with automatic\n * trace context extraction from various event sources (API Gateway, SQS, SNS, etc.).\n *\n * @example Simple wrapper\n * ```typescript\n * import { wrapHandler } from 'autotel-aws/lambda';\n *\n * export const handler = wrapHandler(async (event, context) => {\n * return { statusCode: 200 };\n * });\n * ```\n *\n * @example With context access\n * ```typescript\n * import { traceLambda } from 'autotel-aws/lambda';\n *\n * export const handler = traceLambda(ctx => async (event, context) => {\n * ctx.setAttribute('user.id', event.userId);\n * return { statusCode: 200 };\n * });\n * ```\n */\n\nimport { context, trace as otelTrace, SpanStatusCode } from '@opentelemetry/api';\nimport type { SpanContext, Context } from '@opentelemetry/api';\nimport { trace as autotelTrace, type TraceContext } from 'autotel';\nimport type { LambdaHandler } from './types';\nimport type { LambdaEvent, LambdaContext } from '../types';\nimport { extractTraceContext, detectTriggerType } from './context-extractor';\nimport { buildLambdaAttributes } from '../attributes';\nimport type { LambdaInstrumentationConfig } from '../config';\n\n// Track cold starts per function instance\n// Using WeakMap-like pattern to avoid memory leaks in long-running containers\nconst coldStartMap = new Map<string, boolean>();\n\n/**\n * Maximum error message length to prevent span attribute bloat\n */\nconst MAX_ERROR_MESSAGE_LENGTH = 500;\n\n/**\n * Create an OpenTelemetry context with the given span context as parent\n *\n * This properly sets up the parent-child relationship for distributed tracing\n * by creating a context that contains the extracted span context.\n */\nfunction createContextWithParent(parentSpanContext: SpanContext): Context {\n // Create a non-recording span that carries the parent context\n // This is the standard OTel pattern for context propagation\n const parentSpan = otelTrace.wrapSpanContext(parentSpanContext);\n return otelTrace.setSpan(context.active(), parentSpan);\n}\n\n/**\n * Truncate error message to prevent span bloat\n */\nfunction truncateErrorMessage(message: string): string {\n if (message.length <= MAX_ERROR_MESSAGE_LENGTH) {\n return message;\n }\n return `${message.slice(0, MAX_ERROR_MESSAGE_LENGTH)}... (truncated)`;\n}\n\n/**\n * Extract AWS account ID from Lambda ARN\n */\nfunction extractAccountIdFromArn(arn: string): string | undefined {\n // ARN format: arn:aws:lambda:region:account-id:function:name\n const arnParts = arn.split(':');\n if (arnParts.length >= 5) {\n return arnParts[4];\n }\n return undefined;\n}\n\n/**\n * Wrap Lambda handler with OpenTelemetry instrumentation\n *\n * Automatically extracts trace context from incoming events and creates\n * a root span for the Lambda invocation with proper semantic attributes.\n *\n * @param handler - The Lambda handler function to wrap\n * @param config - Optional instrumentation configuration\n * @returns Wrapped handler with automatic tracing\n *\n * @example Basic usage\n * ```typescript\n * export const handler = wrapHandler(async (event, context) => {\n * // Your handler code - automatically traced\n * return { statusCode: 200 };\n * });\n * ```\n *\n * @example With configuration\n * ```typescript\n * export const handler = wrapHandler(\n * async (event, context) => {\n * return { statusCode: 200, body: JSON.stringify({ result: 'ok' }) };\n * },\n * { captureResponse: true, extractTraceContext: true }\n * );\n * ```\n *\n * @remarks\n * Semantic attributes set automatically:\n * - `faas.name` - Function name\n * - `faas.version` - Function version\n * - `faas.invocation_id` - AWS request ID\n * - `faas.coldstart` - Whether this is a cold start\n * - `faas.trigger` - Trigger type (http, pubsub, datasource, timer, other)\n * - `cloud.provider` - 'aws'\n * - `cloud.region` - AWS region\n * - `cloud.account.id` - AWS account ID (extracted from ARN)\n */\nexport function wrapHandler<TEvent = LambdaEvent, TResult = unknown>(\n handler: LambdaHandler<TEvent, TResult>,\n config?: LambdaInstrumentationConfig,\n): LambdaHandler<TEvent, TResult> {\n // Return the wrapped handler\n return async (event: TEvent, lambdaContext: LambdaContext): Promise<TResult> => {\n const functionName = lambdaContext.functionName;\n\n // Detect cold start (first invocation for this function instance)\n const isColdStart = !coldStartMap.has(functionName);\n if (isColdStart) {\n coldStartMap.set(functionName, true);\n }\n\n // Extract parent trace context from event (if enabled, default: true)\n const shouldExtractContext = config?.extractTraceContext !== false;\n const parentSpanContext = shouldExtractContext\n ? extractTraceContext(event as LambdaEvent)\n : undefined;\n\n // Detect trigger type for semantic attributes\n const trigger = detectTriggerType(event as LambdaEvent);\n\n // Core tracing logic\n const executeWithTracing = async (): Promise<TResult> => {\n return autotelTrace(\n `lambda.${functionName}`,\n async (ctx: TraceContext): Promise<TResult> => {\n // Set Lambda semantic attributes\n ctx.setAttributes(\n buildLambdaAttributes({\n awsRequestId: lambdaContext.awsRequestId,\n functionName,\n functionVersion: lambdaContext.functionVersion,\n coldStart: isColdStart,\n trigger,\n }),\n );\n\n // Extract and set account ID from ARN\n const accountId = extractAccountIdFromArn(lambdaContext.invokedFunctionArn);\n if (accountId) {\n ctx.setAttribute('cloud.account.id', accountId);\n }\n\n // Set region from environment\n const region = process.env.AWS_REGION;\n if (region) {\n ctx.setAttribute('cloud.region', region);\n }\n\n try {\n const result = await handler(event, lambdaContext);\n\n // Capture response if configured (be careful with large payloads)\n if (config?.captureResponse && result != null) {\n try {\n const responseJson = JSON.stringify(result);\n // Only capture if not too large\n if (responseJson.length <= 4096) {\n ctx.setAttribute('lambda.response', responseJson);\n } else {\n ctx.setAttribute('lambda.response.truncated', true);\n ctx.setAttribute('lambda.response.size', responseJson.length);\n }\n } catch {\n // Ignore serialization errors (circular references, etc.)\n ctx.setAttribute('lambda.response.serialization_failed', true);\n }\n }\n\n return result;\n } catch (error) {\n // Record error details\n const errorMessage = error instanceof Error ? error.message : String(error);\n ctx.setStatus({\n code: SpanStatusCode.ERROR,\n message: truncateErrorMessage(errorMessage),\n });\n\n // Add exception attributes\n ctx.setAttribute('exception.type', error instanceof Error ? error.constructor.name : 'Error');\n ctx.setAttribute('exception.message', truncateErrorMessage(errorMessage));\n\n if (error instanceof Error && error.stack) {\n ctx.setAttribute('exception.stacktrace', error.stack.slice(0, MAX_ERROR_MESSAGE_LENGTH));\n }\n\n throw error;\n }\n },\n );\n };\n\n // Execute with proper parent context if available\n if (parentSpanContext) {\n const parentContext = createContextWithParent(parentSpanContext);\n return context.with(parentContext, executeWithTracing);\n }\n\n return executeWithTracing();\n };\n}\n\n/**\n * Functional API for Lambda with trace context access\n *\n * Similar to `wrapHandler`, but provides access to the trace context\n * for setting custom attributes during handler execution.\n *\n * @param factory - Factory function that receives trace context and returns a handler\n * @param config - Optional instrumentation configuration\n * @returns Wrapped handler with automatic tracing\n *\n * @example\n * ```typescript\n * export const handler = traceLambda(ctx => async (event, context) => {\n * // Access trace context for custom attributes\n * ctx.setAttribute('user.id', event.userId);\n * ctx.setAttribute('order.id', event.orderId);\n *\n * // Use X-Ray annotations for indexed attributes\n * setXRayAnnotation('user.tier', event.userTier);\n *\n * const result = await processOrder(event);\n * ctx.setAttribute('order.status', result.status);\n *\n * return { statusCode: 200, body: JSON.stringify(result) };\n * });\n * ```\n *\n * @remarks\n * The trace context (`ctx`) provides:\n * - `setAttribute(key, value)` - Set a single attribute\n * - `setAttributes(attrs)` - Set multiple attributes\n * - `setStatus(status)` - Set span status\n * - `recordException(error)` - Record an exception\n * - `traceId`, `spanId` - Trace identifiers\n */\nexport function traceLambda<TEvent = LambdaEvent, TResult = unknown>(\n factory: (ctx: TraceContext) => LambdaHandler<TEvent, TResult>,\n config?: LambdaInstrumentationConfig,\n): LambdaHandler<TEvent, TResult> {\n return async (event: TEvent, lambdaContext: LambdaContext): Promise<TResult> => {\n const functionName = lambdaContext.functionName;\n\n // Detect cold start\n const isColdStart = !coldStartMap.has(functionName);\n if (isColdStart) {\n coldStartMap.set(functionName, true);\n }\n\n // Extract parent trace context\n const shouldExtractContext = config?.extractTraceContext !== false;\n const parentSpanContext = shouldExtractContext\n ? extractTraceContext(event as LambdaEvent)\n : undefined;\n\n // Detect trigger type\n const trigger = detectTriggerType(event as LambdaEvent);\n\n // Core tracing logic\n const executeWithTracing = async (): Promise<TResult> => {\n return autotelTrace(\n `lambda.${functionName}`,\n async (ctx: TraceContext): Promise<TResult> => {\n // Set Lambda semantic attributes\n ctx.setAttributes(\n buildLambdaAttributes({\n awsRequestId: lambdaContext.awsRequestId,\n functionName,\n functionVersion: lambdaContext.functionVersion,\n coldStart: isColdStart,\n trigger,\n }),\n );\n\n // Extract and set account ID from ARN\n const accountId = extractAccountIdFromArn(lambdaContext.invokedFunctionArn);\n if (accountId) {\n ctx.setAttribute('cloud.account.id', accountId);\n }\n\n // Set region from environment\n const region = process.env.AWS_REGION;\n if (region) {\n ctx.setAttribute('cloud.region', region);\n }\n\n // Create handler with context access and execute\n const handler = factory(ctx);\n return handler(event, lambdaContext);\n },\n );\n };\n\n // Execute with proper parent context if available\n if (parentSpanContext) {\n const parentContext = createContextWithParent(parentSpanContext);\n return context.with(parentContext, executeWithTracing);\n }\n\n return executeWithTracing();\n };\n}\n","/**\n * Middy-compatible Lambda middleware for OpenTelemetry instrumentation\n *\n * Provides full span lifecycle management for Lambda handlers using Middy.\n *\n * @example Basic usage\n * ```typescript\n * import middy from '@middy/core';\n * import { tracingMiddleware } from 'autotel-aws/lambda';\n *\n * const baseHandler = async (event, context) => {\n * return { statusCode: 200 };\n * };\n *\n * export const handler = middy(baseHandler)\n * .use(tracingMiddleware());\n * ```\n *\n * @example With configuration\n * ```typescript\n * export const handler = middy(baseHandler)\n * .use(tracingMiddleware({\n * captureResponse: true,\n * extractTraceContext: true\n * }));\n * ```\n *\n * @example Combined with other middleware\n * ```typescript\n * export const handler = middy(baseHandler)\n * .use(tracingMiddleware())\n * .use(jsonBodyParser())\n * .use(httpErrorHandler());\n * ```\n */\n\nimport type { MiddlewareObj, Request } from '@middy/core';\nimport type { Context as AWSLambdaContext } from 'aws-lambda';\nimport { context, trace as otelTrace, SpanStatusCode } from '@opentelemetry/api';\nimport type { Span, SpanContext, Context as OtelContext } from '@opentelemetry/api';\nimport type { LambdaEvent } from '../types';\nimport type { LambdaInstrumentationConfig } from '../config';\nimport { extractTraceContext, detectTriggerType } from './context-extractor';\nimport { buildLambdaAttributes } from '../attributes';\n\n// Symbol to store span on request object\nconst SPAN_SYMBOL = Symbol.for('autotel-aws.span');\nconst CONTEXT_SYMBOL = Symbol.for('autotel-aws.context');\n\n// Track cold starts per function instance\nconst coldStartMap = new Map<string, boolean>();\n\n/**\n * Maximum error message length to prevent span attribute bloat\n */\nconst MAX_ERROR_MESSAGE_LENGTH = 500;\n\n/**\n * Create an OpenTelemetry context with the given span context as parent\n */\nfunction createContextWithParent(parentSpanContext: SpanContext): OtelContext {\n const parentSpan = otelTrace.wrapSpanContext(parentSpanContext);\n return otelTrace.setSpan(context.active(), parentSpan);\n}\n\n/**\n * Truncate error message to prevent span bloat\n */\nfunction truncateErrorMessage(message: string): string {\n if (message.length <= MAX_ERROR_MESSAGE_LENGTH) {\n return message;\n }\n return `${message.slice(0, MAX_ERROR_MESSAGE_LENGTH)}... (truncated)`;\n}\n\n/**\n * Extract AWS account ID from Lambda ARN\n */\nfunction extractAccountIdFromArn(arn: string): string | undefined {\n const arnParts = arn.split(':');\n if (arnParts.length >= 5) {\n return arnParts[4];\n }\n return undefined;\n}\n\n// Extended request type with our symbols\ninterface TracingRequest<TEvent = LambdaEvent, TResult = unknown>\n extends Request<TEvent, TResult, Error, AWSLambdaContext> {\n [SPAN_SYMBOL]?: Span;\n [CONTEXT_SYMBOL]?: OtelContext;\n}\n\n/**\n * Middy middleware for Lambda instrumentation with full span lifecycle\n *\n * Creates a span that wraps the entire handler execution, including:\n * - Trace context extraction from incoming events\n * - Cold start detection\n * - Semantic attributes for Lambda (faas.*, cloud.*)\n * - Error recording and status\n * - Response capture (optional)\n *\n * @param config - Optional instrumentation configuration\n * @returns Middy middleware object\n *\n * @remarks\n * This middleware uses Middy's before/after/onError hooks to manage\n * the span lifecycle. The span is created in `before`, ended in `after`\n * or `onError`.\n *\n * Semantic attributes set automatically:\n * - `faas.name` - Function name\n * - `faas.version` - Function version\n * - `faas.invocation_id` - AWS request ID\n * - `faas.coldstart` - Whether this is a cold start\n * - `faas.trigger` - Trigger type (http, pubsub, datasource, timer, other)\n * - `cloud.provider` - 'aws'\n * - `cloud.region` - AWS region\n * - `cloud.account.id` - AWS account ID (extracted from ARN)\n */\nexport function tracingMiddleware(\n config?: LambdaInstrumentationConfig,\n): MiddlewareObj<LambdaEvent, unknown, Error, AWSLambdaContext> {\n const tracer = otelTrace.getTracer('autotel-aws');\n\n return {\n before: async (request: TracingRequest) => {\n const { event, context: lambdaContext } = request;\n const functionName = lambdaContext.functionName;\n\n // Detect cold start\n const isColdStart = !coldStartMap.has(functionName);\n if (isColdStart) {\n coldStartMap.set(functionName, true);\n }\n\n // Extract parent trace context from event\n const shouldExtractContext = config?.extractTraceContext !== false;\n const parentSpanContext = shouldExtractContext ? extractTraceContext(event) : undefined;\n\n // Detect trigger type\n const trigger = detectTriggerType(event);\n\n // Create parent context if available\n let parentContext = context.active();\n if (parentSpanContext) {\n parentContext = createContextWithParent(parentSpanContext);\n }\n\n // Start span with parent context\n const span = tracer.startSpan(\n `lambda.${functionName}`,\n {\n attributes: buildLambdaAttributes({\n awsRequestId: lambdaContext.awsRequestId,\n functionName,\n functionVersion: lambdaContext.functionVersion,\n coldStart: isColdStart,\n trigger,\n }),\n },\n parentContext,\n );\n\n // Extract and set account ID from ARN\n const accountId = extractAccountIdFromArn(lambdaContext.invokedFunctionArn);\n if (accountId) {\n span.setAttribute('cloud.account.id', accountId);\n }\n\n // Set region from environment\n const region = process.env.AWS_REGION;\n if (region) {\n span.setAttribute('cloud.region', region);\n }\n\n // Store span and context on request for later use\n request[SPAN_SYMBOL] = span;\n request[CONTEXT_SYMBOL] = otelTrace.setSpan(parentContext, span);\n\n // Set the context as active for the handler execution\n // This ensures child spans created during handler execution are linked\n return new Promise<void>((resolve) => {\n context.with(request[CONTEXT_SYMBOL]!, () => {\n resolve();\n });\n });\n },\n\n after: async (request: TracingRequest) => {\n const span = request[SPAN_SYMBOL];\n if (!span) return;\n\n // Capture response if configured\n if (config?.captureResponse && request.response != null) {\n try {\n const responseJson = JSON.stringify(request.response);\n if (responseJson.length <= 4096) {\n span.setAttribute('lambda.response', responseJson);\n } else {\n span.setAttribute('lambda.response.truncated', true);\n span.setAttribute('lambda.response.size', responseJson.length);\n }\n } catch {\n span.setAttribute('lambda.response.serialization_failed', true);\n }\n }\n\n // Set success status\n span.setStatus({ code: SpanStatusCode.OK });\n\n // End the span\n span.end();\n },\n\n onError: async (request: TracingRequest) => {\n const span = request[SPAN_SYMBOL];\n if (!span) return;\n\n const error = request.error;\n if (error) {\n // Record error details\n const errorMessage = error.message || String(error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: truncateErrorMessage(errorMessage),\n });\n\n // Add exception attributes\n span.setAttribute('exception.type', error.name || 'Error');\n span.setAttribute('exception.message', truncateErrorMessage(errorMessage));\n\n if (error.stack) {\n span.setAttribute('exception.stacktrace', error.stack.slice(0, MAX_ERROR_MESSAGE_LENGTH));\n }\n\n // Record exception event\n span.recordException(error);\n }\n\n // End the span\n span.end();\n },\n };\n}\n\n/**\n * @deprecated Use tracingMiddleware instead. LambdaMiddleware is an alias for backwards compatibility.\n */\nexport const LambdaMiddleware = tracingMiddleware;\n\n/**\n * Get the current span from a Middy request object\n *\n * Useful for setting custom attributes within your handler when using\n * the tracing middleware.\n *\n * @param request - Middy request object\n * @returns The active span, or undefined if not available\n *\n * @example\n * ```typescript\n * const baseHandler = async (event, context) => {\n * const span = getSpanFromRequest(request);\n * if (span) {\n * span.setAttribute('user.id', event.userId);\n * }\n * return { statusCode: 200 };\n * };\n * ```\n */\nexport function getSpanFromRequest(request: Request<any, any, any, any>): Span | undefined {\n return (request as TracingRequest)[SPAN_SYMBOL];\n}\n\n/**\n * Get the OpenTelemetry context from a Middy request object\n *\n * @param request - Middy request object\n * @returns The active context, or undefined if not available\n */\nexport function getContextFromRequest(request: Request<any, any, any, any>): OtelContext | undefined {\n return (request as TracingRequest)[CONTEXT_SYMBOL];\n}\n"]}
@@ -4,7 +4,7 @@ var chunkUZEJV2YD_cjs = require('./chunk-UZEJV2YD.cjs');
4
4
  var chunkJEQ2X3Z6_cjs = require('./chunk-JEQ2X3Z6.cjs');
5
5
 
6
6
  // src/sdk/auto-instrument.ts
7
- var INSTRUMENTED_SYMBOL = Symbol.for("autotel-aws.instrumented");
7
+ var INSTRUMENTED_SYMBOL = /* @__PURE__ */ Symbol.for("autotel-aws.instrumented");
8
8
  var globalAutoInstrumentEnabled = false;
9
9
  var originalSmithyClientSend = null;
10
10
  function isInstrumented(client) {
@@ -80,5 +80,5 @@ exports.createTracedClient = createTracedClient;
80
80
  exports.disableAutoInstrumentAWS = disableAutoInstrumentAWS;
81
81
  exports.instrumentSDK = instrumentSDK;
82
82
  exports.isAutoInstrumentEnabled = isAutoInstrumentEnabled;
83
- //# sourceMappingURL=chunk-4TGVGEUN.cjs.map
84
- //# sourceMappingURL=chunk-4TGVGEUN.cjs.map
83
+ //# sourceMappingURL=chunk-XOF2H2PI.cjs.map
84
+ //# sourceMappingURL=chunk-XOF2H2PI.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/sdk/auto-instrument.ts"],"names":["wrapSDKClient","__require"],"mappings":";;;;;;AA2BA,IAAM,mBAAA,mBAAsB,MAAA,CAAO,GAAA,CAAI,0BAA0B,CAAA;AAGjE,IAAI,2BAAA,GAA8B,KAAA;AAGlC,IAAI,wBAAA,GAA8E,IAAA;AAKlF,SAAS,eAAe,MAAA,EAA0B;AAChD,EAAA,OACE,OAAO,MAAA,KAAW,QAAA,IAClB,WAAW,IAAA,IACV,MAAA,CAAmC,mBAAmB,CAAA,KAAM,IAAA;AAEjE;AAKA,SAAS,mBAAsB,MAAA,EAAc;AAC3C,EAAC,MAAA,CAAmC,mBAAmB,CAAA,GAAI,IAAA;AAC3D,EAAA,OAAO,MAAA;AACT;AAuCO,SAAS,aAAA,CACd,QACA,MAAA,EACG;AAEH,EAAA,IAAI,cAAA,CAAe,MAAM,CAAA,EAAG;AAC1B,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,aAAA,GAAgBA,+BAAA,CAAc,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AAC3D,EAAA,OAAO,mBAAmB,aAAa,CAAA;AACzC;AAyBO,SAAS,kBAAA,CAId,aACA,MAAA,EACiB;AAEjB,EAAA,MAAM,MAAA,GAAS,IAAI,WAAA,CAAY,MAAa,CAAA;AAC5C,EAAA,OAAO,aAAA,CAAc,QAAQ,MAAM,CAAA;AACrC;AA6CO,SAAS,kBAAkB,MAAA,EAAyC;AAEzE,EAAA,IAAI,2BAAA,EAA6B;AAC/B,IAAA;AAAA,EACF;AAIA,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI;AAGF,IAAA,YAAA,GAAeC,2BAAA,CAAQ,wBAAwB,CAAA,CAAE,MAAA;AAAA,EACnD,CAAA,CAAA,MAAQ;AAEN,IAAA,IAAI;AAEF,MAAA,YAAA,GAAeA,2BAAA,CAAQ,uBAAuB,CAAA,CAAE,MAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN;AAAA,OAEF;AACA,MAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,wBAAA,GAA2B,aAAa,SAAA,CAAU,IAAA;AAGlD,EAAA,MAAM,YAAA,GAAe,aAAa,SAAA,CAAU,IAAA;AAE5C,EAAA,YAAA,CAAa,SAAA,CAAU,IAAA,GAAO,SAAS,WAAA,CAErC,YACG,IAAA,EACe;AAElB,IAAA,IAAI,cAAA,CAAe,IAAI,CAAA,EAAG;AACxB,MAAA,OAAO,YAAA,CAAa,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,IACjD;AAIA,IAAA,MAAM,aAAA,GAAgBD,+BAAA,CAAc,IAAA,EAAoD,MAAA,EAAQ,OAAO,CAAA;AAEvG,IAAA,OAAQ,aAAA,CAAsB,IAAA,CAAK,OAAA,EAAS,GAAG,IAAI,CAAA;AAAA,EACrD,CAAA;AAEA,EAAA,2BAAA,GAA8B,IAAA;AAChC;AAmBO,SAAS,wBAAA,GAAiC;AAC/C,EAAA,IAAI,CAAC,2BAAA,IAA+B,CAAC,wBAAA,EAA0B;AAC7D,IAAA;AAAA,EACF;AAGA,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI;AAEF,IAAA,YAAA,GAAeC,2BAAA,CAAQ,wBAAwB,CAAA,CAAE,MAAA;AAAA,EACnD,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI;AAEF,MAAA,YAAA,GAAeA,2BAAA,CAAQ,uBAAuB,CAAA,CAAE,MAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,YAAA,CAAa,UAAU,IAAA,GAAO,wBAAA;AAC9B,EAAA,wBAAA,GAA2B,IAAA;AAC3B,EAAA,2BAAA,GAA8B,KAAA;AAChC;AAKO,SAAS,uBAAA,GAAmC;AACjD,EAAA,OAAO,2BAAA;AACT","file":"chunk-XOF2H2PI.cjs","sourcesContent":["/**\n * AWS SDK v3 auto-instrumentation\n *\n * Provides multiple approaches for instrumenting AWS SDK v3 clients:\n * 1. `instrumentSDK()` - Wrap an existing client instance\n * 2. `createTracedClient()` - Create a pre-instrumented client\n * 3. `autoInstrumentAWS()` - Globally patch all AWS SDK clients\n *\n * @example Basic instrumentation\n * ```typescript\n * import { instrumentSDK } from 'autotel-aws/sdk';\n * import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';\n *\n * const s3 = instrumentSDK(new S3Client({ region: 'us-east-1' }));\n *\n * // All send() calls are now traced\n * await s3.send(new PutObjectCommand({ Bucket: 'my-bucket', Key: 'file.txt' }));\n * ```\n */\n\n// Type-only import from optional peer dependency\n// @ts-expect-error - Optional peer dependency, may not be installed\nimport type { Client, Command } from '@aws-sdk/smithy-client';\nimport { wrapSDKClient } from '../common/sdk-wrapper';\nimport type { SDKInstrumentationConfig } from '../config';\n\n// Symbol to mark clients as instrumented (prevents double-wrapping)\nconst INSTRUMENTED_SYMBOL = Symbol.for('autotel-aws.instrumented');\n\n// Track whether global auto-instrumentation is active\nlet globalAutoInstrumentEnabled = false;\n\n// Store original send method for restoration\nlet originalSmithyClientSend: ((...args: unknown[]) => Promise<unknown>) | null = null;\n\n/**\n * Check if a client is already instrumented\n */\nfunction isInstrumented(client: unknown): boolean {\n return (\n typeof client === 'object' &&\n client !== null &&\n (client as Record<symbol, boolean>)[INSTRUMENTED_SYMBOL] === true\n );\n}\n\n/**\n * Mark a client as instrumented\n */\nfunction markAsInstrumented<T>(client: T): T {\n (client as Record<symbol, boolean>)[INSTRUMENTED_SYMBOL] = true;\n return client;\n}\n\n/**\n * Instrument an existing AWS SDK v3 client\n *\n * Wraps the client's `send()` method to automatically create spans\n * for all AWS API calls with proper semantic attributes.\n *\n * @param client - An AWS SDK v3 client instance\n * @param config - Optional instrumentation configuration\n * @returns The instrumented client (same instance, modified)\n *\n * @example Basic usage\n * ```typescript\n * import { instrumentSDK } from 'autotel-aws/sdk';\n * import { S3Client } from '@aws-sdk/client-s3';\n *\n * const s3 = instrumentSDK(new S3Client({ region: 'us-east-1' }));\n * ```\n *\n * @example With configuration\n * ```typescript\n * const s3 = instrumentSDK(new S3Client({}), {\n * service: 's3',\n * captureRequest: true,\n * captureResponse: true\n * });\n * ```\n *\n * @remarks\n * Semantic attributes set automatically:\n * - `rpc.system` - 'aws-api'\n * - `rpc.service` - AWS service name (e.g., 'S3', 'DynamoDB')\n * - `rpc.method` - Operation name (e.g., 'GetObject', 'PutItem')\n * - `aws.request_id` - AWS request ID from response\n * - `http.status_code` - HTTP status code\n *\n * @see https://opentelemetry.io/docs/specs/semconv/cloud-providers/aws-sdk/\n */\nexport function instrumentSDK<T extends Client<unknown, unknown, unknown, unknown>>(\n client: T,\n config?: SDKInstrumentationConfig,\n): T {\n // Prevent double-instrumentation\n if (isInstrumented(client)) {\n return client;\n }\n\n const wrappedClient = wrapSDKClient(client, config?.service);\n return markAsInstrumented(wrappedClient);\n}\n\n/**\n * Create a pre-instrumented AWS SDK v3 client\n *\n * Convenience factory that creates and instruments a client in one call.\n *\n * @param ClientClass - The AWS SDK client class constructor\n * @param config - Client configuration merged with instrumentation config\n * @returns A new instrumented client instance\n *\n * @example\n * ```typescript\n * import { createTracedClient } from 'autotel-aws/sdk';\n * import { S3Client } from '@aws-sdk/client-s3';\n * import { DynamoDBClient } from '@aws-sdk/client-dynamodb';\n *\n * // Create instrumented clients\n * const s3 = createTracedClient(S3Client, { region: 'us-east-1' });\n * const dynamodb = createTracedClient(DynamoDBClient, {\n * region: 'us-east-1',\n * captureRequest: true\n * });\n * ```\n */\nexport function createTracedClient<\n \n T extends new (...args: any[]) => Client<unknown, unknown, unknown, unknown>,\n>(\n ClientClass: T,\n config?: SDKInstrumentationConfig & ConstructorParameters<T>[0],\n): InstanceType<T> {\n \n const client = new ClientClass(config as any);\n return instrumentSDK(client, config) as InstanceType<T>;\n}\n\n/**\n * Auto-instrument all AWS SDK v3 clients globally\n *\n * Patches the AWS SDK's base Client class to automatically instrument\n * all client instances created after this call. This is the most convenient\n * approach but requires the AWS SDK to be installed.\n *\n * Call this once at application startup, before creating any clients.\n *\n * @param config - Optional default instrumentation configuration\n *\n * @example Basic usage\n * ```typescript\n * import { autoInstrumentAWS } from 'autotel-aws/sdk';\n *\n * // Call once at startup\n * autoInstrumentAWS();\n *\n * // All subsequent clients are automatically instrumented\n * const s3 = new S3Client({ region: 'us-east-1' });\n * const dynamodb = new DynamoDBClient({ region: 'us-east-1' });\n *\n * // Both are traced automatically\n * await s3.send(new GetObjectCommand({ Bucket: 'b', Key: 'k' }));\n * await dynamodb.send(new GetItemCommand({ TableName: 't', Key: {} }));\n * ```\n *\n * @example With default configuration\n * ```typescript\n * autoInstrumentAWS({\n * captureRequest: false,\n * captureResponse: false\n * });\n * ```\n *\n * @remarks\n * - This function is idempotent - calling it multiple times has no effect\n * - Clients created before calling this function are NOT instrumented\n * - Use `instrumentSDK()` for clients created before auto-instrumentation\n * - Requires `@aws-sdk/smithy-client` to be installed (peer dependency)\n *\n * @throws Error if AWS SDK is not installed\n */\nexport function autoInstrumentAWS(config?: SDKInstrumentationConfig): void {\n // Idempotency check\n if (globalAutoInstrumentEnabled) {\n return;\n }\n\n // Try to get the smithy-client module\n \n let SmithyClient: any;\n try {\n // Dynamic require to avoid bundling issues\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@aws-sdk/smithy-client').Client;\n } catch {\n // Try the core package (newer SDK versions)\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@smithy/smithy-client').Client;\n } catch {\n console.warn(\n '[autotel-aws] autoInstrumentAWS() requires @aws-sdk/smithy-client or @smithy/smithy-client. ' +\n 'Install an AWS SDK v3 client package (e.g., @aws-sdk/client-s3) or use instrumentSDK() directly.',\n );\n return;\n }\n }\n\n // Store original send for potential restoration\n originalSmithyClientSend = SmithyClient.prototype.send;\n\n // Patch the prototype's send method\n const originalSend = SmithyClient.prototype.send;\n\n SmithyClient.prototype.send = function patchedSend(\n this: Client<unknown, unknown, unknown, unknown>,\n command: Command<unknown, unknown, unknown, unknown, unknown>,\n ...args: unknown[]\n ): Promise<unknown> {\n // Skip if this specific client is already instrumented (via instrumentSDK)\n if (isInstrumented(this)) {\n return originalSend.call(this, command, ...args);\n }\n\n // Create a one-time wrapped client for this call\n // This is less efficient than pre-wrapping, but ensures all calls are traced\n const wrappedClient = wrapSDKClient(this as Client<unknown, unknown, unknown, unknown>, config?.service);\n \n return (wrappedClient as any).send(command, ...args);\n };\n\n globalAutoInstrumentEnabled = true;\n}\n\n/**\n * Disable global auto-instrumentation\n *\n * Restores the original AWS SDK behavior. Useful for testing or\n * when you need to disable instrumentation temporarily.\n *\n * @example\n * ```typescript\n * import { autoInstrumentAWS, disableAutoInstrumentAWS } from 'autotel-aws/sdk';\n *\n * autoInstrumentAWS();\n * // ... use instrumented clients ...\n *\n * disableAutoInstrumentAWS();\n * // Subsequent operations are not traced\n * ```\n */\nexport function disableAutoInstrumentAWS(): void {\n if (!globalAutoInstrumentEnabled || !originalSmithyClientSend) {\n return;\n }\n\n \n let SmithyClient: any;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@aws-sdk/smithy-client').Client;\n } catch {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n SmithyClient = require('@smithy/smithy-client').Client;\n } catch {\n return;\n }\n }\n\n // Restore original send\n SmithyClient.prototype.send = originalSmithyClientSend;\n originalSmithyClientSend = null;\n globalAutoInstrumentEnabled = false;\n}\n\n/**\n * Check if global auto-instrumentation is enabled\n */\nexport function isAutoInstrumentEnabled(): boolean {\n return globalAutoInstrumentEnabled;\n}\n"]}
@@ -35,7 +35,7 @@ function extractEventBridgeContext(event) {
35
35
  ...traceContext.baggage && { baggage: traceContext.baggage }
36
36
  };
37
37
  const extractedContext = api.propagation.extract(api.context.active(), carrier);
38
- const span = extractedContext.getValue(Symbol.for("OpenTelemetry Context Key SPAN"));
38
+ const span = extractedContext.getValue(/* @__PURE__ */ Symbol.for("OpenTelemetry Context Key SPAN"));
39
39
  if (span && typeof span === "object") {
40
40
  if ("spanContext" in span && typeof span.spanContext === "function") {
41
41
  return span.spanContext();