@storyshelf/core 0.6.1 → 0.7.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 (631) hide show
  1. package/README.md +49 -32
  2. package/dist/adapter/capture-queue.d.mts +44 -2
  3. package/dist/adapter/capture-runner.d.mts +127 -10
  4. package/dist/adapter/capture-runner.mjs +5 -12
  5. package/dist/adapter/database.d.mts +27 -8
  6. package/dist/adapter/database.mjs.map +1 -1
  7. package/dist/adapter/design.d.mts +85 -0
  8. package/dist/adapter/design.mjs +28 -0
  9. package/dist/adapter/design.mjs.map +1 -0
  10. package/dist/adapter/metadata.d.mts +3 -10
  11. package/dist/adapter/notifier.d.mts +6 -3
  12. package/dist/adapter/notifier.mjs +5 -1
  13. package/dist/adapter/oauth.d.mts +52 -0
  14. package/dist/adapter/setup.d.mts +4 -5
  15. package/dist/adapter/setup.mjs +2 -1
  16. package/dist/adapter/setup.mjs.map +1 -1
  17. package/dist/adapter/webhook-events.mjs +1 -1
  18. package/dist/adapters/capture-target-offers.d.mts +28 -0
  19. package/dist/adapters/capture-target-offers.mjs +58 -0
  20. package/dist/adapters/capture-target-offers.mjs.map +1 -0
  21. package/dist/adapters/capture-target.d.mts +71 -0
  22. package/dist/adapters/capture-target.mjs +76 -0
  23. package/dist/adapters/capture-target.mjs.map +1 -0
  24. package/dist/adapters/notifier/build-comment.d.mts +24 -0
  25. package/dist/adapters/notifier/build-comment.mjs +24 -0
  26. package/dist/adapters/notifier/build-comment.mjs.map +1 -0
  27. package/dist/adapters/notifier/build-state.d.mts +99 -0
  28. package/dist/adapters/notifier/build-state.mjs +218 -0
  29. package/dist/adapters/notifier/build-state.mjs.map +1 -0
  30. package/dist/adapters/notifier/events.d.mts +4 -2
  31. package/dist/adapters/notifier/events.mjs +31 -18
  32. package/dist/adapters/notifier/events.mjs.map +1 -1
  33. package/dist/adapters/notifier/provider.d.mts +53 -7
  34. package/dist/adapters/notifier/provider.mjs +12 -0
  35. package/dist/adapters/notifier/provider.mjs.map +1 -0
  36. package/dist/adapters/notifier/state.d.mts +24 -0
  37. package/dist/adapters/notifier/state.mjs +66 -0
  38. package/dist/adapters/notifier/state.mjs.map +1 -0
  39. package/dist/adapters/notifier/types.d.mts +51 -2
  40. package/dist/adapters/remote-browser.d.mts +87 -0
  41. package/dist/adapters/remote-browser.mjs +103 -0
  42. package/dist/adapters/remote-browser.mjs.map +1 -0
  43. package/dist/adapters/render-runs.d.mts +25 -0
  44. package/dist/adapters/render-runs.mjs +41 -0
  45. package/dist/adapters/render-runs.mjs.map +1 -0
  46. package/dist/adapters/setup-runner.mjs +2 -4
  47. package/dist/adapters/setup-runner.mjs.map +1 -1
  48. package/dist/adapters/sources.d.mts +12 -0
  49. package/dist/adapters/sources.mjs +20 -0
  50. package/dist/adapters/sources.mjs.map +1 -0
  51. package/dist/adapters/validate.mjs +25 -18
  52. package/dist/adapters/validate.mjs.map +1 -1
  53. package/dist/ai.d.mts +105 -0
  54. package/dist/ai.mjs +19 -0
  55. package/dist/ai.mjs.map +1 -0
  56. package/dist/auth.d.mts +8 -1
  57. package/dist/auth.mjs +14 -1
  58. package/dist/auth.mjs.map +1 -0
  59. package/dist/capture/a11y/axe-source.d.mts +18 -0
  60. package/dist/capture/a11y/axe-source.mjs +37 -0
  61. package/dist/capture/a11y/axe-source.mjs.map +1 -0
  62. package/dist/capture/a11y/in-page.d.mts +27 -0
  63. package/dist/capture/a11y/in-page.mjs +60 -0
  64. package/dist/capture/a11y/in-page.mjs.map +1 -0
  65. package/dist/capture/a11y/map.d.mts +24 -0
  66. package/dist/capture/a11y/map.mjs +48 -0
  67. package/dist/capture/a11y/map.mjs.map +1 -0
  68. package/dist/capture/a11y/options.d.mts +23 -0
  69. package/dist/capture/a11y/options.mjs +75 -0
  70. package/dist/capture/a11y/options.mjs.map +1 -0
  71. package/dist/capture/adapter.d.mts +41 -3
  72. package/dist/capture/adapter.mjs.map +1 -1
  73. package/dist/capture/affected.d.mts +2 -0
  74. package/dist/capture/affected.mjs +13 -4
  75. package/dist/capture/affected.mjs.map +1 -1
  76. package/dist/capture/attempt-logger.mjs +84 -0
  77. package/dist/capture/attempt-logger.mjs.map +1 -0
  78. package/dist/capture/browsers.d.mts +35 -0
  79. package/dist/capture/browsers.mjs +67 -0
  80. package/dist/capture/browsers.mjs.map +1 -0
  81. package/dist/capture/build-state/deliver.d.mts +32 -0
  82. package/dist/capture/build-state/deliver.mjs +118 -0
  83. package/dist/capture/build-state/deliver.mjs.map +1 -0
  84. package/dist/capture/build-state/index.d.mts +8 -0
  85. package/dist/capture/build-state/notify-job.d.mts +56 -0
  86. package/dist/capture/build-state/notify-job.mjs +133 -0
  87. package/dist/capture/build-state/notify-job.mjs.map +1 -0
  88. package/dist/capture/build-state/publisher.d.mts +23 -0
  89. package/dist/capture/build-state/publisher.mjs +107 -0
  90. package/dist/capture/build-state/publisher.mjs.map +1 -0
  91. package/dist/capture/build-state/resume.d.mts +9 -0
  92. package/dist/capture/build-state/resume.mjs +47 -0
  93. package/dist/capture/build-state/resume.mjs.map +1 -0
  94. package/dist/capture/build-state/types.d.mts +49 -0
  95. package/dist/capture/catalog/catalogue.d.mts +22 -0
  96. package/dist/capture/catalog/catalogue.mjs +53 -0
  97. package/dist/capture/catalog/catalogue.mjs.map +1 -0
  98. package/dist/capture/catalog/components.d.mts +23 -0
  99. package/dist/capture/catalog/components.mjs +55 -0
  100. package/dist/capture/catalog/components.mjs.map +1 -0
  101. package/dist/capture/catalog/history.d.mts +30 -0
  102. package/dist/capture/catalog/history.mjs +51 -0
  103. package/dist/capture/catalog/history.mjs.map +1 -0
  104. package/dist/capture/catalog/hook.d.mts +14 -0
  105. package/dist/capture/catalog/hook.mjs +19 -0
  106. package/dist/capture/catalog/hook.mjs.map +1 -0
  107. package/dist/capture/catalog/index.d.mts +11 -0
  108. package/dist/capture/catalog/load.d.mts +26 -0
  109. package/dist/capture/catalog/load.mjs +49 -0
  110. package/dist/capture/catalog/load.mjs.map +1 -0
  111. package/dist/capture/catalog/parse.d.mts +15 -0
  112. package/dist/capture/catalog/parse.mjs +56 -0
  113. package/dist/capture/catalog/parse.mjs.map +1 -0
  114. package/dist/capture/catalog/read.d.mts +12 -0
  115. package/dist/capture/catalog/read.mjs +33 -0
  116. package/dist/capture/catalog/read.mjs.map +1 -0
  117. package/dist/capture/catalog/types.d.mts +33 -0
  118. package/dist/capture/consumer/capture-handler.d.mts +58 -0
  119. package/dist/capture/consumer/capture-handler.mjs +118 -0
  120. package/dist/capture/consumer/capture-handler.mjs.map +1 -0
  121. package/dist/capture/consumer/idle.d.mts +17 -0
  122. package/dist/capture/consumer/idle.mjs +25 -0
  123. package/dist/capture/consumer/idle.mjs.map +1 -0
  124. package/dist/capture/consumer/index.d.mts +13 -0
  125. package/dist/capture/consumer/index.mjs +139 -0
  126. package/dist/capture/consumer/index.mjs.map +1 -0
  127. package/dist/capture/consumer/loop.mjs +110 -0
  128. package/dist/capture/consumer/loop.mjs.map +1 -0
  129. package/dist/capture/consumer/metrics.d.mts +41 -0
  130. package/dist/capture/consumer/metrics.mjs +38 -0
  131. package/dist/capture/consumer/metrics.mjs.map +1 -0
  132. package/dist/capture/consumer/retry.d.mts +33 -0
  133. package/dist/capture/consumer/retry.mjs +34 -0
  134. package/dist/capture/consumer/retry.mjs.map +1 -0
  135. package/dist/capture/consumer/run-job.mjs +195 -0
  136. package/dist/capture/consumer/run-job.mjs.map +1 -0
  137. package/dist/capture/consumer/startup.mjs +38 -0
  138. package/dist/capture/consumer/startup.mjs.map +1 -0
  139. package/dist/capture/consumer/types.d.mts +97 -0
  140. package/dist/capture/crash-failure.d.mts +25 -0
  141. package/dist/capture/crash-failure.mjs +70 -0
  142. package/dist/capture/crash-failure.mjs.map +1 -0
  143. package/dist/capture/db-queue/cadence.d.mts +32 -0
  144. package/dist/capture/db-queue/cadence.mjs +38 -0
  145. package/dist/capture/db-queue/cadence.mjs.map +1 -0
  146. package/dist/capture/db-queue/claim.d.mts +9 -0
  147. package/dist/capture/db-queue/claim.mjs +132 -0
  148. package/dist/capture/db-queue/claim.mjs.map +1 -0
  149. package/dist/capture/db-queue/clock.mjs +12 -0
  150. package/dist/capture/db-queue/clock.mjs.map +1 -0
  151. package/dist/capture/db-queue/codec.mjs +76 -0
  152. package/dist/capture/db-queue/codec.mjs.map +1 -0
  153. package/dist/capture/db-queue/index.d.mts +20 -0
  154. package/dist/capture/db-queue/index.mjs +89 -0
  155. package/dist/capture/db-queue/index.mjs.map +1 -0
  156. package/dist/capture/db-queue/keeper.d.mts +36 -0
  157. package/dist/capture/db-queue/keeper.mjs +92 -0
  158. package/dist/capture/db-queue/keeper.mjs.map +1 -0
  159. package/dist/capture/db-queue/lease.mjs +46 -0
  160. package/dist/capture/db-queue/lease.mjs.map +1 -0
  161. package/dist/capture/db-queue/lifecycle.mjs +36 -0
  162. package/dist/capture/db-queue/lifecycle.mjs.map +1 -0
  163. package/dist/capture/db-queue/operations.mjs +94 -0
  164. package/dist/capture/db-queue/operations.mjs.map +1 -0
  165. package/dist/capture/db-queue/poll-loop.d.mts +30 -0
  166. package/dist/capture/db-queue/poll-loop.mjs +89 -0
  167. package/dist/capture/db-queue/poll-loop.mjs.map +1 -0
  168. package/dist/capture/db-queue/poll.d.mts +10 -0
  169. package/dist/capture/db-queue/poll.mjs +69 -0
  170. package/dist/capture/db-queue/poll.mjs.map +1 -0
  171. package/dist/capture/db-queue/timers.d.mts +12 -0
  172. package/dist/capture/db-queue/timers.mjs +37 -0
  173. package/dist/capture/db-queue/timers.mjs.map +1 -0
  174. package/dist/capture/db-queue/types.d.mts +83 -0
  175. package/dist/capture/db-queue/types.mjs +12 -0
  176. package/dist/capture/db-queue/types.mjs.map +1 -0
  177. package/dist/capture/db-queue/wake.mjs +48 -0
  178. package/dist/capture/db-queue/wake.mjs.map +1 -0
  179. package/dist/capture/design.mjs +39 -0
  180. package/dist/capture/design.mjs.map +1 -0
  181. package/dist/capture/diff-record.mjs +23 -3
  182. package/dist/capture/diff-record.mjs.map +1 -1
  183. package/dist/capture/dispatch.d.mts +12 -7
  184. package/dist/capture/dispatch.mjs +86 -107
  185. package/dist/capture/dispatch.mjs.map +1 -1
  186. package/dist/capture/enrich.mjs +60 -0
  187. package/dist/capture/enrich.mjs.map +1 -0
  188. package/dist/capture/failure-sets.mjs +22 -0
  189. package/dist/capture/failure-sets.mjs.map +1 -0
  190. package/dist/capture/fingerprint.d.mts +42 -0
  191. package/dist/capture/fingerprint.mjs +83 -0
  192. package/dist/capture/fingerprint.mjs.map +1 -0
  193. package/dist/capture/forked/channel.d.mts +25 -0
  194. package/dist/capture/forked/child.d.mts +34 -0
  195. package/dist/capture/forked/child.mjs +202 -0
  196. package/dist/capture/forked/child.mjs.map +1 -0
  197. package/dist/capture/forked/crash-tracker.mjs +23 -0
  198. package/dist/capture/forked/crash-tracker.mjs.map +1 -0
  199. package/dist/capture/forked/decision.d.mts +26 -0
  200. package/dist/capture/forked/decision.mjs +27 -0
  201. package/dist/capture/forked/decision.mjs.map +1 -0
  202. package/dist/capture/forked/exit.mjs +12 -0
  203. package/dist/capture/forked/exit.mjs.map +1 -0
  204. package/dist/capture/forked/fork.d.mts +31 -0
  205. package/dist/capture/forked/fork.mjs +93 -0
  206. package/dist/capture/forked/fork.mjs.map +1 -0
  207. package/dist/capture/forked/forked-capture.d.mts +40 -0
  208. package/dist/capture/forked/forked-capture.mjs +240 -0
  209. package/dist/capture/forked/forked-capture.mjs.map +1 -0
  210. package/dist/capture/forked/lease-book.mjs +46 -0
  211. package/dist/capture/forked/lease-book.mjs.map +1 -0
  212. package/dist/capture/forked/protocol.d.mts +38 -0
  213. package/dist/capture/forked/protocol.mjs +25 -0
  214. package/dist/capture/forked/protocol.mjs.map +1 -0
  215. package/dist/capture/forked/runs.mjs +75 -0
  216. package/dist/capture/forked/runs.mjs.map +1 -0
  217. package/dist/capture/isolate.mjs +141 -0
  218. package/dist/capture/isolate.mjs.map +1 -0
  219. package/dist/capture/job-lease.d.mts +28 -0
  220. package/dist/capture/job-lease.mjs +57 -0
  221. package/dist/capture/job-lease.mjs.map +1 -0
  222. package/dist/capture/matrix.mjs +298 -0
  223. package/dist/capture/matrix.mjs.map +1 -0
  224. package/dist/capture/modes.d.mts +25 -0
  225. package/dist/capture/modes.mjs +107 -0
  226. package/dist/capture/modes.mjs.map +1 -0
  227. package/dist/capture/orchestrator.d.mts +37 -5
  228. package/dist/capture/orchestrator.mjs +118 -107
  229. package/dist/capture/orchestrator.mjs.map +1 -1
  230. package/dist/capture/pipeline.d.mts +9 -2
  231. package/dist/capture/pipeline.mjs +250 -45
  232. package/dist/capture/pipeline.mjs.map +1 -1
  233. package/dist/capture/progress.d.mts +11 -0
  234. package/dist/capture/progress.mjs +28 -0
  235. package/dist/capture/progress.mjs.map +1 -0
  236. package/dist/capture/publish/accept.d.mts +39 -0
  237. package/dist/capture/publish/accept.mjs +28 -0
  238. package/dist/capture/publish/accept.mjs.map +1 -0
  239. package/dist/capture/publish/complete.d.mts +46 -0
  240. package/dist/capture/publish/complete.mjs +64 -0
  241. package/dist/capture/publish/complete.mjs.map +1 -0
  242. package/dist/capture/publish/extract.d.mts +20 -0
  243. package/dist/capture/publish/extract.mjs +119 -0
  244. package/dist/capture/publish/extract.mjs.map +1 -0
  245. package/dist/capture/publish/handler.d.mts +28 -0
  246. package/dist/capture/publish/handler.mjs +62 -0
  247. package/dist/capture/publish/handler.mjs.map +1 -0
  248. package/dist/capture/publish/index.d.mts +10 -0
  249. package/dist/capture/publish/limits.d.mts +37 -0
  250. package/dist/capture/publish/limits.mjs +39 -0
  251. package/dist/capture/publish/limits.mjs.map +1 -0
  252. package/dist/capture/publish/published.d.mts +15 -0
  253. package/dist/capture/publish/published.mjs +18 -0
  254. package/dist/capture/publish/published.mjs.map +1 -0
  255. package/dist/capture/publish/run.d.mts +33 -0
  256. package/dist/capture/publish/run.mjs +30 -0
  257. package/dist/capture/publish/run.mjs.map +1 -0
  258. package/dist/capture/rediff.d.mts +1 -1
  259. package/dist/capture/rediff.mjs +4 -3
  260. package/dist/capture/rediff.mjs.map +1 -1
  261. package/dist/capture/render.mjs +53 -0
  262. package/dist/capture/render.mjs.map +1 -0
  263. package/dist/capture/scratch.d.mts +44 -0
  264. package/dist/capture/scratch.mjs +138 -0
  265. package/dist/capture/scratch.mjs.map +1 -0
  266. package/dist/capture/shard-plan.mjs +128 -0
  267. package/dist/capture/shard-plan.mjs.map +1 -0
  268. package/dist/capture/shards/context.mjs +51 -0
  269. package/dist/capture/shards/context.mjs.map +1 -0
  270. package/dist/capture/shards/execute.mjs +174 -0
  271. package/dist/capture/shards/execute.mjs.map +1 -0
  272. package/dist/capture/shards/fan-out.mjs +126 -0
  273. package/dist/capture/shards/fan-out.mjs.map +1 -0
  274. package/dist/capture/shards/history.mjs +35 -0
  275. package/dist/capture/shards/history.mjs.map +1 -0
  276. package/dist/capture/shards/reduce.mjs +97 -0
  277. package/dist/capture/shards/reduce.mjs.map +1 -0
  278. package/dist/capture/sizing.mjs +1 -11
  279. package/dist/capture/sizing.mjs.map +1 -1
  280. package/dist/capture/skip-checks.mjs +2 -65
  281. package/dist/capture/skip-checks.mjs.map +1 -1
  282. package/dist/capture/statics.d.mts +7 -8
  283. package/dist/capture/statics.mjs +25 -71
  284. package/dist/capture/statics.mjs.map +1 -1
  285. package/dist/capture/storybook-urls.d.mts +40 -0
  286. package/dist/capture/storybook-urls.mjs +41 -0
  287. package/dist/capture/storybook-urls.mjs.map +1 -0
  288. package/dist/capture/storybook.d.mts +12 -4
  289. package/dist/capture/storybook.mjs +56 -16
  290. package/dist/capture/storybook.mjs.map +1 -1
  291. package/dist/capture/target.mjs +21 -0
  292. package/dist/capture/target.mjs.map +1 -0
  293. package/dist/capture/targets.d.mts +25 -0
  294. package/dist/capture/targets.mjs +32 -0
  295. package/dist/capture/targets.mjs.map +1 -0
  296. package/dist/capture/tests.d.mts +37 -0
  297. package/dist/capture/tests.mjs +126 -0
  298. package/dist/capture/tests.mjs.map +1 -0
  299. package/dist/capture/token-chunks.mjs +74 -0
  300. package/dist/capture/token-chunks.mjs.map +1 -0
  301. package/dist/capture.d.mts +60 -7
  302. package/dist/capture.mjs +48 -3
  303. package/dist/config.d.mts +121 -12
  304. package/dist/config.mjs +9 -6
  305. package/dist/config.mjs.map +1 -1
  306. package/dist/diff.d.mts +9 -3
  307. package/dist/diff.mjs +16 -3
  308. package/dist/diff.mjs.map +1 -0
  309. package/dist/index.d.mts +1 -1
  310. package/dist/insights/budget.d.mts +20 -0
  311. package/dist/insights/budget.mjs +33 -0
  312. package/dist/insights/budget.mjs.map +1 -0
  313. package/dist/insights/envelope.d.mts +59 -0
  314. package/dist/insights/envelope.mjs +60 -0
  315. package/dist/insights/envelope.mjs.map +1 -0
  316. package/dist/insights/evidence-health.d.mts +32 -0
  317. package/dist/insights/evidence-health.mjs +28 -0
  318. package/dist/insights/evidence-health.mjs.map +1 -0
  319. package/dist/insights/evidence.d.mts +55 -0
  320. package/dist/insights/evidence.mjs +64 -0
  321. package/dist/insights/evidence.mjs.map +1 -0
  322. package/dist/insights/hash.d.mts +18 -0
  323. package/dist/insights/hash.mjs +21 -0
  324. package/dist/insights/hash.mjs.map +1 -0
  325. package/dist/insights/limits.d.mts +24 -0
  326. package/dist/insights/limits.mjs +24 -0
  327. package/dist/insights/limits.mjs.map +1 -0
  328. package/dist/insights/prompts/v1.d.mts +13 -0
  329. package/dist/insights/prompts/v1.mjs +34 -0
  330. package/dist/insights/prompts/v1.mjs.map +1 -0
  331. package/dist/insights/redact.d.mts +9 -0
  332. package/dist/insights/redact.mjs +24 -0
  333. package/dist/insights/redact.mjs.map +1 -0
  334. package/dist/insights/text.mjs +44 -0
  335. package/dist/insights/text.mjs.map +1 -0
  336. package/dist/insights.d.mts +11 -0
  337. package/dist/insights.mjs +12 -0
  338. package/dist/logger.mjs +17 -1
  339. package/dist/logger.mjs.map +1 -1
  340. package/dist/models/ai-budget-alert.d.mts +23 -0
  341. package/dist/models/ai-budget-alert.mjs +38 -0
  342. package/dist/models/ai-budget-alert.mjs.map +1 -0
  343. package/dist/models/ai-usage.d.mts +40 -0
  344. package/dist/models/ai-usage.mjs +61 -0
  345. package/dist/models/ai-usage.mjs.map +1 -0
  346. package/dist/models/baseline-archive.d.mts +84 -0
  347. package/dist/models/baseline-archive.mjs +106 -0
  348. package/dist/models/baseline-archive.mjs.map +1 -0
  349. package/dist/models/baseline-export.d.mts +19 -0
  350. package/dist/models/baseline-export.mjs +136 -0
  351. package/dist/models/baseline-export.mjs.map +1 -0
  352. package/dist/models/baseline-import.mjs +118 -0
  353. package/dist/models/baseline-import.mjs.map +1 -0
  354. package/dist/models/baseline-transfer.d.mts +49 -0
  355. package/dist/models/baseline-transfer.mjs +121 -0
  356. package/dist/models/baseline-transfer.mjs.map +1 -0
  357. package/dist/models/baseline.d.mts +32 -5
  358. package/dist/models/baseline.mjs +65 -20
  359. package/dist/models/baseline.mjs.map +1 -1
  360. package/dist/models/build-component.d.mts +28 -0
  361. package/dist/models/build-component.mjs +55 -0
  362. package/dist/models/build-component.mjs.map +1 -0
  363. package/dist/models/build-review-status.d.mts +29 -0
  364. package/dist/models/build-review-status.mjs +37 -0
  365. package/dist/models/build-review-status.mjs.map +1 -0
  366. package/dist/models/build-review.d.mts +28 -0
  367. package/dist/models/build-review.mjs +54 -0
  368. package/dist/models/build-review.mjs.map +1 -0
  369. package/dist/models/build.d.mts +25 -3
  370. package/dist/models/build.mjs +50 -11
  371. package/dist/models/build.mjs.map +1 -1
  372. package/dist/models/capture-attempt.d.mts +7 -1
  373. package/dist/models/capture-attempt.mjs +29 -4
  374. package/dist/models/capture-attempt.mjs.map +1 -1
  375. package/dist/models/capture-job.d.mts +106 -0
  376. package/dist/models/capture-job.mjs +288 -0
  377. package/dist/models/capture-job.mjs.map +1 -0
  378. package/dist/models/capture-log.d.mts +1 -1
  379. package/dist/models/capture-log.mjs +4 -3
  380. package/dist/models/capture-log.mjs.map +1 -1
  381. package/dist/models/capture-shard.d.mts +62 -0
  382. package/dist/models/capture-shard.mjs +190 -0
  383. package/dist/models/capture-shard.mjs.map +1 -0
  384. package/dist/models/changeset.d.mts +48 -0
  385. package/dist/models/changeset.mjs +81 -0
  386. package/dist/models/changeset.mjs.map +1 -0
  387. package/dist/models/columns.mjs +19 -0
  388. package/dist/models/columns.mjs.map +1 -0
  389. package/dist/models/comment.d.mts +4 -1
  390. package/dist/models/comment.mjs +7 -4
  391. package/dist/models/comment.mjs.map +1 -1
  392. package/dist/models/component.d.mts +43 -0
  393. package/dist/models/component.mjs +60 -0
  394. package/dist/models/component.mjs.map +1 -0
  395. package/dist/models/connections.d.mts +41 -0
  396. package/dist/models/connections.mjs +112 -0
  397. package/dist/models/connections.mjs.map +1 -0
  398. package/dist/models/content-ref.d.mts +1 -1
  399. package/dist/models/content-ref.mjs +1 -1
  400. package/dist/models/content-ref.mjs.map +1 -1
  401. package/dist/models/credentials.mjs +12 -2
  402. package/dist/models/credentials.mjs.map +1 -1
  403. package/dist/models/design-credentials.d.mts +41 -0
  404. package/dist/models/design-credentials.mjs +86 -0
  405. package/dist/models/design-credentials.mjs.map +1 -0
  406. package/dist/models/design-health.d.mts +16 -0
  407. package/dist/models/design-health.mjs +25 -0
  408. package/dist/models/design-health.mjs.map +1 -0
  409. package/dist/models/design-nodes.d.mts +83 -0
  410. package/dist/models/design-nodes.mjs +222 -0
  411. package/dist/models/design-nodes.mjs.map +1 -0
  412. package/dist/models/design-renders.mjs +74 -0
  413. package/dist/models/design-renders.mjs.map +1 -0
  414. package/dist/models/design-resolve.d.mts +29 -0
  415. package/dist/models/design-resolve.mjs +41 -0
  416. package/dist/models/design-resolve.mjs.map +1 -0
  417. package/dist/models/design.d.mts +39 -0
  418. package/dist/models/design.mjs +90 -0
  419. package/dist/models/design.mjs.map +1 -0
  420. package/dist/models/inherited-ratio.d.mts +21 -0
  421. package/dist/models/inherited-ratio.mjs +22 -0
  422. package/dist/models/inherited-ratio.mjs.map +1 -0
  423. package/dist/models/insight.d.mts +70 -0
  424. package/dist/models/insight.mjs +162 -0
  425. package/dist/models/insight.mjs.map +1 -0
  426. package/dist/models/label.d.mts +4 -2
  427. package/dist/models/label.mjs +25 -10
  428. package/dist/models/label.mjs.map +1 -1
  429. package/dist/models/member.d.mts +1 -1
  430. package/dist/models/member.mjs +5 -4
  431. package/dist/models/member.mjs.map +1 -1
  432. package/dist/models/notification-channel.d.mts +37 -3
  433. package/dist/models/notification-channel.mjs +88 -9
  434. package/dist/models/notification-channel.mjs.map +1 -1
  435. package/dist/models/notification-subscription.d.mts +1 -2
  436. package/dist/models/notification-subscription.mjs +7 -9
  437. package/dist/models/notification-subscription.mjs.map +1 -1
  438. package/dist/models/project-group-mapping.d.mts +6 -1
  439. package/dist/models/project-group-mapping.mjs +14 -4
  440. package/dist/models/project-group-mapping.mjs.map +1 -1
  441. package/dist/models/project.d.mts +9 -1
  442. package/dist/models/project.mjs +9 -4
  443. package/dist/models/project.mjs.map +1 -1
  444. package/dist/models/public-origin.d.mts +63 -0
  445. package/dist/models/public-origin.mjs +114 -0
  446. package/dist/models/public-origin.mjs.map +1 -0
  447. package/dist/models/review-switch-off.d.mts +14 -0
  448. package/dist/models/review-switch-off.mjs +26 -0
  449. package/dist/models/review-switch-off.mjs.map +1 -0
  450. package/dist/models/site-settings.d.mts +23 -0
  451. package/dist/models/site-settings.mjs +48 -0
  452. package/dist/models/site-settings.mjs.map +1 -0
  453. package/dist/models/snapshot.d.mts +36 -1
  454. package/dist/models/snapshot.mjs +50 -3
  455. package/dist/models/snapshot.mjs.map +1 -1
  456. package/dist/models/token.d.mts +13 -1
  457. package/dist/models/token.mjs +23 -5
  458. package/dist/models/token.mjs.map +1 -1
  459. package/dist/models/usage.d.mts +76 -0
  460. package/dist/models/usage.mjs +149 -0
  461. package/dist/models/usage.mjs.map +1 -0
  462. package/dist/models/user.d.mts +1 -1
  463. package/dist/models/user.mjs +4 -3
  464. package/dist/models/user.mjs.map +1 -1
  465. package/dist/models/webhook.d.mts +15 -1
  466. package/dist/models/webhook.mjs +33 -4
  467. package/dist/models/webhook.mjs.map +1 -1
  468. package/dist/models.d.mts +26 -3
  469. package/dist/models.mjs +27 -5
  470. package/dist/options.d.mts +18 -0
  471. package/dist/options.mjs +90 -0
  472. package/dist/options.mjs.map +1 -0
  473. package/dist/paths.d.mts +19 -4
  474. package/dist/paths.mjs +51 -10
  475. package/dist/paths.mjs.map +1 -1
  476. package/dist/retention/ai.d.mts +18 -0
  477. package/dist/retention/ai.mjs +23 -0
  478. package/dist/retention/ai.mjs.map +1 -0
  479. package/dist/retention/pending.mjs +47 -0
  480. package/dist/retention/pending.mjs.map +1 -0
  481. package/dist/retention/screenshot-sweep.d.mts +51 -0
  482. package/dist/retention/screenshot-sweep.mjs +128 -0
  483. package/dist/retention/screenshot-sweep.mjs.map +1 -0
  484. package/dist/retention.d.mts +16 -2
  485. package/dist/retention.mjs +71 -14
  486. package/dist/retention.mjs.map +1 -1
  487. package/dist/schema/baseline.d.mts +6 -0
  488. package/dist/schema/build-component.d.mts +25 -0
  489. package/dist/schema/build-review.d.mts +17 -0
  490. package/dist/schema/build.d.mts +7 -0
  491. package/dist/schema/capture-job.d.mts +60 -0
  492. package/dist/schema/capture-shard.d.mts +35 -0
  493. package/dist/schema/comment.d.mts +2 -0
  494. package/dist/schema/connection.d.mts +24 -0
  495. package/dist/schema/design.d.mts +58 -0
  496. package/dist/schema/insight.d.mts +54 -0
  497. package/dist/schema/notification.d.mts +4 -0
  498. package/dist/schema/project.d.mts +21 -0
  499. package/dist/schema/site-setting.d.mts +21 -0
  500. package/dist/schema/snapshot.d.mts +12 -0
  501. package/dist/schema/usage.d.mts +30 -0
  502. package/dist/schema.d.mts +11 -3
  503. package/dist/serverless.d.mts +21 -0
  504. package/dist/serverless.mjs +37 -0
  505. package/dist/serverless.mjs.map +1 -0
  506. package/dist/test-helpers/create-project.d.mts +1 -1
  507. package/dist/test-helpers/deferred.d.mts +39 -0
  508. package/dist/test-helpers/deferred.mjs +61 -0
  509. package/dist/test-helpers/deferred.mjs.map +1 -0
  510. package/dist/test-helpers/design-contract.d.mts +21 -0
  511. package/dist/test-helpers/design-contract.mjs +40 -0
  512. package/dist/test-helpers/design-contract.mjs.map +1 -0
  513. package/dist/test-helpers/fake-database.mjs +14 -2
  514. package/dist/test-helpers/fake-database.mjs.map +1 -1
  515. package/dist/test-helpers/fake-design.d.mts +43 -0
  516. package/dist/test-helpers/fake-design.mjs +114 -0
  517. package/dist/test-helpers/fake-design.mjs.map +1 -0
  518. package/dist/test-helpers/fake-notifier.d.mts +21 -0
  519. package/dist/test-helpers/fake-notifier.mjs +44 -0
  520. package/dist/test-helpers/fake-notifier.mjs.map +1 -0
  521. package/dist/test-helpers/fake-tables.mjs +255 -67
  522. package/dist/test-helpers/fake-tables.mjs.map +1 -1
  523. package/dist/test-helpers/manual-clock.d.mts +27 -0
  524. package/dist/test-helpers/manual-clock.mjs +56 -0
  525. package/dist/test-helpers/manual-clock.mjs.map +1 -0
  526. package/dist/test-helpers/notifier-contract.d.mts +7 -1
  527. package/dist/test-helpers/notifier-contract.mjs +32 -3
  528. package/dist/test-helpers/notifier-contract.mjs.map +1 -1
  529. package/dist/test-helpers/queue-contract.d.mts +16 -2
  530. package/dist/test-helpers/queue-contract.mjs +195 -1
  531. package/dist/test-helpers/queue-contract.mjs.map +1 -1
  532. package/dist/test-helpers/queue-multi-instance.d.mts +20 -0
  533. package/dist/test-helpers/queue-multi-instance.mjs +206 -0
  534. package/dist/test-helpers/queue-multi-instance.mjs.map +1 -0
  535. package/dist/test-helpers/runner-contract.mjs +11 -0
  536. package/dist/test-helpers/runner-contract.mjs.map +1 -1
  537. package/dist/test-helpers/sql-chunks.mjs +23 -0
  538. package/dist/test-helpers/sql-chunks.mjs.map +1 -1
  539. package/dist/test-helpers/storage-contract.mjs +1 -1
  540. package/dist/test-helpers.d.mts +9 -4
  541. package/dist/test-helpers.mjs +8 -3
  542. package/dist/types.d.mts +14 -3
  543. package/dist/types.mjs +21 -4
  544. package/dist/types.mjs.map +1 -1
  545. package/dist/urls.d.mts +4 -0
  546. package/dist/urls.mjs +11 -2
  547. package/dist/urls.mjs.map +1 -1
  548. package/dist/utils/adaptive-concurrency.d.mts +66 -0
  549. package/dist/utils/adaptive-concurrency.mjs +149 -0
  550. package/dist/utils/adaptive-concurrency.mjs.map +1 -0
  551. package/dist/utils/connect-retry.d.mts +26 -0
  552. package/dist/utils/connect-retry.mjs +43 -0
  553. package/dist/utils/connect-retry.mjs.map +1 -0
  554. package/dist/utils/environment.d.mts +19 -0
  555. package/dist/utils/environment.mjs +59 -0
  556. package/dist/utils/environment.mjs.map +1 -0
  557. package/dist/utils/http.d.mts +17 -1
  558. package/dist/utils/http.mjs +22 -3
  559. package/dist/utils/http.mjs.map +1 -1
  560. package/dist/utils/map-adaptive.d.mts +15 -0
  561. package/dist/utils/map-adaptive.mjs +72 -0
  562. package/dist/utils/map-adaptive.mjs.map +1 -0
  563. package/dist/utils/map-limit.d.mts +10 -0
  564. package/dist/utils/map-limit.mjs +32 -0
  565. package/dist/utils/map-limit.mjs.map +1 -0
  566. package/dist/utils/page-limiter.d.mts +37 -0
  567. package/dist/utils/page-limiter.mjs +56 -0
  568. package/dist/utils/page-limiter.mjs.map +1 -0
  569. package/dist/utils/public-origin.d.mts +20 -0
  570. package/dist/utils/public-origin.mjs +75 -0
  571. package/dist/utils/public-origin.mjs.map +1 -0
  572. package/dist/utils/redact.mjs +3 -0
  573. package/dist/utils/redact.mjs.map +1 -1
  574. package/dist/utils/remote-environment.d.mts +39 -0
  575. package/dist/utils/remote-environment.mjs +114 -0
  576. package/dist/utils/remote-environment.mjs.map +1 -0
  577. package/dist/utils/resources.d.mts +64 -0
  578. package/dist/utils/resources.mjs +122 -0
  579. package/dist/utils/resources.mjs.map +1 -0
  580. package/dist/utils/screenshot-store.d.mts +15 -0
  581. package/dist/utils/screenshot-store.mjs +41 -0
  582. package/dist/utils/screenshot-store.mjs.map +1 -0
  583. package/dist/utils/session-gate.d.mts +22 -0
  584. package/dist/utils/session-gate.mjs +53 -0
  585. package/dist/utils/session-gate.mjs.map +1 -0
  586. package/dist/utils/storybook-token.d.mts +81 -0
  587. package/dist/utils/storybook-token.mjs +134 -0
  588. package/dist/utils/storybook-token.mjs.map +1 -0
  589. package/dist/utils/storybook-url.d.mts +15 -0
  590. package/dist/utils/storybook-url.mjs +21 -0
  591. package/dist/utils/storybook-url.mjs.map +1 -0
  592. package/dist/utils/timing.mjs +1 -1
  593. package/dist/utils/timing.mjs.map +1 -1
  594. package/dist/utils/zip-read.mjs +129 -0
  595. package/dist/utils/zip-read.mjs.map +1 -0
  596. package/dist/utils/zip-write.d.mts +18 -0
  597. package/dist/utils/zip-write.mjs +188 -0
  598. package/dist/utils/zip-write.mjs.map +1 -0
  599. package/dist/utils.d.mts +17 -3
  600. package/dist/utils.mjs +18 -4
  601. package/package.json +32 -20
  602. package/dist/adapter/capture-runner.mjs.map +0 -1
  603. package/dist/adapter/git-host/comments.d.mts +0 -41
  604. package/dist/adapter/git-host/comments.mjs +0 -54
  605. package/dist/adapter/git-host/comments.mjs.map +0 -1
  606. package/dist/adapter/git-host/helpers.d.mts +0 -13
  607. package/dist/adapter/git-host/helpers.mjs +0 -30
  608. package/dist/adapter/git-host/helpers.mjs.map +0 -1
  609. package/dist/adapter/git-host.d.mts +0 -42
  610. package/dist/capture/queue.d.mts +0 -38
  611. package/dist/capture/queue.mjs +0 -98
  612. package/dist/capture/queue.mjs.map +0 -1
  613. package/dist/capture/recovery.d.mts +0 -21
  614. package/dist/capture/recovery.mjs +0 -83
  615. package/dist/capture/recovery.mjs.map +0 -1
  616. package/dist/capture/status-fanout.mjs +0 -72
  617. package/dist/capture/status-fanout.mjs.map +0 -1
  618. package/dist/diff/engine.d.mts +0 -16
  619. package/dist/diff/engine.mjs +0 -87
  620. package/dist/diff/engine.mjs.map +0 -1
  621. package/dist/diff/options.d.mts +0 -42
  622. package/dist/diff/options.mjs +0 -15
  623. package/dist/diff/options.mjs.map +0 -1
  624. package/dist/models/status-config.d.mts +0 -38
  625. package/dist/models/status-config.mjs +0 -63
  626. package/dist/models/status-config.mjs.map +0 -1
  627. package/dist/schema/status-config.d.mts +0 -16
  628. package/dist/test-helpers/git-contract.d.mts +0 -11
  629. package/dist/test-helpers/git-contract.mjs +0 -34
  630. package/dist/test-helpers/git-contract.mjs.map +0 -1
  631. /package/dist/adapter/{git-host.mjs → oauth.mjs} +0 -0
