@revenium/openai 1.0.12 → 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 (236) hide show
  1. package/.env.example +10 -15
  2. package/CHANGELOG.md +59 -0
  3. package/CODE_OF_CONDUCT.md +57 -0
  4. package/CONTRIBUTING.md +38 -0
  5. package/README.md +109 -515
  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 +12 -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 +30 -35
  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 -174
  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 +27 -19
  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/cjs/utils/stop-reason-mapper.js +4 -0
  52. package/dist/cjs/utils/stop-reason-mapper.js.map +1 -1
  53. package/dist/cjs/utils/url-builder.js +3 -3
  54. package/dist/esm/core/client/index.js +6 -0
  55. package/dist/esm/core/client/index.js.map +1 -0
  56. package/dist/esm/core/client/manager.js +102 -0
  57. package/dist/esm/core/client/manager.js.map +1 -0
  58. package/dist/esm/core/config/azure-config.js +6 -18
  59. package/dist/esm/core/config/azure-config.js.map +1 -1
  60. package/dist/esm/core/config/index.js +5 -4
  61. package/dist/esm/core/config/index.js.map +1 -1
  62. package/dist/esm/core/config/loader.js +33 -13
  63. package/dist/esm/core/config/loader.js.map +1 -1
  64. package/dist/esm/core/config/manager.js +14 -7
  65. package/dist/esm/core/config/manager.js.map +1 -1
  66. package/dist/esm/core/config/validator.js +3 -44
  67. package/dist/esm/core/config/validator.js.map +1 -1
  68. package/dist/esm/core/middleware/index.js +8 -0
  69. package/dist/esm/core/middleware/index.js.map +1 -0
  70. package/dist/esm/core/middleware/interfaces.js +353 -0
  71. package/dist/esm/core/middleware/interfaces.js.map +1 -0
  72. package/dist/esm/core/middleware/revenium-client.js +105 -0
  73. package/dist/esm/core/middleware/revenium-client.js.map +1 -0
  74. package/dist/esm/core/providers/detector.js +43 -22
  75. package/dist/esm/core/providers/detector.js.map +1 -1
  76. package/dist/esm/core/providers/index.js +2 -2
  77. package/dist/esm/core/providers/index.js.map +1 -1
  78. package/dist/esm/core/tracking/api-client.js +13 -12
  79. package/dist/esm/core/tracking/api-client.js.map +1 -1
  80. package/dist/esm/core/tracking/payload-builder.js +31 -36
  81. package/dist/esm/core/tracking/payload-builder.js.map +1 -1
  82. package/dist/esm/core/tracking/usage-tracker.js +24 -20
  83. package/dist/esm/core/tracking/usage-tracker.js.map +1 -1
  84. package/dist/esm/index.js +9 -157
  85. package/dist/esm/index.js.map +1 -1
  86. package/dist/esm/types/index.js +2 -10
  87. package/dist/esm/types/index.js.map +1 -1
  88. package/dist/esm/types/openai-augmentation.js +0 -49
  89. package/dist/esm/types/openai-augmentation.js.map +1 -1
  90. package/dist/esm/utils/constants.js +16 -19
  91. package/dist/esm/utils/constants.js.map +1 -1
  92. package/dist/esm/utils/error-handler.js +19 -15
  93. package/dist/esm/utils/error-handler.js.map +1 -1
  94. package/dist/esm/utils/metadata-builder.js +27 -19
  95. package/dist/esm/utils/metadata-builder.js.map +1 -1
  96. package/dist/esm/utils/provider-detection.js +26 -29
  97. package/dist/esm/utils/provider-detection.js.map +1 -1
  98. package/dist/esm/utils/stop-reason-mapper.js +4 -0
  99. package/dist/esm/utils/stop-reason-mapper.js.map +1 -1
  100. package/dist/esm/utils/url-builder.js +3 -3
  101. package/dist/types/core/client/index.d.ts +6 -0
  102. package/dist/types/core/client/index.d.ts.map +1 -0
  103. package/dist/types/core/client/manager.d.ts +32 -0
  104. package/dist/types/core/client/manager.d.ts.map +1 -0
  105. package/dist/types/core/config/azure-config.d.ts +2 -2
  106. package/dist/types/core/config/azure-config.d.ts.map +1 -1
  107. package/dist/types/core/config/index.d.ts +4 -4
  108. package/dist/types/core/config/index.d.ts.map +1 -1
  109. package/dist/types/core/config/loader.d.ts +3 -1
  110. package/dist/types/core/config/loader.d.ts.map +1 -1
  111. package/dist/types/core/config/manager.d.ts +1 -1
  112. package/dist/types/core/config/manager.d.ts.map +1 -1
  113. package/dist/types/core/config/validator.d.ts +1 -12
  114. package/dist/types/core/config/validator.d.ts.map +1 -1
  115. package/dist/types/core/middleware/index.d.ts +8 -0
  116. package/dist/types/core/middleware/index.d.ts.map +1 -0
  117. package/dist/types/core/middleware/interfaces.d.ts +74 -0
  118. package/dist/types/core/middleware/interfaces.d.ts.map +1 -0
  119. package/dist/types/core/middleware/revenium-client.d.ts +58 -0
  120. package/dist/types/core/middleware/revenium-client.d.ts.map +1 -0
  121. package/dist/types/core/providers/detector.d.ts +9 -2
  122. package/dist/types/core/providers/detector.d.ts.map +1 -1
  123. package/dist/types/core/providers/index.d.ts +2 -2
  124. package/dist/types/core/providers/index.d.ts.map +1 -1
  125. package/dist/types/core/tracking/api-client.d.ts +1 -1
  126. package/dist/types/core/tracking/api-client.d.ts.map +1 -1
  127. package/dist/types/core/tracking/payload-builder.d.ts +3 -3
  128. package/dist/types/core/tracking/payload-builder.d.ts.map +1 -1
  129. package/dist/types/core/tracking/usage-tracker.d.ts +2 -2
  130. package/dist/types/core/tracking/usage-tracker.d.ts.map +1 -1
  131. package/dist/types/index.d.ts +11 -114
  132. package/dist/types/index.d.ts.map +1 -1
  133. package/dist/types/types/function-parameters.d.ts +2 -23
  134. package/dist/types/types/function-parameters.d.ts.map +1 -1
  135. package/dist/types/types/index.d.ts +17 -115
  136. package/dist/types/types/index.d.ts.map +1 -1
  137. package/dist/types/types/openai-augmentation.d.ts +4 -139
  138. package/dist/types/types/openai-augmentation.d.ts.map +1 -1
  139. package/dist/types/utils/constants.d.ts +7 -1
  140. package/dist/types/utils/constants.d.ts.map +1 -1
  141. package/dist/types/utils/error-handler.d.ts +2 -2
  142. package/dist/types/utils/error-handler.d.ts.map +1 -1
  143. package/dist/types/utils/metadata-builder.d.ts +4 -3
  144. package/dist/types/utils/metadata-builder.d.ts.map +1 -1
  145. package/dist/types/utils/provider-detection.d.ts +3 -3
  146. package/dist/types/utils/provider-detection.d.ts.map +1 -1
  147. package/dist/types/utils/stop-reason-mapper.d.ts.map +1 -1
  148. package/dist/types/utils/url-builder.d.ts +3 -3
  149. package/examples/README.md +270 -224
  150. package/examples/azure/basic.ts +62 -0
  151. package/examples/azure/responses-basic.ts +45 -0
  152. package/examples/azure/responses-stream.ts +61 -0
  153. package/examples/azure/stream.ts +56 -0
  154. package/examples/getting_started.ts +31 -43
  155. package/examples/openai/basic.ts +45 -0
  156. package/examples/openai/metadata.ts +67 -0
  157. package/examples/openai/responses-basic.ts +44 -0
  158. package/examples/openai/responses-embed.ts +34 -0
  159. package/examples/openai/responses-streaming.ts +63 -0
  160. package/examples/openai/streaming.ts +59 -0
  161. package/package.json +20 -13
  162. package/dist/cjs/core/wrapper/index.js +0 -15
  163. package/dist/cjs/core/wrapper/index.js.map +0 -1
  164. package/dist/cjs/core/wrapper/instance-patcher.js +0 -202
  165. package/dist/cjs/core/wrapper/instance-patcher.js.map +0 -1
  166. package/dist/cjs/core/wrapper/request-handler.js +0 -317
  167. package/dist/cjs/core/wrapper/request-handler.js.map +0 -1
  168. package/dist/cjs/core/wrapper/stream-wrapper.js +0 -82
  169. package/dist/cjs/core/wrapper/stream-wrapper.js.map +0 -1
  170. package/dist/cjs/utils/azure-model-resolver.js +0 -211
  171. package/dist/cjs/utils/azure-model-resolver.js.map +0 -1
  172. package/dist/cjs/utils/request-handler-factory.js +0 -185
  173. package/dist/cjs/utils/request-handler-factory.js.map +0 -1
  174. package/dist/esm/core/wrapper/index.js +0 -9
  175. package/dist/esm/core/wrapper/index.js.map +0 -1
  176. package/dist/esm/core/wrapper/instance-patcher.js +0 -199
  177. package/dist/esm/core/wrapper/instance-patcher.js.map +0 -1
  178. package/dist/esm/core/wrapper/request-handler.js +0 -310
  179. package/dist/esm/core/wrapper/request-handler.js.map +0 -1
  180. package/dist/esm/core/wrapper/stream-wrapper.js +0 -79
  181. package/dist/esm/core/wrapper/stream-wrapper.js.map +0 -1
  182. package/dist/esm/utils/azure-model-resolver.js +0 -204
  183. package/dist/esm/utils/azure-model-resolver.js.map +0 -1
  184. package/dist/esm/utils/request-handler-factory.js +0 -146
  185. package/dist/esm/utils/request-handler-factory.js.map +0 -1
  186. package/dist/types/core/wrapper/index.d.ts +0 -8
  187. package/dist/types/core/wrapper/index.d.ts.map +0 -1
  188. package/dist/types/core/wrapper/instance-patcher.d.ts +0 -33
  189. package/dist/types/core/wrapper/instance-patcher.d.ts.map +0 -1
  190. package/dist/types/core/wrapper/request-handler.d.ts +0 -29
  191. package/dist/types/core/wrapper/request-handler.d.ts.map +0 -1
  192. package/dist/types/core/wrapper/stream-wrapper.d.ts +0 -13
  193. package/dist/types/core/wrapper/stream-wrapper.d.ts.map +0 -1
  194. package/dist/types/utils/azure-model-resolver.d.ts +0 -41
  195. package/dist/types/utils/azure-model-resolver.d.ts.map +0 -1
  196. package/dist/types/utils/request-handler-factory.d.ts +0 -81
  197. package/dist/types/utils/request-handler-factory.d.ts.map +0 -1
  198. package/examples/azure-basic.ts +0 -206
  199. package/examples/azure-responses-basic.ts +0 -233
  200. package/examples/azure-responses-streaming.ts +0 -255
  201. package/examples/azure-streaming.ts +0 -209
  202. package/examples/openai-basic.ts +0 -147
  203. package/examples/openai-function-calling.ts +0 -259
  204. package/examples/openai-responses-basic.ts +0 -212
  205. package/examples/openai-responses-streaming.ts +0 -232
  206. package/examples/openai-streaming.ts +0 -172
  207. package/examples/openai-vision.ts +0 -289
  208. package/src/core/config/azure-config.ts +0 -72
  209. package/src/core/config/index.ts +0 -23
  210. package/src/core/config/loader.ts +0 -66
  211. package/src/core/config/manager.ts +0 -94
  212. package/src/core/config/validator.ts +0 -89
  213. package/src/core/providers/detector.ts +0 -159
  214. package/src/core/providers/index.ts +0 -16
  215. package/src/core/tracking/api-client.ts +0 -78
  216. package/src/core/tracking/index.ts +0 -21
  217. package/src/core/tracking/payload-builder.ts +0 -132
  218. package/src/core/tracking/usage-tracker.ts +0 -189
  219. package/src/core/wrapper/index.ts +0 -9
  220. package/src/core/wrapper/instance-patcher.ts +0 -288
  221. package/src/core/wrapper/request-handler.ts +0 -423
  222. package/src/core/wrapper/stream-wrapper.ts +0 -100
  223. package/src/index.ts +0 -336
  224. package/src/types/function-parameters.ts +0 -251
  225. package/src/types/index.ts +0 -313
  226. package/src/types/openai-augmentation.ts +0 -233
  227. package/src/types/responses-api.ts +0 -308
  228. package/src/utils/azure-model-resolver.ts +0 -220
  229. package/src/utils/constants.ts +0 -21
  230. package/src/utils/error-handler.ts +0 -251
  231. package/src/utils/metadata-builder.ts +0 -219
  232. package/src/utils/provider-detection.ts +0 -257
  233. package/src/utils/request-handler-factory.ts +0 -285
  234. package/src/utils/stop-reason-mapper.ts +0 -74
  235. package/src/utils/type-guards.ts +0 -202
  236. package/src/utils/url-builder.ts +0 -68
