@azure/monitor-opentelemetry-exporter 1.0.0-beta.3 → 1.0.0-beta.31

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 (389) hide show
  1. package/README.md +119 -44
  2. package/dist/commonjs/Declarations/Constants.d.ts +149 -0
  3. package/dist/commonjs/Declarations/Constants.d.ts.map +1 -0
  4. package/dist/commonjs/Declarations/Constants.js +167 -0
  5. package/dist/commonjs/Declarations/Constants.js.map +1 -0
  6. package/dist/commonjs/Declarations/Contracts/Constants.d.ts +14 -0
  7. package/dist/commonjs/Declarations/Contracts/Constants.d.ts.map +1 -0
  8. package/dist/commonjs/Declarations/Contracts/Constants.js +5 -0
  9. package/dist/commonjs/Declarations/Contracts/Constants.js.map +1 -0
  10. package/dist/commonjs/Declarations/Contracts/index.d.ts +2 -0
  11. package/dist/commonjs/Declarations/Contracts/index.d.ts.map +1 -0
  12. package/dist/commonjs/Declarations/Contracts/index.js +7 -0
  13. package/dist/commonjs/Declarations/Contracts/index.js.map +1 -0
  14. package/dist/commonjs/config.d.ts +30 -0
  15. package/dist/commonjs/config.d.ts.map +1 -0
  16. package/dist/commonjs/config.js +3 -0
  17. package/dist/commonjs/config.js.map +1 -0
  18. package/dist/commonjs/export/base.d.ts +36 -0
  19. package/dist/commonjs/export/base.d.ts.map +1 -0
  20. package/dist/commonjs/export/base.js +59 -0
  21. package/dist/commonjs/export/base.js.map +1 -0
  22. package/dist/commonjs/export/log.d.ts +30 -0
  23. package/dist/commonjs/export/log.d.ts.map +1 -0
  24. package/dist/commonjs/export/log.js +68 -0
  25. package/dist/commonjs/export/log.js.map +1 -0
  26. package/dist/commonjs/export/metric.d.ts +39 -0
  27. package/dist/commonjs/export/metric.d.ts.map +1 -0
  28. package/dist/commonjs/export/metric.js +79 -0
  29. package/dist/commonjs/export/metric.js.map +1 -0
  30. package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.d.ts +39 -0
  31. package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.d.ts.map +1 -0
  32. package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.js +127 -0
  33. package/dist/commonjs/export/statsbeat/longIntervalStatsbeatMetrics.js.map +1 -0
  34. package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.d.ts +51 -0
  35. package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.d.ts.map +1 -0
  36. package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.js +289 -0
  37. package/dist/commonjs/export/statsbeat/networkStatsbeatMetrics.js.map +1 -0
  38. package/dist/commonjs/export/statsbeat/statsbeatExporter.d.ts +32 -0
  39. package/dist/commonjs/export/statsbeat/statsbeatExporter.d.ts.map +1 -0
  40. package/dist/commonjs/export/statsbeat/statsbeatExporter.js +62 -0
  41. package/dist/commonjs/export/statsbeat/statsbeatExporter.js.map +1 -0
  42. package/dist/commonjs/export/statsbeat/statsbeatMetrics.d.ts +11 -0
  43. package/dist/commonjs/export/statsbeat/statsbeatMetrics.d.ts.map +1 -0
  44. package/dist/commonjs/export/statsbeat/statsbeatMetrics.js +106 -0
  45. package/dist/commonjs/export/statsbeat/statsbeatMetrics.js.map +1 -0
  46. package/dist/commonjs/export/statsbeat/types.d.ts +102 -0
  47. package/dist/commonjs/export/statsbeat/types.d.ts.map +1 -0
  48. package/dist/commonjs/export/statsbeat/types.js +89 -0
  49. package/dist/commonjs/export/statsbeat/types.js.map +1 -0
  50. package/dist/commonjs/export/trace.d.ts +31 -0
  51. package/dist/commonjs/export/trace.d.ts.map +1 -0
  52. package/dist/commonjs/export/trace.js +76 -0
  53. package/dist/commonjs/export/trace.js.map +1 -0
  54. package/dist/commonjs/generated/applicationInsightsClient.d.ts +17 -0
  55. package/dist/commonjs/generated/applicationInsightsClient.d.ts.map +1 -0
  56. package/dist/commonjs/generated/applicationInsightsClient.js +89 -0
  57. package/dist/commonjs/generated/applicationInsightsClient.js.map +1 -0
  58. package/dist/commonjs/generated/index.d.ts +3 -0
  59. package/dist/commonjs/generated/index.d.ts.map +1 -0
  60. package/dist/commonjs/generated/index.js +15 -0
  61. package/dist/commonjs/generated/index.js.map +1 -0
  62. package/dist/commonjs/generated/models/index.d.ts +429 -0
  63. package/dist/commonjs/generated/models/index.d.ts.map +1 -0
  64. package/dist/commonjs/generated/models/index.js +93 -0
  65. package/dist/commonjs/generated/models/index.js.map +1 -0
  66. package/dist/commonjs/generated/models/mappers.d.ts +19 -0
  67. package/dist/commonjs/generated/models/mappers.d.ts.map +1 -0
  68. package/dist/commonjs/generated/models/mappers.js +848 -0
  69. package/dist/commonjs/generated/models/mappers.js.map +1 -0
  70. package/dist/commonjs/generated/models/parameters.d.ts +6 -0
  71. package/dist/commonjs/generated/models/parameters.d.ts.map +1 -0
  72. package/dist/commonjs/generated/models/parameters.js +60 -0
  73. package/dist/commonjs/generated/models/parameters.js.map +1 -0
  74. package/dist/commonjs/index.d.ts +10 -0
  75. package/dist/commonjs/index.d.ts.map +1 -0
  76. package/dist/commonjs/index.js +20 -0
  77. package/dist/commonjs/index.js.map +1 -0
  78. package/dist/commonjs/package.json +3 -0
  79. package/dist/commonjs/platform/index.d.ts +2 -0
  80. package/dist/commonjs/platform/index.d.ts.map +1 -0
  81. package/dist/commonjs/platform/index.js +10 -0
  82. package/dist/commonjs/platform/index.js.map +1 -0
  83. package/dist/commonjs/platform/nodejs/baseSender.d.ts +49 -0
  84. package/dist/commonjs/platform/nodejs/baseSender.d.ts.map +1 -0
  85. package/dist/commonjs/platform/nodejs/baseSender.js +244 -0
  86. package/dist/commonjs/platform/nodejs/baseSender.js.map +1 -0
  87. package/dist/commonjs/platform/nodejs/constants.d.ts +10 -0
  88. package/dist/commonjs/platform/nodejs/constants.d.ts.map +1 -0
  89. package/dist/commonjs/platform/nodejs/constants.js +15 -0
  90. package/dist/commonjs/platform/nodejs/constants.js.map +1 -0
  91. package/dist/commonjs/platform/nodejs/context/context.d.ts +21 -0
  92. package/dist/commonjs/platform/nodejs/context/context.d.ts.map +1 -0
  93. package/dist/commonjs/platform/nodejs/context/context.js +66 -0
  94. package/dist/commonjs/platform/nodejs/context/context.js.map +1 -0
  95. package/dist/commonjs/platform/nodejs/context/index.d.ts +2 -0
  96. package/dist/commonjs/platform/nodejs/context/index.d.ts.map +1 -0
  97. package/dist/commonjs/platform/nodejs/context/index.js +7 -0
  98. package/dist/commonjs/platform/nodejs/context/index.js.map +1 -0
  99. package/dist/commonjs/platform/nodejs/httpSender.d.ts +32 -0
  100. package/dist/commonjs/platform/nodejs/httpSender.d.ts.map +1 -0
  101. package/dist/commonjs/platform/nodejs/httpSender.js +70 -0
  102. package/dist/commonjs/platform/nodejs/httpSender.js.map +1 -0
  103. package/dist/commonjs/platform/nodejs/index.d.ts +8 -0
  104. package/dist/commonjs/platform/nodejs/index.d.ts.map +1 -0
  105. package/dist/commonjs/platform/nodejs/index.js +13 -0
  106. package/dist/commonjs/platform/nodejs/index.js.map +1 -0
  107. package/dist/commonjs/platform/nodejs/persist/fileAccessControl.d.ts +18 -0
  108. package/dist/commonjs/platform/nodejs/persist/fileAccessControl.d.ts.map +1 -0
  109. package/dist/commonjs/platform/nodejs/persist/fileAccessControl.js +177 -0
  110. package/dist/commonjs/platform/nodejs/persist/fileAccessControl.js.map +1 -0
  111. package/dist/commonjs/platform/nodejs/persist/fileSystemHelpers.d.ts +11 -0
  112. package/dist/commonjs/platform/nodejs/persist/fileSystemHelpers.d.ts.map +1 -0
  113. package/dist/commonjs/platform/nodejs/persist/fileSystemHelpers.js +60 -0
  114. package/dist/commonjs/platform/nodejs/persist/fileSystemHelpers.js.map +1 -0
  115. package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.d.ts +29 -0
  116. package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.d.ts.map +1 -0
  117. package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.js +184 -0
  118. package/dist/commonjs/platform/nodejs/persist/fileSystemPersist.js.map +1 -0
  119. package/dist/commonjs/platform/nodejs/persist/index.d.ts +2 -0
  120. package/dist/commonjs/platform/nodejs/persist/index.d.ts.map +1 -0
  121. package/dist/commonjs/platform/nodejs/persist/index.js +7 -0
  122. package/dist/commonjs/platform/nodejs/persist/index.js.map +1 -0
  123. package/dist/commonjs/sampling.d.ts +38 -0
  124. package/dist/commonjs/sampling.d.ts.map +1 -0
  125. package/dist/commonjs/sampling.js +92 -0
  126. package/dist/commonjs/sampling.js.map +1 -0
  127. package/dist/commonjs/tsdoc-metadata.json +11 -0
  128. package/dist/commonjs/types.d.ts +112 -0
  129. package/dist/commonjs/types.d.ts.map +1 -0
  130. package/dist/commonjs/types.js +124 -0
  131. package/dist/commonjs/types.js.map +1 -0
  132. package/dist/commonjs/utils/breezeUtils.d.ts +25 -0
  133. package/dist/commonjs/utils/breezeUtils.d.ts.map +1 -0
  134. package/dist/commonjs/utils/breezeUtils.js +39 -0
  135. package/dist/commonjs/utils/breezeUtils.js.map +1 -0
  136. package/dist/commonjs/utils/common.d.ts +15 -0
  137. package/dist/commonjs/utils/common.d.ts.map +1 -0
  138. package/dist/commonjs/utils/common.js +256 -0
  139. package/dist/commonjs/utils/common.js.map +1 -0
  140. package/dist/commonjs/utils/connectionStringParser.d.ts +13 -0
  141. package/dist/commonjs/utils/connectionStringParser.d.ts.map +1 -0
  142. package/dist/commonjs/utils/connectionStringParser.js +83 -0
  143. package/dist/commonjs/utils/connectionStringParser.js.map +1 -0
  144. package/dist/commonjs/utils/constants/applicationinsights.d.ts +42 -0
  145. package/dist/commonjs/utils/constants/applicationinsights.d.ts.map +1 -0
  146. package/dist/commonjs/utils/constants/applicationinsights.js +48 -0
  147. package/dist/commonjs/utils/constants/applicationinsights.js.map +1 -0
  148. package/dist/commonjs/utils/constants/span/azAttributes.d.ts +16 -0
  149. package/dist/commonjs/utils/constants/span/azAttributes.d.ts.map +1 -0
  150. package/dist/commonjs/utils/constants/span/azAttributes.js +21 -0
  151. package/dist/commonjs/utils/constants/span/azAttributes.js.map +1 -0
  152. package/dist/commonjs/utils/eventhub.d.ts +10 -0
  153. package/dist/commonjs/utils/eventhub.d.ts.map +1 -0
  154. package/dist/commonjs/utils/eventhub.js +57 -0
  155. package/dist/commonjs/utils/eventhub.js.map +1 -0
  156. package/dist/commonjs/utils/logUtils.d.ts +8 -0
  157. package/dist/commonjs/utils/logUtils.d.ts.map +1 -0
  158. package/dist/commonjs/utils/logUtils.js +222 -0
  159. package/dist/commonjs/utils/logUtils.js.map +1 -0
  160. package/dist/commonjs/utils/metricUtils.d.ts +13 -0
  161. package/dist/commonjs/utils/metricUtils.d.ts.map +1 -0
  162. package/dist/commonjs/utils/metricUtils.js +140 -0
  163. package/dist/commonjs/utils/metricUtils.js.map +1 -0
  164. package/dist/commonjs/utils/spanUtils.d.ts +27 -0
  165. package/dist/commonjs/utils/spanUtils.d.ts.map +1 -0
  166. package/dist/commonjs/utils/spanUtils.js +521 -0
  167. package/dist/commonjs/utils/spanUtils.js.map +1 -0
  168. package/dist/esm/Declarations/Constants.d.ts +149 -0
  169. package/dist/esm/Declarations/Constants.d.ts.map +1 -0
  170. package/{dist-esm/src → dist/esm}/Declarations/Constants.js +110 -21
  171. package/dist/esm/Declarations/Constants.js.map +1 -0
  172. package/dist/esm/Declarations/Contracts/Constants.d.ts +14 -0
  173. package/dist/esm/Declarations/Contracts/Constants.d.ts.map +1 -0
  174. package/dist/esm/Declarations/Contracts/Constants.js +4 -0
  175. package/dist/esm/Declarations/Contracts/Constants.js.map +1 -0
  176. package/dist/esm/Declarations/Contracts/index.d.ts +2 -0
  177. package/dist/esm/Declarations/Contracts/index.d.ts.map +1 -0
  178. package/dist/esm/Declarations/Contracts/index.js +4 -0
  179. package/dist/esm/Declarations/Contracts/index.js.map +1 -0
  180. package/dist/esm/config.d.ts +30 -0
  181. package/dist/esm/config.d.ts.map +1 -0
  182. package/dist/esm/config.js +2 -0
  183. package/dist/esm/config.js.map +1 -0
  184. package/dist/esm/export/base.d.ts +36 -0
  185. package/dist/esm/export/base.d.ts.map +1 -0
  186. package/dist/esm/export/base.js +55 -0
  187. package/dist/esm/export/base.js.map +1 -0
  188. package/dist/esm/export/log.d.ts +30 -0
  189. package/dist/esm/export/log.d.ts.map +1 -0
  190. package/dist/esm/export/log.js +64 -0
  191. package/dist/esm/export/log.js.map +1 -0
  192. package/dist/esm/export/metric.d.ts +39 -0
  193. package/dist/esm/export/metric.d.ts.map +1 -0
  194. package/dist/esm/export/metric.js +75 -0
  195. package/dist/esm/export/metric.js.map +1 -0
  196. package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.d.ts +39 -0
  197. package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.d.ts.map +1 -0
  198. package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.js +123 -0
  199. package/dist/esm/export/statsbeat/longIntervalStatsbeatMetrics.js.map +1 -0
  200. package/dist/esm/export/statsbeat/networkStatsbeatMetrics.d.ts +51 -0
  201. package/dist/esm/export/statsbeat/networkStatsbeatMetrics.d.ts.map +1 -0
  202. package/dist/esm/export/statsbeat/networkStatsbeatMetrics.js +284 -0
  203. package/dist/esm/export/statsbeat/networkStatsbeatMetrics.js.map +1 -0
  204. package/dist/esm/export/statsbeat/statsbeatExporter.d.ts +32 -0
  205. package/dist/esm/export/statsbeat/statsbeatExporter.d.ts.map +1 -0
  206. package/dist/esm/export/statsbeat/statsbeatExporter.js +58 -0
  207. package/dist/esm/export/statsbeat/statsbeatExporter.js.map +1 -0
  208. package/dist/esm/export/statsbeat/statsbeatMetrics.d.ts +11 -0
  209. package/dist/esm/export/statsbeat/statsbeatMetrics.d.ts.map +1 -0
  210. package/dist/esm/export/statsbeat/statsbeatMetrics.js +101 -0
  211. package/dist/esm/export/statsbeat/statsbeatMetrics.js.map +1 -0
  212. package/dist/esm/export/statsbeat/types.d.ts +102 -0
  213. package/dist/esm/export/statsbeat/types.d.ts.map +1 -0
  214. package/dist/esm/export/statsbeat/types.js +84 -0
  215. package/dist/esm/export/statsbeat/types.js.map +1 -0
  216. package/dist/esm/export/trace.d.ts +31 -0
  217. package/dist/esm/export/trace.d.ts.map +1 -0
  218. package/dist/esm/export/trace.js +72 -0
  219. package/dist/esm/export/trace.js.map +1 -0
  220. package/dist/esm/generated/applicationInsightsClient.d.ts +17 -0
  221. package/dist/esm/generated/applicationInsightsClient.d.ts.map +1 -0
  222. package/dist/esm/generated/applicationInsightsClient.js +84 -0
  223. package/dist/esm/generated/applicationInsightsClient.js.map +1 -0
  224. package/dist/esm/generated/index.d.ts +3 -0
  225. package/dist/esm/generated/index.d.ts.map +1 -0
  226. package/{dist-esm/src → dist/esm}/generated/index.js +2 -3
  227. package/dist/esm/generated/index.js.map +1 -0
  228. package/dist/esm/generated/models/index.d.ts +429 -0
  229. package/dist/esm/generated/models/index.d.ts.map +1 -0
  230. package/dist/esm/generated/models/index.js +90 -0
  231. package/dist/esm/generated/models/index.js.map +1 -0
  232. package/dist/esm/generated/models/mappers.d.ts +19 -0
  233. package/dist/esm/generated/models/mappers.d.ts.map +1 -0
  234. package/{dist-esm/src → dist/esm}/generated/models/mappers.js +291 -270
  235. package/dist/esm/generated/models/mappers.js.map +1 -0
  236. package/dist/esm/generated/models/parameters.d.ts +6 -0
  237. package/dist/esm/generated/models/parameters.d.ts.map +1 -0
  238. package/{dist-esm/src → dist/esm}/generated/models/parameters.js +17 -12
  239. package/dist/esm/generated/models/parameters.js.map +1 -0
  240. package/dist/esm/index.d.ts +10 -0
  241. package/dist/esm/index.d.ts.map +1 -0
  242. package/dist/esm/index.js +10 -0
  243. package/dist/esm/index.js.map +1 -0
  244. package/dist/esm/package.json +3 -0
  245. package/dist/esm/platform/index.d.ts +2 -0
  246. package/dist/esm/platform/index.d.ts.map +1 -0
  247. package/{dist-esm/src → dist/esm}/platform/index.js +2 -2
  248. package/dist/esm/platform/index.js.map +1 -0
  249. package/dist/esm/platform/nodejs/baseSender.d.ts +49 -0
  250. package/dist/esm/platform/nodejs/baseSender.d.ts.map +1 -0
  251. package/dist/esm/platform/nodejs/baseSender.js +240 -0
  252. package/dist/esm/platform/nodejs/baseSender.js.map +1 -0
  253. package/dist/esm/platform/nodejs/constants.d.ts +10 -0
  254. package/dist/esm/platform/nodejs/constants.d.ts.map +1 -0
  255. package/dist/esm/platform/nodejs/constants.js +12 -0
  256. package/dist/esm/platform/nodejs/constants.js.map +1 -0
  257. package/dist/esm/platform/nodejs/context/context.d.ts +21 -0
  258. package/dist/esm/platform/nodejs/context/context.d.ts.map +1 -0
  259. package/dist/esm/platform/nodejs/context/context.js +60 -0
  260. package/dist/esm/platform/nodejs/context/context.js.map +1 -0
  261. package/dist/esm/platform/nodejs/context/index.d.ts +2 -0
  262. package/dist/esm/platform/nodejs/context/index.d.ts.map +1 -0
  263. package/dist/esm/platform/nodejs/context/index.js +4 -0
  264. package/{dist-esm/src → dist/esm}/platform/nodejs/context/index.js.map +1 -1
  265. package/dist/esm/platform/nodejs/httpSender.d.ts +32 -0
  266. package/dist/esm/platform/nodejs/httpSender.d.ts.map +1 -0
  267. package/dist/esm/platform/nodejs/httpSender.js +65 -0
  268. package/dist/esm/platform/nodejs/httpSender.js.map +1 -0
  269. package/dist/esm/platform/nodejs/index.d.ts +8 -0
  270. package/dist/esm/platform/nodejs/index.d.ts.map +1 -0
  271. package/dist/esm/platform/nodejs/index.js +10 -0
  272. package/dist/esm/platform/nodejs/index.js.map +1 -0
  273. package/dist/esm/platform/nodejs/persist/fileAccessControl.d.ts +18 -0
  274. package/dist/esm/platform/nodejs/persist/fileAccessControl.d.ts.map +1 -0
  275. package/dist/esm/platform/nodejs/persist/fileAccessControl.js +172 -0
  276. package/dist/esm/platform/nodejs/persist/fileAccessControl.js.map +1 -0
  277. package/dist/esm/platform/nodejs/persist/fileSystemHelpers.d.ts +11 -0
  278. package/dist/esm/platform/nodejs/persist/fileSystemHelpers.d.ts.map +1 -0
  279. package/dist/esm/platform/nodejs/persist/fileSystemHelpers.js +55 -0
  280. package/dist/esm/platform/nodejs/persist/fileSystemHelpers.js.map +1 -0
  281. package/dist/esm/platform/nodejs/persist/fileSystemPersist.d.ts +29 -0
  282. package/dist/esm/platform/nodejs/persist/fileSystemPersist.d.ts.map +1 -0
  283. package/dist/esm/platform/nodejs/persist/fileSystemPersist.js +180 -0
  284. package/dist/esm/platform/nodejs/persist/fileSystemPersist.js.map +1 -0
  285. package/dist/esm/platform/nodejs/persist/index.d.ts +2 -0
  286. package/dist/esm/platform/nodejs/persist/index.d.ts.map +1 -0
  287. package/dist/esm/platform/nodejs/persist/index.js +4 -0
  288. package/{dist-esm/src → dist/esm}/platform/nodejs/persist/index.js.map +1 -1
  289. package/dist/esm/sampling.d.ts +38 -0
  290. package/dist/esm/sampling.d.ts.map +1 -0
  291. package/dist/esm/sampling.js +88 -0
  292. package/dist/esm/sampling.js.map +1 -0
  293. package/dist/esm/types.d.ts +112 -0
  294. package/dist/esm/types.d.ts.map +1 -0
  295. package/dist/esm/types.js +121 -0
  296. package/dist/esm/types.js.map +1 -0
  297. package/dist/esm/utils/breezeUtils.d.ts +25 -0
  298. package/dist/esm/utils/breezeUtils.d.ts.map +1 -0
  299. package/dist/esm/utils/breezeUtils.js +35 -0
  300. package/dist/esm/utils/breezeUtils.js.map +1 -0
  301. package/dist/esm/utils/common.d.ts +15 -0
  302. package/dist/esm/utils/common.d.ts.map +1 -0
  303. package/dist/esm/utils/common.js +244 -0
  304. package/dist/esm/utils/common.js.map +1 -0
  305. package/dist/esm/utils/connectionStringParser.d.ts +13 -0
  306. package/dist/esm/utils/connectionStringParser.d.ts.map +1 -0
  307. package/{dist-esm/src → dist/esm}/utils/connectionStringParser.js +22 -8
  308. package/dist/esm/utils/connectionStringParser.js.map +1 -0
  309. package/dist/esm/utils/constants/applicationinsights.d.ts +42 -0
  310. package/dist/esm/utils/constants/applicationinsights.d.ts.map +1 -0
  311. package/dist/esm/utils/constants/applicationinsights.js +45 -0
  312. package/dist/esm/utils/constants/applicationinsights.js.map +1 -0
  313. package/dist/esm/utils/constants/span/azAttributes.d.ts +16 -0
  314. package/dist/esm/utils/constants/span/azAttributes.d.ts.map +1 -0
  315. package/dist/esm/utils/constants/span/azAttributes.js +18 -0
  316. package/dist/esm/utils/constants/span/azAttributes.js.map +1 -0
  317. package/dist/esm/utils/eventhub.d.ts +10 -0
  318. package/dist/esm/utils/eventhub.d.ts.map +1 -0
  319. package/{dist-esm/src → dist/esm}/utils/eventhub.js +6 -5
  320. package/dist/esm/utils/eventhub.js.map +1 -0
  321. package/dist/esm/utils/logUtils.d.ts +8 -0
  322. package/dist/esm/utils/logUtils.d.ts.map +1 -0
  323. package/dist/esm/utils/logUtils.js +219 -0
  324. package/dist/esm/utils/logUtils.js.map +1 -0
  325. package/dist/esm/utils/metricUtils.d.ts +13 -0
  326. package/dist/esm/utils/metricUtils.d.ts.map +1 -0
  327. package/dist/esm/utils/metricUtils.js +133 -0
  328. package/dist/esm/utils/metricUtils.js.map +1 -0
  329. package/dist/esm/utils/spanUtils.d.ts +27 -0
  330. package/dist/esm/utils/spanUtils.d.ts.map +1 -0
  331. package/dist/esm/utils/spanUtils.js +505 -0
  332. package/dist/esm/utils/spanUtils.js.map +1 -0
  333. package/package.json +98 -57
  334. package/CHANGELOG.md +0 -22
  335. package/dist/index.js +0 -1855
  336. package/dist-esm/src/Declarations/Constants.js.map +0 -1
  337. package/dist-esm/src/Declarations/Contracts/Constants.js +0 -4
  338. package/dist-esm/src/Declarations/Contracts/Constants.js.map +0 -1
  339. package/dist-esm/src/Declarations/Contracts/index.js +0 -4
  340. package/dist-esm/src/Declarations/Contracts/index.js.map +0 -1
  341. package/dist-esm/src/config.js +0 -13
  342. package/dist-esm/src/config.js.map +0 -1
  343. package/dist-esm/src/export/trace.js +0 -135
  344. package/dist-esm/src/export/trace.js.map +0 -1
  345. package/dist-esm/src/generated/applicationInsightsClient.js +0 -64
  346. package/dist-esm/src/generated/applicationInsightsClient.js.map +0 -1
  347. package/dist-esm/src/generated/applicationInsightsClientContext.js +0 -32
  348. package/dist-esm/src/generated/applicationInsightsClientContext.js.map +0 -1
  349. package/dist-esm/src/generated/index.js.map +0 -1
  350. package/dist-esm/src/generated/models/index.js +0 -9
  351. package/dist-esm/src/generated/models/index.js.map +0 -1
  352. package/dist-esm/src/generated/models/mappers.js.map +0 -1
  353. package/dist-esm/src/generated/models/parameters.js.map +0 -1
  354. package/dist-esm/src/index.js +0 -5
  355. package/dist-esm/src/index.js.map +0 -1
  356. package/dist-esm/src/platform/index.js.map +0 -1
  357. package/dist-esm/src/platform/nodejs/constants.js +0 -8
  358. package/dist-esm/src/platform/nodejs/constants.js.map +0 -1
  359. package/dist-esm/src/platform/nodejs/context/context.js +0 -105
  360. package/dist-esm/src/platform/nodejs/context/context.js.map +0 -1
  361. package/dist-esm/src/platform/nodejs/context/index.js +0 -4
  362. package/dist-esm/src/platform/nodejs/httpSender.js +0 -34
  363. package/dist-esm/src/platform/nodejs/httpSender.js.map +0 -1
  364. package/dist-esm/src/platform/nodejs/index.js +0 -10
  365. package/dist-esm/src/platform/nodejs/index.js.map +0 -1
  366. package/dist-esm/src/platform/nodejs/persist/fileSystemHelpers.js +0 -48
  367. package/dist-esm/src/platform/nodejs/persist/fileSystemHelpers.js.map +0 -1
  368. package/dist-esm/src/platform/nodejs/persist/fileSystemPersist.js +0 -121
  369. package/dist-esm/src/platform/nodejs/persist/fileSystemPersist.js.map +0 -1
  370. package/dist-esm/src/platform/nodejs/persist/index.js +0 -4
  371. package/dist-esm/src/types.js +0 -4
  372. package/dist-esm/src/types.js.map +0 -1
  373. package/dist-esm/src/utils/breezeUtils.js +0 -27
  374. package/dist-esm/src/utils/breezeUtils.js.map +0 -1
  375. package/dist-esm/src/utils/connectionStringParser.js.map +0 -1
  376. package/dist-esm/src/utils/constants/applicationinsights.js +0 -13
  377. package/dist-esm/src/utils/constants/applicationinsights.js.map +0 -1
  378. package/dist-esm/src/utils/constants/span/azAttributes.js +0 -6
  379. package/dist-esm/src/utils/constants/span/azAttributes.js.map +0 -1
  380. package/dist-esm/src/utils/constants/span/dbAttributes.js +0 -14
  381. package/dist-esm/src/utils/constants/span/dbAttributes.js.map +0 -1
  382. package/dist-esm/src/utils/constants/span/grpcAttributes.js +0 -9
  383. package/dist-esm/src/utils/constants/span/grpcAttributes.js.map +0 -1
  384. package/dist-esm/src/utils/constants/span/httpAttributes.js +0 -8
  385. package/dist-esm/src/utils/constants/span/httpAttributes.js.map +0 -1
  386. package/dist-esm/src/utils/eventhub.js.map +0 -1
  387. package/dist-esm/src/utils/spanUtils.js +0 -214
  388. package/dist-esm/src/utils/spanUtils.js.map +0 -1
  389. package/types/monitor-opentelemetry-exporter.d.ts +0 -29
