@openora/core 0.4.1-canary.22 → 0.4.1-canary.26

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 (136) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/audit/__tests__/audit.service.test.js +24 -1
  3. package/dist/audit/__tests__/audit.service.test.js.map +1 -1
  4. package/dist/audit/contract/index.d.ts +8 -8
  5. package/dist/audit/contract/index.js +2 -2
  6. package/dist/audit/contract/index.js.map +1 -1
  7. package/dist/audit/router/index.d.ts +4 -4
  8. package/dist/audit/service/audit.service.d.ts +2 -0
  9. package/dist/audit/service/audit.service.d.ts.map +1 -1
  10. package/dist/audit/service/audit.service.js +9 -1
  11. package/dist/audit/service/audit.service.js.map +1 -1
  12. package/dist/casino/lobby/__tests__/lobby.cache.test.js +1 -1
  13. package/dist/casino/lobby/__tests__/lobby.cache.test.js.map +1 -1
  14. package/dist/cms/__tests__/cms.reads.test.d.ts +2 -0
  15. package/dist/cms/__tests__/cms.reads.test.d.ts.map +1 -0
  16. package/dist/cms/__tests__/{cms.cache.test.js → cms.reads.test.js} +2 -2
  17. package/dist/cms/__tests__/cms.reads.test.js.map +1 -0
  18. package/dist/cms/__tests__/cms.router.test.js +25 -22
  19. package/dist/cms/__tests__/cms.router.test.js.map +1 -1
  20. package/dist/contracts/schemas/events.d.ts +1 -0
  21. package/dist/contracts/schemas/events.d.ts.map +1 -1
  22. package/dist/contracts/schemas/events.js +2 -1
  23. package/dist/contracts/schemas/events.js.map +1 -1
  24. package/dist/engagement/chat/__tests__/chat.service.test.js +1 -1
  25. package/dist/engagement/chat/__tests__/chat.service.test.js.map +1 -1
  26. package/dist/iam/__tests__/iam.service.test.js +4 -3
  27. package/dist/iam/__tests__/iam.service.test.js.map +1 -1
  28. package/dist/pam/identity/__tests__/identity.rate-limit.test.js +4 -3
  29. package/dist/pam/identity/__tests__/identity.rate-limit.test.js.map +1 -1
  30. package/dist/pam/identity/__tests__/identity.service.test.js +6 -1
  31. package/dist/pam/identity/__tests__/identity.service.test.js.map +1 -1
  32. package/dist/pam/identity/service/identity.service.d.ts.map +1 -1
  33. package/dist/pam/identity/service/identity.service.js +1 -0
  34. package/dist/pam/identity/service/identity.service.js.map +1 -1
  35. package/dist/server/kernel/__tests__/cache.test.js +11 -57
  36. package/dist/server/kernel/__tests__/cache.test.js.map +1 -1
  37. package/dist/server/kernel/__tests__/event-bus.test.js +14 -1
  38. package/dist/server/kernel/__tests__/event-bus.test.js.map +1 -1
  39. package/dist/server/kernel/__tests__/rate-limiter.test.js +3 -45
  40. package/dist/server/kernel/__tests__/rate-limiter.test.js.map +1 -1
  41. package/dist/server/kernel/__tests__/redis-streams-broker.test.d.ts +2 -0
  42. package/dist/server/kernel/__tests__/redis-streams-broker.test.d.ts.map +1 -0
  43. package/dist/server/kernel/__tests__/redis-streams-broker.test.js +293 -0
  44. package/dist/server/kernel/__tests__/redis-streams-broker.test.js.map +1 -0
  45. package/dist/server/kernel/cache.d.ts +0 -12
  46. package/dist/server/kernel/cache.d.ts.map +1 -1
  47. package/dist/server/kernel/cache.js +0 -55
  48. package/dist/server/kernel/cache.js.map +1 -1
  49. package/dist/server/kernel/event-bus.d.ts +1 -16
  50. package/dist/server/kernel/event-bus.d.ts.map +1 -1
  51. package/dist/server/kernel/event-bus.js +3 -32
  52. package/dist/server/kernel/event-bus.js.map +1 -1
  53. package/dist/server/kernel/index.d.ts +4 -6
  54. package/dist/server/kernel/index.d.ts.map +1 -1
  55. package/dist/server/kernel/index.js +4 -6
  56. package/dist/server/kernel/index.js.map +1 -1
  57. package/dist/server/kernel/rate-limiter.d.ts +1 -10
  58. package/dist/server/kernel/rate-limiter.d.ts.map +1 -1
  59. package/dist/server/kernel/rate-limiter.js +0 -38
  60. package/dist/server/kernel/rate-limiter.js.map +1 -1
  61. package/dist/server/kernel/redis-streams-broker.d.ts +65 -0
  62. package/dist/server/kernel/redis-streams-broker.d.ts.map +1 -0
  63. package/dist/server/kernel/redis-streams-broker.js +208 -0
  64. package/dist/server/kernel/redis-streams-broker.js.map +1 -0
  65. package/dist/server/runtime/__tests__/create-app.test.d.ts +2 -0
  66. package/dist/server/runtime/__tests__/create-app.test.d.ts.map +1 -0
  67. package/dist/server/runtime/__tests__/create-app.test.js +60 -0
  68. package/dist/server/runtime/__tests__/create-app.test.js.map +1 -0
  69. package/dist/server/runtime/assert-durable-seams.d.ts +18 -0
  70. package/dist/server/runtime/assert-durable-seams.d.ts.map +1 -0
  71. package/dist/server/runtime/assert-durable-seams.js +32 -0
  72. package/dist/server/runtime/assert-durable-seams.js.map +1 -0
  73. package/dist/server/runtime/create-app.d.ts +15 -9
  74. package/dist/server/runtime/create-app.d.ts.map +1 -1
  75. package/dist/server/runtime/create-app.js +61 -49
  76. package/dist/server/runtime/create-app.js.map +1 -1
  77. package/dist/testing/fakes/__tests__/cache.test.d.ts +2 -0
  78. package/dist/testing/fakes/__tests__/cache.test.d.ts.map +1 -0
  79. package/dist/testing/fakes/__tests__/cache.test.js +89 -0
  80. package/dist/testing/fakes/__tests__/cache.test.js.map +1 -0
  81. package/dist/testing/fakes/__tests__/job-queue.test.d.ts.map +1 -0
  82. package/dist/{server/kernel → testing/fakes}/__tests__/job-queue.test.js +1 -1
  83. package/dist/testing/fakes/__tests__/job-queue.test.js.map +1 -0
  84. package/dist/testing/fakes/__tests__/rate-limiter.test.d.ts +2 -0
  85. package/dist/testing/fakes/__tests__/rate-limiter.test.d.ts.map +1 -0
  86. package/dist/testing/fakes/__tests__/rate-limiter.test.js +83 -0
  87. package/dist/testing/fakes/__tests__/rate-limiter.test.js.map +1 -0
  88. package/dist/testing/fakes/__tests__/realtime-authorizer.test.d.ts.map +1 -0
  89. package/dist/{server/kernel → testing/fakes}/__tests__/realtime-authorizer.test.js.map +1 -1
  90. package/dist/testing/fakes/__tests__/realtime-transport.test.d.ts.map +1 -0
  91. package/dist/{server/kernel → testing/fakes}/__tests__/realtime-transport.test.js.map +1 -1
  92. package/dist/testing/fakes/cache.d.ts +14 -0
  93. package/dist/testing/fakes/cache.d.ts.map +1 -0
  94. package/dist/testing/fakes/cache.js +56 -0
  95. package/dist/testing/fakes/cache.js.map +1 -0
  96. package/dist/testing/fakes/event-bus.d.ts +17 -0
  97. package/dist/testing/fakes/event-bus.d.ts.map +1 -0
  98. package/dist/testing/fakes/event-bus.js +30 -0
  99. package/dist/testing/fakes/event-bus.js.map +1 -0
  100. package/dist/{server/kernel → testing/fakes}/job-queue.d.ts +9 -9
  101. package/dist/{server/kernel → testing/fakes}/job-queue.d.ts.map +1 -1
  102. package/dist/{server/kernel → testing/fakes}/job-queue.js +9 -9
  103. package/dist/{server/kernel → testing/fakes}/job-queue.js.map +1 -1
  104. package/dist/testing/fakes/rate-limiter.d.ts +11 -0
  105. package/dist/testing/fakes/rate-limiter.d.ts.map +1 -0
  106. package/dist/testing/fakes/rate-limiter.js +39 -0
  107. package/dist/testing/fakes/rate-limiter.js.map +1 -0
  108. package/dist/{server/kernel → testing/fakes}/realtime-authorizer.d.ts.map +1 -1
  109. package/dist/{server/kernel → testing/fakes}/realtime-authorizer.js.map +1 -1
  110. package/dist/{server/kernel → testing/fakes}/realtime-transport.d.ts.map +1 -1
  111. package/dist/{server/kernel → testing/fakes}/realtime-transport.js +3 -1
  112. package/dist/testing/fakes/realtime-transport.js.map +1 -0
  113. package/dist/testing/index.d.ts +7 -0
  114. package/dist/testing/index.d.ts.map +1 -0
  115. package/dist/testing/index.js +11 -0
  116. package/dist/testing/index.js.map +1 -0
  117. package/dist/wallet/__tests__/wallet.rate-limit.test.js +1 -1
  118. package/dist/wallet/__tests__/wallet.rate-limit.test.js.map +1 -1
  119. package/package.json +6 -1
  120. package/turbo-generators/src/templates/module/agents.hbs +16 -57
  121. package/dist/cms/__tests__/cms.cache.test.d.ts +0 -2
  122. package/dist/cms/__tests__/cms.cache.test.d.ts.map +0 -1
  123. package/dist/cms/__tests__/cms.cache.test.js.map +0 -1
  124. package/dist/server/kernel/__tests__/job-queue.test.d.ts.map +0 -1
  125. package/dist/server/kernel/__tests__/job-queue.test.js.map +0 -1
  126. package/dist/server/kernel/__tests__/realtime-authorizer.test.d.ts.map +0 -1
  127. package/dist/server/kernel/__tests__/realtime-transport.test.d.ts.map +0 -1
  128. package/dist/server/kernel/realtime-transport.js.map +0 -1
  129. /package/dist/{server/kernel → testing/fakes}/__tests__/job-queue.test.d.ts +0 -0
  130. /package/dist/{server/kernel → testing/fakes}/__tests__/realtime-authorizer.test.d.ts +0 -0
  131. /package/dist/{server/kernel → testing/fakes}/__tests__/realtime-authorizer.test.js +0 -0
  132. /package/dist/{server/kernel → testing/fakes}/__tests__/realtime-transport.test.d.ts +0 -0
  133. /package/dist/{server/kernel → testing/fakes}/__tests__/realtime-transport.test.js +0 -0
  134. /package/dist/{server/kernel → testing/fakes}/realtime-authorizer.d.ts +0 -0
  135. /package/dist/{server/kernel → testing/fakes}/realtime-authorizer.js +0 -0
  136. /package/dist/{server/kernel → testing/fakes}/realtime-transport.d.ts +0 -0
