cursedbelt-server 4.11.1 → 4.13.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 (471) hide show
  1. package/dist/server/_bunOnly.d.ts +1 -0
  2. package/dist/server/_bunOnly.js +12 -0
  3. package/dist/server/activity/index.d.ts +4 -4
  4. package/dist/server/activity/index.js +3 -3
  5. package/dist/server/activity/migrations.d.ts +1 -1
  6. package/dist/server/activity/shareSource.d.ts +1 -1
  7. package/dist/server/activity/shareSource.js +1 -1
  8. package/dist/server/activity/store.js +2 -2
  9. package/dist/server/analytics/index.d.ts +2 -2
  10. package/dist/server/analytics/index.js +2 -2
  11. package/dist/server/app.d.ts +4 -4
  12. package/dist/server/app.js +6 -6
  13. package/dist/server/audit/index.d.ts +2 -2
  14. package/dist/server/audit/index.js +2 -2
  15. package/dist/server/audit/migrations.d.ts +1 -1
  16. package/dist/server/audit/sqliteSink.js +2 -2
  17. package/dist/server/audit/sqliteSink.test.js +1 -1
  18. package/dist/server/auth/csrf.js +1 -1
  19. package/dist/server/auth/fileTokenSigner.d.ts +1 -1
  20. package/dist/server/auth/getOnly.d.ts +1 -1
  21. package/dist/server/auth/getOnly.js +1 -1
  22. package/dist/server/auth/index.d.ts +12 -12
  23. package/dist/server/auth/index.js +11 -11
  24. package/dist/server/auth/jwt.d.ts +1 -1
  25. package/dist/server/auth/middleware.d.ts +1 -1
  26. package/dist/server/auth/middleware.js +3 -3
  27. package/dist/server/auth/sessionStore.d.ts +2 -2
  28. package/dist/server/auth/types.d.ts +1 -1
  29. package/dist/server/bench/assert.d.ts +1 -1
  30. package/dist/server/bench/assert.js +1 -1
  31. package/dist/server/bench/cpuBudget.d.ts +4 -4
  32. package/dist/server/bench/cpuBudget.js +3 -3
  33. package/dist/server/bench/index.d.ts +6 -6
  34. package/dist/server/bench/index.js +6 -6
  35. package/dist/server/bench/recorder.d.ts +2 -2
  36. package/dist/server/bench/recorder.js +1 -1
  37. package/dist/server/bench/runBench.d.ts +2 -2
  38. package/dist/server/ctgr.d.ts +1 -1
  39. package/dist/server/ctgr.js +1 -1
  40. package/dist/server/d1/fakeD1.d.ts +1 -1
  41. package/dist/server/d1/fakeD1.js +1 -1
  42. package/dist/server/d1/index.d.ts +8 -8
  43. package/dist/server/d1/index.js +8 -8
  44. package/dist/server/d1/invocation.d.ts +1 -1
  45. package/dist/server/d1/invocation.js +2 -2
  46. package/dist/server/d1/kysely.d.ts +2 -2
  47. package/dist/server/d1/kysely.js +2 -2
  48. package/dist/server/d1/limits.d.ts +1 -1
  49. package/dist/server/d1/limits.js +1 -1
  50. package/dist/server/d1/local.d.ts +1 -1
  51. package/dist/server/d1/local.js +3 -3
  52. package/dist/server/d1/localBackup.d.ts +1 -1
  53. package/dist/server/d1/localBackup.js +2 -2
  54. package/dist/server/d1/remote.d.ts +1 -1
  55. package/dist/server/d1/remote.js +3 -3
  56. package/dist/server/d1/scheduling.d.ts +1 -1
  57. package/dist/server/d1/values.d.ts +1 -1
  58. package/dist/server/d1/values.js +1 -1
  59. package/dist/server/db/kysely.d.ts +1 -1
  60. package/dist/server/dropzone/index.d.ts +2 -2
  61. package/dist/server/dropzone/index.js +2 -2
  62. package/dist/server/guard/argon2Binding.js +1 -1
  63. package/dist/server/guard/index.d.ts +5 -5
  64. package/dist/server/guard/index.js +5 -5
  65. package/dist/server/guard/kdfWorker.d.ts +1 -1
  66. package/dist/server/guard/kdfWorker.js +3 -3
  67. package/dist/server/guard/kdfWorkerEntry.js +1 -1
  68. package/dist/server/guard/passwordVerifier.js +1 -1
  69. package/dist/server/guard/sessionSigner.d.ts +2 -2
  70. package/dist/server/guard/sessionSigner.js +1 -1
  71. package/dist/server/incidents/checks.d.ts +2 -2
  72. package/dist/server/incidents/index.d.ts +8 -8
  73. package/dist/server/incidents/index.js +8 -8
  74. package/dist/server/incidents/migrations.d.ts +1 -1
  75. package/dist/server/incidents/notifier.d.ts +3 -3
  76. package/dist/server/incidents/reporter.d.ts +1 -1
  77. package/dist/server/incidents/routes.d.ts +4 -4
  78. package/dist/server/incidents/routes.js +1 -1
  79. package/dist/server/incidents/store.d.ts +1 -1
  80. package/dist/server/incidents/store.js +3 -3
  81. package/dist/server/index.d.ts +26 -26
  82. package/dist/server/index.js +23 -23
  83. package/dist/server/jobs/fireQueue.d.ts +1 -1
  84. package/dist/server/jobs/fireQueue.js +3 -3
  85. package/dist/server/jobs/index.d.ts +7 -7
  86. package/dist/server/jobs/index.js +7 -7
  87. package/dist/server/jobs/logger.d.ts +1 -1
  88. package/dist/server/jobs/polling.d.ts +1 -1
  89. package/dist/server/jobs/polling.js +1 -1
  90. package/dist/server/jobs/runner.d.ts +1 -1
  91. package/dist/server/jobs/runner.js +5 -5
  92. package/dist/server/master-lock/accountsPage.d.ts +1 -1
  93. package/dist/server/master-lock/accountsPage.js +1 -1
  94. package/dist/server/master-lock/guard.d.ts +2 -2
  95. package/dist/server/master-lock/guard.js +2 -2
  96. package/dist/server/master-lock/index.d.ts +7 -7
  97. package/dist/server/master-lock/index.js +7 -7
  98. package/dist/server/master-lock/masterLock.d.ts +26 -49
  99. package/dist/server/master-lock/masterLock.js +48 -15
  100. package/dist/server/master-lock/principals.d.ts +1 -1
  101. package/dist/server/master-lock/principals.js +1 -1
  102. package/dist/server/master-lock/seed.d.ts +1 -1
  103. package/dist/server/master-lock/seed.js +1 -1
  104. package/dist/server/master-lock/store.d.ts +6 -1
  105. package/dist/server/master-lock/store.js +5 -0
  106. package/dist/server/media-bun/index.d.ts +3 -3
  107. package/dist/server/media-bun/index.js +3 -3
  108. package/dist/server/media-bun/video.d.ts +1 -1
  109. package/dist/server/media-bun/video.js +1 -1
  110. package/dist/server/metrics/telemetrySink.d.ts +1 -1
  111. package/dist/server/metrics/telemetrySink.js +1 -1
  112. package/dist/server/middleware/correlationId.d.ts +1 -1
  113. package/dist/server/middleware/errorEnvelope.d.ts +1 -1
  114. package/dist/server/middleware/errorEnvelope.js +1 -1
  115. package/dist/server/middleware/index.d.ts +10 -10
  116. package/dist/server/middleware/index.js +10 -10
  117. package/dist/server/middleware/rateLimit.js +1 -1
  118. package/dist/server/middleware/requestLogger.d.ts +3 -3
  119. package/dist/server/middleware/requestLogger.js +3 -3
  120. package/dist/server/middleware/zValidator.d.ts +1 -1
  121. package/dist/server/middleware/zValidator.js +1 -1
  122. package/dist/server/migration/runner.d.ts +1 -1
  123. package/dist/server/net/outboundGuard.js +1 -1
  124. package/dist/server/notifications/index.d.ts +7 -7
  125. package/dist/server/notifications/index.js +4 -4
  126. package/dist/server/notifications/migrations.d.ts +1 -1
  127. package/dist/server/notifications/routes.d.ts +1 -1
  128. package/dist/server/notifications/service.d.ts +1 -1
  129. package/dist/server/notifications/service.js +2 -2
  130. package/dist/server/resume/index.d.ts +2 -2
  131. package/dist/server/resume/index.js +2 -2
  132. package/dist/server/resume/routes.d.ts +1 -1
  133. package/dist/server/resume/routes.js +1 -1
  134. package/dist/server/retention/archive.js +1 -1
  135. package/dist/server/retention/fleet.d.ts +2 -2
  136. package/dist/server/retention/fleet.js +2 -2
  137. package/dist/server/retention/index.d.ts +6 -6
  138. package/dist/server/retention/index.js +6 -6
  139. package/dist/server/retention/store.d.ts +1 -1
  140. package/dist/server/retention/store.js +2 -2
  141. package/dist/server/retention/sweeper.d.ts +3 -3
  142. package/dist/server/retention/sweeper.js +2 -2
  143. package/dist/server/retention/target.d.ts +3 -3
  144. package/dist/server/retention/target.js +2 -2
  145. package/dist/server/search/index.d.ts +2 -2
  146. package/dist/server/search/index.js +2 -2
  147. package/dist/server/search/pgSearchProvider.js +2 -2
  148. package/dist/server/search/pgSearchProvider.pg.test.js +2 -2
  149. package/dist/server/sharing/index.d.ts +8 -8
  150. package/dist/server/sharing/index.js +5 -5
  151. package/dist/server/sharing/migrations.d.ts +1 -1
  152. package/dist/server/sharing/router.d.ts +1 -1
  153. package/dist/server/sharing/sql.js +1 -1
  154. package/dist/server/sharing/store.js +3 -3
  155. package/dist/server/sqlite/browse.js +1 -1
  156. package/dist/server/sqlite/export.js +1 -1
  157. package/dist/server/sqlite/import.js +1 -1
  158. package/dist/server/sqlite/index.d.ts +9 -9
  159. package/dist/server/sqlite/index.js +9 -9
  160. package/dist/server/sqlite/stats.js +1 -1
  161. package/dist/server/sqlite/viewer.js +2 -2
  162. package/dist/server/storage/binaryServerProcessing.d.ts +1 -1
  163. package/dist/server/storage/binaryServerProcessing.js +2 -2
  164. package/dist/server/storage/binaryServerStore.d.ts +2 -2
  165. package/dist/server/storage/binaryStore.d.ts +1 -1
  166. package/dist/server/storage/binaryStoreFake.d.ts +1 -1
  167. package/dist/server/storage/diskStore.d.ts +1 -1
  168. package/dist/server/storage/files/adapter.d.ts +4 -4
  169. package/dist/server/storage/files/adapter.js +1 -1
  170. package/dist/server/storage/files/catalogue.d.ts +3 -3
  171. package/dist/server/storage/files/catalogue.js +6 -6
  172. package/dist/server/storage/files/chunkedUpload.d.ts +3 -3
  173. package/dist/server/storage/files/chunkedUpload.js +1 -1
  174. package/dist/server/storage/files/fileRoutes.d.ts +4 -4
  175. package/dist/server/storage/files/fileRoutes.js +3 -3
  176. package/dist/server/storage/files/index.d.ts +9 -9
  177. package/dist/server/storage/files/index.js +8 -8
  178. package/dist/server/storage/files/migrations.d.ts +1 -1
  179. package/dist/server/storage/files/stack.d.ts +7 -7
  180. package/dist/server/storage/files/stack.js +10 -10
  181. package/dist/server/storage/files/storageOps.d.ts +1 -1
  182. package/dist/server/storage/files/types.d.ts +1 -1
  183. package/dist/server/storage/imageThumbnail.js +1 -1
  184. package/dist/server/storage/index.d.ts +15 -15
  185. package/dist/server/storage/index.js +14 -14
  186. package/dist/server/storage/mountMediaRoutes.d.ts +3 -3
  187. package/dist/server/storage/mountMediaRoutes.js +2 -2
  188. package/dist/server/storage/objectStoreMediaStore.d.ts +1 -1
  189. package/dist/server/storage/s3ObjectStore.js +1 -1
  190. package/dist/server/storage/sources.d.ts +2 -2
  191. package/dist/server/storage/sources.js +2 -2
  192. package/dist/server/storage/streamRange.d.ts +1 -1
  193. package/dist/server/storage/streamToken.js +1 -1
  194. package/dist/server/storage/videoProcessor.d.ts +1 -1
  195. package/dist/server/storage/videoProcessor.js +2 -2
  196. package/dist/server/sync/engine.d.ts +2 -2
  197. package/dist/server/sync/engine.js +1 -1
  198. package/dist/server/sync/http.d.ts +4 -4
  199. package/dist/server/sync/http.js +3 -3
  200. package/dist/server/sync/index.d.ts +11 -11
  201. package/dist/server/sync/index.js +11 -11
  202. package/dist/server/sync/opLog.d.ts +1 -1
  203. package/dist/server/sync/signal.d.ts +1 -1
  204. package/dist/server/sync/timer.d.ts +3 -3
  205. package/dist/server/sync/timer.js +1 -1
  206. package/dist/server/ws/eventBus.d.ts +1 -1
  207. package/dist/server/ws/hub.d.ts +1 -1
  208. package/dist/server/ws/hub.js +3 -3
  209. package/dist/server/ws/index.d.ts +5 -5
  210. package/dist/server/ws/index.js +4 -4
  211. package/dist/server/ws/presence.d.ts +1 -1
  212. package/dist/server/ws/room.d.ts +1 -1
  213. package/dist/server/ws/types.d.ts +1 -1
  214. package/package.json +9 -9
  215. package/src/publicSurface.spec.ts +1 -1
  216. package/src/server/_bunOnly.ts +15 -0
  217. package/src/server/activity/index.ts +4 -4
  218. package/src/server/activity/migrations.ts +1 -1
  219. package/src/server/activity/shareSource.ts +2 -2
  220. package/src/server/activity/store.spec.ts +3 -3
  221. package/src/server/activity/store.ts +2 -2
  222. package/src/server/analytics/index.ts +2 -2
  223. package/src/server/analytics/injectedScripts.spec.ts +3 -3
  224. package/src/server/analytics/webAnalytics.spec.ts +1 -1
  225. package/src/server/app.spec.ts +9 -9
  226. package/src/server/app.ts +7 -7
  227. package/src/server/audit/index.ts +2 -2
  228. package/src/server/audit/migrations.ts +1 -1
  229. package/src/server/audit/sqliteSink.test.ts +1 -1
  230. package/src/server/audit/sqliteSink.ts +2 -2
  231. package/src/server/auth/cookie.spec.ts +1 -1
  232. package/src/server/auth/csrf.spec.ts +1 -1
  233. package/src/server/auth/csrf.ts +1 -1
  234. package/src/server/auth/fileTokenSigner.ts +1 -1
  235. package/src/server/auth/getOnly.spec.ts +2 -2
  236. package/src/server/auth/getOnly.ts +2 -2
  237. package/src/server/auth/index.ts +12 -12
  238. package/src/server/auth/jwt.spec.ts +2 -2
  239. package/src/server/auth/jwt.ts +1 -1
  240. package/src/server/auth/loginThrottle.spec.ts +1 -1
  241. package/src/server/auth/middleware.spec.ts +7 -7
  242. package/src/server/auth/middleware.ts +4 -4
  243. package/src/server/auth/password.spec.ts +1 -1
  244. package/src/server/auth/sessionStore.spec.ts +3 -3
  245. package/src/server/auth/sessionStore.ts +3 -3
  246. package/src/server/auth/totp.spec.ts +1 -1
  247. package/src/server/auth/types.ts +1 -1
  248. package/src/server/auth/vault.spec.ts +1 -1
  249. package/src/server/bench/assert.ts +2 -2
  250. package/src/server/bench/budget.spec.ts +2 -2
  251. package/src/server/bench/cpuBudget.spec.ts +6 -6
  252. package/src/server/bench/cpuBudget.ts +5 -5
  253. package/src/server/bench/cpuClock.spec.ts +2 -2
  254. package/src/server/bench/index.ts +6 -6
  255. package/src/server/bench/recorder.ts +2 -2
  256. package/src/server/bench/runBench.ts +2 -2
  257. package/src/server/ctgr.spec.ts +2 -2
  258. package/src/server/ctgr.ts +2 -2
  259. package/src/server/d1/backup.spec.ts +2 -2
  260. package/src/server/d1/fakeD1.ts +2 -2
  261. package/src/server/d1/index.ts +8 -8
  262. package/src/server/d1/invocation.spec.ts +6 -6
  263. package/src/server/d1/invocation.ts +2 -2
  264. package/src/server/d1/kysely.spec.ts +5 -5
  265. package/src/server/d1/kysely.ts +3 -3
  266. package/src/server/d1/limits.spec.ts +3 -3
  267. package/src/server/d1/limits.ts +1 -1
  268. package/src/server/d1/local.ts +3 -3
  269. package/src/server/d1/localBackup.ts +3 -3
  270. package/src/server/d1/remote.ts +3 -3
  271. package/src/server/d1/sameShape.spec.ts +4 -4
  272. package/src/server/d1/scheduling.spec.ts +1 -1
  273. package/src/server/d1/scheduling.ts +1 -1
  274. package/src/server/d1/values.ts +1 -1
  275. package/src/server/db/kysely.spec.ts +1 -1
  276. package/src/server/db/kysely.ts +1 -1
  277. package/src/server/dropzone/index.ts +2 -2
  278. package/src/server/dropzone/scan.spec.ts +1 -1
  279. package/src/server/errors.spec.ts +1 -1
  280. package/src/server/guard/argon2Binding.spec.ts +1 -1
  281. package/src/server/guard/argon2Binding.ts +1 -1
  282. package/src/server/guard/argon2Kat.spec.ts +1 -1
  283. package/src/server/guard/guard.spec.ts +3 -3
  284. package/src/server/guard/index.ts +5 -5
  285. package/src/server/guard/kdfWorker.spec.ts +3 -3
  286. package/src/server/guard/kdfWorker.ts +3 -3
  287. package/src/server/guard/kdfWorkerEntry.ts +1 -1
  288. package/src/server/guard/passwordVerifier.spec.ts +1 -1
  289. package/src/server/guard/passwordVerifier.ts +1 -1
  290. package/src/server/guard/revocationStore.spec.ts +2 -2
  291. package/src/server/guard/sessionSigner.ts +3 -3
  292. package/src/server/incidents/checks.ts +2 -2
  293. package/src/server/incidents/incidents.spec.ts +7 -7
  294. package/src/server/incidents/index.ts +8 -8
  295. package/src/server/incidents/migrations.ts +1 -1
  296. package/src/server/incidents/notifier.ts +3 -3
  297. package/src/server/incidents/reporter.ts +1 -1
  298. package/src/server/incidents/routes.ts +5 -5
  299. package/src/server/incidents/store.ts +3 -3
  300. package/src/server/index.ts +26 -26
  301. package/src/server/jobs/fireQueue.spec.ts +1 -1
  302. package/src/server/jobs/fireQueue.ts +3 -3
  303. package/src/server/jobs/index.ts +7 -7
  304. package/src/server/jobs/logger.ts +1 -1
  305. package/src/server/jobs/plainjobAdapter.spec.ts +1 -1
  306. package/src/server/jobs/polling.spec.ts +1 -1
  307. package/src/server/jobs/polling.ts +2 -2
  308. package/src/server/jobs/runner.spec.ts +3 -3
  309. package/src/server/jobs/runner.ts +5 -5
  310. package/src/server/jobs/timeout.spec.ts +1 -1
  311. package/src/server/master-lock/accounts.spec.ts +2 -2
  312. package/src/server/master-lock/accountsPage.spec.ts +4 -4
  313. package/src/server/master-lock/accountsPage.ts +1 -1
  314. package/src/server/master-lock/beaconNeverReachesTheWall.spec.ts +4 -4
  315. package/src/server/master-lock/guard.spec.ts +3 -3
  316. package/src/server/master-lock/guard.ts +3 -3
  317. package/src/server/master-lock/index.ts +8 -7
  318. package/src/server/master-lock/lockPage.spec.ts +2 -2
  319. package/src/server/master-lock/masterLock.spec.ts +59 -2
  320. package/src/server/master-lock/masterLock.ts +76 -14
  321. package/src/server/master-lock/principals.spec.ts +4 -4
  322. package/src/server/master-lock/principals.ts +1 -1
  323. package/src/server/master-lock/seed.spec.ts +3 -3
  324. package/src/server/master-lock/seed.ts +1 -1
  325. package/src/server/master-lock/store.ts +7 -1
  326. package/src/server/media-bun/image.spec.ts +1 -1
  327. package/src/server/media-bun/index.ts +3 -3
  328. package/src/server/media-bun/streaming.spec.ts +1 -1
  329. package/src/server/media-bun/video.spec.ts +1 -1
  330. package/src/server/media-bun/video.ts +1 -1
  331. package/src/server/metrics/normalizeRoute.spec.ts +1 -1
  332. package/src/server/metrics/telemetrySink.spec.ts +3 -3
  333. package/src/server/metrics/telemetrySink.ts +1 -1
  334. package/src/server/middleware/bodyLimit.spec.ts +1 -1
  335. package/src/server/middleware/correlationId.ts +1 -1
  336. package/src/server/middleware/corsAllowlist.spec.ts +2 -2
  337. package/src/server/middleware/errorEnvelope.ts +2 -2
  338. package/src/server/middleware/index.ts +10 -10
  339. package/src/server/middleware/localOrigin.spec.ts +1 -1
  340. package/src/server/middleware/rateLimit.spec.ts +1 -1
  341. package/src/server/middleware/rateLimit.ts +1 -1
  342. package/src/server/middleware/requestLogger.ts +5 -5
  343. package/src/server/middleware/zValidator.spec.ts +4 -4
  344. package/src/server/middleware/zValidator.ts +2 -2
  345. package/src/server/migration/runner.spec.ts +2 -2
  346. package/src/server/migration/runner.ts +1 -1
  347. package/src/server/net/outboundGuard.spec.ts +1 -1
  348. package/src/server/net/outboundGuard.ts +1 -1
  349. package/src/server/notifications/index.ts +7 -7
  350. package/src/server/notifications/migrations.ts +1 -1
  351. package/src/server/notifications/routes.ts +1 -1
  352. package/src/server/notifications/service.spec.ts +3 -3
  353. package/src/server/notifications/service.ts +2 -2
  354. package/src/server/paths/appDataHome.spec.ts +1 -1
  355. package/src/server/resume/index.ts +2 -2
  356. package/src/server/resume/resume.spec.ts +2 -2
  357. package/src/server/resume/routes.ts +1 -1
  358. package/src/server/retention/archive.spec.ts +2 -2
  359. package/src/server/retention/archive.ts +1 -1
  360. package/src/server/retention/fleet.ts +4 -4
  361. package/src/server/retention/index.ts +6 -6
  362. package/src/server/retention/policy.spec.ts +1 -1
  363. package/src/server/retention/store.spec.ts +3 -3
  364. package/src/server/retention/store.ts +3 -3
  365. package/src/server/retention/sweeper.spec.ts +5 -5
  366. package/src/server/retention/sweeper.ts +5 -5
  367. package/src/server/retention/target.spec.ts +3 -3
  368. package/src/server/retention/target.ts +5 -5
  369. package/src/server/search/index.ts +2 -2
  370. package/src/server/search/pgSearchProvider.pg.test.ts +2 -2
  371. package/src/server/search/pgSearchProvider.ts +2 -2
  372. package/src/server/sharing/index.ts +8 -8
  373. package/src/server/sharing/migrations.ts +1 -1
  374. package/src/server/sharing/router.spec.ts +2 -2
  375. package/src/server/sharing/router.ts +1 -1
  376. package/src/server/sharing/sql.ts +1 -1
  377. package/src/server/sharing/store.spec.ts +2 -2
  378. package/src/server/sharing/store.ts +3 -3
  379. package/src/server/sqlite/backup.spec.ts +1 -1
  380. package/src/server/sqlite/browse.spec.ts +1 -1
  381. package/src/server/sqlite/browse.ts +1 -1
  382. package/src/server/sqlite/export.spec.ts +2 -2
  383. package/src/server/sqlite/export.ts +1 -1
  384. package/src/server/sqlite/fts5.spec.ts +1 -1
  385. package/src/server/sqlite/health.spec.ts +1 -1
  386. package/src/server/sqlite/import.spec.ts +3 -3
  387. package/src/server/sqlite/import.ts +1 -1
  388. package/src/server/sqlite/index.ts +9 -9
  389. package/src/server/sqlite/readonlySql.spec.ts +1 -1
  390. package/src/server/sqlite/stats.spec.ts +1 -1
  391. package/src/server/sqlite/stats.ts +1 -1
  392. package/src/server/sqlite/viewer.spec.ts +1 -1
  393. package/src/server/sqlite/viewer.ts +2 -2
  394. package/src/server/storage/binaryServerProcessing.integration.spec.ts +2 -2
  395. package/src/server/storage/binaryServerProcessing.spec.ts +2 -2
  396. package/src/server/storage/binaryServerProcessing.ts +3 -3
  397. package/src/server/storage/binaryServerStore.ts +3 -3
  398. package/src/server/storage/binaryStore.spec.ts +2 -2
  399. package/src/server/storage/binaryStore.ts +1 -1
  400. package/src/server/storage/binaryStoreFake.ts +1 -1
  401. package/src/server/storage/chunked.integration.spec.ts +4 -4
  402. package/src/server/storage/diskStore.ts +1 -1
  403. package/src/server/storage/fileUploadClient-chunked.integration.spec.ts +6 -6
  404. package/src/server/storage/fileUploadClient.integration.spec.ts +7 -7
  405. package/src/server/storage/files/adapter.photo.display.spec.ts +10 -10
  406. package/src/server/storage/files/adapter.photo.spec.ts +9 -9
  407. package/src/server/storage/files/adapter.spec.ts +8 -8
  408. package/src/server/storage/files/adapter.ts +5 -5
  409. package/src/server/storage/files/catalogue.media-host.spec.ts +6 -6
  410. package/src/server/storage/files/catalogue.orderings.spec.ts +6 -6
  411. package/src/server/storage/files/catalogue.recover.spec.ts +5 -5
  412. package/src/server/storage/files/catalogue.sort.spec.ts +6 -6
  413. package/src/server/storage/files/catalogue.spec.ts +7 -7
  414. package/src/server/storage/files/catalogue.trash-import.spec.ts +6 -6
  415. package/src/server/storage/files/catalogue.ts +6 -6
  416. package/src/server/storage/files/chunkedUpload.spec.ts +7 -7
  417. package/src/server/storage/files/chunkedUpload.ts +4 -4
  418. package/src/server/storage/files/collections.spec.ts +6 -6
  419. package/src/server/storage/files/fileRoutes.replace.spec.ts +8 -8
  420. package/src/server/storage/files/fileRoutes.spec.ts +8 -8
  421. package/src/server/storage/files/fileRoutes.ts +6 -6
  422. package/src/server/storage/files/index.ts +9 -9
  423. package/src/server/storage/files/migrations.ts +1 -1
  424. package/src/server/storage/files/stack.spec.ts +5 -5
  425. package/src/server/storage/files/stack.ts +12 -12
  426. package/src/server/storage/files/storageOps.spec.ts +4 -4
  427. package/src/server/storage/files/storageOps.ts +1 -1
  428. package/src/server/storage/files/types.ts +1 -1
  429. package/src/server/storage/imageThumbnail.spec.ts +2 -2
  430. package/src/server/storage/imageThumbnail.ts +1 -1
  431. package/src/server/storage/index.ts +15 -15
  432. package/src/server/storage/mountMediaRoutes.ts +4 -4
  433. package/src/server/storage/objectStore.spec.ts +1 -1
  434. package/src/server/storage/objectStoreMediaStore.ts +1 -1
  435. package/src/server/storage/s3ObjectStore.ts +1 -1
  436. package/src/server/storage/sources.ts +3 -3
  437. package/src/server/storage/storage.spec.ts +6 -6
  438. package/src/server/storage/streamRange.ts +1 -1
  439. package/src/server/storage/streamToken.ts +1 -1
  440. package/src/server/storage/transcodeJobs.spec.ts +1 -1
  441. package/src/server/storage/videoDerivativeKeys.spec.ts +1 -1
  442. package/src/server/storage/videoProcessor.posterOnly.spec.ts +4 -4
  443. package/src/server/storage/videoProcessor.ts +2 -2
  444. package/src/server/sync/alarm.spec.ts +1 -1
  445. package/src/server/sync/commands.spec.ts +1 -1
  446. package/src/server/sync/engine.spec.ts +4 -4
  447. package/src/server/sync/engine.ts +2 -2
  448. package/src/server/sync/http.ts +5 -5
  449. package/src/server/sync/httpRemote.spec.ts +1 -1
  450. package/src/server/sync/index.ts +11 -11
  451. package/src/server/sync/opLog.spec.ts +1 -1
  452. package/src/server/sync/opLog.ts +1 -1
  453. package/src/server/sync/planner.spec.ts +1 -1
  454. package/src/server/sync/signal.spec.ts +1 -1
  455. package/src/server/sync/signal.ts +1 -1
  456. package/src/server/sync/status.spec.ts +1 -1
  457. package/src/server/sync/timer.spec.ts +3 -3
  458. package/src/server/sync/timer.ts +3 -3
  459. package/src/server/sync/tokens.spec.ts +1 -1
  460. package/src/server/ws/eventBus.spec.ts +2 -2
  461. package/src/server/ws/eventBus.ts +1 -1
  462. package/src/server/ws/hub.integration.spec.ts +5 -5
  463. package/src/server/ws/hub.spec.ts +3 -3
  464. package/src/server/ws/hub.ts +4 -4
  465. package/src/server/ws/index.ts +5 -5
  466. package/src/server/ws/presence.spec.ts +3 -3
  467. package/src/server/ws/presence.ts +1 -1
  468. package/src/server/ws/room.spec.ts +2 -2
  469. package/src/server/ws/room.ts +1 -1
  470. package/src/server/ws/types.ts +1 -1
  471. package/src/testTmpRoot.spec.ts +1 -1
