@registrystack/client 0.40.0 → 0.42.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.
@@ -23,29 +23,28 @@ export interface CaseworkClientConfig {
23
23
  maxMutationRetries?: SafeInteger | null
24
24
  }
25
25
 
26
- export type InboxView = 'mine' | 'my-teams' | 'team-holdings' | 'overdue' | 'completed-by-me'
27
- export type OccurrenceKind = 'review' | 'application'
28
- export type OccurrenceState = 'open' | 'claimed' | 'waiting-applicant' | 'waiting-application' | 'synchronizing' | 'completed' | 'superseded' | 'cancelled'
29
- export type OperationName = string
30
- export type AttemptState = 'pending' | 'uncertain' | 'completed' | 'refused'
31
26
  export type PageStatus = 'complete' | 'budget-exhausted' | 'source-unavailable'
32
- export type HistoryKind = 'observed' | 'opened' | 'claimed' | 'assigned' | 'delegated' | 'caseload-moved' | 'clock-reminder' | 'clock-step-applied' | 'clock-recomputed' | 'released' | 'draft-saved' | 'attempt-reserved' | 'attempt-uncertain' | 'action-completed' | 'attempt-settled' | 'superseded' | 'completed'
33
-
34
27
  export interface IssuerPrincipal { issuer: string; subject: string }
35
28
  export type TaskGrantBounds = { type: 'evidence'; requirement: string } | { type: 'breg'; permissions: ReadonlyArray<TaskPermission> } | { type: 'scheduling'; permissions: ReadonlyArray<SchedulingTaskPermission> }
36
29
  export interface TaskPermission { collection: string; operations: ReadonlyArray<string> }
37
30
  export interface SchedulingTaskPermission { service: string; location: string; actions: ReadonlyArray<string> }
38
31
  export interface EvidenceRequesterContext { requesterTags: ReadonlyArray<string>; audience: string }
39
32
  export interface TaskApprovalRequest { templateId: string; templateVersion: string }
33
+ /** Deferred authority keeps its approved deadline; execution credentials stay short-lived. */
34
+ export type TaskAuthorizationMode = 'immediate' | 'deferred'
40
35
  export interface TaskTemplatePreview {
41
36
  id: string; version: string; label: string; agent: IssuerPrincipal; client: string; resource: string; scopes: ReadonlyArray<string>; purpose: string
42
37
  evidenceContext?: EvidenceRequesterContext; bounds: TaskGrantBounds; subjects: { readonly [key: string]: Exclude<JsonScalar, null> }; lifetimeSeconds: SafeInteger
38
+ /** Omitted for the existing immediate mode. */
39
+ authorizationMode?: TaskAuthorizationMode
43
40
  }
44
- export interface TaskTemplatePreviews { itemRevision: SafeInteger; templates: ReadonlyArray<TaskTemplatePreview> }
41
+ export interface TaskTemplatePreviews { taskRevision: SafeInteger; templates: ReadonlyArray<TaskTemplatePreview> }
45
42
  /** Grant metadata deliberately excludes stored subject values. */
46
43
  export interface TaskGrantView {
47
44
  id: string; templateId: string; templateVersion: string; agent: IssuerPrincipal; client: string; resource: string; scopes: ReadonlyArray<string>; purpose: string
48
45
  evidenceContext?: EvidenceRequesterContext; bounds: TaskGrantBounds; expiresAt: SafeInteger; invalidated: boolean
46
+ /** Omitted for the existing immediate mode. */
47
+ authorizationMode?: TaskAuthorizationMode
49
48
  }
50
49
  export interface TaskGrantList { grants: ReadonlyArray<TaskGrantView> }
51
50
  export interface TaskGrantRevocation { id: string; invalidated: boolean }
