@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,196 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { describe, it, beforeEach, afterEach } from 'node:test';
5
+ import assert from 'node:assert';
6
+ import { mkdirSync, writeFileSync, readFileSync, rmSync, existsSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { tmpdir } from 'node:os';
9
+
10
+ import { getTelemetryStatus, getGlobalConfigPath, getProjectConfigPath } from './consent.js';
11
+ import { writeConfigTelemetry } from './config-writer.js';
12
+
13
+ describe('getTelemetryStatus', () => {
14
+ const originalEnv = { ...process.env };
15
+ const originalCwd = process.cwd();
16
+
17
+ afterEach(() => {
18
+ process.env = { ...originalEnv };
19
+ process.chdir(originalCwd);
20
+ });
21
+
22
+ function clearCIVars(): void {
23
+ delete process.env.CI;
24
+ delete process.env.CONTINUOUS_INTEGRATION;
25
+ delete process.env.BUILD_NUMBER;
26
+ delete process.env.CODEBUILD_BUILD_ID;
27
+ delete process.env.GITHUB_ACTIONS;
28
+ delete process.env.GITLAB_CI;
29
+ delete process.env.CIRCLECI;
30
+ delete process.env.JENKINS_URL;
31
+ delete process.env.TF_BUILD;
32
+ delete process.env.BITBUCKET_BUILD_NUMBER;
33
+ delete process.env.BUILDKITE;
34
+ }
35
+
36
+ it('returns enabled=true when no config exists and not in CI', () => {
37
+ delete process.env.AWS_BLOCKS_DISABLE_TELEMETRY;
38
+ clearCIVars();
39
+ const tmp = join(tmpdir(), `blocks-status-test-${Date.now()}`);
40
+ mkdirSync(tmp, { recursive: true });
41
+ process.chdir(tmp);
42
+
43
+ const status = getTelemetryStatus();
44
+ assert.strictEqual(status.enabled, true);
45
+ rmSync(tmp, { recursive: true, force: true });
46
+ });
47
+
48
+ it('returns enabled=false when AWS_BLOCKS_DISABLE_TELEMETRY=1', () => {
49
+ process.env.AWS_BLOCKS_DISABLE_TELEMETRY = '1';
50
+ const tmp = join(tmpdir(), `blocks-status-test-${Date.now()}`);
51
+ mkdirSync(tmp, { recursive: true });
52
+ process.chdir(tmp);
53
+
54
+ const status = getTelemetryStatus();
55
+ assert.strictEqual(status.enabled, false);
56
+ assert.strictEqual(status.envVar, '1');
57
+ rmSync(tmp, { recursive: true, force: true });
58
+ });
59
+
60
+ it('returns enabled=false when project config disables', () => {
61
+ delete process.env.AWS_BLOCKS_DISABLE_TELEMETRY;
62
+ clearCIVars();
63
+ const tmp = join(tmpdir(), `blocks-status-test-${Date.now()}`);
64
+ mkdirSync(join(tmp, '.blocks'), { recursive: true });
65
+ writeFileSync(join(tmp, '.blocks', 'config.json'), JSON.stringify({ telemetry: { enabled: false } }));
66
+ process.chdir(tmp);
67
+
68
+ const status = getTelemetryStatus();
69
+ assert.strictEqual(status.enabled, false);
70
+ assert.strictEqual(status.projectConfig, false);
71
+ rmSync(tmp, { recursive: true, force: true });
72
+ });
73
+
74
+ it('any disable wins — global disabled even if project enables', () => {
75
+ delete process.env.AWS_BLOCKS_DISABLE_TELEMETRY;
76
+ clearCIVars();
77
+ const tmp = join(tmpdir(), `blocks-status-test-${Date.now()}`);
78
+ mkdirSync(join(tmp, '.blocks'), { recursive: true });
79
+ writeFileSync(join(tmp, '.blocks', 'config.json'), JSON.stringify({ telemetry: { enabled: true } }));
80
+ process.chdir(tmp);
81
+
82
+ // Simulate global config disabling (via projectRoot override for global path won't work here,
83
+ // but we can test that project enabled=true alone is fine)
84
+ const status = getTelemetryStatus();
85
+ assert.strictEqual(status.enabled, true);
86
+ rmSync(tmp, { recursive: true, force: true });
87
+ });
88
+
89
+ it('env var disables even when project config enables', () => {
90
+ process.env.AWS_BLOCKS_DISABLE_TELEMETRY = '1';
91
+ const tmp = join(tmpdir(), `blocks-status-test-${Date.now()}`);
92
+ mkdirSync(join(tmp, '.blocks'), { recursive: true });
93
+ writeFileSync(join(tmp, '.blocks', 'config.json'), JSON.stringify({ telemetry: { enabled: true } }));
94
+ process.chdir(tmp);
95
+
96
+ const status = getTelemetryStatus();
97
+ assert.strictEqual(status.enabled, false);
98
+ rmSync(tmp, { recursive: true, force: true });
99
+ });
100
+
101
+ it('returns enabled=true in CI environment (CI does not suppress telemetry)', () => {
102
+ delete process.env.AWS_BLOCKS_DISABLE_TELEMETRY;
103
+ process.env.CI = 'true';
104
+ const tmp = join(tmpdir(), `blocks-status-test-${Date.now()}`);
105
+ mkdirSync(tmp, { recursive: true });
106
+ process.chdir(tmp);
107
+
108
+ const status = getTelemetryStatus();
109
+ assert.strictEqual(status.enabled, true);
110
+ rmSync(tmp, { recursive: true, force: true });
111
+ });
112
+ });
113
+
114
+ describe('writeConfigTelemetry', () => {
115
+ let tmpDir: string;
116
+
117
+ beforeEach(() => {
118
+ tmpDir = join(tmpdir(), `blocks-writer-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
119
+ mkdirSync(tmpDir, { recursive: true });
120
+ });
121
+
122
+ afterEach(() => {
123
+ rmSync(tmpDir, { recursive: true, force: true });
124
+ });
125
+
126
+ it('creates a new config file with telemetry.enabled', () => {
127
+ const configPath = join(tmpDir, '.blocks', 'config.json');
128
+ writeConfigTelemetry(configPath, true);
129
+
130
+ assert.ok(existsSync(configPath));
131
+ const content = JSON.parse(readFileSync(configPath, 'utf-8'));
132
+ assert.strictEqual(content.telemetry.enabled, true);
133
+ });
134
+
135
+ it('writes telemetry.enabled=false', () => {
136
+ const configPath = join(tmpDir, '.blocks', 'config.json');
137
+ writeConfigTelemetry(configPath, false);
138
+
139
+ const content = JSON.parse(readFileSync(configPath, 'utf-8'));
140
+ assert.strictEqual(content.telemetry.enabled, false);
141
+ });
142
+
143
+ it('preserves existing keys when writing', () => {
144
+ const configPath = join(tmpDir, 'config.json');
145
+ writeFileSync(configPath, JSON.stringify({ telemetry: { projectId: 'abc-123' }, other: 'data' }, null, 2));
146
+
147
+ writeConfigTelemetry(configPath, false);
148
+
149
+ const content = JSON.parse(readFileSync(configPath, 'utf-8'));
150
+ assert.strictEqual(content.telemetry.enabled, false);
151
+ assert.strictEqual(content.telemetry.projectId, 'abc-123');
152
+ assert.strictEqual(content.other, 'data');
153
+ });
154
+
155
+ it('creates parent directories if they do not exist', () => {
156
+ const configPath = join(tmpDir, 'deep', 'nested', 'config.json');
157
+ writeConfigTelemetry(configPath, true);
158
+
159
+ assert.ok(existsSync(configPath));
160
+ const content = JSON.parse(readFileSync(configPath, 'utf-8'));
161
+ assert.strictEqual(content.telemetry.enabled, true);
162
+ });
163
+
164
+ it('overwrites telemetry.enabled without affecting other telemetry keys', () => {
165
+ const configPath = join(tmpDir, 'config.json');
166
+ writeFileSync(configPath, JSON.stringify({ telemetry: { enabled: true, projectId: 'xyz' } }));
167
+
168
+ writeConfigTelemetry(configPath, false);
169
+
170
+ const content = JSON.parse(readFileSync(configPath, 'utf-8'));
171
+ assert.strictEqual(content.telemetry.enabled, false);
172
+ assert.strictEqual(content.telemetry.projectId, 'xyz');
173
+ });
174
+ });
175
+
176
+ describe('getProjectConfigPath', () => {
177
+ it('uses cwd by default', () => {
178
+ const result = getProjectConfigPath();
179
+ assert.ok(result.endsWith('.blocks/config.json'));
180
+ assert.ok(result.startsWith(process.cwd()));
181
+ });
182
+
183
+ it('accepts a custom project root', () => {
184
+ const custom = '/some/custom/path';
185
+ const result = getProjectConfigPath(custom);
186
+ assert.ok(result.startsWith(custom));
187
+ assert.ok(result.endsWith('.blocks/config.json'));
188
+ });
189
+ });
190
+
191
+ describe('getGlobalConfigPath', () => {
192
+ it('uses homedir', () => {
193
+ const result = getGlobalConfigPath();
194
+ assert.ok(result.endsWith('.blocks/config.json'));
195
+ });
196
+ });
@@ -0,0 +1,154 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+
5
+ const ENV_VAR = 'AWS_BLOCKS_DISABLE_TELEMETRY';
6
+
7
+ interface BlocksConfig {
8
+ telemetry?: { enabled?: boolean };
9
+ [key: string]: unknown;
10
+ }
11
+
12
+ /**
13
+ * Read and parse a Blocks config file, returning null if it doesn't exist or is invalid.
14
+ */
15
+ export function readConfigFile(configPath: string): BlocksConfig | null {
16
+ try {
17
+ const content = readFileSync(configPath, 'utf-8');
18
+ return JSON.parse(content) as BlocksConfig;
19
+ } catch {
20
+ return null;
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Get the path to the global Blocks config file (~/.blocks/config.json).
26
+ */
27
+ export function getGlobalConfigPath(): string {
28
+ return join(homedir(), '.blocks', 'config.json');
29
+ }
30
+
31
+ /**
32
+ * Get the path to the project-level Blocks config file (.blocks/config.json).
33
+ *
34
+ * @param projectRoot - Optional project root directory (defaults to process.cwd())
35
+ */
36
+ export function getProjectConfigPath(projectRoot?: string): string {
37
+ return join(projectRoot ?? process.cwd(), '.blocks', 'config.json');
38
+ }
39
+
40
+ /**
41
+ * Result of a detailed telemetry status check.
42
+ */
43
+ export interface TelemetryStatus {
44
+ /** Whether telemetry is currently enabled (final resolved value). */
45
+ enabled: boolean;
46
+ /** Value of AWS_BLOCKS_DISABLE_TELEMETRY env var if set. */
47
+ envVar?: string;
48
+ /** Value from global config if present. */
49
+ globalConfig?: boolean;
50
+ /** Value from project config if present. */
51
+ projectConfig?: boolean;
52
+ }
53
+
54
+ /**
55
+ * Get detailed telemetry status showing all mechanism values and the final result.
56
+ *
57
+ * Telemetry is enabled by default. If any mechanism disables it, telemetry is off:
58
+ * - `AWS_BLOCKS_DISABLE_TELEMETRY=1` env var
59
+ * - `.blocks/config.json` → `telemetry.enabled: false` (per-project)
60
+ * - `~/.blocks/config.json` → `telemetry.enabled: false` (global)
61
+ *
62
+ * @param projectRoot - Optional project root directory (defaults to process.cwd())
63
+ */
64
+ export function getTelemetryStatus(projectRoot?: string): TelemetryStatus {
65
+ const envValue = process.env[ENV_VAR];
66
+ const globalConfig = readConfigFile(getGlobalConfigPath());
67
+ const projectConfig = readConfigFile(getProjectConfigPath(projectRoot));
68
+
69
+ const globalEnabled = globalConfig?.telemetry?.enabled;
70
+ const projectEnabled = projectConfig?.telemetry?.enabled;
71
+
72
+ const status: TelemetryStatus = {
73
+ enabled: true,
74
+ };
75
+
76
+ if (envValue !== undefined && envValue !== '') {
77
+ status.envVar = envValue;
78
+ }
79
+ if (typeof globalEnabled === 'boolean') {
80
+ status.globalConfig = globalEnabled;
81
+ }
82
+ if (typeof projectEnabled === 'boolean') {
83
+ status.projectConfig = projectEnabled;
84
+ }
85
+
86
+ if (envValue === '1') {
87
+ status.enabled = false;
88
+ return status;
89
+ }
90
+
91
+ if (status.projectConfig === false) {
92
+ status.enabled = false;
93
+ return status;
94
+ }
95
+
96
+ if (status.globalConfig === false) {
97
+ status.enabled = false;
98
+ return status;
99
+ }
100
+
101
+ return status;
102
+ }
103
+
104
+ /**
105
+ * Determine whether telemetry collection is enabled.
106
+ *
107
+ * Disable mechanisms (any one disables telemetry):
108
+ * - `AWS_BLOCKS_DISABLE_TELEMETRY=1` env var
109
+ * - `.blocks/config.json` → `telemetry.enabled: false` (per-project)
110
+ * - `~/.blocks/config.json` → `telemetry.enabled: false` (global)
111
+ *
112
+ * Default: enabled (if no disable mechanism is active)
113
+ *
114
+ * Note: CI environments do NOT suppress telemetry. CI detection is used
115
+ * only as metadata in the telemetry payload (environment.ci field).
116
+ */
117
+ export function isTelemetryEnabled(): boolean {
118
+ if (process.env[ENV_VAR] === '1') {
119
+ return false;
120
+ }
121
+
122
+ // Per-project config
123
+ try {
124
+ const projectConfigPath = join(process.cwd(), '.blocks', 'config.json');
125
+ const content = readFileSync(projectConfigPath, 'utf-8');
126
+ const config: BlocksConfig = JSON.parse(content);
127
+ if (config.telemetry?.enabled === false) {
128
+ return false;
129
+ }
130
+ if (config.telemetry?.enabled === true) {
131
+ return true;
132
+ }
133
+ } catch {
134
+ // No project config or invalid JSON
135
+ }
136
+
137
+ // Global config
138
+ try {
139
+ const globalConfigPath = join(homedir(), '.blocks', 'config.json');
140
+ const content = readFileSync(globalConfigPath, 'utf-8');
141
+ const config: BlocksConfig = JSON.parse(content);
142
+ if (config.telemetry?.enabled === false) {
143
+ return false;
144
+ }
145
+ if (config.telemetry?.enabled === true) {
146
+ return true;
147
+ }
148
+ } catch {
149
+ // No global config or invalid JSON
150
+ }
151
+
152
+ // Default: enabled
153
+ return true;
154
+ }
@@ -0,0 +1,100 @@
1
+ import { platform } from 'node:os';
2
+
3
+ /**
4
+ * Detect the OS platform.
5
+ */
6
+ export function detectOS(): 'linux' | 'darwin' | 'win32' {
7
+ return platform() as 'linux' | 'darwin' | 'win32';
8
+ }
9
+
10
+ /**
11
+ * Detect the Node.js version string (without the leading 'v').
12
+ */
13
+ export function detectNodeVersion(): string {
14
+ return process.versions.node;
15
+ }
16
+
17
+ /**
18
+ * Detect whether the current process is running inside a CI/CD environment.
19
+ */
20
+ export function isCI(): boolean {
21
+ return !!(
22
+ process.env.CI ||
23
+ process.env.CONTINUOUS_INTEGRATION ||
24
+ process.env.BUILD_NUMBER ||
25
+ process.env.CODEBUILD_BUILD_ID ||
26
+ process.env.GITHUB_ACTIONS ||
27
+ process.env.GITLAB_CI ||
28
+ process.env.CIRCLECI ||
29
+ process.env.JENKINS_URL ||
30
+ process.env.TF_BUILD ||
31
+ process.env.BITBUCKET_BUILD_NUMBER ||
32
+ process.env.BUILDKITE
33
+ );
34
+ }
35
+
36
+ /**
37
+ * Detect the package manager from npm_config_user_agent.
38
+ * Returns the raw user agent string (e.g., "npm/10.2.0 node/v22.0.0").
39
+ */
40
+ export function detectPackageManager(): string | undefined {
41
+ return process.env.npm_config_user_agent || undefined;
42
+ }
43
+
44
+ /**
45
+ * Detect if the current execution is driven by an AI agent.
46
+ * Uses the "am-i-vibing" pattern and checks known environment variables.
47
+ */
48
+ export function detectAgent(): string | undefined {
49
+ if (process.env.CLAUDECODE) return 'claude-code';
50
+ if (process.env.CURSOR_TRACE_ID) return 'cursor';
51
+ if (process.env.CODEX_CLI_VERSION || process.env.CODEX_SESSION_ID) return 'codex';
52
+ if (process.env.CLINE_TASK_ID || process.env.CLINE_SESSION_ID) return 'cline';
53
+ if (process.env.CODEIUM_EDITOR_APP_ROOT || process.env.WINDSURF_SESSION_ID) return 'windsurf';
54
+ if (process.env.GEMINI_CLI) return 'gemini-cli';
55
+ if (process.env.REPL_ID && process.env.REPL_OWNER) return 'replit-agent';
56
+ if (process.env.AIDER_MODEL || process.env.AIDER_SESSION) return 'aider';
57
+ if (process.env.CONTINUE_GLOBAL_DIR) return 'continue';
58
+ if (process.env.ROOCODE_SESSION_ID || process.env.ROO_SESSION_ID) return 'roo-code';
59
+
60
+ const awsExecEnv = process.env.AWS_EXECUTION_ENV || '';
61
+ if (awsExecEnv.toLowerCase().includes('amazonq')) return 'amazon-q';
62
+ if (awsExecEnv.toLowerCase().includes('kiro')) return 'kiro';
63
+
64
+ return undefined;
65
+ }
66
+
67
+ /**
68
+ * Collect all environment information needed for a telemetry event.
69
+ */
70
+ export function collectEnvironment(): {
71
+ os: 'linux' | 'darwin' | 'win32';
72
+ nodeVersion: string;
73
+ ci: boolean;
74
+ packageManager?: string;
75
+ agent?: string;
76
+ } {
77
+ const env: {
78
+ os: 'linux' | 'darwin' | 'win32';
79
+ nodeVersion: string;
80
+ ci: boolean;
81
+ packageManager?: string;
82
+ agent?: string;
83
+ } = {
84
+ os: detectOS(),
85
+ nodeVersion: detectNodeVersion(),
86
+ ci: isCI(),
87
+ };
88
+
89
+ const packageManager = detectPackageManager();
90
+ if (packageManager) {
91
+ env.packageManager = packageManager;
92
+ }
93
+
94
+ const agent = detectAgent();
95
+ if (agent) {
96
+ env.agent = agent;
97
+ }
98
+
99
+ return env;
100
+ }
@@ -0,0 +1,94 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
2
+ import { join, dirname } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ import { randomUUID } from 'node:crypto';
5
+
6
+ const FIRST_RUN_NOTICE = `
7
+ AWS Blocks collects anonymous usage data to improve the product.
8
+ No customer content or PII is collected.
9
+ To disable: npx blocks-telemetry --disable (or export AWS_BLOCKS_DISABLE_TELEMETRY=1)
10
+ `;
11
+
12
+ interface BlocksConfig {
13
+ telemetry?: { enabled?: boolean; projectId?: string };
14
+ [key: string]: unknown;
15
+ }
16
+
17
+ /**
18
+ * Get or create a persistent installation ID.
19
+ * Stored at `~/.blocks/telemetry/installation-id`.
20
+ * Generated as UUID v4 on first use.
21
+ *
22
+ * On first creation, prints a one-time notice to stderr informing
23
+ * the user about telemetry collection.
24
+ */
25
+ export function getInstallationId(): string {
26
+ const filePath = join(homedir(), '.blocks', 'telemetry', 'installation-id');
27
+
28
+ try {
29
+ const existing = readFileSync(filePath, 'utf-8').trim();
30
+ if (existing) return existing;
31
+ } catch {
32
+ // File doesn't exist yet
33
+ }
34
+
35
+ const id = randomUUID();
36
+ try {
37
+ const dir = dirname(filePath);
38
+ if (!existsSync(dir)) {
39
+ mkdirSync(dir, { recursive: true });
40
+ }
41
+ writeFileSync(filePath, id, 'utf-8');
42
+ } catch {
43
+ // If we can't persist, still return the generated ID for this session
44
+ }
45
+ process.stderr.write(FIRST_RUN_NOTICE + '\n');
46
+ return id;
47
+ }
48
+
49
+ /**
50
+ * Get or create a persistent project ID.
51
+ * Stored in `.blocks/config.json` under `telemetry.projectId` in the project root (cwd).
52
+ * Generated as UUID v4 on first use.
53
+ */
54
+ export function getProjectId(): string {
55
+ const configPath = join(process.cwd(), '.blocks', 'config.json');
56
+
57
+ try {
58
+ const content = readFileSync(configPath, 'utf-8');
59
+ const config: BlocksConfig = JSON.parse(content);
60
+ if (config.telemetry?.projectId) return config.telemetry.projectId;
61
+ } catch {
62
+ // File doesn't exist or invalid JSON
63
+ }
64
+
65
+ const id = randomUUID();
66
+ try {
67
+ const dir = dirname(configPath);
68
+ if (!existsSync(dir)) {
69
+ mkdirSync(dir, { recursive: true });
70
+ }
71
+
72
+ // Preserve existing config if present
73
+ let config: BlocksConfig = {};
74
+ try {
75
+ const existing = readFileSync(configPath, 'utf-8');
76
+ config = JSON.parse(existing);
77
+ } catch {
78
+ // No existing config
79
+ }
80
+
81
+ config.telemetry = { ...config.telemetry, projectId: id };
82
+ writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
83
+ } catch {
84
+ // If we can't persist, still return the generated ID for this session
85
+ }
86
+ return id;
87
+ }
88
+
89
+ /**
90
+ * Generate a fresh UUID v4 event ID.
91
+ */
92
+ export function generateEventId(): string {
93
+ return randomUUID();
94
+ }
@@ -0,0 +1,11 @@
1
+ export { trackCommand, classifyError } from './trackCommand.js';
2
+ export { buildAndSendEvent, buildEvent } from './client.js';
3
+ export type { CommandName, CommandState, BuildAndSendEventOptions } from './types.js';
4
+ export {
5
+ isTelemetryEnabled,
6
+ getTelemetryStatus,
7
+ getGlobalConfigPath,
8
+ getProjectConfigPath,
9
+ type TelemetryStatus,
10
+ } from './consent.js';
11
+ export { writeConfigTelemetry } from './config-writer.js';