@@ -4,8 +4,9 @@
4
4
  * Handles HTTP communication with the Revenium API.
5
5
  * Extracted from tracking.ts for single responsibility.
6
6
  */
7
- import { getConfig, getLogger } from '../config/index.js';
8
- import { buildReveniumUrl } from '../../utils/url-builder.js';
7
+ import { getConfig, getLogger } from "../config";
8
+ import { buildReveniumUrl } from "../../utils/url-builder.js";
9
+ import { DEFAULT_REVENIUM_BASE_URL } from "../../utils/constants";
9
10
  // Global logger
10
11
  const logger = getLogger();
11
12
  /**
@@ -19,10 +20,10 @@ const logger = getLogger();
19
20
  export async function sendToRevenium(payload) {
20
21
  const config = getConfig();
21
22
  if (!config)
22
- return logger.warn('Revenium configuration not found, skipping tracking');
23
+ return logger.warn("Revenium configuration not found, skipping tracking");
23
24
  // Use the new URL builder utility instead of nested conditionals
24
- const url = buildReveniumUrl(config.reveniumBaseUrl || 'https://api.revenium.io', '/ai/completions');
25
- logger.debug('Sending Revenium API request', {
25
+ const url = buildReveniumUrl(config.reveniumBaseUrl || DEFAULT_REVENIUM_BASE_URL, "/ai/completions");
26
+ logger.debug("Sending Revenium API request", {
26
27
  url,
27
28
  operationType: payload.operationType,
28
29
  transactionId: payload.transactionId,
@@ -30,15 +31,15 @@ export async function sendToRevenium(payload) {
30
31
  totalTokens: payload.totalTokenCount,
31
32
  });
32
33
  const response = await fetch(url, {
33
- method: 'POST',
34
+ method: "POST",
34
35
  headers: {
35
- 'Content-Type': 'application/json',
36
- Accept: 'application/json',
37
- 'x-api-key': config.reveniumApiKey,
36
+ "Content-Type": "application/json",
37
+ Accept: "application/json",
38
+ "x-api-key": config.reveniumApiKey,
38
39
  },
39
40
  body: JSON.stringify(payload),
40
41
  });
41
- logger.debug('Revenium API response', {
42
+ logger.debug("Revenium API response", {
42
43
  status: response.status,
43
44
  statusText: response.statusText,
44
45
  transactionId: payload.transactionId,
@@ -46,7 +47,7 @@ export async function sendToRevenium(payload) {
46
47
  });
47
48
  if (!response.ok) {
48
49
  const responseText = await response.text();
49
- logger.error('Revenium API error response', {
50
+ logger.error("Revenium API error response", {
50
51
  status: response.status,
51
52
  statusText: response.statusText,
52
53
  body: responseText,
@@ -56,7 +57,7 @@ export async function sendToRevenium(payload) {
56
57
  throw new Error(`Revenium API error: ${response.status} ${response.statusText} - ${responseText}`);
57
58
  }
58
59
  const responseBody = await response.text();
59
- logger.debug('Revenium tracking successful', {
60
+ logger.debug("Revenium tracking successful", {
60
61
  transactionId: payload.transactionId,
61
62
  operationType: payload.operationType,
62
63
  response: responseBody,
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../../src/core/tracking/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,gBAAgB;AAChB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAwB;IAC3D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAEvF,iEAAiE;IACjE,MAAM,GAAG,GAAG,gBAAgB,CAC1B,MAAM,CAAC,eAAe,IAAI,yBAAyB,EACnD,iBAAiB,CAClB,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;QAC3C,GAAG;QACH,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,eAAe;KACrC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;YAC1B,WAAW,EAAE,MAAM,CAAC,cAAc;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;QACpC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;YAC1C,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,IAAI,EAAE,YAAY;YAClB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,YAAY,EAAE,CAClF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;QAC3C,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,QAAQ,EAAE,YAAY;KACvB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../../src/core/tracking/api-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,gBAAgB;AAChB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAwB;IAC3D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM;QACT,OAAO,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IAE5E,iEAAiE;IACjE,MAAM,GAAG,GAAG,gBAAgB,CAC1B,MAAM,CAAC,eAAe,IAAI,yBAAyB,EACnD,iBAAiB,CAClB,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;QAC3C,GAAG;QACH,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,eAAe;KACrC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;YAC1B,WAAW,EAAE,MAAM,CAAC,cAAc;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;KAC9B,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;QACpC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,6BAA6B,EAAE;YAC1C,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,IAAI,EAAE,YAAY;YAClB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;QACH,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,YAAY,EAAE,CAClF,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE;QAC3C,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,QAAQ,EAAE,YAAY;KACvB,CAAC,CAAC;AACL,CAAC"}
@@ -4,12 +4,11 @@
4
4
  * Handles construction of Revenium API payloads.
5
5
  * Extracted from tracking.ts for single responsibility.
6
6
  */
