@revenium/openai 1.0.13 → 1.0.14

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 (228) hide show
  1. package/.env.example +10 -15
  2. package/CHANGELOG.md +44 -11
  3. package/CODE_OF_CONDUCT.md +57 -0
  4. package/CONTRIBUTING.md +38 -0
  5. package/README.md +104 -216
  6. package/SECURITY.md +34 -0
  7. package/dist/cjs/core/client/index.js +14 -0
  8. package/dist/cjs/core/client/index.js.map +1 -0
  9. package/dist/cjs/core/client/manager.js +109 -0
  10. package/dist/cjs/core/client/manager.js.map +1 -0
  11. package/dist/cjs/core/config/azure-config.js +5 -17
  12. package/dist/cjs/core/config/azure-config.js.map +1 -1
  13. package/dist/cjs/core/config/index.js +2 -2
  14. package/dist/cjs/core/config/index.js.map +1 -1
  15. package/dist/cjs/core/config/loader.js +34 -14
  16. package/dist/cjs/core/config/loader.js.map +1 -1
  17. package/dist/cjs/core/config/manager.js +11 -5
  18. package/dist/cjs/core/config/manager.js.map +1 -1
  19. package/dist/cjs/core/config/validator.js +3 -45
  20. package/dist/cjs/core/config/validator.js.map +1 -1
  21. package/dist/cjs/core/middleware/index.js +17 -0
  22. package/dist/cjs/core/middleware/index.js.map +1 -0
  23. package/dist/cjs/core/middleware/interfaces.js +361 -0
  24. package/dist/cjs/core/middleware/interfaces.js.map +1 -0
  25. package/dist/cjs/core/middleware/revenium-client.js +142 -0
  26. package/dist/cjs/core/middleware/revenium-client.js.map +1 -0
  27. package/dist/cjs/core/providers/detector.js +45 -23
  28. package/dist/cjs/core/providers/detector.js.map +1 -1
  29. package/dist/cjs/core/providers/index.js +2 -1
  30. package/dist/cjs/core/providers/index.js.map +1 -1
  31. package/dist/cjs/core/tracking/api-client.js +14 -13
  32. package/dist/cjs/core/tracking/api-client.js.map +1 -1
  33. package/dist/cjs/core/tracking/payload-builder.js +15 -25
  34. package/dist/cjs/core/tracking/payload-builder.js.map +1 -1
  35. package/dist/cjs/core/tracking/usage-tracker.js +22 -18
  36. package/dist/cjs/core/tracking/usage-tracker.js.map +1 -1
  37. package/dist/cjs/index.js +26 -195
  38. package/dist/cjs/index.js.map +1 -1
  39. package/dist/cjs/types/index.js +0 -8
  40. package/dist/cjs/types/index.js.map +1 -1
  41. package/dist/cjs/types/openai-augmentation.js +0 -49
  42. package/dist/cjs/types/openai-augmentation.js.map +1 -1
  43. package/dist/cjs/utils/constants.js +17 -20
  44. package/dist/cjs/utils/constants.js.map +1 -1
  45. package/dist/cjs/utils/error-handler.js +18 -14
  46. package/dist/cjs/utils/error-handler.js.map +1 -1
  47. package/dist/cjs/utils/metadata-builder.js +17 -16
  48. package/dist/cjs/utils/metadata-builder.js.map +1 -1
  49. package/dist/cjs/utils/provider-detection.js +25 -28
  50. package/dist/cjs/utils/provider-detection.js.map +1 -1
  51. package/dist/esm/core/client/index.js +6 -0
  52. package/dist/esm/core/client/index.js.map +1 -0
  53. package/dist/esm/core/client/manager.js +102 -0
  54. package/dist/esm/core/client/manager.js.map +1 -0
  55. package/dist/esm/core/config/azure-config.js +6 -18
  56. package/dist/esm/core/config/azure-config.js.map +1 -1
  57. package/dist/esm/core/config/index.js +5 -4
  58. package/dist/esm/core/config/index.js.map +1 -1
  59. package/dist/esm/core/config/loader.js +33 -13
  60. package/dist/esm/core/config/loader.js.map +1 -1
  61. package/dist/esm/core/config/manager.js +13 -7
  62. package/dist/esm/core/config/manager.js.map +1 -1
  63. package/dist/esm/core/config/validator.js +3 -44
  64. package/dist/esm/core/config/validator.js.map +1 -1
  65. package/dist/esm/core/middleware/index.js +8 -0
  66. package/dist/esm/core/middleware/index.js.map +1 -0
  67. package/dist/esm/core/middleware/interfaces.js +353 -0
  68. package/dist/esm/core/middleware/interfaces.js.map +1 -0
  69. package/dist/esm/core/middleware/revenium-client.js +105 -0
  70. package/dist/esm/core/middleware/revenium-client.js.map +1 -0
  71. package/dist/esm/core/providers/detector.js +43 -22
  72. package/dist/esm/core/providers/detector.js.map +1 -1
  73. package/dist/esm/core/providers/index.js +2 -2
  74. package/dist/esm/core/providers/index.js.map +1 -1
  75. package/dist/esm/core/tracking/api-client.js +13 -12
  76. package/dist/esm/core/tracking/api-client.js.map +1 -1
  77. package/dist/esm/core/tracking/payload-builder.js +16 -26
  78. package/dist/esm/core/tracking/payload-builder.js.map +1 -1
  79. package/dist/esm/core/tracking/usage-tracker.js +24 -20
  80. package/dist/esm/core/tracking/usage-tracker.js.map +1 -1
  81. package/dist/esm/index.js +9 -177
  82. package/dist/esm/index.js.map +1 -1
  83. package/dist/esm/types/index.js +2 -10
  84. package/dist/esm/types/index.js.map +1 -1
  85. package/dist/esm/types/openai-augmentation.js +0 -49
  86. package/dist/esm/types/openai-augmentation.js.map +1 -1
  87. package/dist/esm/utils/constants.js +16 -19
  88. package/dist/esm/utils/constants.js.map +1 -1
  89. package/dist/esm/utils/error-handler.js +19 -15
  90. package/dist/esm/utils/error-handler.js.map +1 -1
  91. package/dist/esm/utils/metadata-builder.js +17 -16
  92. package/dist/esm/utils/metadata-builder.js.map +1 -1
  93. package/dist/esm/utils/provider-detection.js +26 -29
  94. package/dist/esm/utils/provider-detection.js.map +1 -1
  95. package/dist/types/core/client/index.d.ts +6 -0
  96. package/dist/types/core/client/index.d.ts.map +1 -0
  97. package/dist/types/core/client/manager.d.ts +32 -0
  98. package/dist/types/core/client/manager.d.ts.map +1 -0
  99. package/dist/types/core/config/azure-config.d.ts +2 -2
  100. package/dist/types/core/config/azure-config.d.ts.map +1 -1
  101. package/dist/types/core/config/index.d.ts +4 -4
  102. package/dist/types/core/config/index.d.ts.map +1 -1
  103. package/dist/types/core/config/loader.d.ts +3 -1
  104. package/dist/types/core/config/loader.d.ts.map +1 -1
  105. package/dist/types/core/config/manager.d.ts +1 -1
  106. package/dist/types/core/config/manager.d.ts.map +1 -1
  107. package/dist/types/core/config/validator.d.ts +1 -12
  108. package/dist/types/core/config/validator.d.ts.map +1 -1
  109. package/dist/types/core/middleware/index.d.ts +8 -0
  110. package/dist/types/core/middleware/index.d.ts.map +1 -0
  111. package/dist/types/core/middleware/interfaces.d.ts +74 -0
  112. package/dist/types/core/middleware/interfaces.d.ts.map +1 -0
  113. package/dist/types/core/middleware/revenium-client.d.ts +58 -0
  114. package/dist/types/core/middleware/revenium-client.d.ts.map +1 -0
  115. package/dist/types/core/providers/detector.d.ts +9 -2
  116. package/dist/types/core/providers/detector.d.ts.map +1 -1
  117. package/dist/types/core/providers/index.d.ts +2 -2
  118. package/dist/types/core/providers/index.d.ts.map +1 -1
  119. package/dist/types/core/tracking/api-client.d.ts +1 -1
  120. package/dist/types/core/tracking/api-client.d.ts.map +1 -1
  121. package/dist/types/core/tracking/payload-builder.d.ts +3 -3
  122. package/dist/types/core/tracking/payload-builder.d.ts.map +1 -1
  123. package/dist/types/core/tracking/usage-tracker.d.ts +2 -2
  124. package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -1
  125. package/dist/types/index.d.ts +11 -135
  126. package/dist/types/index.d.ts.map +1 -1
  127. package/dist/types/types/function-parameters.d.ts +2 -23
  128. package/dist/types/types/function-parameters.d.ts.map +1 -1
  129. package/dist/types/types/index.d.ts +11 -105
  130. package/dist/types/types/index.d.ts.map +1 -1
  131. package/dist/types/types/openai-augmentation.d.ts +4 -138
  132. package/dist/types/types/openai-augmentation.d.ts.map +1 -1
  133. package/dist/types/utils/constants.d.ts +7 -1
  134. package/dist/types/utils/constants.d.ts.map +1 -1
  135. package/dist/types/utils/error-handler.d.ts +2 -2
  136. package/dist/types/utils/error-handler.d.ts.map +1 -1
  137. package/dist/types/utils/metadata-builder.d.ts +2 -2
  138. package/dist/types/utils/metadata-builder.d.ts.map +1 -1
  139. package/dist/types/utils/provider-detection.d.ts +3 -3
  140. package/dist/types/utils/provider-detection.d.ts.map +1 -1
  141. package/examples/README.md +282 -198
  142. package/examples/azure/basic.ts +62 -0
  143. package/examples/azure/responses-basic.ts +45 -0
  144. package/examples/azure/responses-stream.ts +61 -0
  145. package/examples/azure/stream.ts +56 -0
  146. package/examples/getting_started.ts +31 -43
  147. package/examples/openai/basic.ts +45 -0
  148. package/examples/openai/metadata.ts +67 -0
  149. package/examples/openai/responses-basic.ts +44 -0
  150. package/examples/openai/responses-embed.ts +34 -0
  151. package/examples/openai/responses-streaming.ts +63 -0
  152. package/examples/openai/streaming.ts +59 -0
  153. package/package.json +20 -13
  154. package/dist/cjs/core/wrapper/index.js +0 -15
  155. package/dist/cjs/core/wrapper/index.js.map +0 -1
  156. package/dist/cjs/core/wrapper/instance-patcher.js +0 -202
  157. package/dist/cjs/core/wrapper/instance-patcher.js.map +0 -1
  158. package/dist/cjs/core/wrapper/request-handler.js +0 -317
  159. package/dist/cjs/core/wrapper/request-handler.js.map +0 -1
  160. package/dist/cjs/core/wrapper/stream-wrapper.js +0 -82
  161. package/dist/cjs/core/wrapper/stream-wrapper.js.map +0 -1
  162. package/dist/cjs/utils/azure-model-resolver.js +0 -211
  163. package/dist/cjs/utils/azure-model-resolver.js.map +0 -1
  164. package/dist/cjs/utils/request-handler-factory.js +0 -185
  165. package/dist/cjs/utils/request-handler-factory.js.map +0 -1
  166. package/dist/esm/core/wrapper/index.js +0 -9
  167. package/dist/esm/core/wrapper/index.js.map +0 -1
  168. package/dist/esm/core/wrapper/instance-patcher.js +0 -199
  169. package/dist/esm/core/wrapper/instance-patcher.js.map +0 -1
  170. package/dist/esm/core/wrapper/request-handler.js +0 -310
  171. package/dist/esm/core/wrapper/request-handler.js.map +0 -1
  172. package/dist/esm/core/wrapper/stream-wrapper.js +0 -79
  173. package/dist/esm/core/wrapper/stream-wrapper.js.map +0 -1
  174. package/dist/esm/utils/azure-model-resolver.js +0 -204
  175. package/dist/esm/utils/azure-model-resolver.js.map +0 -1
  176. package/dist/esm/utils/request-handler-factory.js +0 -146
  177. package/dist/esm/utils/request-handler-factory.js.map +0 -1
  178. package/dist/types/core/wrapper/index.d.ts +0 -8
  179. package/dist/types/core/wrapper/index.d.ts.map +0 -1
  180. package/dist/types/core/wrapper/instance-patcher.d.ts +0 -33
  181. package/dist/types/core/wrapper/instance-patcher.d.ts.map +0 -1
  182. package/dist/types/core/wrapper/request-handler.d.ts +0 -29
  183. package/dist/types/core/wrapper/request-handler.d.ts.map +0 -1
  184. package/dist/types/core/wrapper/stream-wrapper.d.ts +0 -13
  185. package/dist/types/core/wrapper/stream-wrapper.d.ts.map +0 -1
  186. package/dist/types/utils/azure-model-resolver.d.ts +0 -41
  187. package/dist/types/utils/azure-model-resolver.d.ts.map +0 -1
  188. package/dist/types/utils/request-handler-factory.d.ts +0 -81
  189. package/dist/types/utils/request-handler-factory.d.ts.map +0 -1
  190. package/examples/azure-basic.ts +0 -206
  191. package/examples/azure-responses-basic.ts +0 -233
  192. package/examples/azure-responses-streaming.ts +0 -255
  193. package/examples/azure-streaming.ts +0 -209
  194. package/examples/openai-basic.ts +0 -147
  195. package/examples/openai-function-calling.ts +0 -259
  196. package/examples/openai-responses-basic.ts +0 -212
  197. package/examples/openai-responses-streaming.ts +0 -232
  198. package/examples/openai-streaming.ts +0 -172
  199. package/examples/openai-vision.ts +0 -289
  200. package/src/core/config/azure-config.ts +0 -72
  201. package/src/core/config/index.ts +0 -23
  202. package/src/core/config/loader.ts +0 -66
  203. package/src/core/config/manager.ts +0 -95
  204. package/src/core/config/validator.ts +0 -89
  205. package/src/core/providers/detector.ts +0 -159
  206. package/src/core/providers/index.ts +0 -16
  207. package/src/core/tracking/api-client.ts +0 -78
  208. package/src/core/tracking/index.ts +0 -21
  209. package/src/core/tracking/payload-builder.ts +0 -137
  210. package/src/core/tracking/usage-tracker.ts +0 -189
  211. package/src/core/wrapper/index.ts +0 -9
  212. package/src/core/wrapper/instance-patcher.ts +0 -288
  213. package/src/core/wrapper/request-handler.ts +0 -423
  214. package/src/core/wrapper/stream-wrapper.ts +0 -100
  215. package/src/index.ts +0 -360
  216. package/src/types/function-parameters.ts +0 -251
  217. package/src/types/index.ts +0 -310
  218. package/src/types/openai-augmentation.ts +0 -232
  219. package/src/types/responses-api.ts +0 -308
  220. package/src/utils/azure-model-resolver.ts +0 -220
  221. package/src/utils/constants.ts +0 -21
  222. package/src/utils/error-handler.ts +0 -251
  223. package/src/utils/metadata-builder.ts +0 -228
  224. package/src/utils/provider-detection.ts +0 -257
  225. package/src/utils/request-handler-factory.ts +0 -285
  226. package/src/utils/stop-reason-mapper.ts +0 -78
  227. package/src/utils/type-guards.ts +0 -202
  228. package/src/utils/url-builder.ts +0 -68
