@beignet/core 0.0.3 → 0.0.5

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 (360) hide show
  1. package/CHANGELOG.md +159 -0
  2. package/README.md +792 -50
  3. package/dist/application/index.d.ts +28 -2
  4. package/dist/application/index.d.ts.map +1 -1
  5. package/dist/application/index.js +140 -12
  6. package/dist/application/index.js.map +1 -1
  7. package/dist/client/client.d.ts +2 -2
  8. package/dist/client/client.d.ts.map +1 -1
  9. package/dist/client/client.js +136 -48
  10. package/dist/client/client.js.map +1 -1
  11. package/dist/client/error-messages.d.ts +14 -0
  12. package/dist/client/error-messages.d.ts.map +1 -0
  13. package/dist/client/error-messages.js +23 -0
  14. package/dist/client/error-messages.js.map +1 -0
  15. package/dist/client/index.d.ts +8 -4
  16. package/dist/client/index.d.ts.map +1 -1
  17. package/dist/client/index.js +6 -2
  18. package/dist/client/index.js.map +1 -1
  19. package/dist/client/types.d.ts +35 -5
  20. package/dist/client/types.d.ts.map +1 -1
  21. package/dist/client-only.d.ts +8 -0
  22. package/dist/client-only.d.ts.map +1 -0
  23. package/dist/client-only.js +8 -0
  24. package/dist/client-only.js.map +1 -0
  25. package/dist/config/index.d.ts +5 -5
  26. package/dist/config/index.d.ts.map +1 -1
  27. package/dist/config/index.js +2 -2
  28. package/dist/config/index.js.map +1 -1
  29. package/dist/contracts/catalog-errors.d.ts +27 -0
  30. package/dist/contracts/catalog-errors.d.ts.map +1 -0
  31. package/dist/contracts/catalog-errors.js +69 -0
  32. package/dist/contracts/catalog-errors.js.map +1 -0
  33. package/dist/contracts/contract-builder.d.ts +15 -12
  34. package/dist/contracts/contract-builder.d.ts.map +1 -1
  35. package/dist/contracts/contract-builder.js +15 -41
  36. package/dist/contracts/contract-builder.js.map +1 -1
  37. package/dist/contracts/contract-group.d.ts +11 -8
  38. package/dist/contracts/contract-group.d.ts.map +1 -1
  39. package/dist/contracts/contract-group.js +13 -40
  40. package/dist/contracts/contract-group.js.map +1 -1
  41. package/dist/contracts/contract-like.d.ts +1 -1
  42. package/dist/contracts/contract-like.d.ts.map +1 -1
  43. package/dist/contracts/index.d.ts +13 -9
  44. package/dist/contracts/index.d.ts.map +1 -1
  45. package/dist/contracts/index.js +9 -5
  46. package/dist/contracts/index.js.map +1 -1
  47. package/dist/contracts/openapi-meta.d.ts +48 -0
  48. package/dist/contracts/openapi-meta.d.ts.map +1 -1
  49. package/dist/contracts/openapi-meta.js +3 -0
  50. package/dist/contracts/openapi-meta.js.map +1 -1
  51. package/dist/contracts/path-template.d.ts +1 -1
  52. package/dist/contracts/path-template.js +2 -2
  53. package/dist/contracts/path-template.js.map +1 -1
  54. package/dist/contracts/schema-shape.d.ts +37 -0
  55. package/dist/contracts/schema-shape.d.ts.map +1 -0
  56. package/dist/contracts/schema-shape.js +61 -0
  57. package/dist/contracts/schema-shape.js.map +1 -0
  58. package/dist/contracts/success-status.d.ts +32 -0
  59. package/dist/contracts/success-status.d.ts.map +1 -0
  60. package/dist/contracts/success-status.js +18 -0
  61. package/dist/contracts/success-status.js.map +1 -0
  62. package/dist/contracts/types.d.ts +25 -5
  63. package/dist/contracts/types.d.ts.map +1 -1
  64. package/dist/contracts/types.js.map +1 -1
  65. package/dist/contracts/utils.d.ts +1 -1
  66. package/dist/contracts/utils.d.ts.map +1 -1
  67. package/dist/contracts/utils.js +1 -1
  68. package/dist/contracts/utils.js.map +1 -1
  69. package/dist/domain/events.d.ts +1 -1
  70. package/dist/domain/events.d.ts.map +1 -1
  71. package/dist/domain/events.js +1 -1
  72. package/dist/domain/events.js.map +1 -1
  73. package/dist/domain/index.d.ts +3 -3
  74. package/dist/domain/index.d.ts.map +1 -1
  75. package/dist/domain/index.js +3 -3
  76. package/dist/domain/index.js.map +1 -1
  77. package/dist/errors/catalog.d.ts +9 -1
  78. package/dist/errors/catalog.d.ts.map +1 -1
  79. package/dist/errors/catalog.js +7 -1
  80. package/dist/errors/catalog.js.map +1 -1
  81. package/dist/errors/http.d.ts +10 -0
  82. package/dist/errors/http.d.ts.map +1 -1
  83. package/dist/errors/http.js +11 -1
  84. package/dist/errors/http.js.map +1 -1
  85. package/dist/errors/index.d.ts +4 -4
  86. package/dist/errors/index.d.ts.map +1 -1
  87. package/dist/errors/index.js +4 -4
  88. package/dist/errors/index.js.map +1 -1
  89. package/dist/errors/response.d.ts +4 -1
  90. package/dist/errors/response.d.ts.map +1 -1
  91. package/dist/errors/response.js.map +1 -1
  92. package/dist/events/index.d.ts +10 -12
  93. package/dist/events/index.d.ts.map +1 -1
  94. package/dist/events/index.js +10 -10
  95. package/dist/events/index.js.map +1 -1
  96. package/dist/idempotency/index.d.ts +5 -3
  97. package/dist/idempotency/index.d.ts.map +1 -1
  98. package/dist/idempotency/index.js.map +1 -1
  99. package/dist/jobs/index.d.ts +12 -14
  100. package/dist/jobs/index.d.ts.map +1 -1
  101. package/dist/jobs/index.js +13 -13
  102. package/dist/jobs/index.js.map +1 -1
  103. package/dist/notifications/index.d.ts +14 -16
  104. package/dist/notifications/index.d.ts.map +1 -1
  105. package/dist/notifications/index.js +14 -14
  106. package/dist/notifications/index.js.map +1 -1
  107. package/dist/openapi/index.d.ts +8 -3
  108. package/dist/openapi/index.d.ts.map +1 -1
  109. package/dist/openapi/index.js +41 -29
  110. package/dist/openapi/index.js.map +1 -1
  111. package/dist/openapi/schema-introspector.d.ts +37 -0
  112. package/dist/openapi/schema-introspector.d.ts.map +1 -1
  113. package/dist/openapi/schema-introspector.js +23 -17
  114. package/dist/openapi/schema-introspector.js.map +1 -1
  115. package/dist/outbox/index.d.ts +15 -6
  116. package/dist/outbox/index.d.ts.map +1 -1
  117. package/dist/outbox/index.js +60 -16
  118. package/dist/outbox/index.js.map +1 -1
  119. package/dist/ports/audit.d.ts +56 -10
  120. package/dist/ports/audit.d.ts.map +1 -1
  121. package/dist/ports/audit.js +71 -3
  122. package/dist/ports/audit.js.map +1 -1
  123. package/dist/ports/auth.d.ts +92 -0
  124. package/dist/ports/auth.d.ts.map +1 -1
  125. package/dist/ports/auth.js +92 -0
  126. package/dist/ports/auth.js.map +1 -1
  127. package/dist/ports/events.d.ts +2 -2
  128. package/dist/ports/events.d.ts.map +1 -1
  129. package/dist/ports/index.d.ts +62 -33
  130. package/dist/ports/index.d.ts.map +1 -1
  131. package/dist/ports/index.js +28 -34
  132. package/dist/ports/index.js.map +1 -1
  133. package/dist/ports/policy.d.ts +32 -3
  134. package/dist/ports/policy.d.ts.map +1 -1
  135. package/dist/ports/policy.js +13 -2
  136. package/dist/ports/policy.js.map +1 -1
  137. package/dist/ports/testing.d.ts +1030 -2
  138. package/dist/ports/testing.d.ts.map +1 -1
  139. package/dist/ports/testing.js +1031 -1
  140. package/dist/ports/testing.js.map +1 -1
  141. package/dist/ports/unbound.d.ts +21 -0
  142. package/dist/ports/unbound.d.ts.map +1 -0
  143. package/dist/ports/unbound.js +57 -0
  144. package/dist/ports/unbound.js.map +1 -0
  145. package/dist/ports/unit-of-work.d.ts +1 -1
  146. package/dist/ports/unit-of-work.d.ts.map +1 -1
  147. package/dist/ports/unit-of-work.js +1 -1
  148. package/dist/ports/unit-of-work.js.map +1 -1
  149. package/dist/providers/index.d.ts +3 -2
  150. package/dist/providers/index.d.ts.map +1 -1
  151. package/dist/providers/index.js +3 -2
  152. package/dist/providers/index.js.map +1 -1
  153. package/dist/providers/instrumentation.d.ts +45 -4
  154. package/dist/providers/instrumentation.d.ts.map +1 -1
  155. package/dist/providers/instrumentation.js +25 -6
  156. package/dist/providers/instrumentation.js.map +1 -1
  157. package/dist/providers/metadata.d.ts +39 -0
  158. package/dist/providers/metadata.d.ts.map +1 -0
  159. package/dist/providers/metadata.js +169 -0
  160. package/dist/providers/metadata.js.map +1 -0
  161. package/dist/providers/provider.d.ts +114 -9
  162. package/dist/providers/provider.d.ts.map +1 -1
  163. package/dist/providers/provider.js +3 -20
  164. package/dist/providers/provider.js.map +1 -1
  165. package/dist/schedules/index.d.ts +94 -13
  166. package/dist/schedules/index.d.ts.map +1 -1
  167. package/dist/schedules/index.js +66 -12
  168. package/dist/schedules/index.js.map +1 -1
  169. package/dist/server/audit-context.d.ts +29 -0
  170. package/dist/server/audit-context.d.ts.map +1 -0
  171. package/dist/server/audit-context.js +44 -0
  172. package/dist/server/audit-context.js.map +1 -0
  173. package/dist/server/context.d.ts +141 -0
  174. package/dist/server/context.d.ts.map +1 -0
  175. package/dist/server/context.js +39 -0
  176. package/dist/server/context.js.map +1 -0
  177. package/dist/server/contract-like.d.ts +1 -1
  178. package/dist/server/contract-like.d.ts.map +1 -1
  179. package/dist/server/contract-like.js +1 -1
  180. package/dist/server/contract-like.js.map +1 -1
  181. package/dist/server/health.d.ts +2 -2
  182. package/dist/server/health.d.ts.map +1 -1
  183. package/dist/server/hooks/auth.d.ts +49 -10
  184. package/dist/server/hooks/auth.d.ts.map +1 -1
  185. package/dist/server/hooks/auth.js +77 -37
  186. package/dist/server/hooks/auth.js.map +1 -1
  187. package/dist/server/hooks/cors.d.ts +1 -1
  188. package/dist/server/hooks/cors.d.ts.map +1 -1
  189. package/dist/server/hooks/errors.d.ts +2 -2
  190. package/dist/server/hooks/errors.d.ts.map +1 -1
  191. package/dist/server/hooks/errors.js +2 -2
  192. package/dist/server/hooks/errors.js.map +1 -1
  193. package/dist/server/hooks/idempotency.d.ts +78 -0
  194. package/dist/server/hooks/idempotency.d.ts.map +1 -0
  195. package/dist/server/hooks/idempotency.js +154 -0
  196. package/dist/server/hooks/idempotency.js.map +1 -0
  197. package/dist/server/hooks/index.d.ts +8 -7
  198. package/dist/server/hooks/index.d.ts.map +1 -1
  199. package/dist/server/hooks/index.js +6 -5
  200. package/dist/server/hooks/index.js.map +1 -1
  201. package/dist/server/hooks/logging.d.ts +2 -2
  202. package/dist/server/hooks/logging.d.ts.map +1 -1
  203. package/dist/server/hooks/logging.js +1 -1
  204. package/dist/server/hooks/logging.js.map +1 -1
  205. package/dist/server/hooks/rate-limit.d.ts +25 -7
  206. package/dist/server/hooks/rate-limit.d.ts.map +1 -1
  207. package/dist/server/hooks/rate-limit.js +47 -12
  208. package/dist/server/hooks/rate-limit.js.map +1 -1
  209. package/dist/server/hooks.d.ts +1 -1
  210. package/dist/server/hooks.d.ts.map +1 -1
  211. package/dist/server/hooks.js +1 -1
  212. package/dist/server/hooks.js.map +1 -1
  213. package/dist/server/http.d.ts +61 -35
  214. package/dist/server/http.d.ts.map +1 -1
  215. package/dist/server/http.js +1 -20
  216. package/dist/server/http.js.map +1 -1
  217. package/dist/server/index.d.ts +36 -12
  218. package/dist/server/index.d.ts.map +1 -1
  219. package/dist/server/index.js +24 -8
  220. package/dist/server/index.js.map +1 -1
  221. package/dist/server/instrumentation.d.ts +108 -0
  222. package/dist/server/instrumentation.d.ts.map +1 -0
  223. package/dist/server/instrumentation.js +297 -0
  224. package/dist/server/instrumentation.js.map +1 -0
  225. package/dist/server/openapi.d.ts +3 -3
  226. package/dist/server/openapi.d.ts.map +1 -1
  227. package/dist/server/openapi.js +1 -1
  228. package/dist/server/openapi.js.map +1 -1
  229. package/dist/server/providers/index.d.ts +3 -3
  230. package/dist/server/providers/index.d.ts.map +1 -1
  231. package/dist/server/providers/index.js +3 -3
  232. package/dist/server/providers/index.js.map +1 -1
  233. package/dist/server/providers/loadProviderConfig.d.ts +2 -2
  234. package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
  235. package/dist/server/providers/loadProviderConfig.js +2 -2
  236. package/dist/server/providers/loadProviderConfig.js.map +1 -1
  237. package/dist/server/request-context.d.ts +67 -0
  238. package/dist/server/request-context.d.ts.map +1 -0
  239. package/dist/server/request-context.js +79 -0
  240. package/dist/server/request-context.js.map +1 -0
  241. package/dist/server/server-context.d.ts +38 -0
  242. package/dist/server/server-context.d.ts.map +1 -0
  243. package/dist/server/server-context.js +38 -0
  244. package/dist/server/server-context.js.map +1 -0
  245. package/dist/server/server.d.ts +105 -33
  246. package/dist/server/server.d.ts.map +1 -1
  247. package/dist/server/server.js +434 -118
  248. package/dist/server/server.js.map +1 -1
  249. package/dist/server/types.d.ts +2 -2
  250. package/dist/server/types.d.ts.map +1 -1
  251. package/dist/server/types.js +2 -2
  252. package/dist/server/types.js.map +1 -1
  253. package/dist/server/use-case-route.d.ts +263 -0
  254. package/dist/server/use-case-route.d.ts.map +1 -0
  255. package/dist/server/use-case-route.js +77 -0
  256. package/dist/server/use-case-route.js.map +1 -0
  257. package/dist/server-only.d.ts +8 -0
  258. package/dist/server-only.d.ts.map +1 -0
  259. package/dist/server-only.js +8 -0
  260. package/dist/server-only.js.map +1 -0
  261. package/dist/tasks/index.d.ts +139 -0
  262. package/dist/tasks/index.d.ts.map +1 -0
  263. package/dist/tasks/index.js +98 -0
  264. package/dist/tasks/index.js.map +1 -0
  265. package/dist/testing/index.d.ts +607 -5
  266. package/dist/testing/index.d.ts.map +1 -1
  267. package/dist/testing/index.js +426 -4
  268. package/dist/testing/index.js.map +1 -1
  269. package/dist/tracing/index.d.ts +89 -0
  270. package/dist/tracing/index.d.ts.map +1 -0
  271. package/dist/tracing/index.js +101 -0
  272. package/dist/tracing/index.js.map +1 -0
  273. package/dist/uploads/client.d.ts +1 -1
  274. package/dist/uploads/client.d.ts.map +1 -1
  275. package/dist/uploads/index.d.ts +2 -2
  276. package/dist/uploads/index.d.ts.map +1 -1
  277. package/dist/uploads/index.js +1 -1
  278. package/dist/uploads/index.js.map +1 -1
  279. package/package.json +24 -2
  280. package/src/application/index.ts +193 -10
  281. package/src/client/client.ts +148 -150
  282. package/src/client/error-messages.ts +35 -0
  283. package/src/client/index.ts +12 -4
  284. package/src/client/types.ts +44 -5
  285. package/src/client-only.ts +7 -0
  286. package/src/config/index.ts +6 -6
  287. package/src/contracts/catalog-errors.ts +115 -0
  288. package/src/contracts/contract-builder.ts +39 -76
  289. package/src/contracts/contract-group.ts +33 -68
  290. package/src/contracts/contract-like.ts +1 -1
  291. package/src/contracts/index.ts +24 -11
  292. package/src/contracts/openapi-meta.ts +55 -0
  293. package/src/contracts/path-template.ts +2 -2
  294. package/src/contracts/schema-shape.ts +75 -0
  295. package/src/contracts/success-status.ts +68 -0
  296. package/src/contracts/types.ts +32 -5
  297. package/src/contracts/utils.ts +5 -2
  298. package/src/domain/events.ts +6 -2
  299. package/src/domain/index.ts +3 -3
  300. package/src/errors/catalog.ts +9 -1
  301. package/src/errors/http.ts +11 -1
  302. package/src/errors/index.ts +4 -4
  303. package/src/errors/response.ts +4 -1
  304. package/src/events/index.ts +12 -26
  305. package/src/idempotency/index.ts +5 -3
  306. package/src/jobs/index.ts +14 -24
  307. package/src/notifications/index.ts +17 -27
  308. package/src/openapi/index.ts +73 -38
  309. package/src/openapi/schema-introspector.ts +68 -17
  310. package/src/outbox/index.ts +84 -19
  311. package/src/ports/audit.ts +120 -11
  312. package/src/ports/auth.ts +132 -0
  313. package/src/ports/events.ts +2 -2
  314. package/src/ports/index.ts +104 -35
  315. package/src/ports/policy.ts +50 -3
  316. package/src/ports/testing.ts +2220 -33
  317. package/src/ports/unbound.ts +64 -0
  318. package/src/ports/unit-of-work.ts +6 -2
  319. package/src/providers/index.ts +16 -3
  320. package/src/providers/instrumentation.ts +86 -7
  321. package/src/providers/metadata.ts +234 -0
  322. package/src/providers/provider.ts +168 -9
  323. package/src/schedules/index.ts +173 -23
  324. package/src/server/audit-context.ts +45 -0
  325. package/src/server/context.ts +224 -0
  326. package/src/server/contract-like.ts +1 -1
  327. package/src/server/health.ts +2 -2
  328. package/src/server/hooks/auth.ts +141 -51
  329. package/src/server/hooks/cors.ts +1 -1
  330. package/src/server/hooks/errors.ts +7 -4
  331. package/src/server/hooks/idempotency.ts +263 -0
  332. package/src/server/hooks/index.ts +14 -7
  333. package/src/server/hooks/logging.ts +3 -3
  334. package/src/server/hooks/rate-limit.ts +85 -17
  335. package/src/server/hooks.ts +1 -1
  336. package/src/server/http.ts +78 -51
  337. package/src/server/index.ts +62 -12
  338. package/src/server/instrumentation.ts +470 -0
  339. package/src/server/openapi.ts +4 -4
  340. package/src/server/providers/index.ts +6 -3
  341. package/src/server/providers/loadProviderConfig.ts +4 -4
  342. package/src/server/request-context.ts +116 -0
  343. package/src/server/server-context.ts +44 -0
  344. package/src/server/server.ts +886 -238
  345. package/src/server/types.ts +2 -2
  346. package/src/server/use-case-route.ts +430 -0
  347. package/src/server-only.ts +7 -0
  348. package/src/tasks/index.ts +275 -0
  349. package/src/testing/index.ts +1142 -6
  350. package/src/tracing/index.ts +176 -0
  351. package/src/uploads/client.ts +1 -1
  352. package/src/uploads/index.ts +7 -3
  353. package/dist/ports/mailer.d.ts +0 -6
  354. package/dist/ports/mailer.d.ts.map +0 -1
  355. package/dist/ports/mailer.js +0 -2
  356. package/dist/ports/mailer.js.map +0 -1
  357. package/dist/ports/schedules.d.ts +0 -9
  358. package/dist/ports/schedules.d.ts.map +0 -1
  359. package/dist/ports/schedules.js +0 -2
  360. package/dist/ports/schedules.js.map +0 -1
