@aws-blocks/core 0.1.0

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 (394) hide show
  1. package/LICENSE +174 -0
  2. package/dist/api.d.ts +147 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +10 -0
  5. package/dist/api.test.d.ts +2 -0
  6. package/dist/api.test.d.ts.map +1 -0
  7. package/dist/api.test.js +19 -0
  8. package/dist/bb-utils.d.ts +11 -0
  9. package/dist/bb-utils.d.ts.map +1 -0
  10. package/dist/bb-utils.js +12 -0
  11. package/dist/builtin-routes.d.ts +6 -0
  12. package/dist/builtin-routes.d.ts.map +1 -0
  13. package/dist/builtin-routes.js +57 -0
  14. package/dist/cdk/__fixtures__/factory-backend.d.ts +3 -0
  15. package/dist/cdk/__fixtures__/factory-backend.d.ts.map +1 -0
  16. package/dist/cdk/__fixtures__/factory-backend.js +6 -0
  17. package/dist/cdk/__fixtures__/fullid-construct-backend.d.ts +2 -0
  18. package/dist/cdk/__fixtures__/fullid-construct-backend.d.ts.map +1 -0
  19. package/dist/cdk/__fixtures__/fullid-construct-backend.js +37 -0
  20. package/dist/cdk/__fixtures__/handler.d.ts +5 -0
  21. package/dist/cdk/__fixtures__/handler.d.ts.map +1 -0
  22. package/dist/cdk/__fixtures__/handler.js +3 -0
  23. package/dist/cdk/__fixtures__/side-effect-backend.d.ts +2 -0
  24. package/dist/cdk/__fixtures__/side-effect-backend.d.ts.map +1 -0
  25. package/dist/cdk/__fixtures__/side-effect-backend.js +5 -0
  26. package/dist/cdk/blocks-backend.d.ts +68 -0
  27. package/dist/cdk/blocks-backend.d.ts.map +1 -0
  28. package/dist/cdk/blocks-backend.js +214 -0
  29. package/dist/cdk/blocks-backend.test.d.ts +2 -0
  30. package/dist/cdk/blocks-backend.test.d.ts.map +1 -0
  31. package/dist/cdk/blocks-backend.test.js +151 -0
  32. package/dist/cdk/blocks-stack.test.d.ts +2 -0
  33. package/dist/cdk/blocks-stack.test.d.ts.map +1 -0
  34. package/dist/cdk/blocks-stack.test.js +78 -0
  35. package/dist/cdk/config-registry.d.ts +26 -0
  36. package/dist/cdk/config-registry.d.ts.map +1 -0
  37. package/dist/cdk/config-registry.js +80 -0
  38. package/dist/cdk/index.d.ts +35 -0
  39. package/dist/cdk/index.d.ts.map +1 -0
  40. package/dist/cdk/index.js +90 -0
  41. package/dist/cdk/mixins.d.ts +28 -0
  42. package/dist/cdk/mixins.d.ts.map +1 -0
  43. package/dist/cdk/mixins.js +37 -0
  44. package/dist/cdk/mixins.test.d.ts +2 -0
  45. package/dist/cdk/mixins.test.d.ts.map +1 -0
  46. package/dist/cdk/mixins.test.js +108 -0
  47. package/dist/cdk/node-version.d.ts +14 -0
  48. package/dist/cdk/node-version.d.ts.map +1 -0
  49. package/dist/cdk/node-version.js +15 -0
  50. package/dist/cdk/stack-metadata.d.ts +12 -0
  51. package/dist/cdk/stack-metadata.d.ts.map +1 -0
  52. package/dist/cdk/stack-metadata.js +22 -0
  53. package/dist/cdk/stack-metadata.test.d.ts +2 -0
  54. package/dist/cdk/stack-metadata.test.d.ts.map +1 -0
  55. package/dist/cdk/stack-metadata.test.js +56 -0
  56. package/dist/cdk/synth-guard.d.ts +14 -0
  57. package/dist/cdk/synth-guard.d.ts.map +1 -0
  58. package/dist/cdk/synth-guard.js +20 -0
  59. package/dist/cdk/synth-guard.test.d.ts +2 -0
  60. package/dist/cdk/synth-guard.test.d.ts.map +1 -0
  61. package/dist/cdk/synth-guard.test.js +15 -0
  62. package/dist/client/index.d.ts +97 -0
  63. package/dist/client/index.d.ts.map +1 -0
  64. package/dist/client/index.js +238 -0
  65. package/dist/client/index.test.d.ts +2 -0
  66. package/dist/client/index.test.d.ts.map +1 -0
  67. package/dist/client/index.test.js +113 -0
  68. package/dist/common/config.d.ts +45 -0
  69. package/dist/common/config.d.ts.map +1 -0
  70. package/dist/common/config.js +154 -0
  71. package/dist/common/config.test.d.ts +2 -0
  72. package/dist/common/config.test.d.ts.map +1 -0
  73. package/dist/common/config.test.js +173 -0
  74. package/dist/common/constants.d.ts +11 -0
  75. package/dist/common/constants.d.ts.map +1 -0
  76. package/dist/common/constants.js +12 -0
  77. package/dist/common/crypto.d.ts +6 -0
  78. package/dist/common/crypto.d.ts.map +1 -0
  79. package/dist/common/crypto.js +14 -0
  80. package/dist/common/index.d.ts +220 -0
  81. package/dist/common/index.d.ts.map +1 -0
  82. package/dist/common/index.js +180 -0
  83. package/dist/common/index.test.d.ts +2 -0
  84. package/dist/common/index.test.d.ts.map +1 -0
  85. package/dist/common/index.test.js +195 -0
  86. package/dist/common/mock-data.d.ts +40 -0
  87. package/dist/common/mock-data.d.ts.map +1 -0
  88. package/dist/common/mock-data.js +39 -0
  89. package/dist/common/official-bb-names.generated.d.ts +7 -0
  90. package/dist/common/official-bb-names.generated.d.ts.map +1 -0
  91. package/dist/common/official-bb-names.generated.js +28 -0
  92. package/dist/common/sdk-registry.d.ts +136 -0
  93. package/dist/common/sdk-registry.d.ts.map +1 -0
  94. package/dist/common/sdk-registry.js +125 -0
  95. package/dist/constants.d.ts +27 -0
  96. package/dist/constants.d.ts.map +1 -0
  97. package/dist/constants.js +28 -0
  98. package/dist/cors.d.ts +39 -0
  99. package/dist/cors.d.ts.map +1 -0
  100. package/dist/cors.js +85 -0
  101. package/dist/cors.test.d.ts +2 -0
  102. package/dist/cors.test.d.ts.map +1 -0
  103. package/dist/cors.test.js +241 -0
  104. package/dist/db-naming.d.ts +21 -0
  105. package/dist/db-naming.d.ts.map +1 -0
  106. package/dist/db-naming.js +38 -0
  107. package/dist/db-naming.test.d.ts +2 -0
  108. package/dist/db-naming.test.d.ts.map +1 -0
  109. package/dist/db-naming.test.js +29 -0
  110. package/dist/errors.d.ts +67 -0
  111. package/dist/errors.d.ts.map +1 -0
  112. package/dist/errors.js +69 -0
  113. package/dist/hosting.d.ts +258 -0
  114. package/dist/hosting.d.ts.map +1 -0
  115. package/dist/hosting.js +340 -0
  116. package/dist/hosting.test.d.ts +2 -0
  117. package/dist/hosting.test.d.ts.map +1 -0
  118. package/dist/hosting.test.js +1077 -0
  119. package/dist/index.cdk.d.ts +13 -0
  120. package/dist/index.cdk.d.ts.map +1 -0
  121. package/dist/index.cdk.js +13 -0
  122. package/dist/index.d.ts +9 -0
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +10 -0
  125. package/dist/lambda-handler.d.ts +131 -0
  126. package/dist/lambda-handler.d.ts.map +1 -0
  127. package/dist/lambda-handler.js +610 -0
  128. package/dist/lambda-handler.test.d.ts +2 -0
  129. package/dist/lambda-handler.test.d.ts.map +1 -0
  130. package/dist/lambda-handler.test.js +835 -0
  131. package/dist/pipeline/index.d.ts +4 -0
  132. package/dist/pipeline/index.d.ts.map +1 -0
  133. package/dist/pipeline/index.js +3 -0
  134. package/dist/pipeline/pipeline-construct.d.ts +130 -0
  135. package/dist/pipeline/pipeline-construct.d.ts.map +1 -0
  136. package/dist/pipeline/pipeline-construct.js +484 -0
  137. package/dist/pipeline/pipeline.test.d.ts +2 -0
  138. package/dist/pipeline/pipeline.test.d.ts.map +1 -0
  139. package/dist/pipeline/pipeline.test.js +1231 -0
  140. package/dist/pipeline/types.d.ts +351 -0
  141. package/dist/pipeline/types.d.ts.map +1 -0
  142. package/dist/pipeline/types.js +3 -0
  143. package/dist/raw-route.cdk.d.ts +47 -0
  144. package/dist/raw-route.cdk.d.ts.map +1 -0
  145. package/dist/raw-route.cdk.js +51 -0
  146. package/dist/raw-route.d.ts +119 -0
  147. package/dist/raw-route.d.ts.map +1 -0
  148. package/dist/raw-route.js +239 -0
  149. package/dist/raw-route.mock.d.ts +47 -0
  150. package/dist/raw-route.mock.d.ts.map +1 -0
  151. package/dist/raw-route.mock.js +51 -0
  152. package/dist/raw-route.test.d.ts +2 -0
  153. package/dist/raw-route.test.d.ts.map +1 -0
  154. package/dist/raw-route.test.js +597 -0
  155. package/dist/redact.d.ts +51 -0
  156. package/dist/redact.d.ts.map +1 -0
  157. package/dist/redact.js +134 -0
  158. package/dist/redact.test.d.ts +2 -0
  159. package/dist/redact.test.d.ts.map +1 -0
  160. package/dist/redact.test.js +199 -0
  161. package/dist/rpc.d.ts +54 -0
  162. package/dist/rpc.d.ts.map +1 -0
  163. package/dist/rpc.js +127 -0
  164. package/dist/rpc.test.d.ts +2 -0
  165. package/dist/rpc.test.d.ts.map +1 -0
  166. package/dist/rpc.test.js +60 -0
  167. package/dist/scripts/cdk-telemetry-env.d.ts +13 -0
  168. package/dist/scripts/cdk-telemetry-env.d.ts.map +1 -0
  169. package/dist/scripts/cdk-telemetry-env.js +21 -0
  170. package/dist/scripts/cdk-telemetry-env.test.d.ts +2 -0
  171. package/dist/scripts/cdk-telemetry-env.test.d.ts.map +1 -0
  172. package/dist/scripts/cdk-telemetry-env.test.js +56 -0
  173. package/dist/scripts/cleanup.d.ts +3 -0
  174. package/dist/scripts/cleanup.d.ts.map +1 -0
  175. package/dist/scripts/cleanup.js +35 -0
  176. package/dist/scripts/console.d.ts +6 -0
  177. package/dist/scripts/console.d.ts.map +1 -0
  178. package/dist/scripts/console.js +25 -0
  179. package/dist/scripts/deploy.d.ts +6 -0
  180. package/dist/scripts/deploy.d.ts.map +1 -0
  181. package/dist/scripts/deploy.js +82 -0
  182. package/dist/scripts/destroy.d.ts +6 -0
  183. package/dist/scripts/destroy.d.ts.map +1 -0
  184. package/dist/scripts/destroy.js +30 -0
  185. package/dist/scripts/dev-server-cors.test.d.ts +2 -0
  186. package/dist/scripts/dev-server-cors.test.d.ts.map +1 -0
  187. package/dist/scripts/dev-server-cors.test.js +23 -0
  188. package/dist/scripts/dev-server-telemetry.test.d.ts +2 -0
  189. package/dist/scripts/dev-server-telemetry.test.d.ts.map +1 -0
  190. package/dist/scripts/dev-server-telemetry.test.js +113 -0
  191. package/dist/scripts/dev-server.d.ts +21 -0
  192. package/dist/scripts/dev-server.d.ts.map +1 -0
  193. package/dist/scripts/dev-server.js +456 -0
  194. package/dist/scripts/ensure-secrets.d.ts +31 -0
  195. package/dist/scripts/ensure-secrets.d.ts.map +1 -0
  196. package/dist/scripts/ensure-secrets.js +100 -0
  197. package/dist/scripts/ensure-secrets.test.d.ts +2 -0
  198. package/dist/scripts/ensure-secrets.test.d.ts.map +1 -0
  199. package/dist/scripts/ensure-secrets.test.js +44 -0
  200. package/dist/scripts/external-migrations-step.d.ts +62 -0
  201. package/dist/scripts/external-migrations-step.d.ts.map +1 -0
  202. package/dist/scripts/external-migrations-step.js +243 -0
  203. package/dist/scripts/external-migrations-step.test.d.ts +2 -0
  204. package/dist/scripts/external-migrations-step.test.d.ts.map +1 -0
  205. package/dist/scripts/external-migrations-step.test.js +47 -0
  206. package/dist/scripts/extract-ts-types.d.ts +65 -0
  207. package/dist/scripts/extract-ts-types.d.ts.map +1 -0
  208. package/dist/scripts/extract-ts-types.js +664 -0
  209. package/dist/scripts/extract-ts-types.test.d.ts +2 -0
  210. package/dist/scripts/extract-ts-types.test.d.ts.map +1 -0
  211. package/dist/scripts/extract-ts-types.test.js +497 -0
  212. package/dist/scripts/generate-client-worker.d.ts +2 -0
  213. package/dist/scripts/generate-client-worker.d.ts.map +1 -0
  214. package/dist/scripts/generate-client-worker.js +13 -0
  215. package/dist/scripts/generate-client.d.ts +14 -0
  216. package/dist/scripts/generate-client.d.ts.map +1 -0
  217. package/dist/scripts/generate-client.js +73 -0
  218. package/dist/scripts/generate-client.test.d.ts +2 -0
  219. package/dist/scripts/generate-client.test.d.ts.map +1 -0
  220. package/dist/scripts/generate-client.test.js +48 -0
  221. package/dist/scripts/generate-spec-cli.d.ts +3 -0
  222. package/dist/scripts/generate-spec-cli.d.ts.map +1 -0
  223. package/dist/scripts/generate-spec-cli.js +77 -0
  224. package/dist/scripts/generate-spec-cli.test.d.ts +14 -0
  225. package/dist/scripts/generate-spec-cli.test.d.ts.map +1 -0
  226. package/dist/scripts/generate-spec-cli.test.js +90 -0
  227. package/dist/scripts/generate-spec.d.ts +61 -0
  228. package/dist/scripts/generate-spec.d.ts.map +1 -0
  229. package/dist/scripts/generate-spec.js +746 -0
  230. package/dist/scripts/generate-spec.test.d.ts +12 -0
  231. package/dist/scripts/generate-spec.test.d.ts.map +1 -0
  232. package/dist/scripts/generate-spec.test.js +88 -0
  233. package/dist/scripts/index.d.ts +12 -0
  234. package/dist/scripts/index.d.ts.map +1 -0
  235. package/dist/scripts/index.js +13 -0
  236. package/dist/scripts/sandbox.d.ts +11 -0
  237. package/dist/scripts/sandbox.d.ts.map +1 -0
  238. package/dist/scripts/sandbox.js +200 -0
  239. package/dist/scripts/telemetry-cli.d.ts +3 -0
  240. package/dist/scripts/telemetry-cli.d.ts.map +1 -0
  241. package/dist/scripts/telemetry-cli.js +8 -0
  242. package/dist/scripts/telemetry.d.ts +17 -0
  243. package/dist/scripts/telemetry.d.ts.map +1 -0
  244. package/dist/scripts/telemetry.js +150 -0
  245. package/dist/scripts/telemetry.test.d.ts +2 -0
  246. package/dist/scripts/telemetry.test.d.ts.map +1 -0
  247. package/dist/scripts/telemetry.test.js +203 -0
  248. package/dist/scripts/validate-spec.d.ts +22 -0
  249. package/dist/scripts/validate-spec.d.ts.map +1 -0
  250. package/dist/scripts/validate-spec.js +159 -0
  251. package/dist/server/index.d.ts +3 -0
  252. package/dist/server/index.d.ts.map +1 -0
  253. package/dist/server/index.js +3 -0
  254. package/dist/server/withAuth.d.ts +142 -0
  255. package/dist/server/withAuth.d.ts.map +1 -0
  256. package/dist/server/withAuth.js +261 -0
  257. package/dist/server/withAuth.test.d.ts +2 -0
  258. package/dist/server/withAuth.test.d.ts.map +1 -0
  259. package/dist/server/withAuth.test.js +278 -0
  260. package/dist/telemetry/client.d.ts +59 -0
  261. package/dist/telemetry/client.d.ts.map +1 -0
  262. package/dist/telemetry/client.js +215 -0
  263. package/dist/telemetry/config-writer.d.ts +16 -0
  264. package/dist/telemetry/config-writer.d.ts.map +1 -0
  265. package/dist/telemetry/config-writer.js +36 -0
  266. package/dist/telemetry/consent-commands.test.d.ts +2 -0
  267. package/dist/telemetry/consent-commands.test.d.ts.map +1 -0
  268. package/dist/telemetry/consent-commands.test.js +161 -0
  269. package/dist/telemetry/consent.d.ts +60 -0
  270. package/dist/telemetry/consent.d.ts.map +1 -0
  271. package/dist/telemetry/consent.js +122 -0
  272. package/dist/telemetry/environment.d.ts +33 -0
  273. package/dist/telemetry/environment.d.ts.map +1 -0
  274. package/dist/telemetry/environment.js +87 -0
  275. package/dist/telemetry/identifiers.d.ts +20 -0
  276. package/dist/telemetry/identifiers.d.ts.map +1 -0
  277. package/dist/telemetry/identifiers.js +86 -0
  278. package/dist/telemetry/index.d.ts +6 -0
  279. package/dist/telemetry/index.d.ts.map +1 -0
  280. package/dist/telemetry/index.js +4 -0
  281. package/dist/telemetry/telemetry.test.d.ts +2 -0
  282. package/dist/telemetry/telemetry.test.d.ts.map +1 -0
  283. package/dist/telemetry/telemetry.test.js +1131 -0
  284. package/dist/telemetry/trackCommand.d.ts +32 -0
  285. package/dist/telemetry/trackCommand.d.ts.map +1 -0
  286. package/dist/telemetry/trackCommand.js +102 -0
  287. package/dist/telemetry/types.d.ts +92 -0
  288. package/dist/telemetry/types.d.ts.map +1 -0
  289. package/dist/telemetry/types.js +1 -0
  290. package/dist/types.d.ts +24 -0
  291. package/dist/types.d.ts.map +1 -0
  292. package/dist/types.js +3 -0
  293. package/dist/version.d.ts +2 -0
  294. package/dist/version.d.ts.map +1 -0
  295. package/dist/version.js +2 -0
  296. package/package.json +83 -0
  297. package/src/api.test.ts +25 -0
  298. package/src/api.ts +163 -0
  299. package/src/bb-utils.ts +13 -0
  300. package/src/builtin-routes.ts +62 -0
  301. package/src/cdk/__fixtures__/factory-backend.ts +8 -0
  302. package/src/cdk/__fixtures__/fullid-construct-backend.ts +42 -0
  303. package/src/cdk/__fixtures__/handler.ts +4 -0
  304. package/src/cdk/__fixtures__/side-effect-backend.ts +7 -0
  305. package/src/cdk/blocks-backend.test.ts +207 -0
  306. package/src/cdk/blocks-backend.ts +249 -0
  307. package/src/cdk/blocks-stack.test.ts +106 -0
  308. package/src/cdk/config-registry.ts +106 -0
  309. package/src/cdk/index.ts +115 -0
  310. package/src/cdk/mixins.test.ts +129 -0
  311. package/src/cdk/mixins.ts +41 -0
  312. package/src/cdk/node-version.ts +17 -0
  313. package/src/cdk/stack-metadata.test.ts +71 -0
  314. package/src/cdk/stack-metadata.ts +29 -0
  315. package/src/cdk/synth-guard.test.ts +21 -0
  316. package/src/cdk/synth-guard.ts +23 -0
  317. package/src/client/index.test.ts +118 -0
  318. package/src/client/index.ts +320 -0
  319. package/src/common/config.test.ts +236 -0
  320. package/src/common/config.ts +169 -0
  321. package/src/common/constants.ts +15 -0
  322. package/src/common/crypto.ts +15 -0
  323. package/src/common/index.test.ts +242 -0
  324. package/src/common/index.ts +335 -0
  325. package/src/common/mock-data.ts +52 -0
  326. package/src/common/official-bb-names.generated.ts +29 -0
  327. package/src/common/sdk-registry.ts +150 -0
  328. package/src/constants.ts +31 -0
  329. package/src/cors.test.ts +279 -0
  330. package/src/cors.ts +91 -0
  331. package/src/db-naming.test.ts +48 -0
  332. package/src/db-naming.ts +41 -0
  333. package/src/errors.ts +72 -0
  334. package/src/hosting.test.ts +1431 -0
  335. package/src/hosting.ts +626 -0
  336. package/src/index.cdk.ts +45 -0
  337. package/src/index.ts +22 -0
  338. package/src/lambda-handler.test.ts +1005 -0
  339. package/src/lambda-handler.ts +706 -0
  340. package/src/pipeline/index.ts +12 -0
  341. package/src/pipeline/pipeline-construct.ts +662 -0
  342. package/src/pipeline/pipeline.test.ts +1565 -0
  343. package/src/pipeline/types.ts +384 -0
  344. package/src/raw-route.cdk.ts +56 -0
  345. package/src/raw-route.mock.ts +56 -0
  346. package/src/raw-route.test.ts +819 -0
  347. package/src/raw-route.ts +316 -0
  348. package/src/redact.test.ts +222 -0
  349. package/src/redact.ts +143 -0
  350. package/src/rpc.test.ts +73 -0
  351. package/src/rpc.ts +174 -0
  352. package/src/scripts/cdk-telemetry-env.test.ts +75 -0
  353. package/src/scripts/cdk-telemetry-env.ts +23 -0
  354. package/src/scripts/cleanup.ts +39 -0
  355. package/src/scripts/console.ts +34 -0
  356. package/src/scripts/deploy.ts +106 -0
  357. package/src/scripts/destroy.ts +42 -0
  358. package/src/scripts/dev-server-cors.test.ts +28 -0
  359. package/src/scripts/dev-server-telemetry.test.ts +127 -0
  360. package/src/scripts/dev-server.ts +515 -0
  361. package/src/scripts/ensure-secrets.test.ts +50 -0
  362. package/src/scripts/ensure-secrets.ts +113 -0
  363. package/src/scripts/external-migrations-step.test.ts +64 -0
  364. package/src/scripts/external-migrations-step.ts +269 -0
  365. package/src/scripts/extract-ts-types.test.ts +516 -0
  366. package/src/scripts/extract-ts-types.ts +773 -0
  367. package/src/scripts/generate-client-worker.ts +15 -0
  368. package/src/scripts/generate-client.test.ts +69 -0
  369. package/src/scripts/generate-client.ts +86 -0
  370. package/src/scripts/generate-spec-cli.test.ts +106 -0
  371. package/src/scripts/generate-spec-cli.ts +92 -0
  372. package/src/scripts/generate-spec.test.ts +99 -0
  373. package/src/scripts/generate-spec.ts +833 -0
  374. package/src/scripts/index.ts +21 -0
  375. package/src/scripts/sandbox.ts +230 -0
  376. package/src/scripts/telemetry-cli.ts +10 -0
  377. package/src/scripts/telemetry.test.ts +239 -0
  378. package/src/scripts/telemetry.ts +173 -0
  379. package/src/scripts/validate-spec.ts +199 -0
  380. package/src/server/index.ts +5 -0
  381. package/src/server/withAuth.test.ts +348 -0
  382. package/src/server/withAuth.ts +323 -0
  383. package/src/telemetry/client.ts +226 -0
  384. package/src/telemetry/config-writer.ts +52 -0
  385. package/src/telemetry/consent-commands.test.ts +196 -0
  386. package/src/telemetry/consent.ts +154 -0
  387. package/src/telemetry/environment.ts +100 -0
  388. package/src/telemetry/identifiers.ts +94 -0
  389. package/src/telemetry/index.ts +11 -0
  390. package/src/telemetry/telemetry.test.ts +1343 -0
  391. package/src/telemetry/trackCommand.ts +110 -0
  392. package/src/telemetry/types.ts +92 -0
  393. package/src/types.ts +33 -0
  394. package/src/version.ts +2 -0
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Integration test for `generateSpec`. Builds a tiny backend file with one
3
+ * normal method and one `@blocksSkipCodegen`-tagged method, runs the spec
4
+ * emitter, and asserts the tagged method is dropped from the OpenRPC
5
+ * document.
6
+ *
7
+ * Uses a `.js` foundation file so plain `node --test dist/...` can run the
8
+ * test without a TypeScript loader. The TS compiler still parses JSDoc on
9
+ * the `.js` file when `allowJs` is enabled in the synthetic tsconfig.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=generate-spec.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-spec.test.d.ts","sourceRoot":"","sources":["../../src/scripts/generate-spec.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Integration test for `generateSpec`. Builds a tiny backend file with one
3
+ * normal method and one `@blocksSkipCodegen`-tagged method, runs the spec
4
+ * emitter, and asserts the tagged method is dropped from the OpenRPC
5
+ * document.
6
+ *
7
+ * Uses a `.js` foundation file so plain `node --test dist/...` can run the
8
+ * test without a TypeScript loader. The TS compiler still parses JSDoc on
9
+ * the `.js` file when `allowJs` is enabled in the synthetic tsconfig.
10
+ */
11
+ import { describe, it } from 'node:test';
12
+ import assert from 'node:assert';
13
+ import { writeFileSync, mkdirSync, rmSync } from 'fs';
14
+ import { join, dirname } from 'path';
15
+ import { tmpdir } from 'os';
16
+ import { fileURLToPath, pathToFileURL } from 'url';
17
+ import { generateSpec } from './generate-spec.js';
18
+ const __dirname = dirname(fileURLToPath(import.meta.url));
19
+ // `import.meta.url` lives in dist/scripts/, so `..` is dist/ and the built
20
+ // `api.js` is next to it. Re-using the real ApiNamespace ensures the marker
21
+ // symbol matches what `generateSpec` discovers.
22
+ const builtApiUrl = pathToFileURL(join(__dirname, '..', 'api.js')).href;
23
+ function writeTsconfig(dir) {
24
+ writeFileSync(join(dir, 'tsconfig.json'), JSON.stringify({
25
+ compilerOptions: {
26
+ target: 'ESNext',
27
+ module: 'ESNext',
28
+ moduleResolution: 'bundler',
29
+ allowJs: true,
30
+ esModuleInterop: true,
31
+ skipLibCheck: true,
32
+ },
33
+ }));
34
+ }
35
+ describe('generateSpec — @blocksSkipCodegen', () => {
36
+ it('drops methods carrying @blocksSkipCodegen from the OpenRPC document', async () => {
37
+ const dir = join(tmpdir(), `blocks-spec-test-${Date.now()}-skip`);
38
+ mkdirSync(dir, { recursive: true });
39
+ writeTsconfig(dir);
40
+ writeFileSync(join(dir, 'index.js'), `
41
+ import { ApiNamespace } from ${JSON.stringify(builtApiUrl)};
42
+
43
+ export const api = new ApiNamespace(null, 'api', (context) => ({
44
+ async normalMethod(name) {
45
+ return { greeting: 'hi ' + name };
46
+ },
47
+
48
+ /**
49
+ * Mock-only helper.
50
+ * @blocksSkipCodegen
51
+ */
52
+ async getLastCode() {
53
+ return null;
54
+ },
55
+ }));
56
+ `);
57
+ try {
58
+ const doc = await generateSpec(join(dir, 'index.js'));
59
+ const methodNames = doc.methods.map((m) => m.name).sort();
60
+ assert.deepStrictEqual(methodNames, ['api.normalMethod'], 'getLastCode should be omitted; only normalMethod should remain');
61
+ }
62
+ finally {
63
+ rmSync(dir, { recursive: true, force: true });
64
+ }
65
+ });
66
+ it('keeps methods that do not carry the tag', async () => {
67
+ const dir = join(tmpdir(), `blocks-spec-test-${Date.now()}-keep`);
68
+ mkdirSync(dir, { recursive: true });
69
+ writeTsconfig(dir);
70
+ writeFileSync(join(dir, 'index.js'), `
71
+ import { ApiNamespace } from ${JSON.stringify(builtApiUrl)};
72
+
73
+ export const api = new ApiNamespace(null, 'api', (context) => ({
74
+ /** Plain JSDoc with no special tag. */
75
+ async ping() { return { ok: true }; },
76
+ async echo(s) { return s; },
77
+ }));
78
+ `);
79
+ try {
80
+ const doc = await generateSpec(join(dir, 'index.js'));
81
+ const methodNames = doc.methods.map((m) => m.name).sort();
82
+ assert.deepStrictEqual(methodNames, ['api.echo', 'api.ping']);
83
+ }
84
+ finally {
85
+ rmSync(dir, { recursive: true, force: true });
86
+ }
87
+ });
88
+ });
@@ -0,0 +1,12 @@
1
+ export { startDevServer, type DevServerOptions } from './dev-server.js';
2
+ export { startSandbox, destroySandbox, type SandboxOptions } from './sandbox.js';
3
+ export { generateClientCode, writeClientCode } from './generate-client.js';
4
+ export { generateSpec, writeSpec } from './generate-spec.js';
5
+ export { validateSpec, type SpecValidationError } from './validate-spec.js';
6
+ export { deploy, type DeployOptions } from './deploy.js';
7
+ export { destroy, type DestroyOptions } from './destroy.js';
8
+ export { openConsole, type ConsoleOptions } from './console.js';
9
+ export { ensureSecrets, loadProductionEnv, loadEnvFile } from './ensure-secrets.js';
10
+ export { trackCommand, buildAndSendEvent, classifyError, type CommandName, type CommandState, type BuildAndSendEventOptions, } from '../telemetry/index.js';
11
+ export { telemetry, type TelemetryOptions } from './telemetry.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scripts/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,wBAAwB,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,13 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ export { startDevServer } from './dev-server.js';
4
+ export { startSandbox, destroySandbox } from './sandbox.js';
5
+ export { generateClientCode, writeClientCode } from './generate-client.js';
6
+ export { generateSpec, writeSpec } from './generate-spec.js';
7
+ export { validateSpec } from './validate-spec.js';
8
+ export { deploy } from './deploy.js';
9
+ export { destroy } from './destroy.js';
10
+ export { openConsole } from './console.js';
11
+ export { ensureSecrets, loadProductionEnv, loadEnvFile } from './ensure-secrets.js';
12
+ export { trackCommand, buildAndSendEvent, classifyError, } from '../telemetry/index.js';
13
+ export { telemetry } from './telemetry.js';
@@ -0,0 +1,11 @@
1
+ export interface SandboxOptions {
2
+ backendPath: string;
3
+ outDir?: string;
4
+ clientPort?: number;
5
+ deployOnly?: boolean;
6
+ /** Custom dev server command. Defaults to 'npx vite'. For Next.js use 'npx next dev'. */
7
+ devCommand?: string;
8
+ }
9
+ export declare function startSandbox(options: SandboxOptions): Promise<string | undefined>;
10
+ export declare function destroySandbox(backendPath: string): Promise<void>;
11
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/scripts/sandbox.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,cAAc,+BAqJzD;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,iBAwCvD"}
@@ -0,0 +1,200 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { execFileSync, spawn } from "node:child_process";
4
+ import { writeFileSync, mkdirSync, readFileSync } from "node:fs";
5
+ import { join, resolve, dirname } from "node:path";
6
+ import { fileURLToPath, pathToFileURL } from "node:url";
7
+ import { ensureSecrets, loadEnvFile } from './ensure-secrets.js';
8
+ import { applyExternalMigrations } from './external-migrations-step.js';
9
+ import { trackCommand } from '../telemetry/trackCommand.js';
10
+ import { buildAndSendEvent } from '../telemetry/client.js';
11
+ import { getCdkTelemetryEnv } from './cdk-telemetry-env.js';
12
+ /**
13
+ * Import the backend definition to populate the Scope BB registry.
14
+ *
15
+ * All BB variants set bbName/bbVersion on construction, so importing the
16
+ * backend is sufficient to register every block. `buildAndSendEvent` then
17
+ * reads the registry internally — callers don't need to pass block data.
18
+ * Failures are silently swallowed — telemetry is best-effort.
19
+ */
20
+ async function importBackendForRegistry(backendPath) {
21
+ try {
22
+ await import(pathToFileURL(resolve(backendPath)).href);
23
+ }
24
+ catch {
25
+ // best-effort — telemetry never affects the command
26
+ }
27
+ }
28
+ export async function startSandbox(options) {
29
+ const { backendPath, outDir = ".blocks-sandbox", clientPort = 3000, deployOnly = false, devCommand } = options;
30
+ const sandboxStartTime = Date.now();
31
+ // Load .env.local so CDK can read secret ARNs and other config.
32
+ try {
33
+ loadEnvFile('.env.local');
34
+ }
35
+ catch (e) {
36
+ if (e.code !== 'ENOENT')
37
+ throw e;
38
+ }
39
+ process.env.BLOCKS_STAGE = 'sandbox';
40
+ // Provision connection string to SSM SecureString.
41
+ // On first deploy, creates the parameter. On subsequent deploys, updates if changed.
42
+ const secrets = await ensureSecrets('sandbox');
43
+ if (secrets.created.length > 0) {
44
+ console.log(`🔐 Created secrets: ${secrets.created.join(', ')}`);
45
+ }
46
+ if (secrets.updated.length > 0) {
47
+ console.log(`🔐 Updated secrets: ${secrets.updated.join(', ')}`);
48
+ }
49
+ // Apply external-database migrations to the sandbox database before
50
+ // deploying. No-op unless this app uses an external DB and has ./migrations.
51
+ await applyExternalMigrations({ stage: 'sandbox' });
52
+ // Import backend to populate Scope BB registry (for telemetry).
53
+ // Runs before CDK deploy so both success and failure paths include block info.
54
+ await importBackendForRegistry(backendPath);
55
+ console.log("🚀 Deploying to AWS...");
56
+ console.log(" (This may take a few minutes on first deploy)");
57
+ try {
58
+ execFileSync("npm", [
59
+ "exec", "cdk", "--", "deploy",
60
+ "--require-approval", "never",
61
+ "--outputs-file", `${outDir}/outputs.json`,
62
+ "--context", `projectRoot=${process.cwd()}`,
63
+ "--context", "sandboxMode=true",
64
+ "--app", `npm exec tsx -- -C cdk ${backendPath}`,
65
+ ], {
66
+ stdio: "inherit",
67
+ env: { ...process.env, NODE_OPTIONS: "--conditions=cdk", ...getCdkTelemetryEnv('sandbox') },
68
+ });
69
+ }
70
+ catch (error) {
71
+ buildAndSendEvent({
72
+ command: 'sandbox',
73
+ state: 'FAIL',
74
+ duration: Date.now() - sandboxStartTime,
75
+ error: { code: 'CDK_DEPLOY_FAILED', phase: 'deploy' },
76
+ });
77
+ console.error("\n❌ Deployment failed.");
78
+ throw error;
79
+ }
80
+ const outputs = JSON.parse(readFileSync(`${outDir}/outputs.json`, "utf-8"));
81
+ const stackOutputs = Object.values(outputs)[0] || {};
82
+ const apiUrl = stackOutputs.ApiUrl;
83
+ if (!apiUrl) {
84
+ throw new Error("Could not find API URL in CDK outputs");
85
+ }
86
+ console.log("\n✅ Sandbox deployed!");
87
+ console.log(`📡 API URL: ${apiUrl}`);
88
+ buildAndSendEvent({
89
+ command: 'sandbox',
90
+ state: 'SUCCESS',
91
+ duration: Date.now() - sandboxStartTime,
92
+ });
93
+ // Write config — just apiUrl. Client middleware gets service-specific
94
+ // config from transferables in API responses, not from static config.
95
+ const config = { apiUrl, environment: 'sandbox' };
96
+ mkdirSync(outDir, { recursive: true });
97
+ writeFileSync(`${outDir}/config.json`, JSON.stringify(config, null, 2));
98
+ // Generate client code targeting AWS (aws-runtime condition ensures
99
+ // the backend registers aws-middleware, not mock-middleware).
100
+ const backendDefPath = resolve(join(dirname(resolve(backendPath)), 'index.ts'));
101
+ const clientPath = join(dirname(backendDefPath), 'client.js');
102
+ console.log('📝 Generating client code...');
103
+ const __dirname = dirname(fileURLToPath(import.meta.url));
104
+ const workerPath = join(__dirname, 'generate-client-worker.js');
105
+ execFileSync('node', ['--conditions=aws-runtime', '--import', 'tsx', workerPath, backendDefPath, clientPath], {
106
+ stdio: 'inherit',
107
+ env: { ...process.env, NODE_OPTIONS: '' },
108
+ });
109
+ if (deployOnly) {
110
+ return apiUrl;
111
+ }
112
+ console.log("\n👀 Starting CDK watch mode...");
113
+ console.log("🌐 Starting local dev server (proxying to AWS)...");
114
+ console.log(`\n Open http://localhost:${clientPort}\n`);
115
+ const cdkWatch = spawn("npx", [
116
+ "cdk", "watch", "--hotswap",
117
+ `--outputs-file`, `${outDir}/outputs.json`,
118
+ `--context`, `projectRoot=${process.cwd()}`,
119
+ `--context`, `sandboxMode=true`,
120
+ `--app`, `npm exec tsx -- -C cdk ${backendPath}`
121
+ ], {
122
+ stdio: ["ignore", "pipe", "pipe"],
123
+ env: { ...process.env, NODE_OPTIONS: "--conditions=cdk", ...getCdkTelemetryEnv('sandbox') },
124
+ });
125
+ cdkWatch.stdout?.on("data", (data) => {
126
+ const str = data.toString().trim();
127
+ if (!str.match(/\[(START|END|REPORT|INIT_START)\s+RequestId:/)) {
128
+ console.log(`[CDK Watch] ${str}`);
129
+ }
130
+ });
131
+ cdkWatch.stderr?.on("data", (data) => {
132
+ console.error(`[CDK Watch] ${data.toString().trim()}`);
133
+ });
134
+ const devServerCmd = devCommand || `npx tsx watch aws-blocks/scripts/server.ts`;
135
+ const [cmd, ...args] = devServerCmd.split(' ');
136
+ const devServer = spawn(cmd, args, {
137
+ stdio: "inherit",
138
+ shell: true,
139
+ env: {
140
+ ...process.env,
141
+ NODE_OPTIONS: '',
142
+ BLOCKS_API_URL: apiUrl,
143
+ },
144
+ });
145
+ const cleanup = () => {
146
+ console.log("\n\n🛑 Stopping local processes...");
147
+ console.log(" (AWS resources are still running)");
148
+ console.log("\n To destroy AWS resources, run: npm run sandbox:destroy\n");
149
+ cdkWatch.kill();
150
+ devServer.kill();
151
+ process.exit(0);
152
+ };
153
+ process.on("SIGINT", cleanup);
154
+ process.on("SIGTERM", cleanup);
155
+ await new Promise(() => { });
156
+ }
157
+ export async function destroySandbox(backendPath) {
158
+ return trackCommand('sandbox:destroy', async () => {
159
+ console.log("🗑️ Destroying sandbox...");
160
+ // Load .env.local so CDK synth can read project refs and other config.
161
+ try {
162
+ loadEnvFile('.env.local');
163
+ }
164
+ catch (e) {
165
+ if (e.code !== 'ENOENT')
166
+ throw e;
167
+ }
168
+ const cdkArgs = [
169
+ "exec", "cdk", "--", "destroy",
170
+ "--force",
171
+ "--context", "sandboxMode=true",
172
+ "--app", `npm exec tsx -- -C cdk ${backendPath}`,
173
+ ];
174
+ const cdkEnv = { ...process.env, NODE_OPTIONS: "--conditions=cdk", ...getCdkTelemetryEnv('sandbox') };
175
+ // Retry with backoff for VPC-dependent resources (e.g. Aurora clusters).
176
+ // CloudFormation deletes the cluster first, but its ENIs take 60-120s to
177
+ // detach from the VPC subnets asynchronously. The initial destroy fails
178
+ // because the subnets still have attached ENIs; retrying after the cleanup
179
+ // window lets the VPC delete succeed.
180
+ const retryDelays = [60_000, 120_000]; // 1min, then 2min
181
+ for (let attempt = 0;; attempt++) {
182
+ try {
183
+ execFileSync("npm", cdkArgs, { stdio: "inherit", env: cdkEnv });
184
+ console.log(attempt === 0 ? "\n✅ Sandbox destroyed!" : "\n✅ Sandbox destroyed on retry!");
185
+ return;
186
+ }
187
+ catch (error) {
188
+ if (attempt < retryDelays.length) {
189
+ const delaySec = retryDelays[attempt] / 1000;
190
+ console.log(`\n⏳ Stack deletion failed. Retrying in ${delaySec}s (waiting for resource cleanup)...`);
191
+ await new Promise(r => setTimeout(r, retryDelays[attempt]));
192
+ }
193
+ else {
194
+ console.error("\n❌ Destroy failed after retries.");
195
+ throw error;
196
+ }
197
+ }
198
+ }
199
+ });
200
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=telemetry-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-cli.d.ts","sourceRoot":"","sources":["../../src/scripts/telemetry-cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import { telemetry } from './telemetry.js';
5
+ telemetry().catch((error) => {
6
+ console.error(error);
7
+ process.exit(1);
8
+ });
@@ -0,0 +1,17 @@
1
+ export interface TelemetryOptions {
2
+ argv?: string[];
3
+ }
4
+ /**
5
+ * Manage Blocks telemetry consent settings.
6
+ *
7
+ * Parses CLI flags from `process.argv` (or custom argv) and performs the
8
+ * requested action:
9
+ *
10
+ * - `--enable` / `--disable` — toggle telemetry (project-level by default, `--global` for global)
11
+ * - `--status` — display current telemetry status and mechanism values
12
+ * - bare invocation (no flags) — prints help/usage text
13
+ *
14
+ * @param options.argv - Custom argv array (defaults to process.argv)
15
+ */
16
+ export declare function telemetry(options?: TelemetryOptions): Promise<void>;
17
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/scripts/telemetry.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAsID;;;;;;;;;;;GAWG;AACH,wBAAsB,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBzE"}
@@ -0,0 +1,150 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { getTelemetryStatus, getGlobalConfigPath, getProjectConfigPath } from '../telemetry/consent.js';
4
+ import { writeConfigTelemetry } from '../telemetry/config-writer.js';
5
+ function printUsage() {
6
+ console.log(`Usage: npx blocks-telemetry [options]
7
+
8
+ Options:
9
+ --enable Enable telemetry collection
10
+ --disable Disable telemetry collection
11
+ --status Show current telemetry status
12
+ --global Apply globally (~/.blocks/config.json)
13
+ Without this flag, applies to current project (.blocks/config.json)
14
+ --help, -h Show this help message
15
+
16
+ Examples:
17
+ npx blocks-telemetry --status # Show current status
18
+ npx blocks-telemetry --enable # Enable for current project
19
+ npx blocks-telemetry --disable # Disable for current project
20
+ npx blocks-telemetry --enable --global # Enable globally
21
+ npx blocks-telemetry --disable --global # Disable globally
22
+
23
+ Environment:
24
+ AWS_BLOCKS_DISABLE_TELEMETRY=1 Disables telemetry (overrides config files)
25
+ `);
26
+ }
27
+ const KNOWN_FLAGS = ['--enable', '--disable', '--status', '--global', '--help', '-h'];
28
+ function parseFlags(argv) {
29
+ const args = argv.slice(2);
30
+ const unknownFlags = args.filter(a => a.startsWith('-') && !KNOWN_FLAGS.includes(a));
31
+ if (unknownFlags.length > 0) {
32
+ console.warn(`Unknown option(s): ${unknownFlags.join(', ')}. These will be ignored. Run 'npx blocks-telemetry --help' to see available options.`);
33
+ }
34
+ const help = args.includes('--help') || args.includes('-h');
35
+ const enable = args.includes('--enable');
36
+ const disable = args.includes('--disable');
37
+ const statusFlag = args.includes('--status');
38
+ const global = args.includes('--global');
39
+ if (enable && disable) {
40
+ console.error('Error: --enable and --disable are mutually exclusive.');
41
+ console.error('Run with --help for usage information.');
42
+ process.exit(1);
43
+ }
44
+ let action = 'help';
45
+ if (statusFlag)
46
+ action = 'status';
47
+ if (enable)
48
+ action = 'enable';
49
+ if (disable)
50
+ action = 'disable';
51
+ if (help)
52
+ action = 'help';
53
+ return { action, global };
54
+ }
55
+ function handleEnable(global) {
56
+ const configPath = global ? getGlobalConfigPath() : getProjectConfigPath();
57
+ try {
58
+ writeConfigTelemetry(configPath, true);
59
+ }
60
+ catch (error) {
61
+ const message = error instanceof Error ? error.message : String(error);
62
+ console.error(`❌ Failed to write config: ${message}`);
63
+ process.exit(1);
64
+ }
65
+ if (global) {
66
+ console.log('✅ Telemetry enabled globally.');
67
+ console.log(` Config: ${configPath}`);
68
+ }
69
+ else {
70
+ console.log('✅ Telemetry enabled for this project.');
71
+ console.log(` Config: ${configPath}`);
72
+ }
73
+ }
74
+ function handleDisable(global) {
75
+ const configPath = global ? getGlobalConfigPath() : getProjectConfigPath();
76
+ try {
77
+ writeConfigTelemetry(configPath, false);
78
+ }
79
+ catch (error) {
80
+ const message = error instanceof Error ? error.message : String(error);
81
+ console.error(`❌ Failed to write config: ${message}`);
82
+ process.exit(1);
83
+ }
84
+ if (global) {
85
+ console.log('✅ Telemetry disabled globally.');
86
+ console.log(` Config: ${configPath}`);
87
+ }
88
+ else {
89
+ console.log('✅ Telemetry disabled for this project.');
90
+ console.log(` Config: ${configPath}`);
91
+ }
92
+ }
93
+ function handleStatus() {
94
+ const status = getTelemetryStatus();
95
+ console.log('');
96
+ console.log(` Telemetry: ${status.enabled ? '✅ Enabled' : '❌ Disabled'}`);
97
+ console.log('');
98
+ const globalConfigPath = getGlobalConfigPath();
99
+ const projectConfigPath = getProjectConfigPath();
100
+ console.log(' Mechanisms:');
101
+ if (status.envVar !== undefined) {
102
+ console.log(` AWS_BLOCKS_DISABLE_TELEMETRY = "${status.envVar}"`);
103
+ }
104
+ else {
105
+ console.log(` AWS_BLOCKS_DISABLE_TELEMETRY = (not set)`);
106
+ }
107
+ if (status.projectConfig !== undefined) {
108
+ console.log(` Project config (${projectConfigPath}): telemetry.enabled = ${status.projectConfig}`);
109
+ }
110
+ else {
111
+ console.log(` Project config (${projectConfigPath}): (not configured)`);
112
+ }
113
+ if (status.globalConfig !== undefined) {
114
+ console.log(` Global config (${globalConfigPath}): telemetry.enabled = ${status.globalConfig}`);
115
+ }
116
+ else {
117
+ console.log(` Global config (${globalConfigPath}): (not configured)`);
118
+ }
119
+ console.log('');
120
+ }
121
+ /**
122
+ * Manage Blocks telemetry consent settings.
123
+ *
124
+ * Parses CLI flags from `process.argv` (or custom argv) and performs the
125
+ * requested action:
126
+ *
127
+ * - `--enable` / `--disable` — toggle telemetry (project-level by default, `--global` for global)
128
+ * - `--status` — display current telemetry status and mechanism values
129
+ * - bare invocation (no flags) — prints help/usage text
130
+ *
131
+ * @param options.argv - Custom argv array (defaults to process.argv)
132
+ */
133
+ export async function telemetry(options) {
134
+ const argv = options?.argv ?? process.argv;
135
+ const flags = parseFlags(argv);
136
+ switch (flags.action) {
137
+ case 'enable':
138
+ handleEnable(flags.global);
139
+ break;
140
+ case 'disable':
141
+ handleDisable(flags.global);
142
+ break;
143
+ case 'status':
144
+ handleStatus();
145
+ break;
146
+ case 'help':
147
+ printUsage();
148
+ break;
149
+ }
150
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=telemetry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.test.d.ts","sourceRoot":"","sources":["../../src/scripts/telemetry.test.ts"],"names":[],"mappings":""}