@@ -53,14 +53,14 @@ export {
53
53
  type IncidentChannel,
54
54
  type SendEmail,
55
55
  type TextChannelOptions,
56
- } from "./channels";
56
+ } from "./channels.js";
57
57
  export {
58
58
  type CheckOutcome,
59
59
  type IncidentCheck,
60
60
  runIncidentSweep,
61
61
  type SweepResult,
62
- } from "./checks";
63
- export { INCIDENT_MIGRATIONS, INCIDENTS_TABLE } from "./migrations";
62
+ } from "./checks.js";
63
+ export { INCIDENT_MIGRATIONS, INCIDENTS_TABLE } from "./migrations.js";
64
64
  export {
65
65
  type AnnounceResult,
66
66
  composeOpened,
@@ -68,23 +68,23 @@ export {
68
68
  type CreateNotifierOptions,
69
69
  createIncidentNotifier,
70
70
  type IncidentNotifier,
71
- } from "./notifier";
71
+ } from "./notifier.js";
72
72
  export {
73
73
  createIncidentReporter,
74
74
  type IncidentReporter,
75
75
  type IncidentReporterOptions,
76
- } from "./reporter";
76
+ } from "./reporter.js";
77
77
  export {
78
78
  type IncidentRoutesOptions,
79
79
  mountIncidentMachineRoutes,
80
80
  mountIncidentOwnerRoutes,
81
- } from "./routes";
81
+ } from "./routes.js";
82
82
  export {
83
83
  assertNoContent,
84
84
  createIncidentStore,
85
85
  type IncidentStore,
86
86
  type ReconcileOptions,
87
- } from "./store";
87
+ } from "./store.js";
88
88
  export {
89
89
  fingerprint,
90
90
  type Incident,
@@ -93,4 +93,4 @@ export {
93
93
  type IncidentSeverity,
94
94
  type IncidentState,
95
95
  type IncidentTransitions,
96
- } from "./types";
96
+ } from "./types.js";
@@ -1,5 +1,5 @@
1
1
  import type { Database } from "bun:sqlite";