@@ -8,12 +8,13 @@ import { HTTPException } from 'hono/http-exception';
8
8
  import { serve } from '@hono/node-server';
9
9
  import { resolve } from 'node:path';
10
10
  import { generateOpenApiSpec } from './openapi.js';
11
- import { Container, BullMqJobQueue, InMemoryBroker, InProcessCache, InProcessJobQueue, InProcessRateLimiter, InProcessRealtimeTransport, RedisCache, RedisRateLimiter, SseClientAuthorizer, createEventBus, createLogger, createRedisClient, withRequestContext, setErrorReporter, EVENT_BUS, } from '../kernel/index.js';
11
+ import { Container, BullMqJobQueue, RedisCache, RedisRateLimiter, RedisStreamsBroker, createEventBus, createLogger, createRedisClient, withRequestContext, setErrorReporter, EVENT_BUS, } from '../kernel/index.js';
12
12
  import { randomUUID } from 'node:crypto';
13
- import { MESSAGE_BROKER, JOB_QUEUE, REALTIME_TRANSPORT, REALTIME_CLIENT_AUTHORIZER, OUTBOX, ADMIN_PERMISSION_RESOLVER, RATE_LIMITER, CACHE, ERROR_TRACKING, composeContract, healthContract, IGAMING_CONFIG, PLATFORM_CONFIG, } from '@openora/core/contracts';
13
+ import { MESSAGE_BROKER, JOB_QUEUE, OUTBOX, ADMIN_PERMISSION_RESOLVER, RATE_LIMITER, CACHE, ERROR_TRACKING, composeContract, healthContract, IGAMING_CONFIG, PLATFORM_CONFIG, } from '@openora/core/contracts';
14
14
  import { DrizzleService, DRIZZLE, DrizzleOutboxWriter, OutboxRelay } from '../db/index.js';