@@ -1 +1 @@
1
- {"version":3,"file":"azure-config.js","sourceRoot":"","sources":["../../../../src/core/config/azure-config.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAeH,8CAmDC;AA9DD,6CAAyC;AAEzC,gBAAgB;AAChB,MAAM,MAAM,GAAG,IAAA,sBAAS,GAAE,CAAC;AAE3B;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,MAA4B;IAC5D,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,2CAA2C;QAC3C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GACX,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YACnF,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC5B,CAAC;QAED,qCAAqC;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YACtC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACtD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,CAAC;YACxC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;YACzC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,yDAAyD;YACzD,MAAM,CAAC,UAAU,GAAG,oBAAoB,CAAC;QAC3C,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACnD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;YACvC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;QACvD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,CAAC;YAC5C,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;QACjE,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;YAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;YAC9B,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU;YAClC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;YACjD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"azure-config.js","sourceRoot":"","sources":["../../../../src/core/config/azure-config.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAeH,8CAqCC;AAhDD,6CAAyC;AAEzC,gBAAgB;AAChB,MAAM,MAAM,GAAG,IAAA,sBAAS,GAAE,CAAC;AAE3B;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,MAA4B;IAC5D,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,IAAI,CAAC;QACH,2CAA2C;QAC3C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,OAAO,GACX,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;gBAChC,CAAC,CAAC,MAAM,CAAC,OAAO;gBAChB,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC5B,CAAC;QAED,qCAAqC;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;YACtC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QACtD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC;YACzC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;QAC3D,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACnD,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;YAC3C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ;YAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;YAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;YACjD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -20,15 +20,15 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
20
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.defaultLogger = exports.initializeConfig = exports.setLogger = exports.getLogger = exports.setConfig = exports.getConfig = exports.validateAzureConfig = exports.validateConfig = exports.hasAzureConfigInEnv = exports.loadAzureConfigFromEnv = exports.loadConfigFromEnv = void 0;
23
+ exports.defaultLogger = exports.initializeConfig = exports.setLogger = exports.getLogger = exports.setConfig = exports.getConfig = exports.validateConfig = exports.hasAzureConfigInEnv = exports.loadAzureConfigFromEnv = exports.loadConfigFromEnv = void 0;
24
24
  // Re-export all configuration functionality
25
25
  var loader_js_1 = require("./loader.js");
26
26
  Object.defineProperty(exports, "loadConfigFromEnv", { enumerable: true, get: function () { return loader_js_1.loadConfigFromEnv; } });
27
27
  Object.defineProperty(exports, "loadAzureConfigFromEnv", { enumerable: true, get: function () { return loader_js_1.loadAzureConfigFromEnv; } });
28
28
  Object.defineProperty(exports, "hasAzureConfigInEnv", { enumerable: true, get: function () { return loader_js_1.hasAzureConfigInEnv; } });
29
+ // Note: validateAzureConfig is exported from src/core/providers/index.ts
29
30
  var validator_js_1 = require("./validator.js");
30
31
  Object.defineProperty(exports, "validateConfig", { enumerable: true, get: function () { return validator_js_1.validateConfig; } });
31
- Object.defineProperty(exports, "validateAzureConfig", { enumerable: true, get: function () { return validator_js_1.validateAzureConfig; } });
32
32
  var manager_js_1 = require("./manager.js");
33
33
  Object.defineProperty(exports, "getConfig", { enumerable: true, get: function () { return manager_js_1.getConfig; } });
34
34
  Object.defineProperty(exports, "setConfig", { enumerable: true, get: function () { return manager_js_1.setConfig; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/config/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;AAEH,4CAA4C;AAC5C,yCAA6F;AAApF,8GAAA,iBAAiB,OAAA;AAAE,mHAAA,sBAAsB,OAAA;AAAE,gHAAA,mBAAmB,OAAA;AAEvE,+CAAqE;AAA5D,8GAAA,cAAc,OAAA;AAAE,mHAAA,mBAAmB,OAAA;AAE5C,2CAOsB;AANpB,uGAAA,SAAS,OAAA;AACT,uGAAA,SAAS,OAAA;AACT,uGAAA,SAAS,OAAA;AACT,uGAAA,SAAS,OAAA;AACT,8GAAA,gBAAgB,OAAA;AAChB,2GAAA,aAAa,OAAA;AAGf,sCAAsC;AACtC,oDAAkC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/config/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;AAEH,4CAA4C;AAC5C,yCAIqB;AAHnB,8GAAA,iBAAiB,OAAA;AACjB,mHAAA,sBAAsB,OAAA;AACtB,gHAAA,mBAAmB,OAAA;AAGrB,yEAAyE;AACzE,+CAAgD;AAAvC,8GAAA,cAAc,OAAA;AAEvB,2CAOsB;AANpB,uGAAA,SAAS,OAAA;AACT,uGAAA,SAAS,OAAA;AACT,uGAAA,SAAS,OAAA;AACT,uGAAA,SAAS,OAAA;AACT,8GAAA,gBAAgB,OAAA;AAChB,2GAAA,aAAa,OAAA;AAGf,sCAAsC;AACtC,oDAAkC"}
@@ -9,18 +9,44 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.loadConfigFromEnv = loadConfigFromEnv;
10
10
  exports.loadAzureConfigFromEnv = loadAzureConfigFromEnv;
11
11
  exports.hasAzureConfigInEnv = hasAzureConfigInEnv;
12
+ const dotenv_1 = require("dotenv");
13
+ const fs_1 = require("fs");
14
+ const path_1 = require("path");
15
+ const constants_js_1 = require("../../utils/constants.js");
12
16
  /**
13
- * Default Revenium base URL for consistency with other middleware
17
+ * Flag to track if .env files have been loaded
14
18
  */
15
- const DEFAULT_REVENIUM_BASE_URL = 'https://api.revenium.ai';
19
+ let envFilesLoaded = false;
20
+ /**
21
+ * Load .env files automatically
22
+ * Tries to load .env.local and .env files from current and parent directories
23
+ */
24
+ function loadEnvFiles() {
25
+ if (envFilesLoaded)
26
+ return;
27
+ const envFiles = [".env.local", ".env"];
28
+ const cwd = process.cwd();
29
+ const searchDirs = [cwd, (0, path_1.join)(cwd, "..")];
30
+ for (const dir of searchDirs) {
31
+ for (const envFile of envFiles) {
32
+ const envPath = (0, path_1.join)(dir, envFile);
33
+ if ((0, fs_1.existsSync)(envPath)) {
34
+ (0, dotenv_1.config)({ path: envPath });
35
+ }
36
+ }
37
+ }
38
+ envFilesLoaded = true;
39
+ }
16
40
  /**
17
41
  * Load configuration from environment variables
42
+ * Automatically loads .env files first
18
43
  */
19
44
  function loadConfigFromEnv() {
45
+ loadEnvFiles();
20
46
  const reveniumApiKey = process.env.REVENIUM_METERING_API_KEY || process.env.REVENIUM_API_KEY;
21
47
  const reveniumBaseUrl = process.env.REVENIUM_METERING_BASE_URL ||
22
48
  process.env.REVENIUM_BASE_URL ||
23
- DEFAULT_REVENIUM_BASE_URL;
49
+ constants_js_1.DEFAULT_REVENIUM_BASE_URL;
24
50
  const openaiApiKey = process.env.OPENAI_API_KEY;
25
51
  if (!reveniumApiKey)
26
52
  return null;
@@ -32,32 +58,26 @@ function loadConfigFromEnv() {
32
58
  }
33
59
  /**
34
60
  * Load Azure configuration from environment variables
61
+ * Automatically loads .env files first
35
62
  */
36
63
  function loadAzureConfigFromEnv() {
64
+ loadEnvFiles();
37
65
  const endpoint = process.env.AZURE_OPENAI_ENDPOINT;
38
- const deployment = process.env.AZURE_OPENAI_DEPLOYMENT;
39
66
  const apiVersion = process.env.AZURE_OPENAI_API_VERSION;
40
67
  const apiKey = process.env.AZURE_OPENAI_API_KEY;
41
- const tenantId = process.env.AZURE_OPENAI_TENANT_ID;
42
- const resourceGroup = process.env.AZURE_OPENAI_RESOURCE_GROUP;
43
68
  // Return null if no Azure config is present
44
- if (!endpoint && !deployment && !apiKey)
69
+ if (!endpoint && !apiKey)
45
70
  return null;
46
71
  return {
47
72
  endpoint,
48
- deployment,
49
- apiVersion: apiVersion || '2024-12-01-preview', // Default from Python learnings
73
+ apiVersion,
50
74
  apiKey,
51
- tenantId,
52
- resourceGroup,
53
75
  };
54
76
  }
55
77
  /**
56
78
  * Check if Azure configuration is available in environment
57
79
  */
58
80
  function hasAzureConfigInEnv() {
59
- return !!(process.env.AZURE_OPENAI_ENDPOINT ||
60
- process.env.AZURE_OPENAI_DEPLOYMENT ||
61
- process.env.AZURE_OPENAI_API_KEY);
81
+ return !!(process.env.AZURE_OPENAI_ENDPOINT || process.env.AZURE_OPENAI_API_KEY);
62
82
  }
63
83
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/core/config/loader.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAYH,8CAcC;AAKD,wDAkBC;AAKD,kDAMC;AAxDD;;GAEG;AACH,MAAM,yBAAyB,GAAG,yBAAyB,CAAC;AAE5D;;GAEG;AACH,SAAgB,iBAAiB;IAC/B,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAC7F,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACtC,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,yBAAyB,CAAC;IAC5B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAEhD,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO;QACL,cAAc;QACd,eAAe;QACf,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB;IACpC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IACvD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACpD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAE9D,4CAA4C;IAC5C,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACrD,OAAO;QACL,QAAQ;QACR,UAAU;QACV,UAAU,EAAE,UAAU,IAAI,oBAAoB,EAAE,gCAAgC;QAChF,MAAM;QACN,QAAQ;QACR,aAAa;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,GAAG,CAAC,qBAAqB;QACjC,OAAO,CAAC,GAAG,CAAC,uBAAuB;QACnC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CACjC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/core/config/loader.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAwCH,8CAiBC;AAMD,wDAcC;AAKD,kDAIC;AAnFD,mCAA8C;AAC9C,2BAAgC;AAChC,+BAA4B;AAC5B,2DAAqE;AAErE;;GAEG;AACH,IAAI,cAAc,GAAG,KAAK,CAAC;AAE3B;;;GAGG;AACH,SAAS,YAAY;IACnB,IAAI,cAAc;QAAE,OAAO;IAE3B,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,IAAA,WAAI,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAE1C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACnC,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;gBACxB,IAAA,eAAU,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,YAAY,EAAE,CAAC;IAEf,MAAM,cAAc,GAClB,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACxE,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,0BAA0B;QACtC,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,wCAAyB,CAAC;IAC5B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAEhD,IAAI,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO;QACL,cAAc;QACd,eAAe;QACf,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB;IACpC,YAAY,EAAE,CAAC;IAEf,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAEhD,4CAA4C;IAC5C,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO;QACL,QAAQ;QACR,UAAU;QACV,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB;IACjC,OAAO,CAAC,CAAC,CACP,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CACtE,CAAC;AACJ,CAAC"}
@@ -20,7 +20,7 @@ const validator_js_1 = require("./validator.js");
20
20
  exports.defaultLogger = {
21
21
  debug: (message, ...args) => {
22
22
  // Check both config.debug and environment variable
23
- if (globalConfig?.debug || process.env.REVENIUM_DEBUG === 'true') {
23
+ if (globalConfig?.debug || process.env.REVENIUM_DEBUG === "true") {
24
24
  console.debug(`[Revenium Debug] ${message}`, ...args);
25
25
  }
26
26
  },
@@ -51,7 +51,7 @@ function getConfig() {
51
51
  function setConfig(config) {
52
52
  (0, validator_js_1.validateConfig)(config);
53
53
  globalConfig = config;
54
- globalLogger.debug('Revenium configuration updated', {
54
+ globalLogger.debug("Revenium configuration updated", {
55
55
  baseUrl: config.reveniumBaseUrl,
56
56
  hasApiKey: !!config.reveniumApiKey,
57
57
  hasOpenAIKey: !!config.openaiApiKey,
@@ -76,16 +76,22 @@ function initializeConfig() {
76
76
  const envConfig = (0, loader_js_1.loadConfigFromEnv)();
77
77
  if (envConfig) {
78
78
  try {
79
+ // Load Azure configuration if available
80
+ const azureConfig = (0, loader_js_1.loadAzureConfigFromEnv)();
81
+ if (azureConfig) {
82
+ envConfig.azure = azureConfig;
83
+ globalLogger.debug("Azure OpenAI configuration loaded from environment");
84
+ }
79
85
  setConfig(envConfig);
80
- globalLogger.debug('Revenium middleware initialized from environment variables');
86
+ globalLogger.debug("Revenium middleware initialized from environment variables");
81
87
  // Log Azure config availability for debugging
82
88
  if ((0, loader_js_1.hasAzureConfigInEnv)()) {
83
- globalLogger.debug('Azure OpenAI configuration detected in environment');
89
+ globalLogger.debug("Azure OpenAI configuration detected in environment");
84
90
  }
85
91
  return true;
86
92
  }
87
93
  catch (error) {
88
- globalLogger.error('Failed to initialize Revenium configuration:', error);
94
+ globalLogger.error("Failed to initialize Revenium configuration:", error);
89
95
  return false;
90
96
  }
91
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/core/config/manager.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAoCH,8BAEC;AAKD,8BAQC;AAKD,8BAEC;AAKD,8BAEC;AAKD,4CAmBC;AAtFD,2CAAqE;AACrE,iDAAgD;AAEhD;;GAEG;AACU,QAAA,aAAa,GAAW;IACnC,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC7C,mDAAmD;QACnD,IAAI,YAAY,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC5C,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC5C,OAAO,CAAC,IAAI,CAAC,sBAAsB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC7C,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACxD,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,IAAI,YAAY,GAA0B,IAAI,CAAC;AAC/C,IAAI,YAAY,GAAW,qBAAa,CAAC;AAEzC;;GAEG;AACH,SAAgB,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,MAAsB;IAC9C,IAAA,6BAAc,EAAC,MAAM,CAAC,CAAC;IACvB,YAAY,GAAG,MAAM,CAAC;IACtB,YAAY,CAAC,KAAK,CAAC,gCAAgC,EAAE;QACnD,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc;QAClC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,MAAc;IACtC,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,SAAS,GAAG,IAAA,6BAAiB,GAAE,CAAC;IACtC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,SAAS,CAAC,SAAS,CAAC,CAAC;YACrB,YAAY,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAEjF,8CAA8C;YAC9C,IAAI,IAAA,+BAAmB,GAAE,EAAE,CAAC;gBAC1B,YAAY,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAC3E,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../../src/core/config/manager.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAwCH,8BAEC;AAKD,8BAQC;AAKD,8BAEC;AAKD,8BAEC;AAKD,4CAgCC;AAvGD,2CAIqB;AACrB,iDAAgD;AAEhD;;GAEG;AACU,QAAA,aAAa,GAAW;IACnC,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC7C,mDAAmD;QACnD,IAAI,YAAY,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;YACjE,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC5C,OAAO,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC5C,OAAO,CAAC,IAAI,CAAC,sBAAsB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,EAAE,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE;QAC7C,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACxD,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,IAAI,YAAY,GAA0B,IAAI,CAAC;AAC/C,IAAI,YAAY,GAAW,qBAAa,CAAC;AAEzC;;GAEG;AACH,SAAgB,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,MAAsB;IAC9C,IAAA,6BAAc,EAAC,MAAM,CAAC,CAAC;IACvB,YAAY,GAAG,MAAM,CAAC;IACtB,YAAY,CAAC,KAAK,CAAC,gCAAgC,EAAE;QACnD,OAAO,EAAE,MAAM,CAAC,eAAe;QAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc;QAClC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY;KACpC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,MAAc;IACtC,YAAY,GAAG,MAAM,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB;IAC9B,MAAM,SAAS,GAAG,IAAA,6BAAiB,GAAE,CAAC;IACtC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,wCAAwC;YACxC,MAAM,WAAW,GAAG,IAAA,kCAAsB,GAAE,CAAC;YAC7C,IAAI,WAAW,EAAE,CAAC;gBACf,SAAiB,CAAC,KAAK,GAAG,WAAW,CAAC;gBACvC,YAAY,CAAC,KAAK,CAChB,oDAAoD,CACrD,CAAC;YACJ,CAAC;YAED,SAAS,CAAC,SAAS,CAAC,CAAC;YACrB,YAAY,CAAC,KAAK,CAChB,4DAA4D,CAC7D,CAAC;YAEF,8CAA8C;YAC9C,IAAI,IAAA,+BAAmB,GAAE,EAAE,CAAC;gBAC1B,YAAY,CAAC,KAAK,CAChB,oDAAoD,CACrD,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,8CAA8C,EAAE,KAAK,CAAC,CAAC;YAC1E,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -7,19 +7,18 @@
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.validateConfig = validateConfig;
10
- exports.validateAzureConfig = validateAzureConfig;
11
10
  /**
12
11
  * Validate Revenium configuration
13
12
  */
14
13
  function validateConfig(config) {
15
14
  if (!config.reveniumApiKey) {
16
- throw new Error('Revenium API key is required. Set REVENIUM_METERING_API_KEY environment variable or provide reveniumApiKey in config.');
15
+ throw new Error("Revenium API key is required. Set REVENIUM_METERING_API_KEY environment variable or provide reveniumApiKey in config.");
17
16
  }
18
- if (!config.reveniumApiKey.startsWith('hak_')) {
17
+ if (!config.reveniumApiKey.startsWith("hak_")) {
19
18
  throw new Error('Invalid Revenium API key format. Revenium API keys should start with "hak_"');
20
19
  }
21
20
  if (!config.reveniumBaseUrl) {
22
- throw new Error('Revenium base URL is missing. This should not happen as a default URL should be provided.');
21
+ throw new Error("Revenium base URL is missing. This should not happen as a default URL should be provided.");
23
22
  }
24
23
  // Validate URL format
25
24
  try {
@@ -29,45 +28,4 @@ function validateConfig(config) {
29
28
  throw new Error(`Invalid Revenium base URL format: ${config.reveniumBaseUrl}`);
30
29
  }
31
30
  }
32
- /**
33
- * Validate Azure configuration completeness
34
- *
35
- * @param config - Azure configuration to validate
36
- * @returns validation result with missing fields
37
- */
38
- function validateAzureConfig(config) {
39
- const missingFields = [];
40
- const warnings = [];
41
- // Required fields for basic Azure OpenAI operation
42
- if (!config.endpoint) {
43
- missingFields.push('endpoint');
44
- }
45
- if (!config.apiKey) {
46
- missingFields.push('apiKey');
47
- }
48
- // Optional but recommended fields
49
- if (!config.deployment) {
50
- warnings.push('deployment name not specified - may need to be included in model parameter');
51
- }
52
- if (!config.apiVersion) {
53
- warnings.push('API version not specified - using default 2024-12-01-preview');
54
- }
55
- // Validate endpoint format
56
- if (config.endpoint) {
57
- try {
58
- new URL(config.endpoint);
59
- if (!config.endpoint.toLowerCase().includes('azure')) {
60
- warnings.push('endpoint does not contain "azure" - please verify this is an Azure OpenAI endpoint');
61
- }
62
- }
63
- catch (error) {
64
- missingFields.push('valid endpoint URL');
65
- }
66
- }
67
- return {
68
- isValid: missingFields.length === 0,
69
- missingFields,
70
- warnings,
71
- };
72
- }
73
31
  //# sourceMappingURL=validator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../src/core/config/validator.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAOH,wCAuBC;AAQD,kDA6CC;AA/ED;;GAEG;AACH,SAAgB,cAAc,CAAC,MAAsB;IACnD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,uHAAuH,CACxH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IACjF,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,MAAmB;IAKrD,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,mDAAmD;IACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC9F,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAChF,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrD,QAAQ,CAAC,IAAI,CACX,oFAAoF,CACrF,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC;QACnC,aAAa;QACb,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../../src/core/config/validator.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAOH,wCA2BC;AA9BD;;GAEG;AACH,SAAgB,cAAc,CAAC,MAAsB;IACnD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,uHAAuH,CACxH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,6EAA6E,CAC9E,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,qCAAqC,MAAM,CAAC,eAAe,EAAE,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ /**
3
+ * Middleware Module
4
+ *
5
+ * Exports all middleware components.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.StreamingWrapper = exports.ResponsesInterface = exports.EmbeddingsInterface = exports.CompletionsInterface = exports.ChatInterface = exports.ReveniumOpenAI = void 0;
9
+ var revenium_client_js_1 = require("./revenium-client.js");
10
+ Object.defineProperty(exports, "ReveniumOpenAI", { enumerable: true, get: function () { return revenium_client_js_1.ReveniumOpenAI; } });
11
+ var interfaces_js_1 = require("./interfaces.js");
12
+ Object.defineProperty(exports, "ChatInterface", { enumerable: true, get: function () { return interfaces_js_1.ChatInterface; } });
13
+ Object.defineProperty(exports, "CompletionsInterface", { enumerable: true, get: function () { return interfaces_js_1.CompletionsInterface; } });
14
+ Object.defineProperty(exports, "EmbeddingsInterface", { enumerable: true, get: function () { return interfaces_js_1.EmbeddingsInterface; } });
15
+ Object.defineProperty(exports, "ResponsesInterface", { enumerable: true, get: function () { return interfaces_js_1.ResponsesInterface; } });
16
+ Object.defineProperty(exports, "StreamingWrapper", { enumerable: true, get: function () { return interfaces_js_1.StreamingWrapper; } });
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/middleware/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,2DAAsD;AAA7C,oHAAA,cAAc,OAAA;AACvB,iDAMyB;AALvB,8GAAA,aAAa,OAAA;AACb,qHAAA,oBAAoB,OAAA;AACpB,oHAAA,mBAAmB,OAAA;AACnB,mHAAA,kBAAkB,OAAA;AAClB,iHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,361 @@
1
+ "use strict";
2
+ /**
3
+ * Middleware Interfaces
4
+ *
5
+ * Provides interfaces for OpenAI operations.
6
+ * Contains: ChatInterface, CompletionsInterface, EmbeddingsInterface, ResponsesInterface, StreamingWrapper
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ResponsesInterface = exports.EmbeddingsInterface = exports.ChatInterface = exports.CompletionsInterface = exports.StreamingWrapper = void 0;
10
+ const crypto_1 = require("crypto");
11
+ const config_1 = require("../config");
12
+ const tracking_1 = require("../tracking");
13
+ const logger = (0, config_1.getLogger)();
14
+ /**
15
+ * StreamingWrapper - wraps OpenAI stream and tracks tokens
16
+ */
17
+ class StreamingWrapper {
18
+ constructor(stream, config, providerInfo, model, metadata) {
19
+ this.usage = {};
20
+ this.stream = stream;
21
+ this.config = config;
22
+ this.providerInfo = providerInfo;
23
+ this.model = model;
24
+ this.metadata = metadata;
25
+ this.startTime = Date.now();
26
+ this.requestId = (0, crypto_1.randomUUID)();
27
+ }
28
+ async *[Symbol.asyncIterator]() {
29
+ try {
30
+ for await (const chunk of this.stream) {
31
+ // Record time to first token
32
+ if (!this.firstTokenTime && chunk.choices[0]?.delta?.content) {
33
+ this.firstTokenTime = Date.now();
34
+ }
35
+ // Accumulate usage data
36
+ if (chunk.usage) {
37
+ this.usage = chunk.usage;
38
+ }
39
+ // Get request ID from chunk
40
+ if (chunk.id) {
41
+ this.requestId = chunk.id;
42
+ }
43
+ yield chunk;
44
+ }
45
+ // Stream completed - track usage
46
+ const duration = Date.now() - this.startTime;
47
+ const timeToFirstToken = this.firstTokenTime
48
+ ? this.firstTokenTime - this.startTime
49
+ : undefined;
50
+ (0, tracking_1.trackUsageAsync)({
51
+ requestId: this.requestId,
52
+ model: this.model,
53
+ promptTokens: this.usage.prompt_tokens || 0,
54
+ completionTokens: this.usage.completion_tokens || 0,
55
+ totalTokens: this.usage.total_tokens || 0,
56
+ reasoningTokens: this.usage.completion_tokens_details?.reasoning_tokens,
57
+ cachedTokens: this.usage.prompt_tokens_details?.cached_tokens,
58
+ duration,
59
+ finishReason: null, // Will be in final chunk
60
+ usageMetadata: this.metadata,
61
+ isStreamed: true,
62
+ timeToFirstToken,
63
+ providerInfo: this.providerInfo,
64
+ });
65
+ logger.debug("Streaming completed", {
66
+ requestId: this.requestId,
67
+ model: this.model,
68
+ duration,
69
+ timeToFirstToken,
70
+ });
71
+ }
72
+ catch (error) {
73
+ const duration = Date.now() - this.startTime;
74
+ // Track error
75
+ (0, tracking_1.trackUsageAsync)({
76
+ requestId: this.requestId,
77
+ model: this.model,
78
+ promptTokens: this.usage.prompt_tokens || 0,
79
+ completionTokens: this.usage.completion_tokens || 0,
80
+ totalTokens: this.usage.total_tokens || 0,
81
+ duration,
82
+ finishReason: "error",
83
+ usageMetadata: this.metadata,
84
+ isStreamed: true,
85
+ providerInfo: this.providerInfo,
86
+ });
87
+ logger.error("Streaming error", {
88
+ error: error instanceof Error ? error.message : String(error),
89
+ requestId: this.requestId,
90
+ });
91
+ throw error;
92
+ }
93
+ }
94
+ }
95
+ exports.StreamingWrapper = StreamingWrapper;
96
+ /**
97
+ * CompletionsInterface - handles chat completions
98
+ */
99
+ class CompletionsInterface {
100
+ constructor(client, config, providerInfo) {
101
+ this.client = client;
102
+ this.config = config;
103
+ this.providerInfo = providerInfo;
104
+ }
105
+ /**
106
+ * Create a non-streaming chat completion
107
+ */
108
+ async create(params, metadata) {
109
+ const startTime = Date.now();
110
+ const requestId = (0, crypto_1.randomUUID)();
111
+ logger.debug("Creating chat completion", { model: params.model });
112
+ try {
113
+ const response = await this.client.chat.completions.create(params);
114
+ const duration = Date.now() - startTime;
115
+ // Track usage
116
+ (0, tracking_1.trackUsageAsync)({
117
+ requestId: response.id || requestId,
118
+ model: response.model,
119
+ promptTokens: response.usage?.prompt_tokens || 0,
120
+ completionTokens: response.usage?.completion_tokens || 0,
121
+ totalTokens: response.usage?.total_tokens || 0,
122
+ reasoningTokens: response.usage?.completion_tokens_details?.reasoning_tokens,
123
+ cachedTokens: response.usage?.prompt_tokens_details?.cached_tokens,
124
+ duration,
125
+ finishReason: response.choices[0]?.finish_reason || null,
126
+ usageMetadata: metadata,
127
+ isStreamed: false,
128
+ providerInfo: this.providerInfo,
129
+ });
130
+ logger.debug("Chat completion created", {
131
+ requestId: response.id,
132
+ model: response.model,
133
+ duration,
134
+ });
135
+ return response;
136
+ }
137
+ catch (error) {
138
+ const duration = Date.now() - startTime;
139
+ // Track error
140
+ (0, tracking_1.trackUsageAsync)({
141
+ requestId,
142
+ model: params.model,
143
+ promptTokens: 0,
144
+ completionTokens: 0,
145
+ totalTokens: 0,
146
+ duration,
147
+ finishReason: "error",
148
+ usageMetadata: metadata,
149
+ isStreamed: false,
150
+ providerInfo: this.providerInfo,
151
+ });
152
+ logger.error("Chat completion failed", {
153
+ error: error instanceof Error ? error.message : String(error),
154
+ model: params.model,
155
+ duration,
156
+ });
157
+ throw error;
158
+ }
159
+ }
160
+ /**
161
+ * Create a streaming chat completion
162
+ */
163
+ async createStreaming(params, metadata) {
164
+ logger.debug("Creating streaming completion", { model: params.model });
165
+ // Ensure stream_options includes usage data
166
+ const stream = await this.client.chat.completions.create({
167
+ ...params,
168
+ stream: true,
169
+ stream_options: { include_usage: true },
170
+ });
171
+ return new StreamingWrapper(stream, this.config, this.providerInfo, params.model, metadata);
172
+ }
173
+ }
174
+ exports.CompletionsInterface = CompletionsInterface;
175
+ /**
176
+ * ChatInterface - provides access to completions
177
+ */
178
+ class ChatInterface {
179
+ constructor(client, config, providerInfo) {
180
+ this.client = client;
181
+ this.config = config;
182
+ this.providerInfo = providerInfo;
183
+ }
184
+ completions() {
185
+ return new CompletionsInterface(this.client, this.config, this.providerInfo);
186
+ }
187
+ }
188
+ exports.ChatInterface = ChatInterface;
189
+ /**
190
+ * EmbeddingsInterface - handles embeddings
191
+ */
192
+ class EmbeddingsInterface {
193
+ constructor(client, config, providerInfo) {
194
+ this.client = client;
195
+ this.config = config;
196
+ this.providerInfo = providerInfo;
197
+ }
198
+ async create(params, metadata) {
199
+ const startTime = Date.now();
200
+ const requestId = (0, crypto_1.randomUUID)();
201
+ logger.debug("Creating embeddings", { model: params.model });
202
+ try {
203
+ const response = await this.client.embeddings.create(params);
204
+ const duration = Date.now() - startTime;
205
+ // Track embeddings usage
206
+ (0, tracking_1.trackEmbeddingsUsageAsync)({
207
+ transactionId: requestId,
208
+ model: response.model,
209
+ promptTokens: response.usage.prompt_tokens,
210
+ totalTokens: response.usage.total_tokens,
211
+ duration,
212
+ usageMetadata: metadata,
213
+ requestStartTime: startTime,
214
+ providerInfo: this.providerInfo,
215
+ });
216
+ logger.debug("Embeddings created", {
217
+ requestId,
218
+ model: response.model,
219
+ duration,
220
+ });
221
+ return response;
222
+ }
223
+ catch (error) {
224
+ const duration = Date.now() - startTime;
225
+ logger.error("Embeddings failed", {
226
+ error: error instanceof Error ? error.message : String(error),
227
+ model: params.model,
228
+ duration,
229
+ });
230
+ throw error;
231
+ }
232
+ }
233
+ }
234
+ exports.EmbeddingsInterface = EmbeddingsInterface;
235
+ /**
236
+ * ResponsesInterface - handles Responses API (stateful API)
237
+ */
238
+ class ResponsesInterface {
239
+ constructor(client, config, providerInfo) {
240
+ this.client = client;
241
+ this.config = config;
242
+ this.providerInfo = providerInfo;
243
+ }
244
+ async create(params, metadata) {
245
+ const startTime = Date.now();
246
+ const requestId = (0, crypto_1.randomUUID)();
247
+ logger.debug("Creating response (Responses API)", { model: params.model });
248
+ try {
249
+ // Type assertion for Responses API (not yet in official types)
250
+ const responsesAPI = this.client.responses;
251
+ if (!responsesAPI || !responsesAPI.create) {
252
+ throw new Error("Responses API not available in this OpenAI SDK version");
253
+ }
254
+ const response = await responsesAPI.create(params);
255
+ const duration = Date.now() - startTime;
256
+ // Track usage (Responses API has different usage structure)
257
+ const usage = response.usage;
258
+ if (usage) {
259
+ (0, tracking_1.trackUsageAsync)({
260
+ requestId: response.id || requestId,
261
+ model: response.model || params.model,
262
+ promptTokens: usage.input_tokens || 0,
263
+ completionTokens: usage.output_tokens || 0,
264
+ totalTokens: usage.total_tokens || 0,
265
+ reasoningTokens: usage.reasoning_tokens,
266
+ cachedTokens: usage.cached_tokens,
267
+ duration,
268
+ finishReason: response.finish_reason || "completed",
269
+ usageMetadata: metadata,
270
+ isStreamed: false,
271
+ providerInfo: this.providerInfo,
272
+ });
273
+ }
274
+ logger.debug("Response created (Responses API)", {
275
+ requestId: response.id,
276
+ model: response.model,
277
+ duration,
278
+ });
279
+ return response;
280
+ }
281
+ catch (error) {
282
+ const duration = Date.now() - startTime;
283
+ logger.error("Responses API failed", {
284
+ error: error instanceof Error ? error.message : String(error),
285
+ model: params.model,
286
+ duration,
287
+ });
288
+ throw error;
289
+ }
290
+ }
291
+ async createStreaming(params, metadata) {
292
+ const startTime = Date.now();
293
+ const requestId = (0, crypto_1.randomUUID)();
294
+ logger.debug("Creating streaming response (Responses API)", {
295
+ model: params.model,
296
+ });
297
+ try {
298
+ // Type assertion for Responses API (not yet in official types)
299
+ const responsesAPI = this.client.responses;
300
+ if (!responsesAPI || !responsesAPI.create) {
301
+ throw new Error("Responses API not available in this OpenAI SDK version");
302
+ }
303
+ // Ensure stream is enabled
304
+ const streamParams = { ...params, stream: true };
305
+ const stream = await responsesAPI.create(streamParams);
306
+ // Wrap the stream to track usage
307
+ const self = this;
308
+ const wrappedStream = (async function* () {
309
+ let fullContent = "";
310
+ let finalResponse = null;
311
+ for await (const chunk of stream) {
312
+ // Accumulate content from text deltas
313
+ if (chunk.type === "response.output_text.delta" && chunk.delta) {
314
+ fullContent += chunk.delta;
315
+ }
316
+ // Capture final response with usage
317
+ if (chunk.type === "response.completed" && chunk.response) {
318
+ finalResponse = chunk.response;
319
+ }
320
+ yield chunk;
321
+ }
322
+ // Track final usage
323
+ const duration = Date.now() - startTime;
324
+ if (finalResponse?.usage) {
325
+ const usage = finalResponse.usage;
326
+ (0, tracking_1.trackUsageAsync)({
327
+ requestId: finalResponse.id || requestId,
328
+ model: finalResponse.model || params.model,
329
+ promptTokens: usage.input_tokens || 0,
330
+ completionTokens: usage.output_tokens || 0,
331
+ totalTokens: usage.total_tokens || 0,
332
+ reasoningTokens: usage.output_tokens_details?.reasoning_tokens,
333
+ cachedTokens: usage.input_tokens_details?.cached_tokens,
334
+ duration,
335
+ finishReason: finalResponse.status || "completed",
336
+ usageMetadata: metadata,
337
+ isStreamed: true,
338
+ providerInfo: self.providerInfo,
339
+ });
340
+ }
341
+ logger.debug("Streaming response completed (Responses API)", {
342
+ requestId,
343
+ model: params.model,
344
+ duration,
345
+ });
346
+ })();
347
+ return wrappedStream;
348
+ }
349
+ catch (error) {
350
+ const duration = Date.now() - startTime;
351
+ logger.error("Responses API streaming failed", {
352
+ error: error instanceof Error ? error.message : String(error),
353
+ model: params.model,
354
+ duration,
355
+ });
356
+ throw error;
357
+ }
358
+ }
359
+ }
360
+ exports.ResponsesInterface = ResponsesInterface;
361
+ //# sourceMappingURL=interfaces.js.map