2
- import type { Migration } from "../migration/types";
2
+ import type { Migration } from "../migration/types.js";
3
3
 
4
4
  /** The one table this primitive owns. */
5
5
  export const INCIDENTS_TABLE = "incidents";
@@ -28,9 +28,9 @@
28
28
  * the store (`assertNoContent`). A text message is the least private surface
29
29
  * this fleet has and several of its apps are private by construction.
30
30
  */
31
- import type { ChannelMessage, ChannelResult, IncidentChannel } from "./channels";
32
- import type { IncidentStore } from "./store";
33
- import type { Incident, IncidentTransitions } from "./types";
31
+ import type { ChannelMessage, ChannelResult, IncidentChannel } from "./channels.js";
32
+ import type { IncidentStore } from "./store.js";
33
+ import type { Incident, IncidentTransitions } from "./types.js";
34
34
 
35
35
  export interface IncidentNotifier {
36
36
  /** Send for every transition in `t`. Returns one result per message sent. */
@@ -28,7 +28,7 @@
28
28
  * than one with no alerting. Every failure here is logged and swallowed, and the
29
29
  * console notices the silence by other means (the service's own health probe).
30
30
  */
31
- import type { IncidentReport } from "./types";
31
+ import type { IncidentReport } from "./types.js";
32
32
 
33
33
  export interface IncidentReporterOptions {
34
34
  /** e.g. `http://127.0.0.1:3024/api/station/incidents/report`. */
@@ -35,11 +35,11 @@
35
35
  * correct.
36
36
  */
37
37
  import type { Hono } from "hono";
38
- import type { IncidentChannel } from "./channels";
39
- import type { IncidentNotifier } from "./notifier";
40
- import { assertNoContent, type IncidentStore } from "./store";
41
- import type { IncidentReport, IncidentSeverity } from "./types";
42
- import type { SweepResult } from "./checks";
38
+ import type { IncidentChannel } from "./channels.js";
39
+ import type { IncidentNotifier } from "./notifier.js";
40
+ import { assertNoContent, type IncidentStore } from "./store.js";
41
+ import type { IncidentReport, IncidentSeverity } from "./types.js";
42
+ import type { SweepResult } from "./checks.js";
43
43
 
44
44
  const noStore = { "cache-control": "no-store" } as const;
45
45
 
@@ -28,15 +28,15 @@
28
28
  * of all across the restart a deploy of the console itself performs.
29
29
  */
30
30
  import type { Database } from "bun:sqlite";
31
- import { runMigrations } from "../migration/runner";
32
- import { INCIDENT_MIGRATIONS, INCIDENTS_TABLE } from "./migrations";
31
+ import { runMigrations } from "../migration/runner.js";
32
+ import { INCIDENT_MIGRATIONS, INCIDENTS_TABLE } from "./migrations.js";
33
33
  import {
34
34
  fingerprint,
35
35
  type Incident,
36
36
  type IncidentFact,
37
37
  type IncidentReport,
38
38
  type IncidentTransitions,
39
- } from "./types";
39
+ } from "./types.js";
40
40
 
41
41
  interface Row {
42
42
  fingerprint: string;
@@ -19,7 +19,7 @@ export {
19
19
  type UploadedFile,
20
20
  } from 'cursedbelt-core/ctgr';
21
21
  // ── HTTP app ────────────────────────────────────────────────────────────────
22
- export { type CreateAppOpts, createApp, type ServeBunOpts, serveBun } from './app';
22
+ export { type CreateAppOpts, createApp, type ServeBunOpts, serveBun } from './app.js';
23
23
  // ── Auth toolkit (task 26): jose JWT, cookies, CSRF, getOnly, session store, ──
24
24
  // login throttle, argon2id passwords, TOTP, vault crypto, the composed middleware.
25
25
  export {
@@ -65,11 +65,11 @@ export {
65
65
  verifyRecoveryCode,
66
66
  verifyToken,
67
67
  verifyTotpCode,
68
- } from './auth';
69
- export type { CursedbeltEnv, CursedbeltVariables } from './context';
70
- export { buildRoutes, CTGR_ROUTE_PATTERN, getCtgrDecoded, unGETify } from './ctgr';
68
+ } from './auth/index.js';
69
+ export type { CursedbeltEnv, CursedbeltVariables } from './context.js';
70
+ export { buildRoutes, CTGR_ROUTE_PATTERN, getCtgrDecoded, unGETify } from './ctgr.js';
71
71
  // ── Kysely-typed plumbing tables ────────────────────────────────────────────
72
- export { createKysely, type PlumbingDb } from './db/kysely';
72
+ export { createKysely, type PlumbingDb } from './db/kysely.js';
73
73
  export type {
74
74
  AppConfigRow,
75
75
  AuthSessionRow,
@@ -81,7 +81,7 @@ export type {
81
81
  PlumbingSchema,
82
82
  RequestMetricRow,
83
83
  SystemSampleRow,
84
- } from './db/plumbingTypes';
84
+ } from './db/plumbingTypes.js';
85
85
  // ── Errors ──────────────────────────────────────────────────────────────────
86
86
  export {
87
87
  ApiError,
@@ -93,7 +93,7 @@ export {
93
93
  VALIDATION_ERROR_CODE,
94
94
  type ValidationIssue,
95
95
  validationEnvelope,
96
- } from './errors';
96
+ } from './errors.js';
97
97
  // ── Jobs & scheduler (task 29): plainjob-backed cron runner + restart-aware ───
98
98
  // pollers + the due-row fire queue. App job *definitions* stay business.
99
99
  export {
@@ -114,7 +114,7 @@ export {
114
114
  JobTimeoutError,
115
115
  type PollingJob,
116
116
  type PollingJobOpts,
117
- } from './jobs';
117
+ } from './jobs/index.js';
118
118
  // ── Media adapter (task 19): image rendering via sharp (lazy/optional peer) + ──
119
119
  // video trim / probe / thumbnail via native ffmpeg. Also at the dedicated
120
120
  // media-bun entry below; sharp is imported lazily inside renderImage,
@@ -135,15 +135,15 @@ export {
135
135
  trimVideo,
136
136
  type VideoCodecPlan,
137
137
  videoCodecPlan,
138
- } from './media-bun';
138
+ } from './media-bun/index.js';
139
139
  // ── Metrics ───────────────────────────────────────────────────────────────────
140
140
  export {
141
141
  createMetricsBuffer,
142
142
  type MetricRow,
143
143
  type MetricsBuffer,
144
144
  type MetricsBufferOptions,
145
- } from './metrics/metricsBuffer';
146
- export { normalizeRoute } from './metrics/normalizeRoute';
145
+ } from './metrics/metricsBuffer.js';
146
+ export { normalizeRoute } from './metrics/normalizeRoute.js';
147
147
  export {
148
148
  type AnalyticsEngineDataset,
149
149
  createTelemetrySink,
@@ -152,26 +152,26 @@ export {
152
152
  type TelemetrySink,
153
153
  type TelemetrySinkOptions,
154
154
  toDataPoint,
155
- } from './metrics/telemetrySink';
155
+ } from './metrics/telemetrySink.js';
156
156
  // ── Middleware ────────────────────────────────────────────────────────────────
157
- export { correlationId } from './middleware/correlationId';
158
- export { type CorsOpts, corsAllowlist, corsOptsFromEnv } from './middleware/corsAllowlist';
159
- export { errorEnvelope } from './middleware/errorEnvelope';
160
- export { crossOriginRefusal } from './middleware/localOrigin';
161
- export { clientIp, createRateLimiter, type RateLimitOpts } from './middleware/rateLimit';
162
- export { type RequestLoggerOpts, requestLogger } from './middleware/requestLogger';
157
+ export { correlationId } from './middleware/correlationId.js';
158
+ export { type CorsOpts, corsAllowlist, corsOptsFromEnv } from './middleware/corsAllowlist.js';
159
+ export { errorEnvelope } from './middleware/errorEnvelope.js';
160
+ export { crossOriginRefusal } from './middleware/localOrigin.js';
161
+ export { clientIp, createRateLimiter, type RateLimitOpts } from './middleware/rateLimit.js';
162
+ export { type RequestLoggerOpts, requestLogger } from './middleware/requestLogger.js';
163
163
  export {
164
164
  type CspDirectives,
165
165
  type SecurityHeadersOpts,
166
166
  securityHeaders,
167
- } from './middleware/securityHeaders';
167
+ } from './middleware/securityHeaders.js';
168
168
  // ── zod validation toolkit ────────────────────────────────────────────────────