7
- import { randomUUID } from 'crypto';
8
- import { getLogger } from '../config/index.js';
9
- import { mapStopReason } from '../../utils/stop-reason-mapper.js';
10
- import { buildMetadataFields } from '../../utils/metadata-builder.js';
11
- import { resolveAzureModelName } from '../../utils/azure-model-resolver.js';
12
- import { getProviderMetadata } from '../providers/index.js';
7
+ import { randomUUID } from "crypto";
8
+ import { getLogger } from "../config";
9
+ import { mapStopReason } from "../../utils/stop-reason-mapper.js";
10
+ import { buildMetadataFields } from "../../utils/metadata-builder.js";
11
+ import { getProviderMetadata } from "../providers";
13
12
  // Global logger
14
13
  const logger = getLogger();
15
14
  /**
@@ -30,28 +29,19 @@ export function buildPayload(operationType, response, request, startTime, durati
30
29
  const now = new Date().toISOString();
31
30
  const requestTime = new Date(startTime).toISOString();
32
31
  const usage = response.usage;
33
- // Resolve model name for Azure deployments
34
- const originalModel = response.model;
35
- const resolvedModel = providerInfo?.isAzure
36
- ? resolveAzureModelName(originalModel)
37
- : originalModel;
38
- // Get provider metadata
32
+ // For Azure, use the deployment name as-is
33
+ // The deployment name is what the user provided and should be sent to Revenium
34
+ const modelName = response.model;
35
+ // Get provider metadata (fallback: OpenAI direct)
39
36
  const providerMetadata = providerInfo
40
37
  ? getProviderMetadata(providerInfo)
41
- : { provider: 'OPENAI', modelSource: 'OPENAI' };
42
- if (providerInfo?.isAzure && resolvedModel !== originalModel) {
43
- logger.debug('Azure model name resolved for pricing', {
44
- deployment: originalModel,
45
- resolved: resolvedModel,
46
- provider: providerMetadata.provider,
47
- });
48
- }
38
+ : { provider: "OpenAI", modelSource: "OPENAI" };
49
39
  // Build metadata fields using utility (eliminates repetitive spreading)
50
40
  const metadataFields = buildMetadataFields(request.usageMetadata);
51
41
  // Common fields for all operations
52
42
  const commonPayload = {
53
- costType: 'AI',
54
- model: resolvedModel, // Use resolved model name for accurate pricing
43
+ costType: "AI",
44
+ model: modelName, // Use model/deployment name as-is
55
45
  responseTime: now,
56
46
  requestDuration: duration,
57
47
  provider: providerMetadata.provider,
@@ -63,42 +53,47 @@ export function buildPayload(operationType, response, request, startTime, durati
63
53
  totalTokenCount: usage.total_tokens,
64
54
  // Metadata fields (processed by utility)
65
55
  ...metadataFields,
66
- // Fixed middleware source identifier
67
- middlewareSource: 'nodejs',
56
+ // Fixed middleware source identifier (spec format: revenium-{provider}-{language})
57
+ middlewareSource: "revenium-openai-node",
68
58
  // Backend calculates costs
69
59
  inputTokenCost: undefined,
70
60
  outputTokenCost: undefined,
71
61
  totalCost: undefined,
72
62
  };
73
63
  // Operation-specific fields
74
- if (operationType !== 'CHAT') {
64
+ if (operationType !== "CHAT") {
75
65
  // For embeddings, we don't need the response cast since we use commonPayload
76
66
  return {
77
67
  ...commonPayload,
78
- operationType: 'EMBED',
68
+ operationType: "EMBED",
79
69
  transactionId: `embed-${randomUUID()}`,
80
70
  outputTokenCount: 0,
81
- reasoningTokenCount: 0,
82
- cacheCreationTokenCount: 0,
83
- cacheReadTokenCount: 0,
84
- stopReason: 'END',
71
+ // Embeddings don't support reasoning or caching
72
+ reasoningTokenCount: undefined,
73
+ cacheCreationTokenCount: undefined,
74
+ cacheReadTokenCount: undefined,
75
+ stopReason: "END",
85
76
  isStreamed: false,
86
- timeToFirstToken: 0,
77
+ timeToFirstToken: undefined, // Not applicable for embeddings
87
78
  };
88
79
  }
89
80
  const chatResponse = response;
90
81
  const chatUsage = chatResponse.usage;
91
82
  return {
92
83
  ...commonPayload,
93
- operationType: 'CHAT',
84
+ operationType: "CHAT",
94
85
  transactionId: chatResponse.id || `chat-${randomUUID()}`,
95
86
  outputTokenCount: chatUsage.completion_tokens || 0,
96
- reasoningTokenCount: chatUsage.reasoning_tokens || 0,
97
- cacheCreationTokenCount: 0,
98
- cacheReadTokenCount: chatUsage.cached_tokens || 0,
87
+ // Leave null for models without reasoning capabilities (API spec)
88
+ reasoningTokenCount: chatUsage.reasoning_tokens ?? undefined,
89
+ // OpenAI doesn't report cache creation tokens
90
+ cacheCreationTokenCount: undefined,
91
+ // Only include if provider reports cache hits
92
+ cacheReadTokenCount: chatUsage.cached_tokens ?? undefined,
99
93
  stopReason: mapStopReason(chatResponse.choices?.[0]?.finish_reason, logger),
100
94
  isStreamed: Boolean(request.stream),
101
- timeToFirstToken: request.stream ? 0 : duration,
95
+ // TODO: Implement real TTFB tracking for streaming requests
96
+ timeToFirstToken: undefined,
102
97
  };
103
98
  }
104
99
  //# sourceMappingURL=payload-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"payload-builder.js","sourceRoot":"","sources":["../../../../src/core/tracking/payload-builder.ts"],"names":[],"mappings":"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"}
@@ -4,10 +4,10 @@
4
4
  * High-level tracking functions that combine payload building and API communication.
5
5
  * Extracted from tracking.ts for better organization.
6
6
  */
