@shipfox/api-logs 2.0.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 (342) hide show
  1. package/.turbo/turbo-build.log +2 -0
  2. package/.turbo/turbo-type$colon$emit.log +1 -0
  3. package/.turbo/turbo-type.log +1 -0
  4. package/CHANGELOG.md +179 -0
  5. package/LICENSE +21 -0
  6. package/README.md +151 -0
  7. package/dist/api/object-storage.d.ts +69 -0
  8. package/dist/api/object-storage.d.ts.map +1 -0
  9. package/dist/api/object-storage.js +199 -0
  10. package/dist/api/object-storage.js.map +1 -0
  11. package/dist/config.d.ts +20 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +108 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/core/append-logs.d.ts +28 -0
  16. package/dist/core/append-logs.d.ts.map +1 -0
  17. package/dist/core/append-logs.js +318 -0
  18. package/dist/core/append-logs.js.map +1 -0
  19. package/dist/core/budget.d.ts +12 -0
  20. package/dist/core/budget.d.ts.map +1 -0
  21. package/dist/core/budget.js +9 -0
  22. package/dist/core/budget.js.map +1 -0
  23. package/dist/core/close-stream.d.ts +27 -0
  24. package/dist/core/close-stream.d.ts.map +1 -0
  25. package/dist/core/close-stream.js +59 -0
  26. package/dist/core/close-stream.js.map +1 -0
  27. package/dist/core/compaction.d.ts +28 -0
  28. package/dist/core/compaction.d.ts.map +1 -0
  29. package/dist/core/compaction.js +49 -0
  30. package/dist/core/compaction.js.map +1 -0
  31. package/dist/core/entities/attempt-stream.d.ts +37 -0
  32. package/dist/core/entities/attempt-stream.d.ts.map +1 -0
  33. package/dist/core/entities/attempt-stream.js +15 -0
  34. package/dist/core/entities/attempt-stream.js.map +1 -0
  35. package/dist/core/entities/job-accounting.d.ts +12 -0
  36. package/dist/core/entities/job-accounting.d.ts.map +1 -0
  37. package/dist/core/entities/job-accounting.js +6 -0
  38. package/dist/core/entities/job-accounting.js.map +1 -0
  39. package/dist/core/entities/log-object.d.ts +13 -0
  40. package/dist/core/entities/log-object.d.ts.map +1 -0
  41. package/dist/core/entities/log-object.js +9 -0
  42. package/dist/core/entities/log-object.js.map +1 -0
  43. package/dist/core/errors.d.ts +26 -0
  44. package/dist/core/errors.d.ts.map +1 -0
  45. package/dist/core/errors.js +31 -0
  46. package/dist/core/errors.js.map +1 -0
  47. package/dist/core/finalize-attempt-stream.d.ts +22 -0
  48. package/dist/core/finalize-attempt-stream.d.ts.map +1 -0
  49. package/dist/core/finalize-attempt-stream.js +48 -0
  50. package/dist/core/finalize-attempt-stream.js.map +1 -0
  51. package/dist/core/read-logs.d.ts +33 -0
  52. package/dist/core/read-logs.d.ts.map +1 -0
  53. package/dist/core/read-logs.js +49 -0
  54. package/dist/core/read-logs.js.map +1 -0
  55. package/dist/core/reap-stale-open-streams.d.ts +27 -0
  56. package/dist/core/reap-stale-open-streams.d.ts.map +1 -0
  57. package/dist/core/reap-stale-open-streams.js +50 -0
  58. package/dist/core/reap-stale-open-streams.js.map +1 -0
  59. package/dist/core/retention.d.ts +32 -0
  60. package/dist/core/retention.d.ts.map +1 -0
  61. package/dist/core/retention.js +148 -0
  62. package/dist/core/retention.js.map +1 -0
  63. package/dist/core/session/claude/rows.d.ts +6 -0
  64. package/dist/core/session/claude/rows.d.ts.map +1 -0
  65. package/dist/core/session/claude/rows.js +145 -0
  66. package/dist/core/session/claude/rows.js.map +1 -0
  67. package/dist/core/session/claude-parser.d.ts +4 -0
  68. package/dist/core/session/claude-parser.d.ts.map +1 -0
  69. package/dist/core/session/claude-parser.js +42 -0
  70. package/dist/core/session/claude-parser.js.map +1 -0
  71. package/dist/core/session/entry-schema.d.ts +51 -0
  72. package/dist/core/session/entry-schema.d.ts.map +1 -0
  73. package/dist/core/session/entry-schema.js +61 -0
  74. package/dist/core/session/entry-schema.js.map +1 -0
  75. package/dist/core/session/object.d.ts +12 -0
  76. package/dist/core/session/object.d.ts.map +1 -0
  77. package/dist/core/session/object.js +50 -0
  78. package/dist/core/session/object.js.map +1 -0
  79. package/dist/core/session/parse-session.d.ts +5 -0
  80. package/dist/core/session/parse-session.d.ts.map +1 -0
  81. package/dist/core/session/parse-session.js +18 -0
  82. package/dist/core/session/parse-session.js.map +1 -0
  83. package/dist/core/session/pi/message-rows.d.ts +4 -0
  84. package/dist/core/session/pi/message-rows.d.ts.map +1 -0
  85. package/dist/core/session/pi/message-rows.js +113 -0
  86. package/dist/core/session/pi/message-rows.js.map +1 -0
  87. package/dist/core/session/pi/metadata.d.ts +18 -0
  88. package/dist/core/session/pi/metadata.d.ts.map +1 -0
  89. package/dist/core/session/pi/metadata.js +120 -0
  90. package/dist/core/session/pi/metadata.js.map +1 -0
  91. package/dist/core/session/pi/text.d.ts +12 -0
  92. package/dist/core/session/pi/text.d.ts.map +1 -0
  93. package/dist/core/session/pi/text.js +59 -0
  94. package/dist/core/session/pi/text.js.map +1 -0
  95. package/dist/core/session/pi-parser.d.ts +5 -0
  96. package/dist/core/session/pi-parser.d.ts.map +1 -0
  97. package/dist/core/session/pi-parser.js +73 -0
  98. package/dist/core/session/pi-parser.js.map +1 -0
  99. package/dist/core/session/rows.d.ts +7 -0
  100. package/dist/core/session/rows.d.ts.map +1 -0
  101. package/dist/core/session/rows.js +39 -0
  102. package/dist/core/session/rows.js.map +1 -0
  103. package/dist/core/session/session-record.d.ts +5 -0
  104. package/dist/core/session/session-record.d.ts.map +1 -0
  105. package/dist/core/session/session-record.js +3 -0
  106. package/dist/core/session/session-record.js.map +1 -0
  107. package/dist/db/accounting.d.ts +33 -0
  108. package/dist/db/accounting.d.ts.map +1 -0
  109. package/dist/db/accounting.js +52 -0
  110. package/dist/db/accounting.js.map +1 -0
  111. package/dist/db/chunks.d.ts +62 -0
  112. package/dist/db/chunks.d.ts.map +1 -0
  113. package/dist/db/chunks.js +88 -0
  114. package/dist/db/chunks.js.map +1 -0
  115. package/dist/db/db.d.ts +752 -0
  116. package/dist/db/db.d.ts.map +1 -0
  117. package/dist/db/db.js +24 -0
  118. package/dist/db/db.js.map +1 -0
  119. package/dist/db/index.d.ts +2 -0
  120. package/dist/db/index.d.ts.map +1 -0
  121. package/dist/db/index.js +5 -0
  122. package/dist/db/index.js.map +1 -0
  123. package/dist/db/schema/attempt-streams.d.ts +304 -0
  124. package/dist/db/schema/attempt-streams.d.ts.map +1 -0
  125. package/dist/db/schema/attempt-streams.js +100 -0
  126. package/dist/db/schema/attempt-streams.js.map +1 -0
  127. package/dist/db/schema/chunks.d.ts +166 -0
  128. package/dist/db/schema/chunks.d.ts.map +1 -0
  129. package/dist/db/schema/chunks.js +47 -0
  130. package/dist/db/schema/chunks.js.map +1 -0
  131. package/dist/db/schema/common.d.ts +29 -0
  132. package/dist/db/schema/common.d.ts.map +1 -0
  133. package/dist/db/schema/common.js +11 -0
  134. package/dist/db/schema/common.js.map +1 -0
  135. package/dist/db/schema/job-accounting.d.ts +143 -0
  136. package/dist/db/schema/job-accounting.d.ts.map +1 -0
  137. package/dist/db/schema/job-accounting.js +43 -0
  138. package/dist/db/schema/job-accounting.js.map +1 -0
  139. package/dist/db/schema/outbox.d.ts +195 -0
  140. package/dist/db/schema/outbox.d.ts.map +1 -0
  141. package/dist/db/schema/outbox.js +5 -0
  142. package/dist/db/schema/outbox.js.map +1 -0
  143. package/dist/db/streams.d.ts +141 -0
  144. package/dist/db/streams.d.ts.map +1 -0
  145. package/dist/db/streams.js +197 -0
  146. package/dist/db/streams.js.map +1 -0
  147. package/dist/index.d.ts +4 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +81 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/metrics/index.d.ts +2 -0
  152. package/dist/metrics/index.d.ts.map +1 -0
  153. package/dist/metrics/index.js +3 -0
  154. package/dist/metrics/index.js.map +1 -0
  155. package/dist/metrics/instance.d.ts +14 -0
  156. package/dist/metrics/instance.d.ts.map +1 -0
  157. package/dist/metrics/instance.js +16 -0
  158. package/dist/metrics/instance.js.map +1 -0
  159. package/dist/metrics/service.d.ts +2 -0
  160. package/dist/metrics/service.d.ts.map +1 -0
  161. package/dist/metrics/service.js +20 -0
  162. package/dist/metrics/service.js.map +1 -0
  163. package/dist/presentation/dto/read-logs.d.ts +4 -0
  164. package/dist/presentation/dto/read-logs.d.ts.map +1 -0
  165. package/dist/presentation/dto/read-logs.js +22 -0
  166. package/dist/presentation/dto/read-logs.js.map +1 -0
  167. package/dist/presentation/routes/append-logs.d.ts +2 -0
  168. package/dist/presentation/routes/append-logs.d.ts.map +1 -0
  169. package/dist/presentation/routes/append-logs.js +71 -0
  170. package/dist/presentation/routes/append-logs.js.map +1 -0
  171. package/dist/presentation/routes/index.d.ts +3 -0
  172. package/dist/presentation/routes/index.d.ts.map +1 -0
  173. package/dist/presentation/routes/index.js +32 -0
  174. package/dist/presentation/routes/index.js.map +1 -0
  175. package/dist/presentation/routes/read-logs.d.ts +2 -0
  176. package/dist/presentation/routes/read-logs.d.ts.map +1 -0
  177. package/dist/presentation/routes/read-logs.js +41 -0
  178. package/dist/presentation/routes/read-logs.js.map +1 -0
  179. package/dist/presentation/subscribers/on-job-terminated.d.ts +8 -0
  180. package/dist/presentation/subscribers/on-job-terminated.d.ts.map +1 -0
  181. package/dist/presentation/subscribers/on-job-terminated.js +32 -0
  182. package/dist/presentation/subscribers/on-job-terminated.js.map +1 -0
  183. package/dist/presentation/subscribers/on-log-stream-closed.d.ts +9 -0
  184. package/dist/presentation/subscribers/on-log-stream-closed.d.ts.map +1 -0
  185. package/dist/presentation/subscribers/on-log-stream-closed.js +31 -0
  186. package/dist/presentation/subscribers/on-log-stream-closed.js.map +1 -0
  187. package/dist/presentation/subscribers/on-step-attempt-terminated.d.ts +3 -0
  188. package/dist/presentation/subscribers/on-step-attempt-terminated.d.ts.map +1 -0
  189. package/dist/presentation/subscribers/on-step-attempt-terminated.js +14 -0
  190. package/dist/presentation/subscribers/on-step-attempt-terminated.js.map +1 -0
  191. package/dist/temporal/activities/close-abandoned-streams.d.ts +12 -0
  192. package/dist/temporal/activities/close-abandoned-streams.d.ts.map +1 -0
  193. package/dist/temporal/activities/close-abandoned-streams.js +33 -0
  194. package/dist/temporal/activities/close-abandoned-streams.js.map +1 -0
  195. package/dist/temporal/activities/compact-stream.d.ts +33 -0
  196. package/dist/temporal/activities/compact-stream.d.ts.map +1 -0
  197. package/dist/temporal/activities/compact-stream.js +95 -0
  198. package/dist/temporal/activities/compact-stream.js.map +1 -0
  199. package/dist/temporal/activities/compaction-reconcile.d.ts +16 -0
  200. package/dist/temporal/activities/compaction-reconcile.d.ts.map +1 -0
  201. package/dist/temporal/activities/compaction-reconcile.js +52 -0
  202. package/dist/temporal/activities/compaction-reconcile.js.map +1 -0
  203. package/dist/temporal/activities/index.d.ts +14 -0
  204. package/dist/temporal/activities/index.d.ts.map +1 -0
  205. package/dist/temporal/activities/index.js +16 -0
  206. package/dist/temporal/activities/index.js.map +1 -0
  207. package/dist/temporal/activities/reap-stale-open-streams.d.ts +4 -0
  208. package/dist/temporal/activities/reap-stale-open-streams.d.ts.map +1 -0
  209. package/dist/temporal/activities/reap-stale-open-streams.js +11 -0
  210. package/dist/temporal/activities/reap-stale-open-streams.js.map +1 -0
  211. package/dist/temporal/activities/retention-sweep.d.ts +7 -0
  212. package/dist/temporal/activities/retention-sweep.d.ts.map +1 -0
  213. package/dist/temporal/activities/retention-sweep.js +19 -0
  214. package/dist/temporal/activities/retention-sweep.js.map +1 -0
  215. package/dist/temporal/constants.d.ts +7 -0
  216. package/dist/temporal/constants.d.ts.map +1 -0
  217. package/dist/temporal/constants.js +13 -0
  218. package/dist/temporal/constants.js.map +1 -0
  219. package/dist/temporal/workflows/close-abandoned-streams.d.ts +11 -0
  220. package/dist/temporal/workflows/close-abandoned-streams.d.ts.map +1 -0
  221. package/dist/temporal/workflows/close-abandoned-streams.js +22 -0
  222. package/dist/temporal/workflows/close-abandoned-streams.js.map +1 -0
  223. package/dist/temporal/workflows/compact-stream.d.ts +6 -0
  224. package/dist/temporal/workflows/compact-stream.d.ts.map +1 -0
  225. package/dist/temporal/workflows/compact-stream.js +25 -0
  226. package/dist/temporal/workflows/compact-stream.js.map +1 -0
  227. package/dist/temporal/workflows/compaction-reconcile-cron.d.ts +3 -0
  228. package/dist/temporal/workflows/compaction-reconcile-cron.d.ts.map +1 -0
  229. package/dist/temporal/workflows/compaction-reconcile-cron.js +15 -0
  230. package/dist/temporal/workflows/compaction-reconcile-cron.js.map +1 -0
  231. package/dist/temporal/workflows/index.d.ts +6 -0
  232. package/dist/temporal/workflows/index.d.ts.map +1 -0
  233. package/dist/temporal/workflows/index.js +7 -0
  234. package/dist/temporal/workflows/index.js.map +1 -0
  235. package/dist/temporal/workflows/reap-stale-open-streams-cron.d.ts +2 -0
  236. package/dist/temporal/workflows/reap-stale-open-streams-cron.d.ts.map +1 -0
  237. package/dist/temporal/workflows/reap-stale-open-streams-cron.js +15 -0
  238. package/dist/temporal/workflows/reap-stale-open-streams-cron.js.map +1 -0
  239. package/dist/temporal/workflows/retention-sweep-cron.d.ts +2 -0
  240. package/dist/temporal/workflows/retention-sweep-cron.d.ts.map +1 -0
  241. package/dist/temporal/workflows/retention-sweep-cron.js +23 -0
  242. package/dist/temporal/workflows/retention-sweep-cron.js.map +1 -0
  243. package/dist/tsconfig.test.tsbuildinfo +1 -0
  244. package/drizzle/0000_initial.sql +65 -0
  245. package/drizzle/meta/0000_snapshot.json +529 -0
  246. package/drizzle/meta/_journal.json +13 -0
  247. package/drizzle.config.ts +7 -0
  248. package/package.json +84 -0
  249. package/src/api/object-storage-credentials.test.ts +70 -0
  250. package/src/api/object-storage.test.ts +64 -0
  251. package/src/api/object-storage.ts +226 -0
  252. package/src/config.test.ts +118 -0
  253. package/src/config.ts +130 -0
  254. package/src/core/append-logs.test.ts +563 -0
  255. package/src/core/append-logs.ts +384 -0
  256. package/src/core/budget.test.ts +30 -0
  257. package/src/core/budget.ts +19 -0
  258. package/src/core/close-stream.ts +72 -0
  259. package/src/core/compaction.ts +68 -0
  260. package/src/core/entities/attempt-stream.ts +38 -0
  261. package/src/core/entities/job-accounting.ts +11 -0
  262. package/src/core/entities/log-object.test.ts +25 -0
  263. package/src/core/entities/log-object.ts +18 -0
  264. package/src/core/errors.ts +37 -0
  265. package/src/core/finalize-attempt-stream.test.ts +90 -0
  266. package/src/core/finalize-attempt-stream.ts +59 -0
  267. package/src/core/read-logs.ts +77 -0
  268. package/src/core/reap-stale-open-streams.test.ts +137 -0
  269. package/src/core/reap-stale-open-streams.ts +60 -0
  270. package/src/core/retention.test.ts +388 -0
  271. package/src/core/retention.ts +184 -0
  272. package/src/core/session/claude/rows.ts +223 -0
  273. package/src/core/session/claude-parser.test.ts +199 -0
  274. package/src/core/session/claude-parser.ts +38 -0
  275. package/src/core/session/entry-schema.ts +82 -0
  276. package/src/core/session/object.ts +57 -0
  277. package/src/core/session/parse-session.ts +23 -0
  278. package/src/core/session/pi/message-rows.ts +211 -0
  279. package/src/core/session/pi/metadata.ts +148 -0
  280. package/src/core/session/pi/text.ts +83 -0
  281. package/src/core/session/pi-parser.test.ts +451 -0
  282. package/src/core/session/pi-parser.ts +107 -0
  283. package/src/core/session/rows.ts +38 -0
  284. package/src/core/session/session-record.ts +4 -0
  285. package/src/db/accounting.ts +81 -0
  286. package/src/db/chunks.ts +143 -0
  287. package/src/db/db.ts +22 -0
  288. package/src/db/index.ts +4 -0
  289. package/src/db/schema/attempt-streams.ts +106 -0
  290. package/src/db/schema/chunks.ts +43 -0
  291. package/src/db/schema/common.ts +12 -0
  292. package/src/db/schema/job-accounting.ts +38 -0
  293. package/src/db/schema/outbox.ts +4 -0
  294. package/src/db/streams.test.ts +47 -0
  295. package/src/db/streams.ts +368 -0
  296. package/src/index.ts +77 -0
  297. package/src/metrics/index.ts +1 -0
  298. package/src/metrics/instance.ts +33 -0
  299. package/src/metrics/service.ts +23 -0
  300. package/src/presentation/dto/read-logs.ts +24 -0
  301. package/src/presentation/routes/append-logs.test.ts +279 -0
  302. package/src/presentation/routes/append-logs.ts +66 -0
  303. package/src/presentation/routes/index.ts +27 -0
  304. package/src/presentation/routes/read-logs.test.ts +504 -0
  305. package/src/presentation/routes/read-logs.ts +38 -0
  306. package/src/presentation/subscribers/on-job-terminated.test.ts +64 -0
  307. package/src/presentation/subscribers/on-job-terminated.ts +26 -0
  308. package/src/presentation/subscribers/on-log-stream-closed.test.ts +63 -0
  309. package/src/presentation/subscribers/on-log-stream-closed.ts +26 -0
  310. package/src/presentation/subscribers/on-step-attempt-terminated.ts +16 -0
  311. package/src/temporal/activities/close-abandoned-streams.test.ts +84 -0
  312. package/src/temporal/activities/close-abandoned-streams.ts +30 -0
  313. package/src/temporal/activities/compact-stream.test.ts +221 -0
  314. package/src/temporal/activities/compact-stream.ts +123 -0
  315. package/src/temporal/activities/compaction-reconcile.test.ts +143 -0
  316. package/src/temporal/activities/compaction-reconcile.ts +48 -0
  317. package/src/temporal/activities/index.ts +15 -0
  318. package/src/temporal/activities/reap-stale-open-streams.test.ts +48 -0
  319. package/src/temporal/activities/reap-stale-open-streams.ts +14 -0
  320. package/src/temporal/activities/retention-sweep.test.ts +38 -0
  321. package/src/temporal/activities/retention-sweep.ts +23 -0
  322. package/src/temporal/constants.ts +14 -0
  323. package/src/temporal/workflows/close-abandoned-streams.ts +25 -0
  324. package/src/temporal/workflows/compact-stream.ts +26 -0
  325. package/src/temporal/workflows/compaction-reconcile-cron.ts +14 -0
  326. package/src/temporal/workflows/index.ts +5 -0
  327. package/src/temporal/workflows/reap-stale-open-streams-cron.ts +13 -0
  328. package/src/temporal/workflows/retention-sweep-cron.ts +23 -0
  329. package/test/env.ts +37 -0
  330. package/test/factories/job-accounting.ts +38 -0
  331. package/test/fixtures/closed-stream.ts +53 -0
  332. package/test/fixtures/lease-token.ts +42 -0
  333. package/test/fixtures/ndjson.ts +34 -0
  334. package/test/globalSetup.ts +44 -0
  335. package/test/index.ts +9 -0
  336. package/test/queries.ts +54 -0
  337. package/test/setup.ts +17 -0
  338. package/tsconfig.build.json +9 -0
  339. package/tsconfig.build.tsbuildinfo +1 -0
  340. package/tsconfig.json +3 -0
  341. package/tsconfig.test.json +8 -0
  342. package/vitest.config.ts +13 -0