169
169
  // (the `validationEnvelope`/`toValidationIssues`/`ValidationIssue` builders now
170
170
  // live with the canonical envelope in `./errors`, re-exported above.)
171
- export { type ZValidatorTarget, zValidator } from './middleware/zValidator';
171
+ export { type ZValidatorTarget, zValidator } from './middleware/zValidator.js';
172
172
  // ── Migration runner ──────────────────────────────────────────────────────────
173
- export { addColumnIfMissing, applyRecommendedPragmas, columnExists, runMigrations } from './migration/runner';
174
- export type { Migration } from './migration/types';
173
+ export { addColumnIfMissing, applyRecommendedPragmas, columnExists, runMigrations } from './migration/runner.js';
174
+ export type { Migration } from './migration/types.js';
175
175
  // ── Audit log: the SQLite-backed AuditSink cursedshell's service dispatch ─────
176
176
  // writes to (see `cwip/audit` for the storage-agnostic contract + the
177
177
  // zero-config in-memory default).
@@ -181,7 +181,7 @@ export {
181
181
  auditStateAtVersion,
182
182
  auditStep,
183
183
  createSqliteAuditSink,
184
- } from './audit';
184
+ } from './audit/index.js';
185
185
  // ── SQLite toolkit extras (task 30): FTS5 ranked search + DDL generator, the ───