7
- import { getLogger } from '../config/index.js';
8
- import { sendToRevenium } from './api-client.js';
9
- import { buildPayload } from './payload-builder.js';
10
- import { safeAsyncOperation } from '../../utils/error-handler.js';
7
+ import { getLogger } from "../config";
8
+ import { sendToRevenium } from "./api-client.js";
9
+ import { buildPayload } from "./payload-builder.js";
10
+ import { safeAsyncOperation } from "../../utils/error-handler.js";
11
11
  // Global logger
12
12
  const logger = getLogger();
13
13
  /**
@@ -15,12 +15,12 @@ const logger = getLogger();
15
15
  */
16
16
  export async function sendReveniumMetrics(response, request, startTime, duration, providerInfo) {
17
17
  await safeAsyncOperation(async () => {
18
- const payload = buildPayload('CHAT', response, request, startTime, duration, providerInfo);
18
+ const payload = buildPayload("CHAT", response, request, startTime, duration, providerInfo);
19
19
  await sendToRevenium(payload);
20
- }, 'Chat completion tracking', {
20
+ }, "Chat completion tracking", {
21
21
  logError: true,
22
22
  rethrow: false, // Don't rethrow to maintain fire-and-forget behavior
23
- messagePrefix: 'Chat completion tracking failed: ',
23
+ messagePrefix: "Chat completion tracking failed: ",
24
24
  }, logger);
25
25
  }
