@happyvertical/smrt-bookings 0.60.7 → 0.60.9
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/AGENTS.md +3 -0
- package/README.md +76 -6
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +393 -46
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +1 -1
- package/dist/migration.d.ts +6 -0
- package/dist/migration.d.ts.map +1 -1
- package/dist/service.d.ts +18 -7
- package/dist/service.d.ts.map +1 -1
- package/dist/smrt-knowledge.json +7 -7
- package/dist/types.d.ts +89 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/windows.d.ts +29 -2
- package/dist/windows.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export interface BookingContext {
|
|
|
3
3
|
tenantId: string;
|
|
4
4
|
actorId: string;
|
|
5
5
|
}
|
|
6
|
-
export type BookingOperation = 'configure-offering' | 'declare-availability' | 'request' | 'propose' | 'assent' | 'confirm' | 'decline' | 'cancel' | 'read' | 'history';
|
|
6
|
+
export type BookingOperation = 'configure-offering' | 'declare-availability' | 'request' | 'propose' | 'assent' | 'confirm' | 'decline' | 'cancel' | 'attach-project' | 'read' | 'history';
|
|
7
7
|
export interface BookingAccess {
|
|
8
8
|
operator: boolean;
|
|
9
9
|
/** Customer contact the host currently maps to this actor, if any. */
|
|
@@ -25,11 +25,53 @@ export interface BookingReferences {
|
|
|
25
25
|
export interface BookingAuthority {
|
|
26
26
|
access(context: Readonly<BookingContext>, operation: BookingOperation): Promise<BookingAccess | null>;
|
|
27
27
|
verifyReferences(context: Readonly<BookingContext>, references: Readonly<BookingReferences>): Promise<boolean>;
|
|
28
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Optional. Used instead of verifyReferences for the contact when a booking has
|
|
30
|
+
* no project (a lead-bound request). Must confirm the contact exists in this
|
|
31
|
+
* tenant and that the actor may act for it. When absent, the contact is passed
|
|
32
|
+
* to verifyReferences as before.
|
|
33
|
+
*/
|
|
34
|
+
verifyContact?(context: Readonly<BookingContext>, contactId: string): Promise<boolean>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* `developer-hour` is dedicated, exclusive attention for any unit (the name is
|
|
38
|
+
* kept for schema compatibility); `supervision-day` is shared supervision
|
|
39
|
+
* capacity and is always one day.
|
|
40
|
+
*/
|
|
29
41
|
export type BookingKind = 'developer-hour' | 'supervision-day';
|
|
42
|
+
/** Sales granularity of an offering. */
|
|
43
|
+
export type BookingUnit = 'hour' | 'day' | 'week' | 'month';
|
|
30
44
|
export interface BookingOffering {
|
|
31
45
|
id: string;
|
|
32
46
|
kind: BookingKind;
|
|
47
|
+
unit: BookingUnit;
|
|
48
|
+
/** Integer minor units, or null when the offering is unpriced. */
|
|
49
|
+
priceCents: number | null;
|
|
50
|
+
/** ISO 4217 uppercase code, null iff priceCents is null. */
|
|
51
|
+
currency: string | null;
|
|
52
|
+
/** Short display name, at most 120 characters. */
|
|
53
|
+
title: string;
|
|
54
|
+
/** Plain-text description, at most 2000 characters. */
|
|
55
|
+
description: string;
|
|
56
|
+
/** Discoverable by a reader with no contact mapping. Only affects discovery. */
|
|
57
|
+
public: boolean;
|
|
58
|
+
enabled: boolean;
|
|
59
|
+
}
|
|
60
|
+
export interface ConfigureOfferingInput {
|
|
61
|
+
offeringId: string;
|
|
62
|
+
kind: BookingKind;
|
|
63
|
+
/** Defaults from kind: developer-hour is hour, supervision-day is day. Frozen after creation. */
|
|
64
|
+
unit?: BookingUnit;
|
|
65
|
+
/** Integer minor units; default null (unpriced). */
|
|
66
|
+
priceCents?: number | null;
|
|
67
|
+
/** ISO 4217 uppercase code; set together with priceCents. */
|
|
68
|
+
currency?: string | null;
|
|
69
|
+
/** Default ''. */
|
|
70
|
+
title?: string;
|
|
71
|
+
/** Default ''. */
|
|
72
|
+
description?: string;
|
|
73
|
+
/** Default false. */
|
|
74
|
+
public?: boolean;
|
|
33
75
|
enabled: boolean;
|
|
34
76
|
}
|
|
35
77
|
export interface BookingPageOptions {
|
|
@@ -40,6 +82,32 @@ export interface BookingPageOptions {
|
|
|
40
82
|
}
|
|
41
83
|
export interface ListBookingsOptions extends BookingPageOptions {
|
|
42
84
|
projectId?: string;
|
|
85
|
+
/** Operators may narrow to one contact; other callers may only name their own. */
|
|
86
|
+
contactId?: string;
|
|
87
|
+
}
|
|
88
|
+
export interface ListOpenSlotsOptions {
|
|
89
|
+
offeringId: string;
|
|
90
|
+
/** ISO 8601 instants. to - from must be positive and at most 400 days. */
|
|
91
|
+
from: string;
|
|
92
|
+
to: string;
|
|
93
|
+
/** Default 1. Supervision offerings accept only 1. */
|
|
94
|
+
quantity?: number;
|
|
95
|
+
/** Narrow to one provider. */
|
|
96
|
+
providerId?: string;
|
|
97
|
+
/** Opaque nextCursor from the previous page. */
|
|
98
|
+
after?: string;
|
|
99
|
+
/** Defaults to 50. Accepts 1 through 100. */
|
|
100
|
+
limit?: number;
|
|
101
|
+
}
|
|
102
|
+
export interface OpenSlot {
|
|
103
|
+
providerId: string;
|
|
104
|
+
offeringId: string;
|
|
105
|
+
unit: BookingUnit;
|
|
106
|
+
quantity: number;
|
|
107
|
+
/** Candidate segments to pass as `windows` to propose(). */
|
|
108
|
+
windows: ResolvedBookingWindow[];
|
|
109
|
+
/** 1 for dedicated slots; the minimum remaining shared units for supervision. */
|
|
110
|
+
remainingCapacity: number;
|
|
43
111
|
}
|
|
44
112
|
export interface BookingPage<T> {
|
|
45
113
|
items: T[];
|
|
@@ -81,14 +149,28 @@ export interface ProposalTerms {
|
|
|
81
149
|
export interface BookingProposal {
|
|
82
150
|
id: string;
|
|
83
151
|
providerId: string;
|
|
152
|
+
/** Overall span: first window start to last window end. */
|
|
84
153
|
window: ResolvedBookingWindow;
|
|
154
|
+
/** Reserved segments, sorted, non-overlapping and in one zone. */
|
|
155
|
+
windows: ResolvedBookingWindow[];
|
|
156
|
+
unit: BookingUnit;
|
|
157
|
+
quantity: number;
|
|
158
|
+
/** Frozen from the offering at proposal time; null when unpriced. */
|
|
159
|
+
unitPriceCents: number | null;
|
|
160
|
+
currency: string | null;
|
|
161
|
+
/** unitPriceCents * quantity; null when unpriced. */
|
|
162
|
+
totalCents: number | null;
|
|
85
163
|
terms: ProposalTerms;
|
|
86
164
|
approvedPlan: ApprovedPlanRef | null;
|
|
87
165
|
}
|
|
88
166
|
export interface ProposeBookingInput {
|
|
89
167
|
bookingId: string;
|
|
90
168
|
providerId: string;
|
|
91
|
-
window
|
|
169
|
+
/** Exactly one of `window` (single segment) or `windows`. */
|
|
170
|
+
window?: BookingWindow;
|
|
171
|
+
windows?: readonly BookingWindow[];
|
|
172
|
+
/** Defaults to the request's quantity. */
|
|
173
|
+
quantity?: number;
|
|
92
174
|
terms: ProposalTerms;
|
|
93
175
|
approvedPlan?: ApprovedPlanRef;
|
|
94
176
|
}
|
|
@@ -96,6 +178,8 @@ export interface RequestBookingInput {
|
|
|
96
178
|
offeringId: string;
|
|
97
179
|
contactId: string;
|
|
98
180
|
projectId?: string;
|
|
181
|
+
/** Positive integer, default 1, at most 1000; supervision must be 1. */
|
|
182
|
+
quantity?: number;
|
|
99
183
|
}
|
|
100
184
|
export type BookingStatus = 'requested' | 'proposed' | 'confirmed' | 'declined' | 'cancelled';
|
|
101
185
|
export interface BookingView {
|
|
@@ -104,6 +188,8 @@ export interface BookingView {
|
|
|
104
188
|
contactId: string;
|
|
105
189
|
projectId: string | null;
|
|
106
190
|
kind: BookingKind;
|
|
191
|
+
unit: BookingUnit;
|
|
192
|
+
quantity: number;
|
|
107
193
|
status: BookingStatus;
|
|
108
194
|
proposal: BookingProposal | null;
|
|
109
195
|
assentedProposalId: string | null;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,gBAAgB,GACxB,oBAAoB,GACpB,sBAAsB,GACtB,SAAS,GACT,SAAS,GACT,QAAQ,GACR,SAAS,GACT,SAAS,GACT,QAAQ,GACR,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC;AAED,mFAAmF;AACnF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CACJ,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,EACjC,SAAS,EAAE,gBAAgB,GAC1B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACjC,gBAAgB,CACd,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,EACjC,UAAU,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GACtC,OAAO,CAAC,OAAO,CAAC,CAAC;CACrB;AAED,MAAM,MAAM,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,gGAAgG;AAChG,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAc,SAAQ,UAAU;IAC/C,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAsB,SAAQ,aAAa;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,QAAQ,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,0BACf,SAAQ,qBAAqB,EAC3B,kBAAkB;CAAG;AAEzB,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,0BAA0B,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACxC;AAED,+FAA+F;AAC/F,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/windows.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AvailabilityWindow, BookingWindow, DeclaredAvailabilityWindow, ResolvedBookingWindow } from './types.js';
|
|
1
|
+
import type { AvailabilityWindow, BookingUnit, BookingWindow, DeclaredAvailabilityWindow, ResolvedBookingWindow } from './types.js';
|
|
2
2
|
/** Resolve half-open wall time; a DST fold must name the intended offset. */
|
|
3
3
|
export declare function resolveBookingWindow(window: BookingWindow): ResolvedBookingWindow;
|
|
4
4
|
export declare function elapsedHour(window: ResolvedBookingWindow): boolean;
|
|
@@ -9,6 +9,33 @@ export interface Reservation {
|
|
|
9
9
|
exclusive: boolean;
|
|
10
10
|
}
|
|
11
11
|
export declare function supervisionDeclared(candidate: ResolvedBookingWindow, windows: readonly DeclaredAvailabilityWindow[]): boolean;
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Remaining units for the candidate: 0 when it does not fit, 1 for an exclusive
|
|
14
|
+
* candidate that fits, and for a shared candidate the minimum of
|
|
15
|
+
* (capacity - shared) across every half-open segment. Endpoints belonging to
|
|
16
|
+
* ending windows are excluded.
|
|
17
|
+
*/
|
|
18
|
+
export declare function remainingCapacity(candidate: Reservation, declared: readonly DeclaredAvailabilityWindow[], occupied: readonly Reservation[]): number;
|
|
13
19
|
export declare function fitsCapacity(candidate: Reservation, declared: readonly DeclaredAvailabilityWindow[], occupied: readonly Reservation[]): boolean;
|
|
20
|
+
/** Most segments one proposal may reserve; discovery never lists a larger bundle. */
|
|
21
|
+
export declare const MAX_SEGMENTS = 400;
|
|
22
|
+
/** Resolve one or more same-zone segments into sorted, non-overlapping windows and their span. */
|
|
23
|
+
export declare function resolveCoverage(windows: readonly BookingWindow[]): {
|
|
24
|
+
windows: ResolvedBookingWindow[];
|
|
25
|
+
span: ResolvedBookingWindow;
|
|
26
|
+
};
|
|
27
|
+
/** Add n local days to YYYY-MM-DD with date-only arithmetic. */
|
|
28
|
+
export declare function addLocalDays(date: string, days: number): string;
|
|
29
|
+
/** Add n calendar months, constraining the day to the target month's length. */
|
|
30
|
+
export declare function addLocalMonths(date: string, months: number): string;
|
|
31
|
+
/** Exclusive local end date of a quantity of the unit starting on a local date. */
|
|
32
|
+
export declare function localEnd(unit: BookingUnit, quantity: number, start: string): string;
|
|
33
|
+
/** True iff the segments measure exactly `quantity` of `unit`. */
|
|
34
|
+
export declare function measures(unit: BookingUnit, quantity: number, windows: readonly ResolvedBookingWindow[]): boolean;
|
|
35
|
+
/** Do these segments fall in the half-open local span of a quantity of unit from a date? */
|
|
36
|
+
export declare function withinLocalSpan(window: ResolvedBookingWindow, unit: Exclude<BookingUnit, 'hour'>, quantity: number, from: string): boolean;
|
|
37
|
+
/** Render a UTC instant as a minute-precision local timestamp with its zone offset. */
|
|
38
|
+
export declare function formatWall(instantIso: string, zone: string): string;
|
|
39
|
+
/** Build a resolved window from two UTC instants, rendered in the zone. */
|
|
40
|
+
export declare function windowFromInstants(zone: string, startMs: number, endMs: number): ResolvedBookingWindow;
|
|
14
41
|
//# sourceMappingURL=windows.d.ts.map
|
package/dist/windows.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../src/windows.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAqDpB,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,GACpB,qBAAqB,CAiBvB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAIlE;AAYD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,kBAAkB,EAAE,GACrC,0BAA0B,EAAE,CAuC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,qBAAqB,EAChC,OAAO,EAAE,SAAS,0BAA0B,EAAE,GAC7C,OAAO,CAQT;AAED
|
|
1
|
+
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../src/windows.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,0BAA0B,EAC1B,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAqDpB,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,aAAa,GACpB,qBAAqB,CAiBvB;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAIlE;AAYD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,kBAAkB,EAAE,GACrC,0BAA0B,EAAE,CAuC9B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,qBAAqB,EAChC,OAAO,EAAE,SAAS,0BAA0B,EAAE,GAC7C,OAAO,CAQT;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,WAAW,EACtB,QAAQ,EAAE,SAAS,0BAA0B,EAAE,EAC/C,QAAQ,EAAE,SAAS,WAAW,EAAE,GAC/B,MAAM,CA6DR;AAED,wBAAgB,YAAY,CAC1B,SAAS,EAAE,WAAW,EACtB,QAAQ,EAAE,SAAS,0BAA0B,EAAE,EAC/C,QAAQ,EAAE,SAAS,WAAW,EAAE,GAC/B,OAAO,CAET;AAED,qFAAqF;AACrF,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,GAAG;IAClE,OAAO,EAAE,qBAAqB,EAAE,CAAC;IACjC,IAAI,EAAE,qBAAqB,CAAC;CAC7B,CAkCA;AAMD,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CASnE;AAED,mFAAmF;AACnF,wBAAgB,QAAQ,CACtB,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CAIR;AASD,kEAAkE;AAClE,wBAAgB,QAAQ,CACtB,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,SAAS,qBAAqB,EAAE,GACxC,OAAO,CAoCT;AAED,4FAA4F;AAC5F,wBAAgB,eAAe,CAC7B,MAAM,EAAE,qBAAqB,EAC7B,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,EAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAET;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAsBnE;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,qBAAqB,CAMvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-bookings",
|
|
3
|
-
"version": "0.60.
|
|
3
|
+
"version": "0.60.9",
|
|
4
4
|
"description": "Operator-managed service reservations for SMRT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "HappyVertical",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"@happyvertical/sql": "^0.111.3"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@happyvertical/smrt-vitest": "0.60.
|
|
25
|
+
"@happyvertical/smrt-vitest": "0.60.9",
|
|
26
26
|
"@types/node": "24.13.6",
|
|
27
27
|
"typescript": "6.0.3",
|
|
28
28
|
"vite": "8.1.6",
|