@company-semantics/contracts 2.14.0 → 2.16.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.
package/package.json
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
// AUTO-GENERATED — do not edit. Run pnpm generate:spec-hash to regenerate.
|
|
2
|
-
export const SPEC_HASH = '
|
|
3
|
-
export const SPEC_HASH_FULL = '
|
|
2
|
+
export const SPEC_HASH = '7e7e7989604b' as const;
|
|
3
|
+
export const SPEC_HASH_FULL = '7e7e7989604b04f9af766c8ebcfe875445c12cec0fa4c4a071680454b635ea2c' as const;
|
package/src/api/generated.ts
CHANGED
|
@@ -2415,6 +2415,144 @@ export interface paths {
|
|
|
2415
2415
|
patch?: never;
|
|
2416
2416
|
trace?: never;
|
|
2417
2417
|
};
|
|
2418
|
+
"/api/me/meetings/recordings/{id}/sharing": {
|
|
2419
|
+
parameters: {
|
|
2420
|
+
query?: never;
|
|
2421
|
+
header?: never;
|
|
2422
|
+
path?: never;
|
|
2423
|
+
cookie?: never;
|
|
2424
|
+
};
|
|
2425
|
+
/** Get a recording sharing state: visibility, ACL grants, caller access */
|
|
2426
|
+
get: operations["getMeetingRecordingSharing"];
|
|
2427
|
+
put?: never;
|
|
2428
|
+
post?: never;
|
|
2429
|
+
delete?: never;
|
|
2430
|
+
options?: never;
|
|
2431
|
+
head?: never;
|
|
2432
|
+
patch?: never;
|
|
2433
|
+
trace?: never;
|
|
2434
|
+
};
|
|
2435
|
+
"/api/me/meetings/recordings/{id}/sharing/acl": {
|
|
2436
|
+
parameters: {
|
|
2437
|
+
query?: never;
|
|
2438
|
+
header?: never;
|
|
2439
|
+
path?: never;
|
|
2440
|
+
cookie?: never;
|
|
2441
|
+
};
|
|
2442
|
+
get?: never;
|
|
2443
|
+
put?: never;
|
|
2444
|
+
/** Grant a principal access to a recording */
|
|
2445
|
+
post: operations["addMeetingRecordingAclEntry"];
|
|
2446
|
+
delete?: never;
|
|
2447
|
+
options?: never;
|
|
2448
|
+
head?: never;
|
|
2449
|
+
patch?: never;
|
|
2450
|
+
trace?: never;
|
|
2451
|
+
};
|
|
2452
|
+
"/api/me/meetings/recordings/{id}/sharing/acl/{grantId}": {
|
|
2453
|
+
parameters: {
|
|
2454
|
+
query?: never;
|
|
2455
|
+
header?: never;
|
|
2456
|
+
path?: never;
|
|
2457
|
+
cookie?: never;
|
|
2458
|
+
};
|
|
2459
|
+
get?: never;
|
|
2460
|
+
/** Change an existing ACL grant access level */
|
|
2461
|
+
put: operations["updateMeetingRecordingAclEntry"];
|
|
2462
|
+
post?: never;
|
|
2463
|
+
/** Revoke an ACL grant on a recording */
|
|
2464
|
+
delete: operations["deleteMeetingRecordingAclEntry"];
|
|
2465
|
+
options?: never;
|
|
2466
|
+
head?: never;
|
|
2467
|
+
patch?: never;
|
|
2468
|
+
trace?: never;
|
|
2469
|
+
};
|
|
2470
|
+
"/api/{entityType}/{id}/acl": {
|
|
2471
|
+
parameters: {
|
|
2472
|
+
query?: never;
|
|
2473
|
+
header?: never;
|
|
2474
|
+
path?: never;
|
|
2475
|
+
cookie?: never;
|
|
2476
|
+
};
|
|
2477
|
+
/** List active ACL grants + visibility + owner for an entity */
|
|
2478
|
+
get: operations["getEntityAcl"];
|
|
2479
|
+
put?: never;
|
|
2480
|
+
post?: never;
|
|
2481
|
+
delete?: never;
|
|
2482
|
+
options?: never;
|
|
2483
|
+
head?: never;
|
|
2484
|
+
patch?: never;
|
|
2485
|
+
trace?: never;
|
|
2486
|
+
};
|
|
2487
|
+
"/api/{entityType}/{id}/acl/{principalType}/{principalId}": {
|
|
2488
|
+
parameters: {
|
|
2489
|
+
query?: never;
|
|
2490
|
+
header?: never;
|
|
2491
|
+
path?: never;
|
|
2492
|
+
cookie?: never;
|
|
2493
|
+
};
|
|
2494
|
+
get?: never;
|
|
2495
|
+
/** Grant (or update) a principal access to an entity */
|
|
2496
|
+
put: operations["upsertEntityAclGrant"];
|
|
2497
|
+
post?: never;
|
|
2498
|
+
/** Revoke a principal’s access to an entity */
|
|
2499
|
+
delete: operations["revokeEntityAclGrant"];
|
|
2500
|
+
options?: never;
|
|
2501
|
+
head?: never;
|
|
2502
|
+
patch?: never;
|
|
2503
|
+
trace?: never;
|
|
2504
|
+
};
|
|
2505
|
+
"/api/{entityType}/{id}/visibility": {
|
|
2506
|
+
parameters: {
|
|
2507
|
+
query?: never;
|
|
2508
|
+
header?: never;
|
|
2509
|
+
path?: never;
|
|
2510
|
+
cookie?: never;
|
|
2511
|
+
};
|
|
2512
|
+
get?: never;
|
|
2513
|
+
put?: never;
|
|
2514
|
+
post?: never;
|
|
2515
|
+
delete?: never;
|
|
2516
|
+
options?: never;
|
|
2517
|
+
head?: never;
|
|
2518
|
+
/** Change the visibility tier of an entity (owner-only) */
|
|
2519
|
+
patch: operations["patchEntityVisibility"];
|
|
2520
|
+
trace?: never;
|
|
2521
|
+
};
|
|
2522
|
+
"/api/{entityType}/{id}/transfer-ownership": {
|
|
2523
|
+
parameters: {
|
|
2524
|
+
query?: never;
|
|
2525
|
+
header?: never;
|
|
2526
|
+
path?: never;
|
|
2527
|
+
cookie?: never;
|
|
2528
|
+
};
|
|
2529
|
+
get?: never;
|
|
2530
|
+
put?: never;
|
|
2531
|
+
/** Transfer ownership of an entity to another user (owner-only) */
|
|
2532
|
+
post: operations["transferEntityOwnership"];
|
|
2533
|
+
delete?: never;
|
|
2534
|
+
options?: never;
|
|
2535
|
+
head?: never;
|
|
2536
|
+
patch?: never;
|
|
2537
|
+
trace?: never;
|
|
2538
|
+
};
|
|
2539
|
+
"/api/{entityType}/{id}/effective-access": {
|
|
2540
|
+
parameters: {
|
|
2541
|
+
query?: never;
|
|
2542
|
+
header?: never;
|
|
2543
|
+
path?: never;
|
|
2544
|
+
cookie?: never;
|
|
2545
|
+
};
|
|
2546
|
+
get?: never;
|
|
2547
|
+
put?: never;
|
|
2548
|
+
/** Resolve a principal’s effective access on an entity */
|
|
2549
|
+
post: operations["getEntityEffectiveAccess"];
|
|
2550
|
+
delete?: never;
|
|
2551
|
+
options?: never;
|
|
2552
|
+
head?: never;
|
|
2553
|
+
patch?: never;
|
|
2554
|
+
trace?: never;
|
|
2555
|
+
};
|
|
2418
2556
|
"/api/internal-admin/impersonate/start": {
|
|
2419
2557
|
parameters: {
|
|
2420
2558
|
query?: never;
|
|
@@ -4302,6 +4440,73 @@ export interface components {
|
|
|
4302
4440
|
*/
|
|
4303
4441
|
visibility: "meeting_only" | "shared" | "org" | "finalized_private";
|
|
4304
4442
|
};
|
|
4443
|
+
/** @description A meeting recording's visibility, ACL grants, and the caller's effective access. */
|
|
4444
|
+
MeetingRecordingSharingState: {
|
|
4445
|
+
/** @description ULID; unified trace key for the recording (INV-MTG-7). */
|
|
4446
|
+
recordingId: string;
|
|
4447
|
+
/**
|
|
4448
|
+
* @description Visibility band for the finalized meeting projection. Default `meeting_only`.
|
|
4449
|
+
* @enum {string}
|
|
4450
|
+
*/
|
|
4451
|
+
visibility: "meeting_only" | "shared" | "org" | "finalized_private";
|
|
4452
|
+
acl: {
|
|
4453
|
+
/** Format: uuid */
|
|
4454
|
+
id: string;
|
|
4455
|
+
/** @enum {string} */
|
|
4456
|
+
principalType: "user" | "unit" | "org";
|
|
4457
|
+
/** Format: uuid */
|
|
4458
|
+
principalId: string;
|
|
4459
|
+
/** @enum {string} */
|
|
4460
|
+
accessLevel: "viewer" | "commenter" | "editor";
|
|
4461
|
+
grantedByUserId: string | null;
|
|
4462
|
+
/** Format: date-time */
|
|
4463
|
+
grantedAt: string;
|
|
4464
|
+
}[];
|
|
4465
|
+
effectiveAccess: {
|
|
4466
|
+
/** @enum {string} */
|
|
4467
|
+
level: "owner" | "editor" | "commenter" | "viewer" | "none";
|
|
4468
|
+
source: string;
|
|
4469
|
+
};
|
|
4470
|
+
};
|
|
4471
|
+
/** @description The id of the newly created meeting ACL grant. */
|
|
4472
|
+
AddMeetingRecordingAclResponse: {
|
|
4473
|
+
/** Format: uuid */
|
|
4474
|
+
id: string;
|
|
4475
|
+
};
|
|
4476
|
+
/** @description Grant a principal access to a meeting recording. */
|
|
4477
|
+
AddMeetingRecordingAclRequest: {
|
|
4478
|
+
/** @enum {string} */
|
|
4479
|
+
principalType: "user" | "unit" | "org";
|
|
4480
|
+
/** Format: uuid */
|
|
4481
|
+
principalId: string;
|
|
4482
|
+
/** @enum {string} */
|
|
4483
|
+
accessLevel: "viewer" | "commenter" | "editor";
|
|
4484
|
+
};
|
|
4485
|
+
/** @description Change an existing meeting ACL grant access level. */
|
|
4486
|
+
UpdateMeetingRecordingAclRequest: {
|
|
4487
|
+
/** @enum {string} */
|
|
4488
|
+
accessLevel: "viewer" | "commenter" | "editor";
|
|
4489
|
+
};
|
|
4490
|
+
AclGrantRequest: {
|
|
4491
|
+
/** @enum {string} */
|
|
4492
|
+
access_level: "editor" | "commenter" | "viewer";
|
|
4493
|
+
};
|
|
4494
|
+
VisibilityPatchRequest: {
|
|
4495
|
+
/** @enum {string} */
|
|
4496
|
+
tier: "private" | "unit" | "org";
|
|
4497
|
+
};
|
|
4498
|
+
OwnerTransferRequest: {
|
|
4499
|
+
/** Format: uuid */
|
|
4500
|
+
new_owner_user_id: string;
|
|
4501
|
+
};
|
|
4502
|
+
EffectiveAccessRequest: {
|
|
4503
|
+
principal: {
|
|
4504
|
+
/** @enum {string} */
|
|
4505
|
+
type: "user" | "unit" | "org";
|
|
4506
|
+
/** Format: uuid */
|
|
4507
|
+
id: string;
|
|
4508
|
+
};
|
|
4509
|
+
};
|
|
4305
4510
|
ImpersonationSessionResponse: {
|
|
4306
4511
|
session: {
|
|
4307
4512
|
impersonationSessionId: string;
|
|
@@ -8223,6 +8428,330 @@ export interface operations {
|
|
|
8223
8428
|
};
|
|
8224
8429
|
};
|
|
8225
8430
|
};
|
|
8431
|
+
getMeetingRecordingSharing: {
|
|
8432
|
+
parameters: {
|
|
8433
|
+
query?: never;
|
|
8434
|
+
header?: never;
|
|
8435
|
+
path: {
|
|
8436
|
+
id: string;
|
|
8437
|
+
};
|
|
8438
|
+
cookie?: never;
|
|
8439
|
+
};
|
|
8440
|
+
requestBody?: never;
|
|
8441
|
+
responses: {
|
|
8442
|
+
/** @description Visibility, ACL grants, and the caller effective access */
|
|
8443
|
+
200: {
|
|
8444
|
+
headers: {
|
|
8445
|
+
[name: string]: unknown;
|
|
8446
|
+
};
|
|
8447
|
+
content: {
|
|
8448
|
+
"application/json": components["schemas"]["MeetingRecordingSharingState"];
|
|
8449
|
+
};
|
|
8450
|
+
};
|
|
8451
|
+
/** @description Recording not found or not owned by this user */
|
|
8452
|
+
404: {
|
|
8453
|
+
headers: {
|
|
8454
|
+
[name: string]: unknown;
|
|
8455
|
+
};
|
|
8456
|
+
content?: never;
|
|
8457
|
+
};
|
|
8458
|
+
};
|
|
8459
|
+
};
|
|
8460
|
+
addMeetingRecordingAclEntry: {
|
|
8461
|
+
parameters: {
|
|
8462
|
+
query?: never;
|
|
8463
|
+
header?: never;
|
|
8464
|
+
path: {
|
|
8465
|
+
id: string;
|
|
8466
|
+
};
|
|
8467
|
+
cookie?: never;
|
|
8468
|
+
};
|
|
8469
|
+
requestBody: {
|
|
8470
|
+
content: {
|
|
8471
|
+
"application/json": components["schemas"]["AddMeetingRecordingAclRequest"];
|
|
8472
|
+
};
|
|
8473
|
+
};
|
|
8474
|
+
responses: {
|
|
8475
|
+
/** @description ACL grant created */
|
|
8476
|
+
201: {
|
|
8477
|
+
headers: {
|
|
8478
|
+
[name: string]: unknown;
|
|
8479
|
+
};
|
|
8480
|
+
content: {
|
|
8481
|
+
"application/json": components["schemas"]["AddMeetingRecordingAclResponse"];
|
|
8482
|
+
};
|
|
8483
|
+
};
|
|
8484
|
+
/** @description Recording not found or not owned by this user */
|
|
8485
|
+
404: {
|
|
8486
|
+
headers: {
|
|
8487
|
+
[name: string]: unknown;
|
|
8488
|
+
};
|
|
8489
|
+
content?: never;
|
|
8490
|
+
};
|
|
8491
|
+
};
|
|
8492
|
+
};
|
|
8493
|
+
updateMeetingRecordingAclEntry: {
|
|
8494
|
+
parameters: {
|
|
8495
|
+
query?: never;
|
|
8496
|
+
header?: never;
|
|
8497
|
+
path: {
|
|
8498
|
+
id: string;
|
|
8499
|
+
grantId: string;
|
|
8500
|
+
};
|
|
8501
|
+
cookie?: never;
|
|
8502
|
+
};
|
|
8503
|
+
requestBody: {
|
|
8504
|
+
content: {
|
|
8505
|
+
"application/json": components["schemas"]["UpdateMeetingRecordingAclRequest"];
|
|
8506
|
+
};
|
|
8507
|
+
};
|
|
8508
|
+
responses: {
|
|
8509
|
+
/** @description ACL grant updated */
|
|
8510
|
+
204: {
|
|
8511
|
+
headers: {
|
|
8512
|
+
[name: string]: unknown;
|
|
8513
|
+
};
|
|
8514
|
+
content?: never;
|
|
8515
|
+
};
|
|
8516
|
+
/** @description Recording or grant not found / not owned by this user */
|
|
8517
|
+
404: {
|
|
8518
|
+
headers: {
|
|
8519
|
+
[name: string]: unknown;
|
|
8520
|
+
};
|
|
8521
|
+
content?: never;
|
|
8522
|
+
};
|
|
8523
|
+
};
|
|
8524
|
+
};
|
|
8525
|
+
deleteMeetingRecordingAclEntry: {
|
|
8526
|
+
parameters: {
|
|
8527
|
+
query?: never;
|
|
8528
|
+
header?: never;
|
|
8529
|
+
path: {
|
|
8530
|
+
id: string;
|
|
8531
|
+
grantId: string;
|
|
8532
|
+
};
|
|
8533
|
+
cookie?: never;
|
|
8534
|
+
};
|
|
8535
|
+
requestBody?: never;
|
|
8536
|
+
responses: {
|
|
8537
|
+
/** @description ACL grant revoked */
|
|
8538
|
+
204: {
|
|
8539
|
+
headers: {
|
|
8540
|
+
[name: string]: unknown;
|
|
8541
|
+
};
|
|
8542
|
+
content?: never;
|
|
8543
|
+
};
|
|
8544
|
+
/** @description Recording or grant not found / not owned by this user */
|
|
8545
|
+
404: {
|
|
8546
|
+
headers: {
|
|
8547
|
+
[name: string]: unknown;
|
|
8548
|
+
};
|
|
8549
|
+
content?: never;
|
|
8550
|
+
};
|
|
8551
|
+
};
|
|
8552
|
+
};
|
|
8553
|
+
getEntityAcl: {
|
|
8554
|
+
parameters: {
|
|
8555
|
+
query?: never;
|
|
8556
|
+
header?: never;
|
|
8557
|
+
path: {
|
|
8558
|
+
entityType: string;
|
|
8559
|
+
id: string;
|
|
8560
|
+
};
|
|
8561
|
+
cookie?: never;
|
|
8562
|
+
};
|
|
8563
|
+
requestBody?: never;
|
|
8564
|
+
responses: {
|
|
8565
|
+
/** @description Owner, visibility, and active ACL grants for the entity */
|
|
8566
|
+
200: {
|
|
8567
|
+
headers: {
|
|
8568
|
+
[name: string]: unknown;
|
|
8569
|
+
};
|
|
8570
|
+
content?: never;
|
|
8571
|
+
};
|
|
8572
|
+
/** @description Entity not found or not visible to this caller */
|
|
8573
|
+
404: {
|
|
8574
|
+
headers: {
|
|
8575
|
+
[name: string]: unknown;
|
|
8576
|
+
};
|
|
8577
|
+
content?: never;
|
|
8578
|
+
};
|
|
8579
|
+
};
|
|
8580
|
+
};
|
|
8581
|
+
upsertEntityAclGrant: {
|
|
8582
|
+
parameters: {
|
|
8583
|
+
query?: never;
|
|
8584
|
+
header?: never;
|
|
8585
|
+
path: {
|
|
8586
|
+
entityType: string;
|
|
8587
|
+
id: string;
|
|
8588
|
+
principalType: string;
|
|
8589
|
+
principalId: string;
|
|
8590
|
+
};
|
|
8591
|
+
cookie?: never;
|
|
8592
|
+
};
|
|
8593
|
+
requestBody: {
|
|
8594
|
+
content: {
|
|
8595
|
+
"application/json": components["schemas"]["AclGrantRequest"];
|
|
8596
|
+
};
|
|
8597
|
+
};
|
|
8598
|
+
responses: {
|
|
8599
|
+
/** @description Grant upserted */
|
|
8600
|
+
200: {
|
|
8601
|
+
headers: {
|
|
8602
|
+
[name: string]: unknown;
|
|
8603
|
+
};
|
|
8604
|
+
content?: never;
|
|
8605
|
+
};
|
|
8606
|
+
/** @description Entity not found or not visible to this caller */
|
|
8607
|
+
404: {
|
|
8608
|
+
headers: {
|
|
8609
|
+
[name: string]: unknown;
|
|
8610
|
+
};
|
|
8611
|
+
content?: never;
|
|
8612
|
+
};
|
|
8613
|
+
};
|
|
8614
|
+
};
|
|
8615
|
+
revokeEntityAclGrant: {
|
|
8616
|
+
parameters: {
|
|
8617
|
+
query?: never;
|
|
8618
|
+
header?: never;
|
|
8619
|
+
path: {
|
|
8620
|
+
entityType: string;
|
|
8621
|
+
id: string;
|
|
8622
|
+
principalType: string;
|
|
8623
|
+
principalId: string;
|
|
8624
|
+
};
|
|
8625
|
+
cookie?: never;
|
|
8626
|
+
};
|
|
8627
|
+
requestBody?: never;
|
|
8628
|
+
responses: {
|
|
8629
|
+
/** @description Grant revoked */
|
|
8630
|
+
204: {
|
|
8631
|
+
headers: {
|
|
8632
|
+
[name: string]: unknown;
|
|
8633
|
+
};
|
|
8634
|
+
content?: never;
|
|
8635
|
+
};
|
|
8636
|
+
/** @description Entity not found or not visible to this caller */
|
|
8637
|
+
404: {
|
|
8638
|
+
headers: {
|
|
8639
|
+
[name: string]: unknown;
|
|
8640
|
+
};
|
|
8641
|
+
content?: never;
|
|
8642
|
+
};
|
|
8643
|
+
};
|
|
8644
|
+
};
|
|
8645
|
+
patchEntityVisibility: {
|
|
8646
|
+
parameters: {
|
|
8647
|
+
query?: never;
|
|
8648
|
+
header?: never;
|
|
8649
|
+
path: {
|
|
8650
|
+
entityType: string;
|
|
8651
|
+
id: string;
|
|
8652
|
+
};
|
|
8653
|
+
cookie?: never;
|
|
8654
|
+
};
|
|
8655
|
+
requestBody: {
|
|
8656
|
+
content: {
|
|
8657
|
+
"application/json": components["schemas"]["VisibilityPatchRequest"];
|
|
8658
|
+
};
|
|
8659
|
+
};
|
|
8660
|
+
responses: {
|
|
8661
|
+
/** @description Visibility updated */
|
|
8662
|
+
204: {
|
|
8663
|
+
headers: {
|
|
8664
|
+
[name: string]: unknown;
|
|
8665
|
+
};
|
|
8666
|
+
content?: never;
|
|
8667
|
+
};
|
|
8668
|
+
/** @description Invalid tier for this entity type (e.g. unit on meetings) */
|
|
8669
|
+
400: {
|
|
8670
|
+
headers: {
|
|
8671
|
+
[name: string]: unknown;
|
|
8672
|
+
};
|
|
8673
|
+
content?: never;
|
|
8674
|
+
};
|
|
8675
|
+
/** @description Entity not found or not visible to this caller */
|
|
8676
|
+
404: {
|
|
8677
|
+
headers: {
|
|
8678
|
+
[name: string]: unknown;
|
|
8679
|
+
};
|
|
8680
|
+
content?: never;
|
|
8681
|
+
};
|
|
8682
|
+
};
|
|
8683
|
+
};
|
|
8684
|
+
transferEntityOwnership: {
|
|
8685
|
+
parameters: {
|
|
8686
|
+
query?: never;
|
|
8687
|
+
header?: never;
|
|
8688
|
+
path: {
|
|
8689
|
+
entityType: string;
|
|
8690
|
+
id: string;
|
|
8691
|
+
};
|
|
8692
|
+
cookie?: never;
|
|
8693
|
+
};
|
|
8694
|
+
requestBody: {
|
|
8695
|
+
content: {
|
|
8696
|
+
"application/json": components["schemas"]["OwnerTransferRequest"];
|
|
8697
|
+
};
|
|
8698
|
+
};
|
|
8699
|
+
responses: {
|
|
8700
|
+
/** @description Ownership transferred */
|
|
8701
|
+
204: {
|
|
8702
|
+
headers: {
|
|
8703
|
+
[name: string]: unknown;
|
|
8704
|
+
};
|
|
8705
|
+
content?: never;
|
|
8706
|
+
};
|
|
8707
|
+
/** @description Transfer not permitted for this entity type (e.g. meetings) */
|
|
8708
|
+
400: {
|
|
8709
|
+
headers: {
|
|
8710
|
+
[name: string]: unknown;
|
|
8711
|
+
};
|
|
8712
|
+
content?: never;
|
|
8713
|
+
};
|
|
8714
|
+
/** @description Entity not found or not visible to this caller */
|
|
8715
|
+
404: {
|
|
8716
|
+
headers: {
|
|
8717
|
+
[name: string]: unknown;
|
|
8718
|
+
};
|
|
8719
|
+
content?: never;
|
|
8720
|
+
};
|
|
8721
|
+
};
|
|
8722
|
+
};
|
|
8723
|
+
getEntityEffectiveAccess: {
|
|
8724
|
+
parameters: {
|
|
8725
|
+
query?: never;
|
|
8726
|
+
header?: never;
|
|
8727
|
+
path: {
|
|
8728
|
+
entityType: string;
|
|
8729
|
+
id: string;
|
|
8730
|
+
};
|
|
8731
|
+
cookie?: never;
|
|
8732
|
+
};
|
|
8733
|
+
requestBody: {
|
|
8734
|
+
content: {
|
|
8735
|
+
"application/json": components["schemas"]["EffectiveAccessRequest"];
|
|
8736
|
+
};
|
|
8737
|
+
};
|
|
8738
|
+
responses: {
|
|
8739
|
+
/** @description Most-permissive access level + source chain */
|
|
8740
|
+
200: {
|
|
8741
|
+
headers: {
|
|
8742
|
+
[name: string]: unknown;
|
|
8743
|
+
};
|
|
8744
|
+
content?: never;
|
|
8745
|
+
};
|
|
8746
|
+
/** @description Entity not found or not visible to this caller */
|
|
8747
|
+
404: {
|
|
8748
|
+
headers: {
|
|
8749
|
+
[name: string]: unknown;
|
|
8750
|
+
};
|
|
8751
|
+
content?: never;
|
|
8752
|
+
};
|
|
8753
|
+
};
|
|
8754
|
+
};
|
|
8226
8755
|
startImpersonation: {
|
|
8227
8756
|
parameters: {
|
|
8228
8757
|
query?: never;
|
|
@@ -57,6 +57,9 @@ export const openApiRoutes = {
|
|
|
57
57
|
'/api/me/meetings/recordings/{id}/export': ['POST'],
|
|
58
58
|
'/api/me/meetings/recordings/{id}/export/{jobId}': ['GET'],
|
|
59
59
|
'/api/me/meetings/recordings/{id}/restore': ['POST'],
|
|
60
|
+
'/api/me/meetings/recordings/{id}/sharing': ['GET'],
|
|
61
|
+
'/api/me/meetings/recordings/{id}/sharing/acl': ['POST'],
|
|
62
|
+
'/api/me/meetings/recordings/{id}/sharing/acl/{grantId}': ['DELETE', 'PUT'],
|
|
60
63
|
'/api/me/meetings/recordings/{id}/visibility': ['POST'],
|
|
61
64
|
'/api/me/work-items': ['GET'],
|
|
62
65
|
'/api/me/work-items/counts': ['GET'],
|
|
@@ -137,6 +140,11 @@ export const openApiRoutes = {
|
|
|
137
140
|
'/api/workspace/resolve-path': ['POST'],
|
|
138
141
|
'/api/workspace/resync-slack-logo': ['POST'],
|
|
139
142
|
'/api/workspace/work-item-counts': ['GET'],
|
|
143
|
+
'/api/{entityType}/{id}/acl': ['GET'],
|
|
144
|
+
'/api/{entityType}/{id}/acl/{principalType}/{principalId}': ['DELETE', 'PUT'],
|
|
145
|
+
'/api/{entityType}/{id}/effective-access': ['POST'],
|
|
146
|
+
'/api/{entityType}/{id}/transfer-ownership': ['POST'],
|
|
147
|
+
'/api/{entityType}/{id}/visibility': ['PATCH'],
|
|
140
148
|
'/auth/logout': ['POST'],
|
|
141
149
|
'/auth/me': ['GET'],
|
|
142
150
|
'/auth/sso/callback': ['GET', 'POST'],
|
package/src/permissions/index.ts
CHANGED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Share API Vocabulary
|
|
3
|
+
*
|
|
4
|
+
* Zod schemas for the polymorphic share API introduced in AUTH-007 (PRD-00675).
|
|
5
|
+
* Backend routes live at `/api/{entityType}/{id}/...`; every request/response
|
|
6
|
+
* body validates against one of these schemas. OpenAPI YAML is auto-generated
|
|
7
|
+
* from these definitions.
|
|
8
|
+
*
|
|
9
|
+
* Authority: ADR-CTRL-085 (Rights Table), ADR-CTRL-086 (most-permissive
|
|
10
|
+
* aggregation), ADR-BE-181 (AUTH-006 compose model).
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { AccessLevelSchema } from './access-levels';
|
|
14
|
+
import { AccessSourceSchema } from './access-source';
|
|
15
|
+
|
|
16
|
+
export const PrincipalTypeSchema = z.enum(['user', 'unit', 'org']);
|
|
17
|
+
export type PrincipalType = z.infer<typeof PrincipalTypeSchema>;
|
|
18
|
+
|
|
19
|
+
export const PrincipalSchema = z.object({
|
|
20
|
+
type: PrincipalTypeSchema,
|
|
21
|
+
id: z.string().uuid(),
|
|
22
|
+
});
|
|
23
|
+
export type Principal = z.infer<typeof PrincipalSchema>;
|
|
24
|
+
|
|
25
|
+
export const GrantableAccessLevelSchema = z.enum(['editor', 'commenter', 'viewer']);
|
|
26
|
+
export type GrantableAccessLevel = z.infer<typeof GrantableAccessLevelSchema>;
|
|
27
|
+
|
|
28
|
+
export const EntityVisibilitySchema = z.enum(['private', 'unit', 'org']);
|
|
29
|
+
export type EntityVisibility = z.infer<typeof EntityVisibilitySchema>;
|
|
30
|
+
|
|
31
|
+
export const AclGrantRequestSchema = z.object({
|
|
32
|
+
access_level: GrantableAccessLevelSchema,
|
|
33
|
+
});
|
|
34
|
+
export type AclGrantRequest = z.infer<typeof AclGrantRequestSchema>;
|
|
35
|
+
|
|
36
|
+
export const AclGrantResponseSchema = z.object({
|
|
37
|
+
id: z.string().uuid(),
|
|
38
|
+
principal: PrincipalSchema,
|
|
39
|
+
access_level: GrantableAccessLevelSchema,
|
|
40
|
+
granted_by_user_id: z.string().uuid(),
|
|
41
|
+
granted_at: z.string().datetime(),
|
|
42
|
+
});
|
|
43
|
+
export type AclGrantResponse = z.infer<typeof AclGrantResponseSchema>;
|
|
44
|
+
|
|
45
|
+
export const AclListResponseSchema = z.object({
|
|
46
|
+
entity_type: z.string(),
|
|
47
|
+
entity_id: z.string().uuid(),
|
|
48
|
+
owner_user_id: z.string().uuid().nullable(),
|
|
49
|
+
visibility: EntityVisibilitySchema,
|
|
50
|
+
editors_can_share: z.boolean(),
|
|
51
|
+
grants: z.array(AclGrantResponseSchema),
|
|
52
|
+
});
|
|
53
|
+
export type AclListResponse = z.infer<typeof AclListResponseSchema>;
|
|
54
|
+
|
|
55
|
+
export const VisibilityPatchRequestSchema = z.object({
|
|
56
|
+
tier: EntityVisibilitySchema,
|
|
57
|
+
});
|
|
58
|
+
export type VisibilityPatchRequest = z.infer<typeof VisibilityPatchRequestSchema>;
|
|
59
|
+
|
|
60
|
+
export const OwnerTransferRequestSchema = z.object({
|
|
61
|
+
new_owner_user_id: z.string().uuid(),
|
|
62
|
+
});
|
|
63
|
+
export type OwnerTransferRequest = z.infer<typeof OwnerTransferRequestSchema>;
|
|
64
|
+
|
|
65
|
+
export const EffectiveAccessRequestSchema = z.object({
|
|
66
|
+
principal: PrincipalSchema,
|
|
67
|
+
});
|
|
68
|
+
export type EffectiveAccessRequest = z.infer<typeof EffectiveAccessRequestSchema>;
|
|
69
|
+
|
|
70
|
+
export const EffectiveAccessResponseSchema = z.object({
|
|
71
|
+
access_level: AccessLevelSchema.nullable(),
|
|
72
|
+
source_chain: z.array(AccessSourceSchema),
|
|
73
|
+
});
|
|
74
|
+
export type EffectiveAccessResponse = z.infer<typeof EffectiveAccessResponseSchema>;
|