26
26
  /**
@@ -28,12 +28,12 @@ export async function sendReveniumMetrics(response, request, startTime, duration
28
28
  */
29
29
  export async function sendReveniumEmbeddingsMetrics(response, request, startTime, duration, providerInfo) {
30
30
  await safeAsyncOperation(async () => {
31
- const payload = buildPayload('EMBED', response, request, startTime, duration, providerInfo);
31
+ const payload = buildPayload("EMBED", response, request, startTime, duration, providerInfo);
32
32
  await sendToRevenium(payload);
33
- }, 'Embeddings tracking', {
33
+ }, "Embeddings tracking", {
34
34
  logError: true,
35
35
  rethrow: false, // Don't rethrow to maintain fire-and-forget behavior
36
- messagePrefix: 'Embeddings tracking failed: ',
36
+ messagePrefix: "Embeddings tracking failed: ",
37
37
  }, logger);
38
38
  }
39
39
  /**
@@ -47,8 +47,12 @@ export function trackUsageAsync(trackingData) {
47
47
  prompt_tokens: trackingData.promptTokens,
48
48
  completion_tokens: trackingData.completionTokens,
49
49
  total_tokens: trackingData.totalTokens,
50
- ...(trackingData.reasoningTokens && { reasoning_tokens: trackingData.reasoningTokens }),
51
- ...(trackingData.cachedTokens && { cached_tokens: trackingData.cachedTokens }),
50
+ ...(trackingData.reasoningTokens && {
51
+ reasoning_tokens: trackingData.reasoningTokens,
52
+ }),
53
+ ...(trackingData.cachedTokens && {
54
+ cached_tokens: trackingData.cachedTokens,
55
+ }),
52
56
  },
53
57
  choices: [
54
58
  {
@@ -65,15 +69,15 @@ export function trackUsageAsync(trackingData) {
65
69
  const startTime = Date.now() - trackingData.duration;
66
70
  sendReveniumMetrics(mockResponse, mockRequest, startTime, trackingData.duration, trackingData.providerInfo)
67
71
  .then(() => {
68
- logger.debug('Usage tracking completed successfully', {
72
+ logger.debug("Usage tracking completed successfully", {
69
73
  requestId: trackingData.requestId,
70
74
  model: trackingData.model,
71
75
  totalTokens: trackingData.totalTokens,
72
76
  isStreamed: trackingData.isStreamed,
73
77
  });
74
78
  })
75
- .catch(error => {
76
- logger.warn('Usage tracking failed', {
79
+ .catch((error) => {
80
+ logger.warn("Usage tracking failed", {
77
81
  error: error instanceof Error ? error.message : String(error),
78
82
  requestId: trackingData.requestId,
79
83
  model: trackingData.model,
@@ -91,21 +95,21 @@ export function trackEmbeddingsUsageAsync(trackingData) {
91
95
  total_tokens: trackingData.totalTokens,
92
96
  },
93
97
  data: [], // Mock empty data array for type compliance
94
- object: 'list',
98
+ object: "list",
95
99
  };
96
100
  const mockRequest = {
97
101
  model: trackingData.model,
98
- input: '', // Mock empty input for type compliance
102
+ input: "", // Mock empty input for type compliance
99
103
  usageMetadata: trackingData.usageMetadata,
100
104
  };
101
105
  sendReveniumEmbeddingsMetrics(mockResponse, mockRequest, trackingData.requestStartTime, trackingData.duration, trackingData.providerInfo)
102
106
  .then(() => {
103
- logger.debug('Embeddings tracking completed successfully', {
107
+ logger.debug("Embeddings tracking completed successfully", {
104
108
  transactionId: trackingData.transactionId,
105
109
  });
106
110
  })
107
- .catch(error => {
108
- logger.warn('Embeddings tracking failed', {
111
+ .catch((error) => {
112
+ logger.warn("Embeddings tracking failed", {
109
113
  error: error instanceof Error ? error.message : String(error),
110
114
  transactionId: trackingData.transactionId,
111
115
  });
@@ -1 +1 @@
1
- {"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../../../src/core/tracking/usage-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-tracker.js","sourceRoot":"","sources":["../../../../src/core/tracking/usage-tracker.ts"],"names":[],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -2,174 +2,26 @@
2
2
  * Revenium OpenAI Middleware for TypeScript
3
3
  *
4
4
  * This middleware tracks OpenAI usage and sends metrics to Revenium.
5
- * Uses hybrid initialization: auto-initializes on import with graceful fallback to manual init.
6
- *
7
- * Environment Variables:
8
- * REVENIUM_METERING_API_KEY=hak_your_api_key
9
- * REVENIUM_METERING_BASE_URL=https://api.revenium.io (optional)
10
- * OPENAI_API_KEY=sk_your_openai_key
11
- *
12
- * Simple Usage (auto-initialization):
13
- * import { patchOpenAIInstance } from '@revenium/openai';
14
- * import OpenAI from 'openai';
15
- *
16
- * const openai = patchOpenAIInstance(new OpenAI());
17
- * // Auto-initializes from environment variables
18
- *
19
- * Advanced Usage (explicit initialization):
20
- * import { initializeReveniumFromEnv, patchOpenAIInstance } from '@revenium/openai';
21
- * import OpenAI from 'openai';
22
- *
23
- * const result = initializeReveniumFromEnv();
24
- * if (!result.success) {
25
- * throw new Error(result.message);
26
- * }
27
- * const openai = patchOpenAIInstance(new OpenAI());
28
- *
29
- * const response = await openai.chat.completions.create({
30
- * model: 'gpt-4',
31
- * messages: [{ role: 'user', content: 'Hello!' }],
32
- * usageMetadata: {
33
- * subscriber: {
34
- * id: 'user-123',
35
- * email: 'user@my-org.com'
36
- * },
37
- * organizationId: 'my-org',
38
- * productId: 'my-app'
39
- * }
40
- * });
41
5
  */
