@burdenoff/be-sdk 2026.510.79

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 (220) hide show
  1. package/README.md +173 -0
  2. package/configs/eslint/index.js +492 -0
  3. package/configs/tsconfig/tsconfig.json +53 -0
  4. package/dist/EventQueueFactory-6NMSGECR.js +8 -0
  5. package/dist/EventQueueFactory-6NMSGECR.js.map +1 -0
  6. package/dist/auth/index.d.ts +66 -0
  7. package/dist/auth/index.js +8 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/cache/index.d.ts +2 -0
  10. package/dist/cache/index.js +6 -0
  11. package/dist/cache/index.js.map +1 -0
  12. package/dist/captcha/index.d.ts +1 -0
  13. package/dist/captcha/index.js +4 -0
  14. package/dist/captcha/index.js.map +1 -0
  15. package/dist/chunk-2HANKZZM.js +245 -0
  16. package/dist/chunk-2HANKZZM.js.map +1 -0
  17. package/dist/chunk-2SD5L2F2.js +816 -0
  18. package/dist/chunk-2SD5L2F2.js.map +1 -0
  19. package/dist/chunk-3O2RQOPV.js +1068 -0
  20. package/dist/chunk-3O2RQOPV.js.map +1 -0
  21. package/dist/chunk-4B43DZIS.js +560 -0
  22. package/dist/chunk-4B43DZIS.js.map +1 -0
  23. package/dist/chunk-4XAEES25.js +2444 -0
  24. package/dist/chunk-4XAEES25.js.map +1 -0
  25. package/dist/chunk-4XGGWW36.js +1405 -0
  26. package/dist/chunk-4XGGWW36.js.map +1 -0
  27. package/dist/chunk-5LXDPGDH.js +245 -0
  28. package/dist/chunk-5LXDPGDH.js.map +1 -0
  29. package/dist/chunk-AI7L22ZJ.js +472 -0
  30. package/dist/chunk-AI7L22ZJ.js.map +1 -0
  31. package/dist/chunk-CBZNP6RF.js +286 -0
  32. package/dist/chunk-CBZNP6RF.js.map +1 -0
  33. package/dist/chunk-ELLX3K54.js +613 -0
  34. package/dist/chunk-ELLX3K54.js.map +1 -0
  35. package/dist/chunk-F5XEAGHQ.js +1875 -0
  36. package/dist/chunk-F5XEAGHQ.js.map +1 -0
  37. package/dist/chunk-FNZEQOJY.js +628 -0
  38. package/dist/chunk-FNZEQOJY.js.map +1 -0
  39. package/dist/chunk-GTEMQXCA.js +516 -0
  40. package/dist/chunk-GTEMQXCA.js.map +1 -0
  41. package/dist/chunk-HIWTWIGQ.js +226 -0
  42. package/dist/chunk-HIWTWIGQ.js.map +1 -0
  43. package/dist/chunk-IYE2NTRX.js +764 -0
  44. package/dist/chunk-IYE2NTRX.js.map +1 -0
  45. package/dist/chunk-J26YGR2U.js +1484 -0
  46. package/dist/chunk-J26YGR2U.js.map +1 -0
  47. package/dist/chunk-JG2FTZPI.js +509 -0
  48. package/dist/chunk-JG2FTZPI.js.map +1 -0
  49. package/dist/chunk-JVBTNSPG.js +1551 -0
  50. package/dist/chunk-JVBTNSPG.js.map +1 -0
  51. package/dist/chunk-L7ZMN2FJ.js +12 -0
  52. package/dist/chunk-L7ZMN2FJ.js.map +1 -0
  53. package/dist/chunk-M5IMU3US.js +473 -0
  54. package/dist/chunk-M5IMU3US.js.map +1 -0
  55. package/dist/chunk-MLW2HPS5.js +1267 -0
  56. package/dist/chunk-MLW2HPS5.js.map +1 -0
  57. package/dist/chunk-MNCGUYLJ.js +269 -0
  58. package/dist/chunk-MNCGUYLJ.js.map +1 -0
  59. package/dist/chunk-MOCUBSTW.js +373 -0
  60. package/dist/chunk-MOCUBSTW.js.map +1 -0
  61. package/dist/chunk-NGMEI42S.js +103 -0
  62. package/dist/chunk-NGMEI42S.js.map +1 -0
  63. package/dist/chunk-NUB5GQTU.js +270 -0
  64. package/dist/chunk-NUB5GQTU.js.map +1 -0
  65. package/dist/chunk-OVSYMNCI.js +145 -0
  66. package/dist/chunk-OVSYMNCI.js.map +1 -0
  67. package/dist/chunk-QLVKMWFA.js +94 -0
  68. package/dist/chunk-QLVKMWFA.js.map +1 -0
  69. package/dist/chunk-SAG6ZYWQ.js +89 -0
  70. package/dist/chunk-SAG6ZYWQ.js.map +1 -0
  71. package/dist/chunk-SAK2JCA7.js +198 -0
  72. package/dist/chunk-SAK2JCA7.js.map +1 -0
  73. package/dist/chunk-SBS4S2PJ.js +100 -0
  74. package/dist/chunk-SBS4S2PJ.js.map +1 -0
  75. package/dist/chunk-SNEOLWXT.js +148 -0
  76. package/dist/chunk-SNEOLWXT.js.map +1 -0
  77. package/dist/chunk-TKBD2ONF.js +564 -0
  78. package/dist/chunk-TKBD2ONF.js.map +1 -0
  79. package/dist/chunk-UBXFIIAW.js +127 -0
  80. package/dist/chunk-UBXFIIAW.js.map +1 -0
  81. package/dist/chunk-VI4VSNTI.js +57 -0
  82. package/dist/chunk-VI4VSNTI.js.map +1 -0
  83. package/dist/chunk-VWCN5PMD.js +268 -0
  84. package/dist/chunk-VWCN5PMD.js.map +1 -0
  85. package/dist/chunk-XC2YD6CF.js +913 -0
  86. package/dist/chunk-XC2YD6CF.js.map +1 -0
  87. package/dist/chunk-XE4OXN2W.js +10 -0
  88. package/dist/chunk-XE4OXN2W.js.map +1 -0
  89. package/dist/chunk-YMZEUTD2.js +110 -0
  90. package/dist/chunk-YMZEUTD2.js.map +1 -0
  91. package/dist/chunk-Z4IRLBWO.js +758 -0
  92. package/dist/chunk-Z4IRLBWO.js.map +1 -0
  93. package/dist/client/internal-client.d.ts +7 -0
  94. package/dist/client/internal-client.js +5 -0
  95. package/dist/client/internal-client.js.map +1 -0
  96. package/dist/client-CSjIrYKS.d.ts +77 -0
  97. package/dist/config-UKE2E3BW.js +4 -0
  98. package/dist/config-UKE2E3BW.js.map +1 -0
  99. package/dist/crypto/index.d.ts +1 -0
  100. package/dist/crypto/index.js +4 -0
  101. package/dist/crypto/index.js.map +1 -0
  102. package/dist/database/index.d.ts +117 -0
  103. package/dist/database/index.js +7 -0
  104. package/dist/database/index.js.map +1 -0
  105. package/dist/dataloader/index.d.ts +1 -0
  106. package/dist/dataloader/index.js +4 -0
  107. package/dist/dataloader/index.js.map +1 -0
  108. package/dist/esm-K6H7EIWK.js +1450 -0
  109. package/dist/esm-K6H7EIWK.js.map +1 -0
  110. package/dist/event-queue/index.d.ts +6 -0
  111. package/dist/event-queue/index.js +10 -0
  112. package/dist/event-queue/index.js.map +1 -0
  113. package/dist/export/index.d.ts +2 -0
  114. package/dist/export/index.js +9 -0
  115. package/dist/export/index.js.map +1 -0
  116. package/dist/feature-flags/index.d.ts +1 -0
  117. package/dist/feature-flags/index.js +4 -0
  118. package/dist/feature-flags/index.js.map +1 -0
  119. package/dist/gateway/index.d.ts +4 -0
  120. package/dist/gateway/index.js +8 -0
  121. package/dist/gateway/index.js.map +1 -0
  122. package/dist/gateway/security/index.d.ts +2 -0
  123. package/dist/gateway/security/index.js +5 -0
  124. package/dist/gateway/security/index.js.map +1 -0
  125. package/dist/graph/index.d.ts +9 -0
  126. package/dist/graph/index.js +13 -0
  127. package/dist/graph/index.js.map +1 -0
  128. package/dist/graph-emitter-Bk0FqD53.d.ts +47 -0
  129. package/dist/graphql/index.d.ts +2 -0
  130. package/dist/graphql/index.js +7 -0
  131. package/dist/graphql/index.js.map +1 -0
  132. package/dist/graphql/services/index.d.ts +24 -0
  133. package/dist/graphql/services/index.js +5 -0
  134. package/dist/graphql/services/index.js.map +1 -0
  135. package/dist/graphql-BAVrUgBF.d.ts +22 -0
  136. package/dist/i18n/index.d.ts +2 -0
  137. package/dist/i18n/index.js +5 -0
  138. package/dist/i18n/index.js.map +1 -0
  139. package/dist/i18n-DA6IPnYy.d.ts +101 -0
  140. package/dist/index-4gKQKZ2B.d.ts +71 -0
  141. package/dist/index-B18rrFru.d.ts +42 -0
  142. package/dist/index-B70b5mYS.d.ts +33 -0
  143. package/dist/index-BMq3lFjj.d.ts +247 -0
  144. package/dist/index-BODgvRtL.d.ts +316 -0
  145. package/dist/index-BS2idbnr.d.ts +874 -0
  146. package/dist/index-BV3G48cH.d.ts +124 -0
  147. package/dist/index-CHbVw5M7.d.ts +73 -0
  148. package/dist/index-Cq_xNjcv.d.ts +602 -0
  149. package/dist/index-CrQgidpx.d.ts +77 -0
  150. package/dist/index-CyVEg86m.d.ts +309 -0
  151. package/dist/index-DOcBnmMe.d.ts +166 -0
  152. package/dist/index-DSOpj8DI.d.ts +17 -0
  153. package/dist/index-DW9q22GH.d.ts +75 -0
  154. package/dist/index-DlFDFyWD.d.ts +55 -0
  155. package/dist/index-DoK0bjhH.d.ts +607 -0
  156. package/dist/index-Dtf6FBaD.d.ts +199 -0
  157. package/dist/index-KVWGHMbS.d.ts +415 -0
  158. package/dist/index-PaojfSdd.d.ts +71 -0
  159. package/dist/index-RU_M5c74.d.ts +163 -0
  160. package/dist/index-UhkH2eaB.d.ts +192 -0
  161. package/dist/index-e_18DzAg.d.ts +18 -0
  162. package/dist/index-jOuh_TKn.d.ts +59 -0
  163. package/dist/index.d.ts +584 -0
  164. package/dist/index.js +2626 -0
  165. package/dist/index.js.map +1 -0
  166. package/dist/init/index.d.ts +2 -0
  167. package/dist/init/index.js +12 -0
  168. package/dist/init/index.js.map +1 -0
  169. package/dist/instrumentation/index.d.ts +3 -0
  170. package/dist/instrumentation/index.js +5 -0
  171. package/dist/instrumentation/index.js.map +1 -0
  172. package/dist/layer/index.d.ts +2 -0
  173. package/dist/layer/index.js +6 -0
  174. package/dist/layer/index.js.map +1 -0
  175. package/dist/layer-DDip18KY.d.ts +67 -0
  176. package/dist/logger/index.d.ts +2 -0
  177. package/dist/logger/index.js +4 -0
  178. package/dist/logger/index.js.map +1 -0
  179. package/dist/middleware/index.d.ts +3 -0
  180. package/dist/middleware/index.js +5 -0
  181. package/dist/middleware/index.js.map +1 -0
  182. package/dist/notifications/index.d.ts +4 -0
  183. package/dist/notifications/index.js +7 -0
  184. package/dist/notifications/index.js.map +1 -0
  185. package/dist/observability/index.d.ts +3 -0
  186. package/dist/observability/index.js +5 -0
  187. package/dist/observability/index.js.map +1 -0
  188. package/dist/pino-logger-RYLGXPHZ.js +5 -0
  189. package/dist/pino-logger-RYLGXPHZ.js.map +1 -0
  190. package/dist/prisma/generator/index.d.ts +1 -0
  191. package/dist/prisma/generator/index.js +228 -0
  192. package/dist/prisma/generator/index.js.map +1 -0
  193. package/dist/prisma/index.d.ts +5 -0
  194. package/dist/prisma/index.js +12 -0
  195. package/dist/prisma/index.js.map +1 -0
  196. package/dist/prisma-extension-krXnYnrN.d.ts +30 -0
  197. package/dist/rbac/index.d.ts +116 -0
  198. package/dist/rbac/index.js +7 -0
  199. package/dist/rbac/index.js.map +1 -0
  200. package/dist/sdk-THO3IWEE.js +136 -0
  201. package/dist/sdk-THO3IWEE.js.map +1 -0
  202. package/dist/server/index.d.ts +359 -0
  203. package/dist/server/index.js +884 -0
  204. package/dist/server/index.js.map +1 -0
  205. package/dist/telemetry/index.d.ts +83 -0
  206. package/dist/telemetry/index.js +209 -0
  207. package/dist/telemetry/index.js.map +1 -0
  208. package/dist/temporal/index.d.ts +148 -0
  209. package/dist/temporal/index.js +6 -0
  210. package/dist/temporal/index.js.map +1 -0
  211. package/dist/tracker/index.d.ts +5 -0
  212. package/dist/tracker/index.js +9 -0
  213. package/dist/tracker/index.js.map +1 -0
  214. package/dist/types-Bo2wkjSP.d.ts +35 -0
  215. package/dist/utils/index.d.ts +1 -0
  216. package/dist/utils/index.js +4 -0
  217. package/dist/utils/index.js.map +1 -0
  218. package/dist/workspace-guard-LHBNK4TG.js +5 -0
  219. package/dist/workspace-guard-LHBNK4TG.js.map +1 -0
  220. package/package.json +241 -0