@@ -0,0 +1,43 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { DesignProvider, DesignState } from "../adapter/design.mjs";
4
+ import { Buffer } from "node:buffer";
5
+ //#region src/test-helpers/fake-design.d.ts
6
+ declare const FAKE_PNG: Buffer<ArrayBuffer>;
7
+ /** Mutable behavior and call log of a {@link makeFakeDesign} provider. */
8
+ interface FakeDesign {
9
+ provider: DesignProvider;
10
+ /** File version served; bump it to simulate an edit. */
11
+ version: string;
12
+ lastModified: string;
13
+ /** Per node id (`""` = whole file) state override; defaults to `ok`. */
14
+ states: Map<string, DesignState>;
15
+ /** Node ids the vendor cannot render. */
16
+ unrenderable: Set<string>;
17
+ /** Make every render call throw. */
18
+ failRenders: boolean;
19
+ /** Artificial latency per call, to observe concurrency. */
20
+ delayMs: number;
21
+ /** Credentials the provider was created with, in order. */
22
+ credentials: string[];
23
+ /** How each of those credentials authenticates, in the same order. */
24
+ authTypes: string[];
25
+ metaCalls: {
26
+ fileKey: string;
27
+ nodeIds: string[];
28
+ }[];
29
+ renderCalls: {
30
+ fileKey: string;
31
+ nodeIds: string[];
32
+ }[];
33
+ /** Calls currently in flight and the highest value seen. */
34
+ inFlight: number;
35
+ peak: number;
36
+ }
37
+ /** Link to a fake file, optionally a node of it. */
38
+ declare const fakeUrl: (fileKey: string, nodeId?: string) => string;
39
+ /** Create a fake provider whose behavior the test mutates through the returned object. */
40
+ declare function makeFakeDesign(kind?: string): FakeDesign;
41
+ //#endregion
42
+ export { FAKE_PNG, FakeDesign, fakeUrl, makeFakeDesign };
43
+ //# sourceMappingURL=fake-design.d.mts.map
@@ -0,0 +1,114 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { Buffer } from "node:buffer";
5
+ //#region src/test-helpers/fake-design.ts
6
+ /** A scriptable in-memory design provider for model and app tests (links look like `https://design.test/<file>?node=<id>`). */
7
+ const FAKE_PNG = Buffer.from([
8
+ 137,
9
+ 80,
10
+ 78,
11
+ 71
12
+ ]);
13
+ /** Link to a fake file, optionally a node of it. */
14
+ const fakeUrl = (fileKey, nodeId) => `https://design.test/${fileKey}${nodeId ? `?node=${nodeId}` : ""}`;
15
+ function parse(raw) {
16
+ try {
17
+ const url = new URL(raw.trim());
18
+ const fileKey = url.pathname.slice(1);
19
+ if (url.hostname !== "design.test" || fileKey === "") return null;
20
+ return {
21
+ fileKey,
22
+ nodeId: url.searchParams.get("node"),
23
+ url: `${url.origin}${url.pathname}${url.search}`
24
+ };
25
+ } catch {
26
+ return null;
27
+ }
28
+ }
29
+ /** Create a fake provider whose behavior the test mutates through the returned object. */
30
+ function makeFakeDesign(kind = "fake") {
31
+ const fake = {
32
+ provider: void 0,
33
+ version: "1",
34
+ lastModified: "2026-01-01T00:00:00Z",
35
+ states: /* @__PURE__ */ new Map(),
36
+ unrenderable: /* @__PURE__ */ new Set(),
37
+ failRenders: false,
38
+ delayMs: 0,
39
+ credentials: [],
40
+ authTypes: [],
41
+ metaCalls: [],
42
+ renderCalls: [],
43
+ inFlight: 0,
44
+ peak: 0
45
+ };
46
+ const tracked = async (work, options) => {
47
+ fake.inFlight += 1;
48
+ fake.peak = Math.max(fake.peak, fake.inFlight);
49
+ try {
50
+ if (fake.delayMs > 0) await new Promise((resolve) => {
51
+ setTimeout(resolve, fake.delayMs);
52
+ });
53
+ options?.signal?.throwIfAborted();
54
+ return work();
55
+ } finally {
56
+ fake.inFlight -= 1;
57
+ }
58
+ };
59
+ fake.provider = {
60
+ metadata: {
61
+ name: "Fake design",
62
+ version: "0.0.0",
63
+ kind,
64
+ category: "design",
65
+ credentialLabel: "Fake access token",
66
+ credentialHelp: "Any string works.",
67
+ credentialPlaceholder: "fake_…",
68
+ urlHint: "https://design.test/<file>?node=<id>",
69
+ credentialMaxAgeDays: 90
70
+ },
71
+ parseUrl: parse,
72
+ create: ({ credential, authType }) => {
73
+ fake.credentials.push(credential);
74
+ fake.authTypes.push(authType ?? "token");
75
+ return {
76
+ fetchMetas: async (fileKey, refs, options) => {
77
+ fake.metaCalls.push({
78
+ fileKey,
79
+ nodeIds: refs.map((ref) => ref.nodeId ?? "")
80
+ });
81
+ return await tracked(() => {
82
+ const metas = /* @__PURE__ */ new Map();
83
+ for (const ref of refs) {
84
+ const id = ref.nodeId ?? "";
85
+ const state = fake.states.get(id) ?? "ok";
86
+ metas.set(id, {
87
+ state,
88
+ name: state === "ok" ? `Node ${id || fileKey}` : null,
89
+ version: state === "ok" ? fake.version : null,
90
+ lastModified: state === "ok" ? fake.lastModified : null
91
+ });
92
+ }
93
+ return metas;
94
+ }, options);
95
+ },
96
+ fetchRenders: async (fileKey, nodeIds, options) => {
97
+ fake.renderCalls.push({
98
+ fileKey,
99
+ nodeIds: [...nodeIds]
100
+ });
101
+ return await tracked(() => {
102
+ if (fake.failRenders) throw new Error("render failed");
103
+ return new Map(nodeIds.filter((id) => !fake.unrenderable.has(id)).map((id) => [id, FAKE_PNG]));
104
+ }, options);
105
+ }
106
+ };
107
+ }
108
+ };
109
+ return fake;
110
+ }
111
+ //#endregion
112
+ export { FAKE_PNG, fakeUrl, makeFakeDesign };
113
+
114
+ //# sourceMappingURL=fake-design.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-design.mjs","names":[],"sources":["../../src/test-helpers/fake-design.ts"],"sourcesContent":["/** A scriptable in-memory design provider for model and app tests (links look like `https://design.test/<file>?node=<id>`). */\nimport { Buffer } from \"node:buffer\";\nimport type {\n DesignCallOptions,\n DesignMeta,\n DesignProvider,\n DesignRef,\n DesignState,\n} from \"../adapters/design.ts\";\n\nexport const FAKE_PNG = Buffer.from([137, 80, 78, 71]);\n\n/** Mutable behavior and call log of a {@link makeFakeDesign} provider. */\nexport interface FakeDesign {\n provider: DesignProvider;\n /** File version served; bump it to simulate an edit. */\n version: string;\n lastModified: string;\n /** Per node id (`\"\"` = whole file) state override; defaults to `ok`. */\n states: Map<string, DesignState>;\n /** Node ids the vendor cannot render. */\n unrenderable: Set<string>;\n /** Make every render call throw. */\n failRenders: boolean;\n /** Artificial latency per call, to observe concurrency. */\n delayMs: number;\n /** Credentials the provider was created with, in order. */\n credentials: string[];\n /** How each of those credentials authenticates, in the same order. */\n authTypes: string[];\n metaCalls: { fileKey: string; nodeIds: string[] }[];\n renderCalls: { fileKey: string; nodeIds: string[] }[];\n /** Calls currently in flight and the highest value seen. */\n inFlight: number;\n peak: number;\n}\n\n/** Link to a fake file, optionally a node of it. */\nexport const fakeUrl = (fileKey: string, nodeId?: string): string =>\n `https://design.test/${fileKey}${nodeId ? `?node=${nodeId}` : \"\"}`;\n\nfunction parse(raw: string): DesignRef | null {\n try {\n const url = new URL(raw.trim());\n const fileKey = url.pathname.slice(1);\n if (url.hostname !== \"design.test\" || fileKey === \"\") return null;\n return {\n fileKey,\n nodeId: url.searchParams.get(\"node\"),\n url: `${url.origin}${url.pathname}${url.search}`,\n };\n } catch {\n return null;\n }\n}\n\n/** Create a fake provider whose behavior the test mutates through the returned object. */\nexport function makeFakeDesign(kind = \"fake\"): FakeDesign {\n const fake: FakeDesign = {\n provider: undefined as unknown as DesignProvider,\n version: \"1\",\n lastModified: \"2026-01-01T00:00:00Z\",\n states: new Map(),\n unrenderable: new Set(),\n failRenders: false,\n delayMs: 0,\n credentials: [],\n authTypes: [],\n metaCalls: [],\n renderCalls: [],\n inFlight: 0,\n peak: 0,\n };\n const tracked = async <T>(work: () => T, options?: DesignCallOptions): Promise<T> => {\n fake.inFlight += 1;\n fake.peak = Math.max(fake.peak, fake.inFlight);\n try {\n if (fake.delayMs > 0) {\n await new Promise((resolve) => {\n setTimeout(resolve, fake.delayMs);\n });\n }\n options?.signal?.throwIfAborted();\n return work();\n } finally {\n fake.inFlight -= 1;\n }\n };\n fake.provider = {\n metadata: {\n name: \"Fake design\",\n version: \"0.0.0\",\n kind,\n category: \"design\",\n credentialLabel: \"Fake access token\",\n credentialHelp: \"Any string works.\",\n credentialPlaceholder: \"fake_…\",\n urlHint: \"https://design.test/<file>?node=<id>\",\n credentialMaxAgeDays: 90,\n },\n parseUrl: parse,\n create: ({ credential, authType }) => {\n fake.credentials.push(credential);\n fake.authTypes.push(authType ?? \"token\");\n return {\n fetchMetas: async (fileKey, refs, options) => {\n fake.metaCalls.push({ fileKey, nodeIds: refs.map((ref) => ref.nodeId ?? \"\") });\n return await tracked(() => {\n const metas = new Map<string, DesignMeta>();\n for (const ref of refs) {\n const id = ref.nodeId ?? \"\";\n const state = fake.states.get(id) ?? \"ok\";\n metas.set(id, {\n state,\n name: state === \"ok\" ? `Node ${id || fileKey}` : null,\n version: state === \"ok\" ? fake.version : null,\n lastModified: state === \"ok\" ? fake.lastModified : null,\n });\n }\n return metas;\n }, options);\n },\n fetchRenders: async (fileKey, nodeIds, options) => {\n fake.renderCalls.push({ fileKey, nodeIds: [...nodeIds] });\n return await tracked(() => {\n if (fake.failRenders) throw new Error(\"render failed\");\n return new Map(\n nodeIds\n .filter((id) => !fake.unrenderable.has(id))\n .map((id) => [id, FAKE_PNG] as const),\n );\n }, options);\n },\n };\n },\n };\n return fake;\n}\n"],"mappings":";;;;;;AAUA,MAAa,WAAW,OAAO,KAAK;CAAC;CAAK;CAAI;CAAI;AAAE,CAAC;;AA4BrD,MAAa,WAAW,SAAiB,WACvC,uBAAuB,UAAU,SAAS,SAAS,WAAW;AAEhE,SAAS,MAAM,KAA+B;CAC5C,IAAI;EACF,MAAM,MAAM,IAAI,IAAI,IAAI,KAAK,CAAC;EAC9B,MAAM,UAAU,IAAI,SAAS,MAAM,CAAC;EACpC,IAAI,IAAI,aAAa,iBAAiB,YAAY,IAAI,OAAO;EAC7D,OAAO;GACL;GACA,QAAQ,IAAI,aAAa,IAAI,MAAM;GACnC,KAAK,GAAG,IAAI,SAAS,IAAI,WAAW,IAAI;EAC1C;CACF,QAAQ;EACN,OAAO;CACT;AACF;;AAGA,SAAgB,eAAe,OAAO,QAAoB;CACxD,MAAM,OAAmB;EACvB,UAAU,KAAA;EACV,SAAS;EACT,cAAc;EACd,wBAAQ,IAAI,IAAI;EAChB,8BAAc,IAAI,IAAI;EACtB,aAAa;EACb,SAAS;EACT,aAAa,CAAC;EACd,WAAW,CAAC;EACZ,WAAW,CAAC;EACZ,aAAa,CAAC;EACd,UAAU;EACV,MAAM;CACR;CACA,MAAM,UAAU,OAAU,MAAe,YAA4C;EACnF,KAAK,YAAY;EACjB,KAAK,OAAO,KAAK,IAAI,KAAK,MAAM,KAAK,QAAQ;EAC7C,IAAI;GACF,IAAI,KAAK,UAAU,GACjB,MAAM,IAAI,SAAS,YAAY;IAC7B,WAAW,SAAS,KAAK,OAAO;GAClC,CAAC;GAEH,SAAS,QAAQ,eAAe;GAChC,OAAO,KAAK;EACd,UAAU;GACR,KAAK,YAAY;EACnB;CACF;CACA,KAAK,WAAW;EACd,UAAU;GACR,MAAM;GACN,SAAS;GACT;GACA,UAAU;GACV,iBAAiB;GACjB,gBAAgB;GAChB,uBAAuB;GACvB,SAAS;GACT,sBAAsB;EACxB;EACA,UAAU;EACV,SAAS,EAAE,YAAY,eAAe;GACpC,KAAK,YAAY,KAAK,UAAU;GAChC,KAAK,UAAU,KAAK,YAAY,OAAO;GACvC,OAAO;IACL,YAAY,OAAO,SAAS,MAAM,YAAY;KAC5C,KAAK,UAAU,KAAK;MAAE;MAAS,SAAS,KAAK,KAAK,QAAQ,IAAI,UAAU,EAAE;KAAE,CAAC;KAC7E,OAAO,MAAM,cAAc;MACzB,MAAM,wBAAQ,IAAI,IAAwB;MAC1C,KAAK,MAAM,OAAO,MAAM;OACtB,MAAM,KAAK,IAAI,UAAU;OACzB,MAAM,QAAQ,KAAK,OAAO,IAAI,EAAE,KAAK;OACrC,MAAM,IAAI,IAAI;QACZ;QACA,MAAM,UAAU,OAAO,QAAQ,MAAM,YAAY;QACjD,SAAS,UAAU,OAAO,KAAK,UAAU;QACzC,cAAc,UAAU,OAAO,KAAK,eAAe;OACrD,CAAC;MACH;MACA,OAAO;KACT,GAAG,OAAO;IACZ;IACA,cAAc,OAAO,SAAS,SAAS,YAAY;KACjD,KAAK,YAAY,KAAK;MAAE;MAAS,SAAS,CAAC,GAAG,OAAO;KAAE,CAAC;KACxD,OAAO,MAAM,cAAc;MACzB,IAAI,KAAK,aAAa,MAAM,IAAI,MAAM,eAAe;MACrD,OAAO,IAAI,IACT,QACG,QAAQ,OAAO,CAAC,KAAK,aAAa,IAAI,EAAE,CAAC,CAAC,CAC1C,KAAK,OAAO,CAAC,IAAI,QAAQ,CAAU,CACxC;KACF,GAAG,OAAO;IACZ;GACF;EACF;CACF;CACA,OAAO;AACT"}
@@ -0,0 +1,21 @@
1
+ import __tsdown_shims_path from 'node:path';
2
+ import __tsdown_shims_url from 'node:url';
3
+ import { SetStateInput, StateNotifierProvider } from "../adapters/notifier/provider.mjs";
4
+ import { z } from "zod";
5
+ //#region src/test-helpers/fake-notifier.d.ts
6
+ /** A recording state provider and the writes it received. */
7
+ interface FakeStateNotifier {
8
+ provider: StateNotifierProvider;
9
+ calls: SetStateInput[];
10
+ /** Secrets `create` was bound with, in call order. */
11
+ secrets: (string | undefined)[];
12
+ }
13
+ /**
14
+ * Build a fake `state` provider of the given kind. `failWith` makes every write
15
+ * reject with that message, like a host rejecting the token; `schema` is the
16
+ * channel config schema (any object by default).
17
+ */
18
+ declare function makeFakeStateNotifier(kind?: string, failWith?: string, schema?: z.ZodType): FakeStateNotifier;
19
+ //#endregion
20
+ export { FakeStateNotifier, makeFakeStateNotifier };
21
+ //# sourceMappingURL=fake-notifier.d.mts.map
@@ -0,0 +1,44 @@
1
+ import "node:path";
2
+ import "node:url";
3
+ import.meta.url;
4
+ import { z } from "zod";
5
+ //#region src/test-helpers/fake-notifier.ts
6
+ /** Fake `state` notifier (a git host stand-in) recording every state write. */
7
+ /**
8
+ * Build a fake `state` provider of the given kind. `failWith` makes every write
9
+ * reject with that message, like a host rejecting the token; `schema` is the
10
+ * channel config schema (any object by default).
11
+ */
12
+ function makeFakeStateNotifier(kind = "fake-git", failWith, schema = z.object({}).loose()) {
13
+ const calls = [];
14
+ const secrets = [];
15
+ const metadata = {
16
+ name: "Fake Git",
17
+ version: "0.0.0",
18
+ kind,
19
+ category: "notifier",
20
+ delivery: "state",
21
+ schema
22
+ };
23
+ return {
24
+ provider: {
25
+ metadata,
26
+ create: ({ secret }) => {
27
+ secrets.push(secret);
28
+ return {
29
+ metadata,
30
+ async setState(input) {
31
+ calls.push(input);
32
+ if (failWith !== void 0) throw new Error(failWith);
33
+ }
34
+ };
35
+ }
36
+ },
37
+ calls,
38
+ secrets
39
+ };
40
+ }
41
+ //#endregion
42
+ export { makeFakeStateNotifier };
43
+
44
+ //# sourceMappingURL=fake-notifier.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake-notifier.mjs","names":[],"sources":["../../src/test-helpers/fake-notifier.ts"],"sourcesContent":["/** Fake `state` notifier (a git host stand-in) recording every state write. */\nimport { z } from \"zod\";\nimport type {\n SetStateInput,\n StateNotifierMetadata,\n StateNotifierProvider,\n} from \"../adapters/notifier/provider.ts\";\n\n/** A recording state provider and the writes it received. */\nexport interface FakeStateNotifier {\n provider: StateNotifierProvider;\n calls: SetStateInput[];\n /** Secrets `create` was bound with, in call order. */\n secrets: (string | undefined)[];\n}\n\n/**\n * Build a fake `state` provider of the given kind. `failWith` makes every write\n * reject with that message, like a host rejecting the token; `schema` is the\n * channel config schema (any object by default).\n */\nexport function makeFakeStateNotifier(\n kind = \"fake-git\",\n failWith?: string,\n schema: z.ZodType = z.object({}).loose(),\n): FakeStateNotifier {\n const calls: SetStateInput[] = [];\n const secrets: (string | undefined)[] = [];\n const metadata: StateNotifierMetadata = {\n name: \"Fake Git\",\n version: \"0.0.0\",\n kind,\n category: \"notifier\",\n delivery: \"state\",\n schema,\n };\n const provider: StateNotifierProvider = {\n metadata,\n create: ({ secret }) => {\n secrets.push(secret);\n return {\n metadata,\n // oxlint-disable-next-line eslint/require-await -- setState is async by contract\n async setState(input: SetStateInput): Promise<void> {\n calls.push(input);\n if (failWith !== undefined) {\n throw new Error(failWith);\n }\n },\n };\n },\n };\n return { provider, calls, secrets };\n}\n"],"mappings":";;;;;;;;;;;AAqBA,SAAgB,sBACd,OAAO,YACP,UACA,SAAoB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GACpB;CACnB,MAAM,QAAyB,CAAC;CAChC,MAAM,UAAkC,CAAC;CACzC,MAAM,WAAkC;EACtC,MAAM;EACN,SAAS;EACT;EACA,UAAU;EACV,UAAU;EACV;CACF;CAiBA,OAAO;EAAE,UAAA;GAfP;GACA,SAAS,EAAE,aAAa;IACtB,QAAQ,KAAK,MAAM;IACnB,OAAO;KACL;KAEA,MAAM,SAAS,OAAqC;MAClD,MAAM,KAAK,KAAK;MAChB,IAAI,aAAa,KAAA,GACf,MAAM,IAAI,MAAM,QAAQ;KAE5B;IACF;GACF;EAEc;EAAG;EAAO;CAAQ;AACpC"}
@@ -43,74 +43,185 @@ function defineTable(name, columns) {
43
43
  table[columnsSymbol] = handles;
44
44
  return table;
45
45
  }