186
186
  // read-only DB viewer middleware, the VACUUM-INTO backup service, DB health probes.
187
187
  export {
@@ -232,7 +232,7 @@ export {
232
232
  type TableExportFormat,
233
233
  type TableStat,
234
234
  UnknownTableError,
235
- } from './sqlite';
235
+ } from './sqlite/index.js';
236
236
  // ── WebSocket hub (task 28): Bun-native upgrade, channel registry, heartbeat, ──
237
237
  // presence-as-a-view, room helpers, and the push-only event-bus subset (ru).
238
238
  export {
@@ -254,9 +254,9 @@ export {
254
254
  type WsHub,
255
255
  type WsHubOpts,
256
256
  type WsMessage,
257
- } from './ws';
257
+ } from './ws/index.js';
258
258
 
259
259
  // The app-data root resolver. Exported at the root (2026-09-15, task 148) because
260
260
  // `cursedbelt-cc`'s localHost needs it and it answers a question about the HOST, not
261
261
  // about any one subsystem — so no subpath barrel is its natural home.
262
- export { resolveAppDataHome } from './paths/appDataHome';
262
+ export { resolveAppDataHome } from './paths/appDataHome.js';
@@ -1,6 +1,6 @@
1
1
  import { Database } from 'bun:sqlite';
