@kronos-ts/postgres 0.1.1 → 0.3.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.
- package/README.md +81 -0
- package/dist/adapter.d.ts +13 -0
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapters/bun-sql.d.ts.map +1 -1
- package/dist/adapters/bun-sql.js +3 -0
- package/dist/adapters/bun-sql.js.map +1 -1
- package/dist/adapters/pg.d.ts.map +1 -1
- package/dist/adapters/pg.js +3 -0
- package/dist/adapters/pg.js.map +1 -1
- package/dist/adapters/postgres.d.ts.map +1 -1
- package/dist/adapters/postgres.js +3 -0
- package/dist/adapters/postgres.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/postgres-event-scheduler.d.ts +88 -0
- package/dist/postgres-event-scheduler.d.ts.map +1 -0
- package/dist/postgres-event-scheduler.js +226 -0
- package/dist/postgres-event-scheduler.js.map +1 -0
- package/dist/postgres-event-store.d.ts.map +1 -1
- package/dist/postgres-event-store.js +70 -35
- package/dist/postgres-event-store.js.map +1 -1
- package/dist/postgres-transaction-manager.d.ts +33 -0
- package/dist/postgres-transaction-manager.d.ts.map +1 -0
- package/dist/postgres-transaction-manager.js +92 -0
- package/dist/postgres-transaction-manager.js.map +1 -0
- package/dist/postgres.d.ts +22 -5
- package/dist/postgres.d.ts.map +1 -1
- package/dist/postgres.js +54 -5
- package/dist/postgres.js.map +1 -1
- package/dist/schema.d.ts +47 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +67 -0
- package/dist/schema.js.map +1 -1
- package/package.json +1 -1
- package/src/adapter.ts +13 -0
- package/src/adapters/bun-sql.ts +3 -0
- package/src/adapters/pg.ts +3 -0
- package/src/adapters/postgres.ts +3 -0
- package/src/index.ts +18 -0
- package/src/postgres-event-scheduler.ts +314 -0
- package/src/postgres-event-store.ts +77 -30
- package/src/postgres-transaction-manager.ts +120 -0
- package/src/postgres.ts +68 -5
- package/src/schema.ts +70 -0
package/README.md
CHANGED
|
@@ -119,6 +119,87 @@ const adapter = bunSqlAdapter({
|
|
|
119
119
|
})
|
|
120
120
|
```
|
|
121
121
|
|
|
122
|
+
## Transactions
|
|
123
|
+
|
|
124
|
+
Every command handler runs inside a single Unit of Work, and with this extension that UoW carries a Postgres transaction. A handler's appended events are buffered and flushed as one bulk write at commit; anything else you write **on the same transaction** commits — or rolls back — atomically with them. So "edit a row and append an `Updated` event" is one atomic operation.
|
|
125
|
+
|
|
126
|
+
The transaction is **lazy**: it opens on the first writer (an append, or your own SQL) and never opens for pure-read handlers, so read-only work claims no connection from the pool.
|
|
127
|
+
|
|
128
|
+
This is the framework's transaction, exposed for you to enroll work into. The extension does **not** ship an ORM client — you bring (or wrap) your own. The two pieces you need are both from `@kronos-ts/messaging`:
|
|
129
|
+
|
|
130
|
+
- `getOrBeginActiveTransaction<PostgresAdapterTransaction>()` — returns the UoW's transaction, opening the lazy one on first call. Use on **write** paths.
|
|
131
|
+
- `getActiveTransaction<PostgresAdapterTransaction>()` — returns it only if already open (else `undefined`), without forcing one. Use on **read-only** paths that shouldn't provoke a connection.
|
|
132
|
+
|
|
133
|
+
### Running your own SQL — no ORM needed
|
|
134
|
+
|
|
135
|
+
The transaction handle runs parameterised SQL directly (it's what the event store appends with):
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
import { getOrBeginActiveTransaction } from "@kronos-ts/messaging"
|
|
139
|
+
import type { PostgresAdapterTransaction } from "@kronos-ts/postgres"
|
|
140
|
+
import { append } from "@kronos-ts/eventsourcing"
|
|
141
|
+
|
|
142
|
+
// inside a command handler:
|
|
143
|
+
const tx = await getOrBeginActiveTransaction<PostgresAdapterTransaction>()
|
|
144
|
+
await tx!.query("UPDATE widgets SET name = $1 WHERE id = $2", [name, id])
|
|
145
|
+
append(WidgetUpdated, { id, name }) // commits together, rolls back together
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Handing the transaction to an ORM
|
|
149
|
+
|
|
150
|
+
`tx.unwrap<T>()` returns the live driver connection backing the transaction — the *same* connection the event store appends on. Bind your ORM to it and its writes join the transaction. The handle type depends on the adapter you wired:
|
|
151
|
+
|
|
152
|
+
| Adapter | `unwrap()` returns |
|
|
153
|
+
|---------|--------------------|
|
|
154
|
+
| `pgAdapter` | `pg` `PoolClient` |
|
|
155
|
+
| `postgresAdapter` | scoped `Sql` (porsager) |
|
|
156
|
+
| `bunSqlAdapter` | scoped Bun `SQL` |
|
|
157
|
+
|
|
158
|
+
#### Drizzle (the easy case)
|
|
159
|
+
|
|
160
|
+
`drizzle(connection)` accepts an already-open connection, so binding is a one-liner — pick the import matching your adapter:
|
|
161
|
+
|
|
162
|
+
```typescript
|
|
163
|
+
// pgAdapter
|
|
164
|
+
import { drizzle } from "drizzle-orm/node-postgres"
|
|
165
|
+
import type { PoolClient } from "pg"
|
|
166
|
+
const db = drizzle(tx.unwrap<PoolClient>(), { schema })
|
|
167
|
+
|
|
168
|
+
// postgresAdapter
|
|
169
|
+
import { drizzle } from "drizzle-orm/postgres-js"
|
|
170
|
+
import type { Sql } from "postgres"
|
|
171
|
+
const db = drizzle(tx.unwrap<Sql>(), { schema })
|
|
172
|
+
|
|
173
|
+
// bunSqlAdapter
|
|
174
|
+
import { drizzle } from "drizzle-orm/bun-sql"
|
|
175
|
+
import type { SQL } from "bun"
|
|
176
|
+
const db = drizzle(tx.unwrap<SQL>(), { schema })
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
`drizzle(conn)` is a thin wrapper, so a small per-call helper is the ergonomic shape:
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
async function uowDb() {
|
|
183
|
+
const tx = await getOrBeginActiveTransaction<PostgresAdapterTransaction>()
|
|
184
|
+
if (!tx) throw new Error("no active UnitOfWork transaction")
|
|
185
|
+
return drizzle(tx.unwrap<PoolClient>(), { schema })
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// in a command handler:
|
|
189
|
+
const db = await uowDb()
|
|
190
|
+
await db.insert(widgets).values({ id, name })
|
|
191
|
+
.onConflictDoUpdate({ target: widgets.id, set: { name } })
|
|
192
|
+
append(WidgetUpdated, { id, name })
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
#### Kysely / TypeORM and other pool-owning ORMs
|
|
196
|
+
|
|
197
|
+
ORMs that manage their own connection pool are more work — they don't take a borrowed connection directly. The route is a thin custom dialect/driver whose `acquireConnection()` hands back `unwrap()`'s connection and whose begin/commit/release are no-ops (the UoW owns the transaction lifecycle). Doable, just more plumbing than Drizzle. For occasional statements, the raw `tx.query(...)` path above is usually simpler than wiring a dialect.
|
|
198
|
+
|
|
199
|
+
### The one rule
|
|
200
|
+
|
|
201
|
+
Bind your client to **`unwrap()`'s connection** — never to a separately-created pool. A separate pool is a separate connection, hence a separate transaction, and your writes silently stop being atomic with your events. `unwrap()` is the guarantee that you're on the framework's connection.
|
|
202
|
+
|
|
122
203
|
## DCB Semantics
|
|
123
204
|
|
|
124
205
|
The engine implements [Dynamic Consistency Boundaries](https://dcb.events):
|
package/dist/adapter.d.ts
CHANGED
|
@@ -38,6 +38,19 @@ export type QueryRow = Record<string, unknown>;
|
|
|
38
38
|
*/
|
|
39
39
|
export interface PostgresAdapterTransaction {
|
|
40
40
|
query<R extends QueryRow = QueryRow>(sql: string, params?: unknown[]): Promise<R[]>;
|
|
41
|
+
/**
|
|
42
|
+
* Escape hatch returning the live driver-specific handle backing this
|
|
43
|
+
* transaction — the pg `PoolClient`, or the scoped `sql` for postgres.js /
|
|
44
|
+
* Bun.sql. Lets an external query builder (e.g. Drizzle) issue statements on
|
|
45
|
+
* the SAME connection, and therefore the SAME transaction, as the engine's
|
|
46
|
+
* appends — so an application's CRUD writes commit or roll back atomically
|
|
47
|
+
* with its events.
|
|
48
|
+
*
|
|
49
|
+
* The caller owns the cast (the handle type is driver-specific) and the
|
|
50
|
+
* handle is valid ONLY for the lifetime of this transaction — never retain
|
|
51
|
+
* it past the UoW that opened it.
|
|
52
|
+
*/
|
|
53
|
+
unwrap<T = unknown>(): T;
|
|
41
54
|
}
|
|
42
55
|
/** Handle to a live LISTEN subscription. unlisten() unregisters + releases
|
|
43
56
|
* the dedicated connection (if any). */
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAA;AACV,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAA;AAEjF;2CAC2C;AAC3C,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAA;AACV,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAA;AAEjF;2CAC2C;AAC3C,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE9C;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IACnF;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAA;CACzB;AAED;yCACyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;OAIG;IACH,KAAK,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IAEnF;;;OAGG;IACH,QAAQ,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IAE3F;;;;;;;;;;OAUG;IACH,WAAW,CAAC,CAAC,EACX,cAAc,EAAE,cAAc,EAC9B,EAAE,EAAE,CAAC,EAAE,EAAE,0BAA0B,KAAK,OAAO,CAAC,CAAC,CAAC,GACjD,OAAO,CAAC,CAAC,CAAC,CAAA;IAEb;;;;;;OAMG;IACH,MAAM,CACJ,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,GACpD,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAE9B,yDAAyD;IACzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAExB,yEAAyE;IACzE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-sql.d.ts","sourceRoot":"","sources":["../../src/adapters/bun-sql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,eAAe,CAAA;AAGtB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAClC;AA6ED,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"bun-sql.d.ts","sourceRoot":"","sources":["../../src/adapters/bun-sql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,eAAe,CAAA;AAGtB,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;CAClC;AA6ED,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,eAAe,CA6H1E"}
|
package/dist/adapters/bun-sql.js
CHANGED
|
@@ -128,6 +128,9 @@ export function bunSqlAdapter(config) {
|
|
|
128
128
|
// normalized (errno -> code) via normalizeBunSqlError before propagating.
|
|
129
129
|
return inst.begin(`ISOLATION LEVEL ${isolationLevel}`, async (txSql) => {
|
|
130
130
|
const tx = {
|
|
131
|
+
unwrap() {
|
|
132
|
+
return txSql;
|
|
133
|
+
},
|
|
131
134
|
async query(text, params) {
|
|
132
135
|
return txSql.unsafe(text, normalizeParams(params)).catch(normalizeBunSqlError);
|
|
133
136
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bun-sql.js","sourceRoot":"","sources":["../../src/adapters/bun-sql.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bun-sql.js","sourceRoot":"","sources":["../../src/adapters/bun-sql.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/adapters/pg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,IAAI,CAAA;AAC3D,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,eAAe,CAAA;AAGtB,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,oFAAoF;IACpF,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAA;CAC3D;AAOD,wBAAgB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/adapters/pg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,IAAI,CAAA;AAC3D,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,eAAe,CAAA;AAGtB,MAAM,WAAW,eAAe;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,oFAAoF;IACpF,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAA;CAC3D;AAOD,wBAAgB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CA2JlE"}
|
package/dist/adapters/pg.js
CHANGED
|
@@ -90,6 +90,9 @@ export function pgAdapter(config) {
|
|
|
90
90
|
try {
|
|
91
91
|
await client.query(`BEGIN ISOLATION LEVEL ${isolationLevel}`);
|
|
92
92
|
const tx = {
|
|
93
|
+
unwrap() {
|
|
94
|
+
return client;
|
|
95
|
+
},
|
|
93
96
|
async query(sql, params) {
|
|
94
97
|
const result = await client.query(sql, params);
|
|
95
98
|
return result.rows;
|
package/dist/adapters/pg.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pg.js","sourceRoot":"","sources":["../../src/adapters/pg.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pg.js","sourceRoot":"","sources":["../../src/adapters/pg.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/adapters/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,cAAc,MAAM,UAAU,CAAA;AAErC,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,eAAe,CAAA;AAGtB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,wFAAwF;IACxF,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;CAC9D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/adapters/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,cAAc,MAAM,UAAU,CAAA;AAErC,OAAO,KAAK,EACV,eAAe,EAIhB,MAAM,eAAe,CAAA;AAGtB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,wFAAwF;IACxF,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;CAC9D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,eAAe,CAqG9E"}
|
|
@@ -74,6 +74,9 @@ export function postgresAdapter(config) {
|
|
|
74
74
|
// pins to the underlying connection for the duration.
|
|
75
75
|
return (await c.begin(`ISOLATION LEVEL ${isolationLevel}`, async (txSql) => {
|
|
76
76
|
const tx = {
|
|
77
|
+
unwrap() {
|
|
78
|
+
return txSql;
|
|
79
|
+
},
|
|
77
80
|
async query(text, params) {
|
|
78
81
|
const rows = (await txSql.unsafe(text, (params ?? [])));
|
|
79
82
|
return rows;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/adapters/postgres.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/adapters/postgres.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,5 +3,7 @@ export { IsolationLevel, type PostgresAdapter, type PostgresAdapterTransaction,
|
|
|
3
3
|
export { createPostgresEventStore, type PostgresEventStoreConfig, type Serializer, type TagResolver, } from "./postgres-event-store.js";
|
|
4
4
|
export { createPostgresSnapshotStore, type PostgresSnapshotStoreConfig, } from "./postgres-snapshot-store.js";
|
|
5
5
|
export { postgres, type PostgresConfig } from "./postgres.js";
|
|
6
|
-
export {
|
|
6
|
+
export { postgresTransactionManager } from "./postgres-transaction-manager.js";
|
|
7
|
+
export { createPostgresEventScheduler, type PostgresEventScheduler, type PostgresEventSchedulerConfig, } from "./postgres-event-scheduler.js";
|
|
8
|
+
export { bootstrapSchema, buildEventsTableDDL, buildEventsIndexesDDL, buildSnapshotsTableDDL, buildScheduledEventsTableDDL, buildScheduledEventsIndexesDDL, DEFAULT_TABLE_NAMES, type TableNames, } from "./schema.js";
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,oBAAoB,EACpB,6BAA6B,EAC7B,cAAc,GACf,MAAM,aAAa,CAAA;AAKpB,OAAO,EACL,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,QAAQ,GACd,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EACL,2BAA2B,EAC3B,KAAK,2BAA2B,GACjC,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,oBAAoB,EACpB,6BAA6B,EAC7B,cAAc,GACf,MAAM,aAAa,CAAA;AAKpB,OAAO,EACL,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,QAAQ,GACd,MAAM,cAAc,CAAA;AAGrB,OAAO,EACL,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,WAAW,GACjB,MAAM,2BAA2B,CAAA;AAGlC,OAAO,EACL,2BAA2B,EAC3B,KAAK,2BAA2B,GACjC,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAM7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAM9E,OAAO,EACL,4BAA4B,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,GAClC,MAAM,+BAA+B,CAAA;AAKtC,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,8BAA8B,EAC9B,mBAAmB,EACnB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -19,8 +19,18 @@ export { createPostgresEventStore, } from "./postgres-event-store.js";
|
|
|
19
19
|
export { createPostgresSnapshotStore, } from "./postgres-snapshot-store.js";
|
|
20
20
|
// Extension factory (Plan 05)
|
|
21
21
|
export { postgres } from "./postgres.js";
|
|
22
|
+
// Transaction manager — bridges the framework's TransactionManager lifecycle
|
|
23
|
+
// to adapter.transaction(). Users typically get this wired automatically via
|
|
24
|
+
// `postgres(config)`; exported for direct use when composing UoW runners by
|
|
25
|
+
// hand.
|
|
26
|
+
export { postgresTransactionManager } from "./postgres-transaction-manager.js";
|
|
27
|
+
// Postgres event scheduler — durable schedule() + cancel() + polling worker
|
|
28
|
+
// that fires due schedules into the event store. Wired into postgres()
|
|
29
|
+
// automatically when a uowFactory with the lazy postgres tx is in place;
|
|
30
|
+
// exported here so users who compose their own wiring can construct one.
|
|
31
|
+
export { createPostgresEventScheduler, } from "./postgres-event-scheduler.js";
|
|
22
32
|
// Schema bootstrap + DDL builders — exposed for users who want to run their
|
|
23
33
|
// own migrations (set `postgres({ bootstrap: false })`) or drive the store
|
|
24
34
|
// directly without going through the extension factory.
|
|
25
|
-
export { bootstrapSchema, buildEventsTableDDL, buildEventsIndexesDDL, buildSnapshotsTableDDL, DEFAULT_TABLE_NAMES, } from "./schema.js";
|
|
35
|
+
export { bootstrapSchema, buildEventsTableDDL, buildEventsIndexesDDL, buildSnapshotsTableDDL, buildScheduledEventsTableDDL, buildScheduledEventsIndexesDDL, DEFAULT_TABLE_NAMES, } from "./schema.js";
|
|
26
36
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,EAAE;AACF,oEAAoE;AACpE,6EAA6E;AAC7E,mEAAmE;AACnE,yEAAyE;AACzE,EAAE;AACF,2EAA2E;AAC3E,0DAA0D;AAC1D,gEAAgE;AAEhE,OAAO,EACL,oBAAoB,EACpB,6BAA6B,EAC7B,cAAc,GACf,MAAM,aAAa,CAAA;AAEpB,uDAAuD;AACvD,uEAAuE;AACvE,8CAA8C;AAC9C,OAAO,EACL,cAAc,GAKf,MAAM,cAAc,CAAA;AAErB,iDAAiD;AACjD,OAAO,EACL,wBAAwB,GAIzB,MAAM,2BAA2B,CAAA;AAElC,mCAAmC;AACnC,OAAO,EACL,2BAA2B,GAE5B,MAAM,8BAA8B,CAAA;AAErC,8BAA8B;AAC9B,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAA;AAE7D,4EAA4E;AAC5E,2EAA2E;AAC3E,wDAAwD;AACxD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,GAEpB,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,EAAE;AACF,oEAAoE;AACpE,6EAA6E;AAC7E,mEAAmE;AACnE,yEAAyE;AACzE,EAAE;AACF,2EAA2E;AAC3E,0DAA0D;AAC1D,gEAAgE;AAEhE,OAAO,EACL,oBAAoB,EACpB,6BAA6B,EAC7B,cAAc,GACf,MAAM,aAAa,CAAA;AAEpB,uDAAuD;AACvD,uEAAuE;AACvE,8CAA8C;AAC9C,OAAO,EACL,cAAc,GAKf,MAAM,cAAc,CAAA;AAErB,iDAAiD;AACjD,OAAO,EACL,wBAAwB,GAIzB,MAAM,2BAA2B,CAAA;AAElC,mCAAmC;AACnC,OAAO,EACL,2BAA2B,GAE5B,MAAM,8BAA8B,CAAA;AAErC,8BAA8B;AAC9B,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAA;AAE7D,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,QAAQ;AACR,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAE9E,4EAA4E;AAC5E,uEAAuE;AACvE,yEAAyE;AACzE,yEAAyE;AACzE,OAAO,EACL,4BAA4B,GAG7B,MAAM,+BAA+B,CAAA;AAEtC,4EAA4E;AAC5E,2EAA2E;AAC3E,wDAAwD;AACxD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,8BAA8B,EAC9B,mBAAmB,GAEpB,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createPostgresEventScheduler — durable {@link EventScheduler} backed by
|
|
3
|
+
* the kronos_scheduled_events table, plus a polling worker that fires
|
|
4
|
+
* due schedules into the event store.
|
|
5
|
+
*
|
|
6
|
+
* # Schedule path (caller-driven, inside a UoW)
|
|
7
|
+
*
|
|
8
|
+
* schedule(event, at)
|
|
9
|
+
* → requires INVOCATION phase
|
|
10
|
+
* → captures tags via the configured TagResolver at schedule-time
|
|
11
|
+
* → INSERT row (schedule_id = event.identifier, status='pending')
|
|
12
|
+
* → joins the active UoW transaction via getOrBeginActiveTransaction;
|
|
13
|
+
* if the UoW rolls back, the schedule is never persisted
|
|
14
|
+
* → returns { id: schedule_id } as the cancellation token
|
|
15
|
+
*
|
|
16
|
+
* # Cancel path
|
|
17
|
+
*
|
|
18
|
+
* cancel(token)
|
|
19
|
+
* → SELECT … FOR UPDATE to lock the row + read prior status
|
|
20
|
+
* → branch:
|
|
21
|
+
* status='pending' → UPDATE status='cancelled' → { kind: 'cancelled' }
|
|
22
|
+
* status='appended' → no UPDATE → { kind: 'already-appended' }
|
|
23
|
+
* status='cancelled' → no UPDATE → { kind: 'not-found' }
|
|
24
|
+
* no row → no UPDATE → { kind: 'not-found' }
|
|
25
|
+
* → cancel inside a UoW joins the active tx; outside, opens its own
|
|
26
|
+
* adapter.transaction so the SELECT-FOR-UPDATE + UPDATE land atomically
|
|
27
|
+
*
|
|
28
|
+
* # Worker path (background)
|
|
29
|
+
*
|
|
30
|
+
* start() spins a setInterval that, per tick, runs inside a fresh UoW:
|
|
31
|
+
* 1. force the lazy pg tx open via getOrBeginActiveTransaction
|
|
32
|
+
* 2. SELECT … WHERE status='pending' AND fire_at <= now()
|
|
33
|
+
* ORDER BY fire_at LIMIT $batchSize FOR UPDATE SKIP LOCKED
|
|
34
|
+
* — the SKIP LOCKED keeps multiple worker instances safe
|
|
35
|
+
* 3. for each row: reconstruct EventMessage, call eventStore.append
|
|
36
|
+
* (which joins the same UoW tx), UPDATE status='appended'
|
|
37
|
+
* 4. UoW COMMIT → all appends + status flips land atomically
|
|
38
|
+
*
|
|
39
|
+
* If the worker process dies mid-tick before COMMIT, the rows stay
|
|
40
|
+
* 'pending' and get re-picked on the next tick — at-least-once delivery.
|
|
41
|
+
* The schedule_id is reused as event.identifier so the events table's
|
|
42
|
+
* UNIQUE constraint dedupes any spurious double-append (e.g., on the
|
|
43
|
+
* rare race where a previous COMMIT succeeded but the status UPDATE
|
|
44
|
+
* failed afterwards — though here they share a tx, so this is mainly
|
|
45
|
+
* a defensive note).
|
|
46
|
+
*
|
|
47
|
+
* # Multi-node safety
|
|
48
|
+
*
|
|
49
|
+
* FOR UPDATE SKIP LOCKED is the locking primitive. Two worker processes
|
|
50
|
+
* polling the same table will hand non-overlapping batches of rows to
|
|
51
|
+
* their respective ticks; neither blocks the other. No leader election
|
|
52
|
+
* or distributed lock is needed.
|
|
53
|
+
*/
|
|
54
|
+
import type { EventScheduler, UoWRunner } from "@kronos-ts/messaging";
|
|
55
|
+
import type { EventStore } from "@kronos-ts/eventsourcing";
|
|
56
|
+
import type { PostgresAdapter } from "./adapter.js";
|
|
57
|
+
import { type TableNames } from "./schema.js";
|
|
58
|
+
import type { TagResolver } from "./postgres-event-store.js";
|
|
59
|
+
export interface PostgresEventSchedulerConfig {
|
|
60
|
+
readonly adapter: PostgresAdapter;
|
|
61
|
+
readonly eventStore: EventStore;
|
|
62
|
+
/**
|
|
63
|
+
* The composed UoW runner the worker uses per tick — must be wrapped
|
|
64
|
+
* with {@link lazyTransactionalUnitOfWorkFactory} (or equivalent) so
|
|
65
|
+
* the worker's UoW sees the postgres tx. Typically the resolved
|
|
66
|
+
* `unitOfWorkFactory` slot.
|
|
67
|
+
*/
|
|
68
|
+
readonly uowFactory: UoWRunner;
|
|
69
|
+
readonly tagResolver: TagResolver;
|
|
70
|
+
readonly tableNames?: TableNames;
|
|
71
|
+
/**
|
|
72
|
+
* Worker poll interval. Defaults to 1000ms — a compromise between
|
|
73
|
+
* fire-latency and DB chatter. Production users wanting tighter
|
|
74
|
+
* latency should lower this, ideally combined with LISTEN/NOTIFY
|
|
75
|
+
* wake-up (not yet wired here).
|
|
76
|
+
*/
|
|
77
|
+
readonly pollIntervalMs?: number;
|
|
78
|
+
/** Max rows the worker processes per tick. Defaults to 50. */
|
|
79
|
+
readonly batchSize?: number;
|
|
80
|
+
}
|
|
81
|
+
export interface PostgresEventScheduler extends EventScheduler {
|
|
82
|
+
/** Begin background polling. Idempotent. */
|
|
83
|
+
start(): Promise<void>;
|
|
84
|
+
/** Stop polling. Resolves once the in-flight tick (if any) has settled. */
|
|
85
|
+
stop(): Promise<void>;
|
|
86
|
+
}
|
|
87
|
+
export declare function createPostgresEventScheduler(config: PostgresEventSchedulerConfig): PostgresEventScheduler;
|
|
88
|
+
//# sourceMappingURL=postgres-event-scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-event-scheduler.d.ts","sourceRoot":"","sources":["../src/postgres-event-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAIH,OAAO,KAAK,EACV,cAAc,EAGd,SAAS,EACV,MAAM,sBAAsB,CAAA;AAM7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,KAAK,EAAE,eAAe,EAA8B,MAAM,cAAc,CAAA;AAE/E,OAAO,EAAE,KAAK,UAAU,EAAuB,MAAM,aAAa,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,4CAA4C;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,2EAA2E;IAC3E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB;AAaD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,4BAA4B,GACnC,sBAAsB,CAoMxB"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createPostgresEventScheduler — durable {@link EventScheduler} backed by
|
|
3
|
+
* the kronos_scheduled_events table, plus a polling worker that fires
|
|
4
|
+
* due schedules into the event store.
|
|
5
|
+
*
|
|
6
|
+
* # Schedule path (caller-driven, inside a UoW)
|
|
7
|
+
*
|
|
8
|
+
* schedule(event, at)
|
|
9
|
+
* → requires INVOCATION phase
|
|
10
|
+
* → captures tags via the configured TagResolver at schedule-time
|
|
11
|
+
* → INSERT row (schedule_id = event.identifier, status='pending')
|
|
12
|
+
* → joins the active UoW transaction via getOrBeginActiveTransaction;
|
|
13
|
+
* if the UoW rolls back, the schedule is never persisted
|
|
14
|
+
* → returns { id: schedule_id } as the cancellation token
|
|
15
|
+
*
|
|
16
|
+
* # Cancel path
|
|
17
|
+
*
|
|
18
|
+
* cancel(token)
|
|
19
|
+
* → SELECT … FOR UPDATE to lock the row + read prior status
|
|
20
|
+
* → branch:
|
|
21
|
+
* status='pending' → UPDATE status='cancelled' → { kind: 'cancelled' }
|
|
22
|
+
* status='appended' → no UPDATE → { kind: 'already-appended' }
|
|
23
|
+
* status='cancelled' → no UPDATE → { kind: 'not-found' }
|
|
24
|
+
* no row → no UPDATE → { kind: 'not-found' }
|
|
25
|
+
* → cancel inside a UoW joins the active tx; outside, opens its own
|
|
26
|
+
* adapter.transaction so the SELECT-FOR-UPDATE + UPDATE land atomically
|
|
27
|
+
*
|
|
28
|
+
* # Worker path (background)
|
|
29
|
+
*
|
|
30
|
+
* start() spins a setInterval that, per tick, runs inside a fresh UoW:
|
|
31
|
+
* 1. force the lazy pg tx open via getOrBeginActiveTransaction
|
|
32
|
+
* 2. SELECT … WHERE status='pending' AND fire_at <= now()
|
|
33
|
+
* ORDER BY fire_at LIMIT $batchSize FOR UPDATE SKIP LOCKED
|
|
34
|
+
* — the SKIP LOCKED keeps multiple worker instances safe
|
|
35
|
+
* 3. for each row: reconstruct EventMessage, call eventStore.append
|
|
36
|
+
* (which joins the same UoW tx), UPDATE status='appended'
|
|
37
|
+
* 4. UoW COMMIT → all appends + status flips land atomically
|
|
38
|
+
*
|
|
39
|
+
* If the worker process dies mid-tick before COMMIT, the rows stay
|
|
40
|
+
* 'pending' and get re-picked on the next tick — at-least-once delivery.
|
|
41
|
+
* The schedule_id is reused as event.identifier so the events table's
|
|
42
|
+
* UNIQUE constraint dedupes any spurious double-append (e.g., on the
|
|
43
|
+
* rare race where a previous COMMIT succeeded but the status UPDATE
|
|
44
|
+
* failed afterwards — though here they share a tx, so this is mainly
|
|
45
|
+
* a defensive note).
|
|
46
|
+
*
|
|
47
|
+
* # Multi-node safety
|
|
48
|
+
*
|
|
49
|
+
* FOR UPDATE SKIP LOCKED is the locking primitive. Two worker processes
|
|
50
|
+
* polling the same table will hand non-overlapping batches of rows to
|
|
51
|
+
* their respective ticks; neither blocks the other. No leader election
|
|
52
|
+
* or distributed lock is needed.
|
|
53
|
+
*/
|
|
54
|
+
import { qualifiedNameToString, qualifiedNameFromString } from "@kronos-ts/common";
|
|
55
|
+
import { getOrBeginActiveTransaction } from "@kronos-ts/messaging";
|
|
56
|
+
// Deep-path import: requireInvocationPhase is intentionally not in the
|
|
57
|
+
// messaging barrel — it's the framework-internal mutator guard consumed
|
|
58
|
+
// by append/send/emitUpdate, and now schedule(). Same access pattern.
|
|
59
|
+
import { requireInvocationPhase } from "@kronos-ts/messaging/processing-state";
|
|
60
|
+
import { IsolationLevel } from "./adapter.js";
|
|
61
|
+
import { encodeTag } from "./criteria-sql.js";
|
|
62
|
+
import { DEFAULT_TABLE_NAMES } from "./schema.js";
|
|
63
|
+
export function createPostgresEventScheduler(config) {
|
|
64
|
+
const { adapter, eventStore, uowFactory, tagResolver } = config;
|
|
65
|
+
const tables = config.tableNames ?? DEFAULT_TABLE_NAMES;
|
|
66
|
+
const pollIntervalMs = config.pollIntervalMs ?? 1000;
|
|
67
|
+
const batchSize = config.batchSize ?? 50;
|
|
68
|
+
async function insertSchedule(tx, event, at) {
|
|
69
|
+
const scheduleId = event.identifier;
|
|
70
|
+
const encodedTags = tagResolver
|
|
71
|
+
.resolve(event)
|
|
72
|
+
.map((t) => encodeTag(t.key, t.value));
|
|
73
|
+
await tx.query(`INSERT INTO ${tables.scheduled}
|
|
74
|
+
(schedule_id, fire_at, status, type, tags, payload, metadata, version, message_timestamp)
|
|
75
|
+
VALUES ($1, $2, 'pending', $3, $4, $5, $6, $7, $8)`, [
|
|
76
|
+
scheduleId,
|
|
77
|
+
at.toISOString(),
|
|
78
|
+
qualifiedNameToString(event.name),
|
|
79
|
+
encodedTags,
|
|
80
|
+
JSON.stringify(event.payload ?? {}),
|
|
81
|
+
JSON.stringify(event.metadata ?? {}),
|
|
82
|
+
event.version,
|
|
83
|
+
event.timestamp,
|
|
84
|
+
]);
|
|
85
|
+
return scheduleId;
|
|
86
|
+
}
|
|
87
|
+
async function cancelOnTx(tx, scheduleId) {
|
|
88
|
+
const rows = await tx.query(`SELECT status FROM ${tables.scheduled} WHERE schedule_id = $1 FOR UPDATE`, [scheduleId]);
|
|
89
|
+
const row = rows[0];
|
|
90
|
+
if (!row)
|
|
91
|
+
return { kind: "not-found" };
|
|
92
|
+
if (row.status === "appended")
|
|
93
|
+
return { kind: "already-appended" };
|
|
94
|
+
if (row.status === "cancelled")
|
|
95
|
+
return { kind: "not-found" };
|
|
96
|
+
await tx.query(`UPDATE ${tables.scheduled} SET status = 'cancelled' WHERE schedule_id = $1`, [scheduleId]);
|
|
97
|
+
return { kind: "cancelled" };
|
|
98
|
+
}
|
|
99
|
+
function decodeJsonbValue(v) {
|
|
100
|
+
if (typeof v === "string") {
|
|
101
|
+
try {
|
|
102
|
+
return JSON.parse(v);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return v;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return v ?? {};
|
|
109
|
+
}
|
|
110
|
+
function decodeTags(encoded) {
|
|
111
|
+
return encoded.map((t) => {
|
|
112
|
+
// U+001F unit separator — matches encodeTag in criteria-sql.ts
|
|
113
|
+
const sep = t.indexOf("");
|
|
114
|
+
return sep >= 0
|
|
115
|
+
? { key: t.slice(0, sep), value: t.slice(sep + 1) }
|
|
116
|
+
: { key: t, value: "" };
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function reconstructEvent(row) {
|
|
120
|
+
return {
|
|
121
|
+
identifier: row.schedule_id,
|
|
122
|
+
name: qualifiedNameFromString(row.type),
|
|
123
|
+
payload: decodeJsonbValue(row.payload),
|
|
124
|
+
metadata: decodeJsonbValue(row.metadata),
|
|
125
|
+
timestamp: Number(row.message_timestamp),
|
|
126
|
+
version: row.version,
|
|
127
|
+
tags: decodeTags(row.tags),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
// Worker state
|
|
131
|
+
let running = false;
|
|
132
|
+
let timer;
|
|
133
|
+
let activeTick;
|
|
134
|
+
async function tick() {
|
|
135
|
+
try {
|
|
136
|
+
await uowFactory(undefined, async () => {
|
|
137
|
+
const tx = await getOrBeginActiveTransaction();
|
|
138
|
+
if (!tx) {
|
|
139
|
+
// No lazy tx factory installed on the UoW — the scheduler was
|
|
140
|
+
// configured with a uowFactory that doesn't wrap the postgres tx
|
|
141
|
+
// manager. Without a shared tx the worker can't atomically
|
|
142
|
+
// append-and-mark, so refuse to fire rather than risk
|
|
143
|
+
// partial-state. This is a misconfiguration; surface loudly.
|
|
144
|
+
throw new Error("postgresEventScheduler worker requires a uowFactory wrapped with lazyTransactionalUnitOfWorkFactory + postgresTransactionManager");
|
|
145
|
+
}
|
|
146
|
+
const rows = await tx.query(`SELECT schedule_id, type, tags, payload, metadata, version, message_timestamp
|
|
147
|
+
FROM ${tables.scheduled}
|
|
148
|
+
WHERE status = 'pending' AND fire_at <= now()
|
|
149
|
+
ORDER BY fire_at
|
|
150
|
+
LIMIT $1
|
|
151
|
+
FOR UPDATE SKIP LOCKED`, [batchSize]);
|
|
152
|
+
if (rows.length === 0)
|
|
153
|
+
return;
|
|
154
|
+
for (const row of rows) {
|
|
155
|
+
const event = reconstructEvent(row);
|
|
156
|
+
// eventStore.append joins our shared UoW tx via
|
|
157
|
+
// getOrBeginActiveTransaction (postgres-event-store refactor).
|
|
158
|
+
// event_id = schedule_id, so re-fires after a crash dedupe via
|
|
159
|
+
// the events table's UNIQUE(event_id) constraint.
|
|
160
|
+
await eventStore.append([event]);
|
|
161
|
+
await tx.query(`UPDATE ${tables.scheduled} SET status = 'appended' WHERE schedule_id = $1`, [row.schedule_id]);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
// A failed tick leaves rows 'pending' (the UoW rolls back the whole
|
|
167
|
+
// batch). The next tick re-tries. Log so operators see persistent
|
|
168
|
+
// failures rather than a silent hang.
|
|
169
|
+
console.warn("postgresEventScheduler: worker tick failed:", err);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function scheduleNextTick() {
|
|
173
|
+
if (!running)
|
|
174
|
+
return;
|
|
175
|
+
timer = setTimeout(() => {
|
|
176
|
+
activeTick = tick().finally(() => {
|
|
177
|
+
activeTick = undefined;
|
|
178
|
+
scheduleNextTick();
|
|
179
|
+
});
|
|
180
|
+
}, pollIntervalMs);
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
async schedule(event, at) {
|
|
184
|
+
requireInvocationPhase();
|
|
185
|
+
const shared = await getOrBeginActiveTransaction();
|
|
186
|
+
if (shared === undefined) {
|
|
187
|
+
// schedule() must be transactional with the caller's UoW so a
|
|
188
|
+
// rolled-back command does not leak schedules. Refuse rather
|
|
189
|
+
// than open a side-channel tx the caller can't roll back.
|
|
190
|
+
throw new Error("postgresEventScheduler.schedule requires a UoW with a postgres transaction (configure lazyTransactionalUnitOfWorkFactory + postgresTransactionManager)");
|
|
191
|
+
}
|
|
192
|
+
const id = await insertSchedule(shared, event, at);
|
|
193
|
+
return { id };
|
|
194
|
+
},
|
|
195
|
+
async cancel(token) {
|
|
196
|
+
const shared = await getOrBeginActiveTransaction();
|
|
197
|
+
if (shared !== undefined) {
|
|
198
|
+
return cancelOnTx(shared, token.id);
|
|
199
|
+
}
|
|
200
|
+
return adapter.transaction(IsolationLevel.READ_COMMITTED, (tx) => cancelOnTx(tx, token.id));
|
|
201
|
+
},
|
|
202
|
+
async start() {
|
|
203
|
+
if (running)
|
|
204
|
+
return;
|
|
205
|
+
running = true;
|
|
206
|
+
scheduleNextTick();
|
|
207
|
+
},
|
|
208
|
+
async stop() {
|
|
209
|
+
running = false;
|
|
210
|
+
if (timer !== undefined) {
|
|
211
|
+
clearTimeout(timer);
|
|
212
|
+
timer = undefined;
|
|
213
|
+
}
|
|
214
|
+
if (activeTick !== undefined) {
|
|
215
|
+
try {
|
|
216
|
+
await activeTick;
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// The tick logs its own failures; stop() returns successfully
|
|
220
|
+
// either way so callers can shut down deterministically.
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=postgres-event-scheduler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-event-scheduler.js","sourceRoot":"","sources":["../src/postgres-event-scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-event-store.d.ts","sourceRoot":"","sources":["../src/postgres-event-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAGV,UAAU,EACX,MAAM,0BAA0B,CAAA;AAMjC,OAAO,KAAK,EACV,YAAY,EAMb,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"postgres-event-store.d.ts","sourceRoot":"","sources":["../src/postgres-event-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAGV,UAAU,EACX,MAAM,0BAA0B,CAAA;AAMjC,OAAO,KAAK,EACV,YAAY,EAMb,MAAM,sBAAsB,CAAA;AAS7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAA8B,MAAM,cAAc,CAAA;AAK/E,OAAO,EAAE,KAAK,UAAU,EAAuB,MAAM,aAAa,CAAA;AAIlE,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5E;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;CACjC;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,UAAU,CAwgBZ"}
|