46
+ const projects = defineTable("projects", {
47
+ id: "id",
48
+ name: "name",
49
+ slug: "slug",
50
+ gitRepository: "git_repository",
51
+ gitDefaultBranch: "git_default_branch",
52
+ pixelThreshold: "pixel_threshold",
53
+ maxDiffRatio: "max_diff_ratio",
54
+ publicBranchRegex: "public_branch_regex",
55
+ storybookMeta: "storybook_meta",
56
+ executePlay: "execute_play",
57
+ playTimeoutMs: "play_timeout_ms",
58
+ runA11y: "run_a11y",
59
+ runTests: "run_tests",
60
+ browser: "browser",
61
+ viewports: "viewports",
62
+ browsers: "browsers",
63
+ modesAllowlist: "modes_allowlist",
64
+ automigrate: "automigrate",
65
+ aiProfile: "ai_profile",
66
+ reviewEnabled: "review_enabled",
67
+ reviewApprovals: "review_approvals",
68
+ storybookUrlTtlSeconds: "storybook_url_ttl_seconds",
69
+ createdAt: "created_at",
70
+ updatedAt: "updated_at"
71
+ });
72
+ const designLinks = defineTable("design_links", {
73
+ id: "id",
74
+ projectId: "project_id",
75
+ importPath: "import_path",
76
+ label: "label",
77
+ url: "url",
78
+ createdAt: "created_at",
79
+ updatedAt: "updated_at"
80
+ });
81
+ const designCredentials = defineTable("design_credentials", {
82
+ id: "id",
83
+ projectId: "project_id",
84
+ provider: "provider",
85
+ tokenEncrypted: "token_encrypted",
86
+ status: "status",
87
+ checkedAt: "checked_at",
88
+ createdAt: "created_at",
89
+ updatedAt: "updated_at"
90
+ });
91
+ const userConnections = defineTable("user_connections", {
92
+ id: "id",
93
+ userId: "user_id",
94
+ service: "service",
95
+ tokenEncrypted: "token_encrypted",
96
+ refreshTokenEncrypted: "refresh_token_encrypted",
97
+ expiresAt: "expires_at",
98
+ status: "status",
99
+ createdAt: "created_at",
100
+ updatedAt: "updated_at"
101
+ });
102
+ const designNodes = defineTable("design_nodes", {
103
+ id: "id",
104
+ projectId: "project_id",
105
+ provider: "provider",
106
+ viewerId: "viewer_id",
107
+ fileKey: "file_key",
108
+ nodeId: "node_id",
109
+ name: "name",
110
+ version: "version",
111
+ lastModified: "last_modified",
112
+ state: "state",
113
+ renderPath: "render_path",
114
+ renderVersion: "render_version",
115
+ fetchedAt: "fetched_at",
116
+ createdAt: "created_at",
117
+ updatedAt: "updated_at"
118
+ });
119
+ const builds = defineTable("builds", {
120
+ id: "id",
121
+ projectId: "project_id",
122
+ gitSha: "git_sha",
123
+ gitBranch: "git_branch",
124
+ isDefault: "is_default",
125
+ authorEmail: "author_email",
126
+ authorName: "author_name",
127
+ message: "message",
128
+ public: "public",
129
+ status: "status",
130
+ snapshotCount: "snapshot_count",
131
+ changedCount: "changed_count",
132
+ approvedCount: "approved_count",
133
+ rejectedCount: "rejected_count",
134
+ inheritedCount: "inherited_count",
135
+ affectedOnly: "affected_only",
136
+ baselineSha: "baseline_sha",
137
+ changedFiles: "changed_files",
138
+ affectedImportPaths: "affected_import_paths",
139
+ testResults: "test_results",
140
+ createdAt: "created_at",
141
+ updatedAt: "updated_at"
142
+ });
143
+ const captureAttempts = defineTable("capture_attempts", {
144
+ id: "id",
145
+ projectId: "project_id",
146
+ buildId: "build_id",
147
+ attemptNo: "attempt_no",
148
+ status: "status",
149
+ error: "error",
150
+ reqId: "req_id",
151
+ storyCount: "story_count",
152
+ failedCount: "failed_count",
153
+ queuedAt: "queued_at",
154
+ startedAt: "started_at",
155
+ finishedAt: "finished_at",
156
+ createdAt: "created_at",
157
+ updatedAt: "updated_at"
158
+ });
159
+ const captureShards = defineTable("capture_shards", {
160
+ id: "id",
161
+ projectId: "project_id",
162
+ buildId: "build_id",
163
+ kind: "kind",
164
+ ordinal: "ordinal",
165
+ status: "status",
166
+ attemptId: "attempt_id",
167
+ payload: "payload",
168
+ result: "result",
169
+ error: "error",
170
+ startedAt: "started_at",
171
+ finishedAt: "finished_at",
172
+ createdAt: "created_at",
173
+ updatedAt: "updated_at"
174
+ });
175
+ const captureJobs = defineTable("capture_jobs", {
176
+ id: "id",
177
+ entry: "entry",
178
+ jobId: "job_id",
179
+ kind: "kind",
180
+ buildId: "build_id",
181
+ shardId: "shard_id",
182
+ attempt: "attempt",
183
+ maxAttempts: "max_attempts",
184
+ status: "status",
185
+ visibleAt: "visible_at",
186
+ owner: "owner",
187
+ payload: "payload",
188
+ cancelRequestedAt: "cancel_requested_at",
189
+ error: "error",
190
+ startedAt: "started_at",
191
+ finishedAt: "finished_at",
192
+ createdAt: "created_at",
193
+ updatedAt: "updated_at"
194
+ });
195
+ const buildComponents = defineTable("build_components", {
196
+ id: "id",
197
+ projectId: "project_id",
198
+ buildId: "build_id",
199
+ importPath: "import_path",
200
+ title: "title",
201
+ storyCount: "story_count",
202
+ hash: "hash",
203
+ createdAt: "created_at"
204
+ });
205
+ const buildReviews = defineTable("build_reviews", {
206
+ id: "id",
207
+ buildId: "build_id",
208
+ userId: "user_id",
209
+ verdict: "verdict",
210
+ body: "body",
211
+ createdAt: "created_at"
212
+ });
213
+ const siteSettings = defineTable("site_settings", {
214
+ id: "id",
215
+ value: "value",
216
+ updatedBy: "updated_by",
217
+ createdAt: "created_at",
218
+ updatedAt: "updated_at"
219
+ });
46
220
  /** Stub schema bundled into the `Tables` map every fake serves. */