15
15
  import { AdminGuard, ADMIN_GUARD, SessionResolver, AUTH_SESSION } from '../auth/index.js';
16
16
  import { loadPlugins } from '../plugin-host/index.js';
17
+ import { assertDurableSeamsBound } from './assert-durable-seams.js';
17
18
  import { loadPlatformConfig, resolvePlatformConfigPath } from '../kernel/platform-config-loader.js';
18
19
  // Path prefixes safe to cache at the HTTP layer: public, non-personalized reads
19
20
  // only (lobby feeds, public CMS content, the game catalogue). NOTHING
@@ -32,6 +33,26 @@ const PUBLIC_HTTP_CACHE_PATHS = [
32
33
  ];
33
34
  const DEFAULT_HTTP_CACHE_MAX_AGE_SECONDS = 30;
34
35
  const DEFAULT_HTTP_CACHE_STALE_WHILE_REVALIDATE_SECONDS = 60;
36
+ // Redis Streams consumer group name for MESSAGE_BROKER. Distinct deployments/services
37
+ // sharing one Redis MUST use distinct names so their subscribers don't compete for
38
+ // each other's events. The name is a durable identity: renaming it strands the old
39
+ // group's pending (delivered-but-unacked) entries and starts the new one at `$`, so
40
+ // it can never be derived from SERVICE_MANIFEST - that is a LIST of module ids
41
+ // (see service-manifest.ts) whose value reorders and grows as modules move.
42
+ // A split deployment must therefore name itself explicitly.
43
+ function resolveServiceName() {
44
+ const serviceName = process.env['SERVICE_NAME'];
45
+ if (serviceName) {
46
+ return serviceName;
47
+ }
48
+ if (process.env['SERVICE_MANIFEST']) {
49
+ throw new Error('[create-app] SERVICE_MANIFEST is set but SERVICE_NAME is not. A split service needs a stable ' +
50
+ 'name of its own: it becomes the MESSAGE_BROKER consumer group, and every service sharing a ' +
51
+ 'group competes for the same events instead of each receiving a copy. Set SERVICE_NAME to a ' +
52
+ 'stable identifier for this deployment (eg SERVICE_NAME=wallet).');
53
+ }
54
+ return 'monolith';
55
+ }
35
56
  function headersToRecord(headers) {
36
57
  const out = {};
37
58
  headers.forEach((value, key) => {
@@ -83,15 +104,21 @@ async function captureRawBody(req) {
83
104
  }
84
105
  /**
85
106
  * The single composition root: wires the DI container, boots every plugin in
86
- * `config.plugins`, and mounts the resulting oRPC router on a Hono app. Seam
87
- * defaults auto-upgrade when env vars are set - `REDIS_URL` binds `JOB_QUEUE`/
88
- * `RATE_LIMITER`/`CACHE` to their Redis-backed drivers, `OUTBOX_ENABLED` (or
89
- * `AMQP_URL`/`RABBITMQ_URL`) enables the transactional outbox relay - otherwise
90
- * every seam stays in-process (zero deps for dev/test). `container.dispose()`
91
- * (via `close()`) runs disposers in REVERSE registration order, so DRIZZLE is
92
- * registered before JOB_QUEUE to guarantee workers drain before the DB closes.
93
- * A router namespace registered by more than one plugin throws at boot, not at
94
- * request time.
107
+ * `config.plugins`, and mounts the resulting oRPC router on a Hono app.
108
+ * Production is distributed-only (ADR-0030, superseding ADR-0010/0014/0016/0028):
109
+ * `REDIS_URL` auto-binds `JOB_QUEUE`/`RATE_LIMITER`/`CACHE`/`MESSAGE_BROKER` to their
110
+ * Redis-backed drivers - the broker being the `RedisStreamsBroker` reference driver,
111
+ * which an overlay (RabbitMQ/Kafka) or a test's `configure` callback can replace.
112
+ * `assertDurableSeamsBound` runs right after
113
+ * plugins + `configure` and throws a clear, actionable error listing every
114
+ * always-needed seam that still has no binding - it never falls back to an
115
+ * in-process impl. `REALTIME_TRANSPORT` stays lazy (throws on first use) since not
116
+ * every deployment serves realtime traffic. `OUTBOX_ENABLED` (or
117
+ * `AMQP_URL`/`RABBITMQ_URL`) enables the transactional outbox relay.
118
+ * `container.dispose()` (via `close()`) runs disposers in REVERSE registration
119
+ * order, so DRIZZLE is registered before JOB_QUEUE to guarantee workers drain
120
+ * before the DB closes. A router namespace registered by more than one plugin
121
+ * throws at boot, not at request time.
95
122
  */
96
123
  export async function createApp(config) {
97
124
  if (config.databaseUrl) {
@@ -103,35 +130,31 @@ export async function createApp(config) {
103
130
  container.onDispose(() => svc.dispose());
104
131
  return svc;
105
132
  });
106
- container.register(MESSAGE_BROKER, () => {
107
- const broker = new InMemoryBroker();
108
- container.onDispose(() => broker.close());
109
- return broker;
110
- });
111
- // Enabled when OUTBOX_ENABLED is set or a durable broker is configured (AMQP_URL) -
112
- // a distributed deployment wants events that survive a crash between commit and
113
- // publish. In the default in-process monolith it stays off, so emit() keeps its
114
- // synchronous fan-out and emitInTransaction() guides callers to enable it.
133
+ // A distributed deployment wants events that survive a crash between commit and
134
+ // publish. Off by default: emit() keeps its best-effort fan-out and
135
+ // emitInTransaction() throws a guiding error until this is enabled.
136
+ // AMQP_URL/RABBITMQ_URL only signal the INTENT to run a RabbitMQ broker overlay -
137
+ // core binds no AMQP driver, so they enable the outbox and nothing else. The relay
138
+ // publishes to whatever MESSAGE_BROKER resolves to (the Redis Streams driver below,
139
+ // unless an overlay replaced it); set OUTBOX_ENABLED directly when that is the aim.
115
140
  const outboxEnabled = !!process.env['OUTBOX_ENABLED'] || !!process.env['AMQP_URL'] || !!process.env['RABBITMQ_URL'];
116
141
  if (outboxEnabled) {
117
142
  container.register(OUTBOX, () => new DrizzleOutboxWriter());
118
143
  }
119
144
  container.register(EVENT_BUS, (c) => createEventBus(c.get(MESSAGE_BROKER), createLogger('event-bus'), outboxEnabled ? c.get(OUTBOX) : undefined));
120
- // Default in-process fan-out served as SSE; an overlay rebinds to a managed
121
- // vendor (Ably/GetStream) without touching modules. See ADR-0007.
122
- container.register(REALTIME_TRANSPORT, () => new InProcessRealtimeTransport());
123
- // Default is first-party SSE (no token; the session cookie authorizes the stream).
124
- // A managed-vendor overlay rebinds this to mint a per-player scoped token. See ADR-0007.
125
- container.register(REALTIME_CLIENT_AUTHORIZER, () => new SseClientAuthorizer());
126
- // When REDIS_URL is set, JOB_QUEUE, the rate limiter and cache bind to the shipped
127
- // Redis reference adapters: BullMQ-backed durable jobs (survive restarts, real cron),
128
- // distributed throttling and cross-replica cache invalidation - mirrors the AMQP_URL
129
- // outbox precedent above. Otherwise the process-local in-process defaults stay (zero
130
- // deps for dev/test). Either way a consumer overlay can rebind any of these tokens
131
- // (plugins load after). The JOB_QUEUE disposer drains in-flight jobs before the DB
132
- // closes (DRIZZLE is resolved before JOB_QUEUE below, and disposers run in reverse).
145
+ // When REDIS_URL is set, JOB_QUEUE, the rate limiter, the cache and the message
146
+ // broker bind to the shipped Redis reference adapters: BullMQ-backed durable jobs
147
+ // (survive restarts, real cron), distributed throttling, cross-replica cache
148
+ // invalidation and cross-replica events over Redis Streams. There is no in-process
149
+ // fallback (ADR-0030) - a deployment without REDIS_URL must bind these itself (an
150
+ // overlay, or a test's `configure` callback), or `assertDurableSeamsBound` below
151
+ // throws. The JOB_QUEUE disposer drains in-flight jobs before the DB closes (DRIZZLE
152
+ // is resolved before JOB_QUEUE below, and disposers run in reverse).
133
153
  const redisUrl = process.env['REDIS_URL'];
134
154
  if (redisUrl) {
155
+ // Resolved eagerly, before any client is opened: a misconfigured service name is
156
+ // a boot error, not a surprise on whichever code path resolves the broker first.
157
+ const serviceName = resolveServiceName();
135
158
  container.register(JOB_QUEUE, () => {
136
159
  const q = new BullMqJobQueue(redisUrl);
137
160
  container.onDispose(() => q.close());
@@ -141,22 +164,10 @@ export async function createApp(config) {
141
164
  container.onDispose(() => redis.close());
142
165
  container.register(RATE_LIMITER, () => new RedisRateLimiter(redis));
143
166
  container.register(CACHE, () => new RedisCache(redis));
144
- }
145
- else {
146
- container.register(JOB_QUEUE, () => {
147
- const q = new InProcessJobQueue(createLogger('job-queue'));
148
- container.onDispose(() => q.close());
149
- return q;
150
- });
151
- container.register(RATE_LIMITER, () => {
152
- const limiter = new InProcessRateLimiter();
153
- container.onDispose(() => limiter.close());
154
- return limiter;
155
- });
156
- container.register(CACHE, () => {
157
- const cache = new InProcessCache();
158
- container.onDispose(() => cache.close());
159
- return cache;
167
+ container.register(MESSAGE_BROKER, () => {
168
+ const broker = new RedisStreamsBroker(redis, { serviceName });
169
+ container.onDispose(() => broker.close());
170
+ return broker;
160
171
  });
161
172
  }
162
173
  // One shared better-auth instance for both the per-request middleware and AdminGuard -
@@ -176,6 +187,7 @@ export async function createApp(config) {
176
187
  container.register(PLATFORM_CONFIG, () => loadPlatformConfig(resolvePlatformConfigPath()));
177
188
  const registry = await loadPlugins(config.plugins, container);
178
189
  await config.configure?.(container);
190
+ assertDurableSeamsBound(container);
179
191
  if (container.has(ERROR_TRACKING)) {
180
192
  const tracker = container.get(ERROR_TRACKING);
181
193
  setErrorReporter((error, context) => tracker.captureException(error, context));
@@ -1 +1 @@
1
- {"version":3,"file":"create-app.js","sourceRoot":"","sources":["../../../src/server/runtime/create-app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-app.js","sourceRoot":"","sources":["../../../src/server/runtime/create-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cache.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.test.d.ts","sourceRoot":"","sources":["../../../../src/testing/fakes/__tests__/cache.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,89 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { InProcessCache } from '../cache.js';
3
+ describe('InProcessCache', () => {
4
+ it('returns undefined for a key never set', async () => {
5
+ const cache = new InProcessCache();
6
+ await expect(cache.get('missing')).resolves.toBeUndefined();
7
+ cache.close();
8
+ });
9
+ it('round-trips a value within its TTL', async () => {
10
+ vi.useFakeTimers();
11
+ const cache = new InProcessCache();
12
+ await cache.set('k', { a: 1 }, { ttlMs: 1000 });
13
+ vi.advanceTimersByTime(999);
14
+ await expect(cache.get('k')).resolves.toEqual({ a: 1 });
15
+ cache.close();
16
+ vi.useRealTimers();
17
+ });
18
+ it('expires a value once its TTL elapses', async () => {
19
+ vi.useFakeTimers();
20
+ const cache = new InProcessCache();
21
+ await cache.set('k', 'v', { ttlMs: 1000 });
22
+ vi.advanceTimersByTime(1000);
23
+ await expect(cache.get('k')).resolves.toBeUndefined();
24
+ cache.close();
25
+ vi.useRealTimers();
26
+ });
27
+ it('set on an existing key refreshes its expiry', async () => {
28
+ vi.useFakeTimers();
29
+ const cache = new InProcessCache();
30
+ await cache.set('k', 'first', { ttlMs: 1000 });
31
+ vi.advanceTimersByTime(800);
32
+ await cache.set('k', 'second', { ttlMs: 1000 });
33
+ vi.advanceTimersByTime(800);
34
+ await expect(cache.get('k')).resolves.toBe('second');
35
+ cache.close();
36
+ vi.useRealTimers();
37
+ });
38
+ it('deletes a single key and an array of keys', async () => {
39
+ const cache = new InProcessCache();
40
+ await cache.set('a', 1, { ttlMs: 1000 });
41
+ await cache.set('b', 2, { ttlMs: 1000 });
42
+ await cache.set('c', 3, { ttlMs: 1000 });
43
+ await cache.delete('a');
44
+ await cache.delete(['b', 'c']);
45
+ await expect(cache.get('a')).resolves.toBeUndefined();
46
+ await expect(cache.get('b')).resolves.toBeUndefined();
47
+ await expect(cache.get('c')).resolves.toBeUndefined();
48
+ cache.close();
49
+ });
50
+ it('evicts the oldest-inserted entry once MAX_ENTRIES is reached', async () => {
51
+ const cache = new InProcessCache();
52
+ for (let i = 0; i < 5_000; i++) {
53
+ await cache.set(`k${i}`, i, { ttlMs: 60_000 });
54
+ }
55
+ await cache.set('overflow', 'v', { ttlMs: 60_000 });
56
+ // k0 was inserted first, so it is the one evicted - k1 and the newcomer survive.
57
+ await expect(cache.get('k0')).resolves.toBeUndefined();
58
+ await expect(cache.get('k1')).resolves.toBe(1);
59
+ await expect(cache.get('overflow')).resolves.toBe('v');
60
+ cache.close();
61
+ });
62
+ it('overwriting an existing key at capacity evicts nothing', async () => {
63
+ const cache = new InProcessCache();
64
+ for (let i = 0; i < 5_000; i++) {
65
+ await cache.set(`k${i}`, i, { ttlMs: 60_000 });
66
+ }
67
+ await cache.set('k0', 'updated', { ttlMs: 60_000 });
68
+ await expect(cache.get('k0')).resolves.toBe('updated');
69
+ await expect(cache.get('k1')).resolves.toBe(1);
70
+ cache.close();
71
+ });
72
+ it('the sweep drops expired entries that are never read again', async () => {
73
+ vi.useFakeTimers();
74
+ const cache = new InProcessCache();
75
+ await cache.set('k', 'v', { ttlMs: 1000 });
76
+ // Past the entry's TTL and the 60s sweep interval, without ever calling get().
77
+ await vi.advanceTimersByTimeAsync(60_000);
78
+ await expect(cache.get('k')).resolves.toBeUndefined();
79
+ cache.close();
80
+ vi.useRealTimers();
81
+ });
82
+ it('close clears every entry', async () => {
83
+ const cache = new InProcessCache();
84
+ await cache.set('k', 'v', { ttlMs: 60_000 });
85
+ cache.close();
86
+ await expect(cache.get('k')).resolves.toBeUndefined();
87
+ });
88
+ });
89
+ //# sourceMappingURL=cache.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.test.js","sourceRoot":"","sources":["../../../../src/testing/fakes/__tests__/cache.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-queue.test.d.ts","sourceRoot":"","sources":["../../../../src/testing/fakes/__tests__/job-queue.test.ts"],"names":[],"mappings":""}
@@ -1,9 +1,9 @@
1
1
  import { describe, it, expect, vi } from 'vitest';
2
- import { mock } from '../../../testing/mock.js';
3
2
  import { z } from 'zod';
4
3
  import { queue } from '@openora/core/contracts';
5
4
  import { findOneOrThrow } from '@openora/core/server';
6
5
  import { InProcessJobQueue } from '../job-queue.js';
6
+ import { mock } from '../../mock.js';
7
7
  function fakeLogger() {
8
8
  return mock({ error: vi.fn(), warn: vi.fn(), info: vi.fn(), debug: vi.fn() });
9
9
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-queue.test.js","sourceRoot":"","sources":["../../../../src/testing/fakes/__tests__/job-queue.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rate-limiter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.test.d.ts","sourceRoot":"","sources":["../../../../src/testing/fakes/__tests__/rate-limiter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { InProcessRateLimiter } from '../rate-limiter.js';
3
+ const OPTS = { limit: 3, windowMs: 1000 };
4
+ describe('InProcessRateLimiter', () => {
5
+ it('allows calls up to the limit', async () => {
6
+ const limiter = new InProcessRateLimiter();
7
+ for (let i = 0; i < 3; i++) {
8
+ await expect(limiter.consume('k', OPTS)).resolves.toEqual({ allowed: true, retryAfterMs: 0 });
9
+ }
10
+ limiter.close();
11
+ });
12
+ it('denies the call past the limit and reports the wait until the window resets', async () => {
13
+ vi.useFakeTimers();
14
+ const limiter = new InProcessRateLimiter();
15
+ for (let i = 0; i < 3; i++) {
16
+ await limiter.consume('k', OPTS);
17
+ }
18
+ vi.advanceTimersByTime(400);
19
+ await expect(limiter.consume('k', OPTS)).resolves.toEqual({
20
+ allowed: false,
21
+ retryAfterMs: 600,
22
+ });
23
+ limiter.close();
24
+ vi.useRealTimers();
25
+ });
26
+ it('a denied call does not extend the window', async () => {
27
+ vi.useFakeTimers();
28
+ const limiter = new InProcessRateLimiter();
29
+ for (let i = 0; i < 3; i++) {
30
+ await limiter.consume('k', OPTS);
31
+ }
32
+ vi.advanceTimersByTime(500);
33
+ await limiter.consume('k', OPTS);
34
+ vi.advanceTimersByTime(500);
35
+ await expect(limiter.consume('k', OPTS)).resolves.toMatchObject({ allowed: true });
36
+ limiter.close();
37
+ vi.useRealTimers();
38
+ });
39
+ it('rolls over into a fresh window once the current one elapses', async () => {
40
+ vi.useFakeTimers();
41
+ const limiter = new InProcessRateLimiter();
42
+ for (let i = 0; i < 3; i++) {
43
+ await limiter.consume('k', OPTS);
44
+ }
45
+ await expect(limiter.consume('k', OPTS)).resolves.toMatchObject({ allowed: false });
46
+ vi.advanceTimersByTime(1000);
47
+ await expect(limiter.consume('k', OPTS)).resolves.toEqual({ allowed: true, retryAfterMs: 0 });
48
+ limiter.close();
49
+ vi.useRealTimers();
50
+ });
51
+ it('keys are isolated - exhausting one leaves another untouched', async () => {
52
+ const limiter = new InProcessRateLimiter();
53
+ for (let i = 0; i < 3; i++) {
54
+ await limiter.consume('a', OPTS);
55
+ }
56
+ await expect(limiter.consume('a', OPTS)).resolves.toMatchObject({ allowed: false });
57
+ await expect(limiter.consume('b', OPTS)).resolves.toMatchObject({ allowed: true });
58
+ limiter.close();
59
+ });
60
+ it('reset clears a key back to a full allowance', async () => {
61
+ const limiter = new InProcessRateLimiter();
62
+ for (let i = 0; i < 3; i++) {
63
+ await limiter.consume('k', OPTS);
64
+ }
65
+ await expect(limiter.consume('k', OPTS)).resolves.toMatchObject({ allowed: false });
66
+ await limiter.reset('k');
67
+ await expect(limiter.consume('k', OPTS)).resolves.toEqual({ allowed: true, retryAfterMs: 0 });
68
+ limiter.close();
69
+ });
70
+ it('the sweep drops elapsed windows that are never consumed again', async () => {
71
+ vi.useFakeTimers();
72
+ const limiter = new InProcessRateLimiter();
73
+ for (let i = 0; i < 3; i++) {
74
+ await limiter.consume('k', OPTS);
75
+ }
76
+ // Past the window and the 60s sweep interval, without touching the key.
77
+ await vi.advanceTimersByTimeAsync(60_000);
78
+ await expect(limiter.consume('k', OPTS)).resolves.toEqual({ allowed: true, retryAfterMs: 0 });
79
+ limiter.close();
80
+ vi.useRealTimers();
81
+ });
82
+ });
83
+ //# sourceMappingURL=rate-limiter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.test.js","sourceRoot":"","sources":["../../../../src/testing/fakes/__tests__/rate-limiter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-authorizer.test.d.ts","sourceRoot":"","sources":["../../../../src/testing/fakes/__tests__/realtime-authorizer.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-authorizer.test.js","sourceRoot":"","sources":["../../../../src/server/kernel/__tests__/realtime-authorizer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,IAAI,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,cAAc;YAC1B,QAAQ,EAAE,CAAC,aAAa,CAAC;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG,IAAI,mBAAmB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"realtime-authorizer.test.js","sourceRoot":"","sources":["../../../../src/testing/fakes/__tests__/realtime-authorizer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,IAAI,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAC3F,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,cAAc;YAC1B,QAAQ,EAAE,CAAC,aAAa,CAAC;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG,IAAI,mBAAmB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-transport.test.d.ts","sourceRoot":"","sources":["../../../../src/testing/fakes/__tests__/realtime-transport.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"realtime-transport.test.js","sourceRoot":"","sources":["../../../../src/server/kernel/__tests__/realtime-transport.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"realtime-transport.test.js","sourceRoot":"","sources":["../../../../src/testing/fakes/__tests__/realtime-transport.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { CacheAdapter } from '@openora/core/contracts';
2
+ export declare class InProcessCache implements CacheAdapter {
3
+ private readonly entries;
4
+ private readonly sweeper;
5
+ constructor();
6
+ get<T>(key: string): Promise<T | undefined>;
7
+ set<T>(key: string, value: T, opts: {
8
+ ttlMs: number;
9
+ }): Promise<void>;
10
+ delete(key: string | string[]): Promise<void>;
11
+ private sweep;
12
+ close(): void;
13
+ }
14
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/testing/fakes/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAa5D,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;;IAOzD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAY3C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,OAAO,CAAC,KAAK;IASb,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,56 @@
1
+ const SWEEP_INTERVAL_MS = 60_000;
2
+ // ponytail: hard cap bounds memory against unbounded key growth (eg per-slug churn);
3
+ // eviction is oldest-insert (Map iteration order), not LRU - swap for an LRU if
4
+ // hit-rate under heavy key churn ever matters.
5
+ const MAX_ENTRIES = 5_000;
6
+ // Zero-dependency test-only double for `CACHE` (production auto-binds RedisCache on
7
+ // REDIS_URL - see `assertDurableSeamsBound`). Expiry is lazy (checked on access) plus
8
+ // an unref'd sweep so keys never revisited don't accumulate.
9
+ export class InProcessCache {
10
+ entries = new Map();
11
+ sweeper;
12
+ constructor() {
13
+ this.sweeper = setInterval(() => this.sweep(), SWEEP_INTERVAL_MS);
14
+ this.sweeper.unref?.();
15
+ }
16
+ get(key) {
17
+ const entry = this.entries.get(key);
18
+ if (!entry) {
19
+ return Promise.resolve(undefined);
20
+ }
21
+ if (Date.now() >= entry.expiresAt) {
22
+ this.entries.delete(key);
23
+ return Promise.resolve(undefined);
24
+ }
25
+ return Promise.resolve(entry.value);
26
+ }
27
+ set(key, value, opts) {
28
+ if (!this.entries.has(key) && this.entries.size >= MAX_ENTRIES) {
29
+ const oldestKey = this.entries.keys().next().value;
30
+ if (oldestKey !== undefined) {
31
+ this.entries.delete(oldestKey);
32
+ }
33
+ }
34
+ this.entries.set(key, { value, expiresAt: Date.now() + opts.ttlMs });
35
+ return Promise.resolve();
36
+ }
37
+ delete(key) {
38
+ for (const k of Array.isArray(key) ? key : [key]) {
39
+ this.entries.delete(k);
40
+ }
41
+ return Promise.resolve();
42
+ }
43
+ sweep() {
44
+ const now = Date.now();
45
+ for (const [key, entry] of this.entries) {
46
+ if (now >= entry.expiresAt) {
47
+ this.entries.delete(key);
48
+ }
49
+ }
50
+ }
51
+ close() {
52
+ clearInterval(this.sweeper);
53
+ this.entries.clear();
54
+ }
55
+ }
56
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/testing/fakes/cache.ts"],"names":[],"mappings":"AAEA,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,qFAAqF;AACrF,gFAAgF;AAChF,+CAA+C;AAC/C,MAAM,WAAW,GAAG,KAAK,CAAC;AAI1B,oFAAoF;AACpF,sFAAsF;AACtF,6DAA6D;AAC7D,MAAM,OAAO,cAAc;IACR,OAAO,GAAG,IAAI,GAAG,EAAiB,CAAC;IACnC,OAAO,CAAiC;IAEzD;QACE,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IACzB,CAAC;IAED,GAAG,CAAI,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAU,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,IAAuB;QACnD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACnD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,GAAsB;QAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;QACH,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import type { MessageBrokerAdapter, EventEnvelope, SubscribeOptions } from '@openora/core/contracts';
2
+ /**
3
+ * Test-only `MESSAGE_BROKER` double - `publish` fans out synchronously to
4
+ * whatever's subscribed in THIS process only; it does not survive a restart
5
+ * and does not reach other replicas. Production requires a durable
6
+ * `MessageBrokerAdapter` overlay instead (`createApp` throws otherwise -
7
+ * `assertDurableSeamsBound`). `subscribe`'s returned unsubscribe function is
8
+ * safe to call mid-dispatch: the handler list is copied on write, never
9
+ * mutated in place.
10
+ */
11
+ export declare class InMemoryBroker implements MessageBrokerAdapter {
12
+ private readonly handlers;
13
+ publish(envelope: EventEnvelope): void;
14
+ subscribe(topic: string, handler: (env: EventEnvelope) => void | Promise<void>, _options?: SubscribeOptions): () => void;
15
+ close(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=event-bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.ts","sourceRoot":"","sources":["../../../src/testing/fakes/event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,gBAAgB,EACjB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;GAQG;AACH,qBAAa,cAAe,YAAW,oBAAoB;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAGrB;IAEJ,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAMtC,SAAS,CACP,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACrD,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,MAAM,IAAI;IAaP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}