@@ -1,5 +1,369 @@
1
- import { createSystemClock } from "../ports/clock";
2
- import { createUuidIdGenerator, } from "../ports/id-generator";
1
+ import { createMemoryIdempotencyStore, } from "../idempotency/index.js";
2
+ import { createMemoryMailer } from "../mail/index.js";
3
+ import { createMemoryNotificationPort, } from "../notifications/index.js";
4
+ import { createMemoryOutbox } from "../outbox/index.js";
5
+ import { createMemoryAuditLog, } from "../ports/audit.js";
6
+ import { createMemoryCache } from "../ports/cache.js";
7
+ import { createFrozenClock, createSystemClock, } from "../ports/clock.js";
8
+ import { createUuidIdGenerator, } from "../ports/id-generator.js";
9
+ import { createGate, createMemoryRateLimiter, createMemoryStorage, createNoopLogger, createNoopUnitOfWork, } from "../ports/index.js";
10
+ import { createRecordingEventBus, createRecordingJobDispatcher, createTestActivityContext, createTestSystemActor, createTestUserActor, } from "../ports/testing.js";
11
+ import { createAmbientAuditLog } from "../server/audit-context.js";
12
+ import { clearActiveRequestContext, enterActiveRequestContext, } from "../server/request-context.js";
13
+ /**
14
+ * Create standard memory/fake Beignet ports for tests.
15
+ *
16
+ * Use this as the starting point for use-case and route tests, then layer
17
+ * app-owned repositories or provider fakes through `base` and `overrides`.
18
+ *
19
+ * @param options - Optional app ports, overrides, and Unit of Work behavior.
20
+ * @returns Ports plus captured state for assertions.
21
+ */
22
+ export function createTestPorts(options = {}) {
23
+ const audit = createMemoryAuditLog();
24
+ const cache = createMemoryCache();
25
+ const clock = options.clock ?? createFrozenClock();
26
+ const { bus: eventBus, events } = createRecordingEventBus();
27
+ const { jobs, dispatchedJobs } = createRecordingJobDispatcher();
28
+ const idempotency = createMemoryIdempotencyStore();
29
+ const ids = options.ids ?? createUuidIdGenerator();
30
+ const logger = createNoopLogger();
31
+ const mailer = createMemoryMailer();
32
+ const notifications = createMemoryNotificationPort();
33
+ const outbox = createMemoryOutbox();
34
+ const rateLimit = createMemoryRateLimiter();
35
+ const storage = createMemoryStorage();
36
+ const defaultPorts = {
37
+ audit: createAmbientAuditLog(audit),
38
+ cache,
39
+ clock,
40
+ eventBus,
41
+ gate: createGate({ policies: [] }),
42
+ idempotency,
43
+ ids,
44
+ jobs,
45
+ logger,
46
+ mailer,
47
+ notifications,
48
+ outbox,
49
+ rateLimit,
50
+ storage,
51
+ };
52
+ const overrides = completeTestPortOverrides(options.overrides);
53
+ // The kit's one sanctioned cast: boot-time bases and completed partial
54
+ // overrides are widened to the app's full Ports shape.
55
+ const portsWithoutUow = {
56
+ ...options.base,
57
+ ...defaultPorts,
58
+ ...overrides,
59
+ };
60
+ const transactionOptions = options.transaction;
61
+ const flushEventsToOutbox = transactionOptions?.outbox === true;
62
+ const resolveTransactionPorts = () => {
63
+ const txPorts = transactionOptions?.ports;
64
+ if (typeof txPorts === "function") {
65
+ return txPorts(portsWithoutUow);
66
+ }
67
+ return txPorts ?? portsWithoutUow;
68
+ };
69
+ const generatedUow = createNoopUnitOfWork(() => {
70
+ const tx = resolveTransactionPorts();
71
+ if (flushEventsToOutbox) {
72
+ // Validate up front so both commit and rollback paths fail loudly.
73
+ resolveBufferedTransactionEvents(tx);
74
+ }
75
+ return tx;
76
+ }, {
77
+ afterCommit: async (tx) => {
78
+ if (flushEventsToOutbox) {
79
+ await resolveBufferedTransactionEvents(tx).flush(portsWithoutUow.eventBus);
80
+ }
81
+ await transactionOptions?.afterCommit?.(tx);
82
+ },
83
+ afterRollback: async (error, tx) => {
84
+ if (flushEventsToOutbox) {
85
+ resolveBufferedTransactionEvents(tx).clear();
86
+ }
87
+ await transactionOptions?.afterRollback?.(error, tx);
88
+ },
89
+ });
90
+ // The kit consumes `uow` directly, so keep the supplied port's identity
91
+ // instead of the completed override.
92
+ const uow = options.overrides?.uow ??
93
+ generatedUow;
94
+ const ports = {
95
+ ...portsWithoutUow,
96
+ uow,
97
+ };
98
+ return {
99
+ ports,
100
+ audit,
101
+ eventBus,
102
+ events,
103
+ jobs,
104
+ dispatchedJobs,
105
+ mailer,
106
+ notifications,
107
+ outbox,
108
+ storage,
109
+ idempotency,
110
+ cache,
111
+ rateLimit,
112
+ logger,
113
+ clock,
114
+ ids,
115
+ uow,
116
+ };
117
+ }
118
+ function isPlainObject(value) {
119
+ if (value === null || typeof value !== "object")
120
+ return false;
121
+ const proto = Object.getPrototypeOf(value);
122
+ return proto === Object.prototype || proto === null;
123
+ }
124
+ function createMissingTestPortMember(portKey, member) {
125
+ const memberName = `${portKey}.${member}`;
126
+ const throwMissingMember = () => {
127
+ throw new Error(`Test port "${memberName}" was called but not provided. Pass it through createTestPorts overrides.`);
128
+ };
129
+ Object.defineProperty(throwMissingMember, "name", {
130
+ value: memberName,
131
+ configurable: true,
132
+ });
133
+ return throwMissingMember;
134
+ }
135
+ function completeTestPortOverride(portKey, value) {
136
+ // Functions are objects: the function check must run first so
137
+ // function-valued ports pass through whole.
138
+ if (typeof value === "function")
139
+ return value;
140
+ // Class instances (repositories, Maps, gates built from classes) rely on
141
+ // internal slots or prototype identity, so only plain objects are completed.
142
+ if (!isPlainObject(value))
143
+ return value;
144
+ return new Proxy(value, {
145
+ get(target, member, receiver) {
146
+ if (typeof member === "symbol" ||
147
+ member === "then" ||
148
+ member === "constructor" ||
149
+ member in target) {
150
+ return Reflect.get(target, member, receiver);
151
+ }
152
+ return createMissingTestPortMember(portKey, member);
153
+ },
154
+ });
155
+ }
156
+ function completeTestPortOverrides(overrides) {
157
+ const completed = {};
158
+ for (const [key, value] of Object.entries(overrides ?? {})) {
159
+ if (value === undefined)
160
+ continue;
161
+ completed[key] = completeTestPortOverride(key, value);
162
+ }
163
+ return completed;
164
+ }
165
+ function resolveBufferedTransactionEvents(tx) {
166
+ const events = tx && typeof tx === "object"
167
+ ? tx.events
168
+ : undefined;
169
+ const recorder = events;
170
+ if (!recorder ||
171
+ typeof recorder.flush !== "function" ||
172
+ typeof recorder.clear !== "function") {
173
+ throw new Error("createTestPorts transaction.outbox requires tx.events to be a buffered domain event recorder. " +
174
+ "Add events: createDomainEventRecorder() or createOutboxEventRecorder(...) to transaction.ports.");
175
+ }
176
+ return recorder;
177
+ }
178
+ /**
179
+ * Create a repeatable app context factory for use-case and route tests.
180
+ *
181
+ * The factory adds actor, tenant, request ID, trace ID, ports, and auth fields,
182
+ * and attaches a live `ctx.gate` automatically when `ports.gate` exposes
183
+ * `bind(...)`. The gate is attached after all `extra` and override fields are
184
+ * merged, so it always authorizes against the final context identity.
185
+ *
186
+ * @param options - Default context values.
187
+ * @returns A function that creates one app context.
188
+ */
189
+ export function createTestContextFactory(options) {
190
+ return (overrides = {}) => {
191
+ const ports = overrides.ports ?? resolvePorts(options.ports);
192
+ const activity = createTestActivityContext({
193
+ actor: overrides.actor ?? options.actor ?? createTestUserActor(),
194
+ tenant: overrides.tenant !== undefined ? overrides.tenant : options.tenant,
195
+ requestId: overrides.requestId ?? options.requestId,
196
+ traceId: overrides.traceId ?? options.traceId,
197
+ });
198
+ const auth = overrides.auth !== undefined ? overrides.auth : (options.auth ?? null);
199
+ const base = {
200
+ ...activity,
201
+ auth,
202
+ ports,
203
+ };
204
+ const fields = attachTestGate(ports, base);
205
+ const extra = resolveExtra(options.extra, fields);
206
+ const overrideExtra = resolveExtra(overrides.extra, fields);
207
+ const merged = {
208
+ ...fields,
209
+ ...extra,
210
+ ...overrideExtra,
211
+ };
212
+ if (Object.hasOwn(merged, "gate")) {
213
+ return merged;
214
+ }
215
+ return attachTestGate(ports, merged);
216
+ };
217
+ }
218
+ function resolvePorts(ports) {
219
+ return typeof ports === "function" ? ports() : ports;
220
+ }
221
+ function resolveExtra(extra, fields) {
222
+ return typeof extra === "function" ? extra(fields) : (extra ?? {});
223
+ }
224
+ function attachTestGate(ports, ctx) {
225
+ const maybeGate = ports.gate;
226
+ if (!maybeGate)
227
+ return ctx;
228
+ // Mirror GatePort.attach: a live, non-enumerable getter that re-binds
229
+ // against the receiver so in-place identity changes are never stale and
230
+ // spread copies drop the gate loudly.
231
+ Object.defineProperty(ctx, "gate", {
232
+ configurable: true,
233
+ enumerable: false,
234
+ get() {
235
+ return maybeGate.bind(this);
236
+ },
237
+ });
238
+ return ctx;
239
+ }
240
+ const disposeSymbol = Symbol.dispose ?? Symbol.for("Symbol.dispose");
241
+ /**
242
+ * Create a one-call test context fixture for jobs, listeners, schedules,
243
+ * notifications, tasks, and use-case tests.
244
+ *
245
+ * The fixture builds common memory ports through `createTestPorts(...)`,
246
+ * assembles an app context with actor, tenant, request ID, trace ID, auth,
247
+ * and a live bound gate, and enters the ambient request context so ambient
248
+ * enrichment matches production. Reading an app port that is neither a kit
249
+ * default nor supplied throws a named error on use.
250
+ *
251
+ * @example
252
+ * ```ts
253
+ * const makeContext = createTestContext<AppContext>();
254
+ *
255
+ * using fixture = makeContext({
256
+ * ports: { issues: { create: async (input) => issueRecord(input) } },
257
+ * });
258
+ * await runCreateIssue(fixture.ctx);
259
+ * ```
260
+ *
261
+ * @returns A factory that creates one disposable test context fixture.
262
+ */
263
+ export function createTestContext() {
264
+ return (options = {}) => {
265
+ const fixture = createTestPorts({
266
+ base: options.base,
267
+ overrides: options.ports,
268
+ clock: options.clock,
269
+ ids: options.ids,
270
+ transaction: options.transaction,
271
+ });
272
+ const ports = createUnboundPortGuard(fixture.ports);
273
+ const activity = createTestActivityContext({
274
+ actor: options.actor ?? createTestSystemActor("test-system"),
275
+ tenant: options.tenant,
276
+ requestId: options.requestId,
277
+ traceId: options.traceId,
278
+ });
279
+ const auth = options.auth !== undefined ? options.auth : null;
280
+ const base = {
281
+ ...activity,
282
+ auth,
283
+ ports,
284
+ };
285
+ const fields = attachTestGate(ports, base);
286
+ const merged = {
287
+ ...fields,
288
+ ...(options.extra ?? {}),
289
+ };
290
+ const ctx = (Object.hasOwn(merged, "gate")
291
+ ? merged
292
+ : attachTestGate(ports, merged));
293
+ const ambient = options.ambient ?? true;
294
+ if (ambient) {
295
+ enterActiveRequestContext({
296
+ requestId: activity.requestId,
297
+ traceId: activity.traceId,
298
+ actor: activity.actor,
299
+ tenant: activity.tenant,
300
+ });
301
+ }
302
+ let disposed = false;
303
+ const dispose = () => {
304
+ if (!ambient || disposed)
305
+ return;
306
+ disposed = true;
307
+ clearActiveRequestContext();
308
+ };
309
+ return {
310
+ ...fixture,
311
+ ports,
312
+ ctx,
313
+ dispose,
314
+ [disposeSymbol]: dispose,
315
+ };
316
+ };
317
+ }
318
+ function createUnboundPortGuard(ports) {
319
+ return new Proxy(ports, {
320
+ get(target, key, receiver) {
321
+ if (typeof key === "symbol" ||
322
+ key === "then" ||
323
+ key === "constructor" ||
324
+ key in target) {
325
+ return Reflect.get(target, key, receiver);
326
+ }
327
+ throw new Error(`App port "${key}" is not bound in this test context. Pass it through createTestContext ports.`);
328
+ },
329
+ });
330
+ }
331
+ /**
332
+ * Run provider setup against test ports and return the merged ports plus
333
+ * lifecycle runners.
334
+ *
335
+ * Use this in provider tests instead of hand-rolling the setup, port merge,
336
+ * and lifecycle plumbing around `provider.setup(...)`.
337
+ *
338
+ * @param provider - Provider under test.
339
+ * @param options - Base ports, raw config, and service-context factory.
340
+ * @returns Merged ports, the raw setup result, and start/stop runners.
341
+ */
342
+ export async function installProviderForTest(provider, options = {}) {
343
+ const basePorts = { ...options.ports };
344
+ const createServiceContext = options.createServiceContext ??
345
+ (async () => {
346
+ throw new Error(`Provider "${provider.name}" called createServiceContext during a test install. ` +
347
+ "Pass createServiceContext to installProviderForTest(...) when the test needs a service context.");
348
+ });
349
+ const result = await provider.setup({
350
+ ports: basePorts,
351
+ config: options.config,
352
+ createServiceContext,
353
+ });
354
+ const ports = { ...basePorts, ...result.ports };
355
+ const lifecycleCtx = { ports, createServiceContext };
356
+ return {
357
+ ports,
358
+ result,
359
+ async start() {
360
+ await result.start?.(lifecycleCtx);
361
+ },
362
+ async stop() {
363
+ await result.stop?.(lifecycleCtx);
364
+ },
365
+ };
366
+ }
3
367
  /**
4
368
  * Error thrown when a seed fails.
5
369
  */