42
6
  // Import type augmentations to extend OpenAI types with usageMetadata
43
- import './types/openai-augmentation.js';
44
- // Import from new modular structure
45
- import { setConfig, validateConfig, initializeConfig, getConfig, getLogger, } from './core/config/index.js';
46
- import { patchOpenAI } from './core/wrapper/index.js';
47
- // Track initialization state
48
- let isInitialized = false;
49
- let autoInitAttempted = false;
7
+ import "./types/openai-augmentation.js";
50
8
  // Note: ExtendedChatCompletionCreateParams and ExtendedEmbeddingCreateParams are no longer exported
51
9
  // as they have been replaced with seamless TypeScript module augmentation. The usageMetadata field
52
10
  // is now natively available on OpenAI's types without requiring additional imports.
53
- // Export tracking functions
54
- export { trackUsageAsync, trackEmbeddingsUsageAsync } from './core/tracking/index.js';
55
- // Export provider detection functions
56
- export { detectProvider, hasAzureConfig, validateAzureConfig, getProviderMetadata, } from './core/providers/index.js';
57
- export { getProviderInfo } from './core/wrapper/index.js';
58
- // Export Azure model resolution functions
59
- export { resolveAzureModelName, clearModelNameCache, getModelNameCacheStats, batchResolveModelNames, wouldTransformDeploymentName, } from './utils/azure-model-resolver.js';
60
- // Global logger
61
- const logger = getLogger();
62
- /**
63
- * Initialize Revenium middleware with configuration
64
- */
65
- export function initializeRevenium(config) {
66
- // Check if already initialized to prevent duplicate initialization
67
- if (isInitialized) {
68
- return {
69
- success: true,
70
- message: 'Revenium middleware already initialized',
71
- };
72
- }
73
- try {
74
- // Apply default base URL if not provided
75
- const configWithDefaults = {
76
- ...config,
77
- reveniumBaseUrl: config.reveniumBaseUrl || 'https://api.revenium.io',
78
- };
79
- validateConfig(configWithDefaults);
80
- setConfig(configWithDefaults);
81
- // Mark as initialized
82
- isInitialized = true;
83
- // Patch OpenAI prototype methods
84
- patchOpenAI();
85
- return {
86
- success: true,
87
- message: 'Revenium middleware initialized successfully',
88
- };
89
- }
90
- catch (error) {
91
- isInitialized = false;
92
- return {
93
- success: false,
94
- message: error instanceof Error ? error.message : 'Unknown initialization error',
95
- };
96
- }
97
- }
98
- /**
99
- * Initialize Revenium middleware from environment variables
100
- */
101
- export function initializeReveniumFromEnv() {
102
- // Check if already initialized to prevent duplicate initialization
103
- if (isInitialized) {
104
- return {
105
- success: true,
106
- message: 'Revenium middleware already initialized',
107
- };
108
- }
109
- const envSuccess = initializeConfig();
110
- if (!envSuccess) {
111
- isInitialized = false;
112
- return {
113
- success: false,
114
- message: 'Failed to load configuration from environment variables. Check REVENIUM_METERING_API_KEY and REVENIUM_METERING_BASE_URL.',
115
- };
116
- }
117
- // Mark as initialized
118
- isInitialized = true;
119
- // Patch OpenAI prototype methods
120
- patchOpenAI();
121
- return {
122
- success: true,
123
- message: 'Revenium middleware initialized from environment',
124
- };
125
- }
126
11
  /**
127
- * Manually patch an OpenAI instance (for advanced use cases)
12
+ * Main API
128
13
  */