@@ -0,0 +1,3 @@
1
+ export { c as cleanupExpiredTokens, a as createSecurityPlugin } from '../index-DSOpj8DI.js';
2
+ export { C as CSPDirectives, M as MetricsMiddlewareConfig, a as MiddlewareConfig, S as SecurityMiddlewareConfig } from '../types-Bo2wkjSP.js';
3
+ import 'elysia';
@@ -0,0 +1,5 @@
1
+ export { cleanupExpiredTokens, createSecurityPlugin } from '../chunk-2HANKZZM.js';
2
+ import '../chunk-CBZNP6RF.js';
3
+ import '../chunk-XE4OXN2W.js';
4
+ //# sourceMappingURL=index.js.map
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,4 @@
1
+ import '../graphql-BAVrUgBF.js';
2
+ import '../index-CHbVw5M7.js';
3
+ export { G as GetNotificationsOptions, b as Notification, c as NotificationChannel, d as NotificationPriority, e as NotificationResponse, N as NotificationType, a as NotificationsModule, R as RecipientInput, S as SendChannelNotificationOptions, f as SendNotificationOptions, g as SendTemplateNotificationOptions, T as TenantNotificationsModule } from '../index-CyVEg86m.js';
4
+ import 'graphql-request';
@@ -0,0 +1,7 @@
1
+ export { NotificationChannel, NotificationPriority, NotificationType, NotificationsModule, TenantNotificationsModule } from '../chunk-XC2YD6CF.js';
2
+ import '../chunk-SAG6ZYWQ.js';
3
+ import '../chunk-NGMEI42S.js';
4
+ import '../chunk-CBZNP6RF.js';
5
+ import '../chunk-XE4OXN2W.js';
6
+ //# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,3 @@
1
+ export { M as Metrics, a as MetricsCollector, c as createMetricsPlugin, g as getCurrentMetrics, b as getMetricsForWindow, m as metricsCollector } from '../index-4gKQKZ2B.js';
2
+ import 'elysia';
3
+ import '../types-Bo2wkjSP.js';
@@ -0,0 +1,5 @@
1
+ export { MetricsCollector, createMetricsPlugin, getCurrentMetrics, getMetricsForWindow, metricsCollector } from '../chunk-5LXDPGDH.js';
2
+ import '../chunk-CBZNP6RF.js';
3
+ import '../chunk-XE4OXN2W.js';
4
+ //# sourceMappingURL=index.js.map
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,5 @@
1
+ export { createPinoLogger } from './chunk-SNEOLWXT.js';
2
+ import './chunk-CBZNP6RF.js';
3
+ import './chunk-XE4OXN2W.js';
4
+ //# sourceMappingURL=pino-logger-RYLGXPHZ.js.map
5
+ //# sourceMappingURL=pino-logger-RYLGXPHZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"pino-logger-RYLGXPHZ.js"}
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
@@ -0,0 +1,228 @@
1
+ #!/usr/bin/env node
2
+ import { __name } from '../../chunk-XE4OXN2W.js';
3
+ import generatorHelperPkg from '@prisma/generator-helper';
4
+ import { mkdirSync, writeFileSync } from 'fs';
5
+ import { dirname, resolve } from 'path';
6
+
7
+ var { generatorHandler } = generatorHelperPkg;
8
+ function validateOutputPath(outputPath) {
9
+ const resolvedPath = resolve(outputPath);
10
+ if (!resolvedPath.endsWith(".ts")) {
11
+ throw new Error(`Invalid output path: ${outputPath} must be a .ts file`);
12
+ }
13
+ const dangerousPaths = [
14
+ "/etc/",
15
+ "/usr/",
16
+ "/bin/",
17
+ "/sbin/",
18
+ "/var/",
19
+ "/root/",
20
+ "/boot/",
21
+ "/sys/",
22
+ "/proc/"
23
+ ];
24
+ if (dangerousPaths.some((dangerous) => resolvedPath.startsWith(dangerous))) {
25
+ throw new Error(`Invalid output path: ${outputPath} cannot write to system directories`);
26
+ }
27
+ return resolvedPath;
28
+ }
29
+ __name(validateOutputPath, "validateOutputPath");
30
+ function safeMkdirSync(dirPath) {
31
+ const resolvedPath = resolve(dirPath);
32
+ const dangerousPaths = [
33
+ "/etc/",
34
+ "/usr/",
35
+ "/bin/",
36
+ "/sbin/",
37
+ "/var/",
38
+ "/root/",
39
+ "/boot/",
40
+ "/sys/",
41
+ "/proc/"
42
+ ];
43
+ if (dangerousPaths.some((dangerous) => resolvedPath.startsWith(dangerous))) {
44
+ throw new Error(`Cannot create directory in system path: ${dirPath}`);
45
+ }
46
+ mkdirSync(resolvedPath, {
47
+ recursive: true
48
+ });
49
+ }
50
+ __name(safeMkdirSync, "safeMkdirSync");
51
+ function safeWriteFileSync(filePath, content) {
52
+ const validatedPath = validateOutputPath(filePath);
53
+ writeFileSync(validatedPath, content, "utf-8");
54
+ }
55
+ __name(safeWriteFileSync, "safeWriteFileSync");
56
+ generatorHandler({
57
+ onManifest() {
58
+ return {
59
+ defaultOutput: "./src/generated/prisma-fields.ts",
60
+ prettyName: "Burdenoff Prisma Field Generator",
61
+ requiresGenerators: [
62
+ "prisma-client-js"
63
+ ]
64
+ };
65
+ },
66
+ async onGenerate(options) {
67
+ const { dmmf, generator } = options;
68
+ const configuredPath = generator.output?.value || "./src/generated/prisma-fields.ts";
69
+ const outputPath = validateOutputPath(configuredPath);
70
+ const modelFieldsMap = {};
71
+ for (const model of dmmf.datamodel.models) {
72
+ const scalarFields = [];
73
+ const relationFields = [];
74
+ for (const field of model.fields) {
75
+ if (field.kind === "object") {
76
+ relationFields.push(field.name);
77
+ } else {
78
+ scalarFields.push(field.name);
79
+ }
80
+ }
81
+ modelFieldsMap[model.name] = {
82
+ fields: scalarFields,
83
+ relations: relationFields
84
+ };
85
+ }
86
+ const fileContent = generateTypeScriptFile(modelFieldsMap);
87
+ const outputDir = dirname(outputPath);
88
+ safeMkdirSync(outputDir);
89
+ safeWriteFileSync(outputPath, fileContent);
90
+ console.info(`\u2705 [Burdenoff] Generated Prisma fields mapping at: ${outputPath}`);
91
+ console.info(` Found ${Object.keys(modelFieldsMap).length} models`);
92
+ console.info(` Total fields: ${Object.values(modelFieldsMap).reduce((sum, m) => sum + m.fields.length, 0)}`);
93
+ console.info(` Total relations: ${Object.values(modelFieldsMap).reduce((sum, m) => sum + m.relations.length, 0)}`);
94
+ }
95
+ });
96
+ function generateTypeScriptFile(modelFieldsMap) {
97
+ const modelCount = Object.keys(modelFieldsMap).length;
98
+ const totalFields = Object.values(modelFieldsMap).reduce((sum, m) => sum + m.fields.length, 0);
99
+ const totalRelations = Object.values(modelFieldsMap).reduce((sum, m) => sum + m.relations.length, 0);
100
+ return `/**
101
+ * Auto-generated Prisma Model Fields
102
+ *
103
+ * This file is automatically generated by @burdenoff/be-sdk Prisma Field Generator
104
+ * DO NOT EDIT MANUALLY - Changes will be overwritten on next generation
105
+ *
106
+ * Generated at: ${(/* @__PURE__ */ new Date()).toISOString()}
107
+ * Total models: ${modelCount}
108
+ * Total scalar fields: ${totalFields}
109
+ * Total relation fields: ${totalRelations}
110
+ *
111
+ * @packageDocumentation
112
+ */
113
+
114
+ /**
115
+ * Type definition for model fields mapping
116
+ */
117
+ export type ModelFieldsMap = Record<
118
+ string,
119
+ {
120
+ /** Scalar fields (string, number, Date, etc.) */
121
+ fields: string[];
122
+ /** Relation fields (references to other models) */
123
+ relations: string[];
124
+ }
125
+ >;
126
+
127
+ /**
128
+ * Mapping of all Prisma models to their fields
129
+ *
130
+ * This mapping is generated at build time from your Prisma schema
131
+ * and contains all models with their scalar and relation fields.
132
+ */
133
+ export const modelFields: ModelFieldsMap = ${JSON.stringify(modelFieldsMap, null, 2)} as const;
134
+
135
+ /**
136
+ * Get all scalar fields for a model
137
+ *
138
+ * @param modelName - Name of the Prisma model
139
+ * @param includeRelations - Whether to include relation fields (default: false)
140
+ * @returns Array of field names
141
+ * @throws Error if model is not found
142
+ *
143
+ * @example
144
+ * \`\`\`typescript
145
+ * const userFields = getModelFields('User');
146
+ * // Returns: ['id', 'email', 'name', 'createdAt', 'updatedAt']
147
+ *
148
+ * const userFieldsWithRelations = getModelFields('User', true);
149
+ * // Returns: ['id', 'email', 'name', 'createdAt', 'updatedAt', 'posts', 'profile']
150
+ * \`\`\`
151
+ */
152
+ export function getModelFields(modelName: string, includeRelations = false): string[] {
153
+ const model = modelFields[modelName];
154
+ if (!model) {
155
+ const available = Object.keys(modelFields).join(', ');
156
+ throw new Error(
157
+ \`Model "\${modelName}" not found in generated fields. Available models: \${available}\`
158
+ );
159
+ }
160
+
161
+ return includeRelations ? [...model.fields, ...model.relations] : model.fields;
162
+ }
163
+
164
+ /**
165
+ * Get all model names
166
+ *
167
+ * @returns Array of all available model names
168
+ *
169
+ * @example
170
+ * \`\`\`typescript
171
+ * const models = getAllModelNames();
172
+ * // Returns: ['User', 'Post', 'Comment', 'Tag', ...]
173
+ * \`\`\`
174
+ */
175
+ export function getAllModelNames(): string[] {
176
+ return Object.keys(modelFields);
177
+ }
178
+
179
+ /**
180
+ * Check if a model exists in the schema
181
+ *
182
+ * @param modelName - Name of the model to check
183
+ * @returns True if model exists, false otherwise
184
+ *
185
+ * @example
186
+ * \`\`\`typescript
187
+ * if (hasModel('User')) {
188
+ * const fields = getModelFields('User');
189
+ * }
190
+ * \`\`\`
191
+ */
192
+ export function hasModel(modelName: string): boolean {
193
+ return modelName in modelFields;
194
+ }
195
+
196
+ /**
197
+ * Get only scalar fields (excludes relations)
198
+ *
199
+ * @param modelName - Name of the Prisma model
200
+ * @returns Array of scalar field names
201
+ */
202
+ export function getScalarFields(modelName: string): string[] {
203
+ return getModelFields(modelName, false);
204
+ }
205
+
206
+ /**
207
+ * Get only relation fields
208
+ *
209
+ * @param modelName - Name of the Prisma model
210
+ * @returns Array of relation field names
211
+ */
212
+ export function getRelationFields(modelName: string): string[] {
213
+ const model = modelFields[modelName];
214
+ if (!model) {
215
+ throw new Error(\`Model "\${modelName}" not found\`);
216
+ }
217
+ return model.relations;
218
+ }
219
+
220
+ /**
221
+ * Default export for convenience
222
+ */
223
+ export default modelFields;
224
+ `;
225
+ }
226
+ __name(generateTypeScriptFile, "generateTypeScriptFile");
227
+ //# sourceMappingURL=index.js.map
228
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prisma/generator/index.ts"],"names":["generatorHandler","generatorHelperPkg","validateOutputPath","outputPath","resolvedPath","resolve","endsWith","Error","dangerousPaths","some","dangerous","startsWith","safeMkdirSync","dirPath","mkdirSync","recursive","safeWriteFileSync","filePath","content","validatedPath","writeFileSync","onManifest","defaultOutput","prettyName","requiresGenerators","onGenerate","options","dmmf","generator","configuredPath","output","value","modelFieldsMap","model","datamodel","models","scalarFields","relationFields","field","fields","kind","push","name","relations","fileContent","generateTypeScriptFile","outputDir","dirname","console","info","Object","keys","length","values","reduce","sum","m","modelCount","totalFields","totalRelations","Date","toISOString","JSON","stringify"],"mappings":"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","file":"index.js","sourcesContent":["#!/usr/bin/env node\n/**\n * Prisma Field Generator\n *\n * Generates a TypeScript file containing all model fields from Prisma schema.\n * This generator extracts DMMF information at build time and creates a static\n * mapping of model names to their fields, which can be used at runtime.\n *\n * Usage in schema.prisma:\n * ```prisma\n * generator fieldGenerator {\n * provider = \"burdenoff-prisma-field-generator\"\n * output = \"./src/generated/prisma-fields.ts\"\n * }\n * ```\n */\n\nimport generatorHelperPkg from '@prisma/generator-helper';\nimport { writeFileSync, mkdirSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport type { GeneratorOptions } from '@prisma/generator-helper';\n\nconst { generatorHandler } = generatorHelperPkg;\n\n/**\n * Validate and resolve output path from generator config\n * Ensures the path is safe and within expected boundaries\n *\n * @param outputPath The output path from generator config\n * @returns Resolved absolute path\n */\nfunction validateOutputPath(outputPath: string): string {\n // Resolve to absolute path\n const resolvedPath = resolve(outputPath);\n\n // Basic validation: ensure it's a TypeScript file\n if (!resolvedPath.endsWith('.ts')) {\n throw new Error(`Invalid output path: ${outputPath} must be a .ts file`);\n }\n\n // Ensure it doesn't try to write to system directories\n const dangerousPaths = ['/etc/', '/usr/', '/bin/', '/sbin/', '/var/', '/root/', '/boot/', '/sys/', '/proc/'];\n if (dangerousPaths.some((dangerous) => resolvedPath.startsWith(dangerous))) {\n throw new Error(`Invalid output path: ${outputPath} cannot write to system directories`);\n }\n\n return resolvedPath;\n}\n\n/**\n * Safely create directory with validated path\n * Path validation prevents directory traversal attacks\n */\nfunction safeMkdirSync(dirPath: string): void {\n const resolvedPath = resolve(dirPath);\n // Validate it's not a system directory\n const dangerousPaths = ['/etc/', '/usr/', '/bin/', '/sbin/', '/var/', '/root/', '/boot/', '/sys/', '/proc/'];\n if (dangerousPaths.some((dangerous) => resolvedPath.startsWith(dangerous))) {\n throw new Error(`Cannot create directory in system path: ${dirPath}`);\n }\n mkdirSync(resolvedPath, { recursive: true });\n}\n\n/**\n * Safely write file with validated path\n * Path validation prevents directory traversal attacks\n */\nfunction safeWriteFileSync(filePath: string, content: string): void {\n const validatedPath = validateOutputPath(filePath);\n writeFileSync(validatedPath, content, 'utf-8');\n}\n\ngeneratorHandler({\n onManifest() {\n return {\n defaultOutput: './src/generated/prisma-fields.ts',\n prettyName: 'Burdenoff Prisma Field Generator',\n requiresGenerators: ['prisma-client-js'],\n };\n },\n\n async onGenerate(options: GeneratorOptions) {\n const { dmmf, generator } = options;\n const configuredPath = generator.output?.value || './src/generated/prisma-fields.ts';\n const outputPath = validateOutputPath(configuredPath);\n\n // Extract models and their fields\n const modelFieldsMap: Record<string, { fields: string[]; relations: string[] }> = {};\n\n for (const model of dmmf.datamodel.models) {\n const scalarFields: string[] = [];\n const relationFields: string[] = [];\n\n for (const field of model.fields) {\n if (field.kind === 'object') {\n // Relation field\n relationFields.push(field.name);\n } else {\n // Scalar field (string, int, DateTime, etc.)\n scalarFields.push(field.name);\n }\n }\n\n modelFieldsMap[model.name] = {\n fields: scalarFields,\n relations: relationFields,\n };\n }\n\n // Generate TypeScript file content\n const fileContent = generateTypeScriptFile(modelFieldsMap);\n\n // Ensure output directory exists (use validated path)\n const outputDir = dirname(outputPath);\n safeMkdirSync(outputDir);\n\n // Write file (use validated path)\n safeWriteFileSync(outputPath, fileContent);\n\n console.info(`✅ [Burdenoff] Generated Prisma fields mapping at: ${outputPath}`);\n console.info(` Found ${Object.keys(modelFieldsMap).length} models`);\n console.info(` Total fields: ${Object.values(modelFieldsMap).reduce((sum, m) => sum + m.fields.length, 0)}`);\n console.info(\n ` Total relations: ${Object.values(modelFieldsMap).reduce((sum, m) => sum + m.relations.length, 0)}`\n );\n },\n});\n\n/**\n * Generate TypeScript file content\n */\nfunction generateTypeScriptFile(modelFieldsMap: Record<string, { fields: string[]; relations: string[] }>): string {\n const modelCount = Object.keys(modelFieldsMap).length;\n const totalFields = Object.values(modelFieldsMap).reduce((sum, m) => sum + m.fields.length, 0);\n const totalRelations = Object.values(modelFieldsMap).reduce((sum, m) => sum + m.relations.length, 0);\n\n return `/**\n * Auto-generated Prisma Model Fields\n *\n * This file is automatically generated by @burdenoff/be-sdk Prisma Field Generator\n * DO NOT EDIT MANUALLY - Changes will be overwritten on next generation\n *\n * Generated at: ${new Date().toISOString()}\n * Total models: ${modelCount}\n * Total scalar fields: ${totalFields}\n * Total relation fields: ${totalRelations}\n *\n * @packageDocumentation\n */\n\n/**\n * Type definition for model fields mapping\n */\nexport type ModelFieldsMap = Record<\n string,\n {\n /** Scalar fields (string, number, Date, etc.) */\n fields: string[];\n /** Relation fields (references to other models) */\n relations: string[];\n }\n>;\n\n/**\n * Mapping of all Prisma models to their fields\n *\n * This mapping is generated at build time from your Prisma schema\n * and contains all models with their scalar and relation fields.\n */\nexport const modelFields: ModelFieldsMap = ${JSON.stringify(modelFieldsMap, null, 2)} as const;\n\n/**\n * Get all scalar fields for a model\n *\n * @param modelName - Name of the Prisma model\n * @param includeRelations - Whether to include relation fields (default: false)\n * @returns Array of field names\n * @throws Error if model is not found\n *\n * @example\n * \\`\\`\\`typescript\n * const userFields = getModelFields('User');\n * // Returns: ['id', 'email', 'name', 'createdAt', 'updatedAt']\n *\n * const userFieldsWithRelations = getModelFields('User', true);\n * // Returns: ['id', 'email', 'name', 'createdAt', 'updatedAt', 'posts', 'profile']\n * \\`\\`\\`\n */\nexport function getModelFields(modelName: string, includeRelations = false): string[] {\n const model = modelFields[modelName];\n if (!model) {\n const available = Object.keys(modelFields).join(', ');\n throw new Error(\n \\`Model \"\\${modelName}\" not found in generated fields. Available models: \\${available}\\`\n );\n }\n\n return includeRelations ? [...model.fields, ...model.relations] : model.fields;\n}\n\n/**\n * Get all model names\n *\n * @returns Array of all available model names\n *\n * @example\n * \\`\\`\\`typescript\n * const models = getAllModelNames();\n * // Returns: ['User', 'Post', 'Comment', 'Tag', ...]\n * \\`\\`\\`\n */\nexport function getAllModelNames(): string[] {\n return Object.keys(modelFields);\n}\n\n/**\n * Check if a model exists in the schema\n *\n * @param modelName - Name of the model to check\n * @returns True if model exists, false otherwise\n *\n * @example\n * \\`\\`\\`typescript\n * if (hasModel('User')) {\n * const fields = getModelFields('User');\n * }\n * \\`\\`\\`\n */\nexport function hasModel(modelName: string): boolean {\n return modelName in modelFields;\n}\n\n/**\n * Get only scalar fields (excludes relations)\n *\n * @param modelName - Name of the Prisma model\n * @returns Array of scalar field names\n */\nexport function getScalarFields(modelName: string): string[] {\n return getModelFields(modelName, false);\n}\n\n/**\n * Get only relation fields\n *\n * @param modelName - Name of the Prisma model\n * @returns Array of relation field names\n */\nexport function getRelationFields(modelName: string): string[] {\n const model = modelFields[modelName];\n if (!model) {\n throw new Error(\\`Model \"\\${modelName}\" not found\\`);\n }\n return model.relations;\n}\n\n/**\n * Default export for convenience\n */\nexport default modelFields;\n`;\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export { C as ContextFilterInput, D as DatabaseClient, a as DatabaseClientConfig, F as FieldExtractionOptions, b as FieldExtractionResult, I as InputJsonValue, J as JsonValue, M as ModelFieldsMap, O as OperationContext, P as PrismaJsonFilter, W as WorkspaceContext, c as WorkspaceExtensionConfig, d as addWorkspaceExtension, e as buildContextWhereClause, f as buildContextWhereConditions, g as checkDatabaseHealth, h as contextMatches, j as createContextFromSDK, k as createDatabaseClient, l as createDatabaseClientFromEnv, m as extractFieldsFromModel, n as getAllModelNames, o as getDatabaseManager, p as getDatabaseProductName, q as getDatabaseStats, r as getDatabaseVersion, s as getDb, t as getModelFields, u as getWorkspaceContext, v as hasModel, w as initializeDatabase, x as initializeDatabaseWithConfig, y as injectWhereWorkspaceId, z as isDatabaseInitialized, A as loadGeneratedFields, B as mergeContext, E as parseContext, G as resetDatabaseManager, H as setWorkspaceContext, K as testConnection, L as toContextJson, N as withWorkspaceContext, Q as withWorkspaceContextSync } from '../index-Dtf6FBaD.js';
2
+ export { C as ConnectionState, d as DatabaseHealth, D as DatabaseReturnType, P as PrismaClientBase, c as PrismaClientConfig, a as PrismaClientConstructorOptions, b as PrismaClientWrapper, e as PrismaEvent, f as PrismaLogDefinition, g as PrismaLogEvent, h as PrismaLogLevel, i as PrismaQueryEvent, j as PrismaTransactionOptions, k as configurePrismaLogging, l as createConnectionPool, m as createPrismaAdapter, n as createPrismaClient } from '../client-CSjIrYKS.js';
3
+ import '../prisma-extension-krXnYnrN.js';
4
+ import '@prisma/adapter-pg';
5
+ import 'pg';
@@ -0,0 +1,12 @@
1
+ export { PrismaClientWrapper, buildContextWhereClause, buildContextWhereConditions, checkDatabaseHealth, configurePrismaLogging, contextMatches, createConnectionPool, createContextFromSDK, createDatabaseClient, createDatabaseClientFromEnv, createPrismaAdapter, createPrismaClient, extractFieldsFromModel, getAllModelNames, getDatabaseManager, getDatabaseProductName, getDatabaseStats, getDatabaseVersion, getDb, getModelFields, hasModel, initializeDatabase, initializeDatabaseWithConfig, isDatabaseInitialized, loadGeneratedFields, mergeContext, parseContext, resetDatabaseManager, testConnection, toContextJson } from '../chunk-2SD5L2F2.js';
2
+ export { addWorkspaceExtension, getWorkspaceContext, injectWhereWorkspaceId, setWorkspaceContext, withWorkspaceContext, withWorkspaceContextSync } from '../chunk-GTEMQXCA.js';
3
+ import '../chunk-TKBD2ONF.js';
4
+ import '../chunk-ELLX3K54.js';
5
+ import '../chunk-3O2RQOPV.js';
6
+ import '../chunk-L7ZMN2FJ.js';
7
+ import '../chunk-OVSYMNCI.js';
8
+ import '../chunk-NGMEI42S.js';
9
+ import '../chunk-CBZNP6RF.js';
10
+ import '../chunk-XE4OXN2W.js';
11
+ //# sourceMappingURL=index.js.map
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,30 @@
1
+ type EntityEventType = 'entity.created' | 'entity.updated' | 'entity.deleted' | 'relationship.created' | 'relationship.deleted';
2
+ interface EntityEventRbacMetadata {
3
+ resourceTypeName: string;
4
+ name?: string;
5
+ identifier?: string;
6
+ parentResourceIdentifier?: string;
7
+ createResource?: boolean;
8
+ }
9
+ interface GraphEventEmitter {
10
+ publishEntityEvent(eventType: EntityEventType, entity: {
11
+ id: string;
12
+ type: string;
13
+ data: Record<string, unknown>;
14
+ }, context: {
15
+ productName: string;
16
+ organizationId: string;
17
+ actorId?: string;
18
+ workspaceId?: string;
19
+ }, rbac?: EntityEventRbacMetadata): Promise<void>;
20
+ }
21
+ interface GraphMiddlewareConfig {
22
+ enabled: boolean;
23
+ productName: string;
24
+ eventEmitter: GraphEventEmitter;
25
+ entityTypes?: string[];
26
+ monitoredOperations?: Array<'create' | 'update' | 'delete' | 'deleteMany' | 'updateMany'>;
27
+ }
28
+ declare function addGraphExtension<T>(baseClient: T, config: GraphMiddlewareConfig): T;
29
+
30
+ export { type EntityEventType as E, type GraphEventEmitter as G, type GraphMiddlewareConfig as a, addGraphExtension as b };
@@ -0,0 +1,116 @@
1
+ import { B as BurdenoffGraphQLClient } from '../graphql-BAVrUgBF.js';
2
+ import { S as SDKContext } from '../index-CHbVw5M7.js';
3
+ import { Plugin } from '@envelop/core';
4
+ import { S as ServiceLayer } from '../layer-DDip18KY.js';
5
+ import 'graphql-request';
6
+
7
+ type ActorType = 'USER' | 'BOT' | 'INTEGRATION' | 'DELEGATED_AGENT';
8
+ type RBACLayer = 'wspace' | 'global';
9
+ interface RBACDirectiveConfig {
10
+ rbacServiceUrl: string;
11
+ layer?: RBACLayer;
12
+ enableCaching?: boolean;
13
+ cacheTTL?: number;
14
+ cacheMaxSize?: number;
15
+ timeout?: number;
16
+ failClosed?: boolean;
17
+ resourceResolver?: (identifier: string, resourceType?: string) => Promise<string | null>;
18
+ skipRbac?: boolean;
19
+ }
20
+ interface CheckPermissionResult {
21
+ hasPermission: boolean;
22
+ reason?: string;
23
+ }
24
+ declare class RBACClient {
25
+ private client;
26
+ private cache?;
27
+ private config;
28
+ constructor(config: RBACDirectiveConfig);
29
+ private parsePermission;
30
+ checkPermission(actorId: string, actorType: ActorType, scopeId: string, permission: string, resourceId?: string): Promise<CheckPermissionResult>;
31
+ clearCache(): void;
32
+ invalidateForActor(actorId: string): number;
33
+ getLayer(): RBACLayer;
34
+ }
35
+ declare function createRBACDirective(config: RBACDirectiveConfig): Plugin;
36
+
37
+ interface LayerAwareRBACConfig extends Omit<RBACDirectiveConfig, 'rbacServiceUrl' | 'layer'> {
38
+ rbacServiceUrl?: string;
39
+ }
40
+ declare function createRBACDirectiveForLayer(layer: ServiceLayer, config?: LayerAwareRBACConfig): Plugin;
41
+ declare function createRBACDirectiveFromEnv(serviceName: string, config?: LayerAwareRBACConfig): Plugin;
42
+
43
+ type PBACActorType = 'USER' | 'BOT' | 'INTEGRATION' | 'DELEGATED_AGENT';
44
+ type PBACPermissionLevel = 'ADMIN' | 'EDITOR' | 'VIEWER' | 'NONE';
45
+ interface CheckPermissionOptions {
46
+ userId: string;
47
+ action: string;
48
+ resourceType: string;
49
+ resourceId?: string;
50
+ workspaceId?: string;
51
+ actorType?: PBACActorType;
52
+ }
53
+ interface EffectivePermissionEntry {
54
+ resourceType: string;
55
+ level: PBACPermissionLevel;
56
+ allowedActions: string[];
57
+ source: string;
58
+ }
59
+ interface RoleDefaultPermission {
60
+ resourceType: string;
61
+ level: PBACPermissionLevel;
62
+ }
63
+ interface Role {
64
+ id: string;
65
+ name: string;
66
+ description?: string;
67
+ defaultPermissions?: RoleDefaultPermission[];
68
+ }
69
+ interface Permission {
70
+ id: string;
71
+ action: string;
72
+ resourceType: string;
73
+ description?: string;
74
+ }
75
+ declare class RBACModule {
76
+ private client;
77
+ private context;
78
+ constructor(client: BurdenoffGraphQLClient, context: SDKContext);
79
+ checkPermission(options: CheckPermissionOptions): Promise<boolean>;
80
+ requirePermission(options: CheckPermissionOptions): Promise<void>;
81
+ getUserRoles(userId: string, workspaceId: string): Promise<Role[]>;
82
+ assignRoleToUser(userId: string, roleId: string, workspaceId: string, actorType?: 'USER' | 'BOT' | 'INTEGRATION' | 'DELEGATED_AGENT'): Promise<boolean>;
83
+ removeRoleFromUser(userId: string, roleId: string, workspaceId: string): Promise<boolean>;
84
+ createRole(name: string, description: string, defaultPermissions: RoleDefaultPermission[] | string[], workspaceId: string): Promise<Role>;
85
+ getAvailablePermissions(): Promise<Permission[]>;
86
+ checkMultiplePermissions(checks: CheckPermissionOptions[]): Promise<Array<{
87
+ allowed: boolean;
88
+ reason?: string;
89
+ }>>;
90
+ getEffectivePermissions(userId: string, workspaceId: string, actorType?: 'USER' | 'BOT' | 'INTEGRATION' | 'DELEGATED_AGENT'): Promise<{
91
+ actorId: string;
92
+ scopeId: string;
93
+ permissions: EffectivePermissionEntry[];
94
+ }>;
95
+ initializeWorkspaceRoles(workspaceId: string, ownerId: string): Promise<{
96
+ success: boolean;
97
+ rolesCreated: number;
98
+ roleNames: string[];
99
+ ownerAssigned: boolean;
100
+ message: string;
101
+ }>;
102
+ updateRole(roleId: string, updates: {
103
+ name?: string;
104
+ description?: string;
105
+ priority?: number;
106
+ }, workspaceId: string): Promise<Role>;
107
+ deleteRole(roleId: string, workspaceId: string, reassignToRoleId?: string): Promise<boolean>;
108
+ listRoles(workspaceId: string, options?: {
109
+ includeSystem?: boolean;
110
+ limit?: number;
111
+ offset?: number;
112
+ }): Promise<Role[]>;
113
+ getRole(roleId: string, workspaceId: string): Promise<Role | null>;
114
+ }
115
+
116
+ export { type CheckPermissionOptions, type EffectivePermissionEntry, type LayerAwareRBACConfig, type PBACActorType, type PBACPermissionLevel, type Permission, RBACClient, type RBACDirectiveConfig, RBACModule, type Role, type RoleDefaultPermission, createRBACDirective, createRBACDirectiveForLayer, createRBACDirectiveFromEnv };
@@ -0,0 +1,7 @@
1
+ export { RBACClient, RBACModule, createRBACDirective, createRBACDirectiveForLayer, createRBACDirectiveFromEnv } from '../chunk-J26YGR2U.js';
2
+ import '../chunk-SAG6ZYWQ.js';
3
+ import '../chunk-NGMEI42S.js';
4
+ import '../chunk-CBZNP6RF.js';
5
+ import '../chunk-XE4OXN2W.js';
6
+ //# sourceMappingURL=index.js.map
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,136 @@
1
+ import { __name } from './chunk-XE4OXN2W.js';
2
+
3
+ // src/telemetry/sdk.ts
4
+ var isThenable = /* @__PURE__ */ __name((value) => {
5
+ return typeof value === "object" && value !== null && typeof value.then === "function";
6
+ }, "isThenable");
7
+ var asyncDisposeMetricReader = /* @__PURE__ */ __name(async (metricReaderCandidate) => {
8
+ const shutdown = metricReaderCandidate.shutdown;
9
+ if (typeof shutdown === "function") {
10
+ const result = shutdown.call(metricReaderCandidate);
11
+ if (isThenable(result)) await result;
12
+ }
13
+ }, "asyncDisposeMetricReader");
14
+ async function createOtelSdk(cfg) {
15
+ const sdkNodeMod = "@opentelemetry/sdk-node";
16
+ const sdkMod = await import(sdkNodeMod);
17
+ const resourcesMod = "@opentelemetry/resources";
18
+ const resources = await import(resourcesMod);
19
+ const semMod = "@opentelemetry/semantic-conventions";
20
+ const sem = await import(semMod);
21
+ const traceExpMod = "@opentelemetry/exporter-trace-otlp-http";
22
+ const traceExp = await import(traceExpMod);
23
+ let metricsExp;
24
+ try {
25
+ const metricsExpMod = "@opentelemetry/exporter-metrics-otlp-http";
26
+ metricsExp = await import(metricsExpMod);
27
+ } catch {
28
+ metricsExp = void 0;
29
+ }
30
+ let metricReader;
31
+ let metricsEnabled = false;
32
+ let metricsDropReason;
33
+ if (metricsExp?.OTLPMetricExporter) {
34
+ try {
35
+ const metricsSdkMod = "@opentelemetry/sdk-metrics";
36
+ const metricsSdk = await import(metricsSdkMod);
37
+ const candidate = new metricsSdk.PeriodicExportingMetricReader({
38
+ exporter: new metricsExp.OTLPMetricExporter({
39
+ url: `${cfg.otlpEndpoint.replace(/\/$/, "")}/v1/metrics`
40
+ })
41
+ });
42
+ const setProducer = candidate.setMetricProducer;
43
+ if (typeof setProducer === "function") {
44
+ metricReader = candidate;
45
+ metricsEnabled = true;
46
+ } else {
47
+ metricsDropReason = "setMetricProducer is not a function on PeriodicExportingMetricReader; skipping metrics path";
48
+ await asyncDisposeMetricReader(candidate);
49
+ metricReader = void 0;
50
+ }
51
+ } catch {
52
+ if (metricsDropReason === void 0) {
53
+ metricsDropReason = "metric reader construction or compatibility check failed";
54
+ }
55
+ metricReader = void 0;
56
+ }
57
+ }
58
+ let sampler;
59
+ try {
60
+ const traceBaseMod = "@opentelemetry/sdk-trace-base";
61
+ const traceBase = await import(traceBaseMod);
62
+ sampler = new traceBase.ParentBasedSampler({
63
+ root: new traceBase.TraceIdRatioBasedSampler(Math.min(1, Math.max(0, cfg.sampleRatio)))
64
+ });
65
+ } catch {
66
+ sampler = void 0;
67
+ }
68
+ let autoInstrumentations;
69
+ try {
70
+ const autoMod = "@opentelemetry/auto-instrumentations-node";
71
+ const auto = await import(autoMod);
72
+ autoInstrumentations = auto.getNodeAutoInstrumentations({
73
+ "@opentelemetry/instrumentation-fs": {
74
+ enabled: false
75
+ }
76
+ });
77
+ } catch {
78
+ autoInstrumentations = void 0;
79
+ }
80
+ const serviceNamespaceByBoundary = {
81
+ wspace: "workspaces",
82
+ global: "tenant",
83
+ gateway: "gateways"
84
+ };
85
+ const resourceAttributes = {
86
+ [sem["SEMRESATTRS_SERVICE_NAME"] ?? "service.name"]: cfg.serviceName,
87
+ [sem["SEMRESATTRS_SERVICE_VERSION"] ?? "service.version"]: cfg.serviceVersion,
88
+ [sem["SEMRESATTRS_SERVICE_NAMESPACE"] ?? "service.namespace"]: serviceNamespaceByBoundary[cfg.boundary],
89
+ [sem["SEMRESATTRS_DEPLOYMENT_ENVIRONMENT"] ?? "deployment.environment"]: cfg.env,
90
+ "burdenoff.boundary": cfg.boundary
91
+ };
92
+ if (cfg.module) resourceAttributes["burdenoff.module"] = cfg.module;
93
+ const serviceInstanceId = process.env["POD_NAME"] ?? process.env["HOSTNAME"];
94
+ if (serviceInstanceId) resourceAttributes["service.instance.id"] = serviceInstanceId;
95
+ const clusterName = process.env["CLUSTER_NAME"];
96
+ if (clusterName) {
97
+ resourceAttributes["cluster"] = clusterName;
98
+ resourceAttributes["k8s.cluster.name"] = clusterName;
99
+ }
100
+ const resource = resources.resourceFromAttributes(resourceAttributes);
101
+ const traceExporter = new traceExp.OTLPTraceExporter({
102
+ url: `${cfg.otlpEndpoint.replace(/\/$/, "")}/v1/traces`
103
+ });
104
+ const nodeSdk = new sdkMod.NodeSDK({
105
+ resource,
106
+ traceExporter,
107
+ ...metricReader ? {
108
+ metricReader
109
+ } : {},
110
+ ...sampler ? {
111
+ sampler
112
+ } : {},
113
+ ...autoInstrumentations ? {
114
+ instrumentations: autoInstrumentations
115
+ } : {}
116
+ });
117
+ const startResult = nodeSdk.start();
118
+ if (isThenable(startResult)) {
119
+ await startResult;
120
+ }
121
+ try {
122
+ const otelApiMod = "@opentelemetry/api";
123
+ globalThis.__otelApi = await import(otelApiMod);
124
+ } catch {
125
+ }
126
+ return {
127
+ shutdown: /* @__PURE__ */ __name(async () => nodeSdk.shutdown(), "shutdown"),
128
+ metricsEnabled,
129
+ metricsDropReason
130
+ };
131
+ }
132
+ __name(createOtelSdk, "createOtelSdk");
133
+
134
+ export { createOtelSdk };
135
+ //# sourceMappingURL=sdk-THO3IWEE.js.map
136
+ //# sourceMappingURL=sdk-THO3IWEE.js.map