@substrat-run/engine-booking 0.1.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.
- package/LICENSE +661 -0
- package/dist/index.d.ts +308 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +868 -0
- package/dist/index.js.map +1 -0
- package/package.json +42 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type Money } from '@substrat-run/contracts';
|
|
3
|
+
import { type ModuleRegistration, type OperationContext } from '@substrat-run/kernel';
|
|
4
|
+
export declare const PERM: {
|
|
5
|
+
create: string & z.core.$brand<"PermissionKey">;
|
|
6
|
+
read: string & z.core.$brand<"PermissionKey">;
|
|
7
|
+
hold: string & z.core.$brand<"PermissionKey">;
|
|
8
|
+
confirm: string & z.core.$brand<"PermissionKey">;
|
|
9
|
+
cancel: string & z.core.$brand<"PermissionKey">;
|
|
10
|
+
move: string & z.core.$brand<"PermissionKey">;
|
|
11
|
+
complete: string & z.core.$brand<"PermissionKey">;
|
|
12
|
+
manageResources: string & z.core.$brand<"PermissionKey">;
|
|
13
|
+
};
|
|
14
|
+
export declare const bookingManifest: {
|
|
15
|
+
id: string & z.core.$brand<"ModuleId">;
|
|
16
|
+
version: string;
|
|
17
|
+
kernelContract: string;
|
|
18
|
+
permissions: {
|
|
19
|
+
key: string & z.core.$brand<"PermissionKey">;
|
|
20
|
+
description: string;
|
|
21
|
+
}[];
|
|
22
|
+
events: {
|
|
23
|
+
emits: {
|
|
24
|
+
type: string;
|
|
25
|
+
schemaVersion: number;
|
|
26
|
+
}[];
|
|
27
|
+
consumes: {
|
|
28
|
+
type: string;
|
|
29
|
+
schemaVersion: number;
|
|
30
|
+
}[];
|
|
31
|
+
};
|
|
32
|
+
migrations: {
|
|
33
|
+
journalDir: string;
|
|
34
|
+
compatibleFrom: string;
|
|
35
|
+
};
|
|
36
|
+
attachmentTargets: {
|
|
37
|
+
entityType: string;
|
|
38
|
+
readPermission: string & z.core.$brand<"PermissionKey">;
|
|
39
|
+
}[];
|
|
40
|
+
entitlementKey: string;
|
|
41
|
+
entityRelations?: {
|
|
42
|
+
entityType: string;
|
|
43
|
+
parentType: string;
|
|
44
|
+
}[] | undefined;
|
|
45
|
+
guards?: {
|
|
46
|
+
before: string;
|
|
47
|
+
predicate: string;
|
|
48
|
+
config: Record<string, unknown>;
|
|
49
|
+
}[] | undefined;
|
|
50
|
+
withdraws?: string[] | undefined;
|
|
51
|
+
api?: string | undefined;
|
|
52
|
+
searchables?: {
|
|
53
|
+
entityType: string;
|
|
54
|
+
fields: string[];
|
|
55
|
+
}[] | undefined;
|
|
56
|
+
ui?: {
|
|
57
|
+
routes?: {
|
|
58
|
+
path: string;
|
|
59
|
+
screen: string;
|
|
60
|
+
permission: string & z.core.$brand<"PermissionKey">;
|
|
61
|
+
}[] | undefined;
|
|
62
|
+
nav?: {
|
|
63
|
+
label: string;
|
|
64
|
+
to: string;
|
|
65
|
+
permission: string & z.core.$brand<"PermissionKey">;
|
|
66
|
+
icon?: string | undefined;
|
|
67
|
+
}[] | undefined;
|
|
68
|
+
entityViews?: {
|
|
69
|
+
entityType: string;
|
|
70
|
+
view: string;
|
|
71
|
+
}[] | undefined;
|
|
72
|
+
widgets?: {
|
|
73
|
+
slot: string;
|
|
74
|
+
component: string;
|
|
75
|
+
permission: string & z.core.$brand<"PermissionKey">;
|
|
76
|
+
}[] | undefined;
|
|
77
|
+
settingsPanels?: {
|
|
78
|
+
label: string;
|
|
79
|
+
component: string;
|
|
80
|
+
permission: string & z.core.$brand<"PermissionKey">;
|
|
81
|
+
}[] | undefined;
|
|
82
|
+
} | undefined;
|
|
83
|
+
};
|
|
84
|
+
export declare const bookingMigrations: {
|
|
85
|
+
version: string;
|
|
86
|
+
sql: string;
|
|
87
|
+
}[];
|
|
88
|
+
/** The typed rejection a vertical surfaces as "that slot was just taken". */
|
|
89
|
+
export declare class SlotUnavailable extends Error {
|
|
90
|
+
readonly resourceId: string;
|
|
91
|
+
readonly startsAt: string;
|
|
92
|
+
readonly endsAt: string;
|
|
93
|
+
readonly code = "SLOT_UNAVAILABLE";
|
|
94
|
+
constructor(resourceId: string, startsAt: string, endsAt: string);
|
|
95
|
+
}
|
|
96
|
+
export declare const reservationState: z.ZodEnum<{
|
|
97
|
+
held: "held";
|
|
98
|
+
confirmed: "confirmed";
|
|
99
|
+
in_service: "in_service";
|
|
100
|
+
completed: "completed";
|
|
101
|
+
expired: "expired";
|
|
102
|
+
cancelled: "cancelled";
|
|
103
|
+
no_show: "no_show";
|
|
104
|
+
}>;
|
|
105
|
+
export type ReservationState = z.infer<typeof reservationState>;
|
|
106
|
+
export declare const createResourceInput: z.ZodObject<{
|
|
107
|
+
kind: z.ZodString;
|
|
108
|
+
name: z.ZodString;
|
|
109
|
+
capacity: z.ZodOptional<z.ZodNumber>;
|
|
110
|
+
}, z.core.$strip>;
|
|
111
|
+
export type CreateResourceInput = z.infer<typeof createResourceInput>;
|
|
112
|
+
export declare const holdReservationInput: z.ZodObject<{
|
|
113
|
+
resourceId: z.ZodString;
|
|
114
|
+
startsAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
115
|
+
endsAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
116
|
+
expiresAt: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
117
|
+
quantity: z.ZodOptional<z.ZodNumber>;
|
|
118
|
+
fillTarget: z.ZodOptional<z.ZodNumber>;
|
|
119
|
+
note: z.ZodOptional<z.ZodString>;
|
|
120
|
+
now: z.ZodOptional<z.ZodString>;
|
|
121
|
+
}, z.core.$strip>;
|
|
122
|
+
export type HoldReservationInput = z.infer<typeof holdReservationInput>;
|
|
123
|
+
export declare const joinReservationInput: z.ZodObject<{
|
|
124
|
+
reservationId: z.ZodString;
|
|
125
|
+
partyRef: z.core.$ZodBranded<z.ZodString, "DataSubjectId", "out">;
|
|
126
|
+
share: z.ZodOptional<z.ZodObject<{
|
|
127
|
+
amount: z.core.$ZodBranded<z.ZodString, "MoneyAmount", "out">;
|
|
128
|
+
currency: z.core.$ZodBranded<z.ZodString, "CurrencyCode", "out">;
|
|
129
|
+
}, z.core.$strip>>;
|
|
130
|
+
now: z.ZodOptional<z.ZodString>;
|
|
131
|
+
}, z.core.$strip>;
|
|
132
|
+
export type JoinReservationInput = z.infer<typeof joinReservationInput>;
|
|
133
|
+
export declare const moveReservationInput: z.ZodObject<{
|
|
134
|
+
reservationId: z.ZodString;
|
|
135
|
+
resourceId: z.ZodOptional<z.ZodString>;
|
|
136
|
+
startsAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
137
|
+
endsAt: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
|
|
138
|
+
now: z.ZodOptional<z.ZodString>;
|
|
139
|
+
}, z.core.$strip>;
|
|
140
|
+
export type MoveReservationInput = z.infer<typeof moveReservationInput>;
|
|
141
|
+
export interface Resource {
|
|
142
|
+
id: string;
|
|
143
|
+
kind: string;
|
|
144
|
+
name: string;
|
|
145
|
+
capacity: number;
|
|
146
|
+
active: boolean;
|
|
147
|
+
createdAt: string;
|
|
148
|
+
}
|
|
149
|
+
export interface Participant {
|
|
150
|
+
id: string;
|
|
151
|
+
partyRef: string;
|
|
152
|
+
share: Money | null;
|
|
153
|
+
joinedAt: string;
|
|
154
|
+
leftAt: string | null;
|
|
155
|
+
}
|
|
156
|
+
export interface Reservation {
|
|
157
|
+
id: string;
|
|
158
|
+
resourceId: string;
|
|
159
|
+
startsAt: string;
|
|
160
|
+
endsAt: string;
|
|
161
|
+
/** The state as stored. A `held` row keeps saying `held` until someone sweeps it. */
|
|
162
|
+
state: ReservationState;
|
|
163
|
+
/**
|
|
164
|
+
* What the row actually means *now* — `expired` once a hold's deadline has passed,
|
|
165
|
+
* whether or not anyone has swept it.
|
|
166
|
+
*
|
|
167
|
+
* Expiry is lazy, so `state` alone would render a dead hold as a live one: the
|
|
168
|
+
* console calendar would show a HELD cell counting down past 0:00 forever. Read
|
|
169
|
+
* paths render this; the transition guards use the stored `state`.
|
|
170
|
+
*/
|
|
171
|
+
effectiveState: ReservationState;
|
|
172
|
+
quantity: number;
|
|
173
|
+
expiresAt: string | null;
|
|
174
|
+
fillTarget: number | null;
|
|
175
|
+
note: string | null;
|
|
176
|
+
createdBy: string;
|
|
177
|
+
createdAt: string;
|
|
178
|
+
}
|
|
179
|
+
export interface FreeInterval {
|
|
180
|
+
startsAt: string;
|
|
181
|
+
endsAt: string;
|
|
182
|
+
available: number;
|
|
183
|
+
}
|
|
184
|
+
/** The one definition of "a hold past its deadline is expired". */
|
|
185
|
+
export declare function effectiveStateOf(state: ReservationState, expiresAt: string | null, now: string): ReservationState;
|
|
186
|
+
export declare function createResource(ctx: OperationContext, rawInput: CreateResourceInput): Resource;
|
|
187
|
+
export declare function setResourceActive(ctx: OperationContext, input: {
|
|
188
|
+
resourceId: string;
|
|
189
|
+
active: boolean;
|
|
190
|
+
}): Resource;
|
|
191
|
+
export declare function listResources(ctx: OperationContext, kind?: string): Resource[];
|
|
192
|
+
/**
|
|
193
|
+
* Place a tentative hold. Throws {@link SlotUnavailable} if the interval would
|
|
194
|
+
* overallocate the resource.
|
|
195
|
+
*
|
|
196
|
+
* A hold is never permanent — `expiresAt` is mandatory. The same mechanism serves
|
|
197
|
+
* a payment hold and an open match awaiting players (`fillTarget`).
|
|
198
|
+
*/
|
|
199
|
+
export declare function holdReservation(ctx: OperationContext, rawInput: HoldReservationInput): Reservation;
|
|
200
|
+
/**
|
|
201
|
+
* held → confirmed. Re-runs the allocation check excluding this reservation,
|
|
202
|
+
* because the hold may have expired and the slot been taken in the meantime.
|
|
203
|
+
*/
|
|
204
|
+
export declare function confirmReservation(ctx: OperationContext, input: {
|
|
205
|
+
reservationId: string;
|
|
206
|
+
now?: string;
|
|
207
|
+
}): Reservation;
|
|
208
|
+
/**
|
|
209
|
+
* Expire a hold whose deadline has passed. Idempotent-ish: only `held` rows move.
|
|
210
|
+
* Because expiry is lazy, calling this is optional for correctness — it exists so
|
|
211
|
+
* a vertical can surface the transition (and its event) to a UI.
|
|
212
|
+
*/
|
|
213
|
+
export declare function expireReservation(ctx: OperationContext, input: {
|
|
214
|
+
reservationId: string;
|
|
215
|
+
now?: string;
|
|
216
|
+
}): Reservation;
|
|
217
|
+
/**
|
|
218
|
+
* Add a participant. When the reservation is `held` and reaching `fillTarget`,
|
|
219
|
+
* this auto-confirms — the open-match mechanic, built out of the payment hold.
|
|
220
|
+
*/
|
|
221
|
+
export declare function joinReservation(ctx: OperationContext, rawInput: JoinReservationInput): {
|
|
222
|
+
participant: Participant;
|
|
223
|
+
reservation: Reservation;
|
|
224
|
+
};
|
|
225
|
+
/** Soft-leave: the row is never deleted, so the record of who was in stays intact. */
|
|
226
|
+
/**
|
|
227
|
+
* Open an existing reservation to others, or change how many places are on offer.
|
|
228
|
+
*
|
|
229
|
+
* `fillTarget` is engine state — it drives the auto-confirm in `joinReservation`
|
|
230
|
+
* — so a booking cannot be opened up by a vertical keeping its own counter
|
|
231
|
+
* beside it and hoping the two agree. Additive: reservations made without a
|
|
232
|
+
* target are unaffected, and a target below the people already on it is refused
|
|
233
|
+
* rather than silently stranding someone.
|
|
234
|
+
*
|
|
235
|
+
* Passing `null` closes it again — a private booking with no places on offer.
|
|
236
|
+
*/
|
|
237
|
+
export declare function openReservation(ctx: OperationContext, input: {
|
|
238
|
+
reservationId: string;
|
|
239
|
+
fillTarget: number | null;
|
|
240
|
+
now?: string;
|
|
241
|
+
}): Reservation;
|
|
242
|
+
export declare function leaveReservation(ctx: OperationContext, input: {
|
|
243
|
+
reservationId: string;
|
|
244
|
+
participantId: string;
|
|
245
|
+
now?: string;
|
|
246
|
+
}): Reservation;
|
|
247
|
+
export declare function cancelReservation(ctx: OperationContext, input: {
|
|
248
|
+
reservationId: string;
|
|
249
|
+
reason?: string;
|
|
250
|
+
}): Reservation;
|
|
251
|
+
/**
|
|
252
|
+
* Reschedule to another slot and/or resource, keeping the reservation's identity
|
|
253
|
+
* and its participants.
|
|
254
|
+
*
|
|
255
|
+
* Deliberately **not** a general `updateReservation`. Engines model named
|
|
256
|
+
* transitions rather than field patches (cf. `engine-workorder`), participants are
|
|
257
|
+
* an append-only log with per-subject events rather than a patchable field (D-C),
|
|
258
|
+
* and `booking.moved` carrying from/to is worth far more to a consumer than a
|
|
259
|
+
* generic diff — event payloads freeze once shipped.
|
|
260
|
+
*
|
|
261
|
+
* This is not cancel-then-rebook: that would lose the identity, the roster, and
|
|
262
|
+
* any payment already attached.
|
|
263
|
+
*/
|
|
264
|
+
export declare function moveReservation(ctx: OperationContext, rawInput: MoveReservationInput): Reservation;
|
|
265
|
+
export declare function startReservation(ctx: OperationContext, input: {
|
|
266
|
+
reservationId: string;
|
|
267
|
+
}): Reservation;
|
|
268
|
+
/**
|
|
269
|
+
* The terminal success transition. The payload is deliberately **fat** — resource,
|
|
270
|
+
* interval and the full participant list — so an invoicing consumer can raise split
|
|
271
|
+
* charges and an out-of-kernel consumer can build cross-club history, neither
|
|
272
|
+
* needing a cross-module read.
|
|
273
|
+
*/
|
|
274
|
+
export declare function completeReservation(ctx: OperationContext, input: {
|
|
275
|
+
reservationId: string;
|
|
276
|
+
}): Reservation;
|
|
277
|
+
export declare function markNoShow(ctx: OperationContext, input: {
|
|
278
|
+
reservationId: string;
|
|
279
|
+
}): Reservation;
|
|
280
|
+
export declare function getReservation(ctx: OperationContext, reservationId: string, now?: string): {
|
|
281
|
+
reservation: Reservation;
|
|
282
|
+
participants: Participant[];
|
|
283
|
+
};
|
|
284
|
+
export declare function listReservations(ctx: OperationContext, input: {
|
|
285
|
+
resourceId?: string;
|
|
286
|
+
from?: string;
|
|
287
|
+
to?: string;
|
|
288
|
+
now?: string;
|
|
289
|
+
}): Reservation[];
|
|
290
|
+
/**
|
|
291
|
+
* Free capacity over `[from, to)`, as merged intervals.
|
|
292
|
+
*
|
|
293
|
+
* Returns raw gaps between reservations — it knows nothing of opening hours and
|
|
294
|
+
* will happily report 03:00 as free. Intersecting with the venue's bookable
|
|
295
|
+
* window is the **vertical's** job (docs/design/engine-booking.md §4.1).
|
|
296
|
+
*
|
|
297
|
+
* Implemented as a sweep over interval boundaries rather than a simple gap walk,
|
|
298
|
+
* because capacity may exceed 1 (fungible pools), where "free" is a number and not
|
|
299
|
+
* a boolean.
|
|
300
|
+
*/
|
|
301
|
+
export declare function availability(ctx: OperationContext, input: {
|
|
302
|
+
resourceId: string;
|
|
303
|
+
from: string;
|
|
304
|
+
to: string;
|
|
305
|
+
now?: string;
|
|
306
|
+
}): FreeInterval[];
|
|
307
|
+
export declare const bookingModule: ModuleRegistration;
|
|
308
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|