129
- export { patchOpenAIInstance } from './core/wrapper/index.js';
14
+ export { Initialize, GetClient, IsInitialized, Reset, Configure, } from "./core/client";
130
15
  /**
131
- * Auto-initialization with graceful fallback
132
- * Attempts to initialize from environment variables on module load.
133
- * If it fails, logs a debug message but doesn't throw - allows manual configuration later.
16
+ * Middleware classes
134
17
  */
135
- function attemptAutoInitialization() {
136
- if (autoInitAttempted || isInitialized)
137
- return;
138
- autoInitAttempted = true;
139
- try {
140
- const result = initializeReveniumFromEnv();
141
- if (result.success) {
142
- // Auto-init succeeded - log debug message
143
- logger.debug('Revenium middleware auto-initialized from environment variables');
144
- }
145
- else {
146
- // Auto-init failed - log debug message but don't throw
147
- logger.debug('Auto-initialization failed, manual initialization required:', result.message);
148
- }
149
- }
150
- catch (error) {
151
- // Unexpected error during auto-init - log but don't throw
152
- logger.debug('Auto-initialization encountered error:', error instanceof Error ? error.message : String(error));
153
- }
154
- }
18
+ export { ReveniumOpenAI, ChatInterface, CompletionsInterface, EmbeddingsInterface, ResponsesInterface, StreamingWrapper, } from "./core/middleware";
155
19
  /**
156
- * Check if middleware has been initialized
20
+ * Tracking functions (for advanced use cases)
157
21
  */
