autotel 2.23.0 → 2.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/bin/intent.js +6 -0
  2. package/dist/auto.cjs +2 -2
  3. package/dist/auto.js +1 -1
  4. package/dist/{chunk-GY4CRZSV.js → chunk-2D74YR4Z.js} +3 -3
  5. package/dist/{chunk-GY4CRZSV.js.map → chunk-2D74YR4Z.js.map} +1 -1
  6. package/dist/{chunk-724XLWR3.js → chunk-47KW5CV7.js} +87 -4
  7. package/dist/chunk-47KW5CV7.js.map +1 -0
  8. package/dist/{chunk-3ZFDJJWZ.cjs → chunk-AXNPD6XW.cjs} +26 -26
  9. package/dist/{chunk-3ZFDJJWZ.cjs.map → chunk-AXNPD6XW.cjs.map} +1 -1
  10. package/dist/{chunk-BSZP4URK.cjs → chunk-CLR5RQW4.cjs} +5 -5
  11. package/dist/{chunk-BSZP4URK.cjs.map → chunk-CLR5RQW4.cjs.map} +1 -1
  12. package/dist/{chunk-AXFWWJF3.cjs → chunk-CSG2D3BZ.cjs} +7 -7
  13. package/dist/{chunk-AXFWWJF3.cjs.map → chunk-CSG2D3BZ.cjs.map} +1 -1
  14. package/dist/{chunk-MSUHW2I4.cjs → chunk-CZR7PJUZ.cjs} +13 -13
  15. package/dist/{chunk-MSUHW2I4.cjs.map → chunk-CZR7PJUZ.cjs.map} +1 -1
  16. package/dist/{chunk-IPKXURBW.js → chunk-GSZJOYFF.js} +3 -3
  17. package/dist/{chunk-IPKXURBW.js.map → chunk-GSZJOYFF.js.map} +1 -1
  18. package/dist/{chunk-WCIIFRGL.js → chunk-IJMW6CTV.js} +3 -3
  19. package/dist/{chunk-WCIIFRGL.js.map → chunk-IJMW6CTV.js.map} +1 -1
  20. package/dist/{chunk-HSEIUH7F.cjs → chunk-PDRIJURL.cjs} +86 -2
  21. package/dist/chunk-PDRIJURL.cjs.map +1 -0
  22. package/dist/{chunk-4RZ4JUBY.cjs → chunk-W6U2BUHU.cjs} +5 -5
  23. package/dist/{chunk-4RZ4JUBY.cjs.map → chunk-W6U2BUHU.cjs.map} +1 -1
  24. package/dist/{chunk-5XUEHX7J.js → chunk-Z3BQYTZE.js} +3 -3
  25. package/dist/{chunk-5XUEHX7J.js.map → chunk-Z3BQYTZE.js.map} +1 -1
  26. package/dist/{chunk-3AMR5XLZ.js → chunk-ZJTBAUXG.js} +3 -3
  27. package/dist/{chunk-3AMR5XLZ.js.map → chunk-ZJTBAUXG.js.map} +1 -1
  28. package/dist/decorators.cjs +2 -2
  29. package/dist/decorators.js +2 -2
  30. package/dist/enrichers.cjs +90 -0
  31. package/dist/enrichers.cjs.map +1 -0
  32. package/dist/enrichers.d.cts +23 -0
  33. package/dist/enrichers.d.ts +23 -0
  34. package/dist/enrichers.js +86 -0
  35. package/dist/enrichers.js.map +1 -0
  36. package/dist/event.cjs +5 -5
  37. package/dist/event.js +2 -2
  38. package/dist/functional.cjs +9 -9
  39. package/dist/functional.js +2 -2
  40. package/dist/index.cjs +63 -41
  41. package/dist/index.cjs.map +1 -1
  42. package/dist/index.d.cts +10 -3
  43. package/dist/index.d.ts +10 -3
  44. package/dist/index.js +28 -11
  45. package/dist/index.js.map +1 -1
  46. package/dist/{init-BC5aN8bh.d.cts → init-Co9CWOY6.d.cts} +16 -0
  47. package/dist/{init-_FG4IbhF.d.ts → init-oLqNJTpj.d.ts} +16 -0
  48. package/dist/instrumentation.cjs +8 -8
  49. package/dist/instrumentation.js +1 -1
  50. package/dist/messaging.cjs +6 -6
  51. package/dist/messaging.js +3 -3
  52. package/dist/semantic-helpers.cjs +7 -7
  53. package/dist/semantic-helpers.js +3 -3
  54. package/dist/webhook.cjs +3 -3
  55. package/dist/webhook.js +2 -2
  56. package/dist/workflow-distributed.cjs +4 -4
  57. package/dist/workflow-distributed.js +2 -2
  58. package/dist/workflow.cjs +7 -7
  59. package/dist/workflow.js +3 -3
  60. package/dist/yaml-config.d.cts +1 -1
  61. package/dist/yaml-config.d.ts +1 -1
  62. package/package.json +45 -33
  63. package/skills/autotel-core/SKILL.md +162 -0
  64. package/skills/autotel-events/SKILL.md +88 -0
  65. package/skills/autotel-frameworks/SKILL.md +97 -0
  66. package/skills/autotel-instrumentation/SKILL.md +125 -0
  67. package/skills/autotel-request-logging/SKILL.md +100 -0
  68. package/skills/autotel-structured-errors/SKILL.md +130 -0
  69. package/src/enrichers.test.ts +150 -0
  70. package/src/enrichers.ts +145 -0
  71. package/src/index.ts +4 -0
  72. package/src/init-redactor.test.ts +8 -0
  73. package/src/init.ts +56 -0
  74. package/src/package-manifest.test.ts +24 -0
  75. package/src/posthog-logs.test.ts +115 -0
  76. package/src/posthog-logs.ts +77 -0
  77. package/src/redact-values.test.ts +76 -0
  78. package/src/redact-values.ts +27 -0
  79. package/src/request-logger.test.ts +14 -1
  80. package/src/request-logger.ts +11 -1
  81. package/src/structured-error.test.ts +30 -0
  82. package/src/structured-error.ts +11 -0
  83. package/dist/chunk-724XLWR3.js.map +0 -1
  84. package/dist/chunk-HSEIUH7F.cjs.map +0 -1
