@beignet/core 0.0.3 → 0.0.4

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 +157 -0
  2. package/README.md +785 -43
  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,13 @@
1
- import type { EventBusPort } from "./events";
2
- import { type CreateGateOptions, type GateDecision, type GatePort, type PolicyContextFromDefinitions, type PolicyDefinition, type PolicyMapFromDefinitions, type PolicySubjectArgs } from "./policy";
1
+ import type { MemoryIdempotencyEntry, MemoryIdempotencyStore } from "../idempotency/index.js";
2
+ import type { MemoryMailDelivery, NormalizedMailMessage } from "../mail/index.js";
3
+ import type { MemoryNotificationDelivery } from "../notifications/index.js";
4
+ import type { DrainOutboxResult, OutboxErrorInfo, OutboxMessage, OutboxMessageKind, OutboxMessageStatus } from "../outbox/index.js";
5
+ import type { ProviderInstrumentationEventInput, ProviderInstrumentationPort } from "../providers/index.js";
6
+ import type { ScheduleDef, ScheduleRunnerPort, ScheduleRunOptions } from "../schedules/index.js";
7
+ import { type ActivityActor, type ActivityMetadata, type ActivityMetadataValue, type ActivityResource, type ActivityTenant, type AuditLogEntry, type AuditOutcome } from "./audit.js";
8
+ import type { EventBusPort, JobDef, JobDispatcherPort } from "./events.js";
9
+ import { type CreateGateOptions, type GateDecision, type GatePort, type PolicyContextFromDefinitions, type PolicyDefinition, type PolicyMapFromDefinitions, type PolicySubjectArgs } from "./policy.js";
10
+ import type { StorageObject, StoragePort, StorageVisibility } from "./storage.js";
3
11
  /**
4
12
  * A recorded event entry from the recording event bus.
5
13
  */
@@ -7,6 +15,19 @@ export interface RecordedEvent {
7
15
  name: string;
8
16
  payload: unknown;
9
17
  }
