@registrystack/client 0.43.0 → 0.45.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.
@@ -10,11 +10,12 @@ export type JsonValue = JsonScalar | ReadonlyArray<JsonValue> | { readonly [key:
10
10
 
11
11
  export interface SchedulingClientConfig {
12
12
  baseUrl: string
13
- requestTimeoutMilliseconds?: SafeInteger | null
14
- connectTimeoutMilliseconds?: SafeInteger | null
15
- maxResponseBytes?: SafeInteger | null
16
- userAgent?: string | null
17
- trustedRootCertificates?: string | null
13
+ attemptTimeoutMilliseconds?: SafeInteger
14
+ connectTimeoutMilliseconds?: SafeInteger
15
+ maximumResponseBytes?: SafeInteger
16
+ userAgent?: string
17
+ /** Additional trust roots for the deployment, as PEM text. */
18
+ trustedRootCertificates?: string
18
19
  /**
19
20
  * How many times a keyed command (hold, appointment create, reschedule,
20
21
  * cancel) whose outcome is unknown is resent, identically and under the
@@ -22,7 +23,7 @@ export interface SchedulingClientConfig {
22
23
  * to 2, default 2; 0 sends it once. Any other value is a `configuration`
23
24
  * error.
24
25
  */
25
- maxMutationRetries?: SafeInteger | null
26
+ maximumMutationRetries?: SafeInteger
26
27
  }
27
28
 
28
29
  /** An opaque record link Scheduling retains with a hold or appointment. */
@@ -33,12 +34,98 @@ export interface ExternalReference {
33
34
  }
34
35
 
35
36
  export interface PartyCounts { recipients: SafeInteger; attendees: SafeInteger }
37
+ export interface BusyCoverage { start: Instant; end: Instant; resources: ReadonlyArray<string> }
38
+ export interface BusyIntervalInput { externalUid: string; externalRevision: string; resource: string; start: Instant; end: Instant }
39
+ export interface BusyReconciliationRequest {
40
+ expectedRevision: SafeInteger
41
+ observedAt: Instant
42
+ freshUntil?: Instant | null
43
+ coverage: BusyCoverage
44
+ status: 'fresh' | 'unavailable'
45
+ records: ReadonlyArray<BusyIntervalInput>
46
+ }
47
+ export interface BusyCommitmentImpact { kind: string; resource: string; occupiedStart: Instant; occupiedEnd: Instant }
48
+ export interface BusyImpactSummary {
49
+ total: SafeInteger
50
+ detailsAvailable: boolean
51
+ truncated: boolean
52
+ items?: ReadonlyArray<BusyCommitmentImpact>
53
+ }
54
+ export interface BusyReconciliationCounts {
55
+ sourceId: string
56
+ requestDigest: string
57
+ added: SafeInteger
58
+ changed: SafeInteger
59
+ deleted: SafeInteger
60
+ retainedOutsideAuthority: SafeInteger
61
+ retainedAcrossCoverageBoundary: SafeInteger
62
+ impacts: BusyImpactSummary
63
+ }
64
+ export interface BusyReconciliationPreview extends BusyReconciliationCounts {
65
+ expectedRevision: SafeInteger
66
+ currentRevision: SafeInteger
67
+ }
68
+ export interface BusyApplyOutcome extends BusyReconciliationCounts {
69
+ kind: 'applied' | 'already-applied'
70
+ revision: SafeInteger
71
+ }
72
+ /** A secondary physical requirement, committed with the primary offering. */
73
+ export interface AdditionalAllocationRequest {
74
+ offering: string
75
+ resource?: string
76
+ units?: SafeInteger
77
+ }
78
+ export type AllocationRequirementDocument =
79
+ | { kind: 'primary' }
80
+ | { kind: 'additional'; index: SafeInteger }
81
+ export interface AllocationDocument {
82
+ requirement: AllocationRequirementDocument
83
+ offering: string
84
+ resource: string
85
+ units: SafeInteger
86
+ occupiedStart: Instant
87
+ occupiedEnd: Instant
88
+ }
89
+ export interface OperationalAllocationDocument extends Omit<AllocationDocument, 'resource'> {
90
+ resource?: string
91
+ }
92
+ /** Physical advice only. This read never grants admission or reserves capacity. */
93
+ export interface AvailabilityPreviewRequest {
94
+ offering: string
95
+ start: Instant
96
+ durationMinutes?: SafeInteger
97
+ resource?: string
98
+ resourceUnits?: SafeInteger
99
+ additionalAllocations?: ReadonlyArray<AdditionalAllocationRequest>
100
+ party?: PartyCounts
101
+ }
102
+ export interface AvailabilityPreviewDocument {
103
+ offering: string
104
+ start: Instant
105
+ end: Instant
106
+ capacityAvailable: boolean
107
+ publicCode?: string
108
+ }
109
+ /** A fixed verified-grant selector, never a caller-supplied manager identifier. */
110
+ export type ManagerSelection = 'schedulingManager'
111
+ /** Source-owned booking data. It grants no relationship or appointment authority. */
112
+ export interface PartyReference {
113
+ role: 'beneficiary' | 'organization'
114
+ reference: ExternalReference
115
+ }
36
116
 
37
117
  /** One admission: the offering, start, and party a hold or booking asks capacity for. */
38
118
  export interface AdmissionRequest {
39
119
  offering: string
40
120
  start: Instant
41
- party: PartyCounts
121
+ durationMinutes?: SafeInteger
122
+ resource?: string
123
+ /** Physical units, default 1. People are counted separately. */
124
+ resourceUnits?: SafeInteger
125
+ additionalAllocations?: ReadonlyArray<AdditionalAllocationRequest>
126
+ party?: PartyCounts
127
+ manager?: ManagerSelection
128
+ partyReferences?: ReadonlyArray<PartyReference>
42
129
  channel?: string | null
43
130
  duplicateKey?: string | null
44
131
  policyRevision: SafeInteger
@@ -55,19 +142,59 @@ export type CreateAppointmentRequest =
55
142
 
56
143
  export interface RescheduleAppointmentRequest { observedRevision: SafeInteger; admission: AdmissionRequest }
57
144
  export interface CancelAppointmentRequest { observedRevision: SafeInteger; reason?: string | null }
145
+ export type AttendanceState = 'arrived' | 'completed' | 'no-show'
146
+ export interface RecordAttendanceRequest {
147
+ observedAppointmentRevision: SafeInteger
148
+ observedRevision: SafeInteger
149
+ state: AttendanceState
150
+ observedAt: Instant
151
+ }
152
+ export interface AttendanceDocument {
153
+ appointmentId: string
154
+ appointmentRevision: SafeInteger
155
+ revision: SafeInteger
156
+ state: AttendanceState
157
+ observedAt: Instant
158
+ recordedAt: Instant
159
+ }
58
160
 
59
- export interface AvailabilityQuery {
161
+ export interface AvailabilitySelection {
162
+ durationMinutes?: SafeInteger | null
163
+ resource?: string | null
164
+ }
165
+ export interface AvailabilityQuery extends AvailabilitySelection {
60
166
  start?: Instant | null
61
167
  end?: Instant | null
62
168
  cursor?: string | null
63
169
  limit?: SafeInteger | null
64
170
  }
65
171
  export interface PageQuery { cursor?: string | null; limit?: SafeInteger | null }
172
+ export type OperationalTimeBasis = 'displayed' | 'occupied'
173
+ export interface OperationalAppointmentQuery {
174
+ service: string
175
+ location: string
176
+ start: Instant
177
+ end: Instant
178
+ timeBasis: OperationalTimeBasis
179
+ offering?: string
180
+ state?: AppointmentState
181
+ resource?: string
182
+ externalReference?: ExternalReference
183
+ profile?: string
184
+ cursor?: string
185
+ limit?: SafeInteger
186
+ }
66
187
 
67
188
  export interface SchedulingServiceDocument { schedulingId: string; policyRevision: SafeInteger; policyDigest: string }
68
189
  export interface ServiceDocument { id: string; label: string }
69
190
  export type SchedulingMode = 'exact-time' | 'arrival-window'
191
+ export type OpeningCoverage = 'service-interval' | 'occupied-interval'
70
192
  export interface ReminderDocument { minutesBefore: SafeInteger }
193
+ export interface DurationSelectionDocument {
194
+ minimumMinutes: SafeInteger
195
+ maximumMinutes: SafeInteger
196
+ incrementMinutes: SafeInteger
197
+ }
71
198
  export interface WindowDocument { id: string; revision: SafeInteger; start: Instant; end: Instant; units: SafeInteger }
72
199
  export interface OfferingDocument {
73
200
  id: string
@@ -75,36 +202,46 @@ export interface OfferingDocument {
75
202
  label: string
76
203
  mode: SchedulingMode
77
204
  location: string
205
+ pool?: string
78
206
  leadTimeMinutes: SafeInteger
79
207
  horizonDays: SafeInteger
80
208
  cancellationCutoffMinutes: SafeInteger
81
209
  durationMinutes: SafeInteger | null
210
+ durationSelection?: DurationSelectionDocument
211
+ openingCoverage?: OpeningCoverage
212
+ allowResourceSelection?: boolean
213
+ partyCounts?: 'required' | 'optional'
82
214
  bufferBeforeMinutes: SafeInteger | null
83
215
  bufferAfterMinutes: SafeInteger | null
84
216
  startIncrementMinutes: SafeInteger | null
85
217
  maxRecipients: SafeInteger | null
86
218
  window: WindowDocument | null
219
+ windows?: ReadonlyArray<WindowDocument>
87
220
  reminders: ReadonlyArray<ReminderDocument>
88
221
  requiresCapabilities: ReadonlyArray<string>
89
222
  prerequisites: ReadonlyArray<string>
90
223
  }
91
- export interface ResourceDocument { resourceId: string; pool: string; capabilities: ReadonlyArray<string>; available: boolean }
224
+ export interface ResourceDocument { resourceId: string; pool: string; capabilities: ReadonlyArray<string>; available: boolean; capacityUnits?: SafeInteger }
92
225
  export interface LocationDocument { locationId: string; timezone: string }
93
226
 
94
227
  /** Exact-time offerings answer grid slots; arrival-window offerings answer windows. */
95
228
  export type AvailabilityEntry =
96
- | { kind: 'slot'; start: Instant; end: Instant; free: SafeInteger }
229
+ | { kind: 'slot'; start: Instant; end: Instant; free: SafeInteger; availableUnits?: SafeInteger }
97
230
  | { kind: 'window'; window: string; start: Instant; end: Instant; remaining: SafeInteger; channelRemaining: SafeInteger | null }
98
231
 
99
232
  export interface PageDocument<T> { items: ReadonlyArray<T>; nextCursor: string | null }
100
233
 
101
234
  export interface HoldDocument {
235
+ allocations?: ReadonlyArray<AllocationDocument>
102
236
  holdId: string
103
237
  offering: string
104
238
  start: Instant
105
239
  end: Instant
106
240
  resource: string | null
107
241
  units: SafeInteger
242
+ party?: PartyCounts
243
+ manager?: ManagerSelection
244
+ partyReferences?: ReadonlyArray<PartyReference>
108
245
  expiresAt: Instant
109
246
  policyRevision: SafeInteger
110
247
  externalReferences: ReadonlyArray<ExternalReference>
@@ -112,12 +249,17 @@ export interface HoldDocument {
112
249
 
113
250
  export type AppointmentState = 'confirmed' | 'cancelled'
114
251
  export interface AppointmentDocument {
252
+ attendance?: AttendanceDocument
253
+ allocations?: ReadonlyArray<AllocationDocument>
115
254
  appointmentId: string
116
255
  offering: string
117
256
  start: Instant
118
257
  end: Instant
119
258
  resource: string | null
120
259
  units: SafeInteger
260
+ party?: PartyCounts
261
+ manager?: ManagerSelection
262
+ partyReferences?: ReadonlyArray<PartyReference>
121
263
  channel: string | null
122
264
  revision: SafeInteger
123
265
  state: AppointmentState
@@ -126,6 +268,24 @@ export interface AppointmentDocument {
126
268
  cancelledAt: Instant | null
127
269
  externalReferences: ReadonlyArray<ExternalReference>
128
270
  }
271
+ export interface OperationalAppointmentDocument {
272
+ attendance?: AttendanceDocument
273
+ allocations?: ReadonlyArray<OperationalAllocationDocument>
274
+ appointmentId: string
275
+ revision: SafeInteger
276
+ service: string
277
+ location: string
278
+ offering: string
279
+ state: AppointmentState
280
+ displayedStart: Instant
281
+ displayedEnd: Instant
282
+ occupiedStart?: Instant
283
+ occupiedEnd?: Instant
284
+ resource?: string
285
+ units?: SafeInteger
286
+ party?: PartyCounts
287
+ externalReferences?: ExternalReference[]
288
+ }
129
289
 
130
290
  export interface AppointmentHistoryEntryDocument {
131
291
  eventId: string
@@ -213,7 +373,11 @@ export class SchedulingClient {
213
373
  listServices(token: string, cursor?: string | null): Promise<SchedulingOutcome<PageDocument<ServiceDocument>>>
214
374
  listOfferings(token: string, cursor?: string | null): Promise<SchedulingOutcome<PageDocument<OfferingDocument>>>
215
375
  availability(token: string, offering: string, query?: AvailabilityQuery | null): Promise<SchedulingOutcome<PageDocument<AvailabilityEntry>>>
216
- explain(token: string, offering: string, start: Instant): Promise<SchedulingOutcome<ExplainDocument>>
376
+ previewAvailability(token: string, request: AvailabilityPreviewRequest): Promise<SchedulingOutcome<AvailabilityPreviewDocument>>
377
+ previewSourceBusy(token: string, profile: string, request: BusyReconciliationRequest): Promise<SchedulingOutcome<BusyReconciliationPreview>>
378
+ /** Apply once; recover uncertainty with the exact body and expected revision. */
379
+ applySourceBusy(token: string, profile: string, request: BusyReconciliationRequest): Promise<SchedulingOutcome<BusyApplyOutcome>>
380
+ explain(token: string, offering: string, start: Instant, selection?: AvailabilitySelection | null): Promise<SchedulingOutcome<ExplainDocument>>
217
381
  createHold(token: string, idempotencyKey: string, request: AdmissionRequest): Promise<SchedulingOutcome<HoldDocument>>
218
382
  releaseHold(token: string, holdId: string): Promise<SchedulingOutcome<null>>
219
383
  createAppointment(token: string, idempotencyKey: string, request: CreateAppointmentRequest): Promise<SchedulingOutcome<AppointmentDocument>>
@@ -221,8 +385,10 @@ export class SchedulingClient {
221
385
  appointmentReceipt(token: string, idempotencyKey: string, request: CreateAppointmentRequest): Promise<SchedulingOutcome<AppointmentDocument>>
222
386
  getAppointment(token: string, appointmentId: string): Promise<SchedulingOutcome<AppointmentDocument>>
223
387
  listAppointments(token: string, reference: ExternalReference, page?: PageQuery | null): Promise<SchedulingOutcome<PageDocument<AppointmentDocument>>>
388
+ listOperationalAppointments(token: string, query: OperationalAppointmentQuery): Promise<SchedulingOutcome<PageDocument<OperationalAppointmentDocument>>>
224
389
  rescheduleAppointment(token: string, appointmentId: string, idempotencyKey: string, request: RescheduleAppointmentRequest): Promise<SchedulingOutcome<AppointmentDocument>>
225
390
  cancelAppointment(token: string, appointmentId: string, idempotencyKey: string, request: CancelAppointmentRequest): Promise<SchedulingOutcome<AppointmentDocument>>
391
+ recordAttendance(token: string, appointmentId: string, idempotencyKey: string, request: RecordAttendanceRequest): Promise<SchedulingOutcome<AttendanceDocument>>
226
392
  appointmentHistory(token: string, appointmentId: string, cursor?: string | null): Promise<SchedulingOutcome<PageDocument<AppointmentHistoryEntryDocument>>>
227
393
  listResources(token: string, cursor?: string | null): Promise<SchedulingOutcome<PageDocument<ResourceDocument>>>
228
394
  listLocations(token: string, cursor?: string | null): Promise<SchedulingOutcome<PageDocument<LocationDocument>>>
@@ -114,15 +114,20 @@ for (const [method, jsonIndexes] of [
114
114
  ['listServices', []],
115
115
  ['listOfferings', []],
116
116
  ['availability', [2]],
117
- ['explain', []],
117
+ ['previewAvailability', [1]],
118
+ ['previewSourceBusy', [2]],
119
+ ['applySourceBusy', [2]],
120
+ ['explain', [3]],
118
121
  ['createHold', [2]],
119
122
  ['releaseHold', []],
120
123
  ['createAppointment', [2]],
121
124
  ['appointmentReceipt', [2]],
122
125
  ['getAppointment', []],
123
126
  ['listAppointments', [1, 2]],
127
+ ['listOperationalAppointments', [1]],
124
128
  ['rescheduleAppointment', [3]],
125
129
  ['cancelAppointment', [3]],
130
+ ['recordAttendance', [3]],
126
131
  ['appointmentHistory', []],
127
132
  ['listResources', []],
128
133
  ['listLocations', []],
@@ -7,15 +7,20 @@ export declare class SchedulingClient {
7
7
  listServices(token: string, cursor?: string | undefined | null): Promise<SchedulingOutcome>
8
8
  listOfferings(token: string, cursor?: string | undefined | null): Promise<SchedulingOutcome>
9
9
  availability(token: string, offering: string, query?: any | undefined | null): Promise<SchedulingOutcome>
10
- explain(token: string, offering: string, start: string): Promise<SchedulingOutcome>
10
+ previewAvailability(token: string, request: any): Promise<SchedulingOutcome>
11
+ previewSourceBusy(token: string, profile: string, request: any): Promise<SchedulingOutcome>
12
+ applySourceBusy(token: string, profile: string, request: any): Promise<SchedulingOutcome>
13
+ explain(token: string, offering: string, start: string, selection?: any | undefined | null): Promise<SchedulingOutcome>
11
14
  createHold(token: string, idempotencyKey: string, request: any): Promise<SchedulingOutcome>
12
15
  releaseHold(token: string, holdId: string): Promise<SchedulingOutcome>
13
16
  createAppointment(token: string, idempotencyKey: string, request: any): Promise<SchedulingOutcome>
14
17
  appointmentReceipt(token: string, idempotencyKey: string, request: any): Promise<SchedulingOutcome>
15
18
  getAppointment(token: string, appointmentId: string): Promise<SchedulingOutcome>
16
19
  listAppointments(token: string, reference: any, page?: any | undefined | null): Promise<SchedulingOutcome>
20
+ listOperationalAppointments(token: string, query: any): Promise<SchedulingOutcome>
17
21
  rescheduleAppointment(token: string, appointmentId: string, idempotencyKey: string, request: any): Promise<SchedulingOutcome>
18
22
  cancelAppointment(token: string, appointmentId: string, idempotencyKey: string, request: any): Promise<SchedulingOutcome>
23
+ recordAttendance(token: string, appointmentId: string, idempotencyKey: string, request: any): Promise<SchedulingOutcome>
19
24
  appointmentHistory(token: string, appointmentId: string, cursor?: string | undefined | null): Promise<SchedulingOutcome>
20
25
  listResources(token: string, cursor?: string | undefined | null): Promise<SchedulingOutcome>
21
26
  listLocations(token: string, cursor?: string | undefined | null): Promise<SchedulingOutcome>