@fourier-labs/harbour-contracts 0.84.0 → 0.86.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/README.md +3 -3
- package/contract-release.json +22 -22
- package/dist/gen-ts/app-integrations-declaration.d.ts +47 -2
- package/dist/gen-ts/contract-release.d.ts +6 -6
- package/dist/gen-ts/contract-release.js +6 -6
- package/dist/gen-ts/data-grant-v2.d.ts +4 -4
- package/dist/gen-ts/integration-execute-input-rules.d.ts +1195 -1
- package/dist/gen-ts/integration-execute-input-rules.js +393 -1
- package/dist/gen-ts/integration-execute-request.d.ts +152 -27
- package/dist/gen-ts/integration-execute-result.d.ts +237 -7
- package/dist/gen-ts/integration-operations.d.ts +315 -0
- package/dist/gen-ts/integration-operations.js +405 -0
- package/dist/gen-ts/saas-connection.d.ts +9 -9
- package/gen-ts/app-integrations-declaration.ts +47 -2
- package/gen-ts/contract-release.ts +6 -6
- package/gen-ts/data-grant-v2.ts +48 -3
- package/gen-ts/integration-execute-input-rules.ts +391 -2
- package/gen-ts/integration-execute-request.ts +196 -26
- package/gen-ts/integration-execute-result.ts +237 -7
- package/gen-ts/integration-operations.ts +405 -0
- package/gen-ts/saas-connection.ts +66 -8
- package/package.json +1 -1
- package/schema/app-integrations-declaration.schema.json +976 -36
- package/schema/data-grant-v2.schema.json +3 -3
- package/schema/integration-execute-request.schema.json +2322 -57
- package/schema/integration-execute-result.schema.json +934 -30
- package/schema/saas-connection.schema.json +139 -8
|
@@ -303,6 +303,411 @@ export const IntegrationOperations = {
|
|
|
303
303
|
"declaredMode": false,
|
|
304
304
|
"idempotencyKey": false
|
|
305
305
|
},
|
|
306
|
+
"calendar.calendar.list": {
|
|
307
|
+
"kind": "saas",
|
|
308
|
+
"identities": [
|
|
309
|
+
"user"
|
|
310
|
+
],
|
|
311
|
+
"readOnly": true,
|
|
312
|
+
"declaredMode": false,
|
|
313
|
+
"idempotencyKey": false
|
|
314
|
+
},
|
|
315
|
+
"calendar.event.list": {
|
|
316
|
+
"kind": "saas",
|
|
317
|
+
"identities": [
|
|
318
|
+
"user"
|
|
319
|
+
],
|
|
320
|
+
"readOnly": true,
|
|
321
|
+
"declaredMode": false,
|
|
322
|
+
"idempotencyKey": false
|
|
323
|
+
},
|
|
324
|
+
"calendar.event.read": {
|
|
325
|
+
"kind": "saas",
|
|
326
|
+
"identities": [
|
|
327
|
+
"user"
|
|
328
|
+
],
|
|
329
|
+
"readOnly": true,
|
|
330
|
+
"declaredMode": false,
|
|
331
|
+
"idempotencyKey": false
|
|
332
|
+
},
|
|
333
|
+
"calendar.event.create": {
|
|
334
|
+
"kind": "saas",
|
|
335
|
+
"identities": [
|
|
336
|
+
"user"
|
|
337
|
+
],
|
|
338
|
+
"readOnly": false,
|
|
339
|
+
"declaredMode": false,
|
|
340
|
+
"idempotencyKey": true
|
|
341
|
+
},
|
|
342
|
+
"calendar.event.update": {
|
|
343
|
+
"kind": "saas",
|
|
344
|
+
"identities": [
|
|
345
|
+
"user"
|
|
346
|
+
],
|
|
347
|
+
"readOnly": false,
|
|
348
|
+
"declaredMode": false,
|
|
349
|
+
"idempotencyKey": false
|
|
350
|
+
},
|
|
351
|
+
"calendar.event.cancel": {
|
|
352
|
+
"kind": "saas",
|
|
353
|
+
"identities": [
|
|
354
|
+
"user"
|
|
355
|
+
],
|
|
356
|
+
"readOnly": false,
|
|
357
|
+
"declaredMode": false,
|
|
358
|
+
"idempotencyKey": false
|
|
359
|
+
},
|
|
360
|
+
"drive.file.list": {
|
|
361
|
+
"kind": "saas",
|
|
362
|
+
"identities": [
|
|
363
|
+
"user"
|
|
364
|
+
],
|
|
365
|
+
"readOnly": true,
|
|
366
|
+
"declaredMode": false,
|
|
367
|
+
"idempotencyKey": false
|
|
368
|
+
},
|
|
369
|
+
"drive.file.search": {
|
|
370
|
+
"kind": "saas",
|
|
371
|
+
"identities": [
|
|
372
|
+
"user"
|
|
373
|
+
],
|
|
374
|
+
"readOnly": true,
|
|
375
|
+
"declaredMode": false,
|
|
376
|
+
"idempotencyKey": false
|
|
377
|
+
},
|
|
378
|
+
"drive.file.read": {
|
|
379
|
+
"kind": "saas",
|
|
380
|
+
"identities": [
|
|
381
|
+
"user"
|
|
382
|
+
],
|
|
383
|
+
"readOnly": true,
|
|
384
|
+
"declaredMode": false,
|
|
385
|
+
"idempotencyKey": false
|
|
386
|
+
},
|
|
387
|
+
"drive.file.upload": {
|
|
388
|
+
"kind": "saas",
|
|
389
|
+
"identities": [
|
|
390
|
+
"user"
|
|
391
|
+
],
|
|
392
|
+
"readOnly": false,
|
|
393
|
+
"declaredMode": false,
|
|
394
|
+
"idempotencyKey": true
|
|
395
|
+
},
|
|
396
|
+
"drive.folder.create": {
|
|
397
|
+
"kind": "saas",
|
|
398
|
+
"identities": [
|
|
399
|
+
"user"
|
|
400
|
+
],
|
|
401
|
+
"readOnly": false,
|
|
402
|
+
"declaredMode": false,
|
|
403
|
+
"idempotencyKey": true
|
|
404
|
+
},
|
|
405
|
+
"docs.document.read": {
|
|
406
|
+
"kind": "saas",
|
|
407
|
+
"identities": [
|
|
408
|
+
"user"
|
|
409
|
+
],
|
|
410
|
+
"readOnly": true,
|
|
411
|
+
"declaredMode": false,
|
|
412
|
+
"idempotencyKey": false
|
|
413
|
+
},
|
|
414
|
+
"docs.document.create": {
|
|
415
|
+
"kind": "saas",
|
|
416
|
+
"identities": [
|
|
417
|
+
"user"
|
|
418
|
+
],
|
|
419
|
+
"readOnly": false,
|
|
420
|
+
"declaredMode": false,
|
|
421
|
+
"idempotencyKey": true
|
|
422
|
+
},
|
|
423
|
+
"docs.document.append": {
|
|
424
|
+
"kind": "saas",
|
|
425
|
+
"identities": [
|
|
426
|
+
"user"
|
|
427
|
+
],
|
|
428
|
+
"readOnly": false,
|
|
429
|
+
"declaredMode": false,
|
|
430
|
+
"idempotencyKey": false
|
|
431
|
+
},
|
|
432
|
+
"docs.text.replace": {
|
|
433
|
+
"kind": "saas",
|
|
434
|
+
"identities": [
|
|
435
|
+
"user"
|
|
436
|
+
],
|
|
437
|
+
"readOnly": false,
|
|
438
|
+
"declaredMode": false,
|
|
439
|
+
"idempotencyKey": false
|
|
440
|
+
},
|
|
441
|
+
"sheets.spreadsheet.read": {
|
|
442
|
+
"kind": "saas",
|
|
443
|
+
"identities": [
|
|
444
|
+
"user"
|
|
445
|
+
],
|
|
446
|
+
"readOnly": true,
|
|
447
|
+
"declaredMode": false,
|
|
448
|
+
"idempotencyKey": false
|
|
449
|
+
},
|
|
450
|
+
"sheets.values.read": {
|
|
451
|
+
"kind": "saas",
|
|
452
|
+
"identities": [
|
|
453
|
+
"user"
|
|
454
|
+
],
|
|
455
|
+
"readOnly": true,
|
|
456
|
+
"declaredMode": false,
|
|
457
|
+
"idempotencyKey": false
|
|
458
|
+
},
|
|
459
|
+
"sheets.values.append": {
|
|
460
|
+
"kind": "saas",
|
|
461
|
+
"identities": [
|
|
462
|
+
"user"
|
|
463
|
+
],
|
|
464
|
+
"readOnly": false,
|
|
465
|
+
"declaredMode": false,
|
|
466
|
+
"idempotencyKey": true
|
|
467
|
+
},
|
|
468
|
+
"sheets.values.update": {
|
|
469
|
+
"kind": "saas",
|
|
470
|
+
"identities": [
|
|
471
|
+
"user"
|
|
472
|
+
],
|
|
473
|
+
"readOnly": false,
|
|
474
|
+
"declaredMode": false,
|
|
475
|
+
"idempotencyKey": false
|
|
476
|
+
},
|
|
477
|
+
"sheets.values.clear": {
|
|
478
|
+
"kind": "saas",
|
|
479
|
+
"identities": [
|
|
480
|
+
"user"
|
|
481
|
+
],
|
|
482
|
+
"readOnly": false,
|
|
483
|
+
"declaredMode": false,
|
|
484
|
+
"idempotencyKey": false
|
|
485
|
+
},
|
|
486
|
+
"sheets.spreadsheet.create": {
|
|
487
|
+
"kind": "saas",
|
|
488
|
+
"identities": [
|
|
489
|
+
"user"
|
|
490
|
+
],
|
|
491
|
+
"readOnly": false,
|
|
492
|
+
"declaredMode": false,
|
|
493
|
+
"idempotencyKey": true
|
|
494
|
+
},
|
|
495
|
+
"outlook.message.list": {
|
|
496
|
+
"kind": "saas",
|
|
497
|
+
"identities": [
|
|
498
|
+
"user"
|
|
499
|
+
],
|
|
500
|
+
"readOnly": true,
|
|
501
|
+
"declaredMode": false,
|
|
502
|
+
"idempotencyKey": false
|
|
503
|
+
},
|
|
504
|
+
"outlook.message.read": {
|
|
505
|
+
"kind": "saas",
|
|
506
|
+
"identities": [
|
|
507
|
+
"user"
|
|
508
|
+
],
|
|
509
|
+
"readOnly": true,
|
|
510
|
+
"declaredMode": false,
|
|
511
|
+
"idempotencyKey": false
|
|
512
|
+
},
|
|
513
|
+
"outlook.attachment.read": {
|
|
514
|
+
"kind": "saas",
|
|
515
|
+
"identities": [
|
|
516
|
+
"user"
|
|
517
|
+
],
|
|
518
|
+
"readOnly": true,
|
|
519
|
+
"declaredMode": false,
|
|
520
|
+
"idempotencyKey": false
|
|
521
|
+
},
|
|
522
|
+
"outlook.message.send": {
|
|
523
|
+
"kind": "saas",
|
|
524
|
+
"identities": [
|
|
525
|
+
"user"
|
|
526
|
+
],
|
|
527
|
+
"readOnly": false,
|
|
528
|
+
"declaredMode": false,
|
|
529
|
+
"idempotencyKey": true
|
|
530
|
+
},
|
|
531
|
+
"outlook.message.reply": {
|
|
532
|
+
"kind": "saas",
|
|
533
|
+
"identities": [
|
|
534
|
+
"user"
|
|
535
|
+
],
|
|
536
|
+
"readOnly": false,
|
|
537
|
+
"declaredMode": false,
|
|
538
|
+
"idempotencyKey": true
|
|
539
|
+
},
|
|
540
|
+
"outlook.event.list": {
|
|
541
|
+
"kind": "saas",
|
|
542
|
+
"identities": [
|
|
543
|
+
"user"
|
|
544
|
+
],
|
|
545
|
+
"readOnly": true,
|
|
546
|
+
"declaredMode": false,
|
|
547
|
+
"idempotencyKey": false
|
|
548
|
+
},
|
|
549
|
+
"outlook.event.read": {
|
|
550
|
+
"kind": "saas",
|
|
551
|
+
"identities": [
|
|
552
|
+
"user"
|
|
553
|
+
],
|
|
554
|
+
"readOnly": true,
|
|
555
|
+
"declaredMode": false,
|
|
556
|
+
"idempotencyKey": false
|
|
557
|
+
},
|
|
558
|
+
"outlook.event.create": {
|
|
559
|
+
"kind": "saas",
|
|
560
|
+
"identities": [
|
|
561
|
+
"user"
|
|
562
|
+
],
|
|
563
|
+
"readOnly": false,
|
|
564
|
+
"declaredMode": false,
|
|
565
|
+
"idempotencyKey": true
|
|
566
|
+
},
|
|
567
|
+
"outlook.event.update": {
|
|
568
|
+
"kind": "saas",
|
|
569
|
+
"identities": [
|
|
570
|
+
"user"
|
|
571
|
+
],
|
|
572
|
+
"readOnly": false,
|
|
573
|
+
"declaredMode": false,
|
|
574
|
+
"idempotencyKey": false
|
|
575
|
+
},
|
|
576
|
+
"outlook.event.cancel": {
|
|
577
|
+
"kind": "saas",
|
|
578
|
+
"identities": [
|
|
579
|
+
"user"
|
|
580
|
+
],
|
|
581
|
+
"readOnly": false,
|
|
582
|
+
"declaredMode": false,
|
|
583
|
+
"idempotencyKey": false
|
|
584
|
+
},
|
|
585
|
+
"onedrive.file.list": {
|
|
586
|
+
"kind": "saas",
|
|
587
|
+
"identities": [
|
|
588
|
+
"user"
|
|
589
|
+
],
|
|
590
|
+
"readOnly": true,
|
|
591
|
+
"declaredMode": false,
|
|
592
|
+
"idempotencyKey": false
|
|
593
|
+
},
|
|
594
|
+
"onedrive.file.search": {
|
|
595
|
+
"kind": "saas",
|
|
596
|
+
"identities": [
|
|
597
|
+
"user"
|
|
598
|
+
],
|
|
599
|
+
"readOnly": true,
|
|
600
|
+
"declaredMode": false,
|
|
601
|
+
"idempotencyKey": false
|
|
602
|
+
},
|
|
603
|
+
"onedrive.file.read": {
|
|
604
|
+
"kind": "saas",
|
|
605
|
+
"identities": [
|
|
606
|
+
"user"
|
|
607
|
+
],
|
|
608
|
+
"readOnly": true,
|
|
609
|
+
"declaredMode": false,
|
|
610
|
+
"idempotencyKey": false
|
|
611
|
+
},
|
|
612
|
+
"onedrive.file.upload": {
|
|
613
|
+
"kind": "saas",
|
|
614
|
+
"identities": [
|
|
615
|
+
"user"
|
|
616
|
+
],
|
|
617
|
+
"readOnly": false,
|
|
618
|
+
"declaredMode": false,
|
|
619
|
+
"idempotencyKey": true
|
|
620
|
+
},
|
|
621
|
+
"onedrive.folder.create": {
|
|
622
|
+
"kind": "saas",
|
|
623
|
+
"identities": [
|
|
624
|
+
"user"
|
|
625
|
+
],
|
|
626
|
+
"readOnly": false,
|
|
627
|
+
"declaredMode": false,
|
|
628
|
+
"idempotencyKey": true
|
|
629
|
+
},
|
|
630
|
+
"excel.worksheet.list": {
|
|
631
|
+
"kind": "saas",
|
|
632
|
+
"identities": [
|
|
633
|
+
"user"
|
|
634
|
+
],
|
|
635
|
+
"readOnly": true,
|
|
636
|
+
"declaredMode": false,
|
|
637
|
+
"idempotencyKey": false
|
|
638
|
+
},
|
|
639
|
+
"excel.range.read": {
|
|
640
|
+
"kind": "saas",
|
|
641
|
+
"identities": [
|
|
642
|
+
"user"
|
|
643
|
+
],
|
|
644
|
+
"readOnly": true,
|
|
645
|
+
"declaredMode": false,
|
|
646
|
+
"idempotencyKey": false
|
|
647
|
+
},
|
|
648
|
+
"excel.range.update": {
|
|
649
|
+
"kind": "saas",
|
|
650
|
+
"identities": [
|
|
651
|
+
"user"
|
|
652
|
+
],
|
|
653
|
+
"readOnly": false,
|
|
654
|
+
"declaredMode": false,
|
|
655
|
+
"idempotencyKey": false
|
|
656
|
+
},
|
|
657
|
+
"excel.table.list": {
|
|
658
|
+
"kind": "saas",
|
|
659
|
+
"identities": [
|
|
660
|
+
"user"
|
|
661
|
+
],
|
|
662
|
+
"readOnly": true,
|
|
663
|
+
"declaredMode": false,
|
|
664
|
+
"idempotencyKey": false
|
|
665
|
+
},
|
|
666
|
+
"excel.row.add": {
|
|
667
|
+
"kind": "saas",
|
|
668
|
+
"identities": [
|
|
669
|
+
"user"
|
|
670
|
+
],
|
|
671
|
+
"readOnly": false,
|
|
672
|
+
"declaredMode": false,
|
|
673
|
+
"idempotencyKey": true
|
|
674
|
+
},
|
|
675
|
+
"excel.worksheet.add": {
|
|
676
|
+
"kind": "saas",
|
|
677
|
+
"identities": [
|
|
678
|
+
"user"
|
|
679
|
+
],
|
|
680
|
+
"readOnly": false,
|
|
681
|
+
"declaredMode": false,
|
|
682
|
+
"idempotencyKey": true
|
|
683
|
+
},
|
|
684
|
+
"teams.message.list": {
|
|
685
|
+
"kind": "saas",
|
|
686
|
+
"identities": [
|
|
687
|
+
"user"
|
|
688
|
+
],
|
|
689
|
+
"readOnly": true,
|
|
690
|
+
"declaredMode": false,
|
|
691
|
+
"idempotencyKey": false
|
|
692
|
+
},
|
|
693
|
+
"teams.message.post": {
|
|
694
|
+
"kind": "saas",
|
|
695
|
+
"identities": [
|
|
696
|
+
"user"
|
|
697
|
+
],
|
|
698
|
+
"readOnly": false,
|
|
699
|
+
"declaredMode": false,
|
|
700
|
+
"idempotencyKey": true
|
|
701
|
+
},
|
|
702
|
+
"teams.reply.post": {
|
|
703
|
+
"kind": "saas",
|
|
704
|
+
"identities": [
|
|
705
|
+
"user"
|
|
706
|
+
],
|
|
707
|
+
"readOnly": false,
|
|
708
|
+
"declaredMode": false,
|
|
709
|
+
"idempotencyKey": true
|
|
710
|
+
},
|
|
306
711
|
"warehouse.view.read": {
|
|
307
712
|
"kind": "database",
|
|
308
713
|
"identities": [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Slack carries an installation and a channel map; Gmail is user-consent only; Basecamp is user-consent only with an IT-pinned account and a project map in `channels`; SharePoint (0.78.0) is user-consent only, pinned to the company's Microsoft 365 tenant in `account`, with a site map in `channels`. Phone (0.82.0) is app mode only with no installation: the tenant's inbound SMS numbers (E.164) mapped from aliases in `channels`, and the SMS the platform received on them listed by phone.sms.list; since 0.83.0 an app reads the number an alias maps to with phone.number.get.
|
|
2
|
+
* Slack carries an installation and a channel map; Gmail is user-consent only; Basecamp is user-consent only with an IT-pinned account and a project map in `channels`; SharePoint (0.78.0) is user-consent only, pinned to the company's Microsoft 365 tenant in `account`, with a site map in `channels`. Phone (0.82.0) is app mode only with no installation: the tenant's inbound SMS numbers (E.164) mapped from aliases in `channels`, and the SMS the platform received on them listed by phone.sms.list; since 0.83.0 an app reads the number an alias maps to with phone.number.get. Google Workspace (0.86.0, ADR 0032: calendar, drive, docs, sheets on the Google OAuth client) and Microsoft 365 (outlook, onedrive, excel, teams on the Microsoft client) are user-consent only like Gmail, one connection per provider with its own consent and scopes; the seven personal providers have no `account` and empty `channels` (their one fixed alias is the signed-in person's own calendar, drive, documents, spreadsheets, mailbox or workbooks); teams is pinned to the Microsoft 365 tenant in `account` like SharePoint and maps channel aliases in `channels`.
|
|
3
3
|
*/
|
|
4
|
-
export type SaasProvider = 'slack' | 'gmail' | 'basecamp' | 'sharepoint' | 'phone';
|
|
4
|
+
export type SaasProvider = 'slack' | 'gmail' | 'basecamp' | 'sharepoint' | 'phone' | 'calendar' | 'drive' | 'docs' | 'sheets' | 'outlook' | 'onedrive' | 'excel' | 'teams';
|
|
5
5
|
/**
|
|
6
6
|
* DISABLED stops every app call immediately (details.code CONNECTION_DISABLED).
|
|
7
7
|
*/
|
|
@@ -23,7 +23,7 @@ export type ExternalRecipientMode = 'block' | 'allowlist' | 'allow';
|
|
|
23
23
|
*/
|
|
24
24
|
export type InstallationName = string;
|
|
25
25
|
/**
|
|
26
|
-
* Tenant-wide SaaS connection record (control table sk SAASCONN#<sourceId>, same tenant partition as database sources; alias uniqueness is enforced across both). One connection per tenant and provider: a single bot installation of the platform-owned provider app and a single logical channel map shared by every app environment (grants, requests and user consent links stay per environment). A Gmail connection has neither installation nor channels: user consent is the only step and its one resource is the fixed `inbox` alias. A Basecamp connection (0.76.0, ADR 0022) has no installation either: IT pins the company's Basecamp `account` (chosen from the accounts IT's own Basecamp sign-in belongs to) and maps project aliases to project ids in `channels`; basecamp.project.list runs on the fixed `account` alias. A SharePoint connection (0.78.0, ADR 0024) is shaped the same way: IT pins the company's Microsoft 365 tenant in `account` (the Entra tenant id and the organisation's display name, from IT's own Microsoft sign-in) and maps site aliases to Microsoft Graph site ids (`hostname,siteCollectionGuid,webGuid`) in `channels`; every sharepoint.* operation runs on a site alias. Contains references, never secrets: installation tokens live under their own token records. The pre-T25 per-environment shape (`clientId`, `clientSecretRef`, `environments`, `installations`) is deprecated: the control plane normalises such a stored record on read and never writes it.
|
|
26
|
+
* Tenant-wide SaaS connection record (control table sk SAASCONN#<sourceId>, same tenant partition as database sources; alias uniqueness is enforced across both). One connection per tenant and provider: a single bot installation of the platform-owned provider app and a single logical channel map shared by every app environment (grants, requests and user consent links stay per environment). A Gmail connection has neither installation nor channels: user consent is the only step and its one resource is the fixed `inbox` alias. A Basecamp connection (0.76.0, ADR 0022) has no installation either: IT pins the company's Basecamp `account` (chosen from the accounts IT's own Basecamp sign-in belongs to) and maps project aliases to project ids in `channels`; basecamp.project.list runs on the fixed `account` alias. A SharePoint connection (0.78.0, ADR 0024) is shaped the same way: IT pins the company's Microsoft 365 tenant in `account` (the Entra tenant id and the organisation's display name, from IT's own Microsoft sign-in) and maps site aliases to Microsoft Graph site ids (`hostname,siteCollectionGuid,webGuid`) in `channels`; every sharepoint.* operation runs on a site alias. The eight Google Workspace and Microsoft 365 connections (0.86.0, ADR 0032) are Gmail-shaped: user consent only, one connection per provider (calendar, drive, docs, sheets on the Google client; outlook, onedrive, excel, teams on the Microsoft client), no installation. Seven of them carry no `account` and empty `channels`, acting on the signed-in person's own data through one fixed alias; a Teams connection pins the Microsoft 365 tenant in `account` like SharePoint and maps channel aliases to `<teamId>/<channelId>` in `channels`. Contains references, never secrets: installation tokens live under their own token records. The pre-T25 per-environment shape (`clientId`, `clientSecretRef`, `environments`, `installations`) is deprecated: the control plane normalises such a stored record on read and never writes it.
|
|
27
27
|
*/
|
|
28
28
|
export interface SaasConnection {
|
|
29
29
|
schema: 'harbour.saas-connection/1.0';
|
|
@@ -43,21 +43,21 @@ export interface SaasConnection {
|
|
|
43
43
|
installation?: SaasInstallation;
|
|
44
44
|
account?: BasecampAccount;
|
|
45
45
|
/**
|
|
46
|
-
* Logical alias → provider resource id: a Slack channel id, a Basecamp project id, a SharePoint site id or a
|
|
46
|
+
* Logical alias → provider resource id: a Slack channel id, a Basecamp project id, a SharePoint site id, a phone number or a Teams channel. Always empty for Gmail and for the seven personal Google Workspace and Microsoft 365 providers (0.86.0: calendar, drive, docs, sheets, outlook, onedrive, excel), whose one fixed alias governance resolves.
|
|
47
47
|
*/
|
|
48
48
|
channels: {
|
|
49
49
|
/**
|
|
50
|
-
* A Slack channel id (public, non-archived), a Basecamp project id (digits), a SharePoint site id (0.78.0: the Microsoft Graph composite `hostname,siteCollectionGuid,webGuid`)
|
|
50
|
+
* A Slack channel id (public, non-archived), a Basecamp project id (digits), a SharePoint site id (0.78.0: the Microsoft Graph composite `hostname,siteCollectionGuid,webGuid`), a phone number (0.82.0: E.164, a leading `+` and digits) or a Teams channel (0.86.0: `<teamId>/<channelId>`, the team's GUID and the channel id `19:...@thread.tacv2`, so the alphabet admits `@`, `!` and `/`).
|
|
51
51
|
*/
|
|
52
52
|
[k: string]: string;
|
|
53
53
|
};
|
|
54
54
|
/**
|
|
55
|
-
* Operations IT allows apps to request on this connection: the provider's own SaaS operations (Slack: slack.channel.history, slack.message.post, slack.message.update, slack.message.delete, slack.dm.send, slack.user.lookup; Gmail: gmail.thread.list, gmail.thread.read, gmail.message.read, gmail.message.send, gmail.attachment.read; Basecamp (0.76.0): basecamp.project.list, basecamp.todolist.list, basecamp.todo.list, basecamp.todo.create, basecamp.todo.complete, basecamp.message.list, basecamp.message.post, basecamp.comment.list, basecamp.comment.post, basecamp.campfire.post, basecamp.people.list; SharePoint (0.78.0): sharepoint.list.list, sharepoint.item.list, sharepoint.item.create, sharepoint.item.update, sharepoint.drive.list, sharepoint.file.list, sharepoint.file.search, sharepoint.file.read, sharepoint.file.upload). Never warehouse.view.read. Phone (0.82.0): phone.sms.list; 0.83.0 adds phone.number.get.
|
|
55
|
+
* Operations IT allows apps to request on this connection: the provider's own SaaS operations (Slack: slack.channel.history, slack.message.post, slack.message.update, slack.message.delete, slack.dm.send, slack.user.lookup; Gmail: gmail.thread.list, gmail.thread.read, gmail.message.read, gmail.message.send, gmail.attachment.read; Basecamp (0.76.0): basecamp.project.list, basecamp.todolist.list, basecamp.todo.list, basecamp.todo.create, basecamp.todo.complete, basecamp.message.list, basecamp.message.post, basecamp.comment.list, basecamp.comment.post, basecamp.campfire.post, basecamp.people.list; SharePoint (0.78.0): sharepoint.list.list, sharepoint.item.list, sharepoint.item.create, sharepoint.item.update, sharepoint.drive.list, sharepoint.file.list, sharepoint.file.search, sharepoint.file.read, sharepoint.file.upload; Google Workspace and Microsoft 365 (0.86.0): the calendar.*, drive.*, docs.*, sheets.*, outlook.*, onedrive.*, excel.* and teams.* operations of the connection's provider). Never warehouse.view.read. Phone (0.82.0): phone.sms.list; 0.83.0 adds phone.number.get. Seventy-eight SaaS operations in all since 0.86.0.
|
|
56
56
|
*
|
|
57
57
|
* @minItems 1
|
|
58
|
-
* @maxItems
|
|
58
|
+
* @maxItems 78
|
|
59
59
|
*/
|
|
60
|
-
operations: ('slack.channel.history' | 'slack.message.post' | 'slack.message.update' | 'slack.message.delete' | 'slack.dm.send' | 'slack.user.lookup' | 'gmail.thread.list' | 'gmail.thread.read' | 'gmail.message.read' | 'gmail.message.send' | 'gmail.attachment.read' | 'basecamp.project.list' | 'basecamp.todolist.list' | 'basecamp.todo.list' | 'basecamp.todo.create' | 'basecamp.todo.complete' | 'basecamp.message.list' | 'basecamp.message.post' | 'basecamp.comment.list' | 'basecamp.comment.post' | 'basecamp.campfire.post' | 'basecamp.people.list' | 'sharepoint.list.list' | 'sharepoint.item.list' | 'sharepoint.item.create' | 'sharepoint.item.update' | 'sharepoint.drive.list' | 'sharepoint.file.list' | 'sharepoint.file.search' | 'sharepoint.file.read' | 'sharepoint.file.upload' | 'phone.sms.list' | 'phone.number.get' | 'warehouse.view.read' | 'warehouse.table.append' | 'service.request')[];
|
|
60
|
+
operations: ('slack.channel.history' | 'slack.message.post' | 'slack.message.update' | 'slack.message.delete' | 'slack.dm.send' | 'slack.user.lookup' | 'gmail.thread.list' | 'gmail.thread.read' | 'gmail.message.read' | 'gmail.message.send' | 'gmail.attachment.read' | 'basecamp.project.list' | 'basecamp.todolist.list' | 'basecamp.todo.list' | 'basecamp.todo.create' | 'basecamp.todo.complete' | 'basecamp.message.list' | 'basecamp.message.post' | 'basecamp.comment.list' | 'basecamp.comment.post' | 'basecamp.campfire.post' | 'basecamp.people.list' | 'sharepoint.list.list' | 'sharepoint.item.list' | 'sharepoint.item.create' | 'sharepoint.item.update' | 'sharepoint.drive.list' | 'sharepoint.file.list' | 'sharepoint.file.search' | 'sharepoint.file.read' | 'sharepoint.file.upload' | 'phone.sms.list' | 'phone.number.get' | 'calendar.calendar.list' | 'calendar.event.list' | 'calendar.event.read' | 'calendar.event.create' | 'calendar.event.update' | 'calendar.event.cancel' | 'drive.file.list' | 'drive.file.search' | 'drive.file.read' | 'drive.file.upload' | 'drive.folder.create' | 'docs.document.read' | 'docs.document.create' | 'docs.document.append' | 'docs.text.replace' | 'sheets.spreadsheet.read' | 'sheets.values.read' | 'sheets.values.append' | 'sheets.values.update' | 'sheets.values.clear' | 'sheets.spreadsheet.create' | 'outlook.message.list' | 'outlook.message.read' | 'outlook.attachment.read' | 'outlook.message.send' | 'outlook.message.reply' | 'outlook.event.list' | 'outlook.event.read' | 'outlook.event.create' | 'outlook.event.update' | 'outlook.event.cancel' | 'onedrive.file.list' | 'onedrive.file.search' | 'onedrive.file.read' | 'onedrive.file.upload' | 'onedrive.folder.create' | 'excel.worksheet.list' | 'excel.range.read' | 'excel.range.update' | 'excel.table.list' | 'excel.row.add' | 'excel.worksheet.add' | 'teams.message.list' | 'teams.message.post' | 'teams.reply.post' | 'warehouse.view.read' | 'warehouse.table.append' | 'service.request')[];
|
|
61
61
|
developmentPreapproval: DevelopmentPreapproval;
|
|
62
62
|
oauthClient?: SaasOauthClient;
|
|
63
63
|
userModeApproval?: UserModeApproval;
|
|
@@ -128,7 +128,7 @@ export interface SaasInstallation {
|
|
|
128
128
|
botName?: string;
|
|
129
129
|
}
|
|
130
130
|
/**
|
|
131
|
-
* The pinned provider account (0.76.0, Basecamp; 0.78.0, SharePoint — the name keeps its 0.76.0 spelling so consumers need not move): the one account, among those IT's own provider sign-in belongs to, that every user token on this connection must also belong to and that every resource id in `channels` lives in. For Basecamp the account (digits); for SharePoint the Microsoft 365 tenant (the Entra tenant GUID). Absent until IT chooses it; governance refuses every basecamp.* and
|
|
131
|
+
* The pinned provider account (0.76.0, Basecamp; 0.78.0, SharePoint; 0.86.0, Teams — the name keeps its 0.76.0 spelling so consumers need not move): the one account, among those IT's own provider sign-in belongs to, that every user token on this connection must also belong to and that every resource id in `channels` lives in. For Basecamp the account (digits); for SharePoint and Teams the Microsoft 365 tenant (the Entra tenant GUID). Absent until IT chooses it; governance refuses every basecamp.*, sharepoint.* and teams.* call until then. The seven personal Google Workspace and Microsoft 365 providers carry none.
|
|
132
132
|
*/
|
|
133
133
|
export interface BasecampAccount {
|
|
134
134
|
/**
|
|
@@ -38,6 +38,51 @@ export type DeclaredConnection = {
|
|
|
38
38
|
'sharepoint.file.upload'?: UserModeChannelOperation;
|
|
39
39
|
'phone.sms.list'?: AppModeChannelOperation;
|
|
40
40
|
'phone.number.get'?: AppModeChannelOperation;
|
|
41
|
+
'calendar.calendar.list'?: UserModeChannelOperation;
|
|
42
|
+
'calendar.event.list'?: UserModeChannelOperation;
|
|
43
|
+
'calendar.event.read'?: UserModeChannelOperation;
|
|
44
|
+
'calendar.event.create'?: UserModeChannelOperation;
|
|
45
|
+
'calendar.event.update'?: UserModeChannelOperation;
|
|
46
|
+
'calendar.event.cancel'?: UserModeChannelOperation;
|
|
47
|
+
'drive.file.list'?: UserModeChannelOperation;
|
|
48
|
+
'drive.file.search'?: UserModeChannelOperation;
|
|
49
|
+
'drive.file.read'?: UserModeChannelOperation;
|
|
50
|
+
'drive.file.upload'?: UserModeChannelOperation;
|
|
51
|
+
'drive.folder.create'?: UserModeChannelOperation;
|
|
52
|
+
'docs.document.read'?: UserModeChannelOperation;
|
|
53
|
+
'docs.document.create'?: UserModeChannelOperation;
|
|
54
|
+
'docs.document.append'?: UserModeChannelOperation;
|
|
55
|
+
'docs.text.replace'?: UserModeChannelOperation;
|
|
56
|
+
'sheets.spreadsheet.read'?: UserModeChannelOperation;
|
|
57
|
+
'sheets.values.read'?: UserModeChannelOperation;
|
|
58
|
+
'sheets.values.append'?: UserModeChannelOperation;
|
|
59
|
+
'sheets.values.update'?: UserModeChannelOperation;
|
|
60
|
+
'sheets.values.clear'?: UserModeChannelOperation;
|
|
61
|
+
'sheets.spreadsheet.create'?: UserModeChannelOperation;
|
|
62
|
+
'outlook.message.list'?: UserModeChannelOperation;
|
|
63
|
+
'outlook.message.read'?: UserModeChannelOperation;
|
|
64
|
+
'outlook.attachment.read'?: UserModeChannelOperation;
|
|
65
|
+
'outlook.message.send'?: UserModeChannelOperation;
|
|
66
|
+
'outlook.message.reply'?: UserModeChannelOperation;
|
|
67
|
+
'outlook.event.list'?: UserModeChannelOperation;
|
|
68
|
+
'outlook.event.read'?: UserModeChannelOperation;
|
|
69
|
+
'outlook.event.create'?: UserModeChannelOperation;
|
|
70
|
+
'outlook.event.update'?: UserModeChannelOperation;
|
|
71
|
+
'outlook.event.cancel'?: UserModeChannelOperation;
|
|
72
|
+
'onedrive.file.list'?: UserModeChannelOperation;
|
|
73
|
+
'onedrive.file.search'?: UserModeChannelOperation;
|
|
74
|
+
'onedrive.file.read'?: UserModeChannelOperation;
|
|
75
|
+
'onedrive.file.upload'?: UserModeChannelOperation;
|
|
76
|
+
'onedrive.folder.create'?: UserModeChannelOperation;
|
|
77
|
+
'excel.worksheet.list'?: UserModeChannelOperation;
|
|
78
|
+
'excel.range.read'?: UserModeChannelOperation;
|
|
79
|
+
'excel.range.update'?: UserModeChannelOperation;
|
|
80
|
+
'excel.table.list'?: UserModeChannelOperation;
|
|
81
|
+
'excel.row.add'?: UserModeChannelOperation;
|
|
82
|
+
'excel.worksheet.add'?: UserModeChannelOperation;
|
|
83
|
+
'teams.message.list'?: UserModeChannelOperation;
|
|
84
|
+
'teams.message.post'?: UserModeChannelOperation;
|
|
85
|
+
'teams.reply.post'?: UserModeChannelOperation;
|
|
41
86
|
'warehouse.view.read'?: AppModeViewOperation;
|
|
42
87
|
'warehouse.table.append'?: AppModeViewOperation;
|
|
43
88
|
'service.request'?: ServiceOperation;
|
|
@@ -63,7 +108,7 @@ export type ResourceNames = IntegrationAlias[];
|
|
|
63
108
|
export type ColumnName = string;
|
|
64
109
|
|
|
65
110
|
/**
|
|
66
|
-
* Committed `.isomorph/integrations.json`: the app's declared use of tenant-wide integration connections. Keys are logical connection aliases (the governance sourceId); resources are logical names (Slack channel alias, warehouse view name), never IDs, tokens or URLs. The operation set is closed (
|
|
111
|
+
* Committed `.isomorph/integrations.json`: the app's declared use of tenant-wide integration connections. Keys are logical connection aliases (the governance sourceId); resources are logical names (Slack channel alias, warehouse view name), never IDs, tokens or URLs. The operation set is closed (eighty-one operations since 0.86.0, ADR 0018, ADR 0022, ADR 0024, ADR 0028, ADR 0029 and ADR 0032). Each operation carries a fixed identity mode — slack.dm.send=app, slack.user.lookup=app, every gmail.* operation=user, every basecamp.* operation=user, every sharepoint.* operation=user, every calendar.*, drive.*, docs.*, sheets.*, outlook.*, onedrive.*, excel.* and teams.* operation=user (0.86.0), warehouse.view.read=app, service.request=app — except the declared-mode Slack operations (slack.message.post, and since 0.71.0 slack.channel.history, slack.message.update and slack.message.delete), whose mode the app DECLARES: `app` acts as the company's Slack app (the one audited bot identity; a post goes out under the IT-approved per-app display name when the connection declares `presentation`), `user` acts as the signed-in person after their own consent (reads what they can read, edits what they wrote). The declared mode is the one the app requests access for; an app may hold approved grants for both modes after two requests, and each declared-mode call names which approved mode it runs under (`mode` on the execute request, 0.55.0) — a mode IT did not approve is refused, never swapped for the other. A `saas` connection may declare only the Slack, Gmail, Basecamp, SharePoint, phone, Google Workspace (calendar, drive, docs, sheets) and Microsoft 365 (outlook, onedrive, excel, teams) operations and a `database` connection only warehouse.view.read; `presentation` is a `saas` connection's optional per-app display name and icon for app-mode Slack posts, shown to IT at approval time and applied only from the approved grant. Gmail is user-mode only (reads, one send); its single resource is the fixed `inbox` alias. Basecamp (0.76.0, ADR 0022) is user-mode only too: basecamp.project.list runs on the fixed `account` alias (the company's pinned Basecamp account) and every other basecamp.* operation on a project alias IT mapped in the connection's `channels` map, so Basecamp itself refuses an id outside that project. SharePoint (0.78.0, ADR 0024) is user-mode only as well: every sharepoint.* operation runs on a site alias IT mapped in the connection's `channels` map (a Microsoft Graph site id), so Graph itself refuses a list, item or file outside that site. Google Workspace and Microsoft 365 (0.86.0, ADR 0032) are user-mode only too: every calendar.*, drive.*, docs.*, sheets.*, outlook.*, onedrive.* and excel.* operation runs on the provider's one fixed alias for the signed-in person's own data (governance resolves it, the way Gmail's is `inbox`; the contract does not pin the literal), and every teams.* operation on a channel alias IT mapped in the connection's `channels` map (a Teams team and channel id), so Graph itself refuses a message outside that channel. slack.dm.send and slack.user.lookup address people by email rather than a channel, so their single resource is the fixed `workspace` alias (the connection's installed workspace), the way Gmail's is `inbox`. This file also owns the shared IntegrationOperation / IntegrationIdentityMode / IntegrationEnvironment / IntegrationConnectionKind / IntegrationPresentation definitions referenced by the other integration schemas.
|
|
67
112
|
*/
|
|
68
113
|
export interface AppIntegrationsDeclaration {
|
|
69
114
|
schema: 'isomorph.app-integrations/2.0';
|
|
@@ -99,7 +144,7 @@ export interface AppModeChannelOperation {
|
|
|
99
144
|
resources: ResourceNames;
|
|
100
145
|
}
|
|
101
146
|
/**
|
|
102
|
-
* Every gmail.* operation (resource: the fixed `inbox` alias), since 0.76.0 every basecamp.* operation (resource: a project alias from the connection's `channels` map, or the fixed `account` alias for basecamp.project.list)
|
|
147
|
+
* Every gmail.* operation (resource: the fixed `inbox` alias), since 0.76.0 every basecamp.* operation (resource: a project alias from the connection's `channels` map, or the fixed `account` alias for basecamp.project.list), since 0.78.0 every sharepoint.* operation (resource: a site alias from the connection's `channels` map) and since 0.86.0 every calendar.*, drive.*, docs.*, sheets.*, outlook.*, onedrive.*, excel.* and teams.* operation (resource: the provider's fixed alias for the person's own data, or for teams.* a channel alias from the connection's `channels` map): user mode only — the app acts as the signed-in person after their own consent.
|
|
103
148
|
*/
|
|
104
149
|
export interface UserModeChannelOperation {
|
|
105
150
|
identity: 'user';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
3
|
|
|
4
|
-
export const ContractRepositoryVersion = "0.
|
|
5
|
-
export const ContractPublishVersion = "0.
|
|
6
|
-
export const ContractPublishTag = "v0.
|
|
7
|
-
export const ContractSchemasDigest = "sha256:
|
|
4
|
+
export const ContractRepositoryVersion = "0.86.0.0" as const;
|
|
5
|
+
export const ContractPublishVersion = "0.86.0" as const;
|
|
6
|
+
export const ContractPublishTag = "v0.86.0" as const;
|
|
7
|
+
export const ContractSchemasDigest = "sha256:f510802c5ba082d403b8f4c5210da322861197b8ea5558384ac5c6403777fbd7" as const;
|
|
8
8
|
export const ContractAiFixturesDigest = "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6" as const;
|
|
9
|
-
export const ContractGeneratedGoDigest = "sha256:
|
|
10
|
-
export const ContractGeneratedTypeScriptDigest = "sha256:
|
|
9
|
+
export const ContractGeneratedGoDigest = "sha256:641550cc398b29feeec00af2b0e79b52ceb4ee5ac77b0a4f0e6e7b7447adde39" as const;
|
|
10
|
+
export const ContractGeneratedTypeScriptDigest = "sha256:6961f95736c7a41ac7af014d78bc877a07677bdedccfed2255395c956a3ef405" as const;
|
package/gen-ts/data-grant-v2.ts
CHANGED
|
@@ -12,7 +12,7 @@ export type DataGrantV2ProvisioningStatus = 'NONE' | 'PENDING' | 'FAILED' | 'DON
|
|
|
12
12
|
export type DataGrantV2CleanupStatus = 'PENDING' | 'FAILED' | 'DONE';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
|
-
* An app's integration grant for one connection, environment and identity mode (control table sk APP#<appId>#IGRANT#<environment>#<sourceId>#<mode>; grantId = base64url(JSON ["v2",appId,environment,sourceId,mode])). Additive to the legacy DataGrant (data-grant.schema.json), which is never consulted by v2 paths. A fresh REQUESTED record carries empty `operations`/`resources` until the attached request is approved; approved resources are structured `{name, columns?}` entries (a Slack channel alias, the fixed Gmail `inbox` alias, a Basecamp project alias or the fixed Basecamp `account` alias, a SharePoint site alias, or a warehouse view alias with its approved columns). Expiry is enforced from UTC time on every call and SDK calls never extend it; `expiredAt` is stamped by the recovery sweep afterwards. Status edges live in x-transitions; DENIED and REVOKED are terminal (a regrant after revocation is a new REQUESTED record once cleanup is DONE). Database grants add credentialRef/mintedPrincipal; both hold references only. An app-mode Slack grant may carry `presentation` (0.53.0): the IT-approved display name and icon the app's posts go out under, copied from the approved request and read by every post — never from the call. `identityMode` and `installation` are the deprecated 0.45.0 spellings: the record carries `mode`, and a SaaS grant runs on the connection's single installation.
|
|
15
|
+
* An app's integration grant for one connection, environment and identity mode (control table sk APP#<appId>#IGRANT#<environment>#<sourceId>#<mode>; grantId = base64url(JSON ["v2",appId,environment,sourceId,mode])). Additive to the legacy DataGrant (data-grant.schema.json), which is never consulted by v2 paths. A fresh REQUESTED record carries empty `operations`/`resources` until the attached request is approved; approved resources are structured `{name, columns?}` entries (a Slack channel alias, the fixed Gmail `inbox` alias, a Basecamp project alias or the fixed Basecamp `account` alias, a SharePoint site alias, a Google Workspace or Microsoft 365 provider's fixed alias or a Teams channel alias (0.86.0), or a warehouse view alias with its approved columns). Expiry is enforced from UTC time on every call and SDK calls never extend it; `expiredAt` is stamped by the recovery sweep afterwards. Status edges live in x-transitions; DENIED and REVOKED are terminal (a regrant after revocation is a new REQUESTED record once cleanup is DONE). Database grants add credentialRef/mintedPrincipal; both hold references only. An app-mode Slack grant may carry `presentation` (0.53.0): the IT-approved display name and icon the app's posts go out under, copied from the approved request and read by every post — never from the call. `identityMode` and `installation` are the deprecated 0.45.0 spellings: the record carries `mode`, and a SaaS grant runs on the connection's single installation.
|
|
16
16
|
*/
|
|
17
17
|
export interface DataGrantV2 {
|
|
18
18
|
schema: 'harbour.data-grant/2.0';
|
|
@@ -33,9 +33,9 @@ export interface DataGrantV2 {
|
|
|
33
33
|
kind: 'saas' | 'database' | 'service';
|
|
34
34
|
status: DataGrantV2Status;
|
|
35
35
|
/**
|
|
36
|
-
* Approved operations; each must match this grant's mode. Empty until the first approval. At most the
|
|
36
|
+
* Approved operations; each must match this grant's mode. Empty until the first approval. At most the seventy-eight SaaS operations (0.86.0: eleven Slack and Gmail, eleven Basecamp, nine SharePoint, two phone, forty-five Google Workspace and Microsoft 365); a database grant holds up to two (warehouse.view.read, warehouse.table.append).
|
|
37
37
|
*
|
|
38
|
-
* @maxItems
|
|
38
|
+
* @maxItems 78
|
|
39
39
|
*/
|
|
40
40
|
operations: (
|
|
41
41
|
| 'slack.channel.history'
|
|
@@ -71,6 +71,51 @@ export interface DataGrantV2 {
|
|
|
71
71
|
| 'sharepoint.file.upload'
|
|
72
72
|
| 'phone.sms.list'
|
|
73
73
|
| 'phone.number.get'
|
|
74
|
+
| 'calendar.calendar.list'
|
|
75
|
+
| 'calendar.event.list'
|
|
76
|
+
| 'calendar.event.read'
|
|
77
|
+
| 'calendar.event.create'
|
|
78
|
+
| 'calendar.event.update'
|
|
79
|
+
| 'calendar.event.cancel'
|
|
80
|
+
| 'drive.file.list'
|
|
81
|
+
| 'drive.file.search'
|
|
82
|
+
| 'drive.file.read'
|
|
83
|
+
| 'drive.file.upload'
|
|
84
|
+
| 'drive.folder.create'
|
|
85
|
+
| 'docs.document.read'
|
|
86
|
+
| 'docs.document.create'
|
|
87
|
+
| 'docs.document.append'
|
|
88
|
+
| 'docs.text.replace'
|
|
89
|
+
| 'sheets.spreadsheet.read'
|
|
90
|
+
| 'sheets.values.read'
|
|
91
|
+
| 'sheets.values.append'
|
|
92
|
+
| 'sheets.values.update'
|
|
93
|
+
| 'sheets.values.clear'
|
|
94
|
+
| 'sheets.spreadsheet.create'
|
|
95
|
+
| 'outlook.message.list'
|
|
96
|
+
| 'outlook.message.read'
|
|
97
|
+
| 'outlook.attachment.read'
|
|
98
|
+
| 'outlook.message.send'
|
|
99
|
+
| 'outlook.message.reply'
|
|
100
|
+
| 'outlook.event.list'
|
|
101
|
+
| 'outlook.event.read'
|
|
102
|
+
| 'outlook.event.create'
|
|
103
|
+
| 'outlook.event.update'
|
|
104
|
+
| 'outlook.event.cancel'
|
|
105
|
+
| 'onedrive.file.list'
|
|
106
|
+
| 'onedrive.file.search'
|
|
107
|
+
| 'onedrive.file.read'
|
|
108
|
+
| 'onedrive.file.upload'
|
|
109
|
+
| 'onedrive.folder.create'
|
|
110
|
+
| 'excel.worksheet.list'
|
|
111
|
+
| 'excel.range.read'
|
|
112
|
+
| 'excel.range.update'
|
|
113
|
+
| 'excel.table.list'
|
|
114
|
+
| 'excel.row.add'
|
|
115
|
+
| 'excel.worksheet.add'
|
|
116
|
+
| 'teams.message.list'
|
|
117
|
+
| 'teams.message.post'
|
|
118
|
+
| 'teams.reply.post'
|
|
74
119
|
| 'warehouse.view.read'
|
|
75
120
|
| 'warehouse.table.append'
|
|
76
121
|
| 'service.request'
|