18
+ /**
19
+ * Expected fields for a recorded event assertion.
20
+ */
21
+ export interface RecordedEventExpectation {
22
+ /**
23
+ * Expected event name.
24
+ */
25
+ name?: string;
26
+ /**
27
+ * Expected event payload. Object values are matched as partial objects.
28
+ */
29
+ payload?: unknown;
30
+ }
10
31
  /**
11
32
  * Create a recording event bus for testing.
12
33
  *
@@ -30,6 +51,1013 @@ export declare function createRecordingEventBus(): {
30
51
  bus: EventBusPort;
31
52
  events: RecordedEvent[];
32
53
  };
54
+ /**
55
+ * A job dispatch captured by `createRecordingJobDispatcher(...)`.
56
+ */
57
+ export interface RecordedJobDispatch {
58
+ /**
59
+ * Dispatched job name.
60
+ */
61
+ name: string;
62
+ /**
63
+ * Job definition supplied to the dispatcher.
64
+ */
65
+ job: JobDef;
66
+ /**
67
+ * Payload supplied to the dispatcher.
68
+ */
69
+ payload: unknown;
70
+ }
71
+ /**
72
+ * Expected fields for a recorded job dispatch assertion.
73
+ */
74
+ export interface RecordedJobDispatchExpectation {
75
+ /**
76
+ * Expected job name.
77
+ */
78
+ name?: string;
79
+ /**
80
+ * Expected job payload. Object values are matched as partial objects.
81
+ */
82
+ payload?: unknown;
83
+ }
84
+ /**
85
+ * Create a recording job dispatcher for tests.
86
+ *
87
+ * The dispatcher records dispatch intent without running the job handler. Use
88
+ * this when a use case or listener should enqueue work but the test does not
89
+ * need to execute that work inline.
90
+ *
91
+ * @returns A job dispatcher plus its captured dispatches.
92
+ */
93
+ export declare function createRecordingJobDispatcher(): {
94
+ jobs: JobDispatcherPort;
95
+ dispatchedJobs: RecordedJobDispatch[];
96
+ };
97
+ /**
98
+ * A schedule run captured by `createRecordingScheduleRunner(...)`.
99
+ */
100
+ export interface RecordedScheduleRun {
101
+ /**
102
+ * Schedule name.
103
+ */
104
+ name: string;
105
+ /**
106
+ * Schedule definition supplied to the runner.
107
+ */
108
+ schedule: ScheduleDef;
109
+ /**
110
+ * Payload supplied to the runner, when present.
111
+ */
112
+ payload?: unknown;
113
+ /**
114
+ * Run ID supplied by the provider or test, when present.
115
+ */
116
+ id?: string;
117
+ /**
118
+ * Provider or app source label, when present.
119
+ */
120
+ source?: string;
121
+ /**
122
+ * Scheduled timestamp supplied to the runner, when present.
123
+ */
124
+ scheduledAt?: ScheduleRunOptions["scheduledAt"];
125
+ /**
126
+ * Triggered timestamp supplied to the runner, when present.
127
+ */
128
+ triggeredAt?: ScheduleRunOptions["triggeredAt"];
129
+ }
130
+ /**
131
+ * Expected fields for a recorded schedule run assertion.
132
+ */
133
+ export interface RecordedScheduleRunExpectation {
134
+ /**
135
+ * Expected schedule name.
136
+ */
137
+ name?: string;
138
+ /**
139
+ * Expected schedule payload. Object values are matched as partial objects.
140
+ */
141
+ payload?: unknown;
142
+ /**
143
+ * Expected run ID.
144
+ */
145
+ id?: string;
146
+ /**
147
+ * Expected source label.
148
+ */
149
+ source?: string;
150
+ }
151
+ /**
152
+ * Expected fields for a provider instrumentation event assertion.
153
+ */
154
+ export interface ProviderInstrumentationEventExpectation {
155
+ /**
156
+ * Expected instrumentation event type.
157
+ */
158
+ type?: ProviderInstrumentationEventInput["type"];
159
+ /**
160
+ * Expected event ID.
161
+ */
162
+ id?: string;
163
+ /**
164
+ * Expected ISO timestamp.
165
+ */
166
+ timestamp?: string;
167
+ /**
168
+ * Expected request correlation ID.
169
+ */
170
+ requestId?: string;
171
+ /**
172
+ * Expected trace ID.
173
+ */
174
+ traceId?: string;
175
+ /**
176
+ * Expected span ID.
177
+ */
178
+ spanId?: string;
179
+ /**
180
+ * Expected parent span ID.
181
+ */
182
+ parentSpanId?: string;
183
+ /**
184
+ * Expected traceparent header value.
185
+ */
186
+ traceparent?: string;
187
+ /**
188
+ * Expected watcher name.
189
+ */
190
+ watcher?: string;
191
+ /**
192
+ * Expected provider name. Matches `providerName` on provider lifecycle events
193
+ * and `details.providerName` on provider instrumentation events.
194
+ */
195
+ providerName?: string;
196
+ /**
197
+ * Expected structured details. Object values are matched as partial objects.
198
+ */
199
+ details?: unknown;
200
+ /**
201
+ * Expected request method.
202
+ */
203
+ method?: string;
204
+ /**
205
+ * Expected request path.
206
+ */
207
+ path?: string;
208
+ /**
209
+ * Expected contract name.
210
+ */
211
+ contractName?: string;
212
+ /**
213
+ * Expected status. This matches request status codes as well as job, outbox,
214
+ * and schedule status strings.
215
+ */
216
+ status?: unknown;
217
+ /**
218
+ * Expected duration in milliseconds.
219
+ */
220
+ durationMs?: number;
221
+ /**
222
+ * Expected human-readable summary.
223
+ */
224
+ summary?: string;
225
+ /**
226
+ * Expected error message.
227
+ */
228
+ message?: string;
229
+ /**
230
+ * Expected stack trace.
231
+ */
232
+ stack?: string;
233
+ /**
234
+ * Expected use-case name on error events.
235
+ */
236
+ useCaseName?: string;
237
+ /**
238
+ * Expected use-case or custom event name.
239
+ */
240
+ name?: string;
241
+ /**
242
+ * Expected use-case kind.
243
+ */
244
+ kind?: "command" | "query";
245
+ /**
246
+ * Expected use-case phase.
247
+ */
248
+ phase?: "start" | "end" | "error";
249
+ /**
250
+ * Expected error summary.
251
+ */
252
+ error?: string;
253
+ /**
254
+ * Expected event bus event name.
255
+ */
256
+ eventName?: string;
257
+ /**
258
+ * Expected job name.
259
+ */
260
+ jobName?: string;
261
+ /**
262
+ * Expected outbox message ID.
263
+ */
264
+ messageId?: string;
265
+ /**
266
+ * Expected outbox message kind.
267
+ */
268
+ messageKind?: "event" | "job";
269
+ /**
270
+ * Expected outbox message name.
271
+ */
272
+ messageName?: string;
273
+ /**
274
+ * Expected schedule name.
275
+ */
276
+ scheduleName?: string;
277
+ /**
278
+ * Expected schedule cron expression.
279
+ */
280
+ cron?: string;
281
+ /**
282
+ * Expected schedule time zone.
283
+ */
284
+ timezone?: string;
285
+ /**
286
+ * Expected provider lifecycle action.
287
+ */
288
+ action?: "setup" | "start" | "stop";
289
+ /**
290
+ * Expected custom event label.
291
+ */
292
+ label?: string;
293
+ }
294
+ /**
295
+ * Source accepted by provider instrumentation assertion helpers.
296
+ */
297
+ export type ProviderInstrumentationAssertionSource = readonly ProviderInstrumentationEventInput[] | {
298
+ /**
299
+ * Recorded provider instrumentation events.
300
+ */
301
+ readonly events: readonly ProviderInstrumentationEventInput[];
302
+ };
303
+ /**
304
+ * Create a recording schedule runner for tests.
305
+ *
306
+ * The runner records schedule run intent without executing the schedule
307
+ * handler. Use `createInlineScheduleRunner(...)` when the test should run the
308
+ * handler.
309
+ *
310
+ * @returns A schedule runner plus its captured runs.
311
+ */
312
+ export declare function createRecordingScheduleRunner(): {
313
+ runner: ScheduleRunnerPort;
314
+ runs: RecordedScheduleRun[];
315
+ };
316
+ /**
317
+ * Create a provider instrumentation port for tests.
318
+ *
319
+ * The port records every event and can optionally disable specific watchers.
320
+ * Use the returned `events` array with provider instrumentation assertion
321
+ * helpers.
322
+ *
323
+ * @returns A provider instrumentation port plus its captured events.
324
+ */
325
+ export declare function createRecordingProviderInstrumentation(options?: {
326
+ enabledWatchers?: readonly string[];
327
+ disabledWatchers?: readonly string[];
328
+ }): {
329
+ instrumentation: ProviderInstrumentationPort;
330
+ events: ProviderInstrumentationEventInput[];
331
+ };
332
+ /**
333
+ * Options for creating a test user actor.
334
+ */
335
+ export interface CreateTestUserActorOptions extends Omit<ActivityActor, "type" | "id" | "metadata"> {
336
+ /**
337
+ * Optional role stored as `actor.metadata.role`.
338
+ */
339
+ role?: string;
340
+ /**
341
+ * Additional redaction-safe actor metadata.
342
+ */
343
+ metadata?: ActivityMetadata;
344
+ }
345
+ /**
346
+ * Options for creating a test actor that represents impersonated user access.
347
+ */
348
+ export interface CreateTestImpersonatedUserActorOptions extends CreateTestUserActorOptions {
349
+ /**
350
+ * Stable ID for the actor performing the impersonation.
351
+ */
352
+ impersonatorId: string;
353
+ }
354
+ /**
355
+ * Options for creating a test tenant.
356
+ */
357
+ export type CreateTestTenantOptions = Omit<ActivityTenant, "id">;
358
+ /**
359
+ * Context fields commonly shared by Beignet tests that exercise audit,
360
+ * authorization, route hooks, and use cases.
361
+ */
362
+ export interface TestActivityContext {
363
+ /**
364
+ * Actor under test.
365
+ */
366
+ actor: ActivityActor;
367
+ /**
368
+ * Tenant/account/workspace scope under test.
369
+ */
370
+ tenant?: ActivityTenant;
371
+ /**
372
+ * Stable request ID for assertions.
373
+ */
374
+ requestId: string;
375
+ /**
376
+ * Optional trace ID for assertions.
377
+ */
378
+ traceId?: string;
379
+ }
380
+ /**
381
+ * Options for creating a test activity context.
382
+ */
383
+ export interface CreateTestActivityContextOptions {
384
+ /**
385
+ * Actor under test.
386
+ *
387
+ * @default createTestUserActor()
388
+ */
389
+ actor?: ActivityActor;
390
+ /**
391
+ * Tenant under test. Pass `null` to omit tenant context.
392
+ *
393
+ * @default createTestTenant()
394
+ */
395
+ tenant?: ActivityTenant | null;
396
+ /**
397
+ * Request ID to expose on the context.
398
+ *
399
+ * @default "test-request"
400
+ */
401
+ requestId?: string;
402
+ /**
403
+ * Trace ID to expose on the context.
404
+ *
405
+ * @default "test-trace"
406
+ */
407
+ traceId?: string;
408
+ }
409
+ /**
410
+ * Create a predictable user actor for tests.
411
+ *
412
+ * Use this when authorization or audit assertions need a stable actor shape
413
+ * without repeating the `ActivityActor` object in every test.
414
+ *
415
+ * @param id - Stable user ID for the test actor.
416
+ * @param options - Optional display name, role, and metadata.
417
+ * @returns A user actor with `type: "user"`.
418
+ */
419
+ export declare function createTestUserActor(id?: string, options?: CreateTestUserActorOptions): ActivityActor;
420
+ /**
421
+ * Create a predictable user actor for tests that exercise impersonation.
422
+ *
423
+ * The returned actor remains the effective user, with `metadata.impersonatorId`
424
+ * recording who initiated the impersonated access.
425
+ *
426
+ * @param id - Stable user ID being impersonated.
427
+ * @param options - Impersonator ID plus optional display name, role, and metadata.
428
+ * @returns A user actor with impersonation metadata.
429
+ */
430
+ export declare function createTestImpersonatedUserActor(id: string, options: CreateTestImpersonatedUserActorOptions): ActivityActor;
431
+ /**
432
+ * Create a predictable anonymous actor for tests.
433
+ *
434
+ * @param options - Optional display name or metadata.
435
+ * @returns An anonymous actor with `type: "anonymous"`.
436
+ */
437
+ export declare function createTestAnonymousActor(options?: Omit<ActivityActor, "type">): ActivityActor;
438
+ /**
439
+ * Create a predictable service actor for tests.
440
+ *
441
+ * @param id - Stable service ID.
442
+ * @param options - Optional display name or metadata.
443
+ * @returns A service actor with `type: "service"`.
444
+ */
445
+ export declare function createTestServiceActor(id?: string, options?: Omit<ActivityActor, "type" | "id">): ActivityActor;
446
+ /**
447
+ * Create a predictable system actor for tests.
448
+ *
449
+ * @param id - Stable system actor ID.
450
+ * @param options - Optional display name or metadata.
451
+ * @returns A system actor with `type: "system"`.
452
+ */
453
+ export declare function createTestSystemActor(id?: string, options?: Omit<ActivityActor, "type" | "id">): ActivityActor;
454
+ /**
455
+ * Create a predictable tenant for tests.
456
+ *
457
+ * @param id - Stable tenant ID.
458
+ * @param options - Optional slug or metadata.
459
+ * @returns A tenant descriptor.
460
+ */
461
+ export declare function createTestTenant(id?: string, options?: CreateTestTenantOptions): ActivityTenant;
462
+ /**
463
+ * Create the activity fields commonly copied onto app test contexts.
464
+ *
465
+ * @param options - Optional actor, tenant, request ID, and trace ID overrides.
466
+ * @returns Stable activity context fields for a test.
467
+ */
468
+ export declare function createTestActivityContext(options?: CreateTestActivityContextOptions): TestActivityContext;
469
+ /**
470
+ * Expected audit fields used by audit assertion helpers.
471
+ */
472
+ export interface AuditLogEntryExpectation {
473
+ /**
474
+ * Expected action name.
475
+ */
476
+ action?: string;
477
+ /**
478
+ * Expected actor fields.
479
+ */
480
+ actor?: Partial<ActivityActor>;
481
+ /**
482
+ * Convenience matcher for `entry.actor.id`.
483
+ */
484
+ actorId?: string;
485
+ /**
486
+ * Convenience matcher for `entry.actor.type`.
487
+ */
488
+ actorType?: ActivityActor["type"];
489
+ /**
490
+ * Expected tenant fields.
491
+ */
492
+ tenant?: Partial<ActivityTenant>;
493
+ /**
494
+ * Convenience matcher for `entry.tenant.id`.
495
+ */
496
+ tenantId?: string;
497
+ /**
498
+ * Expected resource fields.
499
+ */
500
+ resource?: Partial<ActivityResource>;
501
+ /**
502
+ * Convenience matcher for `entry.resource.id`.
503
+ */
504
+ resourceId?: string;
505
+ /**
506
+ * Convenience matcher for `entry.resource.type`.
507
+ */
508
+ resourceType?: string;
509
+ /**
510
+ * Expected audit outcome.
511
+ */
512
+ outcome?: AuditOutcome;
513
+ /**
514
+ * Convenience matcher for `entry.metadata.severity`.
515
+ */
516
+ severity?: ActivityMetadataValue;
517
+ /**
518
+ * Expected request ID.
519
+ */
520
+ requestId?: string;
521
+ /**
522
+ * Expected trace ID.
523
+ */
524
+ traceId?: string;
525
+ /**
526
+ * Expected metadata fields. Object values are matched as partial objects.
527
+ */
528
+ metadata?: ActivityMetadata;
529
+ }
530
+ /**
531
+ * Expected mail delivery fields used by mail assertion helpers.
532
+ */
533
+ export interface MailDeliveryExpectation {
534
+ /**
535
+ * Expected memory delivery ID.
536
+ */
537
+ id?: string;
538
+ /**
539
+ * Expected subject.
540
+ */
541
+ subject?: string;
542
+ /**
543
+ * Expected recipients.
544
+ */
545
+ to?: NormalizedMailMessage["to"];
546
+ /**
547
+ * Expected sender.
548
+ */
549
+ from?: NormalizedMailMessage["from"];
550
+ /**
551
+ * Expected text body.
552
+ */
553
+ text?: string;
554
+ /**
555
+ * Expected HTML body.
556
+ */
557
+ html?: string;
558
+ /**
559
+ * Expected message headers.
560
+ */
561
+ headers?: Record<string, string>;
562
+ /**
563
+ * Expected normalized message fields.
564
+ */
565
+ message?: Partial<NormalizedMailMessage>;
566
+ }
567
+ /**
568
+ * Expected notification delivery fields used by notification assertion helpers.
569
+ */
570
+ export interface NotificationDeliveryExpectation {
571
+ /**
572
+ * Expected memory delivery ID.
573
+ */
574
+ id?: string;
575
+ /**
576
+ * Expected notification name.
577
+ */
578
+ notificationName?: string;
579
+ /**
580
+ * Expected parsed payload. Object values are matched as partial objects.
581
+ */
582
+ payload?: unknown;
583
+ /**
584
+ * Expected selected channels.
585
+ */
586
+ channels?: readonly string[];
587
+ /**
588
+ * Expected delivery metadata. Object values are matched as partial objects.
589
+ */
590
+ metadata?: Record<string, unknown>;
591
+ }
592
+ /**
593
+ * Expected storage object fields used by storage assertion helpers.
594
+ */
595
+ export interface StorageObjectExpectation {
596
+ /**
597
+ * Object key to look up.
598
+ */
599
+ key: string;
600
+ /**
601
+ * Expected size in bytes.
602
+ */
603
+ size?: number;
604
+ /**
605
+ * Expected content type.
606
+ */
607
+ contentType?: string;
608
+ /**
609
+ * Expected cache-control value.
610
+ */
611
+ cacheControl?: string;
612
+ /**
613
+ * Expected storage metadata.
614
+ */
615
+ metadata?: Record<string, string>;
616
+ /**
617
+ * Expected visibility.
618
+ */
619
+ visibility?: StorageVisibility;
620
+ /**
621
+ * Expected text body. Cannot be combined with `bytes`.
622
+ */
623
+ text?: string;
624
+ /**
625
+ * Expected object bytes. Cannot be combined with `text`.
626
+ */
627
+ bytes?: Uint8Array;
628
+ }
629
+ /**
630
+ * Source accepted by outbox message assertion helpers.
631
+ *
632
+ * Use a `MemoryOutboxPort` or a snapshot returned by a test adapter. Durable
633
+ * SQL adapters should expose app-owned snapshots rather than widening the
634
+ * production `OutboxPort` read surface.
635
+ */
636
+ export type OutboxMessageAssertionSource = readonly OutboxMessage[] | {
637
+ /**
638
+ * Current outbox message snapshots.
639
+ */
640
+ readonly messages: readonly OutboxMessage[];
641
+ };
642
+ /**
643
+ * Expected outbox message fields used by outbox assertion helpers.
644
+ */
645
+ export interface OutboxMessageExpectation {
646
+ /**
647
+ * Expected message ID.
648
+ */
649
+ id?: string;
650
+ /**
651
+ * Expected message kind.
652
+ */
653
+ kind?: OutboxMessageKind;
654
+ /**
655
+ * Expected event or job name.
656
+ */
657
+ name?: string;
658
+ /**
659
+ * Expected JSON payload. Object values are matched as partial objects.
660
+ */
661
+ payload?: unknown;
662
+ /**
663
+ * Expected delivery status.
664
+ */
665
+ status?: OutboxMessageStatus;
666
+ /**
667
+ * Expected claim attempt count.
668
+ */
669
+ attempts?: number;
670
+ /**
671
+ * Expected maximum delivery attempts.
672
+ */
673
+ maxAttempts?: number;
674
+ /**
675
+ * Expected delivery timestamp.
676
+ */
677
+ deliveredAt?: Date | null;
678
+ /**
679
+ * Expected serialized delivery error. Object values are matched as partial
680
+ * objects. Pass `null` to assert no error has been recorded.
681
+ */
682
+ lastError?: Partial<OutboxErrorInfo> | null;
683
+ }
684
+ /**
685
+ * Expected fields for one outbox drain result assertion.
686
+ */
687
+ export interface OutboxDrainResultExpectation {
688
+ /**
689
+ * Expected claimed count.
690
+ */
691
+ claimed?: number;
692
+ /**
693
+ * Expected delivered count.
694
+ */
695
+ delivered?: number;
696
+ /**
697
+ * Expected retried count.
698
+ */
699
+ retried?: number;
700
+ /**
701
+ * Expected dead-lettered count.
702
+ */
703
+ deadLettered?: number;
704
+ }
705
+ /**
706
+ * Source accepted by idempotency entry assertion helpers.
707
+ *
708
+ * Use a `MemoryIdempotencyStore` or a snapshot array from an app-owned adapter.
709
+ * Durable SQL adapters should expose app-owned snapshots rather than widening
710
+ * the production `IdempotencyPort` read surface.
711
+ */
712
+ export type IdempotencyEntryAssertionSource = readonly MemoryIdempotencyEntry[] | Pick<MemoryIdempotencyStore, "entries">;
713
+ /**
714
+ * Expected idempotency entry fields used by idempotency assertion helpers.
715
+ */
716
+ export interface IdempotencyEntryExpectation {
717
+ /**
718
+ * Expected operation namespace.
719
+ */
720
+ namespace?: string;
721
+ /**
722
+ * Expected client-provided idempotency key.
723
+ */
724
+ key?: string;
725
+ /**
726
+ * Expected normalized scope key.
727
+ */
728
+ scopeKey?: string;
729
+ /**
730
+ * Expected request fingerprint.
731
+ */
732
+ fingerprint?: string;
733
+ /**
734
+ * Expected reservation status.
735
+ */
736
+ status?: MemoryIdempotencyEntry["status"];
737
+ /**
738
+ * Expected replay result. Object values are matched as partial objects.
739
+ */
740
+ result?: unknown;
741
+ /**
742
+ * Expected reservation timestamp.
743
+ */
744
+ reservedAt?: Date;
745
+ /**
746
+ * Expected completion timestamp.
747
+ */
748
+ completedAt?: Date;
749
+ /**
750
+ * Expected expiration timestamp, or `null` when no expiration is set.
751
+ */
752
+ expiresAt?: Date | null;
753
+ }
754
+ /**
755
+ * Find the first audit entry matching the expected fields.
756
+ *
757
+ * @param entries - Audit entries captured by a memory or fake audit port.
758
+ * @param expectation - Partial audit fields to match.
759
+ * @returns The first matching entry, or `undefined`.
760
+ */
761
+ export declare function findAuditEntry(entries: readonly AuditLogEntry[], expectation: AuditLogEntryExpectation): AuditLogEntry | undefined;
762
+ /**
763
+ * Assert that an audit entry exists and return the matching entry.
764
+ *
765
+ * The helper throws a plain `Error`, so it works with Bun, Vitest, Jest, and
766
+ * other test runners.
767
+ *
768
+ * @param entries - Audit entries captured by a memory or fake audit port.
769
+ * @param expectation - Partial audit fields to match.
770
+ * @returns The matching audit entry.
771
+ * @throws Error when no entry matches.
772
+ */
773
+ export declare function assertAuditEntry(entries: readonly AuditLogEntry[], expectation: AuditLogEntryExpectation): AuditLogEntry;
774
+ /**
775
+ * Assert that no audit entry matches the expected fields.
776
+ *
777
+ * @param entries - Audit entries captured by a memory or fake audit port.
778
+ * @param expectation - Partial audit fields to reject.
779
+ * @throws Error when a matching entry exists.
780
+ */
781
+ export declare function assertNoAuditEntry(entries: readonly AuditLogEntry[], expectation: AuditLogEntryExpectation): void;
782
+ /**
783
+ * Find the first recorded event matching the expected fields.
784
+ *
785
+ * @param events - Events captured by `createRecordingEventBus(...)`.
786
+ * @param expectation - Partial event fields to match.
787
+ * @returns The first matching event, or `undefined`.
788
+ */
789
+ export declare function findRecordedEvent(events: readonly RecordedEvent[], expectation: RecordedEventExpectation): RecordedEvent | undefined;
790
+ /**
791
+ * Assert that a recorded event exists and return the matching event.
792
+ *
793
+ * @param events - Events captured by `createRecordingEventBus(...)`.
794
+ * @param expectation - Partial event fields to match.
795
+ * @returns The matching event.
796
+ * @throws Error when no event matches.
797
+ */
798
+ export declare function assertRecordedEvent(events: readonly RecordedEvent[], expectation: RecordedEventExpectation): RecordedEvent;
799
+ /**
800
+ * Assert that no recorded event matches the expected fields.
801
+ *
802
+ * @param events - Events captured by `createRecordingEventBus(...)`.
803
+ * @param expectation - Partial event fields to reject.
804
+ * @throws Error when a matching event exists.
805
+ */
806
+ export declare function assertNoRecordedEvent(events: readonly RecordedEvent[], expectation: RecordedEventExpectation): void;
807
+ /**
808
+ * Find the first recorded job dispatch matching the expected fields.
809
+ *
810
+ * @param jobs - Job dispatches captured by `createRecordingJobDispatcher(...)`.
811
+ * @param expectation - Partial job fields to match.
812
+ * @returns The first matching dispatch, or `undefined`.
813
+ */
814
+ export declare function findDispatchedJob(jobs: readonly RecordedJobDispatch[], expectation: RecordedJobDispatchExpectation): RecordedJobDispatch | undefined;
815
+ /**
816
+ * Assert that a job was dispatched and return the matching dispatch.
817
+ *
818
+ * @param jobs - Job dispatches captured by `createRecordingJobDispatcher(...)`.
819
+ * @param expectation - Partial job fields to match.
820
+ * @returns The matching dispatch.
821
+ * @throws Error when no dispatch matches.
822
+ */
823
+ export declare function assertDispatchedJob(jobs: readonly RecordedJobDispatch[], expectation: RecordedJobDispatchExpectation): RecordedJobDispatch;
824
+ /**
825
+ * Assert that no job dispatch matches the expected fields.
826
+ *
827
+ * @param jobs - Job dispatches captured by `createRecordingJobDispatcher(...)`.
828
+ * @param expectation - Partial job fields to reject.
829
+ * @throws Error when a matching dispatch exists.
830
+ */
831
+ export declare function assertNoDispatchedJob(jobs: readonly RecordedJobDispatch[], expectation: RecordedJobDispatchExpectation): void;
832
+ /**
833
+ * Find the first recorded schedule run matching the expected fields.
834
+ *
835
+ * @param runs - Runs captured by `createRecordingScheduleRunner(...)`.
836
+ * @param expectation - Partial schedule fields to match.
837
+ * @returns The first matching schedule run, or `undefined`.
838
+ */
839
+ export declare function findScheduleRun(runs: readonly RecordedScheduleRun[], expectation: RecordedScheduleRunExpectation): RecordedScheduleRun | undefined;
840
+ /**
841
+ * Find the first provider instrumentation event matching the expected fields.
842
+ *
843
+ * @param source - Recording instrumentation result or event snapshot array.
844
+ * @param expectation - Partial event fields to match.
845
+ * @returns The first matching event, or `undefined`.
846
+ */
847
+ export declare function findProviderInstrumentationEvent(source: ProviderInstrumentationAssertionSource, expectation: ProviderInstrumentationEventExpectation): ProviderInstrumentationEventInput | undefined;
848
+ /**
849
+ * Assert that a provider instrumentation event exists and return it.
850
+ *
851
+ * @param source - Recording instrumentation result or event snapshot array.
852
+ * @param expectation - Partial event fields to match.
853
+ * @returns The matching event.
854
+ * @throws Error when no event matches.
855
+ */
856
+ export declare function assertProviderInstrumentationEvent(source: ProviderInstrumentationAssertionSource, expectation: ProviderInstrumentationEventExpectation): ProviderInstrumentationEventInput;
857
+ /**
858
+ * Assert that no provider instrumentation event matches the expected fields.
859
+ *
860
+ * @param source - Recording instrumentation result or event snapshot array.
861
+ * @param expectation - Partial event fields to reject.
862
+ * @throws Error when a matching event exists.
863
+ */
864
+ export declare function assertNoProviderInstrumentationEvent(source: ProviderInstrumentationAssertionSource, expectation: ProviderInstrumentationEventExpectation): void;
865
+ /**
866
+ * Assert that a schedule run was recorded and return the matching run.
867
+ *
868
+ * @param runs - Runs captured by `createRecordingScheduleRunner(...)`.
869
+ * @param expectation - Partial schedule fields to match.
870
+ * @returns The matching schedule run.
871
+ * @throws Error when no run matches.
872
+ */
873
+ export declare function assertScheduleRun(runs: readonly RecordedScheduleRun[], expectation: RecordedScheduleRunExpectation): RecordedScheduleRun;
874
+ /**
875
+ * Assert that no schedule run matches the expected fields.
876
+ *
877
+ * @param runs - Runs captured by `createRecordingScheduleRunner(...)`.
878
+ * @param expectation - Partial schedule fields to reject.
879
+ * @throws Error when a matching run exists.
880
+ */
881
+ export declare function assertNoScheduleRun(runs: readonly RecordedScheduleRun[], expectation: RecordedScheduleRunExpectation): void;
882
+ /**
883
+ * Find the first mail delivery matching the expected fields.
884
+ *
885
+ * @param deliveries - Deliveries captured by `createMemoryMailer(...)`.
886
+ * @param expectation - Partial delivery or message fields to match.
887
+ * @returns The first matching delivery, or `undefined`.
888
+ */
889
+ export declare function findMailDelivery(deliveries: readonly MemoryMailDelivery[], expectation: MailDeliveryExpectation): MemoryMailDelivery | undefined;
890
+ /**
891
+ * Assert that a mail delivery exists and return the matching delivery.
892
+ *
893
+ * @param deliveries - Deliveries captured by `createMemoryMailer(...)`.
894
+ * @param expectation - Partial delivery or message fields to match.
895
+ * @returns The matching delivery.
896
+ * @throws Error when no delivery matches.
897
+ */
898
+ export declare function assertMailDelivery(deliveries: readonly MemoryMailDelivery[], expectation: MailDeliveryExpectation): MemoryMailDelivery;
899
+ /**
900
+ * Assert that no mail delivery matches the expected fields.
901
+ *
902
+ * @param deliveries - Deliveries captured by `createMemoryMailer(...)`.
903
+ * @param expectation - Partial delivery or message fields to reject.
904
+ * @throws Error when a matching delivery exists.
905
+ */
906
+ export declare function assertNoMailDelivery(deliveries: readonly MemoryMailDelivery[], expectation: MailDeliveryExpectation): void;
907
+ /**
908
+ * Find the first notification delivery matching the expected fields.
909
+ *
910
+ * @param deliveries - Deliveries captured by `createMemoryNotificationPort(...)`.
911
+ * @param expectation - Partial delivery fields to match.
912
+ * @returns The first matching delivery, or `undefined`.
913
+ */
914
+ export declare function findNotificationDelivery(deliveries: readonly MemoryNotificationDelivery[], expectation: NotificationDeliveryExpectation): MemoryNotificationDelivery | undefined;
915
+ /**
916
+ * Assert that a notification delivery exists and return the matching delivery.
917
+ *
918
+ * @param deliveries - Deliveries captured by `createMemoryNotificationPort(...)`.
919
+ * @param expectation - Partial delivery fields to match.
920
+ * @returns The matching delivery.
921
+ * @throws Error when no delivery matches.
922
+ */
923
+ export declare function assertNotificationDelivery(deliveries: readonly MemoryNotificationDelivery[], expectation: NotificationDeliveryExpectation): MemoryNotificationDelivery;
924
+ /**
925
+ * Assert that no notification delivery matches the expected fields.
926
+ *
927
+ * @param deliveries - Deliveries captured by `createMemoryNotificationPort(...)`.
928
+ * @param expectation - Partial delivery fields to reject.
929
+ * @throws Error when a matching delivery exists.
930
+ */
931
+ export declare function assertNoNotificationDelivery(deliveries: readonly MemoryNotificationDelivery[], expectation: NotificationDeliveryExpectation): void;
932
+ /**
933
+ * Assert that a storage object exists and optionally matches metadata/body
934
+ * expectations.
935
+ *
936
+ * This helper works against any `StoragePort`, not only memory storage.
937
+ *
938
+ * @param storage - Storage port under test.
939
+ * @param expectation - Object key and expected fields.
940
+ * @returns The matching object metadata.
941
+ * @throws Error when the object is missing or does not match.
942
+ */
943
+ export declare function assertStorageObject(storage: StoragePort, expectation: StorageObjectExpectation): Promise<StorageObject>;
944
+ /**
945
+ * Assert that a storage object does not exist.
946
+ *
947
+ * @param storage - Storage port under test.
948
+ * @param key - Object key expected to be absent.
949
+ * @throws Error when the object exists.
950
+ */
951
+ export declare function assertNoStorageObject(storage: StoragePort, key: string): Promise<void>;
952
+ /**
953
+ * Find the first outbox message matching expected fields.
954
+ *
955
+ * @param source - Memory outbox or message snapshot array.
956
+ * @param expectation - Partial message fields to match.
957
+ * @returns The first matching message, or `undefined`.
958
+ */
959
+ export declare function findOutboxMessage(source: OutboxMessageAssertionSource, expectation: OutboxMessageExpectation): OutboxMessage | undefined;
960
+ /**
961
+ * Find the first idempotency entry matching expected fields.
962
+ *
963
+ * @param source - Memory idempotency store or entry snapshot array.
964
+ * @param expectation - Partial entry fields to match.
965
+ * @returns The first matching entry, or `undefined`.
966
+ */
967
+ export declare function findIdempotencyEntry(source: IdempotencyEntryAssertionSource, expectation: IdempotencyEntryExpectation): MemoryIdempotencyEntry | undefined;
968
+ /**
969
+ * Assert that an idempotency entry exists and return it.
970
+ *
971
+ * @param source - Memory idempotency store or entry snapshot array.
972
+ * @param expectation - Partial entry fields to match.
973
+ * @returns The matching entry.
974
+ * @throws Error when no entry matches.
975
+ */
976
+ export declare function assertIdempotencyEntry(source: IdempotencyEntryAssertionSource, expectation: IdempotencyEntryExpectation): MemoryIdempotencyEntry;
977
+ /**
978
+ * Assert that no idempotency entry matches expected fields.
979
+ *
980
+ * @param source - Memory idempotency store or entry snapshot array.
981
+ * @param expectation - Partial entry fields to reject.
982
+ * @throws Error when a matching entry exists.
983
+ */
984
+ export declare function assertNoIdempotencyEntry(source: IdempotencyEntryAssertionSource, expectation: IdempotencyEntryExpectation): void;
985
+ /**
986
+ * Assert that a matching idempotency entry is still in progress.
987
+ *
988
+ * @param source - Memory idempotency store or entry snapshot array.
989
+ * @param expectation - Entry fields to match.
990
+ * @returns The matching in-progress entry.
991
+ */
992
+ export declare function assertIdempotencyInProgress(source: IdempotencyEntryAssertionSource, expectation?: Omit<IdempotencyEntryExpectation, "status">): MemoryIdempotencyEntry;
993
+ /**
994
+ * Assert that a matching idempotency entry completed.
995
+ *
996
+ * @param source - Memory idempotency store or entry snapshot array.
997
+ * @param expectation - Entry fields to match.
998
+ * @returns The matching completed entry.
999
+ */
1000
+ export declare function assertIdempotencyCompleted(source: IdempotencyEntryAssertionSource, expectation?: Omit<IdempotencyEntryExpectation, "status">): MemoryIdempotencyEntry;
1001
+ /**
1002
+ * Assert that an outbox message exists and return it.
1003
+ *
1004
+ * @param source - Memory outbox or message snapshot array.
1005
+ * @param expectation - Partial message fields to match.
1006
+ * @returns The matching message.
1007
+ * @throws Error when no message matches.
1008
+ */
1009
+ export declare function assertOutboxMessage(source: OutboxMessageAssertionSource, expectation: OutboxMessageExpectation): OutboxMessage;
1010
+ /**
1011
+ * Assert that no outbox message matches expected fields.
1012
+ *
1013
+ * @param source - Memory outbox or message snapshot array.
1014
+ * @param expectation - Partial message fields to reject.
1015
+ * @throws Error when a matching message exists.
1016
+ */
1017
+ export declare function assertNoOutboxMessage(source: OutboxMessageAssertionSource, expectation: OutboxMessageExpectation): void;
1018
+ /**
1019
+ * Assert that an outbox message is pending.
1020
+ *
1021
+ * @param source - Memory outbox or message snapshot array.
1022
+ * @param expectation - Message fields to match.
1023
+ * @returns The matching pending message.
1024
+ */
1025
+ export declare function assertOutboxPending(source: OutboxMessageAssertionSource, expectation?: Omit<OutboxMessageExpectation, "status">): OutboxMessage;
1026
+ /**
1027
+ * Assert that an outbox message was delivered.
1028
+ *
1029
+ * @param source - Memory outbox or message snapshot array.
1030
+ * @param expectation - Message fields to match.
1031
+ * @returns The matching delivered message.
1032
+ */
1033
+ export declare function assertOutboxDelivered(source: OutboxMessageAssertionSource, expectation?: Omit<OutboxMessageExpectation, "status">): OutboxMessage;
1034
+ /**
1035
+ * Assert that an outbox message is pending after at least one failed attempt.
1036
+ *
1037
+ * Use this for retry-scheduled assertions after `drainOutbox(...)` returns a
1038
+ * retried count.
1039
+ *
1040
+ * @param source - Memory outbox or message snapshot array.
1041
+ * @param expectation - Message fields to match.
1042
+ * @returns The matching retry-scheduled message.
1043
+ */
1044
+ export declare function assertOutboxRetryScheduled(source: OutboxMessageAssertionSource, expectation?: Omit<OutboxMessageExpectation, "status">): OutboxMessage;
1045
+ /**
1046
+ * Assert that an outbox message was dead-lettered.
1047
+ *
1048
+ * @param source - Memory outbox or message snapshot array.
1049
+ * @param expectation - Message fields to match.
1050
+ * @returns The matching dead-lettered message.
1051
+ */
1052
+ export declare function assertOutboxDeadLettered(source: OutboxMessageAssertionSource, expectation?: Omit<OutboxMessageExpectation, "status">): OutboxMessage;
1053
+ /**
1054
+ * Assert that a drain result matches expected counts.
1055
+ *
1056
+ * @param result - Result returned by `drainOutbox(...)`.
1057
+ * @param expectation - Partial count expectation.
1058
+ * @throws Error when any supplied count differs.
1059
+ */
1060
+ export declare function assertOutboxDrainResult(result: DrainOutboxResult, expectation: OutboxDrainResultExpectation): void;
33
1061
  /**
34
1062
  * Expected outcome for one policy matrix case.
35
1063
  */