@relkit/providers-local 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/dist/buckets/index.d.ts +5 -0
  4. package/dist/buckets/index.d.ts.map +1 -0
  5. package/dist/buckets/index.js +5 -0
  6. package/dist/buckets/index.js.map +1 -0
  7. package/dist/buckets/keys.d.ts +7 -0
  8. package/dist/buckets/keys.d.ts.map +1 -0
  9. package/dist/buckets/keys.js +60 -0
  10. package/dist/buckets/keys.js.map +1 -0
  11. package/dist/buckets/operations.d.ts +11 -0
  12. package/dist/buckets/operations.d.ts.map +1 -0
  13. package/dist/buckets/operations.js +89 -0
  14. package/dist/buckets/operations.js.map +1 -0
  15. package/dist/buckets/pagination.d.ts +5 -0
  16. package/dist/buckets/pagination.d.ts.map +1 -0
  17. package/dist/buckets/pagination.js +34 -0
  18. package/dist/buckets/pagination.js.map +1 -0
  19. package/dist/buckets/policy.d.ts +8 -0
  20. package/dist/buckets/policy.d.ts.map +1 -0
  21. package/dist/buckets/policy.js +74 -0
  22. package/dist/buckets/policy.js.map +1 -0
  23. package/dist/buckets/provider.d.ts +4 -0
  24. package/dist/buckets/provider.d.ts.map +1 -0
  25. package/dist/buckets/provider.js +119 -0
  26. package/dist/buckets/provider.js.map +1 -0
  27. package/dist/buckets/storage.d.ts +12 -0
  28. package/dist/buckets/storage.d.ts.map +1 -0
  29. package/dist/buckets/storage.js +169 -0
  30. package/dist/buckets/storage.js.map +1 -0
  31. package/dist/buckets/types.d.ts +91 -0
  32. package/dist/buckets/types.d.ts.map +1 -0
  33. package/dist/buckets/types.js +34 -0
  34. package/dist/buckets/types.js.map +1 -0
  35. package/dist/cache/index.d.ts +8 -0
  36. package/dist/cache/index.d.ts.map +1 -0
  37. package/dist/cache/index.js +8 -0
  38. package/dist/cache/index.js.map +1 -0
  39. package/dist/cache/inspector.d.ts +4 -0
  40. package/dist/cache/inspector.d.ts.map +1 -0
  41. package/dist/cache/inspector.js +62 -0
  42. package/dist/cache/inspector.js.map +1 -0
  43. package/dist/cache/keys.d.ts +6 -0
  44. package/dist/cache/keys.d.ts.map +1 -0
  45. package/dist/cache/keys.js +34 -0
  46. package/dist/cache/keys.js.map +1 -0
  47. package/dist/cache/persistence.d.ts +5 -0
  48. package/dist/cache/persistence.d.ts.map +1 -0
  49. package/dist/cache/persistence.js +108 -0
  50. package/dist/cache/persistence.js.map +1 -0
  51. package/dist/cache/policy.d.ts +9 -0
  52. package/dist/cache/policy.d.ts.map +1 -0
  53. package/dist/cache/policy.js +64 -0
  54. package/dist/cache/policy.js.map +1 -0
  55. package/dist/cache/provider.d.ts +3 -0
  56. package/dist/cache/provider.d.ts.map +1 -0
  57. package/dist/cache/provider.js +164 -0
  58. package/dist/cache/provider.js.map +1 -0
  59. package/dist/cache/store.d.ts +44 -0
  60. package/dist/cache/store.d.ts.map +1 -0
  61. package/dist/cache/store.js +132 -0
  62. package/dist/cache/store.js.map +1 -0
  63. package/dist/cache/types.d.ts +100 -0
  64. package/dist/cache/types.d.ts.map +1 -0
  65. package/dist/cache/types.js +39 -0
  66. package/dist/cache/types.js.map +1 -0
  67. package/dist/cache/write.d.ts +5 -0
  68. package/dist/cache/write.d.ts.map +1 -0
  69. package/dist/cache/write.js +13 -0
  70. package/dist/cache/write.js.map +1 -0
  71. package/dist/events/admin-actions.d.ts +7 -0
  72. package/dist/events/admin-actions.d.ts.map +1 -0
  73. package/dist/events/admin-actions.js +28 -0
  74. package/dist/events/admin-actions.js.map +1 -0
  75. package/dist/events/admin-contracts.d.ts +132 -0
  76. package/dist/events/admin-contracts.d.ts.map +1 -0
  77. package/dist/events/admin-contracts.js +4 -0
  78. package/dist/events/admin-contracts.js.map +1 -0
  79. package/dist/events/admin-errors.d.ts +5 -0
  80. package/dist/events/admin-errors.d.ts.map +1 -0
  81. package/dist/events/admin-errors.js +9 -0
  82. package/dist/events/admin-errors.js.map +1 -0
  83. package/dist/events/admin-state.d.ts +8 -0
  84. package/dist/events/admin-state.d.ts.map +1 -0
  85. package/dist/events/admin-state.js +10 -0
  86. package/dist/events/admin-state.js.map +1 -0
  87. package/dist/events/admin-utils.d.ts +27 -0
  88. package/dist/events/admin-utils.d.ts.map +1 -0
  89. package/dist/events/admin-utils.js +153 -0
  90. package/dist/events/admin-utils.js.map +1 -0
  91. package/dist/events/admin.d.ts +22 -0
  92. package/dist/events/admin.d.ts.map +1 -0
  93. package/dist/events/admin.js +92 -0
  94. package/dist/events/admin.js.map +1 -0
  95. package/dist/events/delivery-types.d.ts +74 -0
  96. package/dist/events/delivery-types.d.ts.map +1 -0
  97. package/dist/events/delivery-types.js +9 -0
  98. package/dist/events/delivery-types.js.map +1 -0
  99. package/dist/events/delivery-utils.d.ts +17 -0
  100. package/dist/events/delivery-utils.d.ts.map +1 -0
  101. package/dist/events/delivery-utils.js +133 -0
  102. package/dist/events/delivery-utils.js.map +1 -0
  103. package/dist/events/delivery.d.ts +6 -0
  104. package/dist/events/delivery.d.ts.map +1 -0
  105. package/dist/events/delivery.js +159 -0
  106. package/dist/events/delivery.js.map +1 -0
  107. package/dist/events/ephemeral.d.ts +36 -0
  108. package/dist/events/ephemeral.d.ts.map +1 -0
  109. package/dist/events/ephemeral.js +61 -0
  110. package/dist/events/ephemeral.js.map +1 -0
  111. package/dist/events/log.d.ts +37 -0
  112. package/dist/events/log.d.ts.map +1 -0
  113. package/dist/events/log.js +121 -0
  114. package/dist/events/log.js.map +1 -0
  115. package/dist/events/provider.d.ts +9 -0
  116. package/dist/events/provider.d.ts.map +1 -0
  117. package/dist/events/provider.js +37 -0
  118. package/dist/events/provider.js.map +1 -0
  119. package/dist/events/router-inspection.d.ts +18 -0
  120. package/dist/events/router-inspection.d.ts.map +1 -0
  121. package/dist/events/router-inspection.js +110 -0
  122. package/dist/events/router-inspection.js.map +1 -0
  123. package/dist/events/router-records.d.ts +34 -0
  124. package/dist/events/router-records.d.ts.map +1 -0
  125. package/dist/events/router-records.js +98 -0
  126. package/dist/events/router-records.js.map +1 -0
  127. package/dist/events/router-types.d.ts +83 -0
  128. package/dist/events/router-types.d.ts.map +1 -0
  129. package/dist/events/router-types.js +2 -0
  130. package/dist/events/router-types.js.map +1 -0
  131. package/dist/events/router.d.ts +7 -0
  132. package/dist/events/router.d.ts.map +1 -0
  133. package/dist/events/router.js +148 -0
  134. package/dist/events/router.js.map +1 -0
  135. package/dist/factory.d.ts +26 -0
  136. package/dist/factory.d.ts.map +1 -0
  137. package/dist/factory.js +66 -0
  138. package/dist/factory.js.map +1 -0
  139. package/dist/index.d.ts +18 -0
  140. package/dist/index.d.ts.map +1 -0
  141. package/dist/index.js +15 -0
  142. package/dist/index.js.map +1 -0
  143. package/dist/jobs/admin-contracts.d.ts +66 -0
  144. package/dist/jobs/admin-contracts.d.ts.map +1 -0
  145. package/dist/jobs/admin-contracts.js +4 -0
  146. package/dist/jobs/admin-contracts.js.map +1 -0
  147. package/dist/jobs/admin-errors.d.ts +5 -0
  148. package/dist/jobs/admin-errors.d.ts.map +1 -0
  149. package/dist/jobs/admin-errors.js +9 -0
  150. package/dist/jobs/admin-errors.js.map +1 -0
  151. package/dist/jobs/admin-utils.d.ts +29 -0
  152. package/dist/jobs/admin-utils.d.ts.map +1 -0
  153. package/dist/jobs/admin-utils.js +138 -0
  154. package/dist/jobs/admin-utils.js.map +1 -0
  155. package/dist/jobs/admin.d.ts +25 -0
  156. package/dist/jobs/admin.d.ts.map +1 -0
  157. package/dist/jobs/admin.js +89 -0
  158. package/dist/jobs/admin.js.map +1 -0
  159. package/dist/jobs/cron.d.ts +10 -0
  160. package/dist/jobs/cron.d.ts.map +1 -0
  161. package/dist/jobs/cron.js +18 -0
  162. package/dist/jobs/cron.js.map +1 -0
  163. package/dist/jobs/idempotency.d.ts +18 -0
  164. package/dist/jobs/idempotency.d.ts.map +1 -0
  165. package/dist/jobs/idempotency.js +82 -0
  166. package/dist/jobs/idempotency.js.map +1 -0
  167. package/dist/jobs/lease-utils.d.ts +9 -0
  168. package/dist/jobs/lease-utils.d.ts.map +1 -0
  169. package/dist/jobs/lease-utils.js +31 -0
  170. package/dist/jobs/lease-utils.js.map +1 -0
  171. package/dist/jobs/queue-admin.d.ts +12 -0
  172. package/dist/jobs/queue-admin.d.ts.map +1 -0
  173. package/dist/jobs/queue-admin.js +42 -0
  174. package/dist/jobs/queue-admin.js.map +1 -0
  175. package/dist/jobs/queue-entry.d.ts +8 -0
  176. package/dist/jobs/queue-entry.d.ts.map +1 -0
  177. package/dist/jobs/queue-entry.js +130 -0
  178. package/dist/jobs/queue-entry.js.map +1 -0
  179. package/dist/jobs/queue-lease.d.ts +4 -0
  180. package/dist/jobs/queue-lease.d.ts.map +1 -0
  181. package/dist/jobs/queue-lease.js +12 -0
  182. package/dist/jobs/queue-lease.js.map +1 -0
  183. package/dist/jobs/queue-operations.d.ts +16 -0
  184. package/dist/jobs/queue-operations.d.ts.map +1 -0
  185. package/dist/jobs/queue-operations.js +107 -0
  186. package/dist/jobs/queue-operations.js.map +1 -0
  187. package/dist/jobs/queue-recovery.d.ts +5 -0
  188. package/dist/jobs/queue-recovery.d.ts.map +1 -0
  189. package/dist/jobs/queue-recovery.js +22 -0
  190. package/dist/jobs/queue-recovery.js.map +1 -0
  191. package/dist/jobs/queue-utils.d.ts +101 -0
  192. package/dist/jobs/queue-utils.d.ts.map +1 -0
  193. package/dist/jobs/queue-utils.js +28 -0
  194. package/dist/jobs/queue-utils.js.map +1 -0
  195. package/dist/jobs/queue.d.ts +7 -0
  196. package/dist/jobs/queue.d.ts.map +1 -0
  197. package/dist/jobs/queue.js +70 -0
  198. package/dist/jobs/queue.js.map +1 -0
  199. package/dist/jobs/retry.d.ts +25 -0
  200. package/dist/jobs/retry.d.ts.map +1 -0
  201. package/dist/jobs/retry.js +84 -0
  202. package/dist/jobs/retry.js.map +1 -0
  203. package/dist/jobs/scheduler.d.ts +52 -0
  204. package/dist/jobs/scheduler.d.ts.map +1 -0
  205. package/dist/jobs/scheduler.js +122 -0
  206. package/dist/jobs/scheduler.js.map +1 -0
  207. package/dist/jobs/store-files.d.ts +20 -0
  208. package/dist/jobs/store-files.d.ts.map +1 -0
  209. package/dist/jobs/store-files.js +177 -0
  210. package/dist/jobs/store-files.js.map +1 -0
  211. package/dist/jobs/store.d.ts +60 -0
  212. package/dist/jobs/store.d.ts.map +1 -0
  213. package/dist/jobs/store.js +97 -0
  214. package/dist/jobs/store.js.map +1 -0
  215. package/dist/runtime-capabilities.d.ts +17 -0
  216. package/dist/runtime-capabilities.d.ts.map +1 -0
  217. package/dist/runtime-capabilities.js +32 -0
  218. package/dist/runtime-capabilities.js.map +1 -0
  219. package/dist/state.d.ts +15 -0
  220. package/dist/state.d.ts.map +1 -0
  221. package/dist/state.js +69 -0
  222. package/dist/state.js.map +1 -0
  223. package/package.json +47 -0