158
- export function isReveniumInitialized() {
159
- return isInitialized;
160
- }
22
+ export { trackUsageAsync, trackEmbeddingsUsageAsync } from "./core/tracking";
161
23
  /**
162
- * Get detailed initialization status
24
+ * Provider detection functions
163
25
  */
164
- export function getInitializationStatus() {
165
- const config = getConfig();
166
- return {
167
- initialized: isInitialized,
168
- hasConfig: !!config,
169
- hasApiKey: !!config?.reveniumApiKey,
170
- autoInitAttempted,
171
- };
172
- }
173
- // Perform auto-initialization when module is imported
174
- attemptAutoInitialization();
26
+ export { detectProvider, hasAzureConfig, validateAzureConfig, getProviderMetadata, } from "./core/providers";
175
27
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sEAAsE;AACtE,OAAO,gCAAgC,CAAC;AA8DxC,oGAAoG;AACpG,mGAAmG;AACnG,oFAAoF;AAEpF;;GAEG;AACH,OAAO,EACL,UAAU,EACV,SAAS,EACT,aAAa,EACb,KAAK,EACL,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB;;GAEG;AACH,OAAO,EACL,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE7E;;GAEG;AACH,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
@@ -5,22 +5,14 @@
5
5
  * This module exports all core types used throughout the application.
6
6
  */
7
7
  // Re-export function parameter types
8
- export * from './function-parameters.js';
8
+ export * from "./function-parameters.js";
9
9
  // Re-export Responses API types
10
- export * from './responses-api.js';
10
+ export * from "./responses-api.js";
11
11
  /**
12
12
  * Supported AI providers
13
13
  *
14
14
  * Enumeration of AI providers supported by the Revenium middleware.
15
15
  * Used for automatic detection, routing, and provider-specific handling.
16
- *
17
- * @public
18
- * @example
19
- * ```typescript
20
- * if (providerInfo.provider === Provider.AZURE_OPENAI) {
21
- * console.log('Using Azure OpenAI');
22
- * }
23
- * ```
24
16
  */
25
17
  export var Provider;
26
18
  (function (Provider) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qCAAqC;AACrC,cAAc,0BAA0B,CAAC;AAEzC,gCAAgC;AAChC,cAAc,oBAAoB,CAAC;AA0InC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,0BAA0B;IAC1B,6BAAiB,CAAA;IACjB,2BAA2B;IAC3B,yCAA6B,CAAA;AAC/B,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qCAAqC;AACrC,cAAc,0BAA0B,CAAC;AAEzC,gCAAgC;AAChC,cAAc,oBAAoB,CAAC;AAiFnC;;;;;GAKG;AACH,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,0BAA0B;IAC1B,6BAAiB,CAAA;IACjB,2BAA2B;IAC3B,yCAA6B,CAAA;AAC/B,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB"}
@@ -1,54 +1,5 @@
1
1
  /**
2
2
  * TypeScript module augmentation for OpenAI SDK
3
- *
4
- * This file extends OpenAI's existing types to include the usageMetadata field
5
- * through TypeScript's declaration merging feature. This provides seamless
6
- * integration with the OpenAI SDK, allowing developers to use usageMetadata
7
- * directly in OpenAI API calls without type casting or additional imports.
8
- *
9
- * The augmentation covers all major OpenAI API endpoints including:
10
- * - Chat completions (streaming and non-streaming)
11
- * - Embeddings
12
- * - Future API endpoints as they become available
13
- *
14
- * @fileoverview OpenAI SDK type augmentation for Revenium middleware
15
- * @author Revenium
16
- * @since 1.0.0
17
- *
18
- * @example Basic usage with chat completions
19
- * ```typescript
20
- * import '@revenium/openai';
21
- * import OpenAI from 'openai';
22
- *
23
- * const openai = new OpenAI();
24
- *
25
- * const response = await openai.chat.completions.create({
26
- * model: 'gpt-4o-mini',
27
- * messages: [{ role: 'user', content: 'Hello!' }],
28
- * usageMetadata: { // TypeScript recognizes this natively
29
- * subscriber: {
30
- * id: 'user-123',
31
- * email: 'user@my-company.com'
32
- * },
33
- * organizationId: 'my-company',
34
- * productId: 'chat-app',
35
- * taskType: 'customer-support'
36
- * }
37
- * });
38
- * ```
39
- *
40
- * @example Usage with embeddings
41
- * ```typescript
42
- * const embedding = await openai.embeddings.create({
43
- * model: 'text-embedding-ada-002',
44
- * input: 'Text to embed',
45
- * usageMetadata: {
46
- * subscriber: { id: 'user-456' },
47
- * productId: 'search-engine',
48
- * taskType: 'document-indexing'
49
- * }
50
- * });
51
- * ```
52
3
  */
53
4
  export {};
54
5
  //# sourceMappingURL=openai-augmentation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-augmentation.js","sourceRoot":"","sources":["../../../src/types/openai-augmentation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG"}
1
+ {"version":3,"file":"openai-augmentation.js","sourceRoot":"","sources":["../../../src/types/openai-augmentation.ts"],"names":[],"mappings":"AAAA;;GAEG"}