@@ -0,0 +1,65 @@
1
+ CREATE TABLE "logs_attempt_streams" (
2
+ "id" uuid PRIMARY KEY DEFAULT uuidv7() NOT NULL,
3
+ "job_id" uuid NOT NULL,
4
+ "step_id" uuid NOT NULL,
5
+ "attempt" integer NOT NULL,
6
+ "workspace_id" uuid NOT NULL,
7
+ "project_id" uuid NOT NULL,
8
+ "workflow_run_attempt_id" uuid NOT NULL,
9
+ "committed_length" bigint DEFAULT 0 NOT NULL,
10
+ "state" text DEFAULT 'open' NOT NULL,
11
+ "close_reason" text,
12
+ "declared_total_bytes" bigint,
13
+ "truncated" boolean DEFAULT false NOT NULL,
14
+ "object_key" text,
15
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
16
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL,
17
+ "closed_at" timestamp with time zone
18
+ );
19
+ --> statement-breakpoint
20
+ CREATE TABLE "logs_chunks" (
21
+ "id" uuid PRIMARY KEY DEFAULT uuidv7() NOT NULL,
22
+ "stream_id" uuid NOT NULL,
23
+ "seq" bigserial NOT NULL,
24
+ "stream_offset" bigint NOT NULL,
25
+ "byte_len" integer NOT NULL,
26
+ "data" "bytea" NOT NULL,
27
+ "origin" text NOT NULL,
28
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
29
+ );
30
+ --> statement-breakpoint
31
+ CREATE TABLE "logs_job_accounting" (
32
+ "job_id" uuid PRIMARY KEY NOT NULL,
33
+ "workspace_id" uuid NOT NULL,
34
+ "stored_bytes_used" bigint DEFAULT 0 NOT NULL,
35
+ "started_at" timestamp with time zone DEFAULT now() NOT NULL,
36
+ "capped_at" timestamp with time zone,
37
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
38
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
39
+ );
40
+ --> statement-breakpoint
41
+ CREATE TABLE "logs_outbox" (
42
+ "id" uuid PRIMARY KEY DEFAULT uuidv7() NOT NULL,
43
+ "event_type" text NOT NULL,
44
+ "ordering_key" text,
45
+ "payload" jsonb NOT NULL,
46
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
47
+ "dispatched_at" timestamp with time zone,
48
+ "dispatch_attempts" integer DEFAULT 0 NOT NULL,
49
+ "next_dispatch_at" timestamp with time zone DEFAULT now() NOT NULL,
50
+ "last_dispatch_error" jsonb,
51
+ "last_dispatch_failed_at" timestamp with time zone,
52
+ "dead_lettered_at" timestamp with time zone
53
+ );
54
+ --> statement-breakpoint
55
+ ALTER TABLE "logs_chunks" ADD CONSTRAINT "logs_chunks_stream_id_logs_attempt_streams_id_fk" FOREIGN KEY ("stream_id") REFERENCES "public"."logs_attempt_streams"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
56
+ CREATE UNIQUE INDEX "logs_attempt_streams_identity_unique" ON "logs_attempt_streams" USING btree ("job_id","step_id","attempt");--> statement-breakpoint
57
+ CREATE INDEX "logs_attempt_streams_step_attempt_idx" ON "logs_attempt_streams" USING btree ("step_id","attempt");--> statement-breakpoint
58
+ CREATE INDEX "logs_attempt_streams_open_by_job_idx" ON "logs_attempt_streams" USING btree ("job_id") WHERE "state" = 'open';--> statement-breakpoint
59
+ CREATE INDEX "logs_attempt_streams_open_age_idx" ON "logs_attempt_streams" USING btree ("created_at") WHERE "state" = 'open';--> statement-breakpoint
60
+ CREATE INDEX "logs_attempt_streams_retention_idx" ON "logs_attempt_streams" USING btree ("closed_at") WHERE "state" = 'closed';--> statement-breakpoint
61
+ CREATE INDEX "logs_attempt_streams_uncompacted_idx" ON "logs_attempt_streams" USING btree ("closed_at") WHERE "state" = 'closed' and "object_key" is null;--> statement-breakpoint
62
+ CREATE INDEX "logs_chunks_stream_seq_idx" ON "logs_chunks" USING btree ("stream_id","seq");--> statement-breakpoint
63
+ CREATE INDEX "logs_outbox_pending_idx" ON "logs_outbox" USING btree ("next_dispatch_at","created_at") WHERE "dispatched_at" IS NULL AND "dead_lettered_at" IS NULL;
64
+ --> statement-breakpoint
65
+ CREATE INDEX "logs_outbox_dispatched_retention_idx" ON "logs_outbox" USING btree ("dispatched_at","id") WHERE "dispatched_at" IS NOT NULL;
@@ -0,0 +1,529 @@
1
+ {
2
+ "id": "7c2a5e18-c354-4792-a7b0-cc2cb07cc196",
3
+ "prevId": "00000000-0000-0000-0000-000000000000",
4
+ "version": "7",
5
+ "dialect": "postgresql",
6
+ "tables": {
7
+ "public.logs_attempt_streams": {
8
+ "name": "logs_attempt_streams",
9
+ "schema": "",
10
+ "columns": {
11
+ "id": {
12
+ "name": "id",
13
+ "type": "uuid",
14
+ "primaryKey": true,
15
+ "notNull": true,
16
+ "default": "uuidv7()"
17
+ },
18
+ "job_id": {
19
+ "name": "job_id",
20
+ "type": "uuid",
21
+ "primaryKey": false,
22
+ "notNull": true
23
+ },
24
+ "step_id": {
25
+ "name": "step_id",
26
+ "type": "uuid",
27
+ "primaryKey": false,
28
+ "notNull": true
29
+ },
30
+ "attempt": {
31
+ "name": "attempt",
32
+ "type": "integer",
33
+ "primaryKey": false,
34
+ "notNull": true
35
+ },
36
+ "workspace_id": {
37
+ "name": "workspace_id",
38
+ "type": "uuid",
39
+ "primaryKey": false,
40
+ "notNull": true
41
+ },
42
+ "project_id": {
43
+ "name": "project_id",
44
+ "type": "uuid",
45
+ "primaryKey": false,
46
+ "notNull": true
47
+ },
48
+ "workflow_run_attempt_id": {
49
+ "name": "workflow_run_attempt_id",
50
+ "type": "uuid",
51
+ "primaryKey": false,
52
+ "notNull": true
53
+ },
54
+ "committed_length": {
55
+ "name": "committed_length",
56
+ "type": "bigint",
57
+ "primaryKey": false,
58
+ "notNull": true,
59
+ "default": 0
60
+ },
61
+ "state": {
62
+ "name": "state",
63
+ "type": "text",
64
+ "primaryKey": false,
65
+ "notNull": true,
66
+ "default": "'open'"
67
+ },
68
+ "close_reason": {
69
+ "name": "close_reason",
70
+ "type": "text",
71
+ "primaryKey": false,
72
+ "notNull": false
73
+ },
74
+ "declared_total_bytes": {
75
+ "name": "declared_total_bytes",
76
+ "type": "bigint",
77
+ "primaryKey": false,
78
+ "notNull": false
79
+ },
80
+ "truncated": {
81
+ "name": "truncated",
82
+ "type": "boolean",
83
+ "primaryKey": false,
84
+ "notNull": true,
85
+ "default": false
86
+ },
87
+ "object_key": {
88
+ "name": "object_key",
89
+ "type": "text",
90
+ "primaryKey": false,
91
+ "notNull": false
92
+ },
93
+ "created_at": {
94
+ "name": "created_at",
95
+ "type": "timestamp with time zone",
96
+ "primaryKey": false,
97
+ "notNull": true,
98
+ "default": "now()"
99
+ },
100
+ "updated_at": {
101
+ "name": "updated_at",
102
+ "type": "timestamp with time zone",
103
+ "primaryKey": false,
104
+ "notNull": true,
105
+ "default": "now()"
106
+ },
107
+ "closed_at": {
108
+ "name": "closed_at",
109
+ "type": "timestamp with time zone",
110
+ "primaryKey": false,
111
+ "notNull": false
112
+ }
113
+ },
114
+ "indexes": {
115
+ "logs_attempt_streams_identity_unique": {
116
+ "name": "logs_attempt_streams_identity_unique",
117
+ "columns": [
118
+ {
119
+ "expression": "job_id",
120
+ "isExpression": false,
121
+ "asc": true,
122
+ "nulls": "last"
123
+ },
124
+ {
125
+ "expression": "step_id",
126
+ "isExpression": false,
127
+ "asc": true,
128
+ "nulls": "last"
129
+ },
130
+ {
131
+ "expression": "attempt",
132
+ "isExpression": false,
133
+ "asc": true,
134
+ "nulls": "last"
135
+ }
136
+ ],
137
+ "isUnique": true,
138
+ "concurrently": false,
139
+ "method": "btree",
140
+ "with": {}
141
+ },
142
+ "logs_attempt_streams_step_attempt_idx": {
143
+ "name": "logs_attempt_streams_step_attempt_idx",
144
+ "columns": [
145
+ {
146
+ "expression": "step_id",
147
+ "isExpression": false,
148
+ "asc": true,
149
+ "nulls": "last"
150
+ },
151
+ {
152
+ "expression": "attempt",
153
+ "isExpression": false,
154
+ "asc": true,
155
+ "nulls": "last"
156
+ }
157
+ ],
158
+ "isUnique": false,
159
+ "concurrently": false,
160
+ "method": "btree",
161
+ "with": {}
162
+ },
163
+ "logs_attempt_streams_open_by_job_idx": {
164
+ "name": "logs_attempt_streams_open_by_job_idx",
165
+ "columns": [
166
+ {
167
+ "expression": "job_id",
168
+ "isExpression": false,
169
+ "asc": true,
170
+ "nulls": "last"
171
+ }
172
+ ],
173
+ "isUnique": false,
174
+ "where": "\"state\" = 'open'",
175
+ "concurrently": false,
176
+ "method": "btree",
177
+ "with": {}
178
+ },
179
+ "logs_attempt_streams_open_age_idx": {
180
+ "name": "logs_attempt_streams_open_age_idx",
181
+ "columns": [
182
+ {
183
+ "expression": "created_at",
184
+ "isExpression": false,
185
+ "asc": true,
186
+ "nulls": "last"
187
+ }
188
+ ],
189
+ "isUnique": false,
190
+ "where": "\"state\" = 'open'",
191
+ "concurrently": false,
192
+ "method": "btree",
193
+ "with": {}
194
+ },
195
+ "logs_attempt_streams_retention_idx": {
196
+ "name": "logs_attempt_streams_retention_idx",
197
+ "columns": [
198
+ {
199
+ "expression": "closed_at",
200
+ "isExpression": false,
201
+ "asc": true,
202
+ "nulls": "last"
203
+ }
204
+ ],
205
+ "isUnique": false,
206
+ "where": "\"state\" = 'closed'",
207
+ "concurrently": false,
208
+ "method": "btree",
209
+ "with": {}
210
+ },
211
+ "logs_attempt_streams_uncompacted_idx": {
212
+ "name": "logs_attempt_streams_uncompacted_idx",
213
+ "columns": [
214
+ {
215
+ "expression": "closed_at",
216
+ "isExpression": false,
217
+ "asc": true,
218
+ "nulls": "last"
219
+ }
220
+ ],
221
+ "isUnique": false,
222
+ "where": "\"state\" = 'closed' and \"object_key\" is null",
223
+ "concurrently": false,
224
+ "method": "btree",
225
+ "with": {}
226
+ }
227
+ },
228
+ "foreignKeys": {},
229
+ "compositePrimaryKeys": {},
230
+ "uniqueConstraints": {},
231
+ "policies": {},
232
+ "checkConstraints": {},
233
+ "isRLSEnabled": false
234
+ },
235
+ "public.logs_chunks": {
236
+ "name": "logs_chunks",
237
+ "schema": "",
238
+ "columns": {
239
+ "id": {
240
+ "name": "id",
241
+ "type": "uuid",
242
+ "primaryKey": true,
243
+ "notNull": true,
244
+ "default": "uuidv7()"
245
+ },
246
+ "stream_id": {
247
+ "name": "stream_id",
248
+ "type": "uuid",
249
+ "primaryKey": false,
250
+ "notNull": true
251
+ },
252
+ "seq": {
253
+ "name": "seq",
254
+ "type": "bigserial",
255
+ "primaryKey": false,
256
+ "notNull": true
257
+ },
258
+ "stream_offset": {
259
+ "name": "stream_offset",
260
+ "type": "bigint",
261
+ "primaryKey": false,
262
+ "notNull": true
263
+ },
264
+ "byte_len": {
265
+ "name": "byte_len",
266
+ "type": "integer",
267
+ "primaryKey": false,
268
+ "notNull": true
269
+ },
270
+ "data": {
271
+ "name": "data",
272
+ "type": "bytea",
273
+ "primaryKey": false,
274
+ "notNull": true
275
+ },
276
+ "origin": {
277
+ "name": "origin",
278
+ "type": "text",
279
+ "primaryKey": false,
280
+ "notNull": true
281
+ },
282
+ "created_at": {
283
+ "name": "created_at",
284
+ "type": "timestamp with time zone",
285
+ "primaryKey": false,
286
+ "notNull": true,
287
+ "default": "now()"
288
+ }
289
+ },
290
+ "indexes": {
291
+ "logs_chunks_stream_seq_idx": {
292
+ "name": "logs_chunks_stream_seq_idx",
293
+ "columns": [
294
+ {
295
+ "expression": "stream_id",
296
+ "isExpression": false,
297
+ "asc": true,
298
+ "nulls": "last"
299
+ },
300
+ {
301
+ "expression": "seq",
302
+ "isExpression": false,
303
+ "asc": true,
304
+ "nulls": "last"
305
+ }
306
+ ],
307
+ "isUnique": false,
308
+ "concurrently": false,
309
+ "method": "btree",
310
+ "with": {}
311
+ }
312
+ },
313
+ "foreignKeys": {
314
+ "logs_chunks_stream_id_logs_attempt_streams_id_fk": {
315
+ "name": "logs_chunks_stream_id_logs_attempt_streams_id_fk",
316
+ "tableFrom": "logs_chunks",
317
+ "tableTo": "logs_attempt_streams",
318
+ "columnsFrom": ["stream_id"],
319
+ "columnsTo": ["id"],
320
+ "onDelete": "cascade",
321
+ "onUpdate": "no action"
322
+ }
323
+ },
324
+ "compositePrimaryKeys": {},
325
+ "uniqueConstraints": {},
326
+ "policies": {},
327
+ "checkConstraints": {},
328
+ "isRLSEnabled": false
329
+ },
330
+ "public.logs_job_accounting": {
331
+ "name": "logs_job_accounting",
332
+ "schema": "",
333
+ "columns": {
334
+ "job_id": {
335
+ "name": "job_id",
336
+ "type": "uuid",
337
+ "primaryKey": true,
338
+ "notNull": true
339
+ },
340
+ "workspace_id": {
341
+ "name": "workspace_id",
342
+ "type": "uuid",
343
+ "primaryKey": false,
344
+ "notNull": true
345
+ },
346
+ "stored_bytes_used": {
347
+ "name": "stored_bytes_used",
348
+ "type": "bigint",
349
+ "primaryKey": false,
350
+ "notNull": true,
351
+ "default": 0
352
+ },
353
+ "started_at": {
354
+ "name": "started_at",
355
+ "type": "timestamp with time zone",
356
+ "primaryKey": false,
357
+ "notNull": true,
358
+ "default": "now()"
359
+ },
360
+ "capped_at": {
361
+ "name": "capped_at",
362
+ "type": "timestamp with time zone",
363
+ "primaryKey": false,
364
+ "notNull": false
365
+ },
366
+ "created_at": {
367
+ "name": "created_at",
368
+ "type": "timestamp with time zone",
369
+ "primaryKey": false,
370
+ "notNull": true,
371
+ "default": "now()"
372
+ },
373
+ "updated_at": {
374
+ "name": "updated_at",
375
+ "type": "timestamp with time zone",
376
+ "primaryKey": false,
377
+ "notNull": true,
378
+ "default": "now()"
379
+ }
380
+ },
381
+ "indexes": {},
382
+ "foreignKeys": {},
383
+ "compositePrimaryKeys": {},
384
+ "uniqueConstraints": {},
385
+ "policies": {},
386
+ "checkConstraints": {},
387
+ "isRLSEnabled": false
388
+ },
389
+ "public.logs_outbox": {
390
+ "name": "logs_outbox",
391
+ "schema": "",
392
+ "columns": {
393
+ "id": {
394
+ "name": "id",
395
+ "type": "uuid",
396
+ "primaryKey": true,
397
+ "notNull": true,
398
+ "default": "uuidv7()"
399
+ },
400
+ "event_type": {
401
+ "name": "event_type",
402
+ "type": "text",
403
+ "primaryKey": false,
404
+ "notNull": true
405
+ },
406
+ "ordering_key": {
407
+ "name": "ordering_key",
408
+ "type": "text",
409
+ "primaryKey": false,
410
+ "notNull": false
411
+ },
412
+ "payload": {
413
+ "name": "payload",
414
+ "type": "jsonb",
415
+ "primaryKey": false,
416
+ "notNull": true
417
+ },
418
+ "created_at": {
419
+ "name": "created_at",
420
+ "type": "timestamp with time zone",
421
+ "primaryKey": false,
422
+ "notNull": true,
423
+ "default": "now()"
424
+ },
425
+ "dispatched_at": {
426
+ "name": "dispatched_at",
427
+ "type": "timestamp with time zone",
428
+ "primaryKey": false,
429
+ "notNull": false
430
+ },
431
+ "dispatch_attempts": {
432
+ "name": "dispatch_attempts",
433
+ "type": "integer",
434
+ "primaryKey": false,
435
+ "notNull": true,
436
+ "default": 0
437
+ },
438
+ "next_dispatch_at": {
439
+ "name": "next_dispatch_at",
440
+ "type": "timestamp with time zone",
441
+ "primaryKey": false,
442
+ "notNull": true,
443
+ "default": "now()"
444
+ },
445
+ "last_dispatch_error": {
446
+ "name": "last_dispatch_error",
447
+ "type": "jsonb",
448
+ "primaryKey": false,
449
+ "notNull": false
450
+ },
451
+ "last_dispatch_failed_at": {
452
+ "name": "last_dispatch_failed_at",
453
+ "type": "timestamp with time zone",
454
+ "primaryKey": false,
455
+ "notNull": false
456
+ },
457
+ "dead_lettered_at": {
458
+ "name": "dead_lettered_at",
459
+ "type": "timestamp with time zone",
460
+ "primaryKey": false,
461
+ "notNull": false
462
+ }
463
+ },
464
+ "indexes": {
465
+ "logs_outbox_pending_idx": {
466
+ "name": "logs_outbox_pending_idx",
467
+ "columns": [
468
+ {
469
+ "expression": "next_dispatch_at",
470
+ "isExpression": false,
471
+ "asc": true,
472
+ "nulls": "last"
473
+ },
474
+ {
475
+ "expression": "created_at",
476
+ "isExpression": false,
477
+ "asc": true,
478
+ "nulls": "last"
479
+ }
480
+ ],
481
+ "isUnique": false,
482
+ "where": "\"dispatched_at\" IS NULL AND \"dead_lettered_at\" IS NULL",
483
+ "concurrently": false,
484
+ "method": "btree",
485
+ "with": {}
486
+ },
487
+ "logs_outbox_dispatched_retention_idx": {
488
+ "name": "logs_outbox_dispatched_retention_idx",
489
+ "columns": [
490
+ {
491
+ "expression": "dispatched_at",
492
+ "isExpression": false,
493
+ "asc": true,
494
+ "nulls": "last"
495
+ },
496
+ {
497
+ "expression": "id",
498
+ "isExpression": false,
499
+ "asc": true,
500
+ "nulls": "last"
501
+ }
502
+ ],
503
+ "isUnique": false,
504
+ "where": "\"dispatched_at\" IS NOT NULL",
505
+ "concurrently": false,
506
+ "method": "btree",
507
+ "with": {}
508
+ }
509
+ },
510
+ "foreignKeys": {},
511
+ "compositePrimaryKeys": {},
512
+ "uniqueConstraints": {},
513
+ "policies": {},
514
+ "checkConstraints": {},
515
+ "isRLSEnabled": false
516
+ }
517
+ },
518
+ "enums": {},
519
+ "schemas": {},
520
+ "sequences": {},
521
+ "roles": {},
522
+ "policies": {},
523
+ "views": {},
524
+ "_meta": {
525
+ "columns": {},
526
+ "schemas": {},
527
+ "tables": {}
528
+ }
529
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": "7",
3
+ "dialect": "postgresql",
4
+ "entries": [
5
+ {
6
+ "idx": 0,
7
+ "version": "7",
8
+ "when": 1782016439771,
9
+ "tag": "0000_initial",
10
+ "breakpoints": true
11
+ }
12
+ ]
13
+ }
@@ -0,0 +1,7 @@
1
+ import {defineConfig} from 'drizzle-kit';
2
+
3
+ export default defineConfig({
4
+ schema: './src/db/schema/*.ts',
5
+ out: './drizzle',
6
+ dialect: 'postgresql',
7
+ });