@@ -0,0 +1,28 @@
1
+ import { versioned } from "./admin-utils.js";
2
+ export function makeRecord(action, actionId, deliveryId, requestedAt, outcome, mode, before, after, errorCode, reason) {
3
+ return versioned({
4
+ actionId,
5
+ action,
6
+ deliveryId,
7
+ ...(before?.eventInstanceId === undefined ? {} : { eventInstanceId: before.eventInstanceId }),
8
+ ...(before?.triggerId === undefined ? {} : { triggerId: before.triggerId }),
9
+ mode,
10
+ outcome,
11
+ requestedAt,
12
+ ...(before === undefined ? {} : { fromState: before.state }),
13
+ ...(after === undefined ? {} : { toState: after.state }),
14
+ ...(errorCode === undefined ? {} : { errorCode }),
15
+ ...(reason === undefined ? {} : { reason }),
16
+ });
17
+ }
18
+ export async function recordAction(options, record) {
19
+ options.records.push(record);
20
+ try {
21
+ await options.onAction?.(record);
22
+ }
23
+ catch {
24
+ // A failing sink cannot erase the local audit record or change its result.
25
+ }
26
+ return record;
27
+ }
28
+ //# sourceMappingURL=admin-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-actions.js","sourceRoot":"","sources":["../../src/events/admin-actions.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,UAAU,UAAU,CACxB,MAAwB,EACxB,QAAgB,EAChB,UAAkB,EAClB,WAAmB,EACnB,OAA+B,EAC/B,IAAoB,EACpB,MAAyC,EACzC,KAAwC,EACxC,SAAkB,EAClB,MAAe;IAEf,OAAO,SAAS,CAAC;QACf,QAAQ;QACR,MAAM;QACN,UAAU;QACV,GAAG,CAAC,MAAM,EAAE,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC;QAC7F,GAAG,CAAC,MAAM,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3E,IAAI;QACJ,OAAO;QACP,WAAW;QACX,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAC5D,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACxD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAiG,EACjG,MAA8B;IAE9B,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,2EAA2E;IAC7E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,132 @@
1
+ import { type JsonValue, type MaybePromise } from "@relkit/contracts";
2
+ import type { RetryPolicy } from "@relkit/jobs";
3
+ import type { JobFailureMetadata, JobQueueState } from "../jobs/queue-utils.js";
4
+ export declare const EVENT_ADMIN_PROTOCOL: "relkit.events.admin";
5
+ export declare const EVENT_ADMIN_VERSION: 1;
6
+ export type EventAdminMode = "development" | "test" | "production";
7
+ export type EventAdminAction = "retry";
8
+ export type EventAdminActionOutcome = "applied" | "rejected";
9
+ export interface EventAdminVersion {
10
+ readonly protocol: typeof EVENT_ADMIN_PROTOCOL;
11
+ readonly version: typeof EVENT_ADMIN_VERSION;
12
+ }
13
+ export interface EventVersioned {
14
+ readonly protocol: typeof EVENT_ADMIN_PROTOCOL;
15
+ readonly protocolVersion: typeof EVENT_ADMIN_VERSION;
16
+ }
17
+ /** The serializable event contract registered by the active graph. */
18
+ export interface EventContractInput {
19
+ readonly id: string;
20
+ readonly version: number;
21
+ readonly payload: JsonValue;
22
+ readonly sensitiveFields?: readonly string[];
23
+ readonly source?: JsonValue;
24
+ }
25
+ export interface EventContract extends EventVersioned, EventContractInput {
26
+ }
27
+ /** Selector and delivery metadata for one generic event trigger. */
28
+ export interface EventTriggerContract extends EventAdminVersion {
29
+ readonly id: string;
30
+ readonly targetFunctionId?: string;
31
+ readonly selector?: JsonValue;
32
+ readonly expansion: readonly string[];
33
+ readonly delivery: "ephemeral" | "durable";
34
+ readonly profile?: string;
35
+ readonly retry?: RetryPolicy;
36
+ readonly concurrency?: number;
37
+ }
38
+ /** Safe publication metadata; payload data is intentionally not projected. */
39
+ export interface EventPublicationContract extends EventVersioned {
40
+ readonly sequence: number;
41
+ readonly timestamp: number;
42
+ readonly accepted: true;
43
+ readonly instanceId: string;
44
+ readonly eventId: string;
45
+ readonly version: number;
46
+ readonly occurredAt: string;
47
+ readonly publishedAt: string;
48
+ readonly key?: string;
49
+ readonly correlationId?: string;
50
+ readonly causationInvocationId?: string;
51
+ readonly traceId: string;
52
+ readonly attributes: Readonly<Record<string, string | number | boolean>>;
53
+ }
54
+ /** Safe delivery state shared by current and dead-lettered attempts. */
55
+ export interface EventDeliveryContract extends EventVersioned {
56
+ readonly cursor: number;
57
+ readonly sequence: number;
58
+ readonly deliveryId: string;
59
+ readonly eventInstanceId: string;
60
+ readonly eventId: string;
61
+ readonly version: number;
62
+ readonly triggerId: string;
63
+ readonly state: Exclude<JobQueueState, "accepted">;
64
+ readonly attempt: number;
65
+ readonly duplicate: boolean;
66
+ readonly timestamp: number;
67
+ readonly leaseExpiresAt?: number;
68
+ readonly failure?: JobFailureMetadata;
69
+ }
70
+ export interface EventDeadLetterContract extends EventDeliveryContract {
71
+ readonly state: "dead-lettered";
72
+ readonly failure: JobFailureMetadata;
73
+ }
74
+ export interface EventTriggerCapabilityContract extends EventAdminVersion {
75
+ readonly triggerId: string;
76
+ readonly delivery: "ephemeral" | "durable";
77
+ readonly persistence: "none" | "restart-recovery";
78
+ readonly restartRecovery: boolean;
79
+ readonly atLeastOnce: boolean;
80
+ readonly exactlyOnce: false;
81
+ readonly ordering: "unsupported";
82
+ readonly orderedByKey: false;
83
+ }
84
+ export interface EventQueryRequest {
85
+ readonly protocol?: typeof EVENT_ADMIN_PROTOCOL;
86
+ readonly version?: typeof EVENT_ADMIN_VERSION;
87
+ readonly eventId?: string;
88
+ readonly eventVersion?: number;
89
+ readonly triggerId?: string;
90
+ readonly state?: Exclude<JobQueueState, "accepted">;
91
+ readonly states?: readonly Exclude<JobQueueState, "accepted">[];
92
+ readonly cursor?: string;
93
+ readonly limit?: number;
94
+ }
95
+ export interface EventQueryContract extends EventAdminVersion {
96
+ readonly events: readonly EventContract[];
97
+ readonly triggers: readonly EventTriggerContract[];
98
+ readonly capabilities: readonly EventTriggerCapabilityContract[];
99
+ readonly publications: readonly EventPublicationContract[];
100
+ readonly items: readonly EventDeliveryContract[];
101
+ readonly deliveries: readonly EventDeliveryContract[];
102
+ readonly deadLetters: readonly EventDeadLetterContract[];
103
+ readonly nextCursor?: string;
104
+ }
105
+ export interface EventAdminActionRequest {
106
+ readonly protocol?: typeof EVENT_ADMIN_PROTOCOL;
107
+ readonly version?: typeof EVENT_ADMIN_VERSION;
108
+ readonly deliveryId: string;
109
+ readonly reason?: string;
110
+ }
111
+ export type EventRetryRequest = EventAdminActionRequest;
112
+ export interface EventAdminActionRecord extends EventAdminVersion {
113
+ readonly actionId: string;
114
+ readonly action: EventAdminAction;
115
+ readonly deliveryId: string;
116
+ readonly eventInstanceId?: string;
117
+ readonly triggerId?: string;
118
+ readonly mode: EventAdminMode;
119
+ readonly outcome: EventAdminActionOutcome;
120
+ readonly requestedAt: number;
121
+ readonly fromState?: Exclude<JobQueueState, "accepted">;
122
+ readonly toState?: Exclude<JobQueueState, "accepted">;
123
+ readonly errorCode?: string;
124
+ readonly reason?: string;
125
+ }
126
+ export interface EventAdminActionContract extends EventAdminVersion {
127
+ readonly action: EventAdminAction;
128
+ readonly status: EventDeliveryContract;
129
+ readonly record: EventAdminActionRecord;
130
+ }
131
+ export type EventAdminActionSink = (record: EventAdminActionRecord) => MaybePromise<void>;
132
+ //# sourceMappingURL=admin-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-contracts.d.ts","sourceRoot":"","sources":["../../src/events/admin-contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { PROTOCOL_VERSION } from "@relkit/contracts";
2
+ export const EVENT_ADMIN_PROTOCOL = "relkit.events.admin";
3
+ export const EVENT_ADMIN_VERSION = PROTOCOL_VERSION;
4
+ //# sourceMappingURL=admin-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-contracts.js","sourceRoot":"","sources":["../../src/events/admin-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAqC,MAAM,mBAAmB,CAAC;AAIxF,MAAM,CAAC,MAAM,oBAAoB,GAAG,qBAA8B,CAAC;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare class EventAdminError extends Error {
2
+ readonly code: string;
3
+ constructor(code: string, message: string);
4
+ }
5
+ //# sourceMappingURL=admin-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-errors.d.ts","sourceRoot":"","sources":["../../src/events/admin-errors.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IAEtC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlB"}
@@ -0,0 +1,9 @@
1
+ export class EventAdminError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.code = code;
6
+ this.name = "EventAdminError";
7
+ }
8
+ }
9
+ //# sourceMappingURL=admin-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-errors.js","sourceRoot":"","sources":["../../src/events/admin-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAE7B;IADX,YACW,IAAY,EACrB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAQ;QAIrB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { EventDeliveryContract } from "./admin-contracts.js";
2
+ import type { EventRouterSnapshot } from "./router-types.js";
3
+ export declare function findDelivery(snapshot: EventRouterSnapshot, deliveryId: string | undefined): EventDeliveryContract | undefined;
4
+ export declare function isDeadLetter(value: EventDeliveryContract): value is EventDeliveryContract & {
5
+ readonly state: "dead-lettered";
6
+ readonly failure: NonNullable<EventDeliveryContract["failure"]>;
7
+ };
8
+ //# sourceMappingURL=admin-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-state.d.ts","sourceRoot":"","sources":["../../src/events/admin-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAG7D,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,mBAAmB,EAC7B,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,qBAAqB,GAAG,SAAS,CAInC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,qBAAqB,GAAG,KAAK,IAAI,qBAAqB,GAAG;IAC3F,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;CACjE,CAEA"}
@@ -0,0 +1,10 @@
1
+ import { toDelivery } from "./admin-utils.js";
2
+ export function findDelivery(snapshot, deliveryId) {
3
+ return deliveryId === undefined
4
+ ? undefined
5
+ : snapshot.deliveries.map(toDelivery).find((delivery) => delivery.deliveryId === deliveryId);
6
+ }
7
+ export function isDeadLetter(value) {
8
+ return value.state === "dead-lettered" && value.failure !== undefined;
9
+ }
10
+ //# sourceMappingURL=admin-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-state.js","sourceRoot":"","sources":["../../src/events/admin-state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,UAAU,YAAY,CAC1B,QAA6B,EAC7B,UAA8B;IAE9B,OAAO,UAAU,KAAK,SAAS;QAC7B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAA4B;IAIvD,OAAO,KAAK,CAAC,KAAK,KAAK,eAAe,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;AACxE,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { EventDeliveryLedgerRecord } from "./delivery-types.js";
2
+ import { EVENT_ADMIN_PROTOCOL, EVENT_ADMIN_VERSION, type EventContract, type EventContractInput, type EventDeliveryContract, type EventAdminMode, type EventPublicationContract, type EventQueryRequest, type EventTriggerCapabilityContract, type EventTriggerContract } from "./admin-contracts.js";
3
+ import type { EventTriggerSnapshot } from "./router-types.js";
4
+ import type { EventLogRecord } from "./log.js";
5
+ export declare function versioned<T extends object>(value: T): T & {
6
+ readonly protocol: typeof EVENT_ADMIN_PROTOCOL;
7
+ readonly version: typeof EVENT_ADMIN_VERSION;
8
+ };
9
+ export declare function eventVersioned<T extends object>(value: T): T & {
10
+ readonly protocol: typeof EVENT_ADMIN_PROTOCOL;
11
+ readonly protocolVersion: typeof EVENT_ADMIN_VERSION;
12
+ };
13
+ export declare function toEvent(value: EventContractInput): EventContract;
14
+ export declare function toTrigger(value: EventTriggerSnapshot): EventTriggerContract;
15
+ export declare function toCapability(value: EventTriggerSnapshot): EventTriggerCapabilityContract;
16
+ export declare function toPublication(value: EventLogRecord): EventPublicationContract;
17
+ export declare function toDelivery(value: EventDeliveryLedgerRecord): EventDeliveryContract;
18
+ export declare function matches(value: EventDeliveryContract, request: EventQueryRequest): boolean;
19
+ export declare function afterCursor(value: EventDeliveryContract, cursor: string | undefined): boolean;
20
+ export declare function nextCursor(value: EventDeliveryContract): string;
21
+ export declare function pageLimit(value: number | undefined): number;
22
+ export declare function validateQuery(request: EventQueryRequest): void;
23
+ export declare function assertVersion(value: unknown): void;
24
+ export declare function assertMode(value: string): asserts value is EventAdminMode;
25
+ export declare function safeId(value: unknown): string | undefined;
26
+ export declare function readReason(value: unknown): string | undefined;
27
+ //# sourceMappingURL=admin-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-utils.d.ts","sourceRoot":"","sources":["../../src/events/admin-utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EAEnB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,8BAA8B,EACnC,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EACxC,KAAK,EAAE,CAAC,GACP,CAAC,GAAG;IACL,QAAQ,CAAC,QAAQ,EAAE,OAAO,oBAAoB,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO,mBAAmB,CAAC;CAC9C,CAEA;AAED,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC7C,KAAK,EAAE,CAAC,GACP,CAAC,GAAG;IACL,QAAQ,CAAC,QAAQ,EAAE,OAAO,oBAAoB,CAAC;IAC/C,QAAQ,CAAC,eAAe,EAAE,OAAO,mBAAmB,CAAC;CACtD,CAMA;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAEhE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,oBAAoB,GAAG,oBAAoB,CAW3E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,oBAAoB,GAAG,8BAA8B,CAYxF;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,wBAAwB,CAmB7E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,yBAAyB,GAAG,qBAAqB,CAiBlF;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAOzF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAO7F;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAE/D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK3D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAW9D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAclD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,cAAc,CAGzE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMzD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQ7D"}
@@ -0,0 +1,153 @@
1
+ import { deepFreeze, normalizeId } from "@relkit/contracts";
2
+ import { EVENT_ADMIN_PROTOCOL, EVENT_ADMIN_VERSION, } from "./admin-contracts.js";
3
+ import { EventAdminError } from "./admin-errors.js";
4
+ export function versioned(value) {
5
+ return deepFreeze({ protocol: EVENT_ADMIN_PROTOCOL, version: EVENT_ADMIN_VERSION, ...value });
6
+ }
7
+ export function eventVersioned(value) {
8
+ return deepFreeze({
9
+ protocol: EVENT_ADMIN_PROTOCOL,
10
+ protocolVersion: EVENT_ADMIN_VERSION,
11
+ ...value,
12
+ });
13
+ }
14
+ export function toEvent(value) {
15
+ return eventVersioned({ ...value });
16
+ }
17
+ export function toTrigger(value) {
18
+ return versioned({
19
+ id: value.id,
20
+ ...(value.targetFunctionId === undefined ? {} : { targetFunctionId: value.targetFunctionId }),
21
+ ...(value.selector === undefined ? {} : { selector: value.selector }),
22
+ expansion: value.expansion,
23
+ delivery: value.delivery,
24
+ ...(value.profile === undefined ? {} : { profile: value.profile }),
25
+ ...(value.retry === undefined ? {} : { retry: value.retry }),
26
+ ...(value.concurrency === undefined ? {} : { concurrency: value.concurrency }),
27
+ });
28
+ }
29
+ export function toCapability(value) {
30
+ const durable = value.delivery === "durable";
31
+ return versioned({
32
+ triggerId: value.id,
33
+ delivery: value.delivery,
34
+ persistence: durable ? "restart-recovery" : "none",
35
+ restartRecovery: durable,
36
+ atLeastOnce: durable,
37
+ exactlyOnce: false,
38
+ ordering: "unsupported",
39
+ orderedByKey: false,
40
+ });
41
+ }
42
+ export function toPublication(value) {
43
+ const envelope = value.envelope;
44
+ return eventVersioned({
45
+ sequence: value.sequence,
46
+ timestamp: value.timestamp,
47
+ accepted: true,
48
+ instanceId: envelope.instanceId,
49
+ eventId: envelope.eventId,
50
+ version: envelope.version,
51
+ occurredAt: envelope.occurredAt,
52
+ publishedAt: envelope.publishedAt,
53
+ ...(envelope.key === undefined ? {} : { key: envelope.key }),
54
+ ...(envelope.correlationId === undefined ? {} : { correlationId: envelope.correlationId }),
55
+ ...(envelope.causationInvocationId === undefined
56
+ ? {}
57
+ : { causationInvocationId: envelope.causationInvocationId }),
58
+ traceId: envelope.traceId,
59
+ attributes: envelope.attributes,
60
+ });
61
+ }
62
+ export function toDelivery(value) {
63
+ const envelope = value.envelope;
64
+ return eventVersioned({
65
+ cursor: value.cursor,
66
+ sequence: value.sequence,
67
+ deliveryId: value.deliveryId,
68
+ eventInstanceId: value.eventInstanceId,
69
+ eventId: envelope.eventId,
70
+ version: envelope.version,
71
+ triggerId: value.triggerId,
72
+ state: value.state,
73
+ attempt: value.attempt,
74
+ duplicate: value.duplicate,
75
+ timestamp: value.timestamp,
76
+ ...(value.leaseExpiresAt === undefined ? {} : { leaseExpiresAt: value.leaseExpiresAt }),
77
+ ...(value.failure === undefined ? {} : { failure: value.failure }),
78
+ });
79
+ }
80
+ export function matches(value, request) {
81
+ if (request.eventId !== undefined && value.eventId !== normalizeId(request.eventId))
82
+ return false;
83
+ if (request.eventVersion !== undefined && value.version !== request.eventVersion)
84
+ return false;
85
+ if (request.triggerId !== undefined && value.triggerId !== normalizeId(request.triggerId))
86
+ return false;
87
+ const states = request.states ?? (request.state === undefined ? undefined : [request.state]);
88
+ return states === undefined || states.includes(value.state);
89
+ }
90
+ export function afterCursor(value, cursor) {
91
+ if (cursor === undefined)
92
+ return true;
93
+ const [raw, id] = cursor.split(":", 2);
94
+ const sequence = Number(raw);
95
+ if (!Number.isSafeInteger(sequence) || id === undefined)
96
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_CURSOR_INVALID", "Event query cursor is invalid");
97
+ return value.cursor > sequence || (value.cursor === sequence && value.deliveryId > id);
98
+ }
99
+ export function nextCursor(value) {
100
+ return `${value.cursor}:${value.deliveryId}`;
101
+ }
102
+ export function pageLimit(value) {
103
+ if (value === undefined)
104
+ return 50;
105
+ if (!Number.isSafeInteger(value) || value < 1)
106
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_QUERY_INVALID", "Event query limit is invalid");
107
+ return Math.min(value, 100);
108
+ }
109
+ export function validateQuery(request) {
110
+ if (request.eventId !== undefined)
111
+ normalizeId(request.eventId);
112
+ if (request.triggerId !== undefined)
113
+ normalizeId(request.triggerId);
114
+ if (request.eventVersion !== undefined &&
115
+ (!Number.isSafeInteger(request.eventVersion) || request.eventVersion < 1))
116
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_QUERY_INVALID", "Event version is invalid");
117
+ const states = request.states ?? (request.state === undefined ? [] : [request.state]);
118
+ if (states.some((state) => !isState(state)))
119
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_QUERY_INVALID", "Event query state is invalid");
120
+ }
121
+ export function assertVersion(value) {
122
+ if (!isRecord(value))
123
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_REQUEST_INVALID", "Event admin request is invalid");
124
+ if ((value.protocol !== undefined && value.protocol !== EVENT_ADMIN_PROTOCOL) ||
125
+ (value.version !== undefined && value.version !== EVENT_ADMIN_VERSION))
126
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_PROTOCOL_MISMATCH", "Unsupported event admin protocol");
127
+ }
128
+ export function assertMode(value) {
129
+ if (value !== "development" && value !== "test" && value !== "production")
130
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_MODE_INVALID", "Event admin mode is invalid");
131
+ }
132
+ export function safeId(value) {
133
+ try {
134
+ return normalizeId(value);
135
+ }
136
+ catch {
137
+ return undefined;
138
+ }
139
+ }
140
+ export function readReason(value) {
141
+ if (!isRecord(value) || value.reason === undefined)
142
+ return undefined;
143
+ if (typeof value.reason !== "string" || value.reason.trim() === "")
144
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_REQUEST_INVALID", "Event action reason is invalid");
145
+ return value.reason.trim().slice(0, 256);
146
+ }
147
+ function isState(value) {
148
+ return ["available", "leased", "delayed", "completed", "dead-lettered"].includes(value);
149
+ }
150
+ function isRecord(value) {
151
+ return value !== null && typeof value === "object" && !Array.isArray(value);
152
+ }
153
+ //# sourceMappingURL=admin-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-utils.js","sourceRoot":"","sources":["../../src/events/admin-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { EVENT_ADMIN_PROTOCOL, EVENT_ADMIN_VERSION, type EventAdminActionContract, type EventAdminActionRecord, type EventAdminActionRequest, type EventAdminActionSink, type EventAdminMode, type EventQueryContract, type EventQueryRequest } from "./admin-contracts.js";
2
+ import type { EventRouter } from "./router-types.js";
3
+ export * from "./admin-contracts.js";
4
+ export { EventAdminError } from "./admin-errors.js";
5
+ export interface EventAdminOptions {
6
+ readonly mode?: EventAdminMode;
7
+ readonly environment?: EventAdminMode;
8
+ readonly enabled?: boolean;
9
+ readonly now?: () => number;
10
+ readonly createActionId?: () => string;
11
+ readonly onAction?: EventAdminActionSink;
12
+ }
13
+ export interface EventAdmin {
14
+ readonly protocol: typeof EVENT_ADMIN_PROTOCOL;
15
+ readonly version: typeof EVENT_ADMIN_VERSION;
16
+ readonly query: (request?: EventQueryRequest) => EventQueryContract;
17
+ readonly retry: (request: string | EventAdminActionRequest) => Promise<EventAdminActionContract>;
18
+ readonly actions: () => readonly EventAdminActionRecord[];
19
+ }
20
+ /** Exposes versioned event inspection and an audited local dead-letter retry. */
21
+ export declare function createEventAdmin(router: EventRouter, options?: EventAdminOptions): EventAdmin;
22
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/events/admin.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAoBrD,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,MAAM,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAC;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,oBAAoB,CAAC;IAC/C,QAAQ,CAAC,OAAO,EAAE,OAAO,mBAAmB,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,kBAAkB,CAAC;IACpE,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACjG,QAAQ,CAAC,OAAO,EAAE,MAAM,SAAS,sBAAsB,EAAE,CAAC;CAC3D;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,iBAAsB,GAAG,UAAU,CA+CjG"}
@@ -0,0 +1,92 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { normalizeId } from "@relkit/contracts";
3
+ import { EVENT_ADMIN_PROTOCOL, EVENT_ADMIN_VERSION, } from "./admin-contracts.js";
4
+ import { EventAdminError } from "./admin-errors.js";
5
+ import { makeRecord, recordAction } from "./admin-actions.js";
6
+ import { findDelivery, isDeadLetter } from "./admin-state.js";
7
+ import { afterCursor, assertMode, assertVersion, matches, nextCursor, pageLimit, readReason, safeId, toCapability, toDelivery, toEvent, toPublication, toTrigger, validateQuery, versioned, } from "./admin-utils.js";
8
+ export * from "./admin-contracts.js";
9
+ export { EventAdminError } from "./admin-errors.js";
10
+ /** Exposes versioned event inspection and an audited local dead-letter retry. */
11
+ export function createEventAdmin(router, options = {}) {
12
+ const mode = options.environment ?? options.mode ?? "development";
13
+ assertMode(mode);
14
+ const enabled = options.enabled ?? mode !== "production";
15
+ const records = [];
16
+ const query = (request = {}) => {
17
+ assertVersion(request);
18
+ validateQuery(request);
19
+ const snapshot = router.snapshot();
20
+ const all = snapshot.deliveries
21
+ .map(toDelivery)
22
+ .filter((delivery) => matches(delivery, request))
23
+ .filter((delivery) => afterCursor(delivery, request.cursor));
24
+ const limit = pageLimit(request.limit);
25
+ const items = all.slice(0, limit);
26
+ const next = all.length > limit ? all[limit - 1] : undefined;
27
+ const publications = snapshot.publications
28
+ .map(toPublication)
29
+ .filter((publication) => request.eventId === undefined || publication.eventId === normalizeId(request.eventId))
30
+ .filter((publication) => request.eventVersion === undefined || publication.version === request.eventVersion)
31
+ .slice(0, limit);
32
+ return versioned({
33
+ events: Object.freeze(snapshot.contracts.map(toEvent)),
34
+ triggers: Object.freeze(snapshot.triggers.map(toTrigger)),
35
+ capabilities: Object.freeze(snapshot.triggers.map(toCapability)),
36
+ publications: Object.freeze(publications),
37
+ items: Object.freeze(items),
38
+ deliveries: Object.freeze(items),
39
+ deadLetters: Object.freeze(items.filter(isDeadLetter)),
40
+ ...(next === undefined ? {} : { nextCursor: nextCursor(next) }),
41
+ });
42
+ };
43
+ const actions = () => Object.freeze([...records]);
44
+ return Object.freeze({
45
+ protocol: EVENT_ADMIN_PROTOCOL,
46
+ version: EVENT_ADMIN_VERSION,
47
+ query,
48
+ retry: (request) => applyRetry(request, { router, mode, enabled, records, ...options }),
49
+ actions,
50
+ });
51
+ }
52
+ async function applyRetry(input, options) {
53
+ const request = typeof input === "string" ? { deliveryId: input } : input;
54
+ const deliveryId = safeId(request?.deliveryId);
55
+ const actionId = safeId(options.createActionId?.() ?? randomUUID()) ?? "invalid-action";
56
+ const requestedAt = options.now?.() ?? Date.now();
57
+ const before = findDelivery(options.router.snapshot(), deliveryId);
58
+ try {
59
+ assertVersion(request);
60
+ const reason = readReason(request);
61
+ if (!options.enabled || options.mode === "production")
62
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_MUTATION_DISABLED", "Local event mutations are disabled");
63
+ if (deliveryId === undefined)
64
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_DELIVERY_INVALID", "Event delivery ID is invalid");
65
+ if (before === undefined)
66
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_NOT_FOUND", `Event delivery ${deliveryId} is unknown`);
67
+ if (before.state !== "dead-lettered")
68
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_STATE_INELIGIBLE", "Only dead-lettered event deliveries can be retried");
69
+ await options.router.retry(deliveryId);
70
+ const after = findDelivery(options.router.snapshot(), deliveryId);
71
+ if (after === undefined)
72
+ throw new EventAdminError("RELKIT_EVENT_ADMIN_ACTION_FAILED", "Retry state missing");
73
+ const record = await recordAction(options, makeRecord("retry", actionId, deliveryId, requestedAt, "applied", options.mode, before, after, undefined, reason));
74
+ return versioned({ action: "retry", status: after, record });
75
+ }
76
+ catch (cause) {
77
+ const error = cause instanceof EventAdminError
78
+ ? cause
79
+ : new EventAdminError("RELKIT_EVENT_ADMIN_ACTION_FAILED", "Event admin action failed");
80
+ const record = await recordAction(options, makeRecord("retry", actionId, deliveryId ?? "invalid", requestedAt, "rejected", options.mode, before, undefined, error.code, safeReason(request)));
81
+ throw Object.assign(error, { action: record });
82
+ }
83
+ }
84
+ function safeReason(value) {
85
+ try {
86
+ return readReason(value);
87
+ }
88
+ catch {
89
+ return undefined;
90
+ }
91
+ }
92
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/events/admin.ts"],"names":[],"mappings":"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"}