@anthusai/papyrus 5.10.0 → 5.11.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,1988 +23,2015 @@ const categoryWriteGroups = ["editor", "admin"];
23
23
  const categoryAppendOnlyOperations = ["read", "create"];
24
24
  const modelWithoutSubscriptions = (fields) => a.model(fields).disableOperations(["subscriptions"]);
25
25
  const realtimeModel = (fields) => a.model(fields);
26
- const baseDefinitions = {
27
- UserProfile: modelWithoutSubscriptions({
28
- id: a.id().required(),
29
- email: a.email(),
30
- displayName: a.string(),
31
- avatarUrl: a.url(),
32
- preferences: a.json(),
33
- settings: a.json(),
34
- status: a.string(),
35
- mergedIntoProfileId: a.id(),
36
- mergedAt: a.datetime(),
37
- mergedBy: a.string(),
38
- mergeReason: a.string(),
39
- createdAt: a.datetime(),
40
- updatedAt: a.datetime(),
41
- })
42
- .authorization((allow) => [
43
- allow.owner(),
44
- allow.group(adminGroup),
45
- ]),
46
- UserIdentity: modelWithoutSubscriptions({
47
- id: a.id().required(),
48
- userProfileId: a.id().required(),
49
- cognitoSub: a.string().required(),
50
- provider: a.string(),
51
- email: a.email(),
52
- status: a.string().required(),
53
- linkedAt: a.datetime().required(),
54
- lastSeenAt: a.datetime(),
55
- })
56
- .secondaryIndexes((index) => [
57
- index("userProfileId").sortKeys(["linkedAt"]).queryField("listUserIdentitiesByProfileAndLinkedAt"),
58
- index("cognitoSub").queryField("userIdentityByCognitoSub"),
59
- index("email").sortKeys(["status"]).queryField("listUserIdentitiesByEmailAndStatus"),
60
- ])
61
- .authorization((allow) => [
62
- allow.group(adminGroup),
63
- ]),
64
- UserRoleAssignment: modelWithoutSubscriptions({
65
- id: a.id().required(),
66
- userProfileId: a.id().required(),
67
- userSub: a.string(),
68
- email: a.email(),
69
- role: a.string().required(),
70
- status: a.string().required(),
71
- grantedBy: a.string().required(),
72
- grantedAt: a.datetime().required(),
73
- revokedAt: a.datetime(),
74
- notes: a.string(),
75
- })
76
- .secondaryIndexes((index) => [
77
- index("userProfileId").sortKeys(["role"]).queryField("listUserRoleAssignmentsByProfileAndRole"),
78
- index("userSub").sortKeys(["role"]).queryField("listUserRoleAssignmentsByUserAndRole"),
79
- index("role").sortKeys(["status"]).queryField("listUserRoleAssignmentsByRoleAndStatus"),
80
- ])
81
- .authorization((allow) => [
82
- allow.group(adminGroup),
83
- ]),
84
- UserRoleMutationResult: a.customType({
85
- ok: a.boolean().required(),
86
- userProfileId: a.id(),
87
- userSub: a.string(),
88
- username: a.string(),
89
- role: a.string().required(),
90
- userSubs: a.string().array(),
91
- usernames: a.string().array(),
92
- activeRoles: a.string().array().required(),
93
- }),
94
- UserDirectoryIdentity: a.customType({
95
- id: a.id().required(),
96
- userProfileId: a.id().required(),
97
- cognitoSub: a.string().required(),
98
- provider: a.string(),
99
- email: a.email(),
100
- status: a.string().required(),
101
- linkedAt: a.datetime().required(),
102
- lastSeenAt: a.datetime(),
103
- }),
104
- UserDirectoryEntry: a.customType({
105
- userProfileId: a.id(),
106
- userSub: a.string(),
107
- username: a.string(),
108
- email: a.email(),
109
- displayName: a.string(),
110
- provider: a.string(),
111
- enabled: a.boolean(),
112
- cognitoStatus: a.string(),
113
- profileStatus: a.string(),
114
- mergedIntoProfileId: a.id(),
115
- identityStatus: a.string(),
116
- activeRoles: a.string().array().required(),
117
- identities: a.ref("UserDirectoryIdentity").array().required(),
118
- }),
119
- UserDirectoryResult: a.customType({
120
- entries: a.ref("UserDirectoryEntry").array().required(),
121
- profileCount: a.integer().required(),
122
- identityCount: a.integer().required(),
123
- cognitoUserCount: a.integer().required(),
124
- }),
125
- ReaderSettingsResult: a.customType({
126
- userProfileId: a.id().required(),
127
- settings: a.json(),
128
- }),
129
- listUserDirectory: a
130
- .query()
131
- .returns(a.ref("UserDirectoryResult"))
132
- .authorization((allow) => [allow.group(adminGroup)])
133
- .handler(a.handler.function(manageUserRole)),
134
- grantUserRole: a
135
- .mutation()
136
- .arguments({
137
- userProfileId: a.id(),
138
- userSub: a.string(),
139
- cognitoSubs: a.string().array(),
140
- role: a.string().required(),
141
- })
142
- .returns(a.ref("UserRoleMutationResult"))
143
- .authorization((allow) => [allow.group(adminGroup)])
144
- .handler(a.handler.function(manageUserRole)),
145
- revokeUserRole: a
146
- .mutation()
147
- .arguments({
148
- userProfileId: a.id(),
149
- userSub: a.string(),
150
- cognitoSubs: a.string().array(),
151
- role: a.string().required(),
152
- })
153
- .returns(a.ref("UserRoleMutationResult"))
154
- .authorization((allow) => [allow.group(adminGroup)])
155
- .handler(a.handler.function(manageUserRole)),
156
- mergeUserProfiles: a
157
- .mutation()
158
- .arguments({
159
- targetUserProfileId: a.id(),
160
- targetUserSub: a.string(),
161
- sourceUserProfileId: a.id(),
162
- sourceUserSub: a.string(),
163
- reason: a.string(),
164
- })
165
- .returns(a.ref("UserDirectoryEntry"))
166
- .authorization((allow) => [allow.group(adminGroup)])
167
- .handler(a.handler.function(manageUserRole)),
168
- getReaderSettings: a
169
- .query()
170
- .returns(a.ref("ReaderSettingsResult"))
171
- .authorization((allow) => [allow.authenticated()])
172
- .handler(a.handler.function(readerSettings)),
173
- updateReaderSettings: a
174
- .mutation()
175
- .arguments({
176
- settings: a.json().required(),
177
- })
178
- .returns(a.ref("ReaderSettingsResult"))
179
- .authorization((allow) => [allow.authenticated()])
180
- .handler(a.handler.function(readerSettings)),
181
- SteeringActionResult: a.customType({
182
- ok: a.boolean().required(),
183
- action: a.string().required(),
184
- proposalId: a.id(),
185
- categorySetId: a.id(),
186
- categoryId: a.id(),
187
- decisionId: a.id(),
188
- status: a.string(),
189
- }),
190
- reviewSteeringProposal: a
191
- .mutation()
192
- .arguments({
193
- proposalId: a.id().required(),
194
- action: a.string().required(),
195
- actorSub: a.string(),
196
- actorLabel: a.string(),
197
- note: a.string(),
198
- displayName: a.string(),
199
- shortTitle: a.string(),
200
- subtitle: a.string(),
201
- description: a.string(),
202
- aliases: a.string().array(),
203
- seedItemIds: a.string().array(),
204
- holdoutItemIds: a.string().array(),
205
- })
206
- .returns(a.ref("SteeringActionResult"))
207
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
208
- .handler(a.handler.function(categoryAction)),
209
- CurationDelegationResult: a.customType({
210
- ok: a.boolean().required(),
211
- delegationId: a.id().required(),
212
- token: a.string(),
213
- agentLabel: a.string().required(),
214
- grantorLabel: a.string(),
215
- expiresAt: a.datetime().required(),
216
- revokedAt: a.datetime(),
217
- state: a.string(),
218
- userCode: a.string(),
219
- requestedHours: a.integer(),
220
- pendingExpiresAt: a.datetime(),
221
- approvedAt: a.datetime(),
222
- deniedAt: a.datetime(),
223
- }),
224
- CurationDelegationRequestResult: a.customType({
225
- ok: a.boolean().required(),
226
- delegationId: a.id().required(),
227
- userCode: a.string().required(),
228
- pendingExpiresAt: a.datetime().required(),
229
- requestedHours: a.integer().required(),
230
- }),
231
- CurationDelegationStatusResult: a.customType({
232
- delegationId: a.id().required(),
233
- state: a.string().required(),
234
- expiresAt: a.datetime().required(),
235
- grantorLabel: a.string(),
236
- }),
237
- ReferenceCurationActionResult: a.customType({
238
- ok: a.boolean().required(),
239
- action: a.string().required(),
240
- referenceId: a.id().required(),
241
- status: a.string().required(),
242
- reasonCode: a.string(),
243
- messageId: a.id(),
244
- relationId: a.id(),
245
- }),
246
- ReferenceQualityActionResult: a.customType({
247
- ok: a.boolean().required(),
248
- referenceId: a.id().required(),
249
- rating: a.integer().required(),
250
- status: a.string().required(),
251
- relationId: a.id(),
252
- }),
253
- CategorySetDraftActionResult: a.customType({
254
- ok: a.boolean().required(),
255
- action: a.string().required(),
256
- categorySetId: a.id().required(),
257
- sourceCategorySetId: a.id(),
258
- categoryCount: a.integer(),
259
- status: a.string(),
260
- }),
261
- TopicLabelActionResult: a.customType({
262
- ok: a.boolean().required(),
263
- action: a.string().required(),
264
- referenceId: a.id(),
265
- categoryId: a.id(),
266
- relationId: a.id(),
267
- sourceRelationId: a.id(),
268
- status: a.string(),
269
- }),
270
- reviewReferenceCuration: a
271
- .mutation()
272
- .arguments({
273
- referenceId: a.id().required(),
274
- action: a.string().required(),
275
- actorSub: a.string(),
276
- actorLabel: a.string(),
277
- note: a.string(),
278
- reasonCode: a.string(),
279
- decisionRelationId: a.id(),
280
- shareable: a.boolean(),
281
- sectionId: a.id(),
282
- })
283
- .returns(a.ref("ReferenceCurationActionResult"))
284
- .authorization((allow) => [
285
- allow.groups(categoryWriteGroups),
286
- ])
287
- .handler(a.handler.function(categoryAction)),
288
- createCurationDelegation: a
289
- .mutation()
290
- .arguments({
291
- agentLabel: a.string().required(),
292
- hours: a.integer(),
293
- })
294
- .returns(a.ref("CurationDelegationResult"))
295
- .authorization((allow) => [
296
- allow.groups(categoryWriteGroups),
297
- ])
298
- .handler(a.handler.function(categoryAction)),
299
- revokeCurationDelegation: a
300
- .mutation()
301
- .arguments({
302
- delegationId: a.id().required(),
303
- })
304
- .returns(a.ref("CurationDelegationResult"))
305
- .authorization((allow) => [
306
- allow.groups(categoryWriteGroups),
307
- ])
308
- .handler(a.handler.function(categoryAction)),
309
- listCurationDelegations: a
310
- .query()
311
- .returns(a.ref("CurationDelegationResult").array())
312
- .authorization((allow) => [
313
- allow.groups(categoryWriteGroups),
314
- ])
315
- .handler(a.handler.function(categoryAction)),
316
- requestCurationDelegation: a
317
- .mutation()
318
- .arguments({
319
- delegationId: a.id().required(),
320
- tokenHash: a.string().required(),
321
- agentLabel: a.string().required(),
322
- hours: a.integer(),
323
- })
324
- .returns(a.ref("CurationDelegationRequestResult"))
325
- .authorization((allow) => [
326
- allow.authenticated("identityPool"),
327
- ])
328
- .handler(a.handler.function(categoryAction)),
329
- approveCurationDelegation: a
330
- .mutation()
331
- .arguments({
332
- userCode: a.string().required(),
333
- })
334
- .returns(a.ref("CurationDelegationResult"))
335
- .authorization((allow) => [
336
- allow.groups(categoryWriteGroups),
337
- ])
338
- .handler(a.handler.function(categoryAction)),
339
- denyCurationDelegation: a
340
- .mutation()
341
- .arguments({
342
- userCode: a.string().required(),
343
- })
344
- .returns(a.ref("CurationDelegationResult"))
345
- .authorization((allow) => [
346
- allow.groups(categoryWriteGroups),
347
- ])
348
- .handler(a.handler.function(categoryAction)),
349
- getCurationDelegationStatus: a
350
- .query()
351
- .arguments({
352
- delegationId: a.id().required(),
353
- })
354
- .returns(a.ref("CurationDelegationStatusResult"))
355
- .authorization((allow) => [
356
- allow.authenticated("identityPool"),
357
- ])
358
- .handler(a.handler.function(categoryAction)),
359
- recordDelegatedCuration: a
360
- .mutation()
361
- .arguments({
362
- referenceId: a.id().required(),
363
- action: a.string().required(),
364
- delegationId: a.id().required(),
365
- delegationToken: a.string().required(),
366
- agentLabel: a.string().required(),
367
- onBehalfOf: a.string().required(),
368
- instruction: a.string().required(),
369
- note: a.string(),
370
- reasonCode: a.string(),
371
- decisionRelationId: a.id(),
372
- shareable: a.boolean(),
373
- sectionId: a.id(),
374
- })
375
- .returns(a.ref("ReferenceCurationActionResult"))
376
- .authorization((allow) => [
377
- allow.authenticated("identityPool"),
378
- ])
379
- .handler(a.handler.function(categoryAction)),
380
- setReferenceQualityRating: a
381
- .mutation()
382
- .arguments({
383
- referenceId: a.id().required(),
384
- rating: a.integer().required(),
385
- actorSub: a.string(),
386
- actorLabel: a.string(),
387
- note: a.string(),
388
- })
389
- .returns(a.ref("ReferenceQualityActionResult"))
390
- .authorization((allow) => [
391
- allow.groups(categoryWriteGroups),
392
- ])
393
- .handler(a.handler.function(categoryAction)),
394
- createCategorySetDraft: a
395
- .mutation()
396
- .arguments({
397
- sourceCategorySetId: a.id().required(),
398
- displayName: a.string(),
399
- actorLabel: a.string(),
400
- note: a.string(),
401
- })
402
- .returns(a.ref("CategorySetDraftActionResult"))
403
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
404
- .handler(a.handler.function(categoryAction)),
405
- promoteCategorySetDraft: a
406
- .mutation()
407
- .arguments({
408
- categorySetId: a.id().required(),
409
- actorLabel: a.string(),
410
- note: a.string(),
411
- })
412
- .returns(a.ref("CategorySetDraftActionResult"))
413
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
414
- .handler(a.handler.function(categoryAction)),
415
- discardCategorySetDraft: a
416
- .mutation()
417
- .arguments({
418
- categorySetId: a.id().required(),
419
- actorLabel: a.string(),
420
- note: a.string(),
421
- })
422
- .returns(a.ref("CategorySetDraftActionResult"))
423
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
424
- .handler(a.handler.function(categoryAction)),
425
- createDraftCategory: a
426
- .mutation()
427
- .arguments({
428
- categorySetId: a.id().required(),
429
- parentCategoryKey: a.string(),
430
- displayName: a.string().required(),
431
- shortTitle: a.string(),
432
- subtitle: a.string(),
433
- description: a.string(),
434
- actorLabel: a.string(),
435
- note: a.string(),
436
- })
437
- .returns(a.ref("SteeringActionResult"))
438
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
439
- .handler(a.handler.function(categoryAction)),
440
- updateDraftCategory: a
441
- .mutation()
442
- .arguments({
443
- categoryId: a.id().required(),
444
- displayName: a.string(),
445
- shortTitle: a.string(),
446
- subtitle: a.string(),
447
- description: a.string(),
448
- parentCategoryKey: a.string(),
449
- actorLabel: a.string(),
450
- note: a.string(),
451
- })
452
- .returns(a.ref("SteeringActionResult"))
453
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
454
- .handler(a.handler.function(categoryAction)),
455
- archiveDraftCategory: a
456
- .mutation()
457
- .arguments({
458
- categoryId: a.id().required(),
459
- actorLabel: a.string(),
460
- note: a.string(),
461
- })
462
- .returns(a.ref("SteeringActionResult"))
463
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
464
- .handler(a.handler.function(categoryAction)),
465
- reviewReferenceTopicLabel: a
466
- .mutation()
467
- .arguments({
468
- referenceId: a.id().required(),
469
- categoryId: a.id().required(),
470
- action: a.string().required(),
471
- sourceRelationId: a.id(),
472
- actorLabel: a.string(),
473
- note: a.string(),
474
- })
475
- .returns(a.ref("TopicLabelActionResult"))
476
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
477
- .handler(a.handler.function(categoryAction)),
478
- NewsroomSummary: a.customType({
479
- generatedAt: a.datetime().required(),
480
- staleAt: a.datetime(),
481
- source: a.string(),
482
- latestImportRun: a.json(),
483
- counts: a.json().required(),
484
- facets: a.json(),
485
- assignmentStatusCounts: a.json().required(),
486
- assignmentTypeCounts: a.json().required(),
487
- referenceStatusCounts: a.json().required(),
488
- messageKindCounts: a.json().required(),
489
- messageDomainCounts: a.json().required(),
490
- }),
491
- getNewsroomSummary: a
492
- .query()
493
- .returns(a.ref("NewsroomSummary"))
494
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
495
- .handler(a.handler.function(newsroomSummary)),
496
- deriveMarkus: a
497
- .query()
498
- .arguments({ input: a.json().required() })
499
- .returns(a.json())
500
- .authorization((allow) => [allow.groups(contentWriteGroups)])
501
- .handler(a.handler.function(contentActions)),
502
- intakePendingReferences: a
503
- .mutation()
504
- .arguments({ input: a.json().required() })
505
- .returns(a.json())
506
- .authorization((allow) => [allow.groups(contentWriteGroups)])
507
- .handler(a.handler.function(contentActions)),
508
- saveItemDraft: a
509
- .mutation()
510
- .arguments({ input: a.json().required() })
511
- .returns(a.json())
512
- .authorization((allow) => [allow.groups(contentWriteGroups)])
513
- .handler(a.handler.function(contentActions)),
514
- publishItem: a
515
- .mutation()
516
- .arguments({ input: a.json().required() })
517
- .returns(a.json())
518
- .authorization((allow) => [allow.groups(contentWriteGroups)])
519
- .handler(a.handler.function(contentActions)),
520
- moveStoryStage: a
521
- .mutation()
522
- .arguments({ input: a.json().required() })
523
- .returns(a.json())
524
- .authorization((allow) => [allow.groups(contentWriteGroups)])
525
- .handler(a.handler.function(contentActions)),
526
- unpublishItem: a
527
- .mutation()
528
- .arguments({ input: a.json().required() })
529
- .returns(a.json())
530
- .authorization((allow) => [allow.groups(contentWriteGroups)])
531
- .handler(a.handler.function(contentActions)),
532
- requestStagingBuild: a
533
- .mutation()
534
- .arguments({ input: a.json().required() })
535
- .returns(a.json())
536
- .authorization((allow) => [allow.groups(contentWriteGroups)])
537
- .handler(a.handler.function(contentActions)),
538
- knowledgeQuery: a
539
- .query()
540
- .arguments({
541
- input: a.json().required(),
542
- })
543
- .returns(a.json())
544
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
545
- .handler(a.handler.function(knowledgeQuery)),
546
- updateNewsroomSummary: a
547
- .mutation()
548
- .arguments({
549
- delta: a.json().required(),
550
- actorLabel: a.string(),
551
- reason: a.string(),
552
- })
553
- .returns(a.ref("NewsroomSummary"))
554
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
555
- .handler(a.handler.function(newsroomSummary)),
556
- ModelAttachmentUploadSlot: a.customType({
557
- ok: a.boolean().required(),
558
- uploadId: a.string().required(),
559
- attachmentId: a.id().required(),
560
- ownerKind: a.string().required(),
561
- ownerId: a.id().required(),
562
- role: a.string().required(),
563
- sortKey: a.string().required(),
564
- method: a.string().required(),
565
- uploadUrl: a.string().required(),
566
- storagePath: a.string().required(),
567
- mediaType: a.string().required(),
568
- byteSize: a.integer().required(),
569
- sha256: a.string(),
570
- expiresAt: a.datetime().required(),
571
- requiredHeaders: a.json(),
572
- }),
573
- ModelAttachmentDownloadSlot: a.customType({
574
- ok: a.boolean().required(),
575
- attachmentId: a.id().required(),
576
- method: a.string().required(),
577
- downloadUrl: a.string().required(),
578
- storagePath: a.string().required(),
579
- mediaType: a.string().required(),
580
- byteSize: a.integer().required(),
581
- sha256: a.string(),
582
- expiresAt: a.datetime().required(),
583
- requiredHeaders: a.json(),
584
- }),
585
- ModelAttachmentUploadAbortResult: a.customType({
586
- ok: a.boolean().required(),
587
- uploadId: a.string().required(),
588
- attachmentId: a.id().required(),
589
- storagePath: a.string().required(),
590
- status: a.string().required(),
591
- }),
592
- createModelAttachmentUpload: a
593
- .mutation()
594
- .arguments({
595
- ownerKind: a.string().required(),
596
- ownerId: a.id().required(),
597
- ownerLineageId: a.id(),
598
- ownerVersionNumber: a.integer(),
599
- ownerVersionKey: a.string(),
600
- role: a.string().required(),
601
- sortKey: a.string(),
602
- filename: a.string().required(),
603
- mediaType: a.string().required(),
604
- byteSize: a.integer().required(),
605
- sha256: a.string(),
606
- importRunId: a.id(),
607
- status: a.string(),
608
- })
609
- .returns(a.ref("ModelAttachmentUploadSlot"))
610
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
611
- .handler(a.handler.function(modelAttachmentUpload)),
612
- completeModelAttachmentUpload: a
613
- .mutation()
614
- .arguments({
615
- uploadId: a.string().required(),
616
- ownerKind: a.string().required(),
617
- ownerId: a.id().required(),
618
- ownerLineageId: a.id(),
619
- ownerVersionNumber: a.integer(),
620
- ownerVersionKey: a.string(),
621
- role: a.string().required(),
622
- sortKey: a.string(),
623
- filename: a.string().required(),
624
- mediaType: a.string().required(),
625
- byteSize: a.integer().required(),
626
- sha256: a.string(),
627
- importRunId: a.id(),
628
- status: a.string(),
629
- })
630
- .returns(a.ref("ModelAttachment"))
631
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
632
- .handler(a.handler.function(modelAttachmentUpload)),
633
- abortModelAttachmentUpload: a
634
- .mutation()
635
- .arguments({
636
- uploadId: a.string().required(),
637
- ownerKind: a.string().required(),
638
- ownerId: a.id().required(),
639
- ownerLineageId: a.id(),
640
- ownerVersionNumber: a.integer(),
641
- ownerVersionKey: a.string(),
642
- role: a.string().required(),
643
- sortKey: a.string(),
644
- filename: a.string().required(),
645
- mediaType: a.string().required(),
646
- byteSize: a.integer().required(),
647
- sha256: a.string(),
648
- importRunId: a.id(),
649
- status: a.string(),
650
- })
651
- .returns(a.ref("ModelAttachmentUploadAbortResult"))
652
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
653
- .handler(a.handler.function(modelAttachmentUpload)),
654
- createModelAttachmentDownload: a
655
- .mutation()
656
- .arguments({
657
- attachmentId: a.id().required(),
658
- })
659
- .returns(a.ref("ModelAttachmentDownloadSlot"))
660
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
661
- .handler(a.handler.function(modelAttachmentUpload)),
662
- AssignmentActionResult: a.customType({
663
- ok: a.boolean().required(),
664
- assignmentId: a.id(),
665
- eventId: a.id(),
666
- status: a.string(),
667
- action: a.string().required(),
668
- assigneeKey: a.string(),
669
- claimExpiresAt: a.datetime(),
670
- }),
671
- AssignmentTargetSummary: a.customType({
672
- kind: a.string().required(),
673
- id: a.id().required(),
674
- lineageId: a.id().required(),
675
- label: a.string(),
676
- detail: a.string(),
677
- }),
678
- AssignmentSummary: a.customType({
679
- id: a.id().required(),
680
- assignmentTypeKey: a.string().required(),
681
- queueKey: a.string().required(),
682
- queueStatusKey: a.string().required(),
683
- status: a.string().required(),
684
- priority: a.integer(),
685
- title: a.string().required(),
686
- summary: a.string(),
687
- assigneeType: a.string(),
688
- assigneeId: a.string(),
689
- assigneeKey: a.string(),
690
- claimedAt: a.datetime(),
691
- claimExpiresAt: a.datetime(),
692
- completedAt: a.datetime(),
693
- canceledAt: a.datetime(),
694
- corpusId: a.id(),
695
- categorySetId: a.id(),
696
- classifierId: a.string(),
697
- sectionId: a.id(),
698
- sectionKey: a.string(),
699
- sectionType: a.string(),
700
- sectionStatusKey: a.string(),
701
- sectionQueueStatusKey: a.string(),
702
- primaryFocusCategoryKey: a.string(),
703
- topicScopeCategoryKeys: a.string().array(),
704
- sourceSnapshotId: a.string(),
705
- importRunId: a.id(),
706
- createdBy: a.string(),
707
- createdAt: a.datetime().required(),
708
- updatedAt: a.datetime().required(),
709
- }),
710
- AssignmentEventSummary: a.customType({
711
- id: a.id().required(),
712
- assignmentId: a.id().required(),
713
- assignmentTypeKey: a.string().required(),
714
- queueKey: a.string().required(),
715
- eventType: a.string().required(),
716
- fromStatus: a.string(),
717
- toStatus: a.string(),
718
- actorSub: a.string(),
719
- actorLabel: a.string(),
720
- note: a.string(),
721
- createdAt: a.datetime().required(),
722
- }),
723
- AssignmentDoctrineSummary: a.customType({
724
- scope: a.string().required(),
725
- kind: a.string().required(),
726
- label: a.string().required(),
727
- slug: a.string().required(),
728
- body: a.string().array().required(),
729
- categoryKey: a.string(),
730
- categoryLineageId: a.id(),
731
- }),
732
- AssignmentContext: a.customType({
733
- editorialContext: a.json().required(),
734
- assignment: a.ref("AssignmentSummary"),
735
- doctrine: a.ref("AssignmentDoctrineSummary").array().required(),
736
- targets: a.ref("AssignmentTargetSummary").array().required(),
737
- events: a.ref("AssignmentEventSummary").array().required(),
738
- }),
739
- listAssignmentsForObject: a
740
- .query()
741
- .arguments({
742
- objectKind: a.string().required(),
743
- objectLineageId: a.id().required(),
744
- status: a.string(),
745
- limit: a.integer(),
746
- })
747
- .returns(a.ref("AssignmentContext").array().required())
748
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
749
- .handler(a.handler.function(assignmentAction)),
750
- listAssignmentQueue: a
751
- .query()
752
- .arguments({
753
- queueKey: a.string().required(),
754
- status: a.string(),
755
- limit: a.integer(),
756
- })
757
- .returns(a.ref("AssignmentContext").array().required())
758
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
759
- .handler(a.handler.function(assignmentAction)),
760
- getEditorialContext: a
761
- .query()
762
- .arguments({
763
- publicationKey: a.string().required(),
764
- sectionId: a.id(),
765
- storyLineageId: a.id(),
766
- assignmentId: a.id(),
767
- maxCharacters: a.integer(),
768
- })
769
- .returns(a.json().required())
770
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
771
- .handler(a.handler.function(assignmentAction)),
772
- getAssignmentContext: a
773
- .query()
774
- .arguments({
775
- assignmentId: a.id().required(),
776
- })
777
- .returns(a.ref("AssignmentContext"))
778
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
779
- .handler(a.handler.function(assignmentAction)),
780
- claimAssignment: a
781
- .mutation()
782
- .arguments({
783
- assignmentId: a.id().required(),
784
- assigneeKey: a.string(),
785
- assigneeType: a.string(),
786
- assigneeId: a.string(),
787
- claimExpiresAt: a.datetime(),
788
- claimTtlSeconds: a.integer(),
789
- actorSub: a.string(),
790
- actorLabel: a.string(),
791
- note: a.string(),
792
- })
793
- .returns(a.ref("AssignmentActionResult"))
794
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
795
- .handler(a.handler.function(assignmentAction)),
796
- releaseAssignment: a
797
- .mutation()
798
- .arguments({
799
- assignmentId: a.id().required(),
800
- actorSub: a.string(),
801
- actorLabel: a.string(),
802
- note: a.string(),
803
- })
804
- .returns(a.ref("AssignmentActionResult"))
805
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
806
- .handler(a.handler.function(assignmentAction)),
807
- completeAssignment: a
808
- .mutation()
809
- .arguments({
810
- assignmentId: a.id().required(),
811
- actorSub: a.string(),
812
- actorLabel: a.string(),
813
- note: a.string(),
814
- })
815
- .returns(a.ref("AssignmentActionResult"))
816
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
817
- .handler(a.handler.function(assignmentAction)),
818
- cancelAssignment: a
819
- .mutation()
820
- .arguments({
821
- assignmentId: a.id().required(),
822
- actorSub: a.string(),
823
- actorLabel: a.string(),
824
- note: a.string(),
825
- })
826
- .returns(a.ref("AssignmentActionResult"))
827
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
828
- .handler(a.handler.function(assignmentAction)),
829
- reopenAssignment: a
830
- .mutation()
831
- .arguments({
832
- assignmentId: a.id().required(),
833
- actorSub: a.string(),
834
- actorLabel: a.string(),
835
- note: a.string(),
836
- })
837
- .returns(a.ref("AssignmentActionResult"))
838
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
839
- .handler(a.handler.function(assignmentAction)),
840
- retryImmediateAssignment: a
841
- .mutation()
842
- .arguments({
843
- assignmentId: a.id().required(),
844
- actorSub: a.string(),
845
- actorLabel: a.string(),
846
- note: a.string(),
847
- })
848
- .returns(a.ref("AssignmentActionResult"))
849
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
850
- .handler(a.handler.function(assignmentAction)),
851
- listNewsroomProcedureDefinitions: a
852
- .query()
853
- .returns(a.json())
854
- .authorization((allow) => [allow.group(adminGroup)])
855
- .handler(a.handler.function(procedureAction)),
856
- getNewsroomProcedureDefinition: a
857
- .query()
858
- .arguments({
859
- id: a.id(),
860
- procedureKey: a.string(),
861
- })
862
- .returns(a.json())
863
- .authorization((allow) => [allow.group(adminGroup)])
864
- .handler(a.handler.function(procedureAction)),
865
- saveNewsroomProcedureDefinition: a
866
- .mutation()
867
- .arguments({
868
- input: a.json().required(),
869
- })
870
- .returns(a.json())
871
- .authorization((allow) => [allow.group(adminGroup)])
872
- .handler(a.handler.function(procedureAction)),
873
- saveNewsroomProcedureVersionDraft: a
874
- .mutation()
875
- .arguments({
876
- input: a.json().required(),
877
- })
878
- .returns(a.json())
879
- .authorization((allow) => [allow.group(adminGroup)])
880
- .handler(a.handler.function(procedureAction)),
881
- publishNewsroomProcedureVersion: a
882
- .mutation()
883
- .arguments({
884
- versionId: a.id().required(),
885
- })
886
- .returns(a.json())
887
- .authorization((allow) => [allow.group(adminGroup)])
888
- .handler(a.handler.function(procedureAction)),
889
- startNewsroomProcedureRun: a
890
- .mutation()
891
- .arguments({
892
- procedureId: a.id(),
893
- procedureKey: a.string(),
894
- procedureVersionId: a.id(),
895
- title: a.string(),
896
- summary: a.string(),
897
- input: a.json(),
898
- actorLabel: a.string(),
899
- })
900
- .returns(a.json())
901
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
902
- .handler(a.handler.function(procedureAction)),
903
- getNewsroomProcedureRun: a
904
- .query()
905
- .arguments({
906
- id: a.id().required(),
907
- })
908
- .returns(a.json())
909
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
910
- .handler(a.handler.function(procedureAction)),
911
- listNewsroomProcedureRunsByProcedure: a
912
- .query()
913
- .arguments({
914
- procedureId: a.id().required(),
915
- })
916
- .returns(a.json())
917
- .authorization((allow) => [allow.groups(categoryWriteGroups)])
918
- .handler(a.handler.function(procedureAction)),
919
- Assignment: modelWithoutSubscriptions({
920
- id: a.id().required(),
921
- assignmentTypeKey: a.string().required(),
922
- queueKey: a.string().required(),
923
- queueStatusKey: a.string().required(),
924
- status: a.string().required(),
925
- priority: a.integer(),
926
- title: a.string().required(),
927
- summary: a.string(),
928
- assigneeType: a.string(),
929
- assigneeId: a.string(),
930
- assigneeKey: a.string(),
931
- claimedAt: a.datetime(),
932
- claimExpiresAt: a.datetime(),
933
- completedAt: a.datetime(),
934
- canceledAt: a.datetime(),
935
- corpusId: a.id(),
936
- categorySetId: a.id(),
937
- classifierId: a.string(),
938
- sectionId: a.id(),
939
- sectionKey: a.string(),
940
- sectionType: a.string(),
941
- sectionStatusKey: a.string(),
942
- sectionQueueStatusKey: a.string(),
943
- primaryFocusCategoryKey: a.string(),
944
- topicScopeCategoryKeys: a.string().array(),
945
- sourceSnapshotId: a.string(),
946
- importRunId: a.id(),
947
- createdBy: a.string(),
948
- createdAt: a.datetime().required(),
949
- updatedAt: a.datetime().required(),
950
- newsroomFeedKey: a.string(),
951
- itemLineageId: a.id(),
952
- })
953
- .secondaryIndexes((index) => [
954
- index("newsroomFeedKey").sortKeys(["createdAt"]).queryField("listAssignmentsByNewsroomFeedAndCreatedAt"),
955
- index("itemLineageId").sortKeys(["createdAt"]).queryField("listAssignmentsByItemLineageAndCreatedAt"),
956
- index("queueStatusKey").sortKeys(["priority", "createdAt"]).queryField("listAssignmentsByQueueStatusAndPriority"),
957
- index("assignmentTypeKey").sortKeys(["status", "createdAt"]).queryField("listAssignmentsByTypeStatusAndCreatedAt"),
958
- index("status").sortKeys(["updatedAt"]).queryField("listAssignmentsByStatusAndUpdatedAt"),
959
- index("assigneeKey").sortKeys(["status", "updatedAt"]).queryField("listAssignmentsByAssigneeStatusAndUpdatedAt"),
960
- index("importRunId").sortKeys(["createdAt"]).queryField("listAssignmentsByImportRunAndCreatedAt"),
961
- index("sectionStatusKey").sortKeys(["priority", "createdAt"]).queryField("listAssignmentsBySectionStatusAndPriority"),
962
- index("sectionKey").sortKeys(["createdAt"]).queryField("listAssignmentsBySectionAndCreatedAt"),
963
- index("sectionQueueStatusKey").sortKeys(["priority", "createdAt"]).queryField("listAssignmentsBySectionQueueStatusAndPriority"),
964
- ])
965
- .authorization((allow) => [
966
- allow.groups(categoryWriteGroups).to(categoryAppendOnlyOperations),
967
- ]),
968
- AssignmentEvent: modelWithoutSubscriptions({
969
- id: a.id().required(),
970
- assignmentId: a.id().required(),
971
- assignmentTypeKey: a.string().required(),
972
- queueKey: a.string().required(),
973
- eventType: a.string().required(),
974
- fromStatus: a.string(),
975
- toStatus: a.string(),
976
- actorSub: a.string(),
977
- actorLabel: a.string(),
978
- note: a.string(),
979
- createdAt: a.datetime().required(),
980
- })
981
- .secondaryIndexes((index) => [
982
- index("assignmentId").sortKeys(["createdAt"]).queryField("listAssignmentEventsByAssignmentAndCreatedAt"),
983
- index("eventType").sortKeys(["createdAt"]).queryField("listAssignmentEventsByTypeAndCreatedAt"),
984
- index("queueKey").sortKeys(["createdAt"]).queryField("listAssignmentEventsByQueueAndCreatedAt"),
985
- ])
986
- .authorization((allow) => [
987
- allow.groups(categoryWriteGroups).to(categoryAppendOnlyOperations),
988
- ]),
989
- ProcedureDefinition: modelWithoutSubscriptions({
990
- id: a.id().required(),
991
- procedureKey: a.string().required(),
992
- title: a.string().required(),
993
- category: a.string().required(),
994
- description: a.string(),
995
- enabled: a.boolean().required(),
996
- enabledStatus: a.string().required(),
997
- currentVersionId: a.id(),
998
- createdBy: a.string(),
999
- createdAt: a.datetime().required(),
1000
- updatedBy: a.string(),
1001
- updatedAt: a.datetime().required(),
1002
- newsroomFeedKey: a.string(),
1003
- })
1004
- .secondaryIndexes((index) => [
1005
- index("procedureKey").sortKeys(["updatedAt"]).queryField("listProcedureDefinitionsByKeyAndUpdatedAt"),
1006
- index("enabledStatus").sortKeys(["updatedAt"]).queryField("listProcedureDefinitionsByEnabledAndUpdatedAt"),
1007
- index("newsroomFeedKey").sortKeys(["updatedAt"]).queryField("listProcedureDefinitionsByFeedAndUpdatedAt"),
1008
- ])
1009
- .authorization((allow) => [
1010
- allow.group(adminGroup),
1011
- ]),
1012
- ProcedureVersion: modelWithoutSubscriptions({
1013
- id: a.id().required(),
1014
- procedureId: a.id().required(),
1015
- procedureKey: a.string().required(),
1016
- versionNumber: a.integer().required(),
1017
- status: a.string().required(),
1018
- isCurrent: a.boolean().required(),
1019
- label: a.string(),
1020
- tactusSource: a.string().required(),
1021
- parameterSchema: a.json().required(),
1022
- defaults: a.json(),
1023
- changelog: a.string(),
1024
- createdBy: a.string(),
1025
- createdAt: a.datetime().required(),
1026
- updatedBy: a.string(),
1027
- updatedAt: a.datetime().required(),
1028
- })
1029
- .secondaryIndexes((index) => [
1030
- index("procedureId").sortKeys(["versionNumber"]).queryField("listProcedureVersionsByProcedureAndVersion"),
1031
- index("procedureId").sortKeys(["createdAt"]).queryField("listProcedureVersionsByProcedureAndCreatedAt"),
1032
- index("status").sortKeys(["updatedAt"]).queryField("listProcedureVersionsByStatusAndUpdatedAt"),
1033
- ])
1034
- .authorization((allow) => [
1035
- allow.group(adminGroup),
1036
- ]),
1037
- ProcedureRun: modelWithoutSubscriptions({
1038
- id: a.id().required(),
1039
- procedureId: a.id().required(),
1040
- procedureKey: a.string().required(),
1041
- procedureVersionId: a.id().required(),
1042
- procedureVersionNumber: a.integer(),
1043
- assignmentId: a.id(),
1044
- runStatus: a.string().required(),
1045
- requestedBy: a.string(),
1046
- requestedAt: a.datetime().required(),
1047
- startedAt: a.datetime(),
1048
- finishedAt: a.datetime(),
1049
- input: a.json(),
1050
- normalizedInput: a.json(),
1051
- resultSummary: a.string(),
1052
- errorSummary: a.string(),
1053
- output: a.json(),
1054
- error: a.json(),
1055
- attempt: a.integer(),
1056
- newsroomFeedKey: a.string(),
1057
- })
1058
- .secondaryIndexes((index) => [
1059
- index("procedureId").sortKeys(["requestedAt"]).queryField("listProcedureRunsByProcedureAndRequestedAt"),
1060
- index("assignmentId").sortKeys(["requestedAt"]).queryField("listProcedureRunsByAssignmentAndRequestedAt"),
1061
- index("runStatus").sortKeys(["requestedAt"]).queryField("listProcedureRunsByStatusAndRequestedAt"),
1062
- index("newsroomFeedKey").sortKeys(["requestedAt"]).queryField("listProcedureRunsByFeedAndRequestedAt"),
1063
- ])
1064
- .authorization((allow) => [
1065
- allow.group("editor").to(["read"]),
1066
- allow.group(adminGroup).to(authoringOperations),
1067
- ]),
1068
- NewsroomSection: modelWithoutSubscriptions({
1069
- id: a.id().required(),
1070
- tenantId: a.string(),
1071
- title: a.string().required(),
1072
- type: a.string().required(),
1073
- editorialMission: a.string().required(),
1074
- editorialPolicy: a.string().required(),
1075
- enabled: a.boolean().required(),
1076
- enabledStatus: a.string().required(),
1077
- sortOrder: a.integer().required(),
1078
- shortTitle: a.string().required(),
1079
- defaultArticleTypes: a.string().array(),
1080
- defaultPageBudget: a.integer(),
1081
- assignmentGuidance: a.string(),
1082
- killCriteria: a.string(),
1083
- visualGuidance: a.string(),
1084
- createdAt: a.datetime(),
1085
- updatedAt: a.datetime(),
1086
- })
1087
- .secondaryIndexes((index) => [
1088
- index("sortOrder").sortKeys(["id"]).queryField("listNewsroomSectionsBySortOrder"),
1089
- index("tenantId").sortKeys(["sortOrder"]).queryField("listNewsroomSectionsByTenantAndSortOrder"),
1090
- index("type").sortKeys(["sortOrder"]).queryField("listNewsroomSectionsByTypeAndSortOrder"),
1091
- index("enabledStatus").sortKeys(["sortOrder"]).queryField("listNewsroomSectionsByEnabledStatusAndSortOrder"),
1092
- ])
1093
- .authorization((allow) => [
1094
- allow.groups(categoryWriteGroups),
1095
- ]),
1096
- KnowledgeCorpus: modelWithoutSubscriptions({
1097
- id: a.id().required(),
1098
- name: a.string().required(),
1099
- role: a.string().required(),
1100
- itemCount: a.integer(),
1101
- generatedAt: a.datetime(),
1102
- latestImportRunId: a.id(),
1103
- createdAt: a.datetime(),
1104
- updatedAt: a.datetime(),
1105
- })
1106
- .secondaryIndexes((index) => [
1107
- index("role").sortKeys(["name"]).queryField("listKnowledgeCorporaByRoleAndName"),
1108
- ])
1109
- .authorization((allow) => [
1110
- allow.groups(categoryWriteGroups).to(["read"]),
1111
- ]),
1112
- KnowledgeImportRun: modelWithoutSubscriptions({
1113
- id: a.id().required(),
1114
- corpusId: a.id().required(),
1115
- importKind: a.string().required(),
1116
- corpusImportKindKey: a.string(),
1117
- classifierId: a.string(),
1118
- sourceSnapshotId: a.string(),
1119
- status: a.string().required(),
1120
- generatedAt: a.datetime(),
1121
- importedAt: a.datetime().required(),
1122
- itemCount: a.integer(),
1123
- categoryCount: a.integer(),
1124
- proposalCount: a.integer(),
1125
- artifactCount: a.integer(),
1126
- referenceCount: a.integer(),
1127
- relationCount: a.integer(),
1128
- warningCount: a.integer(),
1129
- })
1130
- .secondaryIndexes((index) => [
1131
- index("corpusId").sortKeys(["importedAt"]).queryField("listKnowledgeImportRunsByCorpusAndImportedAt"),
1132
- index("importKind").sortKeys(["importedAt"]).queryField("listKnowledgeImportRunsByKindAndImportedAt"),
1133
- index("corpusImportKindKey").sortKeys(["importedAt"]).queryField("listKnowledgeImportRunsByCorpusKindAndImportedAt"),
1134
- ])
1135
- .authorization((allow) => [
1136
- allow.groups(categoryWriteGroups).to(["read"]),
1137
- ]),
1138
- KnowledgeRawPayload: modelWithoutSubscriptions({
1139
- id: a.id().required(),
1140
- ownerType: a.string().required(),
1141
- ownerId: a.id().required(),
1142
- payloadKind: a.string().required(),
1143
- importRunId: a.id(),
1144
- createdAt: a.datetime().required(),
1145
- updatedAt: a.datetime(),
1146
- })
1147
- .secondaryIndexes((index) => [
1148
- index("ownerId").sortKeys(["payloadKind"]).queryField("listKnowledgeRawPayloadsByOwnerAndKind"),
1149
- index("importRunId").sortKeys(["ownerType"]).queryField("listKnowledgeRawPayloadsByImportRunAndOwner"),
1150
- ])
1151
- .authorization((allow) => [
1152
- allow.groups(categoryWriteGroups),
1153
- ]),
1154
- KnowledgeArtifact: modelWithoutSubscriptions({
1155
- id: a.id().required(),
1156
- corpusId: a.id().required(),
1157
- artifactKind: a.string().required(),
1158
- artifactId: a.string().required(),
1159
- snapshotId: a.string(),
1160
- displayName: a.string(),
1161
- createdAt: a.datetime(),
1162
- importRunId: a.id(),
1163
- })
1164
- .secondaryIndexes((index) => [
1165
- index("corpusId").sortKeys(["artifactKind"]).queryField("listKnowledgeArtifactsByCorpusAndKind"),
1166
- index("artifactKind").sortKeys(["createdAt"]).queryField("listKnowledgeArtifactsByKindAndCreatedAt"),
1167
- index("importRunId").sortKeys(["artifactKind"]).queryField("listKnowledgeArtifactsByImportRunAndKind"),
1168
- ])
1169
- .authorization((allow) => [
1170
- allow.groups(categoryWriteGroups).to(["read"]),
1171
- ]),
1172
- CategorySet: modelWithoutSubscriptions({
1173
- id: a.id().required(),
1174
- lineageId: a.id().required(),
1175
- versionNumber: a.integer().required(),
1176
- previousVersionId: a.id(),
1177
- versionState: a.string().required(),
1178
- versionCreatedAt: a.datetime().required(),
1179
- versionCreatedBy: a.string(),
1180
- changeReason: a.string(),
1181
- contentHash: a.string(),
1182
- corpusId: a.id().required(),
1183
- classifierId: a.string().required(),
1184
- displayName: a.string().required(),
1185
- description: a.string(),
1186
- status: a.string().required(),
1187
- generatedAt: a.datetime(),
1188
- categoryCount: a.integer(),
1189
- importRunId: a.id(),
1190
- })
1191
- .secondaryIndexes((index) => [
1192
- index("lineageId").sortKeys(["versionNumber"]).queryField("listCategorySetsByLineageAndVersion"),
1193
- index("corpusId").sortKeys(["classifierId"]).queryField("listCategorySetsByCorpusAndClassifier"),
1194
- index("status").sortKeys(["displayName"]).queryField("listCategorySetsByStatusAndName"),
1195
- index("versionState").sortKeys(["generatedAt"]).queryField("listCategorySetsByVersionStateAndGeneratedAt"),
1196
- ])
1197
- .authorization((allow) => [
1198
- allow.groups(categoryWriteGroups),
1199
- ]),
1200
- Category: modelWithoutSubscriptions({
1201
- id: a.id().required(),
1202
- lineageId: a.id().required(),
1203
- versionNumber: a.integer().required(),
1204
- previousVersionId: a.id(),
1205
- versionState: a.string().required(),
1206
- versionCreatedAt: a.datetime().required(),
1207
- versionCreatedBy: a.string(),
1208
- changeReason: a.string(),
1209
- contentHash: a.string(),
1210
- categorySetId: a.id().required(),
1211
- corpusId: a.id().required(),
1212
- categoryKey: a.string().required(),
1213
- parentCategoryId: a.id(),
1214
- parentCategoryKey: a.string(),
1215
- displayName: a.string().required(),
1216
- shortTitle: a.string(),
1217
- subtitle: a.string(),
1218
- description: a.string(),
1219
- aliases: a.string().array(),
1220
- status: a.string().required(),
1221
- seedItemIds: a.string().array(),
1222
- holdoutItemIds: a.string().array(),
1223
- rank: a.integer(),
1224
- depth: a.integer(),
1225
- isPinned: a.boolean(),
1226
- importRunId: a.id(),
1227
- updatedAt: a.datetime(),
1228
- })
1229
- .secondaryIndexes((index) => [
1230
- index("lineageId").sortKeys(["versionNumber"]).queryField("listCategoriesByLineageAndVersion"),
1231
- index("categorySetId").sortKeys(["categoryKey"]).queryField("listCategoriesBySetAndKey"),
1232
- index("parentCategoryId").sortKeys(["rank"]).queryField("listCategoriesByParentAndRank"),
1233
- index("parentCategoryKey").sortKeys(["rank"]).queryField("listCategoriesByParentKeyAndRank"),
1234
- index("corpusId").sortKeys(["displayName"]).queryField("listCategoriesByCorpusAndName"),
1235
- index("status").sortKeys(["displayName"]).queryField("listCategoriesByStatusAndName"),
1236
- ])
1237
- .authorization((allow) => [
1238
- allow.groups(categoryWriteGroups),
1239
- ]),
1240
- CategoryKeyword: modelWithoutSubscriptions({
1241
- id: a.id().required(),
1242
- categorySetId: a.id().required(),
1243
- corpusId: a.id().required(),
1244
- categoryKey: a.string().required(),
1245
- categoryLineageId: a.id(),
1246
- categoryId: a.id(),
1247
- keyword: a.string().required(),
1248
- normalizedKeyword: a.string().required(),
1249
- weight: a.float(),
1250
- rank: a.integer(),
1251
- source: a.string().required(),
1252
- sourceTopicId: a.string(),
1253
- importRunId: a.id(),
1254
- metadata: a.json(),
1255
- createdAt: a.datetime().required(),
1256
- updatedAt: a.datetime(),
1257
- })
1258
- .secondaryIndexes((index) => [
1259
- index("categorySetId").sortKeys(["categoryKey", "rank"]).queryField("listCategoryKeywordsBySetKeyAndRank"),
1260
- index("categoryKey").sortKeys(["rank"]).queryField("listCategoryKeywordsByCategoryKeyAndRank"),
1261
- index("normalizedKeyword").sortKeys(["categorySetId"]).queryField("listCategoryKeywordsByNormalizedKeywordAndSet"),
1262
- index("importRunId").sortKeys(["rank"]).queryField("listCategoryKeywordsByImportRunAndRank"),
1263
- ])
1264
- .authorization((allow) => [
1265
- allow.groups(categoryWriteGroups),
1266
- ]),
1267
- LexicalSteeringRule: modelWithoutSubscriptions({
1268
- id: a.id().required(),
1269
- ruleKind: a.string().required(),
1270
- term: a.string().required(),
1271
- normalizedTerm: a.string().required(),
1272
- scope: a.string().required(),
1273
- status: a.string().required(),
1274
- corpusId: a.id(),
1275
- classifierId: a.string(),
1276
- categorySetId: a.id(),
1277
- categoryKey: a.string(),
1278
- note: a.string(),
1279
- source: a.string(),
1280
- createdBy: a.string(),
1281
- createdAt: a.datetime().required(),
1282
- updatedAt: a.datetime(),
1283
- metadata: a.json(),
1284
- })
1285
- .secondaryIndexes((index) => [
1286
- index("status").sortKeys(["normalizedTerm"]).queryField("listLexicalSteeringRulesByStatusAndTerm"),
1287
- index("scope").sortKeys(["normalizedTerm"]).queryField("listLexicalSteeringRulesByScopeAndTerm"),
1288
- index("categorySetId").sortKeys(["normalizedTerm"]).queryField("listLexicalSteeringRulesBySetAndTerm"),
1289
- index("corpusId").sortKeys(["normalizedTerm"]).queryField("listLexicalSteeringRulesByCorpusAndTerm"),
1290
- ])
1291
- .authorization((allow) => [
1292
- allow.groups(categoryWriteGroups),
1293
- ]),
1294
- SteeringProposal: modelWithoutSubscriptions({
1295
- id: a.id().required(),
1296
- categorySetId: a.id(),
1297
- corpusId: a.id().required(),
1298
- importRunId: a.id(),
1299
- proposalKind: a.string().required(),
1300
- steeringDomain: a.string().required(),
1301
- status: a.string().required(),
1302
- title: a.string().required(),
1303
- summary: a.string(),
1304
- categoryKey: a.string(),
1305
- targetCategoryKey: a.string(),
1306
- graphEntityId: a.string(),
1307
- relationshipType: a.string(),
1308
- displayName: a.string(),
1309
- shortTitle: a.string(),
1310
- subtitle: a.string(),
1311
- description: a.string(),
1312
- evidenceItemIds: a.string().array(),
1313
- suggestedSeedItemIds: a.string().array(),
1314
- suggestedHoldoutItemIds: a.string().array(),
1315
- sourceSnapshotId: a.string(),
1316
- proposedAt: a.datetime(),
1317
- reviewedAt: a.datetime(),
1318
- reviewedBy: a.string(),
1319
- updatedAt: a.datetime(),
1320
- })
1321
- .secondaryIndexes((index) => [
1322
- index("status").sortKeys(["proposedAt"]).queryField("listSteeringProposalsByStatusAndProposedAt"),
1323
- index("categorySetId").sortKeys(["status"]).queryField("listSteeringProposalsBySetAndStatus"),
1324
- index("corpusId").sortKeys(["proposalKind"]).queryField("listSteeringProposalsByCorpusAndKind"),
1325
- index("steeringDomain").sortKeys(["status"]).queryField("listSteeringProposalsByDomainAndStatus"),
1326
- ])
1327
- .authorization((allow) => [
1328
- allow.groups(categoryWriteGroups).to(["read"]),
1329
- ]),
1330
- SteeringDecision: modelWithoutSubscriptions({
1331
- id: a.id().required(),
1332
- proposalId: a.id().required(),
1333
- categorySetId: a.id(),
1334
- action: a.string().required(),
1335
- actorSub: a.string(),
1336
- actorLabel: a.string(),
1337
- note: a.string(),
1338
- selectedCategoryKey: a.string(),
1339
- createdAt: a.datetime().required(),
1340
- })
1341
- .secondaryIndexes((index) => [
1342
- index("proposalId").sortKeys(["createdAt"]).queryField("listSteeringDecisionsByProposalAndCreatedAt"),
1343
- index("categorySetId").sortKeys(["createdAt"]).queryField("listSteeringDecisionsBySetAndCreatedAt"),
1344
- ])
1345
- .authorization((allow) => [
1346
- allow.groups(categoryWriteGroups).to(categoryAppendOnlyOperations),
1347
- ]),
1348
- Reference: realtimeModel({
1349
- id: a.id().required(),
1350
- lineageId: a.id().required(),
1351
- versionNumber: a.integer().required(),
1352
- previousVersionId: a.id(),
1353
- versionState: a.string().required(),
1354
- versionCreatedAt: a.datetime().required(),
1355
- versionCreatedBy: a.string(),
1356
- changeReason: a.string(),
1357
- contentHash: a.string(),
1358
- corpusId: a.id().required(),
1359
- externalItemId: a.string().required(),
1360
- title: a.string(),
1361
- authors: a.string().array(),
1362
- sourceUri: a.string(),
1363
- storagePath: a.string(),
1364
- mediaType: a.string(),
1365
- byteSize: a.integer(),
1366
- sha256: a.string(),
1367
- sourcePublishedAt: a.string(),
1368
- sourceUpdatedAt: a.string(),
1369
- retrievedAt: a.string(),
1370
- inboundCitationCount: a.integer(),
1371
- outboundCitationCount: a.integer(),
1372
- importRunId: a.id(),
1373
- importedAt: a.datetime(),
1374
- createdAt: a.datetime(),
1375
- curationStatus: a.string(),
1376
- curationStatusKey: a.string(),
1377
- curationStatusUpdatedAt: a.datetime(),
1378
- curationStatusUpdatedBy: a.string(),
1379
- curationStatusReason: a.string(),
1380
- newsroomFeedKey: a.string(),
1381
- reviewedFeedKey: a.string(),
1382
- updatedAt: a.datetime(),
1383
- })
1384
- .secondaryIndexes((index) => [
1385
- index("newsroomFeedKey").sortKeys(["createdAt"]).queryField("listReferencesByNewsroomFeedAndCreatedAt"),
1386
- index("newsroomFeedKey").sortKeys(["importedAt"]).queryField("listReferencesByNewsroomFeedAndImportedAt"),
1387
- index("lineageId").sortKeys(["versionNumber"]).queryField("listReferencesByLineageAndVersion"),
1388
- index("corpusId").sortKeys(["externalItemId"]).queryField("listReferencesByCorpusAndExternalItem"),
1389
- index("versionState").sortKeys(["updatedAt"]).queryField("listReferencesByVersionStateAndUpdatedAt"),
1390
- index("importRunId").sortKeys(["externalItemId"]).queryField("listReferencesByImportRunAndExternalItem"),
1391
- index("curationStatus").sortKeys(["curationStatusUpdatedAt"]).queryField("listReferencesByCurationStatusAndUpdatedAt"),
1392
- index("curationStatusKey").sortKeys(["curationStatusUpdatedAt"]).queryField("listReferencesByCurationStatusKeyAndUpdatedAt"),
1393
- index("reviewedFeedKey").sortKeys(["updatedAt"]).queryField("listReferencesByReviewedFeedAndUpdatedAt"),
1394
- ])
1395
- .authorization((allow) => [
1396
- allow.groups(categoryWriteGroups).to(["read"]),
1397
- ]),
1398
- ReferenceAttachment: modelWithoutSubscriptions({
1399
- id: a.id().required(),
1400
- referenceId: a.id().required(),
1401
- referenceLineageId: a.id().required(),
1402
- referenceVersionNumber: a.integer(),
1403
- referenceVersionKey: a.string().required(),
1404
- role: a.string().required(),
1405
- sortKey: a.string().required(),
1406
- storagePath: a.string(),
1407
- sourceUri: a.string(),
1408
- filename: a.string(),
1409
- mediaType: a.string(),
1410
- byteSize: a.integer(),
1411
- sha256: a.string(),
1412
- etag: a.string(),
1413
- importRunId: a.id(),
1414
- importedAt: a.datetime(),
1415
- metadata: a.json(),
1416
- })
1417
- .secondaryIndexes((index) => [
1418
- index("referenceVersionKey").sortKeys(["sortKey"]).queryField("listReferenceAttachmentsByReferenceVersionAndSortKey"),
1419
- index("referenceLineageId").sortKeys(["sortKey"]).queryField("listReferenceAttachmentsByReferenceLineageAndSortKey"),
1420
- index("storagePath").queryField("referenceAttachmentByStoragePath"),
1421
- index("importRunId").sortKeys(["sortKey"]).queryField("listReferenceAttachmentsByImportRunAndSortKey"),
1422
- ])
1423
- .authorization((allow) => [
1424
- allow.groups(categoryWriteGroups).to(["read"]),
1425
- ]),
1426
- SemanticNode: modelWithoutSubscriptions({
1427
- id: a.id().required(),
1428
- lineageId: a.id().required(),
1429
- versionNumber: a.integer().required(),
1430
- previousVersionId: a.id(),
1431
- versionState: a.string().required(),
1432
- versionCreatedAt: a.datetime().required(),
1433
- versionCreatedBy: a.string(),
1434
- changeReason: a.string(),
1435
- contentHash: a.string(),
1436
- nodeKey: a.string().required(),
1437
- nodeKind: a.string().required(),
1438
- corpusId: a.id(),
1439
- categorySetId: a.id(),
1440
- categoryLineageId: a.id(),
1441
- categoryKey: a.string(),
1442
- displayName: a.string(),
1443
- description: a.string(),
1444
- aliases: a.string().array(),
1445
- authorityScore: a.float(),
1446
- authorityRank: a.integer(),
1447
- acceptedReferenceMentionCount: a.integer(),
1448
- distinctSourceKindCount: a.integer(),
1449
- relationCount: a.integer(),
1450
- status: a.string().required(),
1451
- importRunId: a.id(),
1452
- createdAt: a.datetime(),
1453
- newsroomFeedKey: a.string(),
1454
- updatedAt: a.datetime(),
1455
- })
1456
- .secondaryIndexes((index) => [
1457
- index("newsroomFeedKey").sortKeys(["createdAt"]).queryField("listSemanticNodesByNewsroomFeedAndCreatedAt"),
1458
- index("lineageId").sortKeys(["versionNumber"]).queryField("listSemanticNodesByLineageAndVersion"),
1459
- index("nodeKey").sortKeys(["versionNumber"]).queryField("listSemanticNodesByNodeKeyAndVersion"),
1460
- index("corpusId").sortKeys(["nodeKey"]).queryField("listSemanticNodesByCorpusAndNodeKey"),
1461
- index("importRunId").sortKeys(["nodeKey"]).queryField("listSemanticNodesByImportRunAndNodeKey"),
1462
- index("versionState").sortKeys(["updatedAt"]).queryField("listSemanticNodesByVersionStateAndUpdatedAt"),
1463
- ])
1464
- .authorization((allow) => [
1465
- allow.groups(categoryWriteGroups).to(["read"]),
1466
- ]),
1467
- Message: realtimeModel({
1468
- id: a.id().required(),
1469
- messageKind: a.string().required(),
1470
- messageDomain: a.string().required(),
1471
- status: a.string().required(),
1472
- summary: a.string(),
1473
- source: a.string(),
1474
- importRunId: a.id(),
1475
- authorSub: a.string(),
1476
- authorUserProfileId: a.id(),
1477
- authorLabel: a.string(),
1478
- threadId: a.id(),
1479
- parentMessageId: a.id(),
1480
- sequenceNumber: a.integer(),
1481
- role: a.string(),
1482
- messageType: a.string(),
1483
- content: a.string(),
1484
- semanticLayer: a.string(),
1485
- searchVisibility: a.string(),
1486
- responseTarget: a.string(),
1487
- responseStatus: a.string(),
1488
- responseOwner: a.string(),
1489
- responseStartedAt: a.datetime(),
1490
- responseCompletedAt: a.datetime(),
1491
- responseError: a.string(),
1492
- metadata: a.json(),
1493
- createdAt: a.datetime().required(),
1494
- updatedAt: a.datetime().required(),
1495
- newsroomFeedKey: a.string(),
1496
- })
1497
- .secondaryIndexes((index) => [
1498
- index("newsroomFeedKey").sortKeys(["createdAt"]).queryField("listMessagesByNewsroomFeedAndCreatedAt"),
1499
- index("status").sortKeys(["createdAt"]).queryField("listMessagesByStatusAndCreatedAt"),
1500
- index("messageKind").sortKeys(["createdAt"]).queryField("listMessagesByKindAndCreatedAt"),
1501
- index("messageDomain").sortKeys(["createdAt"]).queryField("listMessagesByDomainAndCreatedAt"),
1502
- index("authorSub").sortKeys(["createdAt"]).queryField("listMessagesByAuthorSubAndCreatedAt"),
1503
- index("authorUserProfileId").sortKeys(["createdAt"]).queryField("listMessagesByAuthorProfileAndCreatedAt"),
1504
- index("importRunId").sortKeys(["createdAt"]).queryField("listMessagesByImportRunAndCreatedAt"),
1505
- index("threadId").sortKeys(["sequenceNumber"]).name("messagesByThreadSequence").queryField("listMessagesByThreadAndSequence"),
1506
- index("threadId").sortKeys(["createdAt"]).name("messagesByThreadCreatedAt").queryField("listMessagesByThreadAndCreatedAt"),
1507
- index("responseTarget").sortKeys(["responseStatus", "createdAt"]).name("messagesByResponseTargetStatusCreatedAt").queryField("listMessagesByResponseTargetStatusAndCreatedAt"),
1508
- index("semanticLayer").sortKeys(["createdAt"]).name("messagesBySemanticLayerCreatedAt").queryField("listMessagesBySemanticLayerAndCreatedAt"),
1509
- index("searchVisibility").sortKeys(["createdAt"]).name("messagesBySearchVisibilityCreatedAt").queryField("listMessagesBySearchVisibilityAndCreatedAt"),
1510
- ])
1511
- .authorization((allow) => [
1512
- allow.groups(categoryWriteGroups).to(categoryAppendOnlyOperations),
1513
- ]),
1514
- MessageThread: realtimeModel({
1515
- id: a.id().required(),
1516
- threadKind: a.string().required(),
1517
- status: a.string().required(),
1518
- title: a.string().required(),
1519
- summary: a.string(),
1520
- primaryAnchorKind: a.string(),
1521
- primaryAnchorId: a.id(),
1522
- primaryAnchorLineageId: a.id(),
1523
- primaryAnchorKey: a.string(),
1524
- createdBySub: a.string(),
1525
- createdByUserProfileId: a.id(),
1526
- createdByLabel: a.string(),
1527
- messageCount: a.integer(),
1528
- lastMessageId: a.id(),
1529
- lastMessageAt: a.datetime(),
1530
- contextDigest: a.string(),
1531
- activeResponseMessageId: a.id(),
1532
- responseLockOwner: a.string(),
1533
- responseLockExpiresAt: a.datetime(),
1534
- metadata: a.json(),
1535
- createdAt: a.datetime().required(),
1536
- updatedAt: a.datetime().required(),
1537
- newsroomFeedKey: a.string(),
1538
- })
1539
- .secondaryIndexes((index) => [
1540
- index("newsroomFeedKey").sortKeys(["updatedAt"]).queryField("listMessageThreadsByNewsroomFeedAndUpdatedAt"),
1541
- index("threadKind").sortKeys(["updatedAt"]).queryField("listMessageThreadsByKindAndUpdatedAt"),
1542
- index("status").sortKeys(["updatedAt"]).queryField("listMessageThreadsByStatusAndUpdatedAt"),
1543
- index("primaryAnchorKey").sortKeys(["updatedAt"]).name("messageThreadsByAnchorUpdatedAt").queryField("listMessageThreadsByAnchorAndUpdatedAt"),
1544
- index("createdBySub").sortKeys(["updatedAt"]).queryField("listMessageThreadsByCreatorAndUpdatedAt"),
1545
- ])
1546
- .authorization((allow) => [
1547
- allow.groups(categoryWriteGroups).to(["read", "create", "update"]),
1548
- ]),
1549
- ModelAttachment: modelWithoutSubscriptions({
1550
- id: a.id().required(),
1551
- ownerKind: a.string().required(),
1552
- ownerId: a.id().required(),
1553
- ownerLineageId: a.id(),
1554
- ownerVersionNumber: a.integer(),
1555
- ownerVersionKey: a.string(),
1556
- role: a.string().required(),
1557
- sortKey: a.string().required(),
1558
- storagePath: a.string().required(),
1559
- filename: a.string(),
1560
- mediaType: a.string().required(),
1561
- byteSize: a.integer(),
1562
- sha256: a.string(),
1563
- etag: a.string(),
1564
- importRunId: a.id(),
1565
- createdAt: a.datetime().required(),
1566
- updatedAt: a.datetime(),
1567
- status: a.string().required(),
1568
- })
1569
- .secondaryIndexes((index) => [
1570
- index("ownerId").sortKeys(["role", "sortKey"]).queryField("listModelAttachmentsByOwnerRoleAndSortKey"),
1571
- index("ownerVersionKey").sortKeys(["role", "sortKey"]).queryField("listModelAttachmentsByOwnerVersionRoleAndSortKey"),
1572
- index("storagePath").queryField("modelAttachmentByStoragePath"),
1573
- index("importRunId").sortKeys(["ownerKind", "role"]).queryField("listModelAttachmentsByImportRunKindAndRole"),
1574
- index("role").sortKeys(["status", "createdAt"]).queryField("listModelAttachmentsByRoleStatusAndCreatedAt"),
1575
- ])
1576
- .authorization((allow) => [
1577
- allow.groups(categoryWriteGroups).to(["read"]),
1578
- ]),
1579
- SemanticRelationType: modelWithoutSubscriptions({
1580
- id: a.id().required(),
1581
- key: a.string().required(),
1582
- label: a.string().required(),
1583
- inverseLabel: a.string(),
1584
- description: a.string(),
1585
- domain: a.string().required(),
1586
- status: a.string().required(),
1587
- allowedSubjectKinds: a.string().array(),
1588
- allowedObjectKinds: a.string().array(),
1589
- isDirectional: a.boolean(),
1590
- isSymmetric: a.boolean(),
1591
- isTransitive: a.boolean(),
1592
- contextPackTags: a.string().array(),
1593
- createdAt: a.datetime().required(),
1594
- updatedAt: a.datetime().required(),
1595
- metadata: a.json(),
1596
- })
1597
- .secondaryIndexes((index) => [
1598
- index("key").queryField("semanticRelationTypeByKey"),
1599
- index("domain").sortKeys(["label"]).queryField("listSemanticRelationTypesByDomainAndLabel"),
1600
- index("status").sortKeys(["label"]).queryField("listSemanticRelationTypesByStatusAndLabel"),
1601
- ])
1602
- .authorization((allow) => [
1603
- allow.groups(categoryWriteGroups),
1604
- ]),
1605
- SemanticRelation: modelWithoutSubscriptions({
1606
- id: a.id().required(),
1607
- relationState: a.string().required(),
1608
- predicate: a.string().required(),
1609
- relationTypeId: a.id(),
1610
- relationTypeKey: a.string(),
1611
- relationDomain: a.string(),
1612
- subjectKind: a.string().required(),
1613
- subjectId: a.id().required(),
1614
- subjectLineageId: a.id().required(),
1615
- subjectVersionNumber: a.integer(),
1616
- objectKind: a.string().required(),
1617
- objectId: a.id().required(),
1618
- objectLineageId: a.id().required(),
1619
- objectVersionNumber: a.integer(),
1620
- subjectStateKey: a.string().required(),
1621
- objectStateKey: a.string().required(),
1622
- objectSubjectStateKey: a.string().required(),
1623
- predicateObjectStateKey: a.string().required(),
1624
- subjectVersionKey: a.string().required(),
1625
- objectVersionKey: a.string().required(),
1626
- score: a.float(),
1627
- confidence: a.float(),
1628
- rank: a.integer(),
1629
- classifierId: a.string(),
1630
- modelVersion: a.string(),
1631
- reviewRecommended: a.boolean(),
1632
- sourceSnapshotId: a.string(),
1633
- importRunId: a.id(),
1634
- importedAt: a.datetime(),
1635
- createdAt: a.datetime(),
1636
- updatedAt: a.datetime(),
1637
- newsroomFeedKey: a.string(),
1638
- metadata: a.json(),
1639
- })
1640
- .secondaryIndexes((index) => [
1641
- index("newsroomFeedKey").sortKeys(["createdAt"]).queryField("listSemanticRelationsByNewsroomFeedAndCreatedAt"),
1642
- index("subjectStateKey").sortKeys(["predicateObjectStateKey"]).queryField("listSemanticRelationsBySubjectState"),
1643
- index("objectStateKey").sortKeys(["predicate"]).queryField("listSemanticRelationsByObjectState"),
1644
- index("objectSubjectStateKey").sortKeys(["score"]).queryField("listSemanticRelationsByObjectSubjectStateAndScore"),
1645
- index("predicateObjectStateKey").sortKeys(["score"]).queryField("listSemanticRelationsByPredicateObjectStateAndScore"),
1646
- index("subjectVersionKey").sortKeys(["predicateObjectStateKey"]).queryField("listSemanticRelationsBySubjectVersion"),
1647
- index("importRunId").sortKeys(["importedAt"]).queryField("listSemanticRelationsByImportRunAndImportedAt"),
1648
- index("relationTypeKey").sortKeys(["importedAt"]).queryField("listSemanticRelationsByTypeAndImportedAt"),
1649
- index("relationDomain").sortKeys(["importedAt"]).queryField("listSemanticRelationsByDomainAndImportedAt"),
1650
- ])
1651
- .authorization((allow) => [
1652
- allow.groups(categoryWriteGroups).to(categoryAppendOnlyOperations),
1653
- ]),
1654
- Item: modelWithoutSubscriptions({
1655
- id: a.id().required(),
1656
- lineageId: a.id().required(),
1657
- tenantId: a.string(),
1658
- versionNumber: a.integer().required(),
1659
- previousVersionId: a.id(),
1660
- versionState: a.string().required(),
1661
- versionCreatedAt: a.datetime().required(),
1662
- versionCreatedBy: a.string(),
1663
- changeReason: a.string(),
1664
- contentHash: a.string(),
1665
- type: a.string().required(),
1666
- stage: a.string(),
1667
- status: a.string().required(),
1668
- typeStatus: a.string().required(),
1669
- slug: a.string().required(),
1670
- tenantSlug: a.string(),
1671
- shortSlug: a.string(),
1672
- section: a.string(),
1673
- sectionStatus: a.string(),
1674
- title: a.string(),
1675
- headline: a.string(),
1676
- deck: a.string(),
1677
- body: a.string().array(),
1678
- bodyMarkus: a.string(),
1679
- bodyIr: a.json(),
1680
- aliases: a.string().array(),
1681
- metadata: a.json(),
1682
- byline: a.string(),
1683
- dateline: a.string(),
1684
- publishedAt: a.datetime(),
1685
- editionDate: a.string(),
1686
- sortTitle: a.string(),
1687
- pullQuotes: a.string().array(),
1688
- layout: a.json(),
1689
- editorial: a.json(),
1690
- updatedAt: a.datetime(),
1691
- tags: a.hasMany("ItemTag", "itemId"),
1692
- mediaAssets: a.hasMany("MediaAsset", "itemId"),
1693
- editionItems: a.hasMany("EditionItem", "itemId"),
1694
- })
1695
- .secondaryIndexes((index) => [
1696
- index("lineageId").sortKeys(["versionNumber"]).queryField("listItemsByLineageAndVersion"),
1697
- index("slug").queryField("itemBySlug"),
1698
- index("tenantSlug").queryField("itemByTenantSlug"),
1699
- index("typeStatus").sortKeys(["publishedAt"]).queryField("listItemsByTypeStatusAndPublishedAt"),
1700
- index("sectionStatus").sortKeys(["publishedAt"]).queryField("listItemsBySectionStatusAndPublishedAt"),
1701
- index("versionState").sortKeys(["updatedAt"]).queryField("listItemsByVersionStateAndUpdatedAt"),
1702
- index("stage").sortKeys(["updatedAt"]).queryField("listItemsByStageAndUpdatedAt"),
1703
- ])
1704
- .authorization((allow) => [
1705
- allow.groups(contentWriteGroups),
1706
- ]),
1707
- Tag: modelWithoutSubscriptions({
1708
- id: a.id().required(),
1709
- slug: a.string().required(),
1710
- label: a.string().required(),
1711
- type: a.string(),
1712
- description: a.string(),
1713
- items: a.hasMany("ItemTag", "tagId"),
1714
- })
1715
- .secondaryIndexes((index) => [
1716
- index("slug").queryField("tagBySlug"),
1717
- index("type").sortKeys(["label"]).queryField("listTagsByTypeAndLabel"),
1718
- ])
1719
- .authorization((allow) => [
1720
- allow.groups(contentWriteGroups),
1721
- ]),
1722
- ItemTag: modelWithoutSubscriptions({
1723
- id: a.id().required(),
1724
- itemId: a.id().required(),
1725
- tagId: a.id().required(),
1726
- itemType: a.string().required(),
1727
- itemStatus: a.string().required(),
1728
- tagSlug: a.string().required(),
1729
- publishedAt: a.datetime(),
1730
- item: a.belongsTo("Item", "itemId"),
1731
- tag: a.belongsTo("Tag", "tagId"),
1732
- })
1733
- .secondaryIndexes((index) => [
1734
- index("itemId").sortKeys(["tagSlug"]).queryField("listItemTagsByItemAndTag"),
1735
- index("tagId").sortKeys(["publishedAt"]).queryField("listItemTagsByTagAndPublishedAt"),
1736
- ])
1737
- .authorization((allow) => [
1738
- allow.groups(contentWriteGroups),
1739
- ]),
1740
- MediaAsset: modelWithoutSubscriptions({
1741
- id: a.id().required(),
1742
- itemId: a.id().required(),
1743
- tenantId: a.string(),
1744
- type: a.string().required(),
1745
- role: a.string().required(),
1746
- sortKey: a.string().required(),
1747
- storagePath: a.string(),
1748
- externalUrl: a.string(),
1749
- alt: a.string().required(),
1750
- caption: a.string(),
1751
- credit: a.string(),
1752
- width: a.integer(),
1753
- height: a.integer(),
1754
- aspectRatio: a.float(),
1755
- focalX: a.float(),
1756
- focalY: a.float(),
1757
- minHeight: a.integer(),
1758
- preferredHeight: a.integer(),
1759
- maxHeight: a.integer(),
1760
- crop: a.string(),
1761
- wrapsText: a.boolean(),
1762
- metadata: a.json(),
1763
- item: a.belongsTo("Item", "itemId"),
1764
- })
1765
- .secondaryIndexes((index) => [
1766
- index("itemId").sortKeys(["sortKey"]).queryField("listMediaAssetsByItemAndSortKey"),
1767
- index("role").sortKeys(["itemId"]).queryField("listMediaAssetsByRoleAndItem"),
1768
- ])
1769
- .authorization((allow) => [
1770
- allow.groups(contentWriteGroups),
1771
- ]),
1772
- Edition: modelWithoutSubscriptions({
1773
- id: a.id().required(),
1774
- lineageId: a.id().required(),
1775
- versionNumber: a.integer().required(),
1776
- previousVersionId: a.id(),
1777
- versionState: a.string().required(),
1778
- versionCreatedAt: a.datetime().required(),
1779
- versionCreatedBy: a.string(),
1780
- changeReason: a.string(),
1781
- contentHash: a.string(),
1782
- slug: a.string().required(),
1783
- title: a.string().required(),
1784
- status: a.string().required(),
1785
- editionDate: a.string().required(),
1786
- publishedAt: a.datetime(),
1787
- description: a.string(),
1788
- layoutPlan: a.json(),
1789
- metadata: a.json(),
1790
- items: a.hasMany("EditionItem", "editionId"),
1791
- })
1792
- .secondaryIndexes((index) => [
1793
- index("lineageId").sortKeys(["versionNumber"]).queryField("listEditionsByLineageAndVersion"),
1794
- index("slug").queryField("editionBySlug"),
1795
- index("status").sortKeys(["editionDate"]).queryField("listEditionsByStatusAndEditionDate"),
1796
- index("status").sortKeys(["publishedAt"]).queryField("listEditionsByStatusAndPublishedAt"),
1797
- index("versionState").sortKeys(["publishedAt"]).queryField("listEditionsByVersionStateAndPublishedAt"),
1798
- ])
1799
- .authorization((allow) => [
1800
- allow.groups(contentWriteGroups),
1801
- ]),
1802
- EditionItem: modelWithoutSubscriptions({
1803
- id: a.id().required(),
1804
- editionId: a.id().required(),
1805
- editionLineageId: a.id(),
1806
- itemId: a.id().required(),
1807
- itemLineageId: a.id(),
1808
- placementKey: a.string().required(),
1809
- sortKey: a.string().required(),
1810
- pageNumber: a.integer(),
1811
- priority: a.integer(),
1812
- metadata: a.json(),
1813
- edition: a.belongsTo("Edition", "editionId"),
1814
- item: a.belongsTo("Item", "itemId"),
1815
- })
1816
- .secondaryIndexes((index) => [
1817
- index("editionId").sortKeys(["sortKey"]).queryField("listEditionItemsByEditionAndSortKey"),
1818
- index("itemId").sortKeys(["editionId"]).queryField("listEditionItemsByItemAndEdition"),
1819
- ])
1820
- .authorization((allow) => [
1821
- allow.groups(contentWriteGroups),
1822
- ]),
1823
- PublishedItem: modelWithoutSubscriptions({
1824
- id: a.id().required(),
1825
- sourceItemId: a.id().required(),
1826
- itemLineageId: a.id().required(),
1827
- tenantId: a.string(),
1828
- versionNumber: a.integer().required(),
1829
- type: a.string().required(),
1830
- status: a.string().required(),
1831
- typeStatus: a.string().required(),
1832
- slug: a.string().required(),
1833
- tenantSlug: a.string(),
1834
- shortSlug: a.string(),
1835
- section: a.string(),
1836
- sectionStatus: a.string(),
1837
- title: a.string(),
1838
- headline: a.string(),
1839
- deck: a.string(),
1840
- body: a.string().array(),
1841
- bodyMarkus: a.string(),
1842
- bodyIr: a.json(),
1843
- aliases: a.string().array(),
1844
- metadata: a.json(),
1845
- byline: a.string(),
1846
- dateline: a.string(),
1847
- publishedAt: a.datetime(),
1848
- editionDate: a.string(),
1849
- sortTitle: a.string(),
1850
- pullQuotes: a.string().array(),
1851
- layout: a.json(),
1852
- editorial: a.json(),
1853
- })
1854
- .secondaryIndexes((index) => [
1855
- index("slug").queryField("publishedItemBySlug"),
1856
- index("tenantSlug").queryField("publishedItemByTenantSlug"),
1857
- index("typeStatus").sortKeys(["publishedAt"]).queryField("listPublishedItemsByTypeStatusAndPublishedAt"),
1858
- index("sectionStatus").sortKeys(["publishedAt"]).queryField("listPublishedItemsBySectionStatusAndPublishedAt"),
1859
- index("itemLineageId").sortKeys(["versionNumber"]).queryField("listPublishedItemsByLineageAndVersion"),
1860
- ])
1861
- .authorization((allow) => [
1862
- allow.guest().to(["read"]),
1863
- allow.groups(contentWriteGroups),
1864
- ]),
1865
- PublishedMediaAsset: modelWithoutSubscriptions({
1866
- id: a.id().required(),
1867
- sourceMediaAssetId: a.id().required(),
1868
- tenantId: a.string(),
1869
- publishedItemId: a.id().required(),
1870
- sourceItemId: a.id().required(),
1871
- itemLineageId: a.id().required(),
1872
- type: a.string().required(),
1873
- role: a.string().required(),
1874
- sortKey: a.string().required(),
1875
- storagePath: a.string(),
1876
- externalUrl: a.string(),
1877
- alt: a.string().required(),
1878
- caption: a.string(),
1879
- credit: a.string(),
1880
- width: a.integer(),
1881
- height: a.integer(),
1882
- aspectRatio: a.float(),
1883
- focalX: a.float(),
1884
- focalY: a.float(),
1885
- minHeight: a.integer(),
1886
- preferredHeight: a.integer(),
1887
- maxHeight: a.integer(),
1888
- crop: a.string(),
1889
- wrapsText: a.boolean(),
1890
- metadata: a.json(),
1891
- })
1892
- .secondaryIndexes((index) => [
1893
- index("publishedItemId").sortKeys(["sortKey"]).queryField("listPublishedMediaAssetsByItemAndSortKey"),
1894
- index("role").sortKeys(["publishedItemId"]).queryField("listPublishedMediaAssetsByRoleAndItem"),
1895
- ])
1896
- .authorization((allow) => [
1897
- allow.guest().to(["read"]),
1898
- allow.groups(contentWriteGroups),
1899
- ]),
1900
- PublishedEdition: modelWithoutSubscriptions({
1901
- id: a.id().required(),
1902
- sourceEditionId: a.id().required(),
1903
- editionLineageId: a.id().required(),
1904
- versionNumber: a.integer().required(),
1905
- slug: a.string().required(),
1906
- title: a.string().required(),
1907
- status: a.string().required(),
1908
- editionDate: a.string().required(),
1909
- publishedAt: a.datetime(),
1910
- description: a.string(),
1911
- layoutPlan: a.json(),
1912
- metadata: a.json(),
1913
- })
1914
- .secondaryIndexes((index) => [
1915
- index("slug").queryField("publishedEditionBySlug"),
1916
- index("status").sortKeys(["editionDate"]).queryField("listPublishedEditionsByStatusAndEditionDate"),
1917
- index("status").sortKeys(["publishedAt"]).queryField("listPublishedEditionsByStatusAndPublishedAt"),
1918
- index("editionLineageId").sortKeys(["versionNumber"]).queryField("listPublishedEditionsByLineageAndVersion"),
1919
- ])
1920
- .authorization((allow) => [
1921
- allow.guest().to(["read"]),
1922
- allow.groups(contentWriteGroups),
1923
- ]),
1924
- PublishedEditionItem: modelWithoutSubscriptions({
1925
- id: a.id().required(),
1926
- publishedEditionId: a.id().required(),
1927
- publishedItemId: a.id().required(),
1928
- sourceEditionItemId: a.id().required(),
1929
- sourceEditionId: a.id().required(),
1930
- sourceItemId: a.id().required(),
1931
- editionLineageId: a.id().required(),
1932
- itemLineageId: a.id().required(),
1933
- placementKey: a.string().required(),
1934
- sortKey: a.string().required(),
1935
- pageNumber: a.integer(),
1936
- priority: a.integer(),
1937
- metadata: a.json(),
1938
- })
1939
- .secondaryIndexes((index) => [
1940
- index("publishedEditionId").sortKeys(["sortKey"]).queryField("listPublishedEditionItemsByEditionAndSortKey"),
1941
- index("publishedItemId").sortKeys(["publishedEditionId"]).queryField("listPublishedEditionItemsByItemAndEdition"),
1942
- ])
1943
- .authorization((allow) => [
1944
- allow.guest().to(["read"]),
1945
- allow.groups(contentWriteGroups),
1946
- ]),
1947
- PublishedCategorySet: modelWithoutSubscriptions({
1948
- id: a.id().required(),
1949
- sourceCategorySetId: a.id().required(),
1950
- categorySetLineageId: a.id().required(),
1951
- versionNumber: a.integer().required(),
1952
- corpusId: a.id().required(),
1953
- classifierId: a.string().required(),
1954
- displayName: a.string().required(),
1955
- description: a.string(),
1956
- status: a.string().required(),
1957
- generatedAt: a.datetime(),
1958
- publishedAt: a.datetime(),
1959
- categoryCount: a.integer(),
1960
- metadata: a.json(),
1961
- })
1962
- .secondaryIndexes((index) => [
1963
- index("status").sortKeys(["displayName"]).queryField("listPublishedCategorySetsByStatusAndName"),
1964
- index("classifierId").sortKeys(["displayName"]).queryField("listPublishedCategorySetsByClassifierAndName"),
1965
- index("categorySetLineageId").sortKeys(["versionNumber"]).queryField("listPublishedCategorySetsByLineageAndVersion"),
1966
- ])
1967
- .authorization((allow) => [
1968
- allow.guest().to(["read"]),
1969
- allow.groups(contentWriteGroups),
1970
- ]),
1971
- PublishedCategory: modelWithoutSubscriptions({
1972
- id: a.id().required(),
1973
- sourceCategoryId: a.id().required(),
1974
- publishedCategorySetId: a.id().required(),
1975
- categoryLineageId: a.id().required(),
1976
- categorySetLineageId: a.id().required(),
1977
- versionNumber: a.integer().required(),
1978
- corpusId: a.id().required(),
1979
- categoryKey: a.string().required(),
1980
- parentCategoryId: a.id(),
1981
- parentCategoryKey: a.string(),
1982
- displayName: a.string().required(),
1983
- shortTitle: a.string(),
1984
- subtitle: a.string(),
1985
- description: a.string(),
1986
- aliases: a.string().array(),
1987
- status: a.string().required(),
1988
- seedItemIds: a.string().array(),
1989
- holdoutItemIds: a.string().array(),
1990
- rank: a.integer(),
1991
- depth: a.integer(),
1992
- isPinned: a.boolean(),
1993
- metadata: a.json(),
1994
- })
1995
- .secondaryIndexes((index) => [
1996
- index("publishedCategorySetId").sortKeys(["categoryKey"]).queryField("listPublishedCategoriesBySetAndKey"),
1997
- index("parentCategoryId").sortKeys(["rank"]).queryField("listPublishedCategoriesByParentAndRank"),
1998
- index("parentCategoryKey").sortKeys(["rank"]).queryField("listPublishedCategoriesByParentKeyAndRank"),
1999
- index("categoryKey").sortKeys(["publishedCategorySetId"]).queryField("listPublishedCategoriesByKeyAndSet"),
2000
- ])
2001
- .authorization((allow) => [
2002
- allow.guest().to(["read"]),
2003
- allow.groups(contentWriteGroups),
2004
- ]),
2005
- ...editorialChecksSchemaDefinitions,
2006
- ...monitoringViewSchemaDefinitions,
26
+ /**
27
+ * Model groups a site may leave out of its data API. CloudFormation creates at most 2,500 resources in one stack
28
+ * operation, nested stacks included, and the full model set exceeds that on a fresh create. A first deploy that
29
+ * excludes a group fits; a second deploy without the exclusion adds the models as an ordinary update.
30
+ */
31
+ export const OPTIONAL_MODEL_GROUPS = {
32
+ editions: ["Edition", "EditionItem", "PublishedEdition", "PublishedEditionItem"],
2007
33
  };
34
+ export function assertKnownModelGroups(groups) {
35
+ for (const group of groups) {
36
+ if (!(group in OPTIONAL_MODEL_GROUPS)) {
37
+ throw new Error(`Unknown model group "${group}"; known groups: ${Object.keys(OPTIONAL_MODEL_GROUPS).join(", ")}`);
38
+ }
39
+ }
40
+ }
41
+ function buildBaseDefinitions(includeEditions) {
42
+ const definitions = {
43
+ UserProfile: modelWithoutSubscriptions({
44
+ id: a.id().required(),
45
+ email: a.email(),
46
+ displayName: a.string(),
47
+ avatarUrl: a.url(),
48
+ preferences: a.json(),
49
+ settings: a.json(),
50
+ status: a.string(),
51
+ mergedIntoProfileId: a.id(),
52
+ mergedAt: a.datetime(),
53
+ mergedBy: a.string(),
54
+ mergeReason: a.string(),
55
+ createdAt: a.datetime(),
56
+ updatedAt: a.datetime(),
57
+ })
58
+ .authorization((allow) => [
59
+ allow.owner(),
60
+ allow.group(adminGroup),
61
+ ]),
62
+ UserIdentity: modelWithoutSubscriptions({
63
+ id: a.id().required(),
64
+ userProfileId: a.id().required(),
65
+ cognitoSub: a.string().required(),
66
+ provider: a.string(),
67
+ email: a.email(),
68
+ status: a.string().required(),
69
+ linkedAt: a.datetime().required(),
70
+ lastSeenAt: a.datetime(),
71
+ })
72
+ .secondaryIndexes((index) => [
73
+ index("userProfileId").sortKeys(["linkedAt"]).queryField("listUserIdentitiesByProfileAndLinkedAt"),
74
+ index("cognitoSub").queryField("userIdentityByCognitoSub"),
75
+ index("email").sortKeys(["status"]).queryField("listUserIdentitiesByEmailAndStatus"),
76
+ ])
77
+ .authorization((allow) => [
78
+ allow.group(adminGroup),
79
+ ]),
80
+ UserRoleAssignment: modelWithoutSubscriptions({
81
+ id: a.id().required(),
82
+ userProfileId: a.id().required(),
83
+ userSub: a.string(),
84
+ email: a.email(),
85
+ role: a.string().required(),
86
+ status: a.string().required(),
87
+ grantedBy: a.string().required(),
88
+ grantedAt: a.datetime().required(),
89
+ revokedAt: a.datetime(),
90
+ notes: a.string(),
91
+ })
92
+ .secondaryIndexes((index) => [
93
+ index("userProfileId").sortKeys(["role"]).queryField("listUserRoleAssignmentsByProfileAndRole"),
94
+ index("userSub").sortKeys(["role"]).queryField("listUserRoleAssignmentsByUserAndRole"),
95
+ index("role").sortKeys(["status"]).queryField("listUserRoleAssignmentsByRoleAndStatus"),
96
+ ])
97
+ .authorization((allow) => [
98
+ allow.group(adminGroup),
99
+ ]),
100
+ UserRoleMutationResult: a.customType({
101
+ ok: a.boolean().required(),
102
+ userProfileId: a.id(),
103
+ userSub: a.string(),
104
+ username: a.string(),
105
+ role: a.string().required(),
106
+ userSubs: a.string().array(),
107
+ usernames: a.string().array(),
108
+ activeRoles: a.string().array().required(),
109
+ }),
110
+ UserDirectoryIdentity: a.customType({
111
+ id: a.id().required(),
112
+ userProfileId: a.id().required(),
113
+ cognitoSub: a.string().required(),
114
+ provider: a.string(),
115
+ email: a.email(),
116
+ status: a.string().required(),
117
+ linkedAt: a.datetime().required(),
118
+ lastSeenAt: a.datetime(),
119
+ }),
120
+ UserDirectoryEntry: a.customType({
121
+ userProfileId: a.id(),
122
+ userSub: a.string(),
123
+ username: a.string(),
124
+ email: a.email(),
125
+ displayName: a.string(),
126
+ provider: a.string(),
127
+ enabled: a.boolean(),
128
+ cognitoStatus: a.string(),
129
+ profileStatus: a.string(),
130
+ mergedIntoProfileId: a.id(),
131
+ identityStatus: a.string(),
132
+ activeRoles: a.string().array().required(),
133
+ identities: a.ref("UserDirectoryIdentity").array().required(),
134
+ }),
135
+ UserDirectoryResult: a.customType({
136
+ entries: a.ref("UserDirectoryEntry").array().required(),
137
+ profileCount: a.integer().required(),
138
+ identityCount: a.integer().required(),
139
+ cognitoUserCount: a.integer().required(),
140
+ }),
141
+ ReaderSettingsResult: a.customType({
142
+ userProfileId: a.id().required(),
143
+ settings: a.json(),
144
+ }),
145
+ listUserDirectory: a
146
+ .query()
147
+ .returns(a.ref("UserDirectoryResult"))
148
+ .authorization((allow) => [allow.group(adminGroup)])
149
+ .handler(a.handler.function(manageUserRole)),
150
+ grantUserRole: a
151
+ .mutation()
152
+ .arguments({
153
+ userProfileId: a.id(),
154
+ userSub: a.string(),
155
+ cognitoSubs: a.string().array(),
156
+ role: a.string().required(),
157
+ })
158
+ .returns(a.ref("UserRoleMutationResult"))
159
+ .authorization((allow) => [allow.group(adminGroup)])
160
+ .handler(a.handler.function(manageUserRole)),
161
+ revokeUserRole: a
162
+ .mutation()
163
+ .arguments({
164
+ userProfileId: a.id(),
165
+ userSub: a.string(),
166
+ cognitoSubs: a.string().array(),
167
+ role: a.string().required(),
168
+ })
169
+ .returns(a.ref("UserRoleMutationResult"))
170
+ .authorization((allow) => [allow.group(adminGroup)])
171
+ .handler(a.handler.function(manageUserRole)),
172
+ mergeUserProfiles: a
173
+ .mutation()
174
+ .arguments({
175
+ targetUserProfileId: a.id(),
176
+ targetUserSub: a.string(),
177
+ sourceUserProfileId: a.id(),
178
+ sourceUserSub: a.string(),
179
+ reason: a.string(),
180
+ })
181
+ .returns(a.ref("UserDirectoryEntry"))
182
+ .authorization((allow) => [allow.group(adminGroup)])
183
+ .handler(a.handler.function(manageUserRole)),
184
+ getReaderSettings: a
185
+ .query()
186
+ .returns(a.ref("ReaderSettingsResult"))
187
+ .authorization((allow) => [allow.authenticated()])
188
+ .handler(a.handler.function(readerSettings)),
189
+ updateReaderSettings: a
190
+ .mutation()
191
+ .arguments({
192
+ settings: a.json().required(),
193
+ })
194
+ .returns(a.ref("ReaderSettingsResult"))
195
+ .authorization((allow) => [allow.authenticated()])
196
+ .handler(a.handler.function(readerSettings)),
197
+ SteeringActionResult: a.customType({
198
+ ok: a.boolean().required(),
199
+ action: a.string().required(),
200
+ proposalId: a.id(),
201
+ categorySetId: a.id(),
202
+ categoryId: a.id(),
203
+ decisionId: a.id(),
204
+ status: a.string(),
205
+ }),
206
+ reviewSteeringProposal: a
207
+ .mutation()
208
+ .arguments({
209
+ proposalId: a.id().required(),
210
+ action: a.string().required(),
211
+ actorSub: a.string(),
212
+ actorLabel: a.string(),
213
+ note: a.string(),
214
+ displayName: a.string(),
215
+ shortTitle: a.string(),
216
+ subtitle: a.string(),
217
+ description: a.string(),
218
+ aliases: a.string().array(),
219
+ seedItemIds: a.string().array(),
220
+ holdoutItemIds: a.string().array(),
221
+ })
222
+ .returns(a.ref("SteeringActionResult"))
223
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
224
+ .handler(a.handler.function(categoryAction)),
225
+ CurationDelegationResult: a.customType({
226
+ ok: a.boolean().required(),
227
+ delegationId: a.id().required(),
228
+ token: a.string(),
229
+ agentLabel: a.string().required(),
230
+ grantorLabel: a.string(),
231
+ expiresAt: a.datetime().required(),
232
+ revokedAt: a.datetime(),
233
+ state: a.string(),
234
+ userCode: a.string(),
235
+ requestedHours: a.integer(),
236
+ pendingExpiresAt: a.datetime(),
237
+ approvedAt: a.datetime(),
238
+ deniedAt: a.datetime(),
239
+ }),
240
+ CurationDelegationRequestResult: a.customType({
241
+ ok: a.boolean().required(),
242
+ delegationId: a.id().required(),
243
+ userCode: a.string().required(),
244
+ pendingExpiresAt: a.datetime().required(),
245
+ requestedHours: a.integer().required(),
246
+ }),
247
+ CurationDelegationStatusResult: a.customType({
248
+ delegationId: a.id().required(),
249
+ state: a.string().required(),
250
+ expiresAt: a.datetime().required(),
251
+ grantorLabel: a.string(),
252
+ }),
253
+ ReferenceCurationActionResult: a.customType({
254
+ ok: a.boolean().required(),
255
+ action: a.string().required(),
256
+ referenceId: a.id().required(),
257
+ status: a.string().required(),
258
+ reasonCode: a.string(),
259
+ messageId: a.id(),
260
+ relationId: a.id(),
261
+ }),
262
+ ReferenceQualityActionResult: a.customType({
263
+ ok: a.boolean().required(),
264
+ referenceId: a.id().required(),
265
+ rating: a.integer().required(),
266
+ status: a.string().required(),
267
+ relationId: a.id(),
268
+ }),
269
+ CategorySetDraftActionResult: a.customType({
270
+ ok: a.boolean().required(),
271
+ action: a.string().required(),
272
+ categorySetId: a.id().required(),
273
+ sourceCategorySetId: a.id(),
274
+ categoryCount: a.integer(),
275
+ status: a.string(),
276
+ }),
277
+ TopicLabelActionResult: a.customType({
278
+ ok: a.boolean().required(),
279
+ action: a.string().required(),
280
+ referenceId: a.id(),
281
+ categoryId: a.id(),
282
+ relationId: a.id(),
283
+ sourceRelationId: a.id(),
284
+ status: a.string(),
285
+ }),
286
+ reviewReferenceCuration: a
287
+ .mutation()
288
+ .arguments({
289
+ referenceId: a.id().required(),
290
+ action: a.string().required(),
291
+ actorSub: a.string(),
292
+ actorLabel: a.string(),
293
+ note: a.string(),
294
+ reasonCode: a.string(),
295
+ decisionRelationId: a.id(),
296
+ shareable: a.boolean(),
297
+ sectionId: a.id(),
298
+ })
299
+ .returns(a.ref("ReferenceCurationActionResult"))
300
+ .authorization((allow) => [
301
+ allow.groups(categoryWriteGroups),
302
+ ])
303
+ .handler(a.handler.function(categoryAction)),
304
+ createCurationDelegation: a
305
+ .mutation()
306
+ .arguments({
307
+ agentLabel: a.string().required(),
308
+ hours: a.integer(),
309
+ })
310
+ .returns(a.ref("CurationDelegationResult"))
311
+ .authorization((allow) => [
312
+ allow.groups(categoryWriteGroups),
313
+ ])
314
+ .handler(a.handler.function(categoryAction)),
315
+ revokeCurationDelegation: a
316
+ .mutation()
317
+ .arguments({
318
+ delegationId: a.id().required(),
319
+ })
320
+ .returns(a.ref("CurationDelegationResult"))
321
+ .authorization((allow) => [
322
+ allow.groups(categoryWriteGroups),
323
+ ])
324
+ .handler(a.handler.function(categoryAction)),
325
+ listCurationDelegations: a
326
+ .query()
327
+ .returns(a.ref("CurationDelegationResult").array())
328
+ .authorization((allow) => [
329
+ allow.groups(categoryWriteGroups),
330
+ ])
331
+ .handler(a.handler.function(categoryAction)),
332
+ requestCurationDelegation: a
333
+ .mutation()
334
+ .arguments({
335
+ delegationId: a.id().required(),
336
+ tokenHash: a.string().required(),
337
+ agentLabel: a.string().required(),
338
+ hours: a.integer(),
339
+ })
340
+ .returns(a.ref("CurationDelegationRequestResult"))
341
+ .authorization((allow) => [
342
+ allow.authenticated("identityPool"),
343
+ ])
344
+ .handler(a.handler.function(categoryAction)),
345
+ approveCurationDelegation: a
346
+ .mutation()
347
+ .arguments({
348
+ userCode: a.string().required(),
349
+ })
350
+ .returns(a.ref("CurationDelegationResult"))
351
+ .authorization((allow) => [
352
+ allow.groups(categoryWriteGroups),
353
+ ])
354
+ .handler(a.handler.function(categoryAction)),
355
+ denyCurationDelegation: a
356
+ .mutation()
357
+ .arguments({
358
+ userCode: a.string().required(),
359
+ })
360
+ .returns(a.ref("CurationDelegationResult"))
361
+ .authorization((allow) => [
362
+ allow.groups(categoryWriteGroups),
363
+ ])
364
+ .handler(a.handler.function(categoryAction)),
365
+ getCurationDelegationStatus: a
366
+ .query()
367
+ .arguments({
368
+ delegationId: a.id().required(),
369
+ })
370
+ .returns(a.ref("CurationDelegationStatusResult"))
371
+ .authorization((allow) => [
372
+ allow.authenticated("identityPool"),
373
+ ])
374
+ .handler(a.handler.function(categoryAction)),
375
+ recordDelegatedCuration: a
376
+ .mutation()
377
+ .arguments({
378
+ referenceId: a.id().required(),
379
+ action: a.string().required(),
380
+ delegationId: a.id().required(),
381
+ delegationToken: a.string().required(),
382
+ agentLabel: a.string().required(),
383
+ onBehalfOf: a.string().required(),
384
+ instruction: a.string().required(),
385
+ note: a.string(),
386
+ reasonCode: a.string(),
387
+ decisionRelationId: a.id(),
388
+ shareable: a.boolean(),
389
+ sectionId: a.id(),
390
+ })
391
+ .returns(a.ref("ReferenceCurationActionResult"))
392
+ .authorization((allow) => [
393
+ allow.authenticated("identityPool"),
394
+ ])
395
+ .handler(a.handler.function(categoryAction)),
396
+ setReferenceQualityRating: a
397
+ .mutation()
398
+ .arguments({
399
+ referenceId: a.id().required(),
400
+ rating: a.integer().required(),
401
+ actorSub: a.string(),
402
+ actorLabel: a.string(),
403
+ note: a.string(),
404
+ })
405
+ .returns(a.ref("ReferenceQualityActionResult"))
406
+ .authorization((allow) => [
407
+ allow.groups(categoryWriteGroups),
408
+ ])
409
+ .handler(a.handler.function(categoryAction)),
410
+ createCategorySetDraft: a
411
+ .mutation()
412
+ .arguments({
413
+ sourceCategorySetId: a.id().required(),
414
+ displayName: a.string(),
415
+ actorLabel: a.string(),
416
+ note: a.string(),
417
+ })
418
+ .returns(a.ref("CategorySetDraftActionResult"))
419
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
420
+ .handler(a.handler.function(categoryAction)),
421
+ promoteCategorySetDraft: a
422
+ .mutation()
423
+ .arguments({
424
+ categorySetId: a.id().required(),
425
+ actorLabel: a.string(),
426
+ note: a.string(),
427
+ })
428
+ .returns(a.ref("CategorySetDraftActionResult"))
429
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
430
+ .handler(a.handler.function(categoryAction)),
431
+ discardCategorySetDraft: a
432
+ .mutation()
433
+ .arguments({
434
+ categorySetId: a.id().required(),
435
+ actorLabel: a.string(),
436
+ note: a.string(),
437
+ })
438
+ .returns(a.ref("CategorySetDraftActionResult"))
439
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
440
+ .handler(a.handler.function(categoryAction)),
441
+ createDraftCategory: a
442
+ .mutation()
443
+ .arguments({
444
+ categorySetId: a.id().required(),
445
+ parentCategoryKey: a.string(),
446
+ displayName: a.string().required(),
447
+ shortTitle: a.string(),
448
+ subtitle: a.string(),
449
+ description: a.string(),
450
+ actorLabel: a.string(),
451
+ note: a.string(),
452
+ })
453
+ .returns(a.ref("SteeringActionResult"))
454
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
455
+ .handler(a.handler.function(categoryAction)),
456
+ updateDraftCategory: a
457
+ .mutation()
458
+ .arguments({
459
+ categoryId: a.id().required(),
460
+ displayName: a.string(),
461
+ shortTitle: a.string(),
462
+ subtitle: a.string(),
463
+ description: a.string(),
464
+ parentCategoryKey: a.string(),
465
+ actorLabel: a.string(),
466
+ note: a.string(),
467
+ })
468
+ .returns(a.ref("SteeringActionResult"))
469
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
470
+ .handler(a.handler.function(categoryAction)),
471
+ archiveDraftCategory: a
472
+ .mutation()
473
+ .arguments({
474
+ categoryId: a.id().required(),
475
+ actorLabel: a.string(),
476
+ note: a.string(),
477
+ })
478
+ .returns(a.ref("SteeringActionResult"))
479
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
480
+ .handler(a.handler.function(categoryAction)),
481
+ reviewReferenceTopicLabel: a
482
+ .mutation()
483
+ .arguments({
484
+ referenceId: a.id().required(),
485
+ categoryId: a.id().required(),
486
+ action: a.string().required(),
487
+ sourceRelationId: a.id(),
488
+ actorLabel: a.string(),
489
+ note: a.string(),
490
+ })
491
+ .returns(a.ref("TopicLabelActionResult"))
492
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
493
+ .handler(a.handler.function(categoryAction)),
494
+ NewsroomSummary: a.customType({
495
+ generatedAt: a.datetime().required(),
496
+ staleAt: a.datetime(),
497
+ source: a.string(),
498
+ latestImportRun: a.json(),
499
+ counts: a.json().required(),
500
+ facets: a.json(),
501
+ assignmentStatusCounts: a.json().required(),
502
+ assignmentTypeCounts: a.json().required(),
503
+ referenceStatusCounts: a.json().required(),
504
+ messageKindCounts: a.json().required(),
505
+ messageDomainCounts: a.json().required(),
506
+ }),
507
+ getNewsroomSummary: a
508
+ .query()
509
+ .returns(a.ref("NewsroomSummary"))
510
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
511
+ .handler(a.handler.function(newsroomSummary)),
512
+ deriveMarkus: a
513
+ .query()
514
+ .arguments({ input: a.json().required() })
515
+ .returns(a.json())
516
+ .authorization((allow) => [allow.groups(contentWriteGroups)])
517
+ .handler(a.handler.function(contentActions)),
518
+ intakePendingReferences: a
519
+ .mutation()
520
+ .arguments({ input: a.json().required() })
521
+ .returns(a.json())
522
+ .authorization((allow) => [allow.groups(contentWriteGroups)])
523
+ .handler(a.handler.function(contentActions)),
524
+ saveItemDraft: a
525
+ .mutation()
526
+ .arguments({ input: a.json().required() })
527
+ .returns(a.json())
528
+ .authorization((allow) => [allow.groups(contentWriteGroups)])
529
+ .handler(a.handler.function(contentActions)),
530
+ publishItem: a
531
+ .mutation()
532
+ .arguments({ input: a.json().required() })
533
+ .returns(a.json())
534
+ .authorization((allow) => [allow.groups(contentWriteGroups)])
535
+ .handler(a.handler.function(contentActions)),
536
+ moveStoryStage: a
537
+ .mutation()
538
+ .arguments({ input: a.json().required() })
539
+ .returns(a.json())
540
+ .authorization((allow) => [allow.groups(contentWriteGroups)])
541
+ .handler(a.handler.function(contentActions)),
542
+ unpublishItem: a
543
+ .mutation()
544
+ .arguments({ input: a.json().required() })
545
+ .returns(a.json())
546
+ .authorization((allow) => [allow.groups(contentWriteGroups)])
547
+ .handler(a.handler.function(contentActions)),
548
+ requestStagingBuild: a
549
+ .mutation()
550
+ .arguments({ input: a.json().required() })
551
+ .returns(a.json())
552
+ .authorization((allow) => [allow.groups(contentWriteGroups)])
553
+ .handler(a.handler.function(contentActions)),
554
+ knowledgeQuery: a
555
+ .query()
556
+ .arguments({
557
+ input: a.json().required(),
558
+ })
559
+ .returns(a.json())
560
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
561
+ .handler(a.handler.function(knowledgeQuery)),
562
+ updateNewsroomSummary: a
563
+ .mutation()
564
+ .arguments({
565
+ delta: a.json().required(),
566
+ actorLabel: a.string(),
567
+ reason: a.string(),
568
+ })
569
+ .returns(a.ref("NewsroomSummary"))
570
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
571
+ .handler(a.handler.function(newsroomSummary)),
572
+ ModelAttachmentUploadSlot: a.customType({
573
+ ok: a.boolean().required(),
574
+ uploadId: a.string().required(),
575
+ attachmentId: a.id().required(),
576
+ ownerKind: a.string().required(),
577
+ ownerId: a.id().required(),
578
+ role: a.string().required(),
579
+ sortKey: a.string().required(),
580
+ method: a.string().required(),
581
+ uploadUrl: a.string().required(),
582
+ storagePath: a.string().required(),
583
+ mediaType: a.string().required(),
584
+ byteSize: a.integer().required(),
585
+ sha256: a.string(),
586
+ expiresAt: a.datetime().required(),
587
+ requiredHeaders: a.json(),
588
+ }),
589
+ ModelAttachmentDownloadSlot: a.customType({
590
+ ok: a.boolean().required(),
591
+ attachmentId: a.id().required(),
592
+ method: a.string().required(),
593
+ downloadUrl: a.string().required(),
594
+ storagePath: a.string().required(),
595
+ mediaType: a.string().required(),
596
+ byteSize: a.integer().required(),
597
+ sha256: a.string(),
598
+ expiresAt: a.datetime().required(),
599
+ requiredHeaders: a.json(),
600
+ }),
601
+ ModelAttachmentUploadAbortResult: a.customType({
602
+ ok: a.boolean().required(),
603
+ uploadId: a.string().required(),
604
+ attachmentId: a.id().required(),
605
+ storagePath: a.string().required(),
606
+ status: a.string().required(),
607
+ }),
608
+ createModelAttachmentUpload: a
609
+ .mutation()
610
+ .arguments({
611
+ ownerKind: a.string().required(),
612
+ ownerId: a.id().required(),
613
+ ownerLineageId: a.id(),
614
+ ownerVersionNumber: a.integer(),
615
+ ownerVersionKey: a.string(),
616
+ role: a.string().required(),
617
+ sortKey: a.string(),
618
+ filename: a.string().required(),
619
+ mediaType: a.string().required(),
620
+ byteSize: a.integer().required(),
621
+ sha256: a.string(),
622
+ importRunId: a.id(),
623
+ status: a.string(),
624
+ })
625
+ .returns(a.ref("ModelAttachmentUploadSlot"))
626
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
627
+ .handler(a.handler.function(modelAttachmentUpload)),
628
+ completeModelAttachmentUpload: a
629
+ .mutation()
630
+ .arguments({
631
+ uploadId: a.string().required(),
632
+ ownerKind: a.string().required(),
633
+ ownerId: a.id().required(),
634
+ ownerLineageId: a.id(),
635
+ ownerVersionNumber: a.integer(),
636
+ ownerVersionKey: a.string(),
637
+ role: a.string().required(),
638
+ sortKey: a.string(),
639
+ filename: a.string().required(),
640
+ mediaType: a.string().required(),
641
+ byteSize: a.integer().required(),
642
+ sha256: a.string(),
643
+ importRunId: a.id(),
644
+ status: a.string(),
645
+ })
646
+ .returns(a.ref("ModelAttachment"))
647
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
648
+ .handler(a.handler.function(modelAttachmentUpload)),
649
+ abortModelAttachmentUpload: a
650
+ .mutation()
651
+ .arguments({
652
+ uploadId: a.string().required(),
653
+ ownerKind: a.string().required(),
654
+ ownerId: a.id().required(),
655
+ ownerLineageId: a.id(),
656
+ ownerVersionNumber: a.integer(),
657
+ ownerVersionKey: a.string(),
658
+ role: a.string().required(),
659
+ sortKey: a.string(),
660
+ filename: a.string().required(),
661
+ mediaType: a.string().required(),
662
+ byteSize: a.integer().required(),
663
+ sha256: a.string(),
664
+ importRunId: a.id(),
665
+ status: a.string(),
666
+ })
667
+ .returns(a.ref("ModelAttachmentUploadAbortResult"))
668
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
669
+ .handler(a.handler.function(modelAttachmentUpload)),
670
+ createModelAttachmentDownload: a
671
+ .mutation()
672
+ .arguments({
673
+ attachmentId: a.id().required(),
674
+ })
675
+ .returns(a.ref("ModelAttachmentDownloadSlot"))
676
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
677
+ .handler(a.handler.function(modelAttachmentUpload)),
678
+ AssignmentActionResult: a.customType({
679
+ ok: a.boolean().required(),
680
+ assignmentId: a.id(),
681
+ eventId: a.id(),
682
+ status: a.string(),
683
+ action: a.string().required(),
684
+ assigneeKey: a.string(),
685
+ claimExpiresAt: a.datetime(),
686
+ }),
687
+ AssignmentTargetSummary: a.customType({
688
+ kind: a.string().required(),
689
+ id: a.id().required(),
690
+ lineageId: a.id().required(),
691
+ label: a.string(),
692
+ detail: a.string(),
693
+ }),
694
+ AssignmentSummary: a.customType({
695
+ id: a.id().required(),
696
+ assignmentTypeKey: a.string().required(),
697
+ queueKey: a.string().required(),
698
+ queueStatusKey: a.string().required(),
699
+ status: a.string().required(),
700
+ priority: a.integer(),
701
+ title: a.string().required(),
702
+ summary: a.string(),
703
+ assigneeType: a.string(),
704
+ assigneeId: a.string(),
705
+ assigneeKey: a.string(),
706
+ claimedAt: a.datetime(),
707
+ claimExpiresAt: a.datetime(),
708
+ completedAt: a.datetime(),
709
+ canceledAt: a.datetime(),
710
+ corpusId: a.id(),
711
+ categorySetId: a.id(),
712
+ classifierId: a.string(),
713
+ sectionId: a.id(),
714
+ sectionKey: a.string(),
715
+ sectionType: a.string(),
716
+ sectionStatusKey: a.string(),
717
+ sectionQueueStatusKey: a.string(),
718
+ primaryFocusCategoryKey: a.string(),
719
+ topicScopeCategoryKeys: a.string().array(),
720
+ sourceSnapshotId: a.string(),
721
+ importRunId: a.id(),
722
+ createdBy: a.string(),
723
+ createdAt: a.datetime().required(),
724
+ updatedAt: a.datetime().required(),
725
+ }),
726
+ AssignmentEventSummary: a.customType({
727
+ id: a.id().required(),
728
+ assignmentId: a.id().required(),
729
+ assignmentTypeKey: a.string().required(),
730
+ queueKey: a.string().required(),
731
+ eventType: a.string().required(),
732
+ fromStatus: a.string(),
733
+ toStatus: a.string(),
734
+ actorSub: a.string(),
735
+ actorLabel: a.string(),
736
+ note: a.string(),
737
+ createdAt: a.datetime().required(),
738
+ }),
739
+ AssignmentDoctrineSummary: a.customType({
740
+ scope: a.string().required(),
741
+ kind: a.string().required(),
742
+ label: a.string().required(),
743
+ slug: a.string().required(),
744
+ body: a.string().array().required(),
745
+ categoryKey: a.string(),
746
+ categoryLineageId: a.id(),
747
+ }),
748
+ AssignmentContext: a.customType({
749
+ editorialContext: a.json().required(),
750
+ assignment: a.ref("AssignmentSummary"),
751
+ doctrine: a.ref("AssignmentDoctrineSummary").array().required(),
752
+ targets: a.ref("AssignmentTargetSummary").array().required(),
753
+ events: a.ref("AssignmentEventSummary").array().required(),
754
+ }),
755
+ listAssignmentsForObject: a
756
+ .query()
757
+ .arguments({
758
+ objectKind: a.string().required(),
759
+ objectLineageId: a.id().required(),
760
+ status: a.string(),
761
+ limit: a.integer(),
762
+ })
763
+ .returns(a.ref("AssignmentContext").array().required())
764
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
765
+ .handler(a.handler.function(assignmentAction)),
766
+ listAssignmentQueue: a
767
+ .query()
768
+ .arguments({
769
+ queueKey: a.string().required(),
770
+ status: a.string(),
771
+ limit: a.integer(),
772
+ })
773
+ .returns(a.ref("AssignmentContext").array().required())
774
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
775
+ .handler(a.handler.function(assignmentAction)),
776
+ getEditorialContext: a
777
+ .query()
778
+ .arguments({
779
+ publicationKey: a.string().required(),
780
+ sectionId: a.id(),
781
+ storyLineageId: a.id(),
782
+ assignmentId: a.id(),
783
+ maxCharacters: a.integer(),
784
+ })
785
+ .returns(a.json().required())
786
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
787
+ .handler(a.handler.function(assignmentAction)),
788
+ getAssignmentContext: a
789
+ .query()
790
+ .arguments({
791
+ assignmentId: a.id().required(),
792
+ })
793
+ .returns(a.ref("AssignmentContext"))
794
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
795
+ .handler(a.handler.function(assignmentAction)),
796
+ claimAssignment: a
797
+ .mutation()
798
+ .arguments({
799
+ assignmentId: a.id().required(),
800
+ assigneeKey: a.string(),
801
+ assigneeType: a.string(),
802
+ assigneeId: a.string(),
803
+ claimExpiresAt: a.datetime(),
804
+ claimTtlSeconds: a.integer(),
805
+ actorSub: a.string(),
806
+ actorLabel: a.string(),
807
+ note: a.string(),
808
+ })
809
+ .returns(a.ref("AssignmentActionResult"))
810
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
811
+ .handler(a.handler.function(assignmentAction)),
812
+ releaseAssignment: a
813
+ .mutation()
814
+ .arguments({
815
+ assignmentId: a.id().required(),
816
+ actorSub: a.string(),
817
+ actorLabel: a.string(),
818
+ note: a.string(),
819
+ })
820
+ .returns(a.ref("AssignmentActionResult"))
821
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
822
+ .handler(a.handler.function(assignmentAction)),
823
+ completeAssignment: a
824
+ .mutation()
825
+ .arguments({
826
+ assignmentId: a.id().required(),
827
+ actorSub: a.string(),
828
+ actorLabel: a.string(),
829
+ note: a.string(),
830
+ })
831
+ .returns(a.ref("AssignmentActionResult"))
832
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
833
+ .handler(a.handler.function(assignmentAction)),
834
+ cancelAssignment: a
835
+ .mutation()
836
+ .arguments({
837
+ assignmentId: a.id().required(),
838
+ actorSub: a.string(),
839
+ actorLabel: a.string(),
840
+ note: a.string(),
841
+ })
842
+ .returns(a.ref("AssignmentActionResult"))
843
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
844
+ .handler(a.handler.function(assignmentAction)),
845
+ reopenAssignment: a
846
+ .mutation()
847
+ .arguments({
848
+ assignmentId: a.id().required(),
849
+ actorSub: a.string(),
850
+ actorLabel: a.string(),
851
+ note: a.string(),
852
+ })
853
+ .returns(a.ref("AssignmentActionResult"))
854
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
855
+ .handler(a.handler.function(assignmentAction)),
856
+ retryImmediateAssignment: a
857
+ .mutation()
858
+ .arguments({
859
+ assignmentId: a.id().required(),
860
+ actorSub: a.string(),
861
+ actorLabel: a.string(),
862
+ note: a.string(),
863
+ })
864
+ .returns(a.ref("AssignmentActionResult"))
865
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
866
+ .handler(a.handler.function(assignmentAction)),
867
+ listNewsroomProcedureDefinitions: a
868
+ .query()
869
+ .returns(a.json())
870
+ .authorization((allow) => [allow.group(adminGroup)])
871
+ .handler(a.handler.function(procedureAction)),
872
+ getNewsroomProcedureDefinition: a
873
+ .query()
874
+ .arguments({
875
+ id: a.id(),
876
+ procedureKey: a.string(),
877
+ })
878
+ .returns(a.json())
879
+ .authorization((allow) => [allow.group(adminGroup)])
880
+ .handler(a.handler.function(procedureAction)),
881
+ saveNewsroomProcedureDefinition: a
882
+ .mutation()
883
+ .arguments({
884
+ input: a.json().required(),
885
+ })
886
+ .returns(a.json())
887
+ .authorization((allow) => [allow.group(adminGroup)])
888
+ .handler(a.handler.function(procedureAction)),
889
+ saveNewsroomProcedureVersionDraft: a
890
+ .mutation()
891
+ .arguments({
892
+ input: a.json().required(),
893
+ })
894
+ .returns(a.json())
895
+ .authorization((allow) => [allow.group(adminGroup)])
896
+ .handler(a.handler.function(procedureAction)),
897
+ publishNewsroomProcedureVersion: a
898
+ .mutation()
899
+ .arguments({
900
+ versionId: a.id().required(),
901
+ })
902
+ .returns(a.json())
903
+ .authorization((allow) => [allow.group(adminGroup)])
904
+ .handler(a.handler.function(procedureAction)),
905
+ startNewsroomProcedureRun: a
906
+ .mutation()
907
+ .arguments({
908
+ procedureId: a.id(),
909
+ procedureKey: a.string(),
910
+ procedureVersionId: a.id(),
911
+ title: a.string(),
912
+ summary: a.string(),
913
+ input: a.json(),
914
+ actorLabel: a.string(),
915
+ })
916
+ .returns(a.json())
917
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
918
+ .handler(a.handler.function(procedureAction)),
919
+ getNewsroomProcedureRun: a
920
+ .query()
921
+ .arguments({
922
+ id: a.id().required(),
923
+ })
924
+ .returns(a.json())
925
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
926
+ .handler(a.handler.function(procedureAction)),
927
+ listNewsroomProcedureRunsByProcedure: a
928
+ .query()
929
+ .arguments({
930
+ procedureId: a.id().required(),
931
+ })
932
+ .returns(a.json())
933
+ .authorization((allow) => [allow.groups(categoryWriteGroups)])
934
+ .handler(a.handler.function(procedureAction)),
935
+ Assignment: modelWithoutSubscriptions({
936
+ id: a.id().required(),
937
+ assignmentTypeKey: a.string().required(),
938
+ queueKey: a.string().required(),
939
+ queueStatusKey: a.string().required(),
940
+ status: a.string().required(),
941
+ priority: a.integer(),
942
+ title: a.string().required(),
943
+ summary: a.string(),
944
+ assigneeType: a.string(),
945
+ assigneeId: a.string(),
946
+ assigneeKey: a.string(),
947
+ claimedAt: a.datetime(),
948
+ claimExpiresAt: a.datetime(),
949
+ completedAt: a.datetime(),
950
+ canceledAt: a.datetime(),
951
+ corpusId: a.id(),
952
+ categorySetId: a.id(),
953
+ classifierId: a.string(),
954
+ sectionId: a.id(),
955
+ sectionKey: a.string(),
956
+ sectionType: a.string(),
957
+ sectionStatusKey: a.string(),
958
+ sectionQueueStatusKey: a.string(),
959
+ primaryFocusCategoryKey: a.string(),
960
+ topicScopeCategoryKeys: a.string().array(),
961
+ sourceSnapshotId: a.string(),
962
+ importRunId: a.id(),
963
+ createdBy: a.string(),
964
+ createdAt: a.datetime().required(),
965
+ updatedAt: a.datetime().required(),
966
+ newsroomFeedKey: a.string(),
967
+ itemLineageId: a.id(),
968
+ })
969
+ .secondaryIndexes((index) => [
970
+ index("newsroomFeedKey").sortKeys(["createdAt"]).queryField("listAssignmentsByNewsroomFeedAndCreatedAt"),
971
+ index("itemLineageId").sortKeys(["createdAt"]).queryField("listAssignmentsByItemLineageAndCreatedAt"),
972
+ index("queueStatusKey").sortKeys(["priority", "createdAt"]).queryField("listAssignmentsByQueueStatusAndPriority"),
973
+ index("assignmentTypeKey").sortKeys(["status", "createdAt"]).queryField("listAssignmentsByTypeStatusAndCreatedAt"),
974
+ index("status").sortKeys(["updatedAt"]).queryField("listAssignmentsByStatusAndUpdatedAt"),
975
+ index("assigneeKey").sortKeys(["status", "updatedAt"]).queryField("listAssignmentsByAssigneeStatusAndUpdatedAt"),
976
+ index("importRunId").sortKeys(["createdAt"]).queryField("listAssignmentsByImportRunAndCreatedAt"),
977
+ index("sectionStatusKey").sortKeys(["priority", "createdAt"]).queryField("listAssignmentsBySectionStatusAndPriority"),
978
+ index("sectionKey").sortKeys(["createdAt"]).queryField("listAssignmentsBySectionAndCreatedAt"),
979
+ index("sectionQueueStatusKey").sortKeys(["priority", "createdAt"]).queryField("listAssignmentsBySectionQueueStatusAndPriority"),
980
+ ])
981
+ .authorization((allow) => [
982
+ allow.groups(categoryWriteGroups).to(categoryAppendOnlyOperations),
983
+ ]),
984
+ AssignmentEvent: modelWithoutSubscriptions({
985
+ id: a.id().required(),
986
+ assignmentId: a.id().required(),
987
+ assignmentTypeKey: a.string().required(),
988
+ queueKey: a.string().required(),
989
+ eventType: a.string().required(),
990
+ fromStatus: a.string(),
991
+ toStatus: a.string(),
992
+ actorSub: a.string(),
993
+ actorLabel: a.string(),
994
+ note: a.string(),
995
+ createdAt: a.datetime().required(),
996
+ })
997
+ .secondaryIndexes((index) => [
998
+ index("assignmentId").sortKeys(["createdAt"]).queryField("listAssignmentEventsByAssignmentAndCreatedAt"),
999
+ index("eventType").sortKeys(["createdAt"]).queryField("listAssignmentEventsByTypeAndCreatedAt"),
1000
+ index("queueKey").sortKeys(["createdAt"]).queryField("listAssignmentEventsByQueueAndCreatedAt"),
1001
+ ])
1002
+ .authorization((allow) => [
1003
+ allow.groups(categoryWriteGroups).to(categoryAppendOnlyOperations),
1004
+ ]),
1005
+ ProcedureDefinition: modelWithoutSubscriptions({
1006
+ id: a.id().required(),
1007
+ procedureKey: a.string().required(),
1008
+ title: a.string().required(),
1009
+ category: a.string().required(),
1010
+ description: a.string(),
1011
+ enabled: a.boolean().required(),
1012
+ enabledStatus: a.string().required(),
1013
+ currentVersionId: a.id(),
1014
+ createdBy: a.string(),
1015
+ createdAt: a.datetime().required(),
1016
+ updatedBy: a.string(),
1017
+ updatedAt: a.datetime().required(),
1018
+ newsroomFeedKey: a.string(),
1019
+ })
1020
+ .secondaryIndexes((index) => [
1021
+ index("procedureKey").sortKeys(["updatedAt"]).queryField("listProcedureDefinitionsByKeyAndUpdatedAt"),
1022
+ index("enabledStatus").sortKeys(["updatedAt"]).queryField("listProcedureDefinitionsByEnabledAndUpdatedAt"),
1023
+ index("newsroomFeedKey").sortKeys(["updatedAt"]).queryField("listProcedureDefinitionsByFeedAndUpdatedAt"),
1024
+ ])
1025
+ .authorization((allow) => [
1026
+ allow.group(adminGroup),
1027
+ ]),
1028
+ ProcedureVersion: modelWithoutSubscriptions({
1029
+ id: a.id().required(),
1030
+ procedureId: a.id().required(),
1031
+ procedureKey: a.string().required(),
1032
+ versionNumber: a.integer().required(),
1033
+ status: a.string().required(),
1034
+ isCurrent: a.boolean().required(),
1035
+ label: a.string(),
1036
+ tactusSource: a.string().required(),
1037
+ parameterSchema: a.json().required(),
1038
+ defaults: a.json(),
1039
+ changelog: a.string(),
1040
+ createdBy: a.string(),
1041
+ createdAt: a.datetime().required(),
1042
+ updatedBy: a.string(),
1043
+ updatedAt: a.datetime().required(),
1044
+ })
1045
+ .secondaryIndexes((index) => [
1046
+ index("procedureId").sortKeys(["versionNumber"]).queryField("listProcedureVersionsByProcedureAndVersion"),
1047
+ index("procedureId").sortKeys(["createdAt"]).queryField("listProcedureVersionsByProcedureAndCreatedAt"),
1048
+ index("status").sortKeys(["updatedAt"]).queryField("listProcedureVersionsByStatusAndUpdatedAt"),
1049
+ ])
1050
+ .authorization((allow) => [
1051
+ allow.group(adminGroup),
1052
+ ]),
1053
+ ProcedureRun: modelWithoutSubscriptions({
1054
+ id: a.id().required(),
1055
+ procedureId: a.id().required(),
1056
+ procedureKey: a.string().required(),
1057
+ procedureVersionId: a.id().required(),
1058
+ procedureVersionNumber: a.integer(),
1059
+ assignmentId: a.id(),
1060
+ runStatus: a.string().required(),
1061
+ requestedBy: a.string(),
1062
+ requestedAt: a.datetime().required(),
1063
+ startedAt: a.datetime(),
1064
+ finishedAt: a.datetime(),
1065
+ input: a.json(),
1066
+ normalizedInput: a.json(),
1067
+ resultSummary: a.string(),
1068
+ errorSummary: a.string(),
1069
+ output: a.json(),
1070
+ error: a.json(),
1071
+ attempt: a.integer(),
1072
+ newsroomFeedKey: a.string(),
1073
+ })
1074
+ .secondaryIndexes((index) => [
1075
+ index("procedureId").sortKeys(["requestedAt"]).queryField("listProcedureRunsByProcedureAndRequestedAt"),
1076
+ index("assignmentId").sortKeys(["requestedAt"]).queryField("listProcedureRunsByAssignmentAndRequestedAt"),
1077
+ index("runStatus").sortKeys(["requestedAt"]).queryField("listProcedureRunsByStatusAndRequestedAt"),
1078
+ index("newsroomFeedKey").sortKeys(["requestedAt"]).queryField("listProcedureRunsByFeedAndRequestedAt"),
1079
+ ])
1080
+ .authorization((allow) => [
1081
+ allow.group("editor").to(["read"]),
1082
+ allow.group(adminGroup).to(authoringOperations),
1083
+ ]),
1084
+ NewsroomSection: modelWithoutSubscriptions({
1085
+ id: a.id().required(),
1086
+ tenantId: a.string(),
1087
+ title: a.string().required(),
1088
+ type: a.string().required(),
1089
+ editorialMission: a.string().required(),
1090
+ editorialPolicy: a.string().required(),
1091
+ enabled: a.boolean().required(),
1092
+ enabledStatus: a.string().required(),
1093
+ sortOrder: a.integer().required(),
1094
+ shortTitle: a.string().required(),
1095
+ defaultArticleTypes: a.string().array(),
1096
+ defaultPageBudget: a.integer(),
1097
+ assignmentGuidance: a.string(),
1098
+ killCriteria: a.string(),
1099
+ visualGuidance: a.string(),
1100
+ createdAt: a.datetime(),
1101
+ updatedAt: a.datetime(),
1102
+ })
1103
+ .secondaryIndexes((index) => [
1104
+ index("sortOrder").sortKeys(["id"]).queryField("listNewsroomSectionsBySortOrder"),
1105
+ index("tenantId").sortKeys(["sortOrder"]).queryField("listNewsroomSectionsByTenantAndSortOrder"),
1106
+ index("type").sortKeys(["sortOrder"]).queryField("listNewsroomSectionsByTypeAndSortOrder"),
1107
+ index("enabledStatus").sortKeys(["sortOrder"]).queryField("listNewsroomSectionsByEnabledStatusAndSortOrder"),
1108
+ ])
1109
+ .authorization((allow) => [
1110
+ allow.groups(categoryWriteGroups),
1111
+ ]),
1112
+ KnowledgeCorpus: modelWithoutSubscriptions({
1113
+ id: a.id().required(),
1114
+ name: a.string().required(),
1115
+ role: a.string().required(),
1116
+ itemCount: a.integer(),
1117
+ generatedAt: a.datetime(),
1118
+ latestImportRunId: a.id(),
1119
+ createdAt: a.datetime(),
1120
+ updatedAt: a.datetime(),
1121
+ })
1122
+ .secondaryIndexes((index) => [
1123
+ index("role").sortKeys(["name"]).queryField("listKnowledgeCorporaByRoleAndName"),
1124
+ ])
1125
+ .authorization((allow) => [
1126
+ allow.groups(categoryWriteGroups).to(["read"]),
1127
+ ]),
1128
+ KnowledgeImportRun: modelWithoutSubscriptions({
1129
+ id: a.id().required(),
1130
+ corpusId: a.id().required(),
1131
+ importKind: a.string().required(),
1132
+ corpusImportKindKey: a.string(),
1133
+ classifierId: a.string(),
1134
+ sourceSnapshotId: a.string(),
1135
+ status: a.string().required(),
1136
+ generatedAt: a.datetime(),
1137
+ importedAt: a.datetime().required(),
1138
+ itemCount: a.integer(),
1139
+ categoryCount: a.integer(),
1140
+ proposalCount: a.integer(),
1141
+ artifactCount: a.integer(),
1142
+ referenceCount: a.integer(),
1143
+ relationCount: a.integer(),
1144
+ warningCount: a.integer(),
1145
+ })
1146
+ .secondaryIndexes((index) => [
1147
+ index("corpusId").sortKeys(["importedAt"]).queryField("listKnowledgeImportRunsByCorpusAndImportedAt"),
1148
+ index("importKind").sortKeys(["importedAt"]).queryField("listKnowledgeImportRunsByKindAndImportedAt"),
1149
+ index("corpusImportKindKey").sortKeys(["importedAt"]).queryField("listKnowledgeImportRunsByCorpusKindAndImportedAt"),
1150
+ ])
1151
+ .authorization((allow) => [
1152
+ allow.groups(categoryWriteGroups).to(["read"]),
1153
+ ]),
1154
+ KnowledgeRawPayload: modelWithoutSubscriptions({
1155
+ id: a.id().required(),
1156
+ ownerType: a.string().required(),
1157
+ ownerId: a.id().required(),
1158
+ payloadKind: a.string().required(),
1159
+ importRunId: a.id(),
1160
+ createdAt: a.datetime().required(),
1161
+ updatedAt: a.datetime(),
1162
+ })
1163
+ .secondaryIndexes((index) => [
1164
+ index("ownerId").sortKeys(["payloadKind"]).queryField("listKnowledgeRawPayloadsByOwnerAndKind"),
1165
+ index("importRunId").sortKeys(["ownerType"]).queryField("listKnowledgeRawPayloadsByImportRunAndOwner"),
1166
+ ])
1167
+ .authorization((allow) => [
1168
+ allow.groups(categoryWriteGroups),
1169
+ ]),
1170
+ KnowledgeArtifact: modelWithoutSubscriptions({
1171
+ id: a.id().required(),
1172
+ corpusId: a.id().required(),
1173
+ artifactKind: a.string().required(),
1174
+ artifactId: a.string().required(),
1175
+ snapshotId: a.string(),
1176
+ displayName: a.string(),
1177
+ createdAt: a.datetime(),
1178
+ importRunId: a.id(),
1179
+ })
1180
+ .secondaryIndexes((index) => [
1181
+ index("corpusId").sortKeys(["artifactKind"]).queryField("listKnowledgeArtifactsByCorpusAndKind"),
1182
+ index("artifactKind").sortKeys(["createdAt"]).queryField("listKnowledgeArtifactsByKindAndCreatedAt"),
1183
+ index("importRunId").sortKeys(["artifactKind"]).queryField("listKnowledgeArtifactsByImportRunAndKind"),
1184
+ ])
1185
+ .authorization((allow) => [
1186
+ allow.groups(categoryWriteGroups).to(["read"]),
1187
+ ]),
1188
+ CategorySet: modelWithoutSubscriptions({
1189
+ id: a.id().required(),
1190
+ lineageId: a.id().required(),
1191
+ versionNumber: a.integer().required(),
1192
+ previousVersionId: a.id(),
1193
+ versionState: a.string().required(),
1194
+ versionCreatedAt: a.datetime().required(),
1195
+ versionCreatedBy: a.string(),
1196
+ changeReason: a.string(),
1197
+ contentHash: a.string(),
1198
+ corpusId: a.id().required(),
1199
+ classifierId: a.string().required(),
1200
+ displayName: a.string().required(),
1201
+ description: a.string(),
1202
+ status: a.string().required(),
1203
+ generatedAt: a.datetime(),
1204
+ categoryCount: a.integer(),
1205
+ importRunId: a.id(),
1206
+ })
1207
+ .secondaryIndexes((index) => [
1208
+ index("lineageId").sortKeys(["versionNumber"]).queryField("listCategorySetsByLineageAndVersion"),
1209
+ index("corpusId").sortKeys(["classifierId"]).queryField("listCategorySetsByCorpusAndClassifier"),
1210
+ index("status").sortKeys(["displayName"]).queryField("listCategorySetsByStatusAndName"),
1211
+ index("versionState").sortKeys(["generatedAt"]).queryField("listCategorySetsByVersionStateAndGeneratedAt"),
1212
+ ])
1213
+ .authorization((allow) => [
1214
+ allow.groups(categoryWriteGroups),
1215
+ ]),
1216
+ Category: modelWithoutSubscriptions({
1217
+ id: a.id().required(),
1218
+ lineageId: a.id().required(),
1219
+ versionNumber: a.integer().required(),
1220
+ previousVersionId: a.id(),
1221
+ versionState: a.string().required(),
1222
+ versionCreatedAt: a.datetime().required(),
1223
+ versionCreatedBy: a.string(),
1224
+ changeReason: a.string(),
1225
+ contentHash: a.string(),
1226
+ categorySetId: a.id().required(),
1227
+ corpusId: a.id().required(),
1228
+ categoryKey: a.string().required(),
1229
+ parentCategoryId: a.id(),
1230
+ parentCategoryKey: a.string(),
1231
+ displayName: a.string().required(),
1232
+ shortTitle: a.string(),
1233
+ subtitle: a.string(),
1234
+ description: a.string(),
1235
+ aliases: a.string().array(),
1236
+ status: a.string().required(),
1237
+ seedItemIds: a.string().array(),
1238
+ holdoutItemIds: a.string().array(),
1239
+ rank: a.integer(),
1240
+ depth: a.integer(),
1241
+ isPinned: a.boolean(),
1242
+ importRunId: a.id(),
1243
+ updatedAt: a.datetime(),
1244
+ })
1245
+ .secondaryIndexes((index) => [
1246
+ index("lineageId").sortKeys(["versionNumber"]).queryField("listCategoriesByLineageAndVersion"),
1247
+ index("categorySetId").sortKeys(["categoryKey"]).queryField("listCategoriesBySetAndKey"),
1248
+ index("parentCategoryId").sortKeys(["rank"]).queryField("listCategoriesByParentAndRank"),
1249
+ index("parentCategoryKey").sortKeys(["rank"]).queryField("listCategoriesByParentKeyAndRank"),
1250
+ index("corpusId").sortKeys(["displayName"]).queryField("listCategoriesByCorpusAndName"),
1251
+ index("status").sortKeys(["displayName"]).queryField("listCategoriesByStatusAndName"),
1252
+ ])
1253
+ .authorization((allow) => [
1254
+ allow.groups(categoryWriteGroups),
1255
+ ]),
1256
+ CategoryKeyword: modelWithoutSubscriptions({
1257
+ id: a.id().required(),
1258
+ categorySetId: a.id().required(),
1259
+ corpusId: a.id().required(),
1260
+ categoryKey: a.string().required(),
1261
+ categoryLineageId: a.id(),
1262
+ categoryId: a.id(),
1263
+ keyword: a.string().required(),
1264
+ normalizedKeyword: a.string().required(),
1265
+ weight: a.float(),
1266
+ rank: a.integer(),
1267
+ source: a.string().required(),
1268
+ sourceTopicId: a.string(),
1269
+ importRunId: a.id(),
1270
+ metadata: a.json(),
1271
+ createdAt: a.datetime().required(),
1272
+ updatedAt: a.datetime(),
1273
+ })
1274
+ .secondaryIndexes((index) => [
1275
+ index("categorySetId").sortKeys(["categoryKey", "rank"]).queryField("listCategoryKeywordsBySetKeyAndRank"),
1276
+ index("categoryKey").sortKeys(["rank"]).queryField("listCategoryKeywordsByCategoryKeyAndRank"),
1277
+ index("normalizedKeyword").sortKeys(["categorySetId"]).queryField("listCategoryKeywordsByNormalizedKeywordAndSet"),
1278
+ index("importRunId").sortKeys(["rank"]).queryField("listCategoryKeywordsByImportRunAndRank"),
1279
+ ])
1280
+ .authorization((allow) => [
1281
+ allow.groups(categoryWriteGroups),
1282
+ ]),
1283
+ LexicalSteeringRule: modelWithoutSubscriptions({
1284
+ id: a.id().required(),
1285
+ ruleKind: a.string().required(),
1286
+ term: a.string().required(),
1287
+ normalizedTerm: a.string().required(),
1288
+ scope: a.string().required(),
1289
+ status: a.string().required(),
1290
+ corpusId: a.id(),
1291
+ classifierId: a.string(),
1292
+ categorySetId: a.id(),
1293
+ categoryKey: a.string(),
1294
+ note: a.string(),
1295
+ source: a.string(),
1296
+ createdBy: a.string(),
1297
+ createdAt: a.datetime().required(),
1298
+ updatedAt: a.datetime(),
1299
+ metadata: a.json(),
1300
+ })
1301
+ .secondaryIndexes((index) => [
1302
+ index("status").sortKeys(["normalizedTerm"]).queryField("listLexicalSteeringRulesByStatusAndTerm"),
1303
+ index("scope").sortKeys(["normalizedTerm"]).queryField("listLexicalSteeringRulesByScopeAndTerm"),
1304
+ index("categorySetId").sortKeys(["normalizedTerm"]).queryField("listLexicalSteeringRulesBySetAndTerm"),
1305
+ index("corpusId").sortKeys(["normalizedTerm"]).queryField("listLexicalSteeringRulesByCorpusAndTerm"),
1306
+ ])
1307
+ .authorization((allow) => [
1308
+ allow.groups(categoryWriteGroups),
1309
+ ]),
1310
+ SteeringProposal: modelWithoutSubscriptions({
1311
+ id: a.id().required(),
1312
+ categorySetId: a.id(),
1313
+ corpusId: a.id().required(),
1314
+ importRunId: a.id(),
1315
+ proposalKind: a.string().required(),
1316
+ steeringDomain: a.string().required(),
1317
+ status: a.string().required(),
1318
+ title: a.string().required(),
1319
+ summary: a.string(),
1320
+ categoryKey: a.string(),
1321
+ targetCategoryKey: a.string(),
1322
+ graphEntityId: a.string(),
1323
+ relationshipType: a.string(),
1324
+ displayName: a.string(),
1325
+ shortTitle: a.string(),
1326
+ subtitle: a.string(),
1327
+ description: a.string(),
1328
+ evidenceItemIds: a.string().array(),
1329
+ suggestedSeedItemIds: a.string().array(),
1330
+ suggestedHoldoutItemIds: a.string().array(),
1331
+ sourceSnapshotId: a.string(),
1332
+ proposedAt: a.datetime(),
1333
+ reviewedAt: a.datetime(),
1334
+ reviewedBy: a.string(),
1335
+ updatedAt: a.datetime(),
1336
+ })
1337
+ .secondaryIndexes((index) => [
1338
+ index("status").sortKeys(["proposedAt"]).queryField("listSteeringProposalsByStatusAndProposedAt"),
1339
+ index("categorySetId").sortKeys(["status"]).queryField("listSteeringProposalsBySetAndStatus"),
1340
+ index("corpusId").sortKeys(["proposalKind"]).queryField("listSteeringProposalsByCorpusAndKind"),
1341
+ index("steeringDomain").sortKeys(["status"]).queryField("listSteeringProposalsByDomainAndStatus"),
1342
+ ])
1343
+ .authorization((allow) => [
1344
+ allow.groups(categoryWriteGroups).to(["read"]),
1345
+ ]),
1346
+ SteeringDecision: modelWithoutSubscriptions({
1347
+ id: a.id().required(),
1348
+ proposalId: a.id().required(),
1349
+ categorySetId: a.id(),
1350
+ action: a.string().required(),
1351
+ actorSub: a.string(),
1352
+ actorLabel: a.string(),
1353
+ note: a.string(),
1354
+ selectedCategoryKey: a.string(),
1355
+ createdAt: a.datetime().required(),
1356
+ })
1357
+ .secondaryIndexes((index) => [
1358
+ index("proposalId").sortKeys(["createdAt"]).queryField("listSteeringDecisionsByProposalAndCreatedAt"),
1359
+ index("categorySetId").sortKeys(["createdAt"]).queryField("listSteeringDecisionsBySetAndCreatedAt"),
1360
+ ])
1361
+ .authorization((allow) => [
1362
+ allow.groups(categoryWriteGroups).to(categoryAppendOnlyOperations),
1363
+ ]),
1364
+ Reference: realtimeModel({
1365
+ id: a.id().required(),
1366
+ lineageId: a.id().required(),
1367
+ versionNumber: a.integer().required(),
1368
+ previousVersionId: a.id(),
1369
+ versionState: a.string().required(),
1370
+ versionCreatedAt: a.datetime().required(),
1371
+ versionCreatedBy: a.string(),
1372
+ changeReason: a.string(),
1373
+ contentHash: a.string(),
1374
+ corpusId: a.id().required(),
1375
+ externalItemId: a.string().required(),
1376
+ title: a.string(),
1377
+ authors: a.string().array(),
1378
+ sourceUri: a.string(),
1379
+ storagePath: a.string(),
1380
+ mediaType: a.string(),
1381
+ byteSize: a.integer(),
1382
+ sha256: a.string(),
1383
+ sourcePublishedAt: a.string(),
1384
+ sourceUpdatedAt: a.string(),
1385
+ retrievedAt: a.string(),
1386
+ inboundCitationCount: a.integer(),
1387
+ outboundCitationCount: a.integer(),
1388
+ importRunId: a.id(),
1389
+ importedAt: a.datetime(),
1390
+ createdAt: a.datetime(),
1391
+ curationStatus: a.string(),
1392
+ curationStatusKey: a.string(),
1393
+ curationStatusUpdatedAt: a.datetime(),
1394
+ curationStatusUpdatedBy: a.string(),
1395
+ curationStatusReason: a.string(),
1396
+ newsroomFeedKey: a.string(),
1397
+ reviewedFeedKey: a.string(),
1398
+ updatedAt: a.datetime(),
1399
+ })
1400
+ .secondaryIndexes((index) => [
1401
+ index("newsroomFeedKey").sortKeys(["createdAt"]).queryField("listReferencesByNewsroomFeedAndCreatedAt"),
1402
+ index("newsroomFeedKey").sortKeys(["importedAt"]).queryField("listReferencesByNewsroomFeedAndImportedAt"),
1403
+ index("lineageId").sortKeys(["versionNumber"]).queryField("listReferencesByLineageAndVersion"),
1404
+ index("corpusId").sortKeys(["externalItemId"]).queryField("listReferencesByCorpusAndExternalItem"),
1405
+ index("versionState").sortKeys(["updatedAt"]).queryField("listReferencesByVersionStateAndUpdatedAt"),
1406
+ index("importRunId").sortKeys(["externalItemId"]).queryField("listReferencesByImportRunAndExternalItem"),
1407
+ index("curationStatus").sortKeys(["curationStatusUpdatedAt"]).queryField("listReferencesByCurationStatusAndUpdatedAt"),
1408
+ index("curationStatusKey").sortKeys(["curationStatusUpdatedAt"]).queryField("listReferencesByCurationStatusKeyAndUpdatedAt"),
1409
+ index("reviewedFeedKey").sortKeys(["updatedAt"]).queryField("listReferencesByReviewedFeedAndUpdatedAt"),
1410
+ ])
1411
+ .authorization((allow) => [
1412
+ allow.groups(categoryWriteGroups).to(["read"]),
1413
+ ]),
1414
+ ReferenceAttachment: modelWithoutSubscriptions({
1415
+ id: a.id().required(),
1416
+ referenceId: a.id().required(),
1417
+ referenceLineageId: a.id().required(),
1418
+ referenceVersionNumber: a.integer(),
1419
+ referenceVersionKey: a.string().required(),
1420
+ role: a.string().required(),
1421
+ sortKey: a.string().required(),
1422
+ storagePath: a.string(),
1423
+ sourceUri: a.string(),
1424
+ filename: a.string(),
1425
+ mediaType: a.string(),
1426
+ byteSize: a.integer(),
1427
+ sha256: a.string(),
1428
+ etag: a.string(),
1429
+ importRunId: a.id(),
1430
+ importedAt: a.datetime(),
1431
+ metadata: a.json(),
1432
+ })
1433
+ .secondaryIndexes((index) => [
1434
+ index("referenceVersionKey").sortKeys(["sortKey"]).queryField("listReferenceAttachmentsByReferenceVersionAndSortKey"),
1435
+ index("referenceLineageId").sortKeys(["sortKey"]).queryField("listReferenceAttachmentsByReferenceLineageAndSortKey"),
1436
+ index("storagePath").queryField("referenceAttachmentByStoragePath"),
1437
+ index("importRunId").sortKeys(["sortKey"]).queryField("listReferenceAttachmentsByImportRunAndSortKey"),
1438
+ ])
1439
+ .authorization((allow) => [
1440
+ allow.groups(categoryWriteGroups).to(["read"]),
1441
+ ]),
1442
+ SemanticNode: modelWithoutSubscriptions({
1443
+ id: a.id().required(),
1444
+ lineageId: a.id().required(),
1445
+ versionNumber: a.integer().required(),
1446
+ previousVersionId: a.id(),
1447
+ versionState: a.string().required(),
1448
+ versionCreatedAt: a.datetime().required(),
1449
+ versionCreatedBy: a.string(),
1450
+ changeReason: a.string(),
1451
+ contentHash: a.string(),
1452
+ nodeKey: a.string().required(),
1453
+ nodeKind: a.string().required(),
1454
+ corpusId: a.id(),
1455
+ categorySetId: a.id(),
1456
+ categoryLineageId: a.id(),
1457
+ categoryKey: a.string(),
1458
+ displayName: a.string(),
1459
+ description: a.string(),
1460
+ aliases: a.string().array(),
1461
+ authorityScore: a.float(),
1462
+ authorityRank: a.integer(),
1463
+ acceptedReferenceMentionCount: a.integer(),
1464
+ distinctSourceKindCount: a.integer(),
1465
+ relationCount: a.integer(),
1466
+ status: a.string().required(),
1467
+ importRunId: a.id(),
1468
+ createdAt: a.datetime(),
1469
+ newsroomFeedKey: a.string(),
1470
+ updatedAt: a.datetime(),
1471
+ })
1472
+ .secondaryIndexes((index) => [
1473
+ index("newsroomFeedKey").sortKeys(["createdAt"]).queryField("listSemanticNodesByNewsroomFeedAndCreatedAt"),
1474
+ index("lineageId").sortKeys(["versionNumber"]).queryField("listSemanticNodesByLineageAndVersion"),
1475
+ index("nodeKey").sortKeys(["versionNumber"]).queryField("listSemanticNodesByNodeKeyAndVersion"),
1476
+ index("corpusId").sortKeys(["nodeKey"]).queryField("listSemanticNodesByCorpusAndNodeKey"),
1477
+ index("importRunId").sortKeys(["nodeKey"]).queryField("listSemanticNodesByImportRunAndNodeKey"),
1478
+ index("versionState").sortKeys(["updatedAt"]).queryField("listSemanticNodesByVersionStateAndUpdatedAt"),
1479
+ ])
1480
+ .authorization((allow) => [
1481
+ allow.groups(categoryWriteGroups).to(["read"]),
1482
+ ]),
1483
+ Message: realtimeModel({
1484
+ id: a.id().required(),
1485
+ messageKind: a.string().required(),
1486
+ messageDomain: a.string().required(),
1487
+ status: a.string().required(),
1488
+ summary: a.string(),
1489
+ source: a.string(),
1490
+ importRunId: a.id(),
1491
+ authorSub: a.string(),
1492
+ authorUserProfileId: a.id(),
1493
+ authorLabel: a.string(),
1494
+ threadId: a.id(),
1495
+ parentMessageId: a.id(),
1496
+ sequenceNumber: a.integer(),
1497
+ role: a.string(),
1498
+ messageType: a.string(),
1499
+ content: a.string(),
1500
+ semanticLayer: a.string(),
1501
+ searchVisibility: a.string(),
1502
+ responseTarget: a.string(),
1503
+ responseStatus: a.string(),
1504
+ responseOwner: a.string(),
1505
+ responseStartedAt: a.datetime(),
1506
+ responseCompletedAt: a.datetime(),
1507
+ responseError: a.string(),
1508
+ metadata: a.json(),
1509
+ createdAt: a.datetime().required(),
1510
+ updatedAt: a.datetime().required(),
1511
+ newsroomFeedKey: a.string(),
1512
+ })
1513
+ .secondaryIndexes((index) => [
1514
+ index("newsroomFeedKey").sortKeys(["createdAt"]).queryField("listMessagesByNewsroomFeedAndCreatedAt"),
1515
+ index("status").sortKeys(["createdAt"]).queryField("listMessagesByStatusAndCreatedAt"),
1516
+ index("messageKind").sortKeys(["createdAt"]).queryField("listMessagesByKindAndCreatedAt"),
1517
+ index("messageDomain").sortKeys(["createdAt"]).queryField("listMessagesByDomainAndCreatedAt"),
1518
+ index("authorSub").sortKeys(["createdAt"]).queryField("listMessagesByAuthorSubAndCreatedAt"),
1519
+ index("authorUserProfileId").sortKeys(["createdAt"]).queryField("listMessagesByAuthorProfileAndCreatedAt"),
1520
+ index("importRunId").sortKeys(["createdAt"]).queryField("listMessagesByImportRunAndCreatedAt"),
1521
+ index("threadId").sortKeys(["sequenceNumber"]).name("messagesByThreadSequence").queryField("listMessagesByThreadAndSequence"),
1522
+ index("threadId").sortKeys(["createdAt"]).name("messagesByThreadCreatedAt").queryField("listMessagesByThreadAndCreatedAt"),
1523
+ index("responseTarget").sortKeys(["responseStatus", "createdAt"]).name("messagesByResponseTargetStatusCreatedAt").queryField("listMessagesByResponseTargetStatusAndCreatedAt"),
1524
+ index("semanticLayer").sortKeys(["createdAt"]).name("messagesBySemanticLayerCreatedAt").queryField("listMessagesBySemanticLayerAndCreatedAt"),
1525
+ index("searchVisibility").sortKeys(["createdAt"]).name("messagesBySearchVisibilityCreatedAt").queryField("listMessagesBySearchVisibilityAndCreatedAt"),
1526
+ ])
1527
+ .authorization((allow) => [
1528
+ allow.groups(categoryWriteGroups).to(categoryAppendOnlyOperations),
1529
+ ]),
1530
+ MessageThread: realtimeModel({
1531
+ id: a.id().required(),
1532
+ threadKind: a.string().required(),
1533
+ status: a.string().required(),
1534
+ title: a.string().required(),
1535
+ summary: a.string(),
1536
+ primaryAnchorKind: a.string(),
1537
+ primaryAnchorId: a.id(),
1538
+ primaryAnchorLineageId: a.id(),
1539
+ primaryAnchorKey: a.string(),
1540
+ createdBySub: a.string(),
1541
+ createdByUserProfileId: a.id(),
1542
+ createdByLabel: a.string(),
1543
+ messageCount: a.integer(),
1544
+ lastMessageId: a.id(),
1545
+ lastMessageAt: a.datetime(),
1546
+ contextDigest: a.string(),
1547
+ activeResponseMessageId: a.id(),
1548
+ responseLockOwner: a.string(),
1549
+ responseLockExpiresAt: a.datetime(),
1550
+ metadata: a.json(),
1551
+ createdAt: a.datetime().required(),
1552
+ updatedAt: a.datetime().required(),
1553
+ newsroomFeedKey: a.string(),
1554
+ })
1555
+ .secondaryIndexes((index) => [
1556
+ index("newsroomFeedKey").sortKeys(["updatedAt"]).queryField("listMessageThreadsByNewsroomFeedAndUpdatedAt"),
1557
+ index("threadKind").sortKeys(["updatedAt"]).queryField("listMessageThreadsByKindAndUpdatedAt"),
1558
+ index("status").sortKeys(["updatedAt"]).queryField("listMessageThreadsByStatusAndUpdatedAt"),
1559
+ index("primaryAnchorKey").sortKeys(["updatedAt"]).name("messageThreadsByAnchorUpdatedAt").queryField("listMessageThreadsByAnchorAndUpdatedAt"),
1560
+ index("createdBySub").sortKeys(["updatedAt"]).queryField("listMessageThreadsByCreatorAndUpdatedAt"),
1561
+ ])
1562
+ .authorization((allow) => [
1563
+ allow.groups(categoryWriteGroups).to(["read", "create", "update"]),
1564
+ ]),
1565
+ ModelAttachment: modelWithoutSubscriptions({
1566
+ id: a.id().required(),
1567
+ ownerKind: a.string().required(),
1568
+ ownerId: a.id().required(),
1569
+ ownerLineageId: a.id(),
1570
+ ownerVersionNumber: a.integer(),
1571
+ ownerVersionKey: a.string(),
1572
+ role: a.string().required(),
1573
+ sortKey: a.string().required(),
1574
+ storagePath: a.string().required(),
1575
+ filename: a.string(),
1576
+ mediaType: a.string().required(),
1577
+ byteSize: a.integer(),
1578
+ sha256: a.string(),
1579
+ etag: a.string(),
1580
+ importRunId: a.id(),
1581
+ createdAt: a.datetime().required(),
1582
+ updatedAt: a.datetime(),
1583
+ status: a.string().required(),
1584
+ })
1585
+ .secondaryIndexes((index) => [
1586
+ index("ownerId").sortKeys(["role", "sortKey"]).queryField("listModelAttachmentsByOwnerRoleAndSortKey"),
1587
+ index("ownerVersionKey").sortKeys(["role", "sortKey"]).queryField("listModelAttachmentsByOwnerVersionRoleAndSortKey"),
1588
+ index("storagePath").queryField("modelAttachmentByStoragePath"),
1589
+ index("importRunId").sortKeys(["ownerKind", "role"]).queryField("listModelAttachmentsByImportRunKindAndRole"),
1590
+ index("role").sortKeys(["status", "createdAt"]).queryField("listModelAttachmentsByRoleStatusAndCreatedAt"),
1591
+ ])
1592
+ .authorization((allow) => [
1593
+ allow.groups(categoryWriteGroups).to(["read"]),
1594
+ ]),
1595
+ SemanticRelationType: modelWithoutSubscriptions({
1596
+ id: a.id().required(),
1597
+ key: a.string().required(),
1598
+ label: a.string().required(),
1599
+ inverseLabel: a.string(),
1600
+ description: a.string(),
1601
+ domain: a.string().required(),
1602
+ status: a.string().required(),
1603
+ allowedSubjectKinds: a.string().array(),
1604
+ allowedObjectKinds: a.string().array(),
1605
+ isDirectional: a.boolean(),
1606
+ isSymmetric: a.boolean(),
1607
+ isTransitive: a.boolean(),
1608
+ contextPackTags: a.string().array(),
1609
+ createdAt: a.datetime().required(),
1610
+ updatedAt: a.datetime().required(),
1611
+ metadata: a.json(),
1612
+ })
1613
+ .secondaryIndexes((index) => [
1614
+ index("key").queryField("semanticRelationTypeByKey"),
1615
+ index("domain").sortKeys(["label"]).queryField("listSemanticRelationTypesByDomainAndLabel"),
1616
+ index("status").sortKeys(["label"]).queryField("listSemanticRelationTypesByStatusAndLabel"),
1617
+ ])
1618
+ .authorization((allow) => [
1619
+ allow.groups(categoryWriteGroups),
1620
+ ]),
1621
+ SemanticRelation: modelWithoutSubscriptions({
1622
+ id: a.id().required(),
1623
+ relationState: a.string().required(),
1624
+ predicate: a.string().required(),
1625
+ relationTypeId: a.id(),
1626
+ relationTypeKey: a.string(),
1627
+ relationDomain: a.string(),
1628
+ subjectKind: a.string().required(),
1629
+ subjectId: a.id().required(),
1630
+ subjectLineageId: a.id().required(),
1631
+ subjectVersionNumber: a.integer(),
1632
+ objectKind: a.string().required(),
1633
+ objectId: a.id().required(),
1634
+ objectLineageId: a.id().required(),
1635
+ objectVersionNumber: a.integer(),
1636
+ subjectStateKey: a.string().required(),
1637
+ objectStateKey: a.string().required(),
1638
+ objectSubjectStateKey: a.string().required(),
1639
+ predicateObjectStateKey: a.string().required(),
1640
+ subjectVersionKey: a.string().required(),
1641
+ objectVersionKey: a.string().required(),
1642
+ score: a.float(),
1643
+ confidence: a.float(),
1644
+ rank: a.integer(),
1645
+ classifierId: a.string(),
1646
+ modelVersion: a.string(),
1647
+ reviewRecommended: a.boolean(),
1648
+ sourceSnapshotId: a.string(),
1649
+ importRunId: a.id(),
1650
+ importedAt: a.datetime(),
1651
+ createdAt: a.datetime(),
1652
+ updatedAt: a.datetime(),
1653
+ newsroomFeedKey: a.string(),
1654
+ metadata: a.json(),
1655
+ })
1656
+ .secondaryIndexes((index) => [
1657
+ index("newsroomFeedKey").sortKeys(["createdAt"]).queryField("listSemanticRelationsByNewsroomFeedAndCreatedAt"),
1658
+ index("subjectStateKey").sortKeys(["predicateObjectStateKey"]).queryField("listSemanticRelationsBySubjectState"),
1659
+ index("objectStateKey").sortKeys(["predicate"]).queryField("listSemanticRelationsByObjectState"),
1660
+ index("objectSubjectStateKey").sortKeys(["score"]).queryField("listSemanticRelationsByObjectSubjectStateAndScore"),
1661
+ index("predicateObjectStateKey").sortKeys(["score"]).queryField("listSemanticRelationsByPredicateObjectStateAndScore"),
1662
+ index("subjectVersionKey").sortKeys(["predicateObjectStateKey"]).queryField("listSemanticRelationsBySubjectVersion"),
1663
+ index("importRunId").sortKeys(["importedAt"]).queryField("listSemanticRelationsByImportRunAndImportedAt"),
1664
+ index("relationTypeKey").sortKeys(["importedAt"]).queryField("listSemanticRelationsByTypeAndImportedAt"),
1665
+ index("relationDomain").sortKeys(["importedAt"]).queryField("listSemanticRelationsByDomainAndImportedAt"),
1666
+ ])
1667
+ .authorization((allow) => [
1668
+ allow.groups(categoryWriteGroups).to(categoryAppendOnlyOperations),
1669
+ ]),
1670
+ Item: modelWithoutSubscriptions({
1671
+ id: a.id().required(),
1672
+ lineageId: a.id().required(),
1673
+ tenantId: a.string(),
1674
+ versionNumber: a.integer().required(),
1675
+ previousVersionId: a.id(),
1676
+ versionState: a.string().required(),
1677
+ versionCreatedAt: a.datetime().required(),
1678
+ versionCreatedBy: a.string(),
1679
+ changeReason: a.string(),
1680
+ contentHash: a.string(),
1681
+ type: a.string().required(),
1682
+ stage: a.string(),
1683
+ status: a.string().required(),
1684
+ typeStatus: a.string().required(),
1685
+ slug: a.string().required(),
1686
+ tenantSlug: a.string(),
1687
+ shortSlug: a.string(),
1688
+ section: a.string(),
1689
+ sectionStatus: a.string(),
1690
+ title: a.string(),
1691
+ headline: a.string(),
1692
+ deck: a.string(),
1693
+ body: a.string().array(),
1694
+ bodyMarkus: a.string(),
1695
+ bodyIr: a.json(),
1696
+ aliases: a.string().array(),
1697
+ metadata: a.json(),
1698
+ byline: a.string(),
1699
+ dateline: a.string(),
1700
+ publishedAt: a.datetime(),
1701
+ editionDate: a.string(),
1702
+ sortTitle: a.string(),
1703
+ pullQuotes: a.string().array(),
1704
+ layout: a.json(),
1705
+ editorial: a.json(),
1706
+ updatedAt: a.datetime(),
1707
+ tags: a.hasMany("ItemTag", "itemId"),
1708
+ mediaAssets: a.hasMany("MediaAsset", "itemId"),
1709
+ ...(includeEditions ? { editionItems: a.hasMany("EditionItem", "itemId") } : {}),
1710
+ })
1711
+ .secondaryIndexes((index) => [
1712
+ index("lineageId").sortKeys(["versionNumber"]).queryField("listItemsByLineageAndVersion"),
1713
+ index("slug").queryField("itemBySlug"),
1714
+ index("tenantSlug").queryField("itemByTenantSlug"),
1715
+ index("typeStatus").sortKeys(["publishedAt"]).queryField("listItemsByTypeStatusAndPublishedAt"),
1716
+ index("sectionStatus").sortKeys(["publishedAt"]).queryField("listItemsBySectionStatusAndPublishedAt"),
1717
+ index("versionState").sortKeys(["updatedAt"]).queryField("listItemsByVersionStateAndUpdatedAt"),
1718
+ index("stage").sortKeys(["updatedAt"]).queryField("listItemsByStageAndUpdatedAt"),
1719
+ ])
1720
+ .authorization((allow) => [
1721
+ allow.groups(contentWriteGroups),
1722
+ ]),
1723
+ Tag: modelWithoutSubscriptions({
1724
+ id: a.id().required(),
1725
+ slug: a.string().required(),
1726
+ label: a.string().required(),
1727
+ type: a.string(),
1728
+ description: a.string(),
1729
+ items: a.hasMany("ItemTag", "tagId"),
1730
+ })
1731
+ .secondaryIndexes((index) => [
1732
+ index("slug").queryField("tagBySlug"),
1733
+ index("type").sortKeys(["label"]).queryField("listTagsByTypeAndLabel"),
1734
+ ])
1735
+ .authorization((allow) => [
1736
+ allow.groups(contentWriteGroups),
1737
+ ]),
1738
+ ItemTag: modelWithoutSubscriptions({
1739
+ id: a.id().required(),
1740
+ itemId: a.id().required(),
1741
+ tagId: a.id().required(),
1742
+ itemType: a.string().required(),
1743
+ itemStatus: a.string().required(),
1744
+ tagSlug: a.string().required(),
1745
+ publishedAt: a.datetime(),
1746
+ item: a.belongsTo("Item", "itemId"),
1747
+ tag: a.belongsTo("Tag", "tagId"),
1748
+ })
1749
+ .secondaryIndexes((index) => [
1750
+ index("itemId").sortKeys(["tagSlug"]).queryField("listItemTagsByItemAndTag"),
1751
+ index("tagId").sortKeys(["publishedAt"]).queryField("listItemTagsByTagAndPublishedAt"),
1752
+ ])
1753
+ .authorization((allow) => [
1754
+ allow.groups(contentWriteGroups),
1755
+ ]),
1756
+ MediaAsset: modelWithoutSubscriptions({
1757
+ id: a.id().required(),
1758
+ itemId: a.id().required(),
1759
+ tenantId: a.string(),
1760
+ type: a.string().required(),
1761
+ role: a.string().required(),
1762
+ sortKey: a.string().required(),
1763
+ storagePath: a.string(),
1764
+ externalUrl: a.string(),
1765
+ alt: a.string().required(),
1766
+ caption: a.string(),
1767
+ credit: a.string(),
1768
+ width: a.integer(),
1769
+ height: a.integer(),
1770
+ aspectRatio: a.float(),
1771
+ focalX: a.float(),
1772
+ focalY: a.float(),
1773
+ minHeight: a.integer(),
1774
+ preferredHeight: a.integer(),
1775
+ maxHeight: a.integer(),
1776
+ crop: a.string(),
1777
+ wrapsText: a.boolean(),
1778
+ metadata: a.json(),
1779
+ item: a.belongsTo("Item", "itemId"),
1780
+ })
1781
+ .secondaryIndexes((index) => [
1782
+ index("itemId").sortKeys(["sortKey"]).queryField("listMediaAssetsByItemAndSortKey"),
1783
+ index("role").sortKeys(["itemId"]).queryField("listMediaAssetsByRoleAndItem"),
1784
+ ])
1785
+ .authorization((allow) => [
1786
+ allow.groups(contentWriteGroups),
1787
+ ]),
1788
+ Edition: modelWithoutSubscriptions({
1789
+ id: a.id().required(),
1790
+ lineageId: a.id().required(),
1791
+ versionNumber: a.integer().required(),
1792
+ previousVersionId: a.id(),
1793
+ versionState: a.string().required(),
1794
+ versionCreatedAt: a.datetime().required(),
1795
+ versionCreatedBy: a.string(),
1796
+ changeReason: a.string(),
1797
+ contentHash: a.string(),
1798
+ slug: a.string().required(),
1799
+ title: a.string().required(),
1800
+ status: a.string().required(),
1801
+ editionDate: a.string().required(),
1802
+ publishedAt: a.datetime(),
1803
+ description: a.string(),
1804
+ layoutPlan: a.json(),
1805
+ metadata: a.json(),
1806
+ items: a.hasMany("EditionItem", "editionId"),
1807
+ })
1808
+ .secondaryIndexes((index) => [
1809
+ index("lineageId").sortKeys(["versionNumber"]).queryField("listEditionsByLineageAndVersion"),
1810
+ index("slug").queryField("editionBySlug"),
1811
+ index("status").sortKeys(["editionDate"]).queryField("listEditionsByStatusAndEditionDate"),
1812
+ index("status").sortKeys(["publishedAt"]).queryField("listEditionsByStatusAndPublishedAt"),
1813
+ index("versionState").sortKeys(["publishedAt"]).queryField("listEditionsByVersionStateAndPublishedAt"),
1814
+ ])
1815
+ .authorization((allow) => [
1816
+ allow.groups(contentWriteGroups),
1817
+ ]),
1818
+ EditionItem: modelWithoutSubscriptions({
1819
+ id: a.id().required(),
1820
+ editionId: a.id().required(),
1821
+ editionLineageId: a.id(),
1822
+ itemId: a.id().required(),
1823
+ itemLineageId: a.id(),
1824
+ placementKey: a.string().required(),
1825
+ sortKey: a.string().required(),
1826
+ pageNumber: a.integer(),
1827
+ priority: a.integer(),
1828
+ metadata: a.json(),
1829
+ edition: a.belongsTo("Edition", "editionId"),
1830
+ item: a.belongsTo("Item", "itemId"),
1831
+ })
1832
+ .secondaryIndexes((index) => [
1833
+ index("editionId").sortKeys(["sortKey"]).queryField("listEditionItemsByEditionAndSortKey"),
1834
+ index("itemId").sortKeys(["editionId"]).queryField("listEditionItemsByItemAndEdition"),
1835
+ ])
1836
+ .authorization((allow) => [
1837
+ allow.groups(contentWriteGroups),
1838
+ ]),
1839
+ PublishedItem: modelWithoutSubscriptions({
1840
+ id: a.id().required(),
1841
+ sourceItemId: a.id().required(),
1842
+ itemLineageId: a.id().required(),
1843
+ tenantId: a.string(),
1844
+ versionNumber: a.integer().required(),
1845
+ type: a.string().required(),
1846
+ status: a.string().required(),
1847
+ typeStatus: a.string().required(),
1848
+ slug: a.string().required(),
1849
+ tenantSlug: a.string(),
1850
+ shortSlug: a.string(),
1851
+ section: a.string(),
1852
+ sectionStatus: a.string(),
1853
+ title: a.string(),
1854
+ headline: a.string(),
1855
+ deck: a.string(),
1856
+ body: a.string().array(),
1857
+ bodyMarkus: a.string(),
1858
+ bodyIr: a.json(),
1859
+ aliases: a.string().array(),
1860
+ metadata: a.json(),
1861
+ byline: a.string(),
1862
+ dateline: a.string(),
1863
+ publishedAt: a.datetime(),
1864
+ editionDate: a.string(),
1865
+ sortTitle: a.string(),
1866
+ pullQuotes: a.string().array(),
1867
+ layout: a.json(),
1868
+ editorial: a.json(),
1869
+ })
1870
+ .secondaryIndexes((index) => [
1871
+ index("slug").queryField("publishedItemBySlug"),
1872
+ index("tenantSlug").queryField("publishedItemByTenantSlug"),
1873
+ index("typeStatus").sortKeys(["publishedAt"]).queryField("listPublishedItemsByTypeStatusAndPublishedAt"),
1874
+ index("sectionStatus").sortKeys(["publishedAt"]).queryField("listPublishedItemsBySectionStatusAndPublishedAt"),
1875
+ index("itemLineageId").sortKeys(["versionNumber"]).queryField("listPublishedItemsByLineageAndVersion"),
1876
+ ])
1877
+ .authorization((allow) => [
1878
+ allow.guest().to(["read"]),
1879
+ allow.groups(contentWriteGroups),
1880
+ ]),
1881
+ PublishedMediaAsset: modelWithoutSubscriptions({
1882
+ id: a.id().required(),
1883
+ sourceMediaAssetId: a.id().required(),
1884
+ tenantId: a.string(),
1885
+ publishedItemId: a.id().required(),
1886
+ sourceItemId: a.id().required(),
1887
+ itemLineageId: a.id().required(),
1888
+ type: a.string().required(),
1889
+ role: a.string().required(),
1890
+ sortKey: a.string().required(),
1891
+ storagePath: a.string(),
1892
+ externalUrl: a.string(),
1893
+ alt: a.string().required(),
1894
+ caption: a.string(),
1895
+ credit: a.string(),
1896
+ width: a.integer(),
1897
+ height: a.integer(),
1898
+ aspectRatio: a.float(),
1899
+ focalX: a.float(),
1900
+ focalY: a.float(),
1901
+ minHeight: a.integer(),
1902
+ preferredHeight: a.integer(),
1903
+ maxHeight: a.integer(),
1904
+ crop: a.string(),
1905
+ wrapsText: a.boolean(),
1906
+ metadata: a.json(),
1907
+ })
1908
+ .secondaryIndexes((index) => [
1909
+ index("publishedItemId").sortKeys(["sortKey"]).queryField("listPublishedMediaAssetsByItemAndSortKey"),
1910
+ index("role").sortKeys(["publishedItemId"]).queryField("listPublishedMediaAssetsByRoleAndItem"),
1911
+ ])
1912
+ .authorization((allow) => [
1913
+ allow.guest().to(["read"]),
1914
+ allow.groups(contentWriteGroups),
1915
+ ]),
1916
+ PublishedEdition: modelWithoutSubscriptions({
1917
+ id: a.id().required(),
1918
+ sourceEditionId: a.id().required(),
1919
+ editionLineageId: a.id().required(),
1920
+ versionNumber: a.integer().required(),
1921
+ slug: a.string().required(),
1922
+ title: a.string().required(),
1923
+ status: a.string().required(),
1924
+ editionDate: a.string().required(),
1925
+ publishedAt: a.datetime(),
1926
+ description: a.string(),
1927
+ layoutPlan: a.json(),
1928
+ metadata: a.json(),
1929
+ })
1930
+ .secondaryIndexes((index) => [
1931
+ index("slug").queryField("publishedEditionBySlug"),
1932
+ index("status").sortKeys(["editionDate"]).queryField("listPublishedEditionsByStatusAndEditionDate"),
1933
+ index("status").sortKeys(["publishedAt"]).queryField("listPublishedEditionsByStatusAndPublishedAt"),
1934
+ index("editionLineageId").sortKeys(["versionNumber"]).queryField("listPublishedEditionsByLineageAndVersion"),
1935
+ ])
1936
+ .authorization((allow) => [
1937
+ allow.guest().to(["read"]),
1938
+ allow.groups(contentWriteGroups),
1939
+ ]),
1940
+ PublishedEditionItem: modelWithoutSubscriptions({
1941
+ id: a.id().required(),
1942
+ publishedEditionId: a.id().required(),
1943
+ publishedItemId: a.id().required(),
1944
+ sourceEditionItemId: a.id().required(),
1945
+ sourceEditionId: a.id().required(),
1946
+ sourceItemId: a.id().required(),
1947
+ editionLineageId: a.id().required(),
1948
+ itemLineageId: a.id().required(),
1949
+ placementKey: a.string().required(),
1950
+ sortKey: a.string().required(),
1951
+ pageNumber: a.integer(),
1952
+ priority: a.integer(),
1953
+ metadata: a.json(),
1954
+ })
1955
+ .secondaryIndexes((index) => [
1956
+ index("publishedEditionId").sortKeys(["sortKey"]).queryField("listPublishedEditionItemsByEditionAndSortKey"),
1957
+ index("publishedItemId").sortKeys(["publishedEditionId"]).queryField("listPublishedEditionItemsByItemAndEdition"),
1958
+ ])
1959
+ .authorization((allow) => [
1960
+ allow.guest().to(["read"]),
1961
+ allow.groups(contentWriteGroups),
1962
+ ]),
1963
+ PublishedCategorySet: modelWithoutSubscriptions({
1964
+ id: a.id().required(),
1965
+ sourceCategorySetId: a.id().required(),
1966
+ categorySetLineageId: a.id().required(),
1967
+ versionNumber: a.integer().required(),
1968
+ corpusId: a.id().required(),
1969
+ classifierId: a.string().required(),
1970
+ displayName: a.string().required(),
1971
+ description: a.string(),
1972
+ status: a.string().required(),
1973
+ generatedAt: a.datetime(),
1974
+ publishedAt: a.datetime(),
1975
+ categoryCount: a.integer(),
1976
+ metadata: a.json(),
1977
+ })
1978
+ .secondaryIndexes((index) => [
1979
+ index("status").sortKeys(["displayName"]).queryField("listPublishedCategorySetsByStatusAndName"),
1980
+ index("classifierId").sortKeys(["displayName"]).queryField("listPublishedCategorySetsByClassifierAndName"),
1981
+ index("categorySetLineageId").sortKeys(["versionNumber"]).queryField("listPublishedCategorySetsByLineageAndVersion"),
1982
+ ])
1983
+ .authorization((allow) => [
1984
+ allow.guest().to(["read"]),
1985
+ allow.groups(contentWriteGroups),
1986
+ ]),
1987
+ PublishedCategory: modelWithoutSubscriptions({
1988
+ id: a.id().required(),
1989
+ sourceCategoryId: a.id().required(),
1990
+ publishedCategorySetId: a.id().required(),
1991
+ categoryLineageId: a.id().required(),
1992
+ categorySetLineageId: a.id().required(),
1993
+ versionNumber: a.integer().required(),
1994
+ corpusId: a.id().required(),
1995
+ categoryKey: a.string().required(),
1996
+ parentCategoryId: a.id(),
1997
+ parentCategoryKey: a.string(),
1998
+ displayName: a.string().required(),
1999
+ shortTitle: a.string(),
2000
+ subtitle: a.string(),
2001
+ description: a.string(),
2002
+ aliases: a.string().array(),
2003
+ status: a.string().required(),
2004
+ seedItemIds: a.string().array(),
2005
+ holdoutItemIds: a.string().array(),
2006
+ rank: a.integer(),
2007
+ depth: a.integer(),
2008
+ isPinned: a.boolean(),
2009
+ metadata: a.json(),
2010
+ })
2011
+ .secondaryIndexes((index) => [
2012
+ index("publishedCategorySetId").sortKeys(["categoryKey"]).queryField("listPublishedCategoriesBySetAndKey"),
2013
+ index("parentCategoryId").sortKeys(["rank"]).queryField("listPublishedCategoriesByParentAndRank"),
2014
+ index("parentCategoryKey").sortKeys(["rank"]).queryField("listPublishedCategoriesByParentKeyAndRank"),
2015
+ index("categoryKey").sortKeys(["publishedCategorySetId"]).queryField("listPublishedCategoriesByKeyAndSet"),
2016
+ ])
2017
+ .authorization((allow) => [
2018
+ allow.guest().to(["read"]),
2019
+ allow.groups(contentWriteGroups),
2020
+ ]),
2021
+ ...editorialChecksSchemaDefinitions,
2022
+ ...monitoringViewSchemaDefinitions,
2023
+ };
2024
+ if (!includeEditions) {
2025
+ const mutableDefinitions = definitions;
2026
+ for (const modelName of OPTIONAL_MODEL_GROUPS.editions)
2027
+ delete mutableDefinitions[modelName];
2028
+ }
2029
+ return definitions;
2030
+ }
2031
+ export function baseModelNames(excludedGroups = []) {
2032
+ return Object.keys(buildBaseDefinitions(!excludedGroups.includes("editions")));
2033
+ }
2034
+ const baseDefinitions = buildBaseDefinitions(true);
2008
2035
  export const schema = a.schema(baseDefinitions).authorization((allow) => [
2009
2036
  allow.resource(assignmentAction).to(["query", "mutate"]),
2010
2037
  allow.resource(categoryAction),
@@ -2027,3 +2054,18 @@ export function schemaWithPlugins(pluginDefinitions) {
2027
2054
  allow.resource(procedureAction),
2028
2055
  ]);
2029
2056
  }
2057
+ /** The schema of a site that leaves optional model groups out of its first deploy. */
2058
+ export function schemaExcludingGroups(excludedGroups, pluginDefinitions = {}) {
2059
+ const definitions = buildBaseDefinitions(!excludedGroups.includes("editions"));
2060
+ const hasPlugins = Object.keys(pluginDefinitions).length > 0;
2061
+ return a.schema({ ...definitions, ...pluginDefinitions }).authorization((allow) => [
2062
+ allow.resource(assignmentAction).to(["query", "mutate"]),
2063
+ allow.resource(categoryAction),
2064
+ allow.resource(contentActions),
2065
+ allow.resource(manageUserRole),
2066
+ allow.resource(modelAttachmentUpload),
2067
+ allow.resource(newsroomSummary),
2068
+ allow.resource(procedureAction),
2069
+ ...(hasPlugins ? [] : [allow.resource(publicForms).to(["mutate"])]),
2070
+ ]);
2071
+ }