@datadog/datadog-ci 2.40.1 → 2.40.3

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 (255) hide show
  1. package/dist/__tests__/cli.test.d.ts +1 -0
  2. package/dist/__tests__/cli.test.js +41 -0
  3. package/dist/__tests__/cli.test.js.map +1 -0
  4. package/dist/commands/cloud-run/__tests__/fixtures.d.ts +2 -0
  5. package/dist/commands/cloud-run/__tests__/fixtures.js +12 -0
  6. package/dist/commands/cloud-run/__tests__/fixtures.js.map +1 -0
  7. package/dist/commands/cloud-run/__tests__/flare.test.d.ts +1 -0
  8. package/dist/commands/cloud-run/__tests__/flare.test.js +557 -0
  9. package/dist/commands/cloud-run/__tests__/flare.test.js.map +1 -0
  10. package/dist/commands/deployment/__tests__/mark.test.d.ts +1 -0
  11. package/dist/commands/deployment/__tests__/mark.test.js +47 -0
  12. package/dist/commands/deployment/__tests__/mark.test.js.map +1 -0
  13. package/dist/commands/dora/__tests__/deployment.test.d.ts +1 -0
  14. package/dist/commands/dora/__tests__/deployment.test.js +201 -0
  15. package/dist/commands/dora/__tests__/deployment.test.js.map +1 -0
  16. package/dist/commands/dsyms/__tests__/upload.test.d.ts +1 -0
  17. package/dist/commands/dsyms/__tests__/upload.test.js +346 -0
  18. package/dist/commands/dsyms/__tests__/upload.test.js.map +1 -0
  19. package/dist/commands/dsyms/__tests__/utils.test.d.ts +1 -0
  20. package/dist/commands/dsyms/__tests__/utils.test.js +103 -0
  21. package/dist/commands/dsyms/__tests__/utils.test.js.map +1 -0
  22. package/dist/commands/dsyms/utils.js +4 -2
  23. package/dist/commands/dsyms/utils.js.map +1 -1
  24. package/dist/commands/elf-symbols/__tests__/elf.test.d.ts +1 -0
  25. package/dist/commands/elf-symbols/__tests__/elf.test.js +813 -0
  26. package/dist/commands/elf-symbols/__tests__/elf.test.js.map +1 -0
  27. package/dist/commands/elf-symbols/__tests__/upload.test.d.ts +1 -0
  28. package/dist/commands/elf-symbols/__tests__/upload.test.js +249 -0
  29. package/dist/commands/elf-symbols/__tests__/upload.test.js.map +1 -0
  30. package/dist/commands/flutter-symbols/__tests__/upload.test.d.ts +1 -0
  31. package/dist/commands/flutter-symbols/__tests__/upload.test.js +617 -0
  32. package/dist/commands/flutter-symbols/__tests__/upload.test.js.map +1 -0
  33. package/dist/commands/gate/__tests__/evaluate.test.d.ts +1 -0
  34. package/dist/commands/gate/__tests__/evaluate.test.js +398 -0
  35. package/dist/commands/gate/__tests__/evaluate.test.js.map +1 -0
  36. package/dist/commands/gate/__tests__/scope.test.d.ts +1 -0
  37. package/dist/commands/gate/__tests__/scope.test.js +29 -0
  38. package/dist/commands/gate/__tests__/scope.test.js.map +1 -0
  39. package/dist/commands/git-metadata/__tests__/git.test.d.ts +1 -0
  40. package/dist/commands/git-metadata/__tests__/git.test.js +132 -0
  41. package/dist/commands/git-metadata/__tests__/git.test.js.map +1 -0
  42. package/dist/commands/git-metadata/__tests__/gitdb.test.d.ts +1 -0
  43. package/dist/commands/git-metadata/__tests__/gitdb.test.js +1386 -0
  44. package/dist/commands/git-metadata/__tests__/gitdb.test.js.map +1 -0
  45. package/dist/commands/git-metadata/__tests__/library.test.d.ts +1 -0
  46. package/dist/commands/git-metadata/__tests__/library.test.js +118 -0
  47. package/dist/commands/git-metadata/__tests__/library.test.js.map +1 -0
  48. package/dist/commands/git-metadata/__tests__/upload.test.d.ts +1 -0
  49. package/dist/commands/git-metadata/__tests__/upload.test.js +52 -0
  50. package/dist/commands/git-metadata/__tests__/upload.test.js.map +1 -0
  51. package/dist/commands/junit/__tests__/id.test.d.ts +1 -0
  52. package/dist/commands/junit/__tests__/id.test.js +24 -0
  53. package/dist/commands/junit/__tests__/id.test.js.map +1 -0
  54. package/dist/commands/junit/__tests__/upload.test.d.ts +1 -0
  55. package/dist/commands/junit/__tests__/upload.test.js +495 -0
  56. package/dist/commands/junit/__tests__/upload.test.js.map +1 -0
  57. package/dist/commands/lambda/__tests__/fixtures.d.ts +51 -0
  58. package/dist/commands/lambda/__tests__/fixtures.js +146 -0
  59. package/dist/commands/lambda/__tests__/fixtures.js.map +1 -0
  60. package/dist/commands/lambda/__tests__/flare.test.d.ts +1 -0
  61. package/dist/commands/lambda/__tests__/flare.test.js +730 -0
  62. package/dist/commands/lambda/__tests__/flare.test.js.map +1 -0
  63. package/dist/commands/lambda/__tests__/functions/commons.test.d.ts +1 -0
  64. package/dist/commands/lambda/__tests__/functions/commons.test.js +791 -0
  65. package/dist/commands/lambda/__tests__/functions/commons.test.js.map +1 -0
  66. package/dist/commands/lambda/__tests__/functions/instrument.part1.test.d.ts +1 -0
  67. package/dist/commands/lambda/__tests__/functions/instrument.part1.test.js +386 -0
  68. package/dist/commands/lambda/__tests__/functions/instrument.part1.test.js.map +1 -0
  69. package/dist/commands/lambda/__tests__/functions/instrument.part2.test.d.ts +1 -0
  70. package/dist/commands/lambda/__tests__/functions/instrument.part2.test.js +721 -0
  71. package/dist/commands/lambda/__tests__/functions/instrument.part2.test.js.map +1 -0
  72. package/dist/commands/lambda/__tests__/functions/uninstrument.test.d.ts +1 -0
  73. package/dist/commands/lambda/__tests__/functions/uninstrument.test.js +513 -0
  74. package/dist/commands/lambda/__tests__/functions/uninstrument.test.js.map +1 -0
  75. package/dist/commands/lambda/__tests__/functions/versionChecker.test.d.ts +1 -0
  76. package/dist/commands/lambda/__tests__/functions/versionChecker.test.js +33 -0
  77. package/dist/commands/lambda/__tests__/functions/versionChecker.test.js.map +1 -0
  78. package/dist/commands/lambda/__tests__/instrument.test.d.ts +1 -0
  79. package/dist/commands/lambda/__tests__/instrument.test.js +1511 -0
  80. package/dist/commands/lambda/__tests__/instrument.test.js.map +1 -0
  81. package/dist/commands/lambda/__tests__/loggroup.test.d.ts +1 -0
  82. package/dist/commands/lambda/__tests__/loggroup.test.js +340 -0
  83. package/dist/commands/lambda/__tests__/loggroup.test.js.map +1 -0
  84. package/dist/commands/lambda/__tests__/prompt.test.d.ts +1 -0
  85. package/dist/commands/lambda/__tests__/prompt.test.js +206 -0
  86. package/dist/commands/lambda/__tests__/prompt.test.js.map +1 -0
  87. package/dist/commands/lambda/__tests__/tags.test.d.ts +1 -0
  88. package/dist/commands/lambda/__tests__/tags.test.js +305 -0
  89. package/dist/commands/lambda/__tests__/tags.test.js.map +1 -0
  90. package/dist/commands/lambda/__tests__/uninstrument.test.d.ts +1 -0
  91. package/dist/commands/lambda/__tests__/uninstrument.test.js +722 -0
  92. package/dist/commands/lambda/__tests__/uninstrument.test.js.map +1 -0
  93. package/dist/commands/measure/__tests__/measure.test.d.ts +1 -0
  94. package/dist/commands/measure/__tests__/measure.test.js +110 -0
  95. package/dist/commands/measure/__tests__/measure.test.js.map +1 -0
  96. package/dist/commands/react-native/__tests__/codepush.test.d.ts +1 -0
  97. package/dist/commands/react-native/__tests__/codepush.test.js +161 -0
  98. package/dist/commands/react-native/__tests__/codepush.test.js.map +1 -0
  99. package/dist/commands/react-native/__tests__/interfaces.test.d.ts +1 -0
  100. package/dist/commands/react-native/__tests__/interfaces.test.js +33 -0
  101. package/dist/commands/react-native/__tests__/interfaces.test.js.map +1 -0
  102. package/dist/commands/react-native/__tests__/upload.test.d.ts +1 -0
  103. package/dist/commands/react-native/__tests__/upload.test.js +238 -0
  104. package/dist/commands/react-native/__tests__/upload.test.js.map +1 -0
  105. package/dist/commands/react-native/__tests__/utils.test.d.ts +1 -0
  106. package/dist/commands/react-native/__tests__/utils.test.js +27 -0
  107. package/dist/commands/react-native/__tests__/utils.test.js.map +1 -0
  108. package/dist/commands/react-native/__tests__/xcode.test.d.ts +1 -0
  109. package/dist/commands/react-native/__tests__/xcode.test.js +465 -0
  110. package/dist/commands/react-native/__tests__/xcode.test.js.map +1 -0
  111. package/dist/commands/sarif/__tests__/upload.test.d.ts +1 -0
  112. package/dist/commands/sarif/__tests__/upload.test.js +228 -0
  113. package/dist/commands/sarif/__tests__/upload.test.js.map +1 -0
  114. package/dist/commands/sbom/__tests__/payload.test.d.ts +1 -0
  115. package/dist/commands/sbom/__tests__/payload.test.js +262 -0
  116. package/dist/commands/sbom/__tests__/payload.test.js.map +1 -0
  117. package/dist/commands/sbom/__tests__/validation.test.d.ts +1 -0
  118. package/dist/commands/sbom/__tests__/validation.test.js +41 -0
  119. package/dist/commands/sbom/__tests__/validation.test.js.map +1 -0
  120. package/dist/commands/sourcemaps/__tests__/upload.test.d.ts +1 -0
  121. package/dist/commands/sourcemaps/__tests__/upload.test.js +270 -0
  122. package/dist/commands/sourcemaps/__tests__/upload.test.js.map +1 -0
  123. package/dist/commands/sourcemaps/__tests__/utils.test.d.ts +1 -0
  124. package/dist/commands/sourcemaps/__tests__/utils.test.js +31 -0
  125. package/dist/commands/sourcemaps/__tests__/utils.test.js.map +1 -0
  126. package/dist/commands/stepfunctions/__tests__/awsCommands.test.d.ts +1 -0
  127. package/dist/commands/stepfunctions/__tests__/awsCommands.test.js +192 -0
  128. package/dist/commands/stepfunctions/__tests__/awsCommands.test.js.map +1 -0
  129. package/dist/commands/stepfunctions/__tests__/fixtures/aws-resources.d.ts +6 -0
  130. package/dist/commands/stepfunctions/__tests__/fixtures/aws-resources.js +45 -0
  131. package/dist/commands/stepfunctions/__tests__/fixtures/aws-resources.js.map +1 -0
  132. package/dist/commands/stepfunctions/__tests__/fixtures/cli.d.ts +5 -0
  133. package/dist/commands/stepfunctions/__tests__/fixtures/cli.js +19 -0
  134. package/dist/commands/stepfunctions/__tests__/fixtures/cli.js.map +1 -0
  135. package/dist/commands/stepfunctions/__tests__/helpers.test.d.ts +1 -0
  136. package/dist/commands/stepfunctions/__tests__/helpers.test.js +205 -0
  137. package/dist/commands/stepfunctions/__tests__/helpers.test.js.map +1 -0
  138. package/dist/commands/stepfunctions/__tests__/instrument.test.d.ts +1 -0
  139. package/dist/commands/stepfunctions/__tests__/instrument.test.js +431 -0
  140. package/dist/commands/stepfunctions/__tests__/instrument.test.js.map +1 -0
  141. package/dist/commands/stepfunctions/__tests__/uninstrument.test.d.ts +1 -0
  142. package/dist/commands/stepfunctions/__tests__/uninstrument.test.js +166 -0
  143. package/dist/commands/stepfunctions/__tests__/uninstrument.test.js.map +1 -0
  144. package/dist/commands/synthetics/__tests__/api.test.d.ts +1 -0
  145. package/dist/commands/synthetics/__tests__/api.test.js +422 -0
  146. package/dist/commands/synthetics/__tests__/api.test.js.map +1 -0
  147. package/dist/commands/synthetics/__tests__/cli.test.d.ts +1 -0
  148. package/dist/commands/synthetics/__tests__/cli.test.js +1325 -0
  149. package/dist/commands/synthetics/__tests__/cli.test.js.map +1 -0
  150. package/dist/commands/synthetics/__tests__/fixtures.d.ts +149 -0
  151. package/dist/commands/synthetics/__tests__/fixtures.js +507 -0
  152. package/dist/commands/synthetics/__tests__/fixtures.js.map +1 -0
  153. package/dist/commands/synthetics/__tests__/mobile.test.d.ts +1 -0
  154. package/dist/commands/synthetics/__tests__/mobile.test.js +376 -0
  155. package/dist/commands/synthetics/__tests__/mobile.test.js.map +1 -0
  156. package/dist/commands/synthetics/__tests__/reporters/default.test.d.ts +1 -0
  157. package/dist/commands/synthetics/__tests__/reporters/default.test.js +354 -0
  158. package/dist/commands/synthetics/__tests__/reporters/default.test.js.map +1 -0
  159. package/dist/commands/synthetics/__tests__/reporters/junit.test.d.ts +1 -0
  160. package/dist/commands/synthetics/__tests__/reporters/junit.test.js +353 -0
  161. package/dist/commands/synthetics/__tests__/reporters/junit.test.js.map +1 -0
  162. package/dist/commands/synthetics/__tests__/reporters/mobile/app-upload.test.d.ts +1 -0
  163. package/dist/commands/synthetics/__tests__/reporters/mobile/app-upload.test.js +232 -0
  164. package/dist/commands/synthetics/__tests__/reporters/mobile/app-upload.test.js.map +1 -0
  165. package/dist/commands/synthetics/__tests__/run-tests-lib.test.d.ts +1 -0
  166. package/dist/commands/synthetics/__tests__/run-tests-lib.test.js +735 -0
  167. package/dist/commands/synthetics/__tests__/run-tests-lib.test.js.map +1 -0
  168. package/dist/commands/synthetics/__tests__/test.test.d.ts +1 -0
  169. package/dist/commands/synthetics/__tests__/test.test.js +33 -0
  170. package/dist/commands/synthetics/__tests__/test.test.js.map +1 -0
  171. package/dist/commands/synthetics/__tests__/tunnel/crypto.test.d.ts +1 -0
  172. package/dist/commands/synthetics/__tests__/tunnel/crypto.test.js +21 -0
  173. package/dist/commands/synthetics/__tests__/tunnel/crypto.test.js.map +1 -0
  174. package/dist/commands/synthetics/__tests__/tunnel/tunnel.test.d.ts +1 -0
  175. package/dist/commands/synthetics/__tests__/tunnel/tunnel.test.js +80 -0
  176. package/dist/commands/synthetics/__tests__/tunnel/tunnel.test.js.map +1 -0
  177. package/dist/commands/synthetics/__tests__/tunnel/websocket.test.d.ts +1 -0
  178. package/dist/commands/synthetics/__tests__/tunnel/websocket.test.js +109 -0
  179. package/dist/commands/synthetics/__tests__/tunnel/websocket.test.js.map +1 -0
  180. package/dist/commands/synthetics/__tests__/utils/internal.test.d.ts +1 -0
  181. package/dist/commands/synthetics/__tests__/utils/internal.test.js +186 -0
  182. package/dist/commands/synthetics/__tests__/utils/internal.test.js.map +1 -0
  183. package/dist/commands/synthetics/__tests__/utils/public.test.d.ts +1 -0
  184. package/dist/commands/synthetics/__tests__/utils/public.test.js +1526 -0
  185. package/dist/commands/synthetics/__tests__/utils/public.test.js.map +1 -0
  186. package/dist/commands/synthetics/api.d.ts +1 -1
  187. package/dist/commands/synthetics/api.js +10 -5
  188. package/dist/commands/synthetics/api.js.map +1 -1
  189. package/dist/commands/synthetics/run-tests-command.d.ts +1 -0
  190. package/dist/commands/synthetics/run-tests-command.js +3 -2
  191. package/dist/commands/synthetics/run-tests-command.js.map +1 -1
  192. package/dist/commands/synthetics/run-tests-lib.js +0 -4
  193. package/dist/commands/synthetics/run-tests-lib.js.map +1 -1
  194. package/dist/commands/synthetics/test.js +9 -1
  195. package/dist/commands/synthetics/test.js.map +1 -1
  196. package/dist/commands/synthetics/utils/public.js +1 -1
  197. package/dist/commands/synthetics/utils/public.js.map +1 -1
  198. package/dist/commands/tag/__tests__/tag.test.d.ts +1 -0
  199. package/dist/commands/tag/__tests__/tag.test.js +75 -0
  200. package/dist/commands/tag/__tests__/tag.test.js.map +1 -0
  201. package/dist/commands/trace/__tests__/trace.test.d.ts +1 -0
  202. package/dist/commands/trace/__tests__/trace.test.js +145 -0
  203. package/dist/commands/trace/__tests__/trace.test.js.map +1 -0
  204. package/dist/commands/unity-symbols/__tests__/upload.test.d.ts +1 -0
  205. package/dist/commands/unity-symbols/__tests__/upload.test.js +369 -0
  206. package/dist/commands/unity-symbols/__tests__/upload.test.js.map +1 -0
  207. package/dist/helpers/__tests__/app.test.d.ts +1 -0
  208. package/dist/helpers/__tests__/app.test.js +31 -0
  209. package/dist/helpers/__tests__/app.test.js.map +1 -0
  210. package/dist/helpers/__tests__/ci.test.d.ts +1 -0
  211. package/dist/helpers/__tests__/ci.test.js +252 -0
  212. package/dist/helpers/__tests__/ci.test.js.map +1 -0
  213. package/dist/helpers/__tests__/fixtures.d.ts +33 -0
  214. package/dist/helpers/__tests__/fixtures.js +71 -0
  215. package/dist/helpers/__tests__/fixtures.js.map +1 -0
  216. package/dist/helpers/__tests__/flare.test.d.ts +1 -0
  217. package/dist/helpers/__tests__/flare.test.js +226 -0
  218. package/dist/helpers/__tests__/flare.test.js.map +1 -0
  219. package/dist/helpers/__tests__/fs.test.d.ts +1 -0
  220. package/dist/helpers/__tests__/fs.test.js +189 -0
  221. package/dist/helpers/__tests__/fs.test.js.map +1 -0
  222. package/dist/helpers/__tests__/plist.test.d.ts +1 -0
  223. package/dist/helpers/__tests__/plist.test.js +43 -0
  224. package/dist/helpers/__tests__/plist.test.js.map +1 -0
  225. package/dist/helpers/__tests__/prompt.test.d.ts +1 -0
  226. package/dist/helpers/__tests__/prompt.test.js +71 -0
  227. package/dist/helpers/__tests__/prompt.test.js.map +1 -0
  228. package/dist/helpers/__tests__/retry.test.d.ts +1 -0
  229. package/dist/helpers/__tests__/retry.test.js +99 -0
  230. package/dist/helpers/__tests__/retry.test.js.map +1 -0
  231. package/dist/helpers/__tests__/tags.test.d.ts +1 -0
  232. package/dist/helpers/__tests__/tags.test.js +71 -0
  233. package/dist/helpers/__tests__/tags.test.js.map +1 -0
  234. package/dist/helpers/__tests__/upload.test.d.ts +1 -0
  235. package/dist/helpers/__tests__/upload.test.js +231 -0
  236. package/dist/helpers/__tests__/upload.test.js.map +1 -0
  237. package/dist/helpers/__tests__/user-provided-git.test.d.ts +1 -0
  238. package/dist/helpers/__tests__/user-provided-git.test.js +119 -0
  239. package/dist/helpers/__tests__/user-provided-git.test.js.map +1 -0
  240. package/dist/helpers/__tests__/utils.test.d.ts +1 -0
  241. package/dist/helpers/__tests__/utils.test.js +429 -0
  242. package/dist/helpers/__tests__/utils.test.js.map +1 -0
  243. package/dist/helpers/__tests__/validation.test.d.ts +1 -0
  244. package/dist/helpers/__tests__/validation.test.js +25 -0
  245. package/dist/helpers/__tests__/validation.test.js.map +1 -0
  246. package/dist/helpers/git/__tests__/format-git-sourcemaps-data.test.d.ts +1 -0
  247. package/dist/helpers/git/__tests__/format-git-sourcemaps-data.test.js +103 -0
  248. package/dist/helpers/git/__tests__/format-git-sourcemaps-data.test.js.map +1 -0
  249. package/dist/helpers/git/__tests__/format-git-span-data.test.d.ts +1 -0
  250. package/dist/helpers/git/__tests__/format-git-span-data.test.js +121 -0
  251. package/dist/helpers/git/__tests__/format-git-span-data.test.js.map +1 -0
  252. package/dist/helpers/git/__tests__/get-git-data.test.d.ts +1 -0
  253. package/dist/helpers/git/__tests__/get-git-data.test.js +72 -0
  254. package/dist/helpers/git/__tests__/get-git-data.test.js.map +1 -0
  255. package/package.json +5 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrument.test.js","sourceRoot":"","sources":["../../../../src/commands/stepfunctions/__tests__/instrument.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,oDAA4C;AAC5C,qDAA0C;AAE1C,8CAA4D;AAE5D,4DAAgG;AAChG,wCAA6D;AAE7D,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC,CAAA;AAEjE,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,IAAI,GAAQ,CAAA;IACZ,IAAI,GAAQ,CAAA;IACZ,IAAI,OAAuB,CAAA;IAC3B,IAAI,OAAY,CAAA;IAEhB,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAC/B,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;QAC/B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;QAChE,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,EAAE,CAAA;QAC/D,GAAG,GAAG,IAAI,cAAG,EAAE,CAAA;QACf,GAAG,CAAC,QAAQ,CAAC,2CAA8B,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IACF,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAA,oBAAc,GAAE,CAAA;QAE1B,MAAM,iCAAiC,GAAG,IAAA,2CAA2B,GAAE,CAAA;QACvE,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,iCAAiC,CAAC,CAAA;QAEhG,MAAM,mBAAmB,GAAG,CAAC,EAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC,CAAA;QACzD,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,mBAAmB,EAAC,CAAC,CAAC,CAAA;QAE3F,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1D,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7D,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACpE,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACrE,GAAG,CAAC,iCAAiC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAChF,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACrE,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACtE,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,IAAI,CAAC,oCAAoC,EAAE,GAAS,EAAE;YACpD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAA;YAExE,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAA;QACzE,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,oCAAoC,EAAE,GAAS,EAAE;YACpD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAA;YAE/F,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAA;QAC3F,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,gCAAgC,EAAE,GAAS,EAAE;YAChD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B,CAAC,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,sDAAsD,CAAC,EACtG,OAAO,CACR,CAAA;YAED,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAA;QAC3F,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,4CAA4C,EAAE,GAAS,EAAE;YAC5D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,sDAAsD;gBACtD,iBAAiB;gBACjB,KAAK;aACN,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAA;QAC5F,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,iEAAiE,EAAE,GAAS,EAAE;YACjF,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,EAAE,EAAC,CAAC,CAAC,CAAA;YAE1E,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;aACzE,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,+DAA+D,CAAC,CAAA;QACrG,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,IAAI,CAAC,mDAAmD,EAAE,GAAS,EAAE;YACnE,MAAM,oBAAoB,GAAG;gBAC3B,KAAK,EAAE,qBAAQ,CAAC,GAAG;gBACnB,oBAAoB,EAAE,KAAK;aAC5B,CAAA;YACD,MAAM,iCAAiC,GAAG,IAAA,2CAA2B,EAAC,EAAC,oBAAoB,EAAC,CAAC,CAAA;YAC7F,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,iCAAiC,CAAC,CAAA;YAEhG,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;gBACxE,OAAO;gBACP,MAAM;aACP,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACzD,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACxD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACnD,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC1D,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACtE,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAE1D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,iFAAiF,EAAE,GAAS,EAAE;YACjG,MAAM,oBAAoB,GAAG;gBAC3B,KAAK,EAAE,qBAAQ,CAAC,GAAG;gBACnB,oBAAoB,EAAE,KAAK;aAC5B,CAAA;YACD,MAAM,iCAAiC,GAAG,IAAA,2CAA2B,EAAC,EAAC,oBAAoB,EAAC,CAAC,CAAA;YAC7F,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,iCAAiC,CAAC,CAAA;YAEhG,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;gBACxE,iBAAiB;gBACjB,2EAA2E;gBAC3E,OAAO;gBACP,MAAM;aACP,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACzD,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACxD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACnD,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC1D,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACtE,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAE1D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,sCAAsC,EAAE,GAAS,EAAE;YACtD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;gBACxE,iBAAiB;gBACjB,wEAAwE;aACzE,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAC3D,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,IAAI,CAAC,uCAAuC,EAAE,GAAS,EAAE;YACvD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;gBACxE,OAAO;gBACP,MAAM;aACP,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAClD,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,+BAA+B,EAAE,GAAS,EAAE;YAC/C,MAAM,mBAAmB,GAAG,IAAA,0CAA0B,EAAC,CAAC,EAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAA;YAC7F,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,mBAAmB,EAAC,CAAC,CAAC,CAAA;YAE3F,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;gBACxE,OAAO;gBACP,MAAM;aACP,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAClD,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,iCAAiC,EAAE,GAAS,EAAE;YACjD,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,CAAC,EAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,EAAC,CAAC,CAAC,CAAA;YAE7G,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;gBACxE,OAAO;gBACP,MAAM;aACP,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAClD,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,qCAAqC,EAAE,GAAS,EAAE;YACrD,MAAM,mBAAmB,GAAG,IAAA,0CAA0B,EAAC,CAAC,EAAC,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAA;YAC7F,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,mBAAmB,EAAC,CAAC,CAAC,CAAA;YAE3F,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;gBACxE,OAAO;gBACP,MAAM;gBACN,WAAW;gBACX,cAAc;aACf,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QAClD,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,IAAI,CAAC,0GAA0G,EAAE,GAAS,EAAE;YAC1H,MAAM,oBAAoB,GAAG;gBAC3B,KAAK,EAAE,qBAAQ,CAAC,GAAG;gBACnB,oBAAoB,EAAE,KAAK;aAC5B,CAAA;YACD,MAAM,YAAY,GAAG,IAAA,2CAA2B,EAAC,EAAC,oBAAoB,EAAC,CAAC,CAAA;YACxE,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAA;YAE3E,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;aACzE,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACzD,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACxD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACnD,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC1D,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACtE,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC7C,IAAI,CAAC,mEAAmE,EAAE,GAAS,EAAE;YACnF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;aACzE,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACzD,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACxD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACnD,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACtE,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA,CAAC,mCAAmC;YAC/F,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,0DAA0D,EAAE,GAAS,EAAE;YAC1E,MAAM,oBAAoB,GAAG;gBAC3B,KAAK,EAAE,qBAAQ,CAAC,KAAK;gBACrB,oBAAoB,EAAE,IAAI;gBAC1B,YAAY,EAAE;oBACZ;wBACE,sBAAsB,EAAE;4BACtB,WAAW,EACT,sGAAsG;yBACzG;qBACF;iBACF;aACF,CAAA;YACD,MAAM,iCAAiC,GAAG,IAAA,2CAA2B,EAAC,EAAC,oBAAoB,EAAC,CAAC,CAAA;YAC7F,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,iCAAiC,CAAC,CAAA;YAEhG,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;aACzE,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACzD,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACxD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACnD,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACtE,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,wFAAwF,EAAE,GAAS,EAAE;YACxG,MAAM,oBAAoB,GAAG;gBAC3B,KAAK,EAAE,qBAAQ,CAAC,GAAG;gBACnB,oBAAoB,EAAE,KAAK;gBAC3B,YAAY,EAAE;oBACZ;wBACE,sBAAsB,EAAE;4BACtB,WAAW,EACT,sGAAsG;yBACzG;qBACF;iBACF;aACF,CAAA;YACD,MAAM,iCAAiC,GAAG,IAAA,2CAA2B,EAAC,EAAC,oBAAoB,EAAC,CAAC,CAAA;YAC7F,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,iCAAiC,CAAC,CAAA;YAEhG,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;aACzE,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACzD,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACxD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACnD,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACtE,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,4FAA4F,EAAE,GAAS,EAAE;YAC5G,MAAM,oBAAoB,GAAG;gBAC3B,KAAK,EAAE,qBAAQ,CAAC,KAAK;gBACrB,oBAAoB,EAAE,KAAK;gBAC3B,YAAY,EAAE;oBACZ;wBACE,sBAAsB,EAAE;4BACtB,WAAW,EACT,sGAAsG;yBACzG;qBACF;iBACF;aACF,CAAA;YACD,MAAM,iCAAiC,GAAG,IAAA,2CAA2B,EAAC,EAAC,oBAAoB,EAAC,CAAC,CAAA;YAC7F,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,iCAAiC,CAAC,CAAA;YAEhG,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;aACzE,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACzD,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACxD,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAChD,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACnD,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YACtE,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC1D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACxD,IAAI,CAAC,wDAAwD,EAAE,GAAS,EAAE;YACxE,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;gBACxE,uBAAuB;aACxB,EACD,OAAO,CACR,CAAA;YACD,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC/D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,qEAAqE,EAAE,GAAS,EAAE;YACrF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;aACzE,EACD,OAAO,CACR,CAAA;YACD,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;YAC/D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,IAAI,CAAC,yCAAyC,EAAE,GAAS,EAAE;YACzD,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBAC3D,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YACpD,CAAC,CAAC,CAAA;YAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;aACzE,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAChC,kJAAkJ,CACnJ,CAAA;QACH,CAAC,CAAA,CAAC,CAAA;QAEF,IAAI,CAAC,8CAA8C,EAAE,GAAS,EAAE;YAC9D,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBAC1D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;YACnD,CAAC,CAAC,CAAA;YAEF,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,GAAG,CAC5B;gBACE,eAAe;gBACf,YAAY;gBACZ,aAAa;gBACb,iEAAiE;gBACjE,iBAAiB;gBACjB,wEAAwE;aACzE,EACD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAChC,uJAAuJ,CACxJ,CAAA;QACH,CAAC,CAAA,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const client_sfn_1 = require("@aws-sdk/client-sfn");