2
2
  import { afterEach, beforeEach, describe, expect, test } from 'bun:test';
3
- import { createFireQueue } from './fireQueue';
3
+ import { createFireQueue } from './fireQueue.js';
4
4
 
5
5
  const JOB_STATE_DDL = `CREATE TABLE job_state (name TEXT PRIMARY KEY, last_run_at TEXT, meta TEXT)`;
6
6
  const sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
@@ -1,6 +1,6 @@
1
- import { defaultJobLogger } from './logger';
2
- import { createPollingJob } from './polling';
3
- import { DEFAULT_FIRE_INTERVAL_MS, type FireQueue, type FireQueueOpts } from './types';
1
+ import { defaultJobLogger } from './logger.js';
2
+ import { createPollingJob } from './polling.js';
3
+ import { DEFAULT_FIRE_INTERVAL_MS, type FireQueue, type FireQueueOpts } from './types.js';
4
4
 
5
5
  /**
6
6
  * The "select due rows → deliver each → mark sent" pattern, as a {@link PollingJob}.
@@ -3,12 +3,12 @@
3
3
  // restart-aware pollers, the due-row fire queue, run auditing); app job
4
4
  // *definitions* stay business and consume these primitives.
5
5
 
6
- export { createFireQueue } from './fireQueue';
7
- export { defaultJobLogger } from './logger';
8
- export { createPlainjobConnection } from './plainjobAdapter';
9
- export { createPollingJob } from './polling';
10
- export { createJobRunner } from './runner';
11
- export { JobTimeoutError } from './timeout';
6
+ export { createFireQueue } from './fireQueue.js';
7
+ export { defaultJobLogger } from './logger.js';
8
+ export { createPlainjobConnection } from './plainjobAdapter.js';
9
+ export { createPollingJob } from './polling.js';
10
+ export { createJobRunner } from './runner.js';
11
+ export { JobTimeoutError } from './timeout.js';
12
12
  export {
13
13
  type CreateJobRunnerOptions,
14
14
  DEFAULT_FIRE_INTERVAL_MS,
@@ -24,4 +24,4 @@ export {
24
24
  type JobRunRecord,
25
25
  type PollingJob,
26
26
  type PollingJobOpts,
27
- } from './types';
27
+ } from './types.js';
@@ -1,4 +1,4 @@
1
- import type { JobLogger } from './types';
1
+ import type { JobLogger } from './types.js';
2
2
 
3
3
  /**
4
4
  * The default job logger: warn/info/error go to the console, `debug` is a no-op.
@@ -1,6 +1,6 @@
1
1
  import { Database } from 'bun:sqlite';
2
2
  import { afterEach, beforeEach, describe, expect, test } from 'bun:test';
3
- import { createPlainjobConnection } from './plainjobAdapter';
3
+ import { createPlainjobConnection } from './plainjobAdapter.js';
4
4
 
5
5
  describe('createPlainjobConnection', () => {
6
6
  let db: Database;
@@ -1,6 +1,6 @@
1
1
  import { Database } from 'bun:sqlite';
2
2
  import { afterEach, beforeEach, describe, expect, test } from 'bun:test';
3
- import { createPollingJob } from './polling';
3
+ import { createPollingJob } from './polling.js';
4
4
 
5
5
  const JOB_STATE_DDL = `CREATE TABLE job_state (
6
6
  name TEXT PRIMARY KEY,
@@ -1,5 +1,5 @@
1
- import { defaultJobLogger } from './logger';
2
- import type { JobContext, PollingJob, PollingJobOpts } from './types';
1
+ import { defaultJobLogger } from './logger.js';
2
+ import type { JobContext, PollingJob, PollingJobOpts } from './types.js';
3
3
 
4
4
  /**
5
5
  * A periodic, restart-aware poller — the engine behind ca's `setInterval`
@@ -1,8 +1,8 @@
1
1
  import { Database } from 'bun:sqlite';
2
2
  import { afterEach, beforeEach, describe, expect, test } from 'bun:test';
3
- import { ApiError } from '../errors';
4
- import { createJobRunner } from './runner';
5
- import { JobTimeoutError } from './timeout';
3
+ import { ApiError } from '../errors.js';
4
+ import { createJobRunner } from './runner.js';
5
+ import { JobTimeoutError } from './timeout.js';
6
6
 
7
7
  const JOB_RUNS_DDL = `CREATE TABLE job_runs (
8
8
  id TEXT PRIMARY KEY,
@@ -1,9 +1,9 @@
1
1
  import type { Database } from 'bun:sqlite';
2
2
  import { defineQueue, defineWorker, type Queue, type Worker } from 'plainjob';
3
- import { ApiError } from '../errors';
4
- import { defaultJobLogger } from './logger';
5
- import { createPlainjobConnection } from './plainjobAdapter';
6
- import { withTimeout } from './timeout';
3
+ import { ApiError } from '../errors.js';
4
+ import { defaultJobLogger } from './logger.js';
5
+ import { createPlainjobConnection } from './plainjobAdapter.js';
6
+ import { withTimeout } from './timeout.js';
7
7
  import {
8
8
  type CreateJobRunnerOptions,
9
9
  DEFAULT_JOB_RETENTION,
@@ -13,7 +13,7 @@ import {
13
13
  type JobLogger,
14
14
  type JobRunner,
15
15
  type JobRunRecord,
16
- } from './types';
16
+ } from './types.js';
17
17
 
18
18
  /**
19
19
  * Create the durable cron job runner — a thin facade over **plainjob** (MIT,
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, test } from 'bun:test';
2
- import { JobTimeoutError, withTimeout } from './timeout';
2
+ import { JobTimeoutError, withTimeout } from './timeout.js';
3
3
 
4
4
  const sleep = (ms: number) => new Promise<void>((r) => setTimeout(r, ms));
5
5
 
@@ -20,8 +20,8 @@ import {
20
20
  type MasterLockKdfParams,
21
21
  deriveMasterLockVerifier,
22
22
  } from "cursedbelt-core/master-lock";
23
- import { FIRST_ACCOUNT_ID, MasterLock, readRecord } from "./masterLock";
24
- import { createMemoryMasterLockStore } from "./store";
23
+ import { FIRST_ACCOUNT_ID, MasterLock, readRecord } from "./masterLock.js";
24
+ import { createMemoryMasterLockStore } from "./store.js";
25
25
 
26
26
  /** `iter: 1` — the ROUND COUNT is pinned in `cursedbelt-core`'s `kdf.spec.ts`; 600k × N
27
27
  * argon2 verifies here would be minutes of gate for nothing this file is testing. */