47
221
  const fakeSchema = {
48
- projects: defineTable("projects", {
49
- id: "id",
50
- name: "name",
51
- slug: "slug",
52
- gitRepository: "git_repository",
53
- gitDefaultBranch: "git_default_branch",
54
- pixelThreshold: "pixel_threshold",
55
- maxDiffRatio: "max_diff_ratio",
56
- publicBranchRegex: "public_branch_regex",
57
- storybookMeta: "storybook_meta",
58
- executePlay: "execute_play",
59
- playTimeoutMs: "play_timeout_ms",
60
- runA11y: "run_a11y",
61
- browser: "browser",
62
- viewports: "viewports",
63
- automigrate: "automigrate",
64
- createdAt: "created_at",
65
- updatedAt: "updated_at"
66
- }),
67
- projectStatusConfigs: defineTable("project_status_configs", {
68
- id: "id",
69
- projectId: "project_id",
70
- provider: "provider",
71
- config: "config",
72
- tokenEncrypted: "token_encrypted",
73
- createdAt: "created_at",
74
- updatedAt: "updated_at"
75
- }),
76
- builds: defineTable("builds", {
77
- id: "id",
78
- projectId: "project_id",
79
- gitSha: "git_sha",
80
- gitBranch: "git_branch",
81
- isDefault: "is_default",
82
- authorEmail: "author_email",
83
- authorName: "author_name",
84
- message: "message",
85
- public: "public",
86
- status: "status",
87
- snapshotCount: "snapshot_count",
88
- changedCount: "changed_count",
89
- approvedCount: "approved_count",
90
- rejectedCount: "rejected_count",
91
- affectedOnly: "affected_only",
92
- baselineSha: "baseline_sha",
93
- changedFiles: "changed_files",
94
- affectedImportPaths: "affected_import_paths",
95
- createdAt: "created_at",
96
- updatedAt: "updated_at"
97
- }),
98
- captureAttempts: defineTable("capture_attempts", {
99
- id: "id",
100
- projectId: "project_id",
101
- buildId: "build_id",
102
- attemptNo: "attempt_no",
103
- status: "status",
104
- error: "error",
105
- reqId: "req_id",
106
- storyCount: "story_count",
107
- failedCount: "failed_count",
108
- queuedAt: "queued_at",
109
- startedAt: "started_at",
110
- finishedAt: "finished_at",
111
- createdAt: "created_at",
112
- updatedAt: "updated_at"
113
- }),
222
+ projects,
223
+ builds,
224
+ captureAttempts,
114
225
  captureLogs: defineTable("capture_logs", {
115
226
  id: "id",
116
227
  projectId: "project_id",
@@ -122,7 +233,14 @@ const fakeSchema = {
122
233
  fields: "fields",
123
234
  createdAt: "created_at"
124
235
  }),
236
+ captureShards,
237
+ captureJobs,
238
+ buildComponents,
239
+ buildReviews,
240
+ siteSettings,
125
241
  snapshots: defineTable("snapshots", {
242
+ durationMs: "duration_ms",
243
+ a11yViolations: "a11y_violations",
126
244
  id: "id",
127
245
  projectId: "project_id",
128
246
  buildId: "build_id",
@@ -141,10 +259,14 @@ const fakeSchema = {
141
259
  status: "status",
142
260
  reviewedBy: "reviewed_by",
143
261
  reviewedAt: "reviewed_at",
262
+ designUrl: "design_url",
144
263
  infraHash: "infra_hash",
264
+ envChange: "env_change",
145
265
  inherited: "inherited",
146
266
  baselineId: "baseline_id",
147
267
  baselineVersion: "baseline_version",
268
+ mode: "mode",
269
+ browser: "browser",
148
270
  createdAt: "created_at",
149
271
  updatedAt: "updated_at"
150
272
  }),
@@ -157,6 +279,9 @@ const fakeSchema = {
157
279
  snapshotId: "snapshot_id",
158
280
  screenshotPath: "screenshot_path",
159
281
  infraHash: "infra_hash",
282
+ fingerprint: "fingerprint",
283
+ mode: "mode",
284
+ browser: "browser",
160
285
  createdAt: "created_at",
161
286
  updatedAt: "updated_at"
162
287
  }),
@@ -170,7 +295,8 @@ const fakeSchema = {
170
295
  parentId: "parent_id",
171
296
  resolved: "resolved",
172
297
  createdAt: "created_at",
173
- updatedAt: "updated_at"
298
+ updatedAt: "updated_at",
299
+ storyId: "story_id"
174
300
  }),
175
301
  labelTypes: defineTable("label_types", {
176
302
  id: "id",
@@ -189,6 +315,27 @@ const fakeSchema = {
189
315
  value: "value",
190
316
  createdAt: "created_at"
191
317
  }),
318
+ projectLinks: defineTable("project_links", {
319
+ id: "id",
320
+ downstreamId: "downstream_id",
321
+ upstreamId: "upstream_id",
322
+ packageName: "package_name",
323
+ createdAt: "created_at"
324
+ }),
325
+ designLinks,
326
+ designCredentials,
327
+ userConnections,
328
+ designNodes,
329
+ buildPackageUsage: defineTable("build_package_usage", {
330
+ id: "id",
331
+ projectId: "project_id",
332
+ buildId: "build_id",
333
+ storyImportPath: "story_import_path",
334
+ packageName: "package_name",
335
+ modulePath: "module_path",
336
+ version: "version",
337
+ createdAt: "created_at"
338
+ }),
192
339
  tokens: defineTable("tokens", {
193
340
  id: "id",
194
341
  projectId: "project_id",
@@ -243,6 +390,45 @@ const fakeSchema = {
243
390
  role: "role",
244
391
  createdAt: "created_at"
245
392
  }),
393
+ insights: defineTable("insights", {
394
+ id: "id",
395
+ projectId: "project_id",
396
+ buildId: "build_id",
397
+ kind: "kind",
398
+ windowKey: "window_key",
399
+ inputHash: "input_hash",
400
+ status: "status",
401
+ profile: "profile",
402
+ model: "model",
403
+ promptVersion: "prompt_version",
404
+ verdict: "verdict",
405
+ summary: "summary",
406
+ result: "result",
407
+ errorCode: "error_code",
408
+ createdAt: "created_at",
409
+ startedAt: "started_at",
410
+ finishedAt: "finished_at"
411
+ }),
412
+ aiUsage: defineTable("ai_usage", {
413
+ id: "id",
414
+ insightId: "insight_id",
415
+ projectId: "project_id",
416
+ profile: "profile",
417
+ task: "task",
418
+ model: "model",
419
+ inputTokens: "input_tokens",
420
+ outputTokens: "output_tokens",
421
+ estimated: "estimated",
422
+ images: "images",
423
+ status: "status",
424
+ createdAt: "created_at"
425
+ }),
426
+ aiBudgetAlerts: defineTable("ai_budget_alerts", {
427
+ id: "id",
428
+ day: "day",
429
+ threshold: "threshold",
430
+ createdAt: "created_at"
431
+ }),
246
432
  notificationChannels: defineTable("notification_channels", {
247
433
  id: "id",
248
434
  projectId: "project_id",
@@ -251,6 +437,8 @@ const fakeSchema = {
251
437
  secretEncrypted: "secret_encrypted",
252
438
  events: "events",
253
439
  enabled: "enabled",
440
+ lastError: "last_error",
441
+ lastErrorAt: "last_error_at",
254
442
  createdAt: "created_at",
255
443
  updatedAt: "updated_at"
256
444
  }),