@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/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: BookingWindow;
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;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
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
- /** Check every segment; endpoints belonging to ending windows are excluded. */
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
@@ -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,+EAA+E;AAC/E,wBAAgB,YAAY,CAC1B,SAAS,EAAE,WAAW,EACtB,QAAQ,EAAE,SAAS,0BAA0B,EAAE,EAC/C,QAAQ,EAAE,SAAS,WAAW,EAAE,GAC/B,OAAO,CAwDT"}
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.7",
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.7",
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",