@wickdninja/sweny-providers 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +259 -0
  3. package/dist/access/allow-all.d.ts +3 -0
  4. package/dist/access/allow-all.d.ts.map +1 -0
  5. package/dist/access/allow-all.js +19 -0
  6. package/dist/access/allow-all.js.map +1 -0
  7. package/dist/access/index.d.ts +5 -0
  8. package/dist/access/index.d.ts.map +1 -0
  9. package/dist/access/index.js +4 -0
  10. package/dist/access/index.js.map +1 -0
  11. package/dist/access/role-based.d.ts +8 -0
  12. package/dist/access/role-based.d.ts.map +1 -0
  13. package/dist/access/role-based.js +42 -0
  14. package/dist/access/role-based.js.map +1 -0
  15. package/dist/access/types.d.ts +41 -0
  16. package/dist/access/types.d.ts.map +1 -0
  17. package/dist/access/types.js +20 -0
  18. package/dist/access/types.js.map +1 -0
  19. package/dist/agent-tool/factory.d.ts +4 -0
  20. package/dist/agent-tool/factory.d.ts.map +1 -0
  21. package/dist/agent-tool/factory.js +4 -0
  22. package/dist/agent-tool/factory.js.map +1 -0
  23. package/dist/agent-tool/index.d.ts +3 -0
  24. package/dist/agent-tool/index.d.ts.map +1 -0
  25. package/dist/agent-tool/index.js +2 -0
  26. package/dist/agent-tool/index.js.map +1 -0
  27. package/dist/agent-tool/types.d.ts +15 -0
  28. package/dist/agent-tool/types.d.ts.map +1 -0
  29. package/dist/agent-tool/types.js +2 -0
  30. package/dist/agent-tool/types.js.map +1 -0
  31. package/dist/auth/api-key.d.ts +6 -0
  32. package/dist/auth/api-key.d.ts.map +1 -0
  33. package/dist/auth/api-key.js +36 -0
  34. package/dist/auth/api-key.js.map +1 -0
  35. package/dist/auth/index.d.ts +4 -0
  36. package/dist/auth/index.d.ts.map +1 -0
  37. package/dist/auth/index.js +3 -0
  38. package/dist/auth/index.js.map +1 -0
  39. package/dist/auth/no-auth.d.ts +3 -0
  40. package/dist/auth/no-auth.d.ts.map +1 -0
  41. package/dist/auth/no-auth.js +21 -0
  42. package/dist/auth/no-auth.js.map +1 -0
  43. package/dist/auth/types.d.ts +58 -0
  44. package/dist/auth/types.d.ts.map +1 -0
  45. package/dist/auth/types.js +2 -0
  46. package/dist/auth/types.js.map +1 -0
  47. package/dist/coding-agent/claude-code.d.ts +8 -0
  48. package/dist/coding-agent/claude-code.d.ts.map +1 -0
  49. package/dist/coding-agent/claude-code.js +37 -0
  50. package/dist/coding-agent/claude-code.js.map +1 -0
  51. package/dist/coding-agent/index.d.ts +4 -0
  52. package/dist/coding-agent/index.d.ts.map +1 -0
  53. package/dist/coding-agent/index.js +2 -0
  54. package/dist/coding-agent/index.js.map +1 -0
  55. package/dist/coding-agent/types.d.ts +10 -0
  56. package/dist/coding-agent/types.d.ts.map +1 -0
  57. package/dist/coding-agent/types.js +2 -0
  58. package/dist/coding-agent/types.js.map +1 -0
  59. package/dist/credential-vault/aws-secrets-manager.d.ts +19 -0
  60. package/dist/credential-vault/aws-secrets-manager.d.ts.map +1 -0
  61. package/dist/credential-vault/aws-secrets-manager.js +96 -0
  62. package/dist/credential-vault/aws-secrets-manager.js.map +1 -0
  63. package/dist/credential-vault/env-vault.d.ts +15 -0
  64. package/dist/credential-vault/env-vault.d.ts.map +1 -0
  65. package/dist/credential-vault/env-vault.js +25 -0
  66. package/dist/credential-vault/env-vault.js.map +1 -0
  67. package/dist/credential-vault/index.d.ts +6 -0
  68. package/dist/credential-vault/index.d.ts.map +1 -0
  69. package/dist/credential-vault/index.js +3 -0
  70. package/dist/credential-vault/index.js.map +1 -0
  71. package/dist/credential-vault/types.d.ts +30 -0
  72. package/dist/credential-vault/types.d.ts.map +1 -0
  73. package/dist/credential-vault/types.js +2 -0
  74. package/dist/credential-vault/types.js.map +1 -0
  75. package/dist/errors.d.ts +18 -0
  76. package/dist/errors.d.ts.map +1 -0
  77. package/dist/errors.js +35 -0
  78. package/dist/errors.js.map +1 -0
  79. package/dist/incident/index.d.ts +4 -0
  80. package/dist/incident/index.d.ts.map +1 -0
  81. package/dist/incident/index.js +3 -0
  82. package/dist/incident/index.js.map +1 -0
  83. package/dist/incident/opsgenie.d.ts +19 -0
  84. package/dist/incident/opsgenie.d.ts.map +1 -0
  85. package/dist/incident/opsgenie.js +102 -0
  86. package/dist/incident/opsgenie.js.map +1 -0
  87. package/dist/incident/pagerduty.d.ts +19 -0
  88. package/dist/incident/pagerduty.d.ts.map +1 -0
  89. package/dist/incident/pagerduty.js +112 -0
  90. package/dist/incident/pagerduty.js.map +1 -0
  91. package/dist/incident/types.d.ts +67 -0
  92. package/dist/incident/types.d.ts.map +1 -0
  93. package/dist/incident/types.js +2 -0
  94. package/dist/incident/types.js.map +1 -0
  95. package/dist/index.d.ts +28 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +16 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/issue-tracking/github-issues.d.ts +22 -0
  100. package/dist/issue-tracking/github-issues.d.ts.map +1 -0
  101. package/dist/issue-tracking/github-issues.js +134 -0
  102. package/dist/issue-tracking/github-issues.js.map +1 -0
  103. package/dist/issue-tracking/index.d.ts +6 -0
  104. package/dist/issue-tracking/index.d.ts.map +1 -0
  105. package/dist/issue-tracking/index.js +5 -0
  106. package/dist/issue-tracking/index.js.map +1 -0
  107. package/dist/issue-tracking/jira.d.ts +22 -0
  108. package/dist/issue-tracking/jira.d.ts.map +1 -0
  109. package/dist/issue-tracking/jira.js +224 -0
  110. package/dist/issue-tracking/jira.js.map +1 -0
  111. package/dist/issue-tracking/linear.d.ts +16 -0
  112. package/dist/issue-tracking/linear.d.ts.map +1 -0
  113. package/dist/issue-tracking/linear.js +309 -0
  114. package/dist/issue-tracking/linear.js.map +1 -0
  115. package/dist/issue-tracking/types.d.ts +163 -0
  116. package/dist/issue-tracking/types.d.ts.map +1 -0
  117. package/dist/issue-tracking/types.js +28 -0
  118. package/dist/issue-tracking/types.js.map +1 -0
  119. package/dist/logger.d.ts +8 -0
  120. package/dist/logger.d.ts.map +1 -0
  121. package/dist/logger.js +7 -0
  122. package/dist/logger.js.map +1 -0
  123. package/dist/messaging/index.d.ts +6 -0
  124. package/dist/messaging/index.d.ts.map +1 -0
  125. package/dist/messaging/index.js +3 -0
  126. package/dist/messaging/index.js.map +1 -0
  127. package/dist/messaging/slack.d.ts +8 -0
  128. package/dist/messaging/slack.d.ts.map +1 -0
  129. package/dist/messaging/slack.js +35 -0
  130. package/dist/messaging/slack.js.map +1 -0
  131. package/dist/messaging/teams.d.ts +22 -0
  132. package/dist/messaging/teams.d.ts.map +1 -0
  133. package/dist/messaging/teams.js +124 -0
  134. package/dist/messaging/teams.js.map +1 -0
  135. package/dist/messaging/types.d.ts +30 -0
  136. package/dist/messaging/types.d.ts.map +1 -0
  137. package/dist/messaging/types.js +2 -0
  138. package/dist/messaging/types.js.map +1 -0
  139. package/dist/notification/discord-webhook.d.ts +16 -0
  140. package/dist/notification/discord-webhook.d.ts.map +1 -0
  141. package/dist/notification/discord-webhook.js +33 -0
  142. package/dist/notification/discord-webhook.js.map +1 -0
  143. package/dist/notification/email.d.ts +22 -0
  144. package/dist/notification/email.d.ts.map +1 -0
  145. package/dist/notification/email.js +54 -0
  146. package/dist/notification/email.js.map +1 -0
  147. package/dist/notification/github-summary.d.ts +13 -0
  148. package/dist/notification/github-summary.d.ts.map +1 -0
  149. package/dist/notification/github-summary.js +25 -0
  150. package/dist/notification/github-summary.js.map +1 -0
  151. package/dist/notification/index.d.ts +8 -0
  152. package/dist/notification/index.d.ts.map +1 -0
  153. package/dist/notification/index.js +7 -0
  154. package/dist/notification/index.js.map +1 -0
  155. package/dist/notification/slack-webhook.d.ts +16 -0
  156. package/dist/notification/slack-webhook.d.ts.map +1 -0
  157. package/dist/notification/slack-webhook.js +31 -0
  158. package/dist/notification/slack-webhook.js.map +1 -0
  159. package/dist/notification/teams-webhook.d.ts +16 -0
  160. package/dist/notification/teams-webhook.d.ts.map +1 -0
  161. package/dist/notification/teams-webhook.js +60 -0
  162. package/dist/notification/teams-webhook.js.map +1 -0
  163. package/dist/notification/types.d.ts +18 -0
  164. package/dist/notification/types.d.ts.map +1 -0
  165. package/dist/notification/types.js +2 -0
  166. package/dist/notification/types.js.map +1 -0
  167. package/dist/notification/webhook.d.ts +28 -0
  168. package/dist/notification/webhook.d.ts.map +1 -0
  169. package/dist/notification/webhook.js +59 -0
  170. package/dist/notification/webhook.js.map +1 -0
  171. package/dist/observability/cloudwatch.d.ts +19 -0
  172. package/dist/observability/cloudwatch.d.ts.map +1 -0
  173. package/dist/observability/cloudwatch.js +181 -0
  174. package/dist/observability/cloudwatch.js.map +1 -0
  175. package/dist/observability/datadog.d.ts +22 -0
  176. package/dist/observability/datadog.d.ts.map +1 -0
  177. package/dist/observability/datadog.js +137 -0
  178. package/dist/observability/datadog.js.map +1 -0
  179. package/dist/observability/elastic.d.ts +42 -0
  180. package/dist/observability/elastic.d.ts.map +1 -0
  181. package/dist/observability/elastic.js +239 -0
  182. package/dist/observability/elastic.js.map +1 -0
  183. package/dist/observability/index.d.ts +9 -0
  184. package/dist/observability/index.d.ts.map +1 -0
  185. package/dist/observability/index.js +8 -0
  186. package/dist/observability/index.js.map +1 -0
  187. package/dist/observability/loki.d.ts +22 -0
  188. package/dist/observability/loki.d.ts.map +1 -0
  189. package/dist/observability/loki.js +203 -0
  190. package/dist/observability/loki.js.map +1 -0
  191. package/dist/observability/newrelic.d.ts +22 -0
  192. package/dist/observability/newrelic.d.ts.map +1 -0
  193. package/dist/observability/newrelic.js +145 -0
  194. package/dist/observability/newrelic.js.map +1 -0
  195. package/dist/observability/sentry.d.ts +25 -0
  196. package/dist/observability/sentry.d.ts.map +1 -0
  197. package/dist/observability/sentry.js +149 -0
  198. package/dist/observability/sentry.js.map +1 -0
  199. package/dist/observability/splunk.d.ts +22 -0
  200. package/dist/observability/splunk.d.ts.map +1 -0
  201. package/dist/observability/splunk.js +176 -0
  202. package/dist/observability/splunk.js.map +1 -0
  203. package/dist/observability/types.d.ts +54 -0
  204. package/dist/observability/types.d.ts.map +1 -0
  205. package/dist/observability/types.js +2 -0
  206. package/dist/observability/types.js.map +1 -0
  207. package/dist/source-control/github.d.ts +11 -0
  208. package/dist/source-control/github.d.ts.map +1 -0
  209. package/dist/source-control/github.js +161 -0
  210. package/dist/source-control/github.js.map +1 -0
  211. package/dist/source-control/gitlab.d.ts +25 -0
  212. package/dist/source-control/gitlab.d.ts.map +1 -0
  213. package/dist/source-control/gitlab.js +223 -0
  214. package/dist/source-control/gitlab.js.map +1 -0
  215. package/dist/source-control/index.d.ts +6 -0
  216. package/dist/source-control/index.d.ts.map +1 -0
  217. package/dist/source-control/index.js +3 -0
  218. package/dist/source-control/index.js.map +1 -0
  219. package/dist/source-control/types.d.ts +115 -0
  220. package/dist/source-control/types.d.ts.map +1 -0
  221. package/dist/source-control/types.js +2 -0
  222. package/dist/source-control/types.js.map +1 -0
  223. package/dist/storage/csi.d.ts +36 -0
  224. package/dist/storage/csi.d.ts.map +1 -0
  225. package/dist/storage/csi.js +39 -0
  226. package/dist/storage/csi.js.map +1 -0
  227. package/dist/storage/fs.d.ts +5 -0
  228. package/dist/storage/fs.d.ts.map +1 -0
  229. package/dist/storage/fs.js +11 -0
  230. package/dist/storage/fs.js.map +1 -0
  231. package/dist/storage/index.d.ts +13 -0
  232. package/dist/storage/index.d.ts.map +1 -0
  233. package/dist/storage/index.js +14 -0
  234. package/dist/storage/index.js.map +1 -0
  235. package/dist/storage/memory/fs.d.ts +15 -0
  236. package/dist/storage/memory/fs.d.ts.map +1 -0
  237. package/dist/storage/memory/fs.js +65 -0
  238. package/dist/storage/memory/fs.js.map +1 -0
  239. package/dist/storage/memory/s3.d.ts +17 -0
  240. package/dist/storage/memory/s3.d.ts.map +1 -0
  241. package/dist/storage/memory/s3.js +77 -0
  242. package/dist/storage/memory/s3.js.map +1 -0
  243. package/dist/storage/s3.d.ts +7 -0
  244. package/dist/storage/s3.d.ts.map +1 -0
  245. package/dist/storage/s3.js +12 -0
  246. package/dist/storage/s3.js.map +1 -0
  247. package/dist/storage/session/fs.d.ts +16 -0
  248. package/dist/storage/session/fs.d.ts.map +1 -0
  249. package/dist/storage/session/fs.js +81 -0
  250. package/dist/storage/session/fs.js.map +1 -0
  251. package/dist/storage/session/s3.d.ts +18 -0
  252. package/dist/storage/session/s3.d.ts.map +1 -0
  253. package/dist/storage/session/s3.js +121 -0
  254. package/dist/storage/session/s3.js.map +1 -0
  255. package/dist/storage/types.d.ts +206 -0
  256. package/dist/storage/types.d.ts.map +1 -0
  257. package/dist/storage/types.js +10 -0
  258. package/dist/storage/types.js.map +1 -0
  259. package/dist/storage/workspace/fs.d.ts +18 -0
  260. package/dist/storage/workspace/fs.d.ts.map +1 -0
  261. package/dist/storage/workspace/fs.js +153 -0
  262. package/dist/storage/workspace/fs.js.map +1 -0
  263. package/dist/storage/workspace/s3.d.ts +20 -0
  264. package/dist/storage/workspace/s3.d.ts.map +1 -0
  265. package/dist/storage/workspace/s3.js +180 -0
  266. package/dist/storage/workspace/s3.js.map +1 -0
  267. package/package.json +134 -0
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ import type { Logger } from "../logger.js";
3
+ import type { ObservabilityProvider } from "./types.js";
4
+ export declare const datadogConfigSchema: z.ZodObject<{
5
+ apiKey: z.ZodString;
6
+ appKey: z.ZodString;
7
+ site: z.ZodDefault<z.ZodString>;
8
+ logger: z.ZodOptional<z.ZodType<Logger, z.ZodTypeDef, Logger>>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ apiKey: string;
11
+ appKey: string;
12
+ site: string;
13
+ logger?: Logger | undefined;
14
+ }, {
15
+ apiKey: string;
16
+ appKey: string;
17
+ site?: string | undefined;
18
+ logger?: Logger | undefined;
19
+ }>;
20
+ export type DatadogConfig = z.infer<typeof datadogConfigSchema>;
21
+ export declare function datadog(config: DatadogConfig): ObservabilityProvider;
22
+ //# sourceMappingURL=datadog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datadog.d.ts","sourceRoot":"","sources":["../../src/observability/datadog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,qBAAqB,EAA8C,MAAM,YAAY,CAAC;AAEpG,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,qBAAqB,CAGpE"}
@@ -0,0 +1,137 @@
1
+ import { z } from "zod";
2
+ import { consoleLogger } from "../logger.js";
3
+ export const datadogConfigSchema = z.object({
4
+ apiKey: z.string().min(1, "Datadog API key is required"),
5
+ appKey: z.string().min(1, "Datadog Application key is required"),
6
+ site: z.string().default("datadoghq.com"),
7
+ logger: z.custom().optional(),
8
+ });
9
+ export function datadog(config) {
10
+ const parsed = datadogConfigSchema.parse(config);
11
+ return new DatadogProvider(parsed);
12
+ }
13
+ class DatadogProvider {
14
+ apiKey;
15
+ appKey;
16
+ site;
17
+ log;
18
+ constructor(config) {
19
+ this.apiKey = config.apiKey;
20
+ this.appKey = config.appKey;
21
+ this.site = config.site;
22
+ this.log = config.logger ?? consoleLogger;
23
+ }
24
+ async request(path, body) {
25
+ const url = `https://api.${this.site}${path}`;
26
+ const response = await fetch(url, {
27
+ method: "POST",
28
+ headers: {
29
+ "Content-Type": "application/json",
30
+ "DD-API-KEY": this.apiKey,
31
+ "DD-APPLICATION-KEY": this.appKey,
32
+ },
33
+ body: JSON.stringify(body),
34
+ });
35
+ if (!response.ok) {
36
+ throw new Error(`Datadog API error: ${response.status} ${response.statusText}`);
37
+ }
38
+ return (await response.json());
39
+ }
40
+ async verifyAccess() {
41
+ this.log.info(`Verifying Datadog access (site: ${this.site})`);
42
+ await this.request("/api/v2/logs/analytics/aggregate", {
43
+ filter: { query: "*", from: "now-5m", to: "now" },
44
+ compute: [{ type: "total", aggregation: "count" }],
45
+ });
46
+ this.log.info("Datadog API access verified");
47
+ }
48
+ async queryLogs(opts) {
49
+ const query = `service:${opts.serviceFilter} status:${opts.severity}`;
50
+ this.log.info(`Querying Datadog logs: ${query} (range: ${opts.timeRange})`);
51
+ const result = await this.request("/api/v2/logs/events/search", {
52
+ filter: { query, from: `now-${opts.timeRange}`, to: "now" },
53
+ sort: "-timestamp",
54
+ page: { limit: 100 },
55
+ });
56
+ const logs = (result.data || []).map((entry) => ({
57
+ timestamp: entry.attributes?.timestamp || "",
58
+ service: entry.attributes?.service || "",
59
+ level: entry.attributes?.status || "",
60
+ message: entry.attributes?.message || "",
61
+ attributes: entry.attributes?.attributes || {},
62
+ }));
63
+ this.log.info(`Found ${logs.length} ${opts.severity} logs for ${opts.serviceFilter} in last ${opts.timeRange}`);
64
+ return logs;
65
+ }
66
+ getAgentEnv() {
67
+ return {
68
+ DD_API_KEY: this.apiKey,
69
+ DD_APP_KEY: this.appKey,
70
+ DD_SITE: this.site,
71
+ };
72
+ }
73
+ getPromptInstructions() {
74
+ return `### Datadog Logs API
75
+ - \`DD_API_KEY\` - API key (use in DD-API-KEY header)
76
+ - \`DD_APP_KEY\` - Application key (use in DD-APPLICATION-KEY header)
77
+ - \`DD_SITE\` - Datadog site (${this.site})
78
+
79
+ **DO NOT make up data** - only use real data from APIs. If no data, report that honestly.
80
+
81
+ Investigate logs from Datadog across **BOTH production AND staging environments** to find bugs and issues.
82
+ You have DIRECT ACCESS to Datadog's Logs API via curl commands.
83
+
84
+ **Key Insight**: Catching issues in staging BEFORE they hit production is extremely valuable!
85
+ - Issues in staging only → Fix before users are affected
86
+ - Issues in both environments → Critical, affects users now
87
+ - Issues in production only → May be load/scale related
88
+
89
+ Use these environment variables in your curl commands:
90
+ - \`DD_API_KEY\` - API key (use in DD-API-KEY header)
91
+ - \`DD_APP_KEY\` - Application key (use in DD-APPLICATION-KEY header)
92
+ - \`DD_SITE\` - Datadog site (${this.site})
93
+
94
+ #### Example: Get error counts by service
95
+ \`\`\`bash
96
+ curl -s -X POST "https://api.\${DD_SITE}/api/v2/logs/analytics/aggregate" \\
97
+ -H "Content-Type: application/json" \\
98
+ -H "DD-API-KEY: \${DD_API_KEY}" \\
99
+ -H "DD-APPLICATION-KEY: \${DD_APP_KEY}" \\
100
+ -d '{"filter":{"query":"service:* status:error","from":"now-1h","to":"now"},"compute":[{"type":"total","aggregation":"count"}],"group_by":[{"facet":"service","limit":20,"sort":{"type":"measure","aggregation":"count","order":"desc"}}]}'
101
+ \`\`\`
102
+
103
+ #### Example: Get recent error logs
104
+ \`\`\`bash
105
+ curl -s -X POST "https://api.\${DD_SITE}/api/v2/logs/events/search" \\
106
+ -H "Content-Type: application/json" \\
107
+ -H "DD-API-KEY: \${DD_API_KEY}" \\
108
+ -H "DD-APPLICATION-KEY: \${DD_APP_KEY}" \\
109
+ -d '{"filter":{"query":"service:* status:error","from":"now-1h","to":"now"},"sort":"-timestamp","page":{"limit":100}}'
110
+ \`\`\``;
111
+ }
112
+ async aggregate(opts) {
113
+ this.log.info(`Aggregating Datadog errors for ${opts.serviceFilter} (range: ${opts.timeRange})`);
114
+ const result = await this.request("/api/v2/logs/analytics/aggregate", {
115
+ filter: {
116
+ query: `service:${opts.serviceFilter} status:error`,
117
+ from: `now-${opts.timeRange}`,
118
+ to: "now",
119
+ },
120
+ compute: [{ type: "total", aggregation: "count" }],
121
+ group_by: [
122
+ {
123
+ facet: "service",
124
+ limit: 20,
125
+ sort: { type: "measure", aggregation: "count", order: "desc" },
126
+ },
127
+ ],
128
+ });
129
+ const groups = (result.data?.buckets || []).map((bucket) => ({
130
+ service: bucket.by?.service || "unknown",
131
+ count: bucket.computes?.c0 || 0,
132
+ }));
133
+ this.log.info(`Aggregated ${groups.length} service groups`);
134
+ return groups;
135
+ }
136
+ }
137
+ //# sourceMappingURL=datadog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datadog.js","sourceRoot":"","sources":["../../src/observability/datadog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ import type { Logger } from "../logger.js";
3
+ import type { ObservabilityProvider } from "./types.js";
4
+ export declare const elasticConfigSchema: z.ZodEffects<z.ZodObject<{
5
+ baseUrl: z.ZodString;
6
+ apiKey: z.ZodOptional<z.ZodString>;
7
+ username: z.ZodOptional<z.ZodString>;
8
+ password: z.ZodOptional<z.ZodString>;
9
+ index: z.ZodDefault<z.ZodString>;
10
+ logger: z.ZodOptional<z.ZodType<Logger, z.ZodTypeDef, Logger>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ baseUrl: string;
13
+ index: string;
14
+ apiKey?: string | undefined;
15
+ logger?: Logger | undefined;
16
+ username?: string | undefined;
17
+ password?: string | undefined;
18
+ }, {
19
+ baseUrl: string;
20
+ apiKey?: string | undefined;
21
+ logger?: Logger | undefined;
22
+ index?: string | undefined;
23
+ username?: string | undefined;
24
+ password?: string | undefined;
25
+ }>, {
26
+ baseUrl: string;
27
+ index: string;
28
+ apiKey?: string | undefined;
29
+ logger?: Logger | undefined;
30
+ username?: string | undefined;
31
+ password?: string | undefined;
32
+ }, {
33
+ baseUrl: string;
34
+ apiKey?: string | undefined;
35
+ logger?: Logger | undefined;
36
+ index?: string | undefined;
37
+ username?: string | undefined;
38
+ password?: string | undefined;
39
+ }>;
40
+ export type ElasticConfig = z.infer<typeof elasticConfigSchema>;
41
+ export declare function elastic(config: ElasticConfig): ObservabilityProvider;
42
+ //# sourceMappingURL=elastic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elastic.d.ts","sourceRoot":"","sources":["../../src/observability/elastic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,qBAAqB,EAA8C,MAAM,YAAY,CAAC;AAEpG,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW5B,CAAC;AAEL,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,qBAAqB,CAGpE"}
@@ -0,0 +1,239 @@
1
+ import { z } from "zod";
2
+ import { consoleLogger } from "../logger.js";
3
+ export const elasticConfigSchema = z
4
+ .object({
5
+ baseUrl: z.string().min(1, "Elasticsearch URL is required"),
6
+ apiKey: z.string().min(1).optional(),
7
+ username: z.string().min(1).optional(),
8
+ password: z.string().min(1).optional(),
9
+ index: z.string().default("logs-*"),
10
+ logger: z.custom().optional(),
11
+ })
12
+ .refine((c) => c.apiKey || (c.username && c.password), {
13
+ message: "Either apiKey or both username and password must be provided",
14
+ });
15
+ export function elastic(config) {
16
+ const parsed = elasticConfigSchema.parse(config);
17
+ return new ElasticProvider(parsed);
18
+ }
19
+ class ElasticProvider {
20
+ baseUrl;
21
+ apiKey;
22
+ username;
23
+ password;
24
+ index;
25
+ log;
26
+ constructor(config) {
27
+ this.baseUrl = config.baseUrl.replace(/\/+$/, "");
28
+ this.apiKey = config.apiKey;
29
+ this.username = config.username;
30
+ this.password = config.password;
31
+ this.index = config.index;
32
+ this.log = config.logger ?? consoleLogger;
33
+ }
34
+ authHeaders() {
35
+ if (this.apiKey) {
36
+ return { Authorization: `ApiKey ${this.apiKey}` };
37
+ }
38
+ const encoded = Buffer.from(`${this.username}:${this.password}`).toString("base64");
39
+ return { Authorization: `Basic ${encoded}` };
40
+ }
41
+ async request(method, path, body) {
42
+ const url = `${this.baseUrl}${path}`;
43
+ const response = await fetch(url, {
44
+ method,
45
+ headers: {
46
+ "Content-Type": "application/json",
47
+ ...this.authHeaders(),
48
+ },
49
+ ...(body ? { body: JSON.stringify(body) } : {}),
50
+ });
51
+ if (!response.ok) {
52
+ const text = await response.text().catch(() => "");
53
+ throw new Error(`Elasticsearch API error: ${response.status} ${response.statusText}${text ? ` - ${text}` : ""}`);
54
+ }
55
+ return (await response.json());
56
+ }
57
+ /**
58
+ * Convert time range strings like "1h", "24h", "7d" to Elasticsearch
59
+ * date math format "now-1h", "now-24h", "now-7d".
60
+ */
61
+ toElasticRange(timeRange) {
62
+ // Already in Elasticsearch format
63
+ if (timeRange.startsWith("now-")) {
64
+ return timeRange;
65
+ }
66
+ return `now-${timeRange}`;
67
+ }
68
+ async verifyAccess() {
69
+ this.log.info(`Verifying Elasticsearch access (${this.baseUrl})`);
70
+ const info = await this.request("GET", "/");
71
+ this.log.info(`Elasticsearch access verified (cluster: ${info.cluster_name ?? "unknown"}, version: ${info.version?.number ?? "unknown"})`);
72
+ }
73
+ async queryLogs(opts) {
74
+ this.log.info(`Querying Elasticsearch logs (severity: ${opts.severity}, range: ${opts.timeRange}, service: ${opts.serviceFilter})`);
75
+ const must = [
76
+ {
77
+ range: {
78
+ "@timestamp": {
79
+ gte: this.toElasticRange(opts.timeRange),
80
+ lte: "now",
81
+ },
82
+ },
83
+ },
84
+ ];
85
+ if (opts.severity && opts.severity !== "*") {
86
+ must.push({ match: { "log.level": opts.severity } });
87
+ }
88
+ if (opts.serviceFilter && opts.serviceFilter !== "*") {
89
+ must.push({
90
+ bool: {
91
+ should: [{ match: { "service.name": opts.serviceFilter } }, { match: { "host.name": opts.serviceFilter } }],
92
+ minimum_should_match: 1,
93
+ },
94
+ });
95
+ }
96
+ const result = await this.request("POST", `/${this.index}/_search`, {
97
+ size: 100,
98
+ sort: [{ "@timestamp": { order: "desc" } }],
99
+ query: {
100
+ bool: { must },
101
+ },
102
+ });
103
+ const hits = result.hits?.hits ?? [];
104
+ const logs = hits.map((hit) => {
105
+ const src = hit._source ?? {};
106
+ const service = src["service.name"] ??
107
+ (src["service"] && typeof src["service"] === "object"
108
+ ? src["service"]["name"]
109
+ : undefined) ??
110
+ src["host.name"] ??
111
+ (src["host"] && typeof src["host"] === "object"
112
+ ? src["host"]["name"]
113
+ : undefined) ??
114
+ "unknown";
115
+ const level = src["log.level"] ??
116
+ (src["log"] && typeof src["log"] === "object"
117
+ ? src["log"]["level"]
118
+ : undefined) ??
119
+ "unknown";
120
+ return {
121
+ timestamp: src["@timestamp"] ?? "",
122
+ service,
123
+ level,
124
+ message: src["message"] ?? "",
125
+ attributes: src,
126
+ };
127
+ });
128
+ this.log.info(`Found ${logs.length} log entries`);
129
+ return logs;
130
+ }
131
+ async aggregate(opts) {
132
+ this.log.info(`Aggregating Elasticsearch logs (range: ${opts.timeRange}, service: ${opts.serviceFilter})`);
133
+ const must = [
134
+ {
135
+ range: {
136
+ "@timestamp": {
137
+ gte: this.toElasticRange(opts.timeRange),
138
+ lte: "now",
139
+ },
140
+ },
141
+ },
142
+ ];
143
+ if (opts.serviceFilter && opts.serviceFilter !== "*") {
144
+ must.push({
145
+ bool: {
146
+ should: [{ match: { "service.name": opts.serviceFilter } }, { match: { "host.name": opts.serviceFilter } }],
147
+ minimum_should_match: 1,
148
+ },
149
+ });
150
+ }
151
+ const result = await this.request("POST", `/${this.index}/_search`, {
152
+ size: 0,
153
+ query: {
154
+ bool: { must },
155
+ },
156
+ aggs: {
157
+ services: {
158
+ terms: {
159
+ field: "service.keyword",
160
+ size: 50,
161
+ order: { _count: "desc" },
162
+ },
163
+ },
164
+ },
165
+ });
166
+ const buckets = result.aggregations?.services?.buckets ?? [];
167
+ const results = buckets.map((bucket) => ({
168
+ service: bucket.key,
169
+ count: bucket.doc_count,
170
+ }));
171
+ this.log.info(`Aggregated ${results.length} service groups`);
172
+ return results;
173
+ }
174
+ getAgentEnv() {
175
+ const env = {
176
+ ELASTIC_URL: this.baseUrl,
177
+ ELASTIC_INDEX: this.index,
178
+ };
179
+ if (this.apiKey) {
180
+ env.ELASTIC_API_KEY = this.apiKey;
181
+ }
182
+ else {
183
+ // Zod refine guarantees username+password exist when apiKey is absent
184
+ env.ELASTIC_USERNAME = this.username ?? "";
185
+ env.ELASTIC_PASSWORD = this.password ?? "";
186
+ }
187
+ return env;
188
+ }
189
+ getPromptInstructions() {
190
+ const authHeader = this.apiKey
191
+ ? `-H "Authorization: ApiKey \${ELASTIC_API_KEY}"`
192
+ : `-u "\${ELASTIC_USERNAME}:\${ELASTIC_PASSWORD}"`;
193
+ return `### Elasticsearch Logs API
194
+ - \`ELASTIC_URL\` - Elasticsearch base URL (${this.baseUrl})
195
+ - \`ELASTIC_INDEX\` - Index pattern (${this.index})
196
+ ${this.apiKey ? "- `ELASTIC_API_KEY` - API key for authentication" : "- `ELASTIC_USERNAME` / `ELASTIC_PASSWORD` - Basic auth credentials"}
197
+
198
+ **DO NOT make up data** - only use real data from APIs. If no data, report that honestly.
199
+
200
+ Investigate logs from Elasticsearch across **BOTH production AND staging environments** to find bugs and issues.
201
+ You have DIRECT ACCESS to Elasticsearch's REST API via curl commands.
202
+
203
+ **Key Insight**: Catching issues in staging BEFORE they hit production is extremely valuable!
204
+ - Issues in staging only -> Fix before users are affected
205
+ - Issues in both environments -> Critical, affects users now
206
+ - Issues in production only -> May be load/scale related
207
+
208
+ #### Example: Search for error logs in the last hour
209
+ \`\`\`bash
210
+ curl -s -X POST "\${ELASTIC_URL}/\${ELASTIC_INDEX}/_search" \\
211
+ -H "Content-Type: application/json" \\
212
+ ${authHeader} \\
213
+ -d '{"size":100,"sort":[{"@timestamp":{"order":"desc"}}],"query":{"bool":{"must":[{"range":{"@timestamp":{"gte":"now-1h","lte":"now"}}},{"match":{"log.level":"error"}}]}}}'
214
+ \`\`\`
215
+
216
+ #### Example: Aggregate log counts by service
217
+ \`\`\`bash
218
+ curl -s -X POST "\${ELASTIC_URL}/\${ELASTIC_INDEX}/_search" \\
219
+ -H "Content-Type: application/json" \\
220
+ ${authHeader} \\
221
+ -d '{"size":0,"query":{"bool":{"must":[{"range":{"@timestamp":{"gte":"now-24h","lte":"now"}}}]}},"aggs":{"services":{"terms":{"field":"service.keyword","size":50,"order":{"_count":"desc"}}}}}'
222
+ \`\`\`
223
+
224
+ #### Example: Filter logs by service name
225
+ \`\`\`bash
226
+ curl -s -X POST "\${ELASTIC_URL}/\${ELASTIC_INDEX}/_search" \\
227
+ -H "Content-Type: application/json" \\
228
+ ${authHeader} \\
229
+ -d '{"size":100,"sort":[{"@timestamp":{"order":"desc"}}],"query":{"bool":{"must":[{"range":{"@timestamp":{"gte":"now-1h","lte":"now"}}},{"match":{"service.name":"my-service"}}]}}}'
230
+ \`\`\`
231
+
232
+ #### Example: Get cluster health
233
+ \`\`\`bash
234
+ curl -s "\${ELASTIC_URL}/_cluster/health" \\
235
+ ${authHeader}
236
+ \`\`\``;
237
+ }
238
+ }
239
+ //# sourceMappingURL=elastic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elastic.js","sourceRoot":"","sources":["../../src/observability/elastic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,+BAA+B,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAU,CAAC,QAAQ,EAAE;CACtC,CAAC;KACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE;IACrD,OAAO,EAAE,8DAA8D;CACxE,CAAC,CAAC;AAIL,MAAM,UAAU,OAAO,CAAC,MAAqB;IAC3C,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjD,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,eAAe;IACF,OAAO,CAAS;IAChB,MAAM,CAAqB;IAC3B,QAAQ,CAAqB;IAC7B,QAAQ,CAAqB;IAC7B,KAAK,CAAS;IACd,GAAG,CAAS;IAE7B,YAAY,MAAqB;QAC/B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC;IAC5C,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACpD,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpF,OAAO,EAAE,aAAa,EAAE,SAAS,OAAO,EAAE,EAAE,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAA8B;QACnF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM;YACN,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,GAAG,IAAI,CAAC,WAAW,EAAE;aACtB;YACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnH,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,SAAiB;QACtC,kCAAkC;QAClC,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,OAAO,SAAS,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mCAAmC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QAElE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAA2D,KAAK,EAAE,GAAG,CAAC,CAAC;QAEtG,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,2CAA2C,IAAI,CAAC,YAAY,IAAI,SAAS,cAAc,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,SAAS,GAAG,CAC5H,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAqB;QACnC,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,0CAA0C,IAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,SAAS,cAAc,IAAI,CAAC,aAAa,GAAG,CACrH,CAAC;QAEF,MAAM,IAAI,GAA8B;YACtC;gBACE,KAAK,EAAE;oBACL,YAAY,EAAE;wBACZ,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;wBACxC,GAAG,EAAE,KAAK;qBACX;iBACF;aACF;SACF,CAAC;QAEF,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,EAAE,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,GAAG,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE;oBACJ,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;oBAC3G,oBAAoB,EAAE,CAAC;iBACxB;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAM9B,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,UAAU,EAAE;YACnC,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC;YAC3C,KAAK,EAAE;gBACL,IAAI,EAAE,EAAE,IAAI,EAAE;aACf;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAErC,MAAM,IAAI,GAAe,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACxC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAC9B,MAAM,OAAO,GACV,GAAG,CAAC,cAAc,CAAY;gBAC/B,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ;oBACnD,CAAC,CAAG,GAAG,CAAC,SAAS,CAA6B,CAAC,MAAM,CAAY;oBACjE,CAAC,CAAC,SAAS,CAAC;gBACb,GAAG,CAAC,WAAW,CAAY;gBAC5B,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ;oBAC7C,CAAC,CAAG,GAAG,CAAC,MAAM,CAA6B,CAAC,MAAM,CAAY;oBAC9D,CAAC,CAAC,SAAS,CAAC;gBACd,SAAS,CAAC;YACZ,MAAM,KAAK,GACR,GAAG,CAAC,WAAW,CAAY;gBAC5B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,QAAQ;oBAC3C,CAAC,CAAG,GAAG,CAAC,KAAK,CAA6B,CAAC,OAAO,CAAY;oBAC9D,CAAC,CAAC,SAAS,CAAC;gBACd,SAAS,CAAC;YAEZ,OAAO;gBACL,SAAS,EAAG,GAAG,CAAC,YAAY,CAAY,IAAI,EAAE;gBAC9C,OAAO;gBACP,KAAK;gBACL,OAAO,EAAG,GAAG,CAAC,SAAS,CAAY,IAAI,EAAE;gBACzC,UAAU,EAAE,GAAG;aAChB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,cAAc,CAAC,CAAC;QAElD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAuC;QACrD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0CAA0C,IAAI,CAAC,SAAS,cAAc,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QAE3G,MAAM,IAAI,GAA8B;YACtC;gBACE,KAAK,EAAE;oBACL,YAAY,EAAE;wBACZ,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;wBACxC,GAAG,EAAE,KAAK;qBACX;iBACF;aACF;SACF,CAAC;QAEF,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,GAAG,EAAE,CAAC;YACrD,IAAI,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE;oBACJ,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;oBAC3G,oBAAoB,EAAE,CAAC;iBACxB;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAS9B,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,UAAU,EAAE;YACnC,IAAI,EAAE,CAAC;YACP,KAAK,EAAE;gBACL,IAAI,EAAE,EAAE,IAAI,EAAE;aACf;YACD,IAAI,EAAE;gBACJ,QAAQ,EAAE;oBACR,KAAK,EAAE;wBACL,KAAK,EAAE,iBAAiB;wBACxB,IAAI,EAAE,EAAE;wBACR,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;qBAC1B;iBACF;aACF;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC;QAE7D,MAAM,OAAO,GAAsB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC1D,OAAO,EAAE,MAAM,CAAC,GAAG;YACnB,KAAK,EAAE,MAAM,CAAC,SAAS;SACxB,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAE7D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,WAAW;QACT,MAAM,GAAG,GAA2B;YAClC,WAAW,EAAE,IAAI,CAAC,OAAO;YACzB,aAAa,EAAE,IAAI,CAAC,KAAK;SAC1B,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,sEAAsE;YACtE,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC3C,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QAC7C,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,qBAAqB;QACnB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;YAC5B,CAAC,CAAC,gDAAgD;YAClD,CAAC,CAAC,gDAAgD,CAAC;QAErD,OAAO;8CACmC,IAAI,CAAC,OAAO;uCACnB,IAAI,CAAC,KAAK;EAC/C,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,oEAAoE;;;;;;;;;;;;;;;;IAgBrI,UAAU;;;;;;;;IAQV,UAAU;;;;;;;;IAQV,UAAU;;;;;;;IAOV,UAAU;OACP,CAAC;IACN,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ export type { ObservabilityProvider, LogEntry, AggregateResult, LogQueryOptions } from "./types.js";
2
+ export { datadog, datadogConfigSchema, type DatadogConfig } from "./datadog.js";
3
+ export { sentry, sentryConfigSchema, type SentryConfig } from "./sentry.js";
4
+ export { cloudwatch, cloudwatchConfigSchema, type CloudWatchConfig } from "./cloudwatch.js";
5
+ export { splunk, splunkConfigSchema, type SplunkConfig } from "./splunk.js";
6
+ export { elastic, elasticConfigSchema, type ElasticConfig } from "./elastic.js";
7
+ export { newrelic, newrelicConfigSchema, type NewRelicConfig } from "./newrelic.js";
8
+ export { loki, lokiConfigSchema, type LokiConfig } from "./loki.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,qBAAqB,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpG,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { datadog, datadogConfigSchema } from "./datadog.js";
2
+ export { sentry, sentryConfigSchema } from "./sentry.js";
3
+ export { cloudwatch, cloudwatchConfigSchema } from "./cloudwatch.js";
4
+ export { splunk, splunkConfigSchema } from "./splunk.js";
5
+ export { elastic, elasticConfigSchema } from "./elastic.js";
6
+ export { newrelic, newrelicConfigSchema } from "./newrelic.js";
7
+ export { loki, lokiConfigSchema } from "./loki.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAyB,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAuB,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAmB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { z } from "zod";
2
+ import type { Logger } from "../logger.js";
3
+ import type { ObservabilityProvider } from "./types.js";
4
+ export declare const lokiConfigSchema: z.ZodObject<{
5
+ baseUrl: z.ZodString;
6
+ apiKey: z.ZodOptional<z.ZodString>;
7
+ orgId: z.ZodOptional<z.ZodString>;
8
+ logger: z.ZodOptional<z.ZodType<Logger, z.ZodTypeDef, Logger>>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ baseUrl: string;
11
+ apiKey?: string | undefined;
12
+ logger?: Logger | undefined;
13
+ orgId?: string | undefined;
14
+ }, {
15
+ baseUrl: string;
16
+ apiKey?: string | undefined;
17
+ logger?: Logger | undefined;
18
+ orgId?: string | undefined;
19
+ }>;
20
+ export type LokiConfig = z.infer<typeof lokiConfigSchema>;
21
+ export declare function loki(config: LokiConfig): ObservabilityProvider;
22
+ //# sourceMappingURL=loki.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loki.d.ts","sourceRoot":"","sources":["../../src/observability/loki.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,qBAAqB,EAA8C,MAAM,YAAY,CAAC;AAEpG,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;EAK3B,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAM1D,wBAAgB,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,qBAAqB,CAG9D"}