@@ -0,0 +1,23 @@
1
+ type Headers = Record<string, string | string[] | undefined>;
2
+ interface UserAgentAttributes {
3
+ 'user_agent.raw': string;
4
+ 'user_agent.browser'?: string;
5
+ 'user_agent.os'?: string;
6
+ 'user_agent.device'?: string;
7
+ }
8
+ declare function userAgent(headers: Headers): UserAgentAttributes | undefined;
9
+ interface GeoAttributes {
10
+ 'geo.country'?: string;
11
+ 'geo.region'?: string;
12
+ 'geo.city'?: string;
13
+ 'geo.latitude'?: string;
14
+ 'geo.longitude'?: string;
15
+ }
16
+ declare function geo(headers: Headers): GeoAttributes | undefined;
17
+ interface RequestSizeAttributes {
18
+ 'http.request.body.size'?: number;
19
+ 'http.response.body.size'?: number;
20
+ }
21
+ declare function requestSize(requestHeaders: Headers, responseHeaders?: Headers): RequestSizeAttributes | undefined;
22
+
23
+ export { type GeoAttributes, type RequestSizeAttributes, type UserAgentAttributes, geo, requestSize, userAgent };
@@ -0,0 +1,86 @@
1
+ import './chunk-DGUM43GV.js';
2
+
3
+ // src/enrichers.ts
4
+ function get(headers, key) {
5
+ const lower = key.toLowerCase();
6
+ for (const [k, v] of Object.entries(headers)) {
7
+ if (k.toLowerCase() === lower) {
8
+ return Array.isArray(v) ? v[0] : v;
9
+ }
10
+ }
11
+ return void 0;
12
+ }
13
+ var BROWSER_RE = /(Firefox|OPR|Edg|Chrome|Safari|MSIE|Trident)[\s/]?([\d.]*)/;
14
+ var OS_RE = /(Windows NT|Mac OS X|Linux|Android|iPhone OS|iPad|CrOS)[\s]?([\d._]*)/;
15
+ function parseBrowser(ua) {
16
+ const m = BROWSER_RE.exec(ua);
17
+ if (!m) return void 0;
18
+ const name = m[1] === "OPR" ? "Opera" : m[1] === "Edg" ? "Edge" : m[1] === "Trident" ? "IE" : m[1];
19
+ return m[2] ? `${name} ${m[2]}` : name;
20
+ }
21
+ function parseOS(ua) {
22
+ const m = OS_RE.exec(ua);
23
+ if (!m) return void 0;
24
+ const name = m[1] === "iPhone OS" ? "iOS" : m[1] === "Windows NT" ? "Windows" : m[1] === "Mac OS X" ? "macOS" : m[1];
25
+ const ver = m[2]?.replaceAll("_", ".") || void 0;
26
+ return ver ? `${name} ${ver}` : name;
27
+ }
28
+ function parseDevice(ua) {
29
+ if (/Mobi|Android.*Mobile|iPhone/.test(ua)) return "mobile";
30
+ if (/iPad|Android(?!.*Mobile)|Tablet/.test(ua)) return "tablet";
31
+ if (/Bot|Crawler|Spider|Lighthouse/i.test(ua)) return "bot";
32
+ return "desktop";
33
+ }
34
+ function userAgent(headers) {
35
+ const raw = get(headers, "user-agent");
36
+ if (!raw) return void 0;
37
+ const attrs = { "user_agent.raw": raw };
38
+ const browser = parseBrowser(raw);
39
+ if (browser) attrs["user_agent.browser"] = browser;
40
+ const os = parseOS(raw);
41
+ if (os) attrs["user_agent.os"] = os;
42
+ const device = parseDevice(raw);
43
+ if (device) attrs["user_agent.device"] = device;
44
+ return attrs;
45
+ }
46
+ function geo(headers) {
47
+ const country = get(headers, "x-vercel-ip-country") ?? get(headers, "cf-ipcountry");
48
+ const region = get(headers, "x-vercel-ip-country-region");
49
+ const city = get(headers, "x-vercel-ip-city");
50
+ const latitude = get(headers, "x-vercel-ip-latitude");
51
+ const longitude = get(headers, "x-vercel-ip-longitude");
52
+ if (!country && !region && !city && !latitude && !longitude) return void 0;
53
+ const attrs = {};
54
+ if (country) attrs["geo.country"] = country;
55
+ if (region) attrs["geo.region"] = region;
56
+ if (city) {
57
+ try {
58
+ attrs["geo.city"] = decodeURIComponent(city);
59
+ } catch {
60
+ attrs["geo.city"] = city;
61
+ }
62
+ }
63
+ if (latitude) attrs["geo.latitude"] = latitude;
64
+ if (longitude) attrs["geo.longitude"] = longitude;
65
+ return attrs;
66
+ }
67
+ var DIGITS_RE = /^\d+$/;
68
+ function parseContentLength(value) {
69
+ if (!value || !DIGITS_RE.test(value)) return void 0;
70
+ return Number(value);
71
+ }
72
+ function requestSize(requestHeaders, responseHeaders) {
73
+ const reqLen = get(requestHeaders, "content-length");
74
+ const resLen = responseHeaders ? get(responseHeaders, "content-length") : void 0;
75
+ if (!reqLen && !resLen) return void 0;
76
+ const attrs = {};
77
+ const reqBytes = parseContentLength(reqLen);
78
+ if (reqBytes !== void 0) attrs["http.request.body.size"] = reqBytes;
79
+ const resBytes = parseContentLength(resLen);
80
+ if (resBytes !== void 0) attrs["http.response.body.size"] = resBytes;
81
+ return Object.keys(attrs).length > 0 ? attrs : void 0;
82
+ }
83
+
84
+ export { geo, requestSize, userAgent };
85
+ //# sourceMappingURL=enrichers.js.map
86
+ //# sourceMappingURL=enrichers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/enrichers.ts"],"names":[],"mappings":"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","file":"enrichers.js","sourcesContent":["type Headers = Record<string, string | string[] | undefined>;\n\nfunction get(headers: Headers, key: string): string | undefined {\n const lower = key.toLowerCase();\n for (const [k, v] of Object.entries(headers)) {\n if (k.toLowerCase() === lower) {\n return Array.isArray(v) ? v[0] : v;\n }\n }\n return undefined;\n}\n\n// --- User Agent ---\n\nexport interface UserAgentAttributes {\n 'user_agent.raw': string;\n 'user_agent.browser'?: string;\n 'user_agent.os'?: string;\n 'user_agent.device'?: string;\n}\n\nconst BROWSER_RE = /(Firefox|OPR|Edg|Chrome|Safari|MSIE|Trident)[\\s/]?([\\d.]*)/;\nconst OS_RE =\n /(Windows NT|Mac OS X|Linux|Android|iPhone OS|iPad|CrOS)[\\s]?([\\d._]*)/;\n\nfunction parseBrowser(ua: string): string | undefined {\n const m = BROWSER_RE.exec(ua);\n if (!m) return undefined;\n const name =\n m[1] === 'OPR'\n ? 'Opera'\n : m[1] === 'Edg'\n ? 'Edge'\n : m[1] === 'Trident'\n ? 'IE'\n : m[1];\n return m[2] ? `${name} ${m[2]}` : name;\n}\n\nfunction parseOS(ua: string): string | undefined {\n const m = OS_RE.exec(ua);\n if (!m) return undefined;\n const name =\n m[1] === 'iPhone OS'\n ? 'iOS'\n : m[1] === 'Windows NT'\n ? 'Windows'\n : m[1] === 'Mac OS X'\n ? 'macOS'\n : m[1];\n const ver = m[2]?.replaceAll('_', '.') || undefined;\n return ver ? `${name} ${ver}` : name;\n}\n\nfunction parseDevice(ua: string): string | undefined {\n if (/Mobi|Android.*Mobile|iPhone/.test(ua)) return 'mobile';\n if (/iPad|Android(?!.*Mobile)|Tablet/.test(ua)) return 'tablet';\n if (/Bot|Crawler|Spider|Lighthouse/i.test(ua)) return 'bot';\n return 'desktop';\n}\n\nexport function userAgent(headers: Headers): UserAgentAttributes | undefined {\n const raw = get(headers, 'user-agent');\n if (!raw) return undefined;\n\n const attrs: UserAgentAttributes = { 'user_agent.raw': raw };\n const browser = parseBrowser(raw);\n if (browser) attrs['user_agent.browser'] = browser;\n const os = parseOS(raw);\n if (os) attrs['user_agent.os'] = os;\n const device = parseDevice(raw);\n if (device) attrs['user_agent.device'] = device;\n\n return attrs;\n}\n\n// --- Geo ---\n\nexport interface GeoAttributes {\n 'geo.country'?: string;\n 'geo.region'?: string;\n 'geo.city'?: string;\n 'geo.latitude'?: string;\n 'geo.longitude'?: string;\n}\n\nexport function geo(headers: Headers): GeoAttributes | undefined {\n const country =\n get(headers, 'x-vercel-ip-country') ?? get(headers, 'cf-ipcountry');\n const region = get(headers, 'x-vercel-ip-country-region');\n const city = get(headers, 'x-vercel-ip-city');\n const latitude = get(headers, 'x-vercel-ip-latitude');\n const longitude = get(headers, 'x-vercel-ip-longitude');\n\n if (!country && !region && !city && !latitude && !longitude) return undefined;\n\n const attrs: GeoAttributes = {};\n if (country) attrs['geo.country'] = country;\n if (region) attrs['geo.region'] = region;\n if (city) {\n try {\n attrs['geo.city'] = decodeURIComponent(city);\n } catch {\n attrs['geo.city'] = city;\n }\n }\n if (latitude) attrs['geo.latitude'] = latitude;\n if (longitude) attrs['geo.longitude'] = longitude;\n\n return attrs;\n}\n\n// --- Request Size ---\n\nexport interface RequestSizeAttributes {\n 'http.request.body.size'?: number;\n 'http.response.body.size'?: number;\n}\n\nconst DIGITS_RE = /^\\d+$/;\n\nfunction parseContentLength(value: string | undefined): number | undefined {\n if (!value || !DIGITS_RE.test(value)) return undefined;\n return Number(value);\n}\n\nexport function requestSize(\n requestHeaders: Headers,\n responseHeaders?: Headers,\n): RequestSizeAttributes | undefined {\n const reqLen = get(requestHeaders, 'content-length');\n const resLen = responseHeaders\n ? get(responseHeaders, 'content-length')\n : undefined;\n\n if (!reqLen && !resLen) return undefined;\n\n const attrs: RequestSizeAttributes = {};\n const reqBytes = parseContentLength(reqLen);\n if (reqBytes !== undefined) attrs['http.request.body.size'] = reqBytes;\n const resBytes = parseContentLength(resLen);\n if (resBytes !== undefined) attrs['http.response.body.size'] = resBytes;\n\n return Object.keys(attrs).length > 0 ? attrs : undefined;\n}\n"]}
package/dist/event.cjs CHANGED
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkMSUHW2I4_cjs = require('./chunk-MSUHW2I4.cjs');
3
+ var chunkCZR7PJUZ_cjs = require('./chunk-CZR7PJUZ.cjs');
4
4
  require('./chunk-NZ72VDNY.cjs');