@@ -22,10 +22,10 @@ import {
22
22
  MASTER_LOCK_ACCOUNTS_SCRIPT,
23
23
  MASTER_LOCK_ACCOUNTS_STYLE,
24
24
  accountsPageHtml,
25
- } from "./accountsPage";
26
- import { createMasterLockGuard } from "./guard";
27
- import { MasterLock } from "./masterLock";
28
- import { createMemoryMasterLockStore } from "./store";
25
+ } from "./accountsPage.js";
26
+ import { createMasterLockGuard } from "./guard.js";
27
+ import { MasterLock } from "./masterLock.js";
28
+ import { createMemoryMasterLockStore } from "./store.js";
29
29
 
30
30
  const KDF: MasterLockKdfParams = {
31
31
  v: 1,
@@ -33,7 +33,7 @@
33
33
  * only be watching one of them.
34
34
  */
35
35
  import { MASTER_LOCK_PATHS, MASTER_LOCK_PREFIX } from "cursedbelt-core/master-lock";
36
- import { MASTER_LOCK_DERIVE_SOURCE, type LockPageOptions } from "./lockPage";
36
+ import { MASTER_LOCK_DERIVE_SOURCE, type LockPageOptions } from "./lockPage.js";
37
37
 
38
38
  /**
39
39
  * The page's own two assets.
@@ -12,10 +12,10 @@ import {
12
12
  foreignScriptSources,
13
13
  htmlCarriesWebAnalytics,
14
14
  scriptsRefusedByCsp,
15
- } from "../analytics";
16
- import { MASTER_LOCK_CSP, createMasterLockGuard } from "./guard";
17
- import { MasterLock } from "./masterLock";
18
- import { createMemoryMasterLockStore } from "./store";
15
+ } from "../analytics/index.js";
16
+ import { MASTER_LOCK_CSP, createMasterLockGuard } from "./guard.js";
17
+ import { MasterLock } from "./masterLock.js";
18
+ import { createMemoryMasterLockStore } from "./store.js";
19
19
 
20
20
  /**
21
21
  * 🔴 **The wall never carries the beacon, and the public shells always do.** Both halves, in
@@ -13,9 +13,9 @@ import {
13
13
  deriveMasterLockVerifier,
14
14
  newMasterLockKdfParams,
15
15
  } from "cursedbelt-core/master-lock";
16
- import { createMasterLockGuard } from "./guard";
17
- import { MasterLock } from "./masterLock";
18
- import { createMemoryMasterLockStore } from "./store";
16
+ import { createMasterLockGuard } from "./guard.js";
17
+ import { MasterLock } from "./masterLock.js";
18
+ import { createMemoryMasterLockStore } from "./store.js";
19
19
 
20
20
  const KDF: MasterLockKdfParams = {
21
21
  v: 1,
@@ -22,9 +22,9 @@ import {
22
22
  MASTER_LOCK_ACCOUNTS_SCRIPT,
23
23
  MASTER_LOCK_ACCOUNTS_STYLE,
24
24
  accountsPageHtml,
25
- } from "./accountsPage";
26
- import { LOCK_SCRIPT, LOCK_STYLE, type LockPageOptions, lockPageHtml } from "./lockPage";
27
- import type { MasterLock } from "./masterLock";
25
+ } from "./accountsPage.js";
26
+ import { LOCK_SCRIPT, LOCK_STYLE, type LockPageOptions, lockPageHtml } from "./lockPage.js";
27
+ import type { MasterLock } from "./masterLock.js";
28
28
 
29
29
  export interface MasterLockGuardOptions extends LockPageOptions {
30
30
  /**
@@ -26,26 +26,26 @@ export {
26
26
  MASTER_LOCK_ACCOUNTS_STYLE,
27
27
  MASTER_LOCK_MIN_PASSWORD_LENGTH,
28
28
  accountsPageHtml,
29
- } from "./accountsPage";
29
+ } from "./accountsPage.js";
30
30
  export {
31
31
  MASTER_LOCK_CSP,
32
32
  type MasterLockGuard,
33
33
  type MasterLockGuardOptions,
34
34
  createMasterLockGuard,
35
- } from "./guard";
35
+ } from "./guard.js";
36
36
  export {
37
37
  LOCK_SCRIPT,
38
38
  LOCK_STYLE,
39
39
  MASTER_LOCK_DERIVE_SOURCE,
40
40
  type LockPageOptions,
41
41
  lockPageHtml,
42
- } from "./lockPage";
42
+ } from "./lockPage.js";
43
43
  export {
44
44
  MASTER_LOCK_PRINCIPAL_KEY_PREFIX,
45
45
  MasterLockDirectory,
46
46
  type MasterLockDirectoryOptions,
47
47
  masterLockPrincipalKey,
48
- } from "./principals";
48
+ } from "./principals.js";
49
49
  export {
50
50
  FIRST_ACCOUNT_ID,
51
51
  MasterLock,
@@ -57,16 +57,17 @@ export {
57
57
  type MasterLockStore,
58
58
  type MasterLockUnlockResult,
59
59
  readRecord,
60
- } from "./masterLock";
60
+ } from "./masterLock.js";
61
61
  export {
62
62
  DEFAULT_SEED_IDLE_MS,
63
63
  generateStagePassword,
64
64
  type MintMasterLockSeedOptions,
65
65
  mintMasterLockSeed,
66
66
  serializeMasterLockSeed,
67
- } from "./seed";
67
+ } from "./seed.js";
68
68
  export {
69
69
  MASTER_LOCK_SETTING_KEY,
70
+ MASTER_LOCK_STATE_KEY,
70
71
  createKvMasterLockStore,
71
72
  createMemoryMasterLockStore,
72
- } from "./store";
73
+ } from "./store.js";
@@ -13,8 +13,8 @@
13
13
  */
14
14
  import { describe, expect, test } from "bun:test";
15
15
  import { MASTER_LOCK_PATHS, type MasterLockKdfParams, deriveMasterLockVerifier } from "cursedbelt-core/master-lock";
16
- import { MASTER_LOCK_ACCOUNTS_SCRIPT } from "./accountsPage";
17
- import { LOCK_SCRIPT, LOCK_STYLE, MASTER_LOCK_DERIVE_SOURCE, lockPageHtml } from "./lockPage";
16
+ import { MASTER_LOCK_ACCOUNTS_SCRIPT } from "./accountsPage.js";
17
+ import { LOCK_SCRIPT, LOCK_STYLE, MASTER_LOCK_DERIVE_SOURCE, lockPageHtml } from "./lockPage.js";
18
18
 
19
19
  const KDF: MasterLockKdfParams = {
20
20
  v: 1,
@@ -13,8 +13,8 @@ import {
13
13
  deriveMasterLockVerifier,
14
14
  newMasterLockKdfParams,
15
15
  } from "cursedbelt-core/master-lock";
16
- import { MasterLock, readRecord } from "./masterLock";
17
- import { createMemoryMasterLockStore } from "./store";
16
+ import { MasterLock, readRecord } from "./masterLock.js";
17
+ import { createMemoryMasterLockStore } from "./store.js";
18
18
 
19
19
  const KDF: MasterLockKdfParams = {
20
20
  v: 1,
@@ -369,3 +369,60 @@ describe("readRecord", () => {
369
369
  expect(readRecord(JSON.stringify({ ...base, idleMs: -5 }))?.idleMs).toBe(MIN_IDLE_MS);
370
370
  });
371
371
  });
372
+
373
+ describe("the live state, when the instance does not outlive a request (a Worker)", () => {
374
+ /** One record store and one state store, and a fresh MasterLock per "request" over both. */
375
+ function perRequest(now: () => number = Date.now) {
376
+ const store = createMemoryMasterLockStore(null);
377
+ const state = createMemoryMasterLockStore(null);
378
+ const fresh = () => new MasterLock({ store, state, seedJson: SEED, now });
379
+ return { fresh, state };
380
+ }
381
+
382
+ test("🔴 an unlock made in one instance opens the NEXT one — the collections-stage defect", async () => {
383
+ const { fresh } = perRequest();
384
+ const result = await fresh().unlock(VERIFIER);
385
+ if (!result.ok) throw new Error("expected an unlock");
386
+ const next = fresh();
387
+ expect(next.presents(req(result.token))).toBe(true);
388
+ expect(next.unlocked).toBe(true);
389
+ });
390
+
391
+ test("the defect it replaced: with no state store, the next instance has forgotten", async () => {
392
+ const store = createMemoryMasterLockStore(null);
393
+ const result = await new MasterLock({ store, seedJson: SEED }).unlock(VERIFIER);
394
+ if (!result.ok) throw new Error("expected an unlock");
395
+ expect(new MasterLock({ store, seedJson: SEED }).presents(req(result.token))).toBe(false);
396
+ });
397
+
398
+ test("🔴 the throttle holds ACROSS instances — a fresh counter per request throttled nothing", async () => {
399
+ const now = 1_000_000;
400
+ const { fresh } = perRequest(() => now);
401
+ for (let i = 0; i < 6; i += 1) await fresh().unlock("wrong");
402
+ expect(fresh().status().retryAfterMs).toBe(30_000);
403
+ expect((await fresh().unlock(VERIFIER)).ok).toBe(false);
404
+ }, KDF_BULK_MS);
405
+
406
+ test("a lock in one instance closes every other — the manual lock reaches every device", async () => {
407
+ const { fresh } = perRequest();
408
+ const result = await fresh().unlock(VERIFIER);
409
+ if (!result.ok) throw new Error("expected an unlock");
410
+ fresh().lock();
411
+ expect(fresh().presents(req(result.token))).toBe(false);
412
+ });
413
+
414
+ test("🔴 the persisted state holds no token — a leaked row opens nothing", async () => {
415
+ const { fresh, state } = perRequest();
416
+ const result = await fresh().unlock(VERIFIER);
417
+ if (!result.ok) throw new Error("expected an unlock");
418
+ const stored = state.read() ?? "";
419
+ expect(stored).toContain("sessions");
420
+ expect(stored).not.toContain(result.token);
421
+ });
422
+
423
+ test("unreadable state is LOCKED state", () => {
424
+ const store = createMemoryMasterLockStore(null);
425
+ const lock = new MasterLock({ store, state: createMemoryMasterLockStore("{not json"), seedJson: SEED });
426
+ expect(lock.unlocked).toBe(false);
427
+ });
428
+ });