@@ -58,50 +57,7 @@ export interface TaskGrantStatusDetails {
58
57
  export interface TaskGrantStatus { active: boolean; grant?: TaskGrantStatusDetails }
59
58
 
60
59
  export interface DirectoryMember { issuer: string; subject: string; displayName?: string | null }
61
- export interface SubjectRef { sourceId: string; kind: string; id: string }
62
- export interface SourceBinding {
63
- sourceRevision: string
64
- version: string
65
- integrity?: string
66
- generation: string
67
- }
68
- export type CaseworkActionName = 'claim' | 'release' | OperationName
69
- export interface CaseworkAction { operation: CaseworkActionName; href: string; ifMatch: string }
70
- export interface CorrectionRoutingCopy {
71
- sourceBinding: SourceBinding
72
- reason?: string
73
- flaggedFields: ReadonlyArray<string>
74
- }
75
- export interface WorkItemRouting {
76
- ruleId?: string
77
- because?: string
78
- policyDigest?: string
79
- }
80
- export interface WorkItem {
81
- itemId: string
82
- subject: SubjectRef
83
- occurrenceKind: OccurrenceKind
84
- stage?: string
85
- binding: SourceBinding
86
- bindingReference: string
87
- displayReference?: string
88
- state: OccurrenceState
89
- queueId: string
90
- holder?: IssuerPrincipal
91
- heldSince?: string
92
- assignment?: AssignmentContext
93
- revision: SafeInteger
94
- firstObservedAt: string
95
- passiveDueAt?: string
96
- updatedAt: string
97
- actions: ReadonlyArray<CaseworkAction>
98
- routingCopy?: CorrectionRoutingCopy
99
- routing?: WorkItemRouting
100
- clockOccurrences?: ReadonlyArray<ClockOccurrenceView>
101
- liveAttempt?: AttemptStatus
102
- }
103
60
  export interface Page<T> { items: ReadonlyArray<T>; nextCursor?: string; status: PageStatus }
104
- export interface WorkItemPage extends Page<WorkItem> { servedQueues: ReadonlyArray<string> }
105
61
  export type DirectoryTargetPurpose = 'assignment' | 'absence-person' | 'absence-cover'
106
62
  export type DirectoryTargetsQuery = {
107
63
  cursor?: string
@@ -112,138 +68,29 @@ export type DirectoryTargetsQuery = {
112
68
  | { purpose: 'absence-cover'; queue?: never; personIssuer: string; personSubject: string }
113
69
  )
114
70
  export type DirectoryTargetPage = Page<DirectoryMember>
115
- export type ListWorkItemsQuery = {
116
- view: InboxView
117
- sort?: InboxSort
118
- queue?: string
119
- cursor?: string
120
- limit?: SafeInteger
121
- } & (
122
- | { sourceId: string; subjectKind: string; subjectId: string; reference?: never }
123
- | { reference: string; sourceId?: never; subjectKind?: never; subjectId?: never }
124
- | { reference?: never; sourceId?: never; subjectKind?: never; subjectId?: never }
125
- )
126
- export type InboxSort = 'due' | 'age' | 'type'
127
- export interface NextWorkItemQuery { queue?: string; cursor?: string }
128
- export interface SaveDraftRequest {
129
- binding: SourceBinding
130
- reason: string
131
- flaggedFields?: ReadonlyArray<string>
132
- }
133
- export interface Draft {
134
- itemId: string
135
- author: IssuerPrincipal
136
- binding: SourceBinding
137
- reason: string
138
- flaggedFields: ReadonlyArray<string>
139
- revision: SafeInteger
140
- updatedAt: string
141
- }
142
- export interface DraftResponse { draft: Draft }
143
- export interface DecideRequest {
144
- displayedBinding: SourceBinding
145
- operation: OperationName
146
- reason?: string
147
- flaggedFields?: ReadonlyArray<string>
148
- }
149
71
  /** The Registry-Source-Profile header selects the source profile; the body is empty. */
150
- export type RecoverAttemptRequest = Record<string, never>
151
- export interface SourceReceipt {
152
- sourceRevision: string
153
- resultingState: string
154
- binding: SourceBinding
155
- actorReference?: string
156
- metadata: Readonly<Record<string, string>>
157
- }
158
- export interface AttemptStatus {
159
- attemptId: string
160
- itemId: string
161
- state: AttemptState
162
- itemRevision: SafeInteger
163
- operation: OperationName
164
- createdAt: string
165
- receipt?: SourceReceipt
166
- }
167
- export interface MutationResponse { item: WorkItem; attempt?: AttemptStatus }
168
- export interface HistoryEntryBase {
169
- eventId: string
170
- itemId: string
171
- itemRevision: SafeInteger
172
- kind: HistoryKind
173
- occurredAt: string
174
- actor?: IssuerPrincipal
175
- profileId: string
176
- }
177
- export interface AttemptReservedHistoryEntry extends HistoryEntryBase {
178
- kind: 'attempt-reserved'
179
- detail: JsonObject & { attemptId: string; bindingReference: string; operation: OperationName }
180
- }
181
- /**
182
- * An attempt-uncertain detail takes one of three shapes: recovery left the
183
- * attempt uncertain, the source definitively refused it, or an operator marked
184
- * an expired pending attempt uncertain. reason is the original decision reason.
185
- */
186
- export type AttemptUncertainHistoryDetail = JsonObject & {
187
- attemptId: string
188
- bindingReference: string
189
- operation: OperationName
190
- reason?: string
191
- } & (
192
- | { sourceRevision?: string | null; definitivelyRefused?: never; operatorReason?: never }
193
- | { definitivelyRefused: true; operatorReason?: never }
194
- | { operatorReason: string; decidedBy: string; originalActor: IssuerPrincipal; originalProfileId: string; definitivelyRefused?: never }
195
- )
196
- export interface AttemptUncertainHistoryEntry extends HistoryEntryBase {
197
- kind: 'attempt-uncertain'
198
- detail: AttemptUncertainHistoryDetail
199
- }
200
- export interface ActionCompletedHistoryEntry extends HistoryEntryBase {
201
- kind: 'action-completed'
202
- detail: JsonObject & { attemptId: string; bindingReference: string; sourceRevision: string; sourceReceipt: SourceReceipt }
203
- }
204
- export interface AttemptSettledHistoryEntry extends HistoryEntryBase {
205
- kind: 'attempt-settled'
206
- detail: JsonObject & { attemptId: string; bindingReference: string; operation: OperationName; outcome: 'applied' | 'not-applied'; reason: string; decidedBy: string }
207
- }
208
- export interface OtherHistoryEntry extends HistoryEntryBase {
209
- kind: Exclude<HistoryKind, 'attempt-reserved' | 'attempt-uncertain' | 'action-completed' | 'attempt-settled'>
210
- detail: JsonValue
211
- }
212
- export type HistoryEntry = AttemptReservedHistoryEntry | AttemptUncertainHistoryEntry | ActionCompletedHistoryEntry | AttemptSettledHistoryEntry | OtherHistoryEntry
213
- export interface HoldingSummary {
214
- principal: IssuerPrincipal
215
- queueId: string
216
- activeItems: SafeInteger
217
- overdueItems: SafeInteger
218
- }
219
72
  export interface QueueRecord { id: string; label: string }
220
- export interface PassiveTargetPolicy { id: string; after: { elapsed: string } }
221
73
  export type RoutingPredicate = { equals: JsonValue } | { oneOf: ReadonlyArray<JsonValue> }
222
- export interface RoutingCondition { activity?: 'review' | 'apply'; stage?: string; fields?: Readonly<Record<string, RoutingPredicate>> }
74
+ export interface RoutingCondition { stage?: string; fields?: Readonly<Record<string, RoutingPredicate>> }
223
75
  export interface RoutingRule { id: string; because: string; when: RoutingCondition; queue: string }
224
- export interface DisplayReferencePolicy { field: string }
225
- export interface SourceRequestPolicy { entity: string; queue: string; projection?: ReadonlyArray<string>; routing?: ReadonlyArray<RoutingRule>; displayReference?: DisplayReferencePolicy; clock?: string; target?: PassiveTargetPolicy }
226
76
  export type WorkingWeekday = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday'
227
77
  export interface CalendarPolicy { id: string; timezone: string; workingWeekdays: ReadonlyArray<WorkingWeekday>; holidaySet: string }
228
- export interface ClockReminder { id: string; workingDaysBefore: SafeInteger }
78
+ export interface WorkingDays { workingDays: SafeInteger }
79
+ export interface ClockReminder { id: string; before: WorkingDays }
80
+ export type ElapsedDuration = { minutes: SafeInteger } | { hours: SafeInteger } | { days: SafeInteger }
229
81
  export interface ClockStep { id: string; because: string; at: 'due'; action: { reassign: { queue: string } } }
230
82
  export type ClockPolicy = {
231
- type: 'subject'; id: string; anchor: 'first-submitted-at'; completeOn: 'review-completed'; after: { elapsed: string }; pauseWhile: ReadonlyArray<'awaiting-applicant'>
83
+ type: 'subject'; id: string; anchor: { type: 'request-accepted' }; after: ElapsedDuration
232
84
  } | {
233
- type: 'activity'; id: string; anchor: 'stage-entered-at'; calendar: string; after: { workingDays: SafeInteger }; dueTime: string;
234
- atRisk?: { workingDaysBefore: SafeInteger }; reminders?: ReadonlyArray<ClockReminder>; steps?: ReadonlyArray<ClockStep>
235
- }
236
- export interface SourcePolicy {
237
- id: string
238
- adapter: string
239
- description: string
240
- requests: ReadonlyArray<SourceRequestPolicy>
85
+ type: 'stage'; id: string; anchor: { type: 'stage-entered' }; calendar: string; after: WorkingDays; dueTime: string;
86
+ atRisk?: { before: WorkingDays }; reminders?: ReadonlyArray<ClockReminder>; steps?: ReadonlyArray<ClockStep>
241
87
  }
242
88
  export interface Description {
243
89
  projectId: string
244
90
  policyVersion: string
245
91
  queues: ReadonlyArray<QueueRecord>
246
- sources: ReadonlyArray<SourcePolicy>
92
+ reviewPolicies: ReadonlyArray<ReviewPolicy>
93
+ contextProviders: ReadonlyArray<ReviewContextProviderPolicy>
247
94
  calendars: ReadonlyArray<CalendarPolicy>
248
95
  clocks: ReadonlyArray<ClockPolicy>
249
96
  }
@@ -260,21 +107,20 @@ export interface AbsenceInput { person: IssuerPrincipal; from: string; until: st
260
107
  export interface AbsenceRecord extends AbsenceInput { absenceId: string; revision: SafeInteger }
261
108
  export interface AbsencesQuery { cursor?: string; limit?: SafeInteger }
262
109
  export interface AbsenceList { directoryRevision: SafeInteger; items: ReadonlyArray<AbsenceRecord>; nextCursor?: string }
263
- export interface AssignmentContext { owner?: IssuerPrincipal; assignedBy?: IssuerPrincipal; absenceIds: ReadonlyArray<string>; staffingDiagnostic?: 'no-cover-available' }
110
+ export type StaffingDiagnostic = 'no-cover-available' | 'insufficient-distinct-approvers'
264
111
  export interface AssignmentRequest { assignee: IssuerPrincipal; reason?: string }
265
112
  export interface DelegateRequest { delegate: IssuerPrincipal; reason?: string }
266
- export interface CaseloadMoveRequest { from: IssuerPrincipal; to: IssuerPrincipal; queueId?: string; reason: string }
267
- export interface CaseloadItemSelection { itemId: string; expectedRevision: SafeInteger }
268
- export interface CaseloadApplyRequest { movement: CaseloadMoveRequest; items: ReadonlyArray<CaseloadItemSelection> }
269
- export interface CaseloadPreviewQuery { cursor?: string; limit?: SafeInteger }
270
- export interface CaseloadItemResult { itemId: string; result: 'moved' | 'not-visible' | 'not-eligible' | 'attempt-in-progress' | 'conflict'; revision?: SafeInteger }
113
+ export interface ReviewCaseloadMoveRequest { from: IssuerPrincipal; to: IssuerPrincipal; queue?: string; reason: string }
114
+ export interface ReviewCaseloadTask { taskId: Uuid; revision: SafeInteger }
115
+ export interface ReviewCaseloadPreview { previewId: Uuid; directoryRevision: SafeInteger; tasks: ReadonlyArray<ReviewCaseloadTask>; expiresAt: string }
116
+ export interface ReviewCaseloadApplyRequest { previewId: Uuid }
117
+ export interface ReviewCaseloadResult { moved: ReadonlyArray<ReviewCaseloadTask> }
271
118
  export interface BootstrapDirectoryRequest {
272
119
  teamId: string
273
120
  staff: ReadonlyArray<IssuerPrincipal>
274
121
  supervisors: ReadonlyArray<IssuerPrincipal>
275
122
  queueId: string
276
123
  }
277
- export interface HoldingsQuery { cursor?: string; limit?: SafeInteger }
278
124
  export interface CaseworkOutcome<T> { kind: 'complete'; value: T; traceId: string }
279
125
 
280
126
  export type KnownCaseworkProblemCode =
@@ -297,12 +143,13 @@ export type KnownCaseworkProblemCode =
297
143
  | 'request.limit-out-of-range'
298
144
  | 'request.method-not-allowed'
299
145
  | 'request.not-found'
300
- | 'request.reason-unsupported'
301
- | 'request.source-rejected'
302
146
  | 'request.unprocessable'
303
147
  | 'request.unsupported-media-type'
148
+ | 'review.distinct-approver-required'
304
149
  | 'review.initiator-excluded'
305
150
  | 'review.initiator-required'
151
+ | 'review.query-too-broad'
152
+ | 'review.policy-mismatch'
306
153
  | 'review.result-expired'
307
154
  | 'review.submission-conflict'
308
155
  | 'review.task-not-held'
@@ -311,21 +158,16 @@ export type KnownCaseworkProblemCode =
311
158
  | 'source-profile.not-applicable'
312
159
  | 'source-profile.required'
313
160
  | 'source.bad-gateway'
314
- | 'source.not-found'
315
- | 'source.record-missing'
316
- | 'source.reviewer-not-authorized'
317
- | 'source.signature-invalid'
318
- | 'work-item.already-claimed'
319
- | 'work-item.not-holder'
320
- | 'work-item.not-offered'
321
- | 'work-item.not-visible'
322
- | 'work-item.proposal-changed'
323
- | 'work-item.recovery-pending'
324
- | 'work-item.source-unavailable'
325
- | 'work-item.superseded'
161
+ | 'source.version-mismatch'
162
+ | 'source.version-unavailable'
326
163
  export type CaseworkProblemCode = KnownCaseworkProblemCode | (string & {})
327
164
  export type CaseworkProtocolFailure = 'header-bounds' | 'trace-context' | 'media-type' | 'body' | 'problem' | 'status' | 'protocol'
328
165
 
166
+ export interface ReviewTaskGrantReadOptions {
167
+ taskId: Uuid
168
+ sourceProfile?: string | null
169
+ }
170
+
329
171
  export class CaseworkClientError extends Error {
330
172
  readonly kind: 'configuration' | 'invalid-request' | 'transport' | 'problem' | 'protocol'
331
173
  /**
@@ -345,53 +187,40 @@ export class CaseworkClientError extends Error {
345
187
  readonly detail?: string
346
188
  readonly status?: SafeInteger
347
189
  readonly traceId?: string
348
- readonly originalAttemptId?: string
349
190
  readonly validation?: {
350
191
  readonly path: string
351
- readonly reason: 'kind-not-allowed' | 'reference-invalid' | 'object-required' | 'maximum-bytes-exceeded' | 'maximum-depth-exceeded' | 'schema-mismatch' | 'outcome-not-declared' | 'reason-required' | 'text-invalid' | 'result-not-declared' | 'result-required' | 'field-not-declared' | 'constraint-invalid' | 'constraint-violated'
192
+ readonly reason: 'policy-not-allowed' | 'reference-invalid' | 'object-required' | 'maximum-bytes-exceeded' | 'maximum-depth-exceeded' | 'schema-mismatch' | 'outcome-not-declared' | 'reason-required' | 'text-invalid' | 'result-not-declared' | 'result-required' | 'field-not-declared' | 'constraint-invalid' | 'constraint-violated' | 'public-reason-required' | 'public-reason-not-declared' | 'approval-outcome-differs'
193
+ /** Outcome identifiers the review policy declares for the requested settlement when an outcome is refused; empty otherwise. */
194
+ readonly allowed: ReadonlyArray<string>
352
195
  }
353
196
  readonly transportKind?: string
354
197
  readonly protocolFailure?: CaseworkProtocolFailure
355
198
  }
356
199
 
357
- export type ClockRuntimeState = 'running' | 'paused' | 'completed' | 'cancelled' | 'verification-pending' | 'source-facts-missing'
200
+ export type ClockRuntimeState = 'running' | 'completed' | 'cancelled' | 'verification-pending' | 'source-facts-missing'
358
201
  export type ClockNextEffect =
359
202
  | { kind: 'reminder'; id: string; at: string }
360
203
  | { kind: 'reassign'; id: string; at: string; because: string; queueId: string }
361
- export interface ClockOccurrenceView {
362
- clockOccurrenceId: string
363
- subject: SubjectRef
364
- clockId: string
365
- state: ClockRuntimeState
366
- policyDigest: string
367
- calculationGeneration: SafeInteger
368
- recomputeGeneration: SafeInteger
369
- anchorAt?: string
370
- startedAt?: string
371
- dueAt?: string
372
- atRiskAt?: string
373
- completedAt?: string
374
- nextEffect?: ClockNextEffect
375
- upcomingEffects?: ReadonlyArray<ClockNextEffect>
376
- }
377
204
  export interface HolidaySetDocument { holidaySet: string; revision: SafeInteger; dates: ReadonlyArray<string> }
378
205
  export interface HolidaySetRevisionInput { document: HolidaySetDocument }
379
- export interface ClockRecomputeRequest { clockId: string; holidaySet: string; holidayRevision: SafeInteger }
380
- export interface ClockRecomputeChange { clockOccurrenceId: string; itemId: string; expectedCalculationGeneration: SafeInteger; oldDueAt: string; proposedDueAt: string }
381
- export interface ClockRecomputePreview { previewId: string; clockId: string; holidaySet: string; holidayRevision: SafeInteger; expiresAt: string; changes: ReadonlyArray<ClockRecomputeChange> }
382
- export interface ClockRecomputeApplyRequest { previewId: string }
383
- export interface ClockRecomputeResult { previewId: string; appliedOccurrences: ReadonlyArray<string> }
206
+ export interface ReviewClockRecomputeRequest { taskIds: ReadonlyArray<Uuid> }
207
+ export interface ReviewClockRecomputeTask { taskId: Uuid; revision: SafeInteger; deadlineAt?: string }
208
+ export interface ReviewClockRecomputePreview { previewId: Uuid; directoryRevision: SafeInteger; tasks: ReadonlyArray<ReviewClockRecomputeTask>; expiresAt: string }
209
+ export interface ReviewClockRecomputeApplyRequest { previewId: Uuid }
210
+ export interface ReviewClockRecomputeResult { tasks: ReadonlyArray<ReviewClockRecomputeTask> }
384
211
 
385
212
  export type ContentDigest = `sha256:${string}`
386
- export interface ReviewSubjectBinding { source: string; type: string; id: string; version: string; digest: ContentDigest }
387
- export interface ReviewPolicyBinding { id: string; version: string; digest: ContentDigest }
213
+ export interface SubjectBinding { source: string; type: string; id: string; version: string; digest: ContentDigest }
214
+ export interface PolicyBinding { id: string; version: string; digest: ContentDigest }
215
+ /** Select the current admitted policy by ID, or require one complete exact pin. */
216
+ export type PolicySelection = { id: string; version?: never; digest?: never } | PolicyBinding
388
217
  export interface HumanIdentity { issuer: string; subject: string }
389
218
  export type ReviewContext =
390
- | { strategy: 'submitted'; snapshot: Readonly<Record<string, JsonValue>> }
391
- | { strategy: 'source'; binding: { reference: string } }
219
+ | { mode: 'submitted'; snapshot: Readonly<Record<string, JsonValue>> }
220
+ | { mode: 'current-source'; binding: { reference: string } }
392
221
  export interface ReviewCreateRequest {
393
- kind: string
394
- subject: ReviewSubjectBinding
222
+ policy: PolicySelection
223
+ subject: SubjectBinding
395
224
  requesterReference: string
396
225
  initiator?: HumanIdentity
397
226
  context: ReviewContext
@@ -399,8 +228,8 @@ export interface ReviewCreateRequest {
399
228
  }
400
229
  export interface ReviewRequestAccepted {
401
230
  requestId: Uuid
402
- subject: ReviewSubjectBinding
403
- policy: ReviewPolicyBinding
231
+ subject: SubjectBinding
232
+ policy: PolicyBinding
404
233
  submissionDigest: ContentDigest
405
234
  }
406
235
  export type ReviewRequestLifecycle = 'reviewing' | 'approved' | 'rejected' | 'changes-requested' | 'answered' | 'cancelled' | 'superseded'
@@ -416,6 +245,7 @@ export interface ReviewResult extends ReviewRequestAccepted {
416
245
  resultId: Uuid
417
246
  status: ReviewResultStatus
418
247
  outcome?: string
248
+ publicReason?: string
419
249
  result?: JsonObject
420
250
  completedAt: string
421
251
  availableUntil: string
@@ -425,22 +255,27 @@ export type ReviewResultOutcome =
425
255
  | { kind: 'pending' | 'concealed_or_unknown' | 'expired'; value: null; traceId: string }
426
256
  export interface ReviewResultFeedEntry { eventId: Uuid; requestId: Uuid; resultId: Uuid; completedAt: string }
427
257
  export interface ReviewResultFeedPage { items: ReadonlyArray<ReviewResultFeedEntry>; nextCursor?: Uuid }
428
- export interface ReviewCancelRequest { subject: ReviewSubjectBinding; reason: string }
258
+ export interface ReviewCancelRequest { subject: SubjectBinding; reason: string }
429
259
  export type ReviewCancelResponse =
430
260
  | { outcome: 'cancelled'; result: ReviewResult }
431
261
  | { outcome: 'already-terminal'; result: ReviewResult }
432
262
  export interface ReviewPageQuery { cursor?: Uuid; limit?: SafeInteger }
433
263
  export type ReviewTaskOwnership = 'assigned-to-me' | 'unclaimed'
434
- export interface ReviewTaskQuery extends ReviewPageQuery { queue?: string; ownership?: ReviewTaskOwnership }
264
+ export type ReviewTaskSort = 'due' | 'subject' | 'reference'
265
+ export interface ReviewStaffingPageQuery { queue?: string; ownership?: ReviewTaskOwnership; reference?: string; sort?: ReviewTaskSort; cursor?: Uuid; limit?: SafeInteger }
266
+ /** A subject selector is absent or names every component of its immutable binding. */
267
+ export type ReviewStaffingQuery = ReviewStaffingPageQuery & (
268
+ | { subjectSource?: never; subjectType?: never; subjectId?: never; subjectVersion?: never; subjectDigest?: never }
269
+ | { subjectSource: string; subjectType: string; subjectId: string; subjectVersion: string; subjectDigest: ContentDigest }
270
+ )
435
271
  export interface SupervisoryReviewTaskQuery extends ReviewPageQuery { queue?: string; requestId?: Uuid }
436
272
  export interface OwnReviewDecisionQuery extends ReviewPageQuery { queue?: string }
437
- export interface WorkItemHistoryQuery { cursor?: string; limit?: SafeInteger }
438
- export type ReviewerTaskState = 'open' | { held: { holder: IssuerPrincipal } } | 'decided'
273
+ export type ReviewTaskState = 'open' | { held: { holder: IssuerPrincipal } } | 'decided'
439
274
  export type ReviewDecisionType = 'approve' | 'reject' | 'changes-requested' | 'answer'
440
275
  export interface ReviewDecisionReceipt {
441
- policy: ReviewPolicyBinding
276
+ policy: PolicyBinding
442
277
  decision: ReviewDecisionType
443
- outcome?: string
278
+ outcome: string
444
279
  outcomeLabel?: string
445
280
  decidedAt: string
446
281
  }
@@ -452,7 +287,12 @@ export interface OwnReviewDecision {
452
287
  decisionReceipt: ReviewDecisionReceipt
453
288
  }
454
289
  export interface OwnReviewDecisionPage { items: ReadonlyArray<OwnReviewDecision>; nextCursor?: Uuid; status: PageStatus }
455
- export interface ReviewerTask {
290
+ export interface ReviewTask {
291
+ subject: SubjectBinding
292
+ requesterReference: string
293
+ deadlineAt?: string | null
294
+ createdAt: string
295
+ displayReference?: string
456
296
  taskId: Uuid
457
297
  requestId: Uuid
458
298
  stageIndex: SafeInteger
@@ -460,11 +300,12 @@ export interface ReviewerTask {
460
300
  queue: string
461
301
  revision: SafeInteger
462
302
  eligibleProfiles: ReadonlyArray<string>
463
- state: ReviewerTaskState
303
+ state: ReviewTaskState
304
+ staffingDiagnostic?: StaffingDiagnostic
464
305
  decidedByCaller?: boolean
465
306
  decisionReceipt?: ReviewDecisionReceipt
466
307
  }
467
- export interface ReviewTaskPage { items: ReadonlyArray<ReviewerTask>; nextCursor?: Uuid; status: PageStatus }
308
+ export interface ReviewTaskPage { items: ReadonlyArray<ReviewTask>; nextCursor?: Uuid; status: PageStatus }
468
309
  export type SupervisoryReviewTaskState = 'open' | 'held' | 'decided'
469
310
  export interface SupervisoryReviewTask {
470
311
  taskId: Uuid
@@ -472,21 +313,22 @@ export interface SupervisoryReviewTask {
472
313
  queue: string
473
314
  revision: SafeInteger
474
315
  state: SupervisoryReviewTaskState
316
+ staffingDiagnostic?: StaffingDiagnostic
475
317
  accountabilityEventId?: Uuid
476
318
  }
477
319
  export interface SupervisoryReviewTaskPage { items: ReadonlyArray<SupervisoryReviewTask>; nextCursor?: Uuid; status: PageStatus }
478
320
  export type ReviewSourceBindingStatus = 'current' | 'binding-changed'
479
- export interface ReviewSourceProjection { binding: SourceBinding; displayReference?: string; display: Readonly<Record<string, JsonValue>> }
321
+ export interface ReviewSourceProjection { binding: SubjectBinding; displayReference?: string; display: Readonly<Record<string, JsonValue>> }
480
322
  export type ReviewTaskContextData =
481
- | { strategy: 'submitted'; snapshot: Readonly<Record<string, JsonValue>> }
482
- | { strategy: 'source'; reference: string; bindingStatus: ReviewSourceBindingStatus; projection?: ReviewSourceProjection }
323
+ | { mode: 'submitted'; snapshot: Readonly<Record<string, JsonValue>> }
324
+ | { mode: 'current-source'; reference: string; bindingStatus: ReviewSourceBindingStatus; projection?: ReviewSourceProjection }
483
325
  export interface ReviewTaskContext {
484
326
  taskId: Uuid
485
327
  requestId: Uuid
486
- subject: ReviewSubjectBinding
328
+ subject: SubjectBinding
487
329
  requesterReference: string
488
- policy: ReviewPolicyBinding
489
- policySnapshot: ReviewKindPolicySnapshot
330
+ policy: PolicyBinding
331
+ policyClosure: ReviewPolicyClosure
490
332
  resultConstraints?: JsonObject
491
333
  context: ReviewTaskContextData
492
334
  }
@@ -498,7 +340,7 @@ export interface ReviewClockOccurrence {
498
340
  clockId: string
499
341
  requestId: Uuid
500
342
  correlation: ReviewClockCorrelation
501
- state: 'running' | 'paused' | 'completed' | 'cancelled' | 'source-facts-missing'
343
+ state: 'running' | 'completed' | 'cancelled' | 'source-facts-missing'
502
344
  policyDigest: ContentDigest
503
345
  anchorAt: string
504
346
  dueAt?: string
@@ -507,10 +349,11 @@ export interface ReviewClockOccurrence {
507
349
  }
508
350
  export interface ReviewTaskDraftInput { body: JsonValue }
509
351
  export interface ReviewTaskDraft { taskId: Uuid; author: IssuerPrincipal; body: JsonValue; revision: SafeInteger; updatedAt: string }
510
- export type ReviewerDecision =
511
- | { type: 'approve' }
512
- | { type: 'reject' | 'changes-requested' | 'answer'; outcome: string; reason?: string | null; result?: JsonObject | null }
513
- export interface ReviewTaskDecisionRequest { decision: ReviewerDecision }
352
+ export type DecisionKind =
353
+ | { type: 'approve'; outcome: string; publicReason?: string | null }
354
+ | { type: 'reject' | 'changes-requested' | 'answer'; outcome: string; reason?: string | null; publicReason?: string | null; result?: JsonObject | null }
355
+ export interface Decision { taskId: Uuid; requestId: Uuid; stageId: string; reviewer: IssuerPrincipal; profileId: string; decision: DecisionKind }
356
+ export interface ReviewTaskDecisionRequest { decision: DecisionKind }
514
357
  export type ReviewHistoryAudience = 'reviewers' | 'requester'
515
358
  export interface ReviewNoteRequest { audience: ReviewHistoryAudience; note: string }
516
359
  export interface ReviewHistoryEntry { eventId: Uuid; requestId: Uuid; taskId?: Uuid; kind: string; actorRef?: string; detail: JsonValue; occurredAt: string }
@@ -522,19 +365,29 @@ export interface ReviewAccountabilityRecord {
522
365
  decisionReceipt?: ReviewDecisionReceipt
523
366
  }
524
367
  export interface ReviewStagePolicy { id: string; queue: string; decidingProfiles: ReadonlyArray<string>; requiredApprovals: SafeInteger; excludeInitiator?: boolean; excludePreviousStageReviewers?: boolean }
525
- export interface ReviewRetentionPolicy { terminalDays: SafeInteger; accountabilityDays: SafeInteger }
526
- export interface ReviewKindPolicySnapshot {
527
- identity: ReviewPolicyBinding
368
+ export interface ReviewRetentionPolicy { terminalRetentionDays: SafeInteger; accountabilityRetentionDays: SafeInteger }
369
+ export interface ReviewContextContract { id: string; revision: ContentDigest; schemaDigest: ContentDigest }
370
+ export type ReviewContextPolicy = { mode: 'submitted' } | { mode: 'current-source'; provider: string; contract: ReviewContextContract }
371
+ export type ReviewContextCapability = 'human-display' | 'service-status' | 'task-grant-context' | 'routing-context'
372
+ export interface ReviewContextProviderPolicy { id: string; capabilities: ReadonlyArray<ReviewContextCapability>; sourceNamespace: string; deploymentRef: string; serviceProfiles?: Partial<Record<ReviewContextCapability, string>> }
373
+ export interface ReviewPolicy { id: string; version: string; purpose: 'approval' | 'answer'; context: ReviewContextPolicy; routing?: ReadonlyArray<RoutingRule>; stages: ReadonlyArray<ReviewStagePolicy>; clocks?: ReadonlyArray<string>; retention: ReviewRetentionPolicy; displaySchema: JsonValue; resultSchema?: JsonValue; outcomes?: ReadonlyArray<{ id: string; label: string; settlement: 'approved' | 'rejected' | 'changes-requested' | 'answered'; reasonRequired: boolean; publicReason: 'required' | 'optional' | 'none'; resultRequired?: boolean }> }
374
+ export interface ReviewPolicyClosure {
375
+ identity: PolicyBinding
528
376
  purpose: 'approval' | 'answer'
529
- contextStrategy: 'submitted' | 'source'
377
+ context: ReviewContextPolicy
378
+ routing?: ReadonlyArray<RoutingRule>
379
+ dependencies: JsonObject
530
380
  stages: ReadonlyArray<ReviewStagePolicy>
531
381
  clocks?: ReadonlyArray<string>
532
382
  retention: ReviewRetentionPolicy
533
383
  displaySchema: JsonValue
534
384
  resultSchema?: JsonValue
535
- outcomes?: ReadonlyArray<{ id: string; label: string; settlement: 'rejected' | 'changes-requested' | 'answered'; reasonRequired: boolean; resultRequired?: boolean }>
385
+ outcomes?: ReadonlyArray<{ id: string; label: string; settlement: 'approved' | 'rejected' | 'changes-requested' | 'answered'; reasonRequired: boolean; publicReason: 'required' | 'optional' | 'none'; resultRequired?: boolean }>
536
386
  }
537
387
 
388
+ /** Compute the canonical producer submission digest locally, without I/O. */
389
+ export function submissionDigest(producer: string, sourceNamespace: string, request: ReviewCreateRequest): ContentDigest
390
+
538
391
  export class CaseworkClient {
539
392
  constructor(config: CaseworkClientConfig)
540
393
  description(token: string, profile: string): Promise<CaseworkOutcome<Description>>
@@ -543,21 +396,22 @@ export class CaseworkClient {
543
396
  reviewResult(token: string, profile: string, accepted: ReviewRequestAccepted): Promise<ReviewResultOutcome>
544
397
  reviewResults(token: string, profile: string, query?: ReviewPageQuery | null): Promise<CaseworkOutcome<ReviewResultFeedPage>>
545
398
  cancelReviewRequest(token: string, profile: string, accepted: ReviewRequestAccepted, idempotencyKey: string, request: ReviewCancelRequest): Promise<CaseworkOutcome<ReviewCancelResponse>>
546
- reviewKinds(token: string, profile: string): Promise<CaseworkOutcome<ReadonlyArray<ReviewKindPolicySnapshot>>>
547
- reviewKind(token: string, profile: string, kindId: string): Promise<CaseworkOutcome<ReviewKindPolicySnapshot>>
548
- reviewTasks(token: string, profile: string, query?: ReviewTaskQuery | null, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewTaskPage>>
399
+ reviewPolicies(token: string, profile: string): Promise<CaseworkOutcome<ReadonlyArray<ReviewPolicyClosure>>>
400
+ reviewPolicy(token: string, profile: string, policyId: string): Promise<CaseworkOutcome<ReviewPolicyClosure>>
401
+ nextReviewTask(token: string, profile: string, query?: ReviewStaffingQuery | null, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewTask | null>>
402
+ reviewTasks(token: string, profile: string, query?: ReviewStaffingQuery | null, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewTaskPage>>
549
403
  supervisoryReviewTasks(token: string, profile: string, query?: SupervisoryReviewTaskQuery | null, sourceProfile?: string | null): Promise<CaseworkOutcome<SupervisoryReviewTaskPage>>
550
404
  ownReviewDecisions(token: string, profile: string, query?: OwnReviewDecisionQuery | null, sourceProfile?: string | null): Promise<CaseworkOutcome<OwnReviewDecisionPage>>
551
- reviewTask(token: string, profile: string, taskId: Uuid, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewerTask>>
405
+ reviewTask(token: string, profile: string, taskId: Uuid, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewTask>>
552
406
  reviewTaskContext(token: string, profile: string, taskId: Uuid, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewTaskContext>>
553
- previewReviewTaskTemplates(token: string, profile: string, sourceProfile: string, taskId: Uuid): Promise<CaseworkOutcome<TaskTemplatePreviews>>
554
- listReviewTaskGrants(token: string, profile: string, sourceProfile: string, taskId: Uuid): Promise<CaseworkOutcome<TaskGrantList>>
555
- approveReviewTaskGrant(token: string, profile: string, sourceProfile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string, approval: TaskApprovalRequest): Promise<CaseworkOutcome<TaskGrantView>>
407
+ previewReviewTaskTemplates(token: string, profile: string, options: ReviewTaskGrantReadOptions): Promise<CaseworkOutcome<TaskTemplatePreviews>>
408
+ listReviewTaskGrants(token: string, profile: string, options: ReviewTaskGrantReadOptions): Promise<CaseworkOutcome<TaskGrantList>>
409
+ approveReviewTaskGrant(token: string, profile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string, approval: TaskApprovalRequest, sourceProfile?: string | null): Promise<CaseworkOutcome<TaskGrantView>>
556
410
  revokeReviewTaskGrant(token: string, profile: string, taskId: Uuid, grantId: string): Promise<CaseworkOutcome<TaskGrantRevocation>>
557
- claimReviewTask(token: string, profile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewerTask>>
558
- releaseReviewTask(token: string, profile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string): Promise<CaseworkOutcome<ReviewerTask>>
559
- assignReviewTask(token: string, profile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string, request: AssignmentRequest, sourceProfile?: string): Promise<CaseworkOutcome<ReviewerTask>>
560
- delegateReviewTask(token: string, profile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string, request: DelegateRequest, sourceProfile?: string): Promise<CaseworkOutcome<ReviewerTask>>
411
+ claimReviewTask(token: string, profile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewTask>>
412
+ releaseReviewTask(token: string, profile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string): Promise<CaseworkOutcome<ReviewTask>>
413
+ assignReviewTask(token: string, profile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string, request: AssignmentRequest, sourceProfile?: string): Promise<CaseworkOutcome<ReviewTask>>
414
+ delegateReviewTask(token: string, profile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string, request: DelegateRequest, sourceProfile?: string): Promise<CaseworkOutcome<ReviewTask>>
561
415
  reviewTaskDraft(token: string, profile: string, taskId: Uuid, sourceProfile?: string): Promise<CaseworkOutcome<ReviewTaskDraft | null>>
562
416
  saveReviewTaskDraft(token: string, profile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string, draft: ReviewTaskDraftInput, sourceProfile?: string): Promise<CaseworkOutcome<ReviewTaskDraft>>
563
417
  deleteReviewTaskDraft(token: string, profile: string, taskId: Uuid, expectedRevision: SafeInteger, idempotencyKey: string, sourceProfile?: string): Promise<CaseworkOutcome<null>>
@@ -566,42 +420,23 @@ export class CaseworkClient {
566
420
  addReviewNote(token: string, profile: string, requestId: Uuid, idempotencyKey: string, note: ReviewNoteRequest, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewHistoryEntry>>
567
421
  reviewClocks(token: string, profile: string, requestId: Uuid, sourceProfile?: string | null): Promise<CaseworkOutcome<ReadonlyArray<ReviewClockOccurrence>>>
568
422
  reviewAccountability(token: string, profile: string, eventId: Uuid): Promise<CaseworkOutcome<ReviewAccountabilityRecord>>
569
- listWorkItems(token: string, profile: string, sourceProfile: string, query: ListWorkItemsQuery): Promise<CaseworkOutcome<WorkItemPage>>
570
- nextWorkItem(token: string, profile: string, sourceProfile: string, query?: NextWorkItemQuery | null): Promise<CaseworkOutcome<WorkItemPage>>
571
- getWorkItem(token: string, profile: string, sourceProfile: string, itemId: string): Promise<CaseworkOutcome<WorkItem>>
572
- previewTaskTemplates(token: string, profile: string, sourceProfile: string, itemId: string): Promise<CaseworkOutcome<TaskTemplatePreviews>>
573
- listTaskGrants(token: string, profile: string, sourceProfile: string, itemId: string): Promise<CaseworkOutcome<TaskGrantList>>
574
- approveTaskGrant(token: string, profile: string, sourceProfile: string, itemId: string, expectedRevision: SafeInteger, idempotencyKey: string, approval: TaskApprovalRequest): Promise<CaseworkOutcome<TaskGrantView>>
575
- revokeTaskGrant(token: string, profile: string, sourceProfile: string, itemId: string, grantId: string): Promise<CaseworkOutcome<TaskGrantRevocation>>
576
423
  taskAssertion(token: string, grantId: string): Promise<CaseworkOutcome<TaskAssertionResponse>>
577
424
  /** Exact empty-POST authority route for the shared remote exchange provider. */
578
425
  taskAssertionEndpoint(grantId: string): string
579
426
  taskGrantStatus(token: string, grantId: string): Promise<CaseworkOutcome<TaskGrantStatus>>
580
- claimWorkItem(token: string, profile: string, sourceProfile: string, action: CaseworkAction, idempotencyKey: string): Promise<CaseworkOutcome<MutationResponse>>
581
- releaseWorkItem(token: string, profile: string, sourceProfile: string, action: CaseworkAction, idempotencyKey: string): Promise<CaseworkOutcome<MutationResponse>>
582
- getDraft(token: string, profile: string, sourceProfile: string, itemId: string): Promise<CaseworkOutcome<DraftResponse>>
583
- saveDraft(token: string, profile: string, sourceProfile: string, itemId: string, expectedRevision: SafeInteger, idempotencyKey: string, draft: SaveDraftRequest): Promise<CaseworkOutcome<DraftResponse>>
584
- deleteDraft(token: string, profile: string, sourceProfile: string, itemId: string, expectedRevision: SafeInteger, idempotencyKey: string): Promise<CaseworkOutcome<null>>
585
- decideWorkItem(token: string, profile: string, sourceProfile: string, action: CaseworkAction, idempotencyKey: string, decision: DecideRequest): Promise<CaseworkOutcome<MutationResponse>>
586
- recoverDecision(token: string, profile: string, sourceProfile: string, itemId: string, attemptId: string, recovery: RecoverAttemptRequest): Promise<CaseworkOutcome<MutationResponse>>
587
- recoverDecisionByKey(token: string, profile: string, sourceProfile: string, itemId: string, idempotencyKey: string, recovery: RecoverAttemptRequest): Promise<CaseworkOutcome<MutationResponse>>
588
- workItemHistory(token: string, profile: string, sourceProfile: string, itemId: string, query?: WorkItemHistoryQuery | null): Promise<CaseworkOutcome<Page<HistoryEntry>>>
589
- holdings(token: string, profile: string, sourceProfile: string, query?: HoldingsQuery | null): Promise<CaseworkOutcome<Page<HoldingSummary>>>
427
+ reviewTaskHoldings(token: string, profile: string, query?: ReviewStaffingQuery | null, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewTaskPage>>
590
428
  directory(token: string, profile: string): Promise<CaseworkOutcome<DirectoryResponse>>
591
429
  directoryTargets(token: string, profile: string, query: DirectoryTargetsQuery): Promise<CaseworkOutcome<DirectoryTargetPage>>
592
430
  bootstrapDirectory(token: string, profile: string, expectedRevision: SafeInteger, idempotencyKey: string, request: BootstrapDirectoryRequest): Promise<CaseworkOutcome<DirectoryResponse>>
593
431
  updateDirectoryTeam(token: string, profile: string, teamId: string, expectedRevision: SafeInteger, idempotencyKey: string, request: DirectoryTeamUpdateRequest): Promise<CaseworkOutcome<DirectoryResponse>>
594
- workItemClocks(token: string, profile: string, sourceProfile: string, itemId: string): Promise<CaseworkOutcome<ReadonlyArray<ClockOccurrenceView>>>
595
432
  holidayRevision(token: string, profile: string, holidaySet: string, revision: SafeInteger): Promise<CaseworkOutcome<HolidaySetDocument>>
596
433
  createHolidayRevision(token: string, profile: string, idempotencyKey: string, request: HolidaySetRevisionInput): Promise<CaseworkOutcome<HolidaySetDocument>>
597
- previewClockRecompute(token: string, profile: string, request: ClockRecomputeRequest): Promise<CaseworkOutcome<ClockRecomputePreview>>
598
- applyClockRecompute(token: string, profile: string, idempotencyKey: string, request: ClockRecomputeApplyRequest): Promise<CaseworkOutcome<ClockRecomputeResult>>
434
+ previewClockRecompute(token: string, profile: string, request: ReviewClockRecomputeRequest): Promise<CaseworkOutcome<ReviewClockRecomputePreview>>
435
+ applyClockRecompute(token: string, profile: string, idempotencyKey: string, request: ReviewClockRecomputeApplyRequest): Promise<CaseworkOutcome<ReviewClockRecomputeResult>>
599
436
  absences(token: string, profile: string, query?: AbsencesQuery | null): Promise<CaseworkOutcome<AbsenceList>>
600
437
  createAbsence(token: string, profile: string, expectedRevision: SafeInteger, idempotencyKey: string, request: AbsenceInput): Promise<CaseworkOutcome<AbsenceRecord>>
601
438
  updateAbsence(token: string, profile: string, absenceId: string, expectedRevision: SafeInteger, idempotencyKey: string, request: AbsenceInput): Promise<CaseworkOutcome<AbsenceRecord>>
602
439
  deleteAbsence(token: string, profile: string, absenceId: string, expectedRevision: SafeInteger, idempotencyKey: string): Promise<CaseworkOutcome<null>>
603
- assignWorkItem(token: string, profile: string, itemId: string, expectedRevision: SafeInteger, idempotencyKey: string, request: AssignmentRequest, sourceProfile?: string | null): Promise<CaseworkOutcome<MutationResponse>>
604
- delegateWorkItem(token: string, profile: string, itemId: string, expectedRevision: SafeInteger, idempotencyKey: string, request: DelegateRequest, sourceProfile?: string | null): Promise<CaseworkOutcome<MutationResponse>>
605
- previewCaseloadMove(token: string, profile: string, movement: CaseloadMoveRequest, query?: CaseloadPreviewQuery | null, sourceProfile?: string | null): Promise<CaseworkOutcome<Page<WorkItem>>>
606
- applyCaseloadMove(token: string, profile: string, idempotencyKey: string, request: CaseloadApplyRequest, sourceProfile?: string | null): Promise<CaseworkOutcome<ReadonlyArray<CaseloadItemResult>>>
440
+ previewCaseloadMove(token: string, profile: string, movement: ReviewCaseloadMoveRequest, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewCaseloadPreview>>
441
+ applyCaseloadMove(token: string, profile: string, idempotencyKey: string, request: ReviewCaseloadApplyRequest, sourceProfile?: string | null): Promise<CaseworkOutcome<ReviewCaseloadResult>>
607
442
  }