5
5
  require('./chunk-UY3UYPBZ.cjs');
6
6
  require('./chunk-D5LMF53P.cjs');
7
7
  require('./chunk-XRKAL7WJ.cjs');
8
- require('./chunk-HSEIUH7F.cjs');
8
+ require('./chunk-PDRIJURL.cjs');
9
9
  require('./chunk-6YIDHH2S.cjs');
10
10
  require('./chunk-GVLK7YUU.cjs');
11
11
  require('./chunk-ZNMBW67B.cjs');
@@ -24,15 +24,15 @@ require('./chunk-JEQ2X3Z6.cjs');
24
24
 
25
25
  Object.defineProperty(exports, "Event", {
26
26
  enumerable: true,
27
- get: function () { return chunkMSUHW2I4_cjs.Event; }
27
+ get: function () { return chunkCZR7PJUZ_cjs.Event; }
28
28
  });
29
29
  Object.defineProperty(exports, "getEvents", {
30
30
  enumerable: true,
31
- get: function () { return chunkMSUHW2I4_cjs.getEvents; }
31
+ get: function () { return chunkCZR7PJUZ_cjs.getEvents; }
32
32
  });
33
33
  Object.defineProperty(exports, "resetEvents", {
34
34
  enumerable: true,
35
- get: function () { return chunkMSUHW2I4_cjs.resetEvents; }
35
+ get: function () { return chunkCZR7PJUZ_cjs.resetEvents; }
36
36
  });
