@chidchanun/bcp 0.2.10 → 0.2.12
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 +231 -286
- package/docs/README.md +60 -61
- package/docs/api-manifest.json +29 -2
- package/docs/api-reference.md +105 -85
- package/docs/docs-web-manifest.json +9 -5
- package/docs/platform-manifest.json +27 -4
- package/docs/releases/0.2.11.md +180 -0
- package/docs/releases/0.2.12.md +147 -0
- package/docs/transactional-outbox-events.md +465 -0
- package/docs/workflow-orchestration.md +374 -0
- package/package.json +11 -1
- package/packages/bundler/src/client-boundary.ts +2 -0
- package/packages/client/src/events.mjs +889 -0
- package/packages/client/src/events.ts +31 -0
- package/packages/client/src/workflow.mjs +601 -0
- package/packages/client/src/workflow.ts +23 -0
- package/packages/server/src/events.ts +1416 -0
- package/packages/server/src/workflow.ts +887 -0
package/docs/README.md
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
The `docs/` directory is the documentation source of truth for BCP Framework and is organized for **`bcp-docs-web`**.
|
|
4
4
|
|
|
5
|
-
> **Documentation target:** BCP Framework `0.2.
|
|
5
|
+
> **Documentation target:** BCP Framework `0.2.12 — Transactional Outbox & Events`
|
|
6
6
|
>
|
|
7
7
|
> **Release state:** unreleased development target until RC validation, tagging and npm publication complete.
|
|
8
8
|
|
|
9
9
|
## Documentation architecture
|
|
10
10
|
|
|
11
|
-
BCP uses three machine-readable
|
|
11
|
+
BCP uses three machine-readable contracts:
|
|
12
12
|
|
|
13
13
|
```text
|
|
14
14
|
docs/docs-web-manifest.json
|
|
@@ -38,56 +38,56 @@ Framework source and tests remain authoritative for runtime behavior.
|
|
|
38
38
|
| `0.2.8` | Background Jobs Platform |
|
|
39
39
|
| `0.2.9` | Job Scheduling Platform |
|
|
40
40
|
| `0.2.10` | Durable Jobs Platform |
|
|
41
|
+
| `0.2.11` | Workflow Orchestration |
|
|
42
|
+
| `0.2.12` | Transactional Outbox & Events |
|
|
41
43
|
|
|
42
|
-
## 0.2.
|
|
44
|
+
## 0.2.12 — Transactional Outbox & Events
|
|
43
45
|
|
|
44
|
-
`0.2.
|
|
46
|
+
`0.2.12` adds the server-only `bcp/events` public entrypoint.
|
|
45
47
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
| Source | Purpose |
|
|
49
|
-
| --- | --- |
|
|
50
|
-
| `background-jobs.md` | Base queue/worker contract |
|
|
51
|
-
| `job-scheduling.md` | Interval/cron schedules and scheduler leases |
|
|
52
|
-
| `durable-jobs.md` | Visibility leases, heartbeat recovery, DLQ, retention, statistics and Redis adapters |
|
|
53
|
-
| `api-reference.md` | Current `bcp/jobs` public APIs |
|
|
54
|
-
| `platform-manifest.json` | Durable Jobs capability flags |
|
|
55
|
-
| `api-manifest.json` | `bcp/jobs` guide ownership |
|
|
56
|
-
| `docs-web-manifest.json` | Durable Jobs navigation and `0.2.10` release route |
|
|
57
|
-
| `releases/0.2.10.md` | Durable Jobs Platform release notes |
|
|
58
|
-
|
|
59
|
-
Primary durable APIs:
|
|
48
|
+
Primary APIs:
|
|
60
49
|
|
|
61
50
|
```ts
|
|
62
51
|
import {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
52
|
+
createEventBus,
|
|
53
|
+
createMemoryOutboxStore,
|
|
54
|
+
createOutboxDispatcher,
|
|
55
|
+
createOutboxMigrationSql,
|
|
56
|
+
createSqlOutboxStore,
|
|
57
|
+
createTransactionalOutbox,
|
|
58
|
+
} from "bcp/events";
|
|
67
59
|
```
|
|
68
60
|
|
|
69
|
-
|
|
61
|
+
The central write model is:
|
|
70
62
|
|
|
71
63
|
```text
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
|
86
|
-
v
|
|
87
|
-
shared JobScheduleStore lease
|
|
64
|
+
BCP Database transaction
|
|
65
|
+
|
|
|
66
|
+
+-- business data
|
|
67
|
+
+-- SQL outbox event
|
|
68
|
+
|
|
|
69
|
+
COMMIT
|
|
70
|
+
|
|
|
71
|
+
v
|
|
72
|
+
Outbox Dispatcher
|
|
73
|
+
|
|
|
74
|
+
+-- bcp/jobs
|
|
75
|
+
+-- custom publisher
|
|
76
|
+
+-- local EventBus
|
|
88
77
|
```
|
|
89
78
|
|
|
90
|
-
|
|
79
|
+
`createSqlOutboxStore()` supports MySQL, PostgreSQL and SQLite and writes the event using the caller-provided `TransactionDatabase`. The dispatcher adds leasing, stale recovery, retry/backoff and terminal failure handling after commit.
|
|
80
|
+
|
|
81
|
+
New/updated documentation sources:
|
|
82
|
+
|
|
83
|
+
| Source | Purpose |
|
|
84
|
+
| --- | --- |
|
|
85
|
+
| `transactional-outbox-events.md` | Transactional publishing, SQL migration, dispatcher lifecycle and delivery guarantees |
|
|
86
|
+
| `api-reference.md` | `bcp/events` public APIs |
|
|
87
|
+
| `platform-manifest.json` | Events capability flags and public entrypoint |
|
|
88
|
+
| `api-manifest.json` | `bcp/events` source/guide ownership |
|
|
89
|
+
| `docs-web-manifest.json` | Outbox docs navigation and `0.2.12` release route |
|
|
90
|
+
| `releases/0.2.12.md` | Transactional Outbox & Events release notes |
|
|
91
91
|
|
|
92
92
|
## Update rule
|
|
93
93
|
|
|
@@ -96,15 +96,13 @@ When framework behavior or public surface changes:
|
|
|
96
96
|
1. Update framework source.
|
|
97
97
|
2. Add/update regression tests.
|
|
98
98
|
3. Update the matching Markdown guide.
|
|
99
|
-
4. Update `platform-manifest.json`
|
|
100
|
-
5. Update `api-manifest.json`
|
|
101
|
-
6. Update `docs-web-manifest.json`
|
|
99
|
+
4. Update `platform-manifest.json` for runtime/public-entrypoint/capability changes.
|
|
100
|
+
5. Update `api-manifest.json` for public API ownership/guide changes.
|
|
101
|
+
6. Update `docs-web-manifest.json` for website route/navigation changes.
|
|
102
102
|
7. Update `docs/releases/<version>.md`.
|
|
103
103
|
8. Change release state only after the release workflow reaches that state.
|
|
104
104
|
|
|
105
|
-
##
|
|
106
|
-
|
|
107
|
-
Important current routes:
|
|
105
|
+
## Important docs-web routes
|
|
108
106
|
|
|
109
107
|
| Website route | Markdown source |
|
|
110
108
|
| --- | --- |
|
|
@@ -114,17 +112,16 @@ Important current routes:
|
|
|
114
112
|
| `/docs/background-jobs` | `background-jobs.md` |
|
|
115
113
|
| `/docs/job-scheduling` | `job-scheduling.md` |
|
|
116
114
|
| `/docs/durable-jobs` | `durable-jobs.md` |
|
|
117
|
-
| `/docs/
|
|
115
|
+
| `/docs/workflow-orchestration` | `workflow-orchestration.md` |
|
|
116
|
+
| `/docs/transactional-outbox-events` | `transactional-outbox-events.md` |
|
|
118
117
|
| `/docs/database` | `database.md` |
|
|
119
118
|
| `/docs/api-reference` | `api-reference.md` |
|
|
120
|
-
| `/releases/0.2.
|
|
119
|
+
| `/releases/0.2.12` | `releases/0.2.12.md` |
|
|
121
120
|
|
|
122
121
|
Every route/source pair is validated by unit tests.
|
|
123
122
|
|
|
124
123
|
## Public entrypoints
|
|
125
124
|
|
|
126
|
-
Current documented entrypoints:
|
|
127
|
-
|
|
128
125
|
```text
|
|
129
126
|
bcp
|
|
130
127
|
bcp/island
|
|
@@ -135,6 +132,8 @@ bcp/error
|
|
|
135
132
|
bcp/database
|
|
136
133
|
bcp/auth
|
|
137
134
|
bcp/jobs
|
|
135
|
+
bcp/workflow
|
|
136
|
+
bcp/events
|
|
138
137
|
bcp/observability
|
|
139
138
|
bcp/server
|
|
140
139
|
bcp/server-only
|
|
@@ -145,27 +144,27 @@ The API-manifest entrypoint set must match the platform public-entrypoint set ex
|
|
|
145
144
|
|
|
146
145
|
## Release validation
|
|
147
146
|
|
|
148
|
-
Before publishing `0.2.
|
|
147
|
+
Before publishing `0.2.12`:
|
|
149
148
|
|
|
150
149
|
```bash
|
|
151
150
|
npm run typecheck
|
|
152
151
|
npm run test:unit
|
|
153
152
|
npm run test:integration
|
|
154
|
-
npm run test:package
|
|
155
153
|
npm run test:e2e
|
|
154
|
+
npm run test:package
|
|
156
155
|
npm run rc:check
|
|
157
156
|
```
|
|
158
157
|
|
|
159
|
-
|
|
158
|
+
Transactional Outbox & Events validation covers:
|
|
160
159
|
|
|
161
|
-
-
|
|
162
|
-
-
|
|
163
|
-
-
|
|
164
|
-
-
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
- compiled `
|
|
160
|
+
- transaction-bound SQL outbox insertion,
|
|
161
|
+
- queue handoff,
|
|
162
|
+
- custom/event-bus delivery,
|
|
163
|
+
- retry and terminal failure,
|
|
164
|
+
- dispatcher lease recovery,
|
|
165
|
+
- MySQL/PostgreSQL/SQLite migration generation,
|
|
166
|
+
- server-only browser boundary enforcement,
|
|
167
|
+
- compiled `events.mjs` package execution,
|
|
169
168
|
- docs/platform/API version parity.
|
|
170
169
|
|
|
171
170
|
The final release tag must point to the exact commit that passed the complete RC sequence.
|
package/docs/api-manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"framework": "bcp",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.12",
|
|
5
5
|
"releaseState": "unreleased",
|
|
6
6
|
"coverage": "public-entrypoints",
|
|
7
7
|
"entrypoints": [
|
|
@@ -77,7 +77,8 @@
|
|
|
77
77
|
"summary": "Provider-neutral MySQL, PostgreSQL and SQLite query, transaction, lifecycle and migration primitives.",
|
|
78
78
|
"guides": [
|
|
79
79
|
"/docs/database",
|
|
80
|
-
"/docs/database-migrations"
|
|
80
|
+
"/docs/database-migrations",
|
|
81
|
+
"/docs/transactional-outbox-events"
|
|
81
82
|
]
|
|
82
83
|
},
|
|
83
84
|
{
|
|
@@ -104,6 +105,32 @@
|
|
|
104
105
|
"/docs/background-jobs",
|
|
105
106
|
"/docs/job-scheduling",
|
|
106
107
|
"/docs/durable-jobs",
|
|
108
|
+
"/docs/transactional-outbox-events",
|
|
109
|
+
"/docs/observability"
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"package": "bcp/workflow",
|
|
114
|
+
"source": "packages/client/src/workflow.ts",
|
|
115
|
+
"environment": "server",
|
|
116
|
+
"route": "/docs/api-reference#bcp-workflow",
|
|
117
|
+
"summary": "Persistent workflow orchestration with sequential and parallel steps, retries, delays, compensation, run leases and optional durable queue execution.",
|
|
118
|
+
"guides": [
|
|
119
|
+
"/docs/workflow-orchestration",
|
|
120
|
+
"/docs/durable-jobs",
|
|
121
|
+
"/docs/observability"
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"package": "bcp/events",
|
|
126
|
+
"source": "packages/client/src/events.ts",
|
|
127
|
+
"environment": "server",
|
|
128
|
+
"route": "/docs/api-reference#bcp-events",
|
|
129
|
+
"summary": "Transactional outbox and event delivery APIs with SQL persistence, dispatcher leases, retries, stale recovery, queue handoff and in-process event bus delivery.",
|
|
130
|
+
"guides": [
|
|
131
|
+
"/docs/transactional-outbox-events",
|
|
132
|
+
"/docs/database",
|
|
133
|
+
"/docs/durable-jobs",
|
|
107
134
|
"/docs/observability"
|
|
108
135
|
]
|
|
109
136
|
},
|
package/docs/api-reference.md
CHANGED
|
@@ -54,7 +54,7 @@ Server-only Database Platform v2 APIs.
|
|
|
54
54
|
|
|
55
55
|
Built-in SQL providers are MySQL, PostgreSQL and SQLite. `BcpDatabase` instances expose lazy query/execute/transaction operations plus explicit `connect()`, `disconnect()` and backward-compatible `close()` lifecycle methods.
|
|
56
56
|
|
|
57
|
-
Related guides: [Database](database.md), [Database Migrations](database-migrations.md).
|
|
57
|
+
Related guides: [Database](database.md), [Database Migrations](database-migrations.md), [Transactional Outbox & Events](transactional-outbox-events.md).
|
|
58
58
|
|
|
59
59
|
## `bcp/auth`
|
|
60
60
|
|
|
@@ -68,118 +68,138 @@ Related guides: [Authentication](authentication.md), [Auth Session Stores](auth-
|
|
|
68
68
|
|
|
69
69
|
Server-only Background Jobs, Job Scheduling and Durable Jobs APIs.
|
|
70
70
|
|
|
71
|
-
Core queue APIs
|
|
71
|
+
Core queue APIs include `createJobQueue()`, `createMemoryJobQueueAdapter()`, queue/worker records, retry/backoff, visibility leases, heartbeat renewal, stale recovery, DLQ operations, retention cleanup and queue statistics.
|
|
72
|
+
|
|
73
|
+
Scheduling APIs include `createJobScheduler()`, `createMemoryJobScheduleStore()`, `nextCronTime()` and `nextScheduleTime()`.
|
|
74
|
+
|
|
75
|
+
Durable Redis-compatible APIs added in `0.2.10` include `createRedisJobQueueAdapter()` and `createRedisJobScheduleStore()`.
|
|
76
|
+
|
|
77
|
+
BCP does not install a Redis library and does not create the connection. Applications own authentication, TLS, Cluster/Sentinel configuration and connection shutdown.
|
|
78
|
+
|
|
79
|
+
The processing model is at-least-once. Handlers that perform non-idempotent external side effects should use application-level idempotency protection.
|
|
80
|
+
|
|
81
|
+
Related guides: [Background Jobs Platform](background-jobs.md), [Job Scheduling Platform](job-scheduling.md), [Durable Jobs Platform](durable-jobs.md), [Transactional Outbox & Events](transactional-outbox-events.md), [Observability Platform v2](observability.md).
|
|
82
|
+
|
|
83
|
+
## `bcp/workflow`
|
|
84
|
+
|
|
85
|
+
Server-only Workflow Orchestration APIs added in `0.2.11`.
|
|
72
86
|
|
|
73
87
|
```ts
|
|
74
88
|
import {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
type CleanupJobsOptions,
|
|
79
|
-
type DeadLetterJobRecord,
|
|
80
|
-
type EnqueueJobOptions,
|
|
81
|
-
type HeartbeatJobOptions,
|
|
82
|
-
type JobHandler,
|
|
83
|
-
type JobHandlerContext,
|
|
84
|
-
type JobQueueAdapter,
|
|
85
|
-
type JobQueueOptions,
|
|
86
|
-
type JobQueueStats,
|
|
87
|
-
type JobRecord,
|
|
88
|
-
type JobRetryDelay,
|
|
89
|
-
type JobState,
|
|
90
|
-
type JobWorker,
|
|
91
|
-
type MemoryJobQueueAdapter,
|
|
92
|
-
type ProcessNextJobOptions,
|
|
93
|
-
type RecoverStaleJobsOptions,
|
|
94
|
-
type RequeueDeadLetterOptions,
|
|
95
|
-
type ReserveJobOptions,
|
|
96
|
-
type StartJobWorkerOptions,
|
|
97
|
-
} from "bcp/jobs";
|
|
89
|
+
createMemoryWorkflowStore,
|
|
90
|
+
createWorkflow,
|
|
91
|
+
} from "bcp/workflow";
|
|
98
92
|
```
|
|
99
93
|
|
|
100
|
-
|
|
94
|
+
`createWorkflow()` defines persistent server-side workflows with sequential steps, parallel groups, per-step retry policies, persisted delays and compensation handlers.
|
|
101
95
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
type MemoryJobScheduleStore,
|
|
115
|
-
type RunDueSchedulesOptions,
|
|
116
|
-
type ScheduleJobOptions,
|
|
117
|
-
type StartJobSchedulerOptions,
|
|
118
|
-
} from "bcp/jobs";
|
|
96
|
+
Workflow controls include:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
start()
|
|
100
|
+
run()
|
|
101
|
+
get()
|
|
102
|
+
list()
|
|
103
|
+
resume()
|
|
104
|
+
retry()
|
|
105
|
+
cancel()
|
|
106
|
+
compensate()
|
|
107
|
+
close()
|
|
119
108
|
```
|
|
120
109
|
|
|
121
|
-
|
|
110
|
+
When an existing `BackgroundJobQueue` is supplied, workflow execution and delay continuation can run through `bcp/jobs`.
|
|
111
|
+
|
|
112
|
+
`WorkflowStore.claim()` / `release()` form the run-level lease boundary for multi-instance stores.
|
|
113
|
+
|
|
114
|
+
Related guides: [Workflow Orchestration](workflow-orchestration.md), [Durable Jobs Platform](durable-jobs.md), [Observability Platform v2](observability.md).
|
|
115
|
+
|
|
116
|
+
## `bcp/events`
|
|
117
|
+
|
|
118
|
+
Server-only Transactional Outbox & Events APIs added in `0.2.12`.
|
|
122
119
|
|
|
123
120
|
```ts
|
|
124
121
|
import {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
122
|
+
createEventBus,
|
|
123
|
+
createMemoryOutboxStore,
|
|
124
|
+
createOutboxDispatcher,
|
|
125
|
+
createOutboxMigrationSql,
|
|
126
|
+
createSqlOutboxStore,
|
|
127
|
+
createTransactionalOutbox,
|
|
128
|
+
type ClaimOutboxEventsOptions,
|
|
129
|
+
type CleanupOutboxOptions,
|
|
130
|
+
type EventBus,
|
|
131
|
+
type FailOutboxEventOptions,
|
|
132
|
+
type MemoryOutboxStore,
|
|
133
|
+
type OutboxDispatcher,
|
|
134
|
+
type OutboxDispatcherOptions,
|
|
135
|
+
type OutboxDispatcherRunner,
|
|
136
|
+
type OutboxEventHandler,
|
|
137
|
+
type OutboxEventHandlerContext,
|
|
138
|
+
type OutboxEventRecord,
|
|
139
|
+
type OutboxEventState,
|
|
140
|
+
type OutboxRetryDelay,
|
|
141
|
+
type OutboxStats,
|
|
142
|
+
type OutboxStore,
|
|
143
|
+
type PublishOutboxEventOptions,
|
|
144
|
+
type SqlOutboxStore,
|
|
145
|
+
type SqlOutboxStoreOptions,
|
|
146
|
+
type TransactionalOutbox,
|
|
147
|
+
type TransactionalOutboxOptions,
|
|
148
|
+
} from "bcp/events";
|
|
132
149
|
```
|
|
133
150
|
|
|
134
|
-
###
|
|
151
|
+
### Transactional publishing
|
|
135
152
|
|
|
136
|
-
`
|
|
153
|
+
`createTransactionalOutbox()` exposes `publish(transaction, type, payload, options)`.
|
|
137
154
|
|
|
138
|
-
|
|
139
|
-
immediate/delayed enqueue
|
|
140
|
-
retry/backoff
|
|
141
|
-
cancellation
|
|
142
|
-
manual processNext()
|
|
143
|
-
worker concurrency
|
|
144
|
-
visibility timeout
|
|
145
|
-
heartbeat lease renewal
|
|
146
|
-
stale-running recovery
|
|
147
|
-
DLQ inspection/requeue
|
|
148
|
-
terminal retention cleanup
|
|
149
|
-
queue statistics
|
|
150
|
-
```
|
|
155
|
+
The supplied `TransactionDatabase` is the same object received inside `db.transaction()`, allowing the application row and outbox event row to commit or roll back together.
|
|
151
156
|
|
|
152
|
-
|
|
157
|
+
### SQL store
|
|
153
158
|
|
|
154
|
-
`
|
|
159
|
+
`createSqlOutboxStore()` supports MySQL, PostgreSQL and SQLite through the existing BCP database abstraction.
|
|
155
160
|
|
|
156
|
-
|
|
161
|
+
`createOutboxMigrationSql()` generates the outbox table/index DDL for those providers.
|
|
157
162
|
|
|
158
|
-
|
|
163
|
+
The SQL store persists payload/metadata, correlation/causation/aggregate IDs, retry counts, state timestamps and dispatcher lease information.
|
|
159
164
|
|
|
160
|
-
|
|
165
|
+
### Dispatcher
|
|
161
166
|
|
|
162
|
-
|
|
167
|
+
`createOutboxDispatcher()` supports:
|
|
163
168
|
|
|
164
|
-
|
|
169
|
+
```text
|
|
170
|
+
batched claim
|
|
171
|
+
dispatcher lease
|
|
172
|
+
stale recovery
|
|
173
|
+
retry/backoff
|
|
174
|
+
terminal failure
|
|
175
|
+
durable job queue handoff
|
|
176
|
+
custom publisher callback
|
|
177
|
+
in-process EventBus delivery
|
|
178
|
+
runner lifecycle
|
|
179
|
+
```
|
|
165
180
|
|
|
166
|
-
`
|
|
181
|
+
With `queue` configured, event `order.created` is enqueued as `event.order.created` using stable job ID `outbox:<event-id>`.
|
|
167
182
|
|
|
168
|
-
|
|
169
|
-
interface RedisCommandClient {
|
|
170
|
-
sendCommand(
|
|
171
|
-
command: string[]
|
|
172
|
-
): Promise<unknown>;
|
|
173
|
-
}
|
|
174
|
-
```
|
|
183
|
+
### Stores
|
|
175
184
|
|
|
176
|
-
|
|
185
|
+
`OutboxStore` is the persistence and concurrency boundary.
|
|
177
186
|
|
|
178
|
-
|
|
187
|
+
`createMemoryOutboxStore()` is intended for tests and single-process development. It does not provide durable transactional persistence.
|
|
179
188
|
|
|
180
|
-
|
|
189
|
+
### States
|
|
190
|
+
|
|
191
|
+
```text
|
|
192
|
+
pending
|
|
193
|
+
processing
|
|
194
|
+
published
|
|
195
|
+
failed
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
`published` means the configured dispatcher destination accepted the event. It does not mean a downstream queued consumer has completed.
|
|
199
|
+
|
|
200
|
+
Delivery is at-least-once; consumers should use idempotency controls for non-repeatable external side effects.
|
|
181
201
|
|
|
182
|
-
Related guides: [
|
|
202
|
+
Related guides: [Transactional Outbox & Events](transactional-outbox-events.md), [Database](database.md), [Durable Jobs Platform](durable-jobs.md), [Observability Platform v2](observability.md).
|
|
183
203
|
|
|
184
204
|
## `bcp/observability`
|
|
185
205
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"framework": "bcp",
|
|
4
|
-
"versionTarget": "0.2.
|
|
4
|
+
"versionTarget": "0.2.12",
|
|
5
5
|
"releaseState": "unreleased",
|
|
6
6
|
"sections": [
|
|
7
7
|
{
|
|
@@ -48,16 +48,17 @@
|
|
|
48
48
|
{
|
|
49
49
|
"id": "database",
|
|
50
50
|
"title": "Database",
|
|
51
|
-
"description": "Provider-neutral MySQL, PostgreSQL and SQLite primitives, lifecycle and
|
|
51
|
+
"description": "Provider-neutral MySQL, PostgreSQL and SQLite primitives, lifecycle, migrations and transactional outbox integration.",
|
|
52
52
|
"pages": [
|
|
53
53
|
{ "route": "/docs/database", "source": "database.md", "title": "Database" },
|
|
54
|
-
{ "route": "/docs/database-migrations", "source": "database-migrations.md", "title": "Database Migrations" }
|
|
54
|
+
{ "route": "/docs/database-migrations", "source": "database-migrations.md", "title": "Database Migrations" },
|
|
55
|
+
{ "route": "/docs/transactional-outbox-events", "source": "transactional-outbox-events.md", "title": "Transactional Outbox & Events" }
|
|
55
56
|
]
|
|
56
57
|
},
|
|
57
58
|
{
|
|
58
59
|
"id": "runtime",
|
|
59
60
|
"title": "Runtime & Infrastructure",
|
|
60
|
-
"description": "Middleware, durable background jobs, scheduling, observability, logging, caching, security and production hardening.",
|
|
61
|
+
"description": "Middleware, durable background jobs, scheduling, workflow orchestration, event delivery, observability, logging, caching, security and production hardening.",
|
|
61
62
|
"pages": [
|
|
62
63
|
{ "route": "/docs/middleware", "source": "middleware.md", "title": "Middleware" },
|
|
63
64
|
{ "route": "/docs/hydration", "source": "hydration.md", "title": "Hydration" },
|
|
@@ -66,6 +67,7 @@
|
|
|
66
67
|
{ "route": "/docs/background-jobs", "source": "background-jobs.md", "title": "Background Jobs Platform" },
|
|
67
68
|
{ "route": "/docs/job-scheduling", "source": "job-scheduling.md", "title": "Job Scheduling Platform" },
|
|
68
69
|
{ "route": "/docs/durable-jobs", "source": "durable-jobs.md", "title": "Durable Jobs Platform" },
|
|
70
|
+
{ "route": "/docs/workflow-orchestration", "source": "workflow-orchestration.md", "title": "Workflow Orchestration" },
|
|
69
71
|
{ "route": "/docs/caching", "source": "caching.md", "title": "Caching" },
|
|
70
72
|
{ "route": "/docs/security", "source": "security.md", "title": "Security" },
|
|
71
73
|
{ "route": "/docs/production-hardening", "source": "production-hardening.md", "title": "Production Hardening" }
|
|
@@ -111,7 +113,9 @@
|
|
|
111
113
|
}
|
|
112
114
|
],
|
|
113
115
|
"releases": [
|
|
114
|
-
{ "route": "/releases/0.2.
|
|
116
|
+
{ "route": "/releases/0.2.12", "source": "releases/0.2.12.md", "version": "0.2.12", "state": "unreleased" },
|
|
117
|
+
{ "route": "/releases/0.2.11", "source": "releases/0.2.11.md", "version": "0.2.11" },
|
|
118
|
+
{ "route": "/releases/0.2.10", "source": "releases/0.2.10.md", "version": "0.2.10" },
|
|
115
119
|
{ "route": "/releases/0.2.9", "source": "releases/0.2.9.md", "version": "0.2.9" },
|
|
116
120
|
{ "route": "/releases/0.2.8", "source": "releases/0.2.8.md", "version": "0.2.8" },
|
|
117
121
|
{ "route": "/releases/0.2.7", "source": "releases/0.2.7.md", "version": "0.2.7" },
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"framework": "bcp",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.12",
|
|
5
5
|
"releaseState": "unreleased",
|
|
6
|
-
"baseline": "
|
|
6
|
+
"baseline": "transactional-outbox-events",
|
|
7
7
|
"runtime": {
|
|
8
8
|
"node": ">=24.11.0",
|
|
9
9
|
"react": "19",
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
"bcp/database",
|
|
21
21
|
"bcp/auth",
|
|
22
22
|
"bcp/jobs",
|
|
23
|
+
"bcp/workflow",
|
|
24
|
+
"bcp/events",
|
|
23
25
|
"bcp/observability",
|
|
24
26
|
"bcp/server",
|
|
25
27
|
"bcp/server-only",
|
|
@@ -90,6 +92,25 @@
|
|
|
90
92
|
"deadLetterRequeue": true,
|
|
91
93
|
"jobRetentionCleanup": true,
|
|
92
94
|
"jobQueueStatistics": true,
|
|
95
|
+
"workflowOrchestration": true,
|
|
96
|
+
"workflowStoreContract": true,
|
|
97
|
+
"workflowRunLeases": true,
|
|
98
|
+
"workflowSequentialSteps": true,
|
|
99
|
+
"workflowParallelSteps": true,
|
|
100
|
+
"workflowStepRetries": true,
|
|
101
|
+
"workflowDelays": true,
|
|
102
|
+
"workflowCompensation": true,
|
|
103
|
+
"workflowQueueExecution": true,
|
|
104
|
+
"transactionalOutboxEvents": true,
|
|
105
|
+
"outboxStoreContract": true,
|
|
106
|
+
"sqlOutboxStore": true,
|
|
107
|
+
"outboxDispatcher": true,
|
|
108
|
+
"outboxDispatcherLeases": true,
|
|
109
|
+
"outboxRetryRecovery": true,
|
|
110
|
+
"outboxRetentionCleanup": true,
|
|
111
|
+
"outboxStatistics": true,
|
|
112
|
+
"eventBus": true,
|
|
113
|
+
"outboxJobDelivery": true,
|
|
93
114
|
"databaseMigrations": true,
|
|
94
115
|
"databaseAdapterContract": true,
|
|
95
116
|
"databasePostgresql": true,
|
|
@@ -129,7 +150,7 @@
|
|
|
129
150
|
"s3-compatible"
|
|
130
151
|
],
|
|
131
152
|
"compatibility": {
|
|
132
|
-
"previousBaseline": "0.2.
|
|
153
|
+
"previousBaseline": "0.2.11",
|
|
133
154
|
"intentionalBreakingChangesFromPreviousBaseline": false,
|
|
134
155
|
"migrationGuide": "migration-0.2.md"
|
|
135
156
|
},
|
|
@@ -149,7 +170,9 @@
|
|
|
149
170
|
"backgroundJobs": "background-jobs.md",
|
|
150
171
|
"jobScheduling": "job-scheduling.md",
|
|
151
172
|
"durableJobs": "durable-jobs.md",
|
|
173
|
+
"workflowOrchestration": "workflow-orchestration.md",
|
|
174
|
+
"transactionalOutboxEvents": "transactional-outbox-events.md",
|
|
152
175
|
"migrationGuide": "migration-0.2.md",
|
|
153
|
-
"releaseNotes": "releases/0.2.
|
|
176
|
+
"releaseNotes": "releases/0.2.12.md"
|
|
154
177
|
}
|
|
155
178
|
}
|