13
+ const advanced_1 = require("clipanion/lib/advanced");
14
+ const uninstrument_1 = require("../uninstrument");
15
+ const aws_resources_1 = require("./fixtures/aws-resources");
16
+ const cli_1 = require("./fixtures/cli");
17
+ jest.mock('../../../../package.json', () => ({ version: '2.0.0' }));
18
+ describe('stepfunctions uninstrument', () => {
19
+ let aws;
20
+ let cli;
21
+ let context;
22
+ let describeStateMachineCommandOutput;
23
+ let helpers;
24
+ beforeAll(() => {
25
+ aws = require('../awsCommands');
26
+ helpers = require('../helpers');
27
+ helpers.applyChanges = jest.fn().mockImplementation(() => false);
28
+ cli = new advanced_1.Cli();
29
+ cli.register(uninstrument_1.UninstrumentStepFunctionsCommand);
30
+ });
31
+ beforeEach(() => {
32
+ context = (0, cli_1.contextFixture)();
33
+ describeStateMachineCommandOutput = (0, aws_resources_1.describeStateMachineFixture)();
34
+ aws.describeStateMachine = jest.fn().mockImplementation(() => describeStateMachineCommandOutput);
35
+ const subscriptionFilter = (0, aws_resources_1.subscriptionFilterFixture)();
36
+ aws.describeSubscriptionFilters = jest.fn().mockImplementation(() => ({ subscriptionFilters: [subscriptionFilter] }));
37
+ aws.deleteSubscriptionFilter = jest.fn().mockImplementation(() => ({}));
38
+ aws.untagResource = jest.fn().mockImplementation(() => ({}));
39
+ });
40
+ describe('parameter validation', () => {
41
+ test('errors if --step-function is not given', () => __awaiter(void 0, void 0, void 0, function* () {
42
+ const exitCode = yield cli.run(['stepfunctions', 'uninstrument'], context);
43
+ expect(exitCode).toBe(1);
44
+ expect(context.toString()).toMatch('[Error] must specify at least one `--step-function`\n');
45
+ }));
46
+ test('removes duplicate step function arns', () => __awaiter(void 0, void 0, void 0, function* () {
47
+ const exitCode = yield cli.run([
48
+ 'stepfunctions',
49
+ 'uninstrument',
50
+ '--step-function',
51
+ 'arn:aws:states:us-east-1:000000000000:stateMachine:ExampleStepFunction',
52
+ '--step-function',
53
+ 'arn:aws:states:us-east-1:000000000000:stateMachine:ExampleStepFunction',
54
+ ], context);
55
+ expect(exitCode).toBe(0);
56
+ expect(aws.describeStateMachine).toHaveBeenCalledTimes(1);
57
+ }));
58
+ test('errors if no step function arn', () => __awaiter(void 0, void 0, void 0, function* () {
59
+ const exitCode = yield cli.run(['stepfunctions', 'uninstrument'], context);
60
+ expect(exitCode).toBe(1);
61
+ expect(context.toString()).toMatch('[Error] must specify at least one `--step-function`');
62
+ }));
63
+ test('errors if any step function arn is invalid', () => __awaiter(void 0, void 0, void 0, function* () {
64
+ const exitCode = yield cli.run(['stepfunctions', 'uninstrument', '--step-function', 'arn:'], context);
65
+ expect(exitCode).toBe(1);
66
+ expect(context.toString()).toMatch('[Error] invalid arn format for `--step-function`');
67
+ }));
68
+ });
69
+ describe('step function logging disabled', () => {
70
+ test('creates step function log group, subscribes it to forwarder, and adds it to step function logging config', () => __awaiter(void 0, void 0, void 0, function* () {
71
+ const loggingConfiguration = {
72
+ level: client_sfn_1.LogLevel.OFF,
73
+ includeExecutionData: false,
74
+ };
75
+ const stepFunction = (0, aws_resources_1.describeStateMachineFixture)({ loggingConfiguration });
76
+ aws.describeStateMachine = jest.fn().mockImplementation(() => stepFunction);
77
+ const exitCode = yield cli.run([
78
+ 'stepfunctions',
79
+ 'uninstrument',
80
+ '--step-function',
81
+ 'arn:aws:states:us-east-1:000000000000:stateMachine:ExampleStepFunction',
82
+ ], context);
83
+ expect(exitCode).toBe(1);
84
+ expect(context.toString()).toMatch('[Error] Unable to get Log Group arn from Step Function logging configuration');
85
+ }));
86
+ });
87
+ describe('aws error handling', () => {
88
+ test('errors if unable to fetch step function', () => __awaiter(void 0, void 0, void 0, function* () {
89
+ aws.describeStateMachine = jest.fn().mockImplementation(() => {
90
+ throw new Error('mock describeStateMachine error');
91
+ });
92
+ const exitCode = yield cli.run([
93
+ 'stepfunctions',
94
+ 'uninstrument',
95
+ '--step-function',
96
+ 'arn:aws:states:us-east-1:000000000000:stateMachine:ExampleStepFunction',
97
+ ], context);
98
+ expect(exitCode).toBe(1);
99
+ expect(context.toString()).toMatch('[Error] mock describeStateMachine error. Unable to fetch Step Function arn:aws:states:us-east-1:000000000000:stateMachine:ExampleStepFunction');
100
+ }));
101
+ test('errors if unable to fetch step function subscription filters', () => __awaiter(void 0, void 0, void 0, function* () {
102
+ aws.describeSubscriptionFilters = jest.fn().mockImplementation(() => {
103
+ throw new Error('mock describeSubscriptionFilters error');
104
+ });
105
+ const exitCode = yield cli.run([
106
+ 'stepfunctions',
107
+ 'uninstrument',
108
+ '--step-function',
109
+ 'arn:aws:states:us-east-1:000000000000:stateMachine:ExampleStepFunction',
110
+ ], context);
111
+ expect(exitCode).toBe(1);
112
+ expect(context.toString()).toMatch('[Error] mock describeSubscriptionFilters error. Unable to fetch Subscription Filter to delete for Log Group /aws/vendedlogs/states/ExampleStepFunction-Logs-test');
113
+ }));
114
+ test('all aws commands are called once for one ci-instrumented step function', () => __awaiter(void 0, void 0, void 0, function* () {
115
+ const exitCode = yield cli.run([
116
+ 'stepfunctions',
117
+ 'uninstrument',
118
+ '--step-function',
119
+ 'arn:aws:states:us-east-1:000000000000:stateMachine:ExampleStepFunction',
120
+ ], context);
121
+ // console.log(context.toString())
122
+ expect(exitCode).toBe(0);
123
+ expect(aws.describeStateMachine).toHaveBeenCalledTimes(1);
124
+ expect(aws.describeSubscriptionFilters).toHaveBeenCalledTimes(1);
125
+ expect(aws.deleteSubscriptionFilter).toHaveBeenCalledTimes(1);
126
+ expect(aws.untagResource).toHaveBeenCalledTimes(1);
127
+ }));
128
+ test('all aws commands are called twice for two ci-instrumented step functions', () => __awaiter(void 0, void 0, void 0, function* () {
129
+ const exitCode = yield cli.run([
130
+ 'stepfunctions',
131
+ 'uninstrument',
132
+ '--step-function',
133
+ 'arn:aws:states:us-east-1:000000000000:stateMachine:ExampleStepFunction',
134
+ '--step-function',
135
+ 'arn:aws:states:us-east-1:000000000000:stateMachine:ExampleStepFunction2222',
136
+ ], context);
137
+ // console.log(context.toString())
138
+ expect(exitCode).toBe(0);
139
+ expect(aws.describeStateMachine).toHaveBeenCalledTimes(2);
140
+ expect(aws.describeSubscriptionFilters).toHaveBeenCalledTimes(2);
141
+ expect(aws.deleteSubscriptionFilter).toHaveBeenCalledTimes(2);
142
+ expect(aws.untagResource).toHaveBeenCalledTimes(2);
143
+ }));
144
+ test('no subscription filters are created by ci, so deleteSubscriptionFilter is not called', () => __awaiter(void 0, void 0, void 0, function* () {
145
+ const subscriptionFilter = (0, aws_resources_1.subscriptionFilterFixture)({
146
+ filterName: 'test-filter-name-that-does-not-have-DD_CI_IDENTIFYING_STRING-string',
147
+ });
148
+ aws.describeSubscriptionFilters = jest
149
+ .fn()
150
+ .mockImplementation(() => ({ subscriptionFilters: [subscriptionFilter] }));
151
+ const exitCode = yield cli.run([
152
+ 'stepfunctions',
153
+ 'uninstrument',
154
+ '--step-function',
155
+ 'arn:aws:states:us-east-1:000000000000:stateMachine:ExampleStepFunction',
156
+ ], context);
157
+ // console.log(context.toString())
158
+ expect(exitCode).toBe(0);
159
+ expect(aws.describeStateMachine).toHaveBeenCalledTimes(1);
160
+ expect(aws.describeSubscriptionFilters).toHaveBeenCalledTimes(1);
161
+ expect(aws.deleteSubscriptionFilter).toHaveBeenCalledTimes(0);
162
+ expect(aws.untagResource).toHaveBeenCalledTimes(1); // Will always be called
163
+ }));
164
+ });
165
+ });
166
+ //# sourceMappingURL=uninstrument.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstrument.test.js","sourceRoot":"","sources":["../../../../src/commands/stepfunctions/__tests__/uninstrument.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,422 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ const http_1 = require("http");
36
+ const axios_1 = __importStar(require("axios"));
37
+ const api_1 = require("../api");
38
+ const errors_1 = require("../errors");
39
+ const interfaces_1 = require("../interfaces");
40
+ const run_tests_command_1 = require("../run-tests-command");
41
+ const utils = __importStar(require("../utils/public"));
42
+ const fixtures_1 = require("./fixtures");
43
+ describe('dd-api', () => {
44
+ const apiConfiguration = {
45
+ apiKey: '123',
46
+ appKey: '123',
47
+ baseIntakeUrl: 'baseIntake',
48
+ baseUnstableUrl: 'baseUnstable',
49
+ baseUrl: 'base',
50
+ proxyOpts: { protocol: 'http' },
51
+ };
52
+ const LOCATION = {
53
+ display_name: 'fake location',
54
+ id: 42,
55
+ is_active: true,
56
+ name: 'fake-loc',
57
+ region: 'fake-region',
58
+ };
59
+ const RESULT_ID = '123';
60
+ const BATCH_ID = 'bid';
61
+ const POLL_RESULTS = {
62
+ results: [
63
+ {
64
+ check: (0, fixtures_1.getApiTest)('abc-def-ghi'),
65
+ result: {},
66
+ resultID: RESULT_ID,
67
+ timestamp: 0,
68
+ },
69
+ ],
70
+ };
71
+ const TRIGGERED_TEST_ID = 'fakeId';
72
+ const TRIGGER_RESULTS = {
73
+ batch_id: BATCH_ID,
74
+ locations: [LOCATION],
75
+ };
76
+ const PRESIGNED_URL_PAYLOAD = {
77
+ url: 'wss://presigned.url',
78
+ };
79
+ test('should get results from api', () => __awaiter(void 0, void 0, void 0, function* () {
80
+ jest.spyOn(axios_1.default, 'create').mockImplementation((() => () => ({ data: POLL_RESULTS })));
81
+ const api = (0, api_1.apiConstructor)(apiConfiguration);
82
+ const results = yield api.pollResults([RESULT_ID]);
83
+ expect(results[0].resultID).toBe(RESULT_ID);
84
+ }));
85
+ test('should trigger tests using api', () => __awaiter(void 0, void 0, void 0, function* () {
86
+ jest.spyOn(axios_1.default, 'create').mockImplementation((() => () => ({ data: TRIGGER_RESULTS })));
87
+ const api = (0, api_1.apiConstructor)(apiConfiguration);
88
+ const { triggerTests } = api;
89
+ const tests = [{ public_id: TRIGGERED_TEST_ID, executionRule: interfaces_1.ExecutionRule.BLOCKING }];
90
+ const { batch_id: batchId } = yield triggerTests({ tests });
91
+ expect(batchId).toBe(BATCH_ID);
92
+ }));
93
+ describe('Retry policy', () => {
94
+ beforeEach(() => {
95
+ jest.useFakeTimers({ doNotFake: ['nextTick'] });
96
+ jest.restoreAllMocks();
97
+ });
98
+ afterEach(() => {
99
+ jest.useRealTimers();
100
+ });
101
+ const MIN_ATTEMPTS = 1;
102
+ const MAX_ATTEMPTS = 4; // `MAX_RETRIES` + 1
103
+ const fastForwardRetries = () => __awaiter(void 0, void 0, void 0, function* () {
104
+ for (let i = 1; i <= MAX_ATTEMPTS - 1; i++) {
105
+ // Skip the `setTimeout` in `await wait(waiter)`.
106
+ jest.runOnlyPendingTimers();
107
+ // Wait for the retry to happen, and for the next `setTimeout`.
108
+ // This is used to flush promises, and requires `nextTick` not to be faked.
109
+ // eslint-disable-next-line @typescript-eslint/unbound-method
110
+ yield new Promise(process.nextTick);
111
+ }
112
+ });
113
+ const api = (0, api_1.apiConstructor)(apiConfiguration);
114
+ const cases = [
115
+ {
116
+ makeApiRequest: () => api.getBatch('batch-id'),
117
+ name: 'get batch',
118
+ shouldBeRetriedOn404: true,
119
+ shouldBeRetriedOn429: true,
120
+ shouldBeRetriedOn5xx: true,
121
+ },
122
+ {
123
+ makeApiRequest: () => api.getMobileApplicationPresignedURLs('applicationId', 1025, fixtures_1.MOBILE_PRESIGNED_UPLOAD_PARTS),
124
+ name: 'get presigned url',
125
+ shouldBeRetriedOn404: false,
126
+ shouldBeRetriedOn429: false,
127
+ shouldBeRetriedOn5xx: true,
128
+ },
129
+ {
130
+ makeApiRequest: () => api.getTunnelPresignedURL(['test-id']),
131
+ name: 'get presigned url',
132
+ shouldBeRetriedOn404: false,
133
+ shouldBeRetriedOn429: false,
134
+ shouldBeRetriedOn5xx: true,
135
+ },
136
+ {
137
+ makeApiRequest: () => api.getTest('public-id'),
138
+ name: 'get test',
139
+ shouldBeRetriedOn404: false,
140
+ shouldBeRetriedOn429: true,
141
+ shouldBeRetriedOn5xx: true,
142
+ },
143
+ {
144
+ makeApiRequest: () => api.pollResults(['result-id']),
145
+ name: 'poll results',
146
+ shouldBeRetriedOn404: true,
147
+ shouldBeRetriedOn429: true,
148
+ shouldBeRetriedOn5xx: true,
149
+ },
150
+ {
151
+ makeApiRequest: () => api.searchTests('search query'),
152
+ name: 'search tests',
153
+ shouldBeRetriedOn404: false,
154
+ shouldBeRetriedOn429: false,
155
+ shouldBeRetriedOn5xx: true,
156
+ },
157
+ {
158
+ makeApiRequest: () => api.triggerTests({ tests: [{ public_id: '123-456-789', executionRule: interfaces_1.ExecutionRule.NON_BLOCKING }] }),
159
+ name: 'trigger tests',
160
+ shouldBeRetriedOn404: false,
161
+ shouldBeRetriedOn429: true,
162
+ shouldBeRetriedOn5xx: true,
163
+ },
164
+ {
165
+ makeApiRequest: () => api.getSyntheticsOrgSettings(),
166
+ name: 'get settings',
167
+ shouldBeRetriedOn404: false,
168
+ shouldBeRetriedOn429: false,
169
+ shouldBeRetriedOn5xx: true,
170
+ },
171
+ ];
172
+ test.each(cases)('should retry "$name" request (HTTP 404: $shouldBeRetriedOn404, HTTP 429: $shouldBeRetriedOn429, HTTP 5xx: $shouldBeRetriedOn5xx)', ({ makeApiRequest, shouldBeRetriedOn404, shouldBeRetriedOn429, shouldBeRetriedOn5xx }) => __awaiter(void 0, void 0, void 0, function* () {
173
+ const serverError = new axios_1.AxiosError('Server Error');
174
+ const requestMock = jest.fn().mockImplementation(() => {
175
+ throw serverError;
176
+ });
177
+ jest.spyOn(axios_1.default, 'create').mockImplementation((() => requestMock));
178
+ {
179
+ serverError.response = { status: 404 };
180
+ const requestPromise = makeApiRequest();
181
+ yield fastForwardRetries();
182
+ yield expect(requestPromise).rejects.toThrow('Server Error');
183
+ expect(requestMock).toHaveBeenCalledTimes(shouldBeRetriedOn404 ? MAX_ATTEMPTS : MIN_ATTEMPTS);
184
+ }
185
+ requestMock.mockClear();
186
+ {
187
+ serverError.response = { status: 429 };
188
+ const requestPromise = makeApiRequest();
189
+ yield fastForwardRetries();
190
+ yield expect(requestPromise).rejects.toThrow('Server Error');
191
+ expect(requestMock).toHaveBeenCalledTimes(shouldBeRetriedOn429 ? MAX_ATTEMPTS : MIN_ATTEMPTS);
192
+ }
193
+ requestMock.mockClear();
194
+ {
195
+ serverError.response = { status: 502 };
196
+ const requestPromise = makeApiRequest();
197
+ yield fastForwardRetries();
198
+ yield expect(requestPromise).rejects.toThrow('Server Error');
199
+ expect(requestMock).toHaveBeenCalledTimes(shouldBeRetriedOn5xx ? MAX_ATTEMPTS : MIN_ATTEMPTS);
200
+ }
201
+ }));
202
+ test('should retry when socket hangs up', () => __awaiter(void 0, void 0, void 0, function* () {
203
+ jest.spyOn(utils, 'wait').mockImplementation();
204
+ const requestSpy = jest.fn();
205
+ const server = (0, http_1.createServer)((_, res) => {
206
+ var _a;
207
+ // ECONNRESET: socket hang up
208
+ (_a = res.socket) === null || _a === void 0 ? void 0 : _a.destroy();
209
+ requestSpy();
210
+ });
211
+ server.listen();
212
+ const { port } = server.address();
213
+ const localApi = (0, api_1.apiConstructor)(Object.assign(Object.assign({}, apiConfiguration), { baseUrl: `http://127.0.0.1:${port}` }));
214
+ yield expect(localApi.getSyntheticsOrgSettings).rejects.toThrow('socket hang up');
215
+ expect(requestSpy).toHaveBeenCalledTimes(MAX_ATTEMPTS);
216
+ server.close();
217
+ }));
218
+ });
219
+ test('should get a mobile application presigned URL from api', () => __awaiter(void 0, void 0, void 0, function* () {
220
+ const spy = jest
221
+ .spyOn(axios_1.default, 'create')
222
+ .mockImplementation((() => () => ({ data: fixtures_1.MOBILE_PRESIGNED_URLS_PAYLOAD })));
223
+ const api = (0, api_1.apiConstructor)(apiConfiguration);
224
+ const { getMobileApplicationPresignedURLs } = api;
225
+ const result = yield getMobileApplicationPresignedURLs('applicationId', 1025, fixtures_1.MOBILE_PRESIGNED_UPLOAD_PARTS);
226
+ expect(result).toEqual(fixtures_1.MOBILE_PRESIGNED_URLS_PAYLOAD);
227
+ spy.mockRestore();
228
+ }));
229
+ test('should get a tunnel presigned URL from api', () => __awaiter(void 0, void 0, void 0, function* () {
230
+ const spy = jest.spyOn(axios_1.default, 'create').mockImplementation((() => () => ({ data: PRESIGNED_URL_PAYLOAD })));
231
+ const api = (0, api_1.apiConstructor)(apiConfiguration);
232
+ const { getTunnelPresignedURL } = api;
233
+ const { url } = yield getTunnelPresignedURL([TRIGGERED_TEST_ID]);
234
+ expect(url).toEqual(PRESIGNED_URL_PAYLOAD.url);
235
+ spy.mockRestore();
236
+ }));
237
+ test('should upload a mobile application with a presigned URL', () => __awaiter(void 0, void 0, void 0, function* () {
238
+ const mockRequest = jest.fn();
239
+ mockRequest.mockReturnValue({ status: 200, headers: { etag: '"123"' } });
240
+ const spy = jest.spyOn(axios_1.default, 'create').mockImplementation((() => mockRequest));
241
+ const api = (0, api_1.apiConstructor)(apiConfiguration);
242
+ const { uploadMobileApplicationPart } = api;
243
+ const result = yield uploadMobileApplicationPart(fixtures_1.MOBILE_PRESIGNED_UPLOAD_PARTS, fixtures_1.MOBILE_PRESIGNED_URLS_PAYLOAD.multipart_presigned_urls_params);
244
+ expect(result).toEqual([
245
+ { ETag: '123', PartNumber: 1 },
246
+ { ETag: '123', PartNumber: 2 },
247
+ ]);
248
+ const callArg = mockRequest.mock.calls[0][0];
249
+ expect(callArg.url).toBe(fixtures_1.MOBILE_PRESIGNED_URLS_PAYLOAD.multipart_presigned_urls_params.urls[1]);
250
+ expect(mockRequest).toHaveBeenCalledTimes(fixtures_1.MOBILE_PRESIGNED_UPLOAD_PARTS.length);
251
+ spy.mockRestore();
252
+ }));
253
+ test('should return empty ETag when doing azure part upload', () => __awaiter(void 0, void 0, void 0, function* () {
254
+ const mockRequest = jest.fn();
255
+ mockRequest.mockReturnValue({ status: 200, headers: {} });
256
+ const spy = jest.spyOn(axios_1.default, 'create').mockImplementation((() => mockRequest));
257
+ const api = (0, api_1.apiConstructor)(apiConfiguration);
258
+ const { uploadMobileApplicationPart } = api;
259
+ const urls = {
260
+ 1: 'https://myaccount.blob.core.windows.net/mycontainer/myblob1',
261
+ 2: 'https://myaccount.blob.core.windows.net/mycontainer/myblob2',
262
+ };
263
+ const result = yield uploadMobileApplicationPart(fixtures_1.MOBILE_PRESIGNED_UPLOAD_PARTS, Object.assign(Object.assign({}, fixtures_1.MOBILE_PRESIGNED_URLS_PAYLOAD.multipart_presigned_urls_params), {
264
+ // override fixture with azure urls
265
+ urls }));
266
+ expect(result).toEqual([
267
+ { ETag: '', PartNumber: 1 },
268
+ { ETag: '', PartNumber: 2 },
269
+ ]);
270
+ const callArg = mockRequest.mock.calls[0][0];
271
+ expect(callArg.url).toBe(urls[1]);
272
+ expect(mockRequest).toHaveBeenCalledTimes(fixtures_1.MOBILE_PRESIGNED_UPLOAD_PARTS.length);
273
+ spy.mockRestore();
274
+ }));
275
+ test('should complete presigned mobile application upload', () => __awaiter(void 0, void 0, void 0, function* () {
276
+ const jobId = 'fake_job_id';
277
+ const spy = jest.spyOn(axios_1.default, 'create').mockImplementation((() => () => ({ data: { job_id: jobId } })));
278
+ const api = (0, api_1.apiConstructor)(apiConfiguration);
279
+ const { completeMultipartMobileApplicationUpload } = api;
280
+ const appId = 'appId123';
281
+ const partUploadResponses = Object.keys(fixtures_1.MOBILE_PRESIGNED_URLS_PAYLOAD.multipart_presigned_urls_params.urls).map((partNumber) => ({
282
+ PartNumber: Number(partNumber),
283
+ ETag: 'etag',
284
+ }));
285
+ const result = yield completeMultipartMobileApplicationUpload(appId, fixtures_1.MOBILE_PRESIGNED_URLS_PAYLOAD.multipart_presigned_urls_params.upload_id, fixtures_1.MOBILE_PRESIGNED_URLS_PAYLOAD.multipart_presigned_urls_params.key, partUploadResponses);
286
+ expect(result).toBe(jobId);
287
+ spy.mockRestore();
288
+ }));
289
+ test('should poll for app upload validation', () => __awaiter(void 0, void 0, void 0, function* () {
290
+ const spy = jest.spyOn(axios_1.default, 'create').mockImplementation((() => () => ({ data: fixtures_1.APP_UPLOAD_POLL_RESULTS })));
291
+ const api = (0, api_1.apiConstructor)(apiConfiguration);
292
+ const { pollMobileApplicationUploadResponse } = api;
293
+ const jobId = 'jobId';
294
+ const appUploadResult = yield pollMobileApplicationUploadResponse(jobId);
295
+ expect(appUploadResult).toEqual(fixtures_1.APP_UPLOAD_POLL_RESULTS);
296
+ spy.mockRestore();
297
+ }));
298
+ test('should perform search with expected parameters', () => __awaiter(void 0, void 0, void 0, function* () {
299
+ const requestMock = jest.fn(() => ({ status: 200, data: { tests: [] } }));
300
+ const spy = jest.spyOn(axios_1.default, 'create').mockImplementation((() => requestMock));
301
+ const { searchTests } = (0, api_1.apiConstructor)(apiConfiguration);
302
+ yield expect(searchTests('tag:("test") creator:("Me") ???')).resolves.toEqual({ tests: [] });
303
+ expect(requestMock).toHaveBeenCalledWith(expect.objectContaining({
304
+ params: {
305
+ count: run_tests_command_1.MAX_TESTS_TO_TRIGGER + 1,
306
+ text: 'tag:("test") creator:("Me") ???',
307
+ },
308
+ }));
309
+ spy.mockRestore();
310
+ }));
311
+ test('should receive settings', () => __awaiter(void 0, void 0, void 0, function* () {
312
+ const settings = { onDemandConcurrencyCap: 10 };
313
+ const requestMock = jest.fn(() => ({ status: 200, data: settings }));
314
+ const spy = jest.spyOn(axios_1.default, 'create').mockImplementation((() => requestMock));
315
+ const { getSyntheticsOrgSettings: getSettings } = (0, api_1.apiConstructor)(apiConfiguration);
316
+ yield expect(getSettings()).resolves.toEqual(settings);
317
+ spy.mockRestore();
318
+ }));
319
+ describe('proxy configuration', () => {
320
+ const tests = [{ public_id: '123-456-789', executionRule: interfaces_1.ExecutionRule.NON_BLOCKING }];
321
+ let initialHttpProxyEnv;
322
+ beforeAll(() => {
323
+ initialHttpProxyEnv = process.env.HTTP_PROXY;
324
+ });
325
+ afterAll(() => {
326
+ if (initialHttpProxyEnv !== undefined) {
327
+ process.env.HTTP_PROXY = initialHttpProxyEnv;
328
+ }
329
+ else {
330
+ delete process.env.HTTP_PROXY;
331
+ }
332
+ });
333
+ beforeEach(() => {
334
+ delete process.env.HTTP_PROXY;
335
+ });
336
+ test('use proxy defined in configuration', () => __awaiter(void 0, void 0, void 0, function* () {
337
+ const { close: proxyClose, config: proxyOpts, calls } = (0, fixtures_1.getSyntheticsProxy)();
338
+ try {
339
+ const proxyApiConfiguration = Object.assign(Object.assign({}, apiConfiguration), { proxyOpts });
340
+ const api = (0, api_1.apiConstructor)(proxyApiConfiguration);
341
+ const searchOutput = yield api.searchTests('tag:test');
342
+ expect(searchOutput).toEqual(fixtures_1.mockSearchResponse);
343
+ expect(calls.search).toHaveBeenCalled();
344
+ const tunnelOutput = yield api.getTunnelPresignedURL(['123-456-789']);
345
+ expect(tunnelOutput).toEqual({ url: expect.stringContaining('ws://127.0.0.1:') });
346
+ expect(calls.presignedUrl).toHaveBeenCalled();
347
+ const testOutput = yield api.getTest('123-456-789');
348
+ expect(testOutput).toEqual((0, fixtures_1.getApiTest)('123-456-789'));
349
+ expect(calls.get).toHaveBeenCalled();
350
+ const triggerOutput = yield api.triggerTests({ tests });
351
+ expect(triggerOutput).toEqual(fixtures_1.mockTestTriggerResponse);
352
+ expect(calls.trigger).toHaveBeenCalledWith({ tests });
353
+ }
354
+ finally {
355
+ yield proxyClose();
356
+ }
357
+ }));
358
+ test('use proxy defined in environment variable', () => __awaiter(void 0, void 0, void 0, function* () {
359
+ const { close: proxyClose, config: proxyOpts, calls } = (0, fixtures_1.getSyntheticsProxy)();
360
+ process.env.HTTP_PROXY = `http://localhost:${proxyOpts.port}`;
361
+ try {
362
+ const api = (0, api_1.apiConstructor)(apiConfiguration);
363
+ const searchOutput = yield api.searchTests('tag:test');
364
+ expect(searchOutput).toEqual(fixtures_1.mockSearchResponse);
365
+ expect(calls.search).toHaveBeenCalled();
366
+ const triggerOutput = yield api.triggerTests({ tests });
367
+ expect(triggerOutput).toEqual(fixtures_1.mockTestTriggerResponse);
368
+ expect(calls.trigger).toHaveBeenCalledWith({ tests });
369
+ }
370
+ finally {
371
+ yield proxyClose();
372
+ }
373
+ }));
374
+ test('use configuration proxy over environment variable', () => __awaiter(void 0, void 0, void 0, function* () {
375
+ const { close: proxyClose, config: proxyOpts, calls } = (0, fixtures_1.getSyntheticsProxy)();
376
+ process.env.HTTP_PROXY = 'http://inexistanthost/';
377
+ try {
378
+ const proxyApiConfiguration = Object.assign(Object.assign({}, apiConfiguration), { proxyOpts });
379
+ const api = (0, api_1.apiConstructor)(proxyApiConfiguration);
380
+ const triggerOutput = yield api.triggerTests({ tests });
381
+ expect(triggerOutput).toEqual(fixtures_1.mockTestTriggerResponse);
382
+ expect(calls.trigger).toHaveBeenCalledWith({ tests });
383
+ }
384
+ finally {
385
+ yield proxyClose();
386
+ }
387
+ }));
388
+ });
389
+ });
390
+ describe('getApiHelper', () => {
391
+ beforeEach(() => {
392
+ jest.restoreAllMocks();
393
+ });
394
+ test('should throw an error if API or Application key are undefined', () => __awaiter(void 0, void 0, void 0, function* () {
395
+ process.env = {};
396
+ expect(() => (0, api_1.getApiHelper)(fixtures_1.ciConfig)).toThrow(new errors_1.CriticalError('MISSING_APP_KEY', 'App key is required'));
397
+ expect(() => (0, api_1.getApiHelper)(Object.assign(Object.assign({}, fixtures_1.ciConfig), { appKey: 'fakeappkey' }))).toThrow(new errors_1.CriticalError('MISSING_API_KEY', 'API key is required'));
398
+ }));
399
+ });
400
+ describe('formatBackendErrors', () => {
401
+ test('backend error - no error', () => {
402
+ const backendError = (0, fixtures_1.getAxiosHttpError)(500, { errors: [] });
403
+ expect((0, api_1.formatBackendErrors)(backendError)).toBe('error querying https://app.datadoghq.com/example');
404
+ });
405
+ test('backend error - single error', () => {
406
+ const backendError = (0, fixtures_1.getAxiosHttpError)(500, { errors: ['single error'] });
407
+ expect((0, api_1.formatBackendErrors)(backendError)).toBe('query on https://app.datadoghq.com/example returned: "single error"');
408
+ });
409
+ test('backend error - multiple errors', () => {
410
+ const backendError = (0, fixtures_1.getAxiosHttpError)(500, { errors: ['error 1', 'error 2'] });
411
+ expect((0, api_1.formatBackendErrors)(backendError)).toBe('query on https://app.datadoghq.com/example returned:\n - error 1\n - error 2');
412
+ });
413
+ test('not a backend error', () => {
414
+ const requestError = (0, fixtures_1.getAxiosHttpError)(403, { message: 'Forbidden' });
415
+ expect((0, api_1.formatBackendErrors)(requestError)).toBe('could not query https://app.datadoghq.com/example\nForbidden');
416
+ });
417
+ test('missing scope error', () => {
418
+ const requestError = (0, fixtures_1.getAxiosHttpError)(403, { errors: ['Forbidden', 'Failed permission authorization checks'] });
419
+ expect((0, api_1.formatBackendErrors)(requestError, 'synthetics_default_settings_read')).toBe('query on https://app.datadoghq.com/example returned:\n - Forbidden\n - Failed permission authorization checks\nIs the App key granted the synthetics_default_settings_read scope?');
420
+ });
421
+ });
422
+ //# sourceMappingURL=api.test.js.map