37
37
  //# sourceMappingURL=event.cjs.map
38
38
  //# sourceMappingURL=event.cjs.map
package/dist/event.js CHANGED
@@ -1,9 +1,9 @@
1
- export { Event, getEvents, resetEvents } from './chunk-5XUEHX7J.js';
1
+ export { Event, getEvents, resetEvents } from './chunk-Z3BQYTZE.js';
2
2
  import './chunk-LITNXTTT.js';
3
3
  import './chunk-BZHG5IZ4.js';
4
4
  import './chunk-WD4RP6IV.js';
5
5
  import './chunk-USSL3D6L.js';
6
- import './chunk-724XLWR3.js';
6
+ import './chunk-47KW5CV7.js';
7
7
  import './chunk-YTGF4L2C.js';
8
8
  import './chunk-X4RMFFMR.js';
9
9
  import './chunk-WGWSHJ2N.js';
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunk3ZFDJJWZ_cjs = require('./chunk-3ZFDJJWZ.cjs');
3
+ var chunkAXNPD6XW_cjs = require('./chunk-AXNPD6XW.cjs');
4
4
  require('./chunk-W4EUTSB2.cjs');
5
5
  require('./chunk-GML3FBOT.cjs');
6
6
  require('./chunk-D5LMF53P.cjs');
7
7
  require('./chunk-XRKAL7WJ.cjs');
8
- require('./chunk-HSEIUH7F.cjs');
8
+ require('./chunk-PDRIJURL.cjs');
9
9
  require('./chunk-6YIDHH2S.cjs');
10
10
  require('./chunk-GVLK7YUU.cjs');
11
11
  require('./chunk-ZNMBW67B.cjs');
@@ -24,31 +24,31 @@ require('./chunk-JEQ2X3Z6.cjs');
24
24
 
25
25
  Object.defineProperty(exports, "ctx", {
26
26
  enumerable: true,
27
- get: function () { return chunk3ZFDJJWZ_cjs.ctx; }
27
+ get: function () { return chunkAXNPD6XW_cjs.ctx; }
28
28
  });
29
29
  Object.defineProperty(exports, "instrument", {
30
30
  enumerable: true,
31
- get: function () { return chunk3ZFDJJWZ_cjs.instrument; }
31
+ get: function () { return chunkAXNPD6XW_cjs.instrument; }
32
32
  });
33
33
  Object.defineProperty(exports, "span", {
34
34
  enumerable: true,
35
- get: function () { return chunk3ZFDJJWZ_cjs.span; }
35
+ get: function () { return chunkAXNPD6XW_cjs.span; }
36
36
  });
37
37
  Object.defineProperty(exports, "trace", {
38
38
  enumerable: true,
39
- get: function () { return chunk3ZFDJJWZ_cjs.trace; }
39
+ get: function () { return chunkAXNPD6XW_cjs.trace; }
40
40
  });
41
41
  Object.defineProperty(exports, "withBaggage", {
42
42
  enumerable: true,
43
- get: function () { return chunk3ZFDJJWZ_cjs.withBaggage; }
43
+ get: function () { return chunkAXNPD6XW_cjs.withBaggage; }
44
44
  });
45
45
  Object.defineProperty(exports, "withNewContext", {
46
46
  enumerable: true,
47
- get: function () { return chunk3ZFDJJWZ_cjs.withNewContext; }
47
+ get: function () { return chunkAXNPD6XW_cjs.withNewContext; }
48
48
  });
49
49
  Object.defineProperty(exports, "withTracing", {
50
50
  enumerable: true,
51
- get: function () { return chunk3ZFDJJWZ_cjs.withTracing; }
51
+ get: function () { return chunkAXNPD6XW_cjs.withTracing; }
52
52
  });
53
53
  //# sourceMappingURL=functional.cjs.map
54
54
  //# sourceMappingURL=functional.cjs.map
@@ -1,9 +1,9 @@
1
- export { ctx, instrument, span, trace, withBaggage, withNewContext, withTracing } from './chunk-GY4CRZSV.js';
1
+ export { ctx, instrument, span, trace, withBaggage, withNewContext, withTracing } from './chunk-2D74YR4Z.js';
2
2
  import './chunk-SR35DG5A.js';
3
3
  import './chunk-B3ZHLLMP.js';
4
4
  import './chunk-WD4RP6IV.js';
5
5
  import './chunk-USSL3D6L.js';
6
- import './chunk-724XLWR3.js';
6
+ import './chunk-47KW5CV7.js';
7
7
  import './chunk-YTGF4L2C.js';
8
8
  import './chunk-X4RMFFMR.js';
9
9
  import './chunk-WGWSHJ2N.js';
package/dist/index.cjs CHANGED
@@ -1,26 +1,26 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk7EQ4G4SI_cjs = require('./chunk-7EQ4G4SI.cjs');
4
- var chunkBSZP4URK_cjs = require('./chunk-BSZP4URK.cjs');
4
+ var chunkCLR5RQW4_cjs = require('./chunk-CLR5RQW4.cjs');
5
5
  var chunkXRBP4RYL_cjs = require('./chunk-XRBP4RYL.cjs');
6
6
  var chunk2ZKEORFN_cjs = require('./chunk-2ZKEORFN.cjs');
7
7
  var chunkESMHTKLJ_cjs = require('./chunk-ESMHTKLJ.cjs');
8
8
  var chunkT4B5LB6E_cjs = require('./chunk-T4B5LB6E.cjs');
9
- var chunk4RZ4JUBY_cjs = require('./chunk-4RZ4JUBY.cjs');
9
+ var chunkW6U2BUHU_cjs = require('./chunk-W6U2BUHU.cjs');
10
10
  var chunkINJD3G4K_cjs = require('./chunk-INJD3G4K.cjs');
11
11
  var chunkTC5ZPWM4_cjs = require('./chunk-TC5ZPWM4.cjs');
12
12
  require('./chunk-YTXEZ4SD.cjs');
13
13
  var chunkWJH6IYU2_cjs = require('./chunk-WJH6IYU2.cjs');
14
- var chunkAXFWWJF3_cjs = require('./chunk-AXFWWJF3.cjs');
15
- var chunk3ZFDJJWZ_cjs = require('./chunk-3ZFDJJWZ.cjs');
14
+ var chunkCSG2D3BZ_cjs = require('./chunk-CSG2D3BZ.cjs');
15
+ var chunkAXNPD6XW_cjs = require('./chunk-AXNPD6XW.cjs');
16
16
  var chunkW4EUTSB2_cjs = require('./chunk-W4EUTSB2.cjs');
17
17
  var chunkGML3FBOT_cjs = require('./chunk-GML3FBOT.cjs');
18
- var chunkMSUHW2I4_cjs = require('./chunk-MSUHW2I4.cjs');
18
+ var chunkCZR7PJUZ_cjs = require('./chunk-CZR7PJUZ.cjs');
19
19
  require('./chunk-NZ72VDNY.cjs');
20
20
  require('./chunk-UY3UYPBZ.cjs');
21
21
  var chunkD5LMF53P_cjs = require('./chunk-D5LMF53P.cjs');
22
22
  var chunkXRKAL7WJ_cjs = require('./chunk-XRKAL7WJ.cjs');
23
- var chunkHSEIUH7F_cjs = require('./chunk-HSEIUH7F.cjs');
23
+ var chunkPDRIJURL_cjs = require('./chunk-PDRIJURL.cjs');
24
24
  require('./chunk-6YIDHH2S.cjs');
25
25
  require('./chunk-GVLK7YUU.cjs');
26
26
  var chunkZNMBW67B_cjs = require('./chunk-ZNMBW67B.cjs');
@@ -34,6 +34,7 @@ require('./chunk-AZ24DJAG.cjs');
34
34
  require('./chunk-ESLWRGAG.cjs');
35
35
  var chunkYREV3LGG_cjs = require('./chunk-YREV3LGG.cjs');
36
36
  require('./chunk-JEQ2X3Z6.cjs');
37
+ var async_hooks = require('async_hooks');
37
38
  var api = require('@opentelemetry/api');
38
39
 
39
40
  // src/shutdown.ts
@@ -41,7 +42,7 @@ async function flush(options) {
41
42
  const timeout = options?.timeout ?? 2e3;
42
43
  const forShutdown = options?.forShutdown ?? false;
43
44
  const doFlush = async () => {
44
- const eventsQueue = chunk3ZFDJJWZ_cjs.getEventQueue();
45
+ const eventsQueue = chunkAXNPD6XW_cjs.getEventQueue();
45
46
  if (eventsQueue) {
46
47
  if (forShutdown) {
47
48
  await eventsQueue.shutdown();
@@ -49,7 +50,7 @@ async function flush(options) {
49
50
  await eventsQueue.flush();
50
51
  }
51
52
  }
52
- const sdk = chunkHSEIUH7F_cjs.getSdk();
53
+ const sdk = chunkPDRIJURL_cjs.getSdk();
53
54
  if (sdk) {
54
55
  try {
55
56
  const sdkAny = sdk;
@@ -83,7 +84,7 @@ async function flush(options) {
83
84
  if (timeoutHandle) {
84
85
  clearTimeout(timeoutHandle);
85
86
  }
86
- const logger = chunkHSEIUH7F_cjs.getLogger();
87
+ const logger = chunkPDRIJURL_cjs.getLogger();
87
88
  logger.error(
88
89
  {
89
90
  err: error instanceof Error ? error : new Error(String(error))
@@ -94,7 +95,7 @@ async function flush(options) {
94
95
  }
95
96
  }
96
97
  async function shutdown() {
97
- const logger = chunkHSEIUH7F_cjs.getLogger();
98
+ const logger = chunkPDRIJURL_cjs.getLogger();
98
99
  let shutdownError = null;
99
100
  try {
100
101
  await flush({ forShutdown: true });
@@ -109,7 +110,7 @@ async function shutdown() {
109
110
  );
110
111
  }
111
112
  try {
112
- const sdk = chunkHSEIUH7F_cjs.getSdk();
113
+ const sdk = chunkPDRIJURL_cjs.getSdk();
113
114
  if (sdk) {
114
115
  await sdk.shutdown();
115
116
  }
@@ -123,13 +124,13 @@ async function shutdown() {
123
124
  logger.error({ err }, "[autotel] SDK shutdown failed");
124
125
  }
125
126
  } finally {
126
- const eventsQueue = chunk3ZFDJJWZ_cjs.getEventQueue();
127
+ const eventsQueue = chunkAXNPD6XW_cjs.getEventQueue();
127
128
  if (eventsQueue && typeof eventsQueue.cleanup === "function") {
128
129
  eventsQueue.cleanup();
129
130
  }
130
- chunkMSUHW2I4_cjs.resetEvents();
131
+ chunkCZR7PJUZ_cjs.resetEvents();
131
132
  chunkTC5ZPWM4_cjs.resetMetrics();
132
- chunk3ZFDJJWZ_cjs.resetEventQueue();
133
+ chunkAXNPD6XW_cjs.resetEventQueue();
133
134
  }
134
135
  if (shutdownError) {
135
136
  throw shutdownError;
@@ -144,7 +145,7 @@ function registerShutdownHooks() {
144
145
  if (shuttingDown) return;
145
146
  shuttingDown = true;
146
147
  if (process.env.NODE_ENV !== "test") {
147
- chunkHSEIUH7F_cjs.getLogger().info(
148
+ chunkPDRIJURL_cjs.getLogger().info(
148
149
  {},
149
150
  `[autotel] Received ${signal}, flushing telemetry...`
150
151
  );
@@ -152,7 +153,7 @@ function registerShutdownHooks() {
152
153
  try {
153
154
  await shutdown();
154
155
  } catch (error) {
155
- chunkHSEIUH7F_cjs.getLogger().error(
156
+ chunkPDRIJURL_cjs.getLogger().error(
156
157
  {
157
158
  err: error instanceof Error ? error : void 0
158
159
  },
@@ -233,6 +234,16 @@ function createStructuredError(input) {
233
234
  if (input.code !== void 0) error.code = input.code;
234
235
  if (input.status !== void 0) error.status = input.status;
235
236
  if (input.details !== void 0) error.details = input.details;
237
+ error.toString = () => {
238
+ const lines = [`${error.name}: ${error.message}`];
239
+ if (error.why) lines.push(` Why: ${error.why}`);
240
+ if (error.fix) lines.push(` Fix: ${error.fix}`);
241
+ if (error.link) lines.push(` Link: ${error.link}`);
242
+ if (error.code !== void 0) lines.push(` Code: ${error.code}`);
243
+ if (error.status !== void 0) lines.push(` Status: ${error.status}`);
244
+ if (error.cause) lines.push(` Caused by: ${error.cause}`);
245
+ return lines.join("\n");
246
+ };
236
247
  return error;
237
248
  }
238
249
  function getStructuredErrorAttributes(error) {
@@ -269,12 +280,18 @@ function recordStructuredError(ctx2, error) {
269
280
  }
270
281
 
271
282
  // src/request-logger.ts
283
+ var requestContextStore = new async_hooks.AsyncLocalStorage();
284
+ function runWithRequestContext(ctx2, fn) {
285
+ return requestContextStore.run(ctx2, fn);
286
+ }
272
287
  function resolveContext(ctx2) {
273
288
  if (ctx2) return ctx2;
289
+ const stored = requestContextStore.getStore();
290
+ if (stored) return stored;
274
291
  const span2 = api.trace.getActiveSpan();
275
292
  if (!span2) {
276
293
  throw new Error(
277
- "[autotel] getRequestLogger() requires an active span. Wrap your handler with trace()."
294
+ "[autotel] getRequestLogger() requires an active span or runWithRequestContext(). Wrap your handler with trace() or use runWithRequestContext()."
278
295
  );
279
296
  }
280
297
  return chunkW4EUTSB2_cjs.createTraceContext(span2);
@@ -367,19 +384,19 @@ Object.defineProperty(exports, "createDrainPipeline", {
367
384
  });
368
385
  Object.defineProperty(exports, "getCurrentWorkflowContext", {
369
386
  enumerable: true,
370
- get: function () { return chunkBSZP4URK_cjs.getCurrentWorkflowContext; }
387
+ get: function () { return chunkCLR5RQW4_cjs.getCurrentWorkflowContext; }
371
388
  });
372
389
  Object.defineProperty(exports, "isInWorkflow", {
373
390
  enumerable: true,
374
- get: function () { return chunkBSZP4URK_cjs.isInWorkflow; }
391
+ get: function () { return chunkCLR5RQW4_cjs.isInWorkflow; }
375
392
  });
376
393
  Object.defineProperty(exports, "traceStep", {
377
394
  enumerable: true,
378
- get: function () { return chunkBSZP4URK_cjs.traceStep; }
395
+ get: function () { return chunkCLR5RQW4_cjs.traceStep; }
379
396
  });
380
397
  Object.defineProperty(exports, "traceWorkflow", {
381
398
  enumerable: true,
382
- get: function () { return chunkBSZP4URK_cjs.traceWorkflow; }
399
+ get: function () { return chunkCLR5RQW4_cjs.traceWorkflow; }
383
400
  });
384
401
  Object.defineProperty(exports, "attrs", {
385
402
  enumerable: true,
@@ -471,11 +488,11 @@ Object.defineProperty(exports, "parseError", {
471
488
  });
472
489
  Object.defineProperty(exports, "traceConsumer", {
473
490
  enumerable: true,
474
- get: function () { return chunk4RZ4JUBY_cjs.traceConsumer; }
491
+ get: function () { return chunkW6U2BUHU_cjs.traceConsumer; }
475
492
  });
476
493
  Object.defineProperty(exports, "traceProducer", {
477
494
  enumerable: true,
478
- get: function () { return chunk4RZ4JUBY_cjs.traceProducer; }
495
+ get: function () { return chunkW6U2BUHU_cjs.traceProducer; }
479
496
  });
480
497
  Object.defineProperty(exports, "BusinessBaggage", {
481
498
  enumerable: true,
@@ -519,55 +536,55 @@ Object.defineProperty(exports, "getMeter", {
519
536
  });
520
537
  Object.defineProperty(exports, "traceDB", {
521
538
  enumerable: true,
522
- get: function () { return chunkAXFWWJF3_cjs.traceDB; }
539
+ get: function () { return chunkCSG2D3BZ_cjs.traceDB; }
523
540
  });
524
541
  Object.defineProperty(exports, "traceHTTP", {
525
542
  enumerable: true,
526
- get: function () { return chunkAXFWWJF3_cjs.traceHTTP; }
543
+ get: function () { return chunkCSG2D3BZ_cjs.traceHTTP; }
527
544
  });
528
545
  Object.defineProperty(exports, "traceLLM", {
529
546
  enumerable: true,
530
- get: function () { return chunkAXFWWJF3_cjs.traceLLM; }
547
+ get: function () { return chunkCSG2D3BZ_cjs.traceLLM; }
531
548
  });
532
549
  Object.defineProperty(exports, "traceMessaging", {
533
550
  enumerable: true,
534
- get: function () { return chunkAXFWWJF3_cjs.traceMessaging; }
551
+ get: function () { return chunkCSG2D3BZ_cjs.traceMessaging; }
535
552
  });
536
553
  Object.defineProperty(exports, "ctx", {
537
554
  enumerable: true,
538
- get: function () { return chunk3ZFDJJWZ_cjs.ctx; }
555
+ get: function () { return chunkAXNPD6XW_cjs.ctx; }
539
556
  });
540
557
  Object.defineProperty(exports, "getEventQueue", {
541
558
  enumerable: true,
542
- get: function () { return chunk3ZFDJJWZ_cjs.getEventQueue; }
559
+ get: function () { return chunkAXNPD6XW_cjs.getEventQueue; }
543
560
  });
544
561
  Object.defineProperty(exports, "instrument", {
545
562
  enumerable: true,
546
- get: function () { return chunk3ZFDJJWZ_cjs.instrument; }
563
+ get: function () { return chunkAXNPD6XW_cjs.instrument; }
547
564
  });
548
565
  Object.defineProperty(exports, "span", {
549
566
  enumerable: true,
550
- get: function () { return chunk3ZFDJJWZ_cjs.span; }
567
+ get: function () { return chunkAXNPD6XW_cjs.span; }
551
568
  });
552
569
  Object.defineProperty(exports, "trace", {
553
570
  enumerable: true,
554
- get: function () { return chunk3ZFDJJWZ_cjs.trace; }
571
+ get: function () { return chunkAXNPD6XW_cjs.trace; }
555
572
  });
556
573
  Object.defineProperty(exports, "track", {
557
574
  enumerable: true,
558
- get: function () { return chunk3ZFDJJWZ_cjs.track; }
575
+ get: function () { return chunkAXNPD6XW_cjs.track; }
559
576
  });
560
577
  Object.defineProperty(exports, "withBaggage", {
561
578
  enumerable: true,
562
- get: function () { return chunk3ZFDJJWZ_cjs.withBaggage; }
579
+ get: function () { return chunkAXNPD6XW_cjs.withBaggage; }
563
580
  });
564
581
  Object.defineProperty(exports, "withNewContext", {
565
582
  enumerable: true,
566
- get: function () { return chunk3ZFDJJWZ_cjs.withNewContext; }
583
+ get: function () { return chunkAXNPD6XW_cjs.withNewContext; }
567
584
  });
568
585
  Object.defineProperty(exports, "withTracing", {
569
586
  enumerable: true,
570
- get: function () { return chunk3ZFDJJWZ_cjs.withTracing; }
587
+ get: function () { return chunkAXNPD6XW_cjs.withTracing; }
571
588
  });
572
589
  Object.defineProperty(exports, "defineBaggageSchema", {
573
590
  enumerable: true,
@@ -619,15 +636,15 @@ Object.defineProperty(exports, "runWithSpan", {
619
636
  });
620
637
  Object.defineProperty(exports, "Event", {
621
638
  enumerable: true,
622
- get: function () { return chunkMSUHW2I4_cjs.Event; }
639
+ get: function () { return chunkCZR7PJUZ_cjs.Event; }
623
640
  });
624
641
  Object.defineProperty(exports, "getEvents", {
625
642
  enumerable: true,
626
- get: function () { return chunkMSUHW2I4_cjs.getEvents; }
643
+ get: function () { return chunkCZR7PJUZ_cjs.getEvents; }
627
644
  });
628
645
  Object.defineProperty(exports, "resetEvents", {
629
646
  enumerable: true,
630
- get: function () { return chunkMSUHW2I4_cjs.resetEvents; }
647
+ get: function () { return chunkCZR7PJUZ_cjs.resetEvents; }
631
648
  });
632
649
  Object.defineProperty(exports, "getOperationContext", {
633
650
  enumerable: true,
@@ -667,11 +684,15 @@ Object.defineProperty(exports, "setCorrelationIdInBaggage", {
667
684
  });
668
685
  Object.defineProperty(exports, "BaggageSpanProcessor", {
669
686
  enumerable: true,
670
- get: function () { return chunkHSEIUH7F_cjs.BaggageSpanProcessor; }
687
+ get: function () { return chunkPDRIJURL_cjs.BaggageSpanProcessor; }
688
+ });
689
+ Object.defineProperty(exports, "createStringRedactor", {
690
+ enumerable: true,
691
+ get: function () { return chunkPDRIJURL_cjs.createStringRedactor; }
671
692
  });
672
693
  Object.defineProperty(exports, "init", {
673
694
  enumerable: true,
674
- get: function () { return chunkHSEIUH7F_cjs.init; }
695
+ get: function () { return chunkPDRIJURL_cjs.init; }
675
696
  });
676
697
  Object.defineProperty(exports, "FilteringSpanProcessor", {
677
698
  enumerable: true,
@@ -779,6 +800,7 @@ exports.flush = flush;
779
800
  exports.getRequestLogger = getRequestLogger;
780
801
  exports.getStructuredErrorAttributes = getStructuredErrorAttributes;
781
802
  exports.recordStructuredError = recordStructuredError;
803
+ exports.runWithRequestContext = runWithRequestContext;
782
804
  exports.shutdown = shutdown;
783
805
  exports.toAttributeValue = toAttributeValue;
784
806
  //# sourceMappingURL=index.cjs.map