@@ -48,9 +412,9 @@ function assertCount(kind, count) {
48
412
  }
49
413
  }
50
414
  /**
51
- * Define a typed test data factory with deterministic sequence support.
415
+ * Create a typed test data factory with deterministic sequence support.
52
416
  */
53
- export function defineFactory(name, options) {
417
+ export function createFactory(name, options) {
54
418
  const start = options.start ?? 1;
55
419
  const ids = options.ids ?? createUuidIdGenerator();
56
420
  const clock = options.clock ?? createSystemClock();
@@ -124,4 +488,62 @@ export async function runSeeds(options) {
124
488
  }
125
489
  }
126
490
  }
491
+ /**
492
+ * Create a database test harness for app-owned database fixtures.
493
+ *
494
+ * The harness does not know about an ORM or database provider. Apps provide
495
+ * creation, reset, close, and context mapping functions, while Beignet handles
496
+ * the repetitive test lifecycle around factory sequences and seed execution.
497
+ */
498
+ export function createDatabaseTestHarness(options) {
499
+ const sessions = new Set();
500
+ function resetFactorySequences() {
501
+ resetFactories(...(options.factories ?? []));
502
+ }
503
+ function defaultSeeds() {
504
+ return options.seeds ?? [];
505
+ }
506
+ async function closeSession(session) {
507
+ if (!sessions.delete(session))
508
+ return;
509
+ await options.close?.(session.database);
510
+ }
511
+ return {
512
+ async setup(setupOptions = {}) {
513
+ resetFactorySequences();
514
+ const database = await options.create();
515
+ const ctx = options.ctx(database);
516
+ const session = {
517
+ database,
518
+ ctx,
519
+ async runSeeds(seeds = defaultSeeds()) {
520
+ await runSeeds({ ctx, seeds });
521
+ },
522
+ async reset() {
523
+ resetFactorySequences();
524
+ await options.reset?.(database);
525
+ },
526
+ async close() {
527
+ await closeSession(session);
528
+ },
529
+ };
530
+ sessions.add(session);
531
+ try {
532
+ if (setupOptions.seed) {
533
+ const seeds = setupOptions.seed === true ? defaultSeeds() : setupOptions.seed;
534
+ await session.runSeeds(seeds);
535
+ }
536
+ }
537
+ catch (error) {
538
+ await session.close();
539
+ throw error;
540
+ }
541
+ return session;
542
+ },
543
+ resetFactories: resetFactorySequences,
544
+ async cleanup() {
545
+ await Promise.all(Array.from(sessions, (session) => session.close()));
546
+ },
547
+ };
548
+ }
127
549
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @beignet/core/tracing
3
+ *
4
+ * W3C trace context primitives used to correlate Beignet activity across
5
+ * requests, use cases, providers, and instrumentation sinks.
6
+ *
7
+ * This module is dependency-free so client bundles that import app context
8
+ * types stay clean.
9
+ */
10
+ /**
11
+ * Trace context used to correlate related activity.
12
+ */
13
+ export interface TraceContext {
14
+ /**
15
+ * W3C trace ID.
16
+ */
17
+ traceId: string;
18
+ /**
19
+ * Current span ID.
20
+ */
21
+ spanId: string;
22
+ /**
23
+ * Parent span ID when available.
24
+ */
25
+ parentSpanId?: string;
26
+ /**
27
+ * W3C traceparent header value.
28
+ */
29
+ traceparent: string;
30
+ }
31
+ /**
32
+ * Parsed W3C traceparent header.
33
+ */
34
+ export interface ParsedTraceparent {
35
+ /**
36
+ * W3C trace ID.
37
+ */
38
+ traceId: string;
39
+ /**
40
+ * Span ID from the traceparent header.
41
+ */
42
+ spanId: string;
43
+ /**
44
+ * Trace flags from the traceparent header.
45
+ */
46
+ traceFlags: string;
47
+ /**
48
+ * Normalized traceparent header value.
49
+ */
50
+ traceparent: string;
51
+ }
52
+ /**
53
+ * Input accepted when creating trace context.
54
+ */
55
+ export interface TraceContextInput {
56
+ traceId?: string;
57
+ spanId?: string;
58
+ parentSpanId?: string;
59
+ traceparent?: string;
60
+ }
61
+ /**
62
+ * Create a non-zero W3C trace ID.
63
+ */
64
+ export declare function createTraceId(): string;
65
+ /**
66
+ * Create a non-zero W3C span ID.
67
+ */
68
+ export declare function createSpanId(): string;
69
+ /**
70
+ * Create a W3C traceparent header value.
71
+ */
72
+ export declare function createTraceparent(args: {
73
+ traceId: string;
74
+ spanId: string;
75
+ traceFlags?: string;
76
+ }): string;
77
+ /**
78
+ * Parse and validate a W3C traceparent header value.
79
+ */
80
+ export declare function parseTraceparent(value: string | null | undefined): ParsedTraceparent | undefined;
81
+ /**
82
+ * Create trace context from explicit IDs or an existing traceparent.
83
+ */
84
+ export declare function createTraceContext(input?: TraceContextInput): TraceContext;
85
+ /**
86
+ * Create child trace context from a parent context.
87
+ */
88
+ export declare function createChildTraceContext(parent: TraceContextInput): TraceContext;
89
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAsBD;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAET;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC/B,iBAAiB,GAAG,SAAS,CAe/B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,GAAE,iBAAsB,GAC5B,YAAY,CAgBd;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,iBAAiB,GACxB,YAAY,CAMd"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @beignet/core/tracing
3
+ *
4
+ * W3C trace context primitives used to correlate Beignet activity across
5
+ * requests, use cases, providers, and instrumentation sinks.
6
+ *
7
+ * This module is dependency-free so client bundles that import app context
8
+ * types stay clean.
9
+ */
10
+ const TRACEPARENT_PATTERN = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/;
11
+ function createHexId(length) {
12
+ const bytes = new Uint8Array(length / 2);
13
+ if (typeof crypto !== "undefined" && "getRandomValues" in crypto) {
14
+ crypto.getRandomValues(bytes);
15
+ return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
16
+ }
17
+ let value = "";
18
+ while (value.length < length) {
19
+ value += Math.floor(Math.random() * 16).toString(16);
20
+ }
21
+ return value.slice(0, length);
22
+ }
23
+ function isNonZeroHex(value) {
24
+ return !/^0+$/.test(value);
25
+ }
26
+ /**
27
+ * Create a non-zero W3C trace ID.
28
+ */
29
+ export function createTraceId() {
30
+ let traceId = createHexId(32);
31
+ while (!isNonZeroHex(traceId)) {
32
+ traceId = createHexId(32);
33
+ }
34
+ return traceId;
35
+ }
36
+ /**
37
+ * Create a non-zero W3C span ID.
38
+ */
39
+ export function createSpanId() {
40
+ let spanId = createHexId(16);
41
+ while (!isNonZeroHex(spanId)) {
42
+ spanId = createHexId(16);
43
+ }
44
+ return spanId;
45
+ }
46
+ /**
47
+ * Create a W3C traceparent header value.
48
+ */
49
+ export function createTraceparent(args) {
50
+ return `00-${args.traceId}-${args.spanId}-${args.traceFlags ?? "01"}`;
51
+ }
52
+ /**
53
+ * Parse and validate a W3C traceparent header value.
54
+ */
55
+ export function parseTraceparent(value) {
56
+ if (!value)
57
+ return undefined;
58
+ const normalized = value.trim().toLowerCase();
59
+ const match = TRACEPARENT_PATTERN.exec(normalized);
60
+ if (!match)
61
+ return undefined;
62
+ const [, traceId, spanId, traceFlags] = match;
63
+ if (!isNonZeroHex(traceId) || !isNonZeroHex(spanId))
64
+ return undefined;
65
+ return {
66
+ traceId,
67
+ spanId,
68
+ traceFlags,
69
+ traceparent: normalized,
70
+ };
71
+ }
72
+ /**
73
+ * Create trace context from explicit IDs or an existing traceparent.
74
+ */
75
+ export function createTraceContext(input = {}) {
76
+ const parsed = parseTraceparent(input.traceparent);
77
+ const traceId = input.traceId ?? parsed?.traceId ?? createTraceId();
78
+ const parentSpanId = input.parentSpanId ?? parsed?.spanId;
79
+ const spanId = input.spanId ?? createSpanId();
80
+ return {
81
+ traceId,
82
+ spanId,
83
+ ...(parentSpanId ? { parentSpanId } : {}),
84
+ traceparent: createTraceparent({
85
+ traceId,
86
+ spanId,
87
+ traceFlags: parsed?.traceFlags,
88
+ }),
89
+ };
90
+ }
91
+ /**
92
+ * Create child trace context from a parent context.
93
+ */
94
+ export function createChildTraceContext(parent) {
95
+ return createTraceContext({
96
+ traceId: parent.traceId,
97
+ parentSpanId: parent.spanId,
98
+ traceparent: parent.traceparent,
99
+ });
100
+ }
101
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"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"}