@@ -0,0 +1,60 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import * as os from "node:os";
4
+ import { SDK_INFO } from "@opentelemetry/core";
5
+ import { ATTR_TELEMETRY_SDK_VERSION } from "@opentelemetry/semantic-conventions";
6
+ import { KnownContextTagKeys } from "../../../generated/index.js";
7
+ import * as ai from "../../../utils/constants/applicationinsights.js";
8
+ import { ENV_AZURE_MONITOR_PREFIX, ENV_APPLICATIONINSIGHTS_SHIM_VERSION, ENV_AZURE_MONITOR_DISTRO_VERSION, } from "../../../Declarations/Constants.js";
9
+ let instance = null;
10
+ /**
11
+ * Azure Telemetry context.
12
+ * @internal
13
+ */
14
+ export class Context {
15
+ constructor() {
16
+ this.tags = {};
17
+ this._loadDeviceContext();
18
+ this._loadInternalContext();
19
+ }
20
+ _loadDeviceContext() {
21
+ this.tags[KnownContextTagKeys.AiDeviceOsVersion] = os && `${os.type()} ${os.release()}`;
22
+ }
23
+ _loadInternalContext() {
24
+ const { node } = process.versions;
25
+ [Context.nodeVersion] = node.split(".");
26
+ Context.opentelemetryVersion = SDK_INFO[ATTR_TELEMETRY_SDK_VERSION];
27
+ Context.sdkVersion = ai.packageVersion;
28
+ const prefix = process.env[ENV_AZURE_MONITOR_PREFIX]
29
+ ? process.env[ENV_AZURE_MONITOR_PREFIX]
30
+ : "";
31
+ const version = this._getVersion();
32
+ const internalSdkVersion = `${prefix}node${Context.nodeVersion}:otel${Context.opentelemetryVersion}:${version}`;
33
+ this.tags[KnownContextTagKeys.AiInternalSdkVersion] = internalSdkVersion;
34
+ }
35
+ _getVersion() {
36
+ if (process.env[ENV_APPLICATIONINSIGHTS_SHIM_VERSION]) {
37
+ return `sha${process.env[ENV_APPLICATIONINSIGHTS_SHIM_VERSION]}`;
38
+ }
39
+ else if (process.env[ENV_AZURE_MONITOR_DISTRO_VERSION]) {
40
+ return `dst${process.env[ENV_AZURE_MONITOR_DISTRO_VERSION]}`;
41
+ }
42
+ else {
43
+ return `ext${Context.sdkVersion}`;
44
+ }
45
+ }
46
+ }
47
+ Context.sdkVersion = null;
48
+ Context.opentelemetryVersion = null;
49
+ Context.nodeVersion = "";
50
+ /**
51
+ * Singleton Context instance
52
+ * @internal
53
+ */
54
+ export function getInstance() {
55
+ if (!instance) {
56
+ instance = new Context();
57
+ }
58
+ return instance;
59
+ }
60
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../src/platform/nodejs/context/context.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,iDAAiD,CAAC;AAEtE,OAAO,EACL,wBAAwB,EACxB,oCAAoC,EACpC,gCAAgC,GACjC,MAAM,oCAAoC,CAAC;AAE5C,IAAI,QAAQ,GAAmB,IAAI,CAAC;AAEpC;;;GAGG;AACH,MAAM,OAAO,OAAO;IASlB;QACE,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;IAC1F,CAAC;IAEO,oBAAoB;QAC1B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,CAAC,oBAAoB,GAAG,QAAQ,CAAC,0BAA0B,CAAC,CAAC;QACpE,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC,cAAc,CAAC;QAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;YAClD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;YACvC,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,kBAAkB,GAAG,GAAG,MAAM,OAAO,OAAO,CAAC,WAAW,QAAQ,OAAO,CAAC,oBAAoB,IAAI,OAAO,EAAE,CAAC;QAChH,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,GAAG,kBAAkB,CAAC;IAC3E,CAAC;IAEO,WAAW;QACjB,IAAI,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,EAAE,CAAC;YACtD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,EAAE,CAAC;QACnE,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,EAAE,CAAC;YACzD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,EAAE,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,OAAO,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;;AAtCa,kBAAU,GAAkB,IAAI,CAAC;AAEjC,4BAAoB,GAAkB,IAAI,CAAC;AAE3C,mBAAW,GAAW,EAAE,CAAC;AAqCzC;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport * as os from \"node:os\";\nimport { SDK_INFO } from \"@opentelemetry/core\";\nimport { ATTR_TELEMETRY_SDK_VERSION } from \"@opentelemetry/semantic-conventions\";\nimport { KnownContextTagKeys } from \"../../../generated/index.js\";\nimport * as ai from \"../../../utils/constants/applicationinsights.js\";\nimport type { Tags } from \"../../../types.js\";\nimport {\n ENV_AZURE_MONITOR_PREFIX,\n ENV_APPLICATIONINSIGHTS_SHIM_VERSION,\n ENV_AZURE_MONITOR_DISTRO_VERSION,\n} from \"../../../Declarations/Constants.js\";\n\nlet instance: Context | null = null;\n\n/**\n * Azure Telemetry context.\n * @internal\n */\nexport class Context {\n public tags: Tags;\n\n public static sdkVersion: string | null = null;\n\n public static opentelemetryVersion: string | null = null;\n\n public static nodeVersion: string = \"\";\n\n constructor() {\n this.tags = {};\n this._loadDeviceContext();\n this._loadInternalContext();\n }\n\n private _loadDeviceContext(): void {\n this.tags[KnownContextTagKeys.AiDeviceOsVersion] = os && `${os.type()} ${os.release()}`;\n }\n\n private _loadInternalContext(): void {\n const { node } = process.versions;\n [Context.nodeVersion] = node.split(\".\");\n Context.opentelemetryVersion = SDK_INFO[ATTR_TELEMETRY_SDK_VERSION];\n Context.sdkVersion = ai.packageVersion;\n\n const prefix = process.env[ENV_AZURE_MONITOR_PREFIX]\n ? process.env[ENV_AZURE_MONITOR_PREFIX]\n : \"\";\n const version = this._getVersion();\n const internalSdkVersion = `${prefix}node${Context.nodeVersion}:otel${Context.opentelemetryVersion}:${version}`;\n this.tags[KnownContextTagKeys.AiInternalSdkVersion] = internalSdkVersion;\n }\n\n private _getVersion(): string {\n if (process.env[ENV_APPLICATIONINSIGHTS_SHIM_VERSION]) {\n return `sha${process.env[ENV_APPLICATIONINSIGHTS_SHIM_VERSION]}`;\n } else if (process.env[ENV_AZURE_MONITOR_DISTRO_VERSION]) {\n return `dst${process.env[ENV_AZURE_MONITOR_DISTRO_VERSION]}`;\n } else {\n return `ext${Context.sdkVersion}`;\n }\n }\n}\n\n/**\n * Singleton Context instance\n * @internal\n */\nexport function getInstance(): Context {\n if (!instance) {\n instance = new Context();\n }\n return instance;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export * from "./context.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/platform/nodejs/context/index.ts"],"names":[],"mappings":"AAGA,cAAc,cAAc,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ export * from "./context.js";
4
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/platform/nodejs/context/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,cAAc,WAAW,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nexport * from \"./context\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/platform/nodejs/context/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,cAAc,cAAc,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport * from \"./context.js\";\n"]}
@@ -0,0 +1,32 @@
1
+ import type { SenderResult } from "../../types.js";
2
+ import type { TelemetryItem as Envelope } from "../../generated/index.js";
3
+ import type { AzureMonitorExporterOptions } from "../../config.js";
4
+ import { BaseSender } from "./baseSender.js";
5
+ /**
6
+ * Exporter HTTP sender class
7
+ * @internal
8
+ */
9
+ export declare class HttpSender extends BaseSender {
10
+ private readonly appInsightsClient;
11
+ private appInsightsClientOptions;
12
+ constructor(options: {
13
+ endpointUrl: string;
14
+ instrumentationKey: string;
15
+ trackStatsbeat: boolean;
16
+ exporterOptions: AzureMonitorExporterOptions;
17
+ aadAudience?: string;
18
+ isStatsbeatSender?: boolean;
19
+ });
20
+ /**
21
+ * Send Azure envelopes
22
+ * @internal
23
+ */
24
+ send(envelopes: Envelope[]): Promise<SenderResult>;
25
+ /**
26
+ * Shutdown sender
27
+ * @internal
28
+ */
29
+ shutdown(): Promise<void>;
30
+ handlePermanentRedirect(location: string | undefined): void;
31
+ }
32
+ //# sourceMappingURL=httpSender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpSender.d.ts","sourceRoot":"","sources":["../../../../src/platform/nodejs/httpSender.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EACV,aAAa,IAAI,QAAQ,EAG1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI7C;;;GAGG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,wBAAwB,CAA0C;gBAE9D,OAAO,EAAE;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,cAAc,EAAE,OAAO,CAAC;QACxB,eAAe,EAAE,2BAA2B,CAAC;QAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B;IAuBD;;;OAGG;IACG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAiBxD;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAQ5D"}
@@ -0,0 +1,65 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import url from "node:url";
4
+ import { diag } from "@opentelemetry/api";
5
+ import { redirectPolicyName } from "@azure/core-rest-pipeline";
6
+ import { ApplicationInsightsClient } from "../../generated/index.js";
7
+ import { BaseSender } from "./baseSender.js";
8
+ const applicationInsightsResource = "https://monitor.azure.com//.default";
9
+ /**
10
+ * Exporter HTTP sender class
11
+ * @internal
12
+ */
13
+ export class HttpSender extends BaseSender {
14
+ constructor(options) {
15
+ super(options);
16
+ // Build endpoint using provided configuration or default values
17
+ this.appInsightsClientOptions = Object.assign({ host: options.endpointUrl }, options.exporterOptions);
18
+ if (this.appInsightsClientOptions.credential) {
19
+ // Add credentialScopes
20
+ if (options.aadAudience) {
21
+ this.appInsightsClientOptions.credentialScopes = [options.aadAudience];
22
+ }
23
+ else {
24
+ // Default
25
+ this.appInsightsClientOptions.credentialScopes = [applicationInsightsResource];
26
+ }
27
+ }
28
+ this.appInsightsClient = new ApplicationInsightsClient(this.appInsightsClientOptions);
29
+ // Handle redirects in HTTP Sender
30
+ this.appInsightsClient.pipeline.removePolicy({ name: redirectPolicyName });
31
+ }
32
+ /**
33
+ * Send Azure envelopes
34
+ * @internal
35
+ */
36
+ async send(envelopes) {
37
+ var _a;
38
+ const options = {};
39
+ let response;
40
+ function onResponse(rawResponse, flatResponse) {
41
+ response = rawResponse;
42
+ if (options.onResponse) {
43
+ options.onResponse(rawResponse, flatResponse);
44
+ }
45
+ }
46
+ await this.appInsightsClient.track(envelopes, Object.assign(Object.assign({}, options), { onResponse }));
47
+ return { statusCode: response === null || response === void 0 ? void 0 : response.status, result: (_a = response === null || response === void 0 ? void 0 : response.bodyAsText) !== null && _a !== void 0 ? _a : "" };
48
+ }
49
+ /**
50
+ * Shutdown sender
51
+ * @internal
52
+ */
53
+ async shutdown() {
54
+ diag.info("HttpSender shutting down");
55
+ }
56
+ handlePermanentRedirect(location) {
57
+ if (location) {
58
+ const locUrl = new url.URL(location);
59
+ if (locUrl && locUrl.host) {
60
+ this.appInsightsClient.host = "https://" + locUrl.host;
61
+ }
62
+ }
63
+ }
64
+ }
65
+ //# sourceMappingURL=httpSender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpSender.js","sourceRoot":"","sources":["../../../../src/platform/nodejs/httpSender.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAO/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,2BAA2B,GAAG,qCAAqC,CAAC;AAE1E;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,UAAU;IAIxC,YAAY,OAOX;QACC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,gEAAgE;QAChE,IAAI,CAAC,wBAAwB,mBAC3B,IAAI,EAAE,OAAO,CAAC,WAAW,IACtB,OAAO,CAAC,eAAe,CAC3B,CAAC;QAEF,IAAI,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,CAAC;YAC7C,uBAAuB;YACvB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,UAAU;gBACV,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAEtF,kCAAkC;QAClC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,SAAqB;;QAC9B,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,IAAI,QAA2C,CAAC;QAChD,SAAS,UAAU,CAAC,WAAkC,EAAE,YAAqB;YAC3E,QAAQ,GAAG,WAAW,CAAC;YACvB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QACD,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,kCACvC,OAAO,KACV,UAAU,IACV,CAAC;QAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,mCAAI,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ;QACZ,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACxC,CAAC;IAED,uBAAuB,CAAC,QAA4B;QAClD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport url from \"node:url\";\nimport { diag } from \"@opentelemetry/api\";\nimport type { FullOperationResponse } from \"@azure/core-client\";\nimport { redirectPolicyName } from \"@azure/core-rest-pipeline\";\nimport type { SenderResult } from \"../../types.js\";\nimport type {\n TelemetryItem as Envelope,\n ApplicationInsightsClientOptionalParams,\n TrackOptionalParams,\n} from \"../../generated/index.js\";\nimport { ApplicationInsightsClient } from \"../../generated/index.js\";\nimport type { AzureMonitorExporterOptions } from \"../../config.js\";\nimport { BaseSender } from \"./baseSender.js\";\n\nconst applicationInsightsResource = \"https://monitor.azure.com//.default\";\n\n/**\n * Exporter HTTP sender class\n * @internal\n */\nexport class HttpSender extends BaseSender {\n private readonly appInsightsClient: ApplicationInsightsClient;\n private appInsightsClientOptions: ApplicationInsightsClientOptionalParams;\n\n constructor(options: {\n endpointUrl: string;\n instrumentationKey: string;\n trackStatsbeat: boolean;\n exporterOptions: AzureMonitorExporterOptions;\n aadAudience?: string;\n isStatsbeatSender?: boolean;\n }) {\n super(options);\n // Build endpoint using provided configuration or default values\n this.appInsightsClientOptions = {\n host: options.endpointUrl,\n ...options.exporterOptions,\n };\n\n if (this.appInsightsClientOptions.credential) {\n // Add credentialScopes\n if (options.aadAudience) {\n this.appInsightsClientOptions.credentialScopes = [options.aadAudience];\n } else {\n // Default\n this.appInsightsClientOptions.credentialScopes = [applicationInsightsResource];\n }\n }\n this.appInsightsClient = new ApplicationInsightsClient(this.appInsightsClientOptions);\n\n // Handle redirects in HTTP Sender\n this.appInsightsClient.pipeline.removePolicy({ name: redirectPolicyName });\n }\n\n /**\n * Send Azure envelopes\n * @internal\n */\n async send(envelopes: Envelope[]): Promise<SenderResult> {\n const options: TrackOptionalParams = {};\n let response: FullOperationResponse | undefined;\n function onResponse(rawResponse: FullOperationResponse, flatResponse: unknown): void {\n response = rawResponse;\n if (options.onResponse) {\n options.onResponse(rawResponse, flatResponse);\n }\n }\n await this.appInsightsClient.track(envelopes, {\n ...options,\n onResponse,\n });\n\n return { statusCode: response?.status, result: response?.bodyAsText ?? \"\" };\n }\n\n /**\n * Shutdown sender\n * @internal\n */\n async shutdown(): Promise<void> {\n diag.info(\"HttpSender shutting down\");\n }\n\n handlePermanentRedirect(location: string | undefined): void {\n if (location) {\n const locUrl = new url.URL(location);\n if (locUrl && locUrl.host) {\n this.appInsightsClient.host = \"https://\" + locUrl.host;\n }\n }\n }\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Node.js specific platform utils
3
+ */
4
+ export * from "./constants.js";
5
+ export * from "./persist/index.js";
6
+ export * from "./httpSender.js";
7
+ export * from "./context/index.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/platform/nodejs/index.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,10 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ /**
4
+ * Node.js specific platform utils
5
+ */
6
+ export * from "./constants.js";
7
+ export * from "./persist/index.js";
8
+ export * from "./httpSender.js";
9
+ export * from "./context/index.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/platform/nodejs/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC;;GAEG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Node.js specific platform utils\n */\nexport * from \"./constants.js\";\nexport * from \"./persist/index.js\";\nexport * from \"./httpSender.js\";\nexport * from \"./context/index.js\";\n"]}
@@ -0,0 +1,18 @@
1
+ export declare class FileAccessControl {
2
+ private static ICACLS_PATH;
3
+ private static POWERSHELL_PATH;
4
+ private static ACLED_DIRECTORIES;
5
+ private static ACL_IDENTITY;
6
+ private static OS_FILE_PROTECTION_CHECKED;
7
+ static OS_PROVIDES_FILE_PROTECTION: boolean;
8
+ static USE_ICACLS: boolean;
9
+ static checkFileProtection(): void;
10
+ static applyACLRules(directory: string): Promise<void>;
11
+ static applyACLRulesSync(directory: string): void;
12
+ private static _runICACLS;
13
+ private static _runICACLSSync;
14
+ private static _getACLIdentity;
15
+ private static _getACLIdentitySync;
16
+ private static _getACLArguments;
17
+ }
18
+ //# sourceMappingURL=fileAccessControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileAccessControl.d.ts","sourceRoot":"","sources":["../../../../../src/platform/nodejs/persist/fileAccessControl.ts"],"names":[],"mappings":"AASA,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,WAAW,CAA4D;IACtF,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuF;IACrH,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAiC;IACjE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAuB;IAClD,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAAS;IAClD,OAAc,2BAA2B,UAAS;IAClD,OAAc,UAAU,UAA6B;WAGvC,mBAAmB,IAAI,IAAI;WA6BrB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAwBrD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAcxD,OAAO,CAAC,MAAM,CAAC,UAAU;IAkBzB,OAAO,CAAC,MAAM,CAAC,cAAc;IAkB7B,OAAO,CAAC,MAAM,CAAC,eAAe;IA2B9B,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA0BlC,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAUhC"}
@@ -0,0 +1,172 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { existsSync } from "node:fs";
4
+ import { type as osType } from "node:os";
5
+ import { spawn, spawnSync } from "node:child_process";
6
+ import { diag } from "@opentelemetry/api";
7
+ import process from "node:process";
8
+ export class FileAccessControl {
9
+ // Check if file access control could be enabled
10
+ static checkFileProtection() {
11
+ if (!FileAccessControl.OS_PROVIDES_FILE_PROTECTION &&
12
+ !FileAccessControl.OS_FILE_PROTECTION_CHECKED) {
13
+ FileAccessControl.OS_FILE_PROTECTION_CHECKED = true;
14
+ // Node's chmod levels do not appropriately restrict file access on Windows
15
+ // Use the built-in command line tool ICACLS on Windows to properly restrict
16
+ // access to the temporary directory used for disk retry mode.
17
+ if (FileAccessControl.USE_ICACLS) {
18
+ // This should be async - but it's currently safer to have this synchronous
19
+ // This guarantees we can immediately fail setDiskRetryMode if we need to
20
+ try {
21
+ FileAccessControl.OS_PROVIDES_FILE_PROTECTION = existsSync(FileAccessControl.ICACLS_PATH);
22
+ }
23
+ catch (e) {
24
+ // Ignore error
25
+ }
26
+ if (!FileAccessControl.OS_PROVIDES_FILE_PROTECTION) {
27
+ diag.warn("Could not find ICACLS in expected location! This is necessary to use disk retry mode on Windows.");
28
+ }
29
+ }
30
+ else {
31
+ // chmod works everywhere else
32
+ FileAccessControl.OS_PROVIDES_FILE_PROTECTION = true;
33
+ }
34
+ }
35
+ }
36
+ static async applyACLRules(directory) {
37
+ if (FileAccessControl.USE_ICACLS) {
38
+ if (FileAccessControl.ACLED_DIRECTORIES[directory] === undefined) {
39
+ // Avoid multiple calls race condition by setting ACLED_DIRECTORIES to false for this directory immediately
40
+ // If batches are being failed faster than the processes spawned below return, some data won't be stored to disk
41
+ // This is better than the alternative of potentially infinitely spawned processes
42
+ FileAccessControl.ACLED_DIRECTORIES[directory] = false;
43
+ try {
44
+ // Restrict this directory to only current user and administrator access
45
+ const identity = await this._getACLIdentity();
46
+ await this._runICACLS(this._getACLArguments(directory, identity));
47
+ FileAccessControl.ACLED_DIRECTORIES[directory] = true;
48
+ }
49
+ catch (ex) {
50
+ FileAccessControl.ACLED_DIRECTORIES[directory] = false; // false is used to cache failed (vs undefined which is "not yet tried")
51
+ throw ex;
52
+ }
53
+ }
54
+ else {
55
+ if (!FileAccessControl.ACLED_DIRECTORIES[directory]) {
56
+ throw new Error("Setting ACL restrictions did not succeed (cached result)");
57
+ }
58
+ }
59
+ }
60
+ }
61
+ static applyACLRulesSync(directory) {
62
+ if (FileAccessControl.USE_ICACLS) {
63
+ // For performance, only run ACL rules if we haven't already during this session
64
+ if (FileAccessControl.ACLED_DIRECTORIES[directory] === undefined) {
65
+ this._runICACLSSync(this._getACLArguments(directory, this._getACLIdentitySync()));
66
+ FileAccessControl.ACLED_DIRECTORIES[directory] = true; // If we get here, it succeeded. _runIACLSSync will throw on failures
67
+ return;
68
+ }
69
+ else if (!FileAccessControl.ACLED_DIRECTORIES[directory]) {
70
+ // falsy but not undefined
71
+ throw new Error("Setting ACL restrictions did not succeed (cached result)");
72
+ }
73
+ }
74
+ }
75
+ static _runICACLS(args) {
76
+ return new Promise((resolve, reject) => {
77
+ const aclProc = spawn(FileAccessControl.ICACLS_PATH, args, {
78
+ windowsHide: true,
79
+ });
80
+ aclProc.on("error", (e) => reject(e));
81
+ aclProc.on("close", (code) => {
82
+ if (code === 0) {
83
+ resolve();
84
+ }
85
+ else {
86
+ reject(new Error(`Setting ACL restrictions did not succeed (ICACLS returned code ${code})`));
87
+ }
88
+ });
89
+ });
90
+ }
91
+ static _runICACLSSync(args) {
92
+ // Some very old versions of Node (< 0.11) don't have this
93
+ if (spawnSync) {
94
+ const aclProc = spawnSync(FileAccessControl.ICACLS_PATH, args, {
95
+ windowsHide: true,
96
+ });
97
+ if (aclProc.error) {
98
+ throw aclProc.error;
99
+ }
100
+ else if (aclProc.status !== 0) {
101
+ throw new Error(`Setting ACL restrictions did not succeed (ICACLS returned code ${aclProc.status})`);
102
+ }
103
+ }
104
+ else {
105
+ throw new Error("Could not synchronously call ICACLS under current version of Node.js");
106
+ }
107
+ }
108
+ static _getACLIdentity() {
109
+ return new Promise((resolve, reject) => {
110
+ if (FileAccessControl.ACL_IDENTITY) {
111
+ resolve(FileAccessControl.ACL_IDENTITY);
112
+ }
113
+ const psProc = spawn(FileAccessControl.POWERSHELL_PATH, ["-Command", "[System.Security.Principal.WindowsIdentity]::GetCurrent().Name"], {
114
+ windowsHide: true,
115
+ stdio: ["ignore", "pipe", "pipe"], // Needed to prevent hanging on Win 7
116
+ });
117
+ let data = "";
118
+ psProc.stdout.on("data", (d) => (data += d));
119
+ psProc.on("error", (e) => reject(e));
120
+ psProc.on("close", (code) => {
121
+ FileAccessControl.ACL_IDENTITY = data && data.trim();
122
+ if (code === 0) {
123
+ resolve(FileAccessControl.ACL_IDENTITY);
124
+ }
125
+ else {
126
+ reject(new Error(`Getting ACL identity did not succeed (PS returned code ${code})`));
127
+ }
128
+ });
129
+ });
130
+ }
131
+ static _getACLIdentitySync() {
132
+ if (FileAccessControl.ACL_IDENTITY) {
133
+ return FileAccessControl.ACL_IDENTITY;
134
+ }
135
+ // Some very old versions of Node (< 0.11) don't have this
136
+ if (spawnSync) {
137
+ const psProc = spawnSync(FileAccessControl.POWERSHELL_PATH, ["-Command", "[System.Security.Principal.WindowsIdentity]::GetCurrent().Name"], {
138
+ windowsHide: true,
139
+ stdio: ["ignore", "pipe", "pipe"], // Needed to prevent hanging on Win 7
140
+ });
141
+ if (psProc.error) {
142
+ throw psProc.error;
143
+ }
144
+ else if (psProc.status !== 0) {
145
+ throw new Error(`Getting ACL identity did not succeed (PS returned code ${psProc.status})`);
146
+ }
147
+ FileAccessControl.ACL_IDENTITY = psProc.stdout && psProc.stdout.toString().trim();
148
+ return FileAccessControl.ACL_IDENTITY;
149
+ }
150
+ else {
151
+ throw new Error("Could not synchronously get ACL identity under current version of Node.js");
152
+ }
153
+ }
154
+ static _getACLArguments(directory, identity) {
155
+ return [
156
+ directory,
157
+ "/grant",
158
+ "*S-1-5-32-544:(OI)(CI)F", // Full permission for Administrators
159
+ "/grant",
160
+ `${identity}:(OI)(CI)F`, // Full permission for current user
161
+ "/inheritance:r",
162
+ ]; // Remove all inherited permissions
163
+ }
164
+ }
165
+ FileAccessControl.ICACLS_PATH = `${process.env.SYSTEMDRIVE}/windows/system32/icacls.exe`;
166
+ FileAccessControl.POWERSHELL_PATH = `${process.env.SYSTEMDRIVE}/windows/system32/windowspowershell/v1.0/powershell.exe`;
167
+ FileAccessControl.ACLED_DIRECTORIES = {};
168
+ FileAccessControl.ACL_IDENTITY = null;
169
+ FileAccessControl.OS_FILE_PROTECTION_CHECKED = false;
170
+ FileAccessControl.OS_PROVIDES_FILE_PROTECTION = false;
171
+ FileAccessControl.USE_ICACLS = osType() === "Windows_NT";
172
+ //# sourceMappingURL=fileAccessControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileAccessControl.js","sourceRoot":"","sources":["../../../../../src/platform/nodejs/persist/fileAccessControl.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { existsSync } from \"node:fs\";\nimport { type as osType } from \"node:os\";\nimport { spawn, spawnSync } from \"node:child_process\";\nimport { diag } from \"@opentelemetry/api\";\nimport process from \"node:process\";\n\nexport class FileAccessControl {\n private static ICACLS_PATH = `${process.env.SYSTEMDRIVE}/windows/system32/icacls.exe`;\n private static POWERSHELL_PATH = `${process.env.SYSTEMDRIVE}/windows/system32/windowspowershell/v1.0/powershell.exe`;\n private static ACLED_DIRECTORIES: { [id: string]: boolean } = {};\n private static ACL_IDENTITY: string | null = null;\n private static OS_FILE_PROTECTION_CHECKED = false;\n public static OS_PROVIDES_FILE_PROTECTION = false;\n public static USE_ICACLS = osType() === \"Windows_NT\";\n\n // Check if file access control could be enabled\n public static checkFileProtection(): void {\n if (\n !FileAccessControl.OS_PROVIDES_FILE_PROTECTION &&\n !FileAccessControl.OS_FILE_PROTECTION_CHECKED\n ) {\n FileAccessControl.OS_FILE_PROTECTION_CHECKED = true;\n // Node's chmod levels do not appropriately restrict file access on Windows\n // Use the built-in command line tool ICACLS on Windows to properly restrict\n // access to the temporary directory used for disk retry mode.\n if (FileAccessControl.USE_ICACLS) {\n // This should be async - but it's currently safer to have this synchronous\n // This guarantees we can immediately fail setDiskRetryMode if we need to\n try {\n FileAccessControl.OS_PROVIDES_FILE_PROTECTION = existsSync(FileAccessControl.ICACLS_PATH);\n } catch (e: any) {\n // Ignore error\n }\n if (!FileAccessControl.OS_PROVIDES_FILE_PROTECTION) {\n diag.warn(\n \"Could not find ICACLS in expected location! This is necessary to use disk retry mode on Windows.\",\n );\n }\n } else {\n // chmod works everywhere else\n FileAccessControl.OS_PROVIDES_FILE_PROTECTION = true;\n }\n }\n }\n\n public static async applyACLRules(directory: string): Promise<void> {\n if (FileAccessControl.USE_ICACLS) {\n if (FileAccessControl.ACLED_DIRECTORIES[directory] === undefined) {\n // Avoid multiple calls race condition by setting ACLED_DIRECTORIES to false for this directory immediately\n // If batches are being failed faster than the processes spawned below return, some data won't be stored to disk\n // This is better than the alternative of potentially infinitely spawned processes\n FileAccessControl.ACLED_DIRECTORIES[directory] = false;\n try {\n // Restrict this directory to only current user and administrator access\n const identity = await this._getACLIdentity();\n await this._runICACLS(this._getACLArguments(directory, identity));\n FileAccessControl.ACLED_DIRECTORIES[directory] = true;\n } catch (ex: any) {\n FileAccessControl.ACLED_DIRECTORIES[directory] = false; // false is used to cache failed (vs undefined which is \"not yet tried\")\n throw ex;\n }\n } else {\n if (!FileAccessControl.ACLED_DIRECTORIES[directory]) {\n throw new Error(\"Setting ACL restrictions did not succeed (cached result)\");\n }\n }\n }\n }\n\n public static applyACLRulesSync(directory: string): void {\n if (FileAccessControl.USE_ICACLS) {\n // For performance, only run ACL rules if we haven't already during this session\n if (FileAccessControl.ACLED_DIRECTORIES[directory] === undefined) {\n this._runICACLSSync(this._getACLArguments(directory, this._getACLIdentitySync()));\n FileAccessControl.ACLED_DIRECTORIES[directory] = true; // If we get here, it succeeded. _runIACLSSync will throw on failures\n return;\n } else if (!FileAccessControl.ACLED_DIRECTORIES[directory]) {\n // falsy but not undefined\n throw new Error(\"Setting ACL restrictions did not succeed (cached result)\");\n }\n }\n }\n\n private static _runICACLS(args: string[]): Promise<void> {\n return new Promise((resolve, reject) => {\n const aclProc = spawn(FileAccessControl.ICACLS_PATH, args, <any>{\n windowsHide: true,\n });\n aclProc.on(\"error\", (e: Error) => reject(e));\n aclProc.on(\"close\", (code: number) => {\n if (code === 0) {\n resolve();\n } else {\n reject(\n new Error(`Setting ACL restrictions did not succeed (ICACLS returned code ${code})`),\n );\n }\n });\n });\n }\n\n private static _runICACLSSync(args: string[]): void {\n // Some very old versions of Node (< 0.11) don't have this\n if (spawnSync) {\n const aclProc = spawnSync(FileAccessControl.ICACLS_PATH, args, <any>{\n windowsHide: true,\n });\n if (aclProc.error) {\n throw aclProc.error;\n } else if (aclProc.status !== 0) {\n throw new Error(\n `Setting ACL restrictions did not succeed (ICACLS returned code ${aclProc.status})`,\n );\n }\n } else {\n throw new Error(\"Could not synchronously call ICACLS under current version of Node.js\");\n }\n }\n\n private static _getACLIdentity(): Promise<string> {\n return new Promise((resolve, reject) => {\n if (FileAccessControl.ACL_IDENTITY) {\n resolve(FileAccessControl.ACL_IDENTITY);\n }\n const psProc = spawn(\n FileAccessControl.POWERSHELL_PATH,\n [\"-Command\", \"[System.Security.Principal.WindowsIdentity]::GetCurrent().Name\"],\n <any>{\n windowsHide: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"], // Needed to prevent hanging on Win 7\n },\n );\n let data = \"\";\n psProc.stdout.on(\"data\", (d: string) => (data += d));\n psProc.on(\"error\", (e: Error) => reject(e));\n psProc.on(\"close\", (code: number) => {\n FileAccessControl.ACL_IDENTITY = data && data.trim();\n if (code === 0) {\n resolve(FileAccessControl.ACL_IDENTITY);\n } else {\n reject(new Error(`Getting ACL identity did not succeed (PS returned code ${code})`));\n }\n });\n });\n }\n\n private static _getACLIdentitySync(): string {\n if (FileAccessControl.ACL_IDENTITY) {\n return FileAccessControl.ACL_IDENTITY;\n }\n // Some very old versions of Node (< 0.11) don't have this\n if (spawnSync) {\n const psProc = spawnSync(\n FileAccessControl.POWERSHELL_PATH,\n [\"-Command\", \"[System.Security.Principal.WindowsIdentity]::GetCurrent().Name\"],\n <any>{\n windowsHide: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"], // Needed to prevent hanging on Win 7\n },\n );\n if (psProc.error) {\n throw psProc.error;\n } else if (psProc.status !== 0) {\n throw new Error(`Getting ACL identity did not succeed (PS returned code ${psProc.status})`);\n }\n FileAccessControl.ACL_IDENTITY = psProc.stdout && psProc.stdout.toString().trim();\n return FileAccessControl.ACL_IDENTITY;\n } else {\n throw new Error(\"Could not synchronously get ACL identity under current version of Node.js\");\n }\n }\n\n private static _getACLArguments(directory: string, identity: string): string[] {\n return [\n directory,\n \"/grant\",\n \"*S-1-5-32-544:(OI)(CI)F\", // Full permission for Administrators\n \"/grant\",\n `${identity}:(OI)(CI)F`, // Full permission for current user\n \"/inheritance:r\",\n ]; // Remove all inherited permissions\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Computes the size (in bytes) of all files in a directory at the root level. Asynchronously.
3
+ * @internal
4
+ */
5
+ export declare const getShallowDirectorySize: (directory: string) => Promise<number>;
6
+ /**
7
+ * Validate directory exists.
8
+ * @internal
9
+ */
10
+ export declare const confirmDirExists: (directory: string) => Promise<void>;
11
+ //# sourceMappingURL=fileSystemHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileSystemHelpers.d.ts","sourceRoot":"","sources":["../../../../../src/platform/nodejs/persist/fileSystemHelpers.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,CAmB/E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,IAAI,CAmBtE,CAAC"}
@@ -0,0 +1,55 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { diag } from "@opentelemetry/api";
4
+ import { join } from "node:path";
5
+ import { lstat, mkdir, readdir, stat } from "node:fs/promises";
6
+ /**
7
+ * Computes the size (in bytes) of all files in a directory at the root level. Asynchronously.
8
+ * @internal
9
+ */
10
+ export const getShallowDirectorySize = async (directory) => {
11
+ let totalSize = 0;
12
+ try {
13
+ // Get the directory listing
14
+ const files = await readdir(directory);
15
+ // Query all file sizes
16
+ for (const file of files) {
17
+ const fileStats = await stat(join(directory, file));
18
+ if (fileStats.isFile()) {
19
+ totalSize += fileStats.size;
20
+ }
21
+ }
22
+ return totalSize;
23
+ }
24
+ catch (err) {
25
+ diag.error(`Error getting directory size: ${err}`);
26
+ return 0;
27
+ }
28
+ };
29
+ /**
30
+ * Validate directory exists.
31
+ * @internal
32
+ */
33
+ export const confirmDirExists = async (directory) => {
34
+ try {
35
+ const stats = await lstat(directory);
36
+ if (!stats.isDirectory()) {
37
+ throw new Error("Path existed but was not a directory");
38
+ }
39
+ }
40
+ catch (err) {
41
+ if (err && err.code === "ENOENT") {
42
+ try {
43
+ const options = { recursive: true };
44
+ await mkdir(directory, options);
45
+ }
46
+ catch (mkdirErr) {
47
+ if (mkdirErr && mkdirErr.code !== "EEXIST") {
48
+ // Handle race condition by ignoring EEXIST
49
+ throw mkdirErr;
50
+ }
51
+ }
52
+ }
53
+ }
54
+ };
55
+ //# sourceMappingURL=fileSystemHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileSystemHelpers.js","sourceRoot":"","sources":["../../../../../src/platform/nodejs/persist/fileSystemHelpers.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE/D;;;GAGG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,EAAE,SAAiB,EAAmB,EAAE;IAClF,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;QAEvC,uBAAuB;QACvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YACpD,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;gBACvB,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,SAAiB,EAAiB,EAAE;IACzE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAyB,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBAC1D,MAAM,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,QAAa,EAAE,CAAC;gBACvB,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC3C,2CAA2C;oBAC3C,MAAM,QAAQ,CAAC;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { diag } from \"@opentelemetry/api\";\nimport type { MakeDirectoryOptions } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { lstat, mkdir, readdir, stat } from \"node:fs/promises\";\n\n/**\n * Computes the size (in bytes) of all files in a directory at the root level. Asynchronously.\n * @internal\n */\nexport const getShallowDirectorySize = async (directory: string): Promise<number> => {\n let totalSize = 0;\n try {\n // Get the directory listing\n const files = await readdir(directory);\n\n // Query all file sizes\n for (const file of files) {\n const fileStats = await stat(join(directory, file));\n if (fileStats.isFile()) {\n totalSize += fileStats.size;\n }\n }\n\n return totalSize;\n } catch (err) {\n diag.error(`Error getting directory size: ${err}`);\n return 0;\n }\n};\n\n/**\n * Validate directory exists.\n * @internal\n */\nexport const confirmDirExists = async (directory: string): Promise<void> => {\n try {\n const stats = await lstat(directory);\n if (!stats.isDirectory()) {\n throw new Error(\"Path existed but was not a directory\");\n }\n } catch (err: any) {\n if (err && err.code === \"ENOENT\") {\n try {\n const options: MakeDirectoryOptions = { recursive: true };\n await mkdir(directory, options);\n } catch (mkdirErr: any) {\n if (mkdirErr && mkdirErr.code !== \"EEXIST\") {\n // Handle race condition by ignoring EEXIST\n throw mkdirErr;\n }\n }\n }\n }\n};\n"]}
@@ -0,0 +1,29 @@
1
+ import type { PersistentStorage } from "../../../types.js";
2
+ import type { AzureMonitorExporterOptions } from "../../../config.js";
3
+ /**
4
+ * File system persist class.
5
+ * @internal
6
+ */
7
+ export declare class FileSystemPersist implements PersistentStorage {
8
+ private _options?;
9
+ static TEMPDIR_PREFIX: string;
10
+ static FILENAME_SUFFIX: string;
11
+ fileRetemptionPeriod: number;
12
+ cleanupTimeOut: number;
13
+ maxBytesOnDisk: number;
14
+ private _enabled;
15
+ private _tempDirectory;
16
+ private _fileCleanupTimer;
17
+ private _instrumentationKey;
18
+ constructor(instrumentationKey: string, _options?: AzureMonitorExporterOptions | undefined);
19
+ push(value: unknown[]): Promise<boolean>;
20
+ shift(): Promise<unknown>;
21
+ /**
22
+ * Check for temp telemetry files
23
+ * reads the first file if exist, deletes it and tries to send its load
24
+ */
25
+ private _getFirstFileOnDisk;
26
+ private _storeToDisk;
27
+ private _fileCleanupTask;
28
+ }
29
+ //# sourceMappingURL=fileSystemPersist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileSystemPersist.d.ts","sourceRoot":"","sources":["../../../../../src/platform/nodejs/persist/fileSystemPersist.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAGtE;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,iBAAiB;IAevD,OAAO,CAAC,QAAQ,CAAC;IAdnB,MAAM,CAAC,cAAc,SAAwB;IAC7C,MAAM,CAAC,eAAe,SAAc;IAEpC,oBAAoB,SAA2B;IAC/C,cAAc,SAAkB;IAChC,cAAc,EAAE,MAAM,CAAc;IAEpC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,mBAAmB,CAAS;gBAGlC,kBAAkB,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,2BAA2B,YAAA;IAyChD,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBlC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;IAkB/B;;;OAGG;YACW,mBAAmB;YA8BnB,YAAY;YAmCZ,gBAAgB;CA+B/B"}