@fourier-labs/harbour-contracts 0.85.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.
@@ -2,7 +2,7 @@
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://schemas.harbour.dev/app-integrations-declaration.schema.json",
4
4
  "title": "AppIntegrationsDeclaration",
5
- "description": "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 (thirty-three operations since 0.78.0, ADR 0018, ADR 0022 and ADR 0024). Each operation carries a fixed identity mode \u2014 slack.dm.send=app, slack.user.lookup=app, every gmail.* operation=user, every basecamp.* operation=user, every sharepoint.* operation=user, warehouse.view.read=app, service.request=app \u2014 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) \u2014 a mode IT did not approve is refused, never swapped for the other. A `saas` connection may declare only the Slack, Gmail, Basecamp and SharePoint 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. 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.",
5
+ "description": "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 \u2014 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 \u2014 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) \u2014 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.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "required": [
@@ -86,11 +86,56 @@
86
86
  "sharepoint.file.upload",
87
87
  "phone.sms.list",
88
88
  "phone.number.get",
89
+ "calendar.calendar.list",
90
+ "calendar.event.list",
91
+ "calendar.event.read",
92
+ "calendar.event.create",
93
+ "calendar.event.update",
94
+ "calendar.event.cancel",
95
+ "drive.file.list",
96
+ "drive.file.search",
97
+ "drive.file.read",
98
+ "drive.file.upload",
99
+ "drive.folder.create",
100
+ "docs.document.read",
101
+ "docs.document.create",
102
+ "docs.document.append",
103
+ "docs.text.replace",
104
+ "sheets.spreadsheet.read",
105
+ "sheets.values.read",
106
+ "sheets.values.append",
107
+ "sheets.values.update",
108
+ "sheets.values.clear",
109
+ "sheets.spreadsheet.create",
110
+ "outlook.message.list",
111
+ "outlook.message.read",
112
+ "outlook.attachment.read",
113
+ "outlook.message.send",
114
+ "outlook.message.reply",
115
+ "outlook.event.list",
116
+ "outlook.event.read",
117
+ "outlook.event.create",
118
+ "outlook.event.update",
119
+ "outlook.event.cancel",
120
+ "onedrive.file.list",
121
+ "onedrive.file.search",
122
+ "onedrive.file.read",
123
+ "onedrive.file.upload",
124
+ "onedrive.folder.create",
125
+ "excel.worksheet.list",
126
+ "excel.range.read",
127
+ "excel.range.update",
128
+ "excel.table.list",
129
+ "excel.row.add",
130
+ "excel.worksheet.add",
131
+ "teams.message.list",
132
+ "teams.message.post",
133
+ "teams.reply.post",
89
134
  "warehouse.view.read",
90
135
  "warehouse.table.append",
91
136
  "service.request"
92
137
  ],
93
- "description": "Closed operation set. Extending it is a contracts change. 0.78.0 (ADR 0024) adds the nine SharePoint operations, every one user mode only on a site alias (a key of the connection's `channels` map, holding a Microsoft Graph site id): sharepoint.list.list, sharepoint.item.list, sharepoint.item.create (a receipted write: explicit action, idempotencyKey), sharepoint.item.update (a PATCH, idempotent at Graph, no key), sharepoint.drive.list, sharepoint.file.list, sharepoint.file.search, sharepoint.file.read and sharepoint.file.upload (a receipted write). 0.76.0 (ADR 0022) adds the eleven Basecamp operations, every one user mode only like gmail.*: basecamp.project.list (the projects of the company's pinned Basecamp account; its resource is the fixed `account` alias), and on one mapped project (the resource is a project alias, a key of the connection's `channels` map) basecamp.todolist.list, basecamp.todo.list, basecamp.todo.create (a receipted write: explicit action, idempotencyKey), basecamp.todo.complete (idempotent at Basecamp, no key), basecamp.message.list, basecamp.message.post, basecamp.comment.list, basecamp.comment.post, basecamp.campfire.post (the three posts are receipted writes) and basecamp.people.list. gmail.message.send (0.50.0) sends one email as the signed-in person: a send like slack.message.post (explicit Send, idempotencyKey, write receipt) under user identity; since 0.71.0 it may carry an HTML body and attachments. slack.message.post (0.53.0) runs in the mode the app declares: app (the company's Slack app, under the IT-approved per-app name) or user (the signed-in person, after their consent); since 0.55.0 each call names which of the approved modes it runs under. 0.71.0 (ADR 0018) adds slack.message.update and slack.message.delete (declared mode, like post), slack.dm.send (app mode: a direct message to 1..8 workspace members named by email), slack.user.lookup (app mode: email to Slack user id), gmail.thread.read (every message of one thread) and gmail.attachment.read (one attachment's bytes), and lets slack.channel.history run in app mode as well as user mode. 0.82.0 (ADR 0028) adds phone.sms.list (app mode only, a number alias from a phone connection's `channels` map: the SMS received on that number since a time) and warehouse.table.append (app mode only on a database connection, a receipted write with idempotencyKey: rows appended to a view alias whose mapping says `access: append`). 0.83.0 (ADR 0029) adds phone.number.get (app mode only, read-only, no input, on a number alias from a phone connection's `channels` map: the E.164 number that alias maps to, so the app — or a computer-use agent it drives — can type it into a portal that signs in by mobile number). 0.85.0 (ADR 0031) raises warehouse.table.append's `rows` from 1..500 to 1..5000 records (the byte cap stays governance's, now 8 MiB), so a downloaded report of a few thousand rows lands in one call."
138
+ "description": "Closed operation set. Extending it is a contracts change. 0.86.0 (ADR 0032) adds the forty-five Google Workspace and Microsoft 365 operations, every one user mode only: on the provider's fixed alias for the signed-in person's own data, calendar.calendar.list, calendar.event.list, calendar.event.read, calendar.event.create (a receipted write: explicit action, idempotencyKey), calendar.event.update and calendar.event.cancel (idempotent at Google, no key); drive.file.list, drive.file.search, drive.file.read, drive.file.upload and drive.folder.create (receipted writes); docs.document.read, docs.document.create (receipted), docs.document.append and docs.text.replace (no key); sheets.spreadsheet.read, sheets.values.read, sheets.values.append (receipted), sheets.values.update and sheets.values.clear (no key), sheets.spreadsheet.create (receipted); outlook.message.list, outlook.message.read, outlook.attachment.read, outlook.message.send and outlook.message.reply (receipted sends, as gmail.message.send), outlook.event.list, outlook.event.read, outlook.event.create (receipted), outlook.event.update and outlook.event.cancel (no key); onedrive.file.list, onedrive.file.search, onedrive.file.read, onedrive.file.upload and onedrive.folder.create (receipted); excel.worksheet.list, excel.range.read, excel.range.update (no key), excel.table.list, excel.row.add and excel.worksheet.add (receipted); and on a Teams channel alias (a key of the connection's `channels` map) teams.message.list, teams.message.post and teams.reply.post (receipted). 0.78.0 (ADR 0024) adds the nine SharePoint operations, every one user mode only on a site alias (a key of the connection's `channels` map, holding a Microsoft Graph site id): sharepoint.list.list, sharepoint.item.list, sharepoint.item.create (a receipted write: explicit action, idempotencyKey), sharepoint.item.update (a PATCH, idempotent at Graph, no key), sharepoint.drive.list, sharepoint.file.list, sharepoint.file.search, sharepoint.file.read and sharepoint.file.upload (a receipted write). 0.76.0 (ADR 0022) adds the eleven Basecamp operations, every one user mode only like gmail.*: basecamp.project.list (the projects of the company's pinned Basecamp account; its resource is the fixed `account` alias), and on one mapped project (the resource is a project alias, a key of the connection's `channels` map) basecamp.todolist.list, basecamp.todo.list, basecamp.todo.create (a receipted write: explicit action, idempotencyKey), basecamp.todo.complete (idempotent at Basecamp, no key), basecamp.message.list, basecamp.message.post, basecamp.comment.list, basecamp.comment.post, basecamp.campfire.post (the three posts are receipted writes) and basecamp.people.list. gmail.message.send (0.50.0) sends one email as the signed-in person: a send like slack.message.post (explicit Send, idempotencyKey, write receipt) under user identity; since 0.71.0 it may carry an HTML body and attachments. slack.message.post (0.53.0) runs in the mode the app declares: app (the company's Slack app, under the IT-approved per-app name) or user (the signed-in person, after their consent); since 0.55.0 each call names which of the approved modes it runs under. 0.71.0 (ADR 0018) adds slack.message.update and slack.message.delete (declared mode, like post), slack.dm.send (app mode: a direct message to 1..8 workspace members named by email), slack.user.lookup (app mode: email to Slack user id), gmail.thread.read (every message of one thread) and gmail.attachment.read (one attachment's bytes), and lets slack.channel.history run in app mode as well as user mode. 0.82.0 (ADR 0028) adds phone.sms.list (app mode only, a number alias from a phone connection's `channels` map: the SMS received on that number since a time) and warehouse.table.append (app mode only on a database connection, a receipted write with idempotencyKey: rows appended to a view alias whose mapping says `access: append`). 0.83.0 (ADR 0029) adds phone.number.get (app mode only, read-only, no input, on a number alias from a phone connection's `channels` map: the E.164 number that alias maps to, so the app \u2014 or a computer-use agent it drives \u2014 can type it into a portal that signs in by mobile number). 0.85.0 (ADR 0031) raises warehouse.table.append's `rows` from 1..500 to 1..5000 records (the byte cap stays governance's, now 8 MiB), so a downloaded report of a few thousand rows lands in one call."
94
139
  },
95
140
  "IntegrationIdentityMode": {
96
141
  "type": "string",
@@ -189,7 +234,7 @@
189
234
  "identity",
190
235
  "resources"
191
236
  ],
192
- "description": "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) and since 0.78.0 every sharepoint.* operation (resource: a site alias from the connection's `channels` map): user mode only — the app acts as the signed-in person after their own consent.",
237
+ "description": "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 \u2014 the app acts as the signed-in person after their own consent.",
193
238
  "properties": {
194
239
  "identity": {
195
240
  "type": "string",
@@ -379,6 +424,141 @@
379
424
  "phone.number.get": {
380
425
  "$ref": "#/definitions/AppModeChannelOperation"
381
426
  },
427
+ "calendar.calendar.list": {
428
+ "$ref": "#/definitions/UserModeChannelOperation"
429
+ },
430
+ "calendar.event.list": {
431
+ "$ref": "#/definitions/UserModeChannelOperation"
432
+ },
433
+ "calendar.event.read": {
434
+ "$ref": "#/definitions/UserModeChannelOperation"
435
+ },
436
+ "calendar.event.create": {
437
+ "$ref": "#/definitions/UserModeChannelOperation"
438
+ },
439
+ "calendar.event.update": {
440
+ "$ref": "#/definitions/UserModeChannelOperation"
441
+ },
442
+ "calendar.event.cancel": {
443
+ "$ref": "#/definitions/UserModeChannelOperation"
444
+ },
445
+ "drive.file.list": {
446
+ "$ref": "#/definitions/UserModeChannelOperation"
447
+ },
448
+ "drive.file.search": {
449
+ "$ref": "#/definitions/UserModeChannelOperation"
450
+ },
451
+ "drive.file.read": {
452
+ "$ref": "#/definitions/UserModeChannelOperation"
453
+ },
454
+ "drive.file.upload": {
455
+ "$ref": "#/definitions/UserModeChannelOperation"
456
+ },
457
+ "drive.folder.create": {
458
+ "$ref": "#/definitions/UserModeChannelOperation"
459
+ },
460
+ "docs.document.read": {
461
+ "$ref": "#/definitions/UserModeChannelOperation"
462
+ },
463
+ "docs.document.create": {
464
+ "$ref": "#/definitions/UserModeChannelOperation"
465
+ },
466
+ "docs.document.append": {
467
+ "$ref": "#/definitions/UserModeChannelOperation"
468
+ },
469
+ "docs.text.replace": {
470
+ "$ref": "#/definitions/UserModeChannelOperation"
471
+ },
472
+ "sheets.spreadsheet.read": {
473
+ "$ref": "#/definitions/UserModeChannelOperation"
474
+ },
475
+ "sheets.values.read": {
476
+ "$ref": "#/definitions/UserModeChannelOperation"
477
+ },
478
+ "sheets.values.append": {
479
+ "$ref": "#/definitions/UserModeChannelOperation"
480
+ },
481
+ "sheets.values.update": {
482
+ "$ref": "#/definitions/UserModeChannelOperation"
483
+ },
484
+ "sheets.values.clear": {
485
+ "$ref": "#/definitions/UserModeChannelOperation"
486
+ },
487
+ "sheets.spreadsheet.create": {
488
+ "$ref": "#/definitions/UserModeChannelOperation"
489
+ },
490
+ "outlook.message.list": {
491
+ "$ref": "#/definitions/UserModeChannelOperation"
492
+ },
493
+ "outlook.message.read": {
494
+ "$ref": "#/definitions/UserModeChannelOperation"
495
+ },
496
+ "outlook.attachment.read": {
497
+ "$ref": "#/definitions/UserModeChannelOperation"
498
+ },
499
+ "outlook.message.send": {
500
+ "$ref": "#/definitions/UserModeChannelOperation"
501
+ },
502
+ "outlook.message.reply": {
503
+ "$ref": "#/definitions/UserModeChannelOperation"
504
+ },
505
+ "outlook.event.list": {
506
+ "$ref": "#/definitions/UserModeChannelOperation"
507
+ },
508
+ "outlook.event.read": {
509
+ "$ref": "#/definitions/UserModeChannelOperation"
510
+ },
511
+ "outlook.event.create": {
512
+ "$ref": "#/definitions/UserModeChannelOperation"
513
+ },
514
+ "outlook.event.update": {
515
+ "$ref": "#/definitions/UserModeChannelOperation"
516
+ },
517
+ "outlook.event.cancel": {
518
+ "$ref": "#/definitions/UserModeChannelOperation"
519
+ },
520
+ "onedrive.file.list": {
521
+ "$ref": "#/definitions/UserModeChannelOperation"
522
+ },
523
+ "onedrive.file.search": {
524
+ "$ref": "#/definitions/UserModeChannelOperation"
525
+ },
526
+ "onedrive.file.read": {
527
+ "$ref": "#/definitions/UserModeChannelOperation"
528
+ },
529
+ "onedrive.file.upload": {
530
+ "$ref": "#/definitions/UserModeChannelOperation"
531
+ },
532
+ "onedrive.folder.create": {
533
+ "$ref": "#/definitions/UserModeChannelOperation"
534
+ },
535
+ "excel.worksheet.list": {
536
+ "$ref": "#/definitions/UserModeChannelOperation"
537
+ },
538
+ "excel.range.read": {
539
+ "$ref": "#/definitions/UserModeChannelOperation"
540
+ },
541
+ "excel.range.update": {
542
+ "$ref": "#/definitions/UserModeChannelOperation"
543
+ },
544
+ "excel.table.list": {
545
+ "$ref": "#/definitions/UserModeChannelOperation"
546
+ },
547
+ "excel.row.add": {
548
+ "$ref": "#/definitions/UserModeChannelOperation"
549
+ },
550
+ "excel.worksheet.add": {
551
+ "$ref": "#/definitions/UserModeChannelOperation"
552
+ },
553
+ "teams.message.list": {
554
+ "$ref": "#/definitions/UserModeChannelOperation"
555
+ },
556
+ "teams.message.post": {
557
+ "$ref": "#/definitions/UserModeChannelOperation"
558
+ },
559
+ "teams.reply.post": {
560
+ "$ref": "#/definitions/UserModeChannelOperation"
561
+ },
382
562
  "warehouse.view.read": {
383
563
  "$ref": "#/definitions/AppModeViewOperation"
384
564
  },
@@ -604,6 +784,231 @@
604
784
  "phone.number.get"
605
785
  ]
606
786
  },
787
+ {
788
+ "required": [
789
+ "calendar.calendar.list"
790
+ ]
791
+ },
792
+ {
793
+ "required": [
794
+ "calendar.event.list"
795
+ ]
796
+ },
797
+ {
798
+ "required": [
799
+ "calendar.event.read"
800
+ ]
801
+ },
802
+ {
803
+ "required": [
804
+ "calendar.event.create"
805
+ ]
806
+ },
807
+ {
808
+ "required": [
809
+ "calendar.event.update"
810
+ ]
811
+ },
812
+ {
813
+ "required": [
814
+ "calendar.event.cancel"
815
+ ]
816
+ },
817
+ {
818
+ "required": [
819
+ "drive.file.list"
820
+ ]
821
+ },
822
+ {
823
+ "required": [
824
+ "drive.file.search"
825
+ ]
826
+ },
827
+ {
828
+ "required": [
829
+ "drive.file.read"
830
+ ]
831
+ },
832
+ {
833
+ "required": [
834
+ "drive.file.upload"
835
+ ]
836
+ },
837
+ {
838
+ "required": [
839
+ "drive.folder.create"
840
+ ]
841
+ },
842
+ {
843
+ "required": [
844
+ "docs.document.read"
845
+ ]
846
+ },
847
+ {
848
+ "required": [
849
+ "docs.document.create"
850
+ ]
851
+ },
852
+ {
853
+ "required": [
854
+ "docs.document.append"
855
+ ]
856
+ },
857
+ {
858
+ "required": [
859
+ "docs.text.replace"
860
+ ]
861
+ },
862
+ {
863
+ "required": [
864
+ "sheets.spreadsheet.read"
865
+ ]
866
+ },
867
+ {
868
+ "required": [
869
+ "sheets.values.read"
870
+ ]
871
+ },
872
+ {
873
+ "required": [
874
+ "sheets.values.append"
875
+ ]
876
+ },
877
+ {
878
+ "required": [
879
+ "sheets.values.update"
880
+ ]
881
+ },
882
+ {
883
+ "required": [
884
+ "sheets.values.clear"
885
+ ]
886
+ },
887
+ {
888
+ "required": [
889
+ "sheets.spreadsheet.create"
890
+ ]
891
+ },
892
+ {
893
+ "required": [
894
+ "outlook.message.list"
895
+ ]
896
+ },
897
+ {
898
+ "required": [
899
+ "outlook.message.read"
900
+ ]
901
+ },
902
+ {
903
+ "required": [
904
+ "outlook.attachment.read"
905
+ ]
906
+ },
907
+ {
908
+ "required": [
909
+ "outlook.message.send"
910
+ ]
911
+ },
912
+ {
913
+ "required": [
914
+ "outlook.message.reply"
915
+ ]
916
+ },
917
+ {
918
+ "required": [
919
+ "outlook.event.list"
920
+ ]
921
+ },
922
+ {
923
+ "required": [
924
+ "outlook.event.read"
925
+ ]
926
+ },
927
+ {
928
+ "required": [
929
+ "outlook.event.create"
930
+ ]
931
+ },
932
+ {
933
+ "required": [
934
+ "outlook.event.update"
935
+ ]
936
+ },
937
+ {
938
+ "required": [
939
+ "outlook.event.cancel"
940
+ ]
941
+ },
942
+ {
943
+ "required": [
944
+ "onedrive.file.list"
945
+ ]
946
+ },
947
+ {
948
+ "required": [
949
+ "onedrive.file.search"
950
+ ]
951
+ },
952
+ {
953
+ "required": [
954
+ "onedrive.file.read"
955
+ ]
956
+ },
957
+ {
958
+ "required": [
959
+ "onedrive.file.upload"
960
+ ]
961
+ },
962
+ {
963
+ "required": [
964
+ "onedrive.folder.create"
965
+ ]
966
+ },
967
+ {
968
+ "required": [
969
+ "excel.worksheet.list"
970
+ ]
971
+ },
972
+ {
973
+ "required": [
974
+ "excel.range.read"
975
+ ]
976
+ },
977
+ {
978
+ "required": [
979
+ "excel.range.update"
980
+ ]
981
+ },
982
+ {
983
+ "required": [
984
+ "excel.table.list"
985
+ ]
986
+ },
987
+ {
988
+ "required": [
989
+ "excel.row.add"
990
+ ]
991
+ },
992
+ {
993
+ "required": [
994
+ "excel.worksheet.add"
995
+ ]
996
+ },
997
+ {
998
+ "required": [
999
+ "teams.message.list"
1000
+ ]
1001
+ },
1002
+ {
1003
+ "required": [
1004
+ "teams.message.post"
1005
+ ]
1006
+ },
1007
+ {
1008
+ "required": [
1009
+ "teams.reply.post"
1010
+ ]
1011
+ },
607
1012
  {
608
1013
  "required": [
609
1014
  "service.request"
@@ -635,167 +1040,392 @@
635
1040
  "anyOf": [
636
1041
  {
637
1042
  "required": [
638
- "slack.channel.history"
1043
+ "slack.channel.history"
1044
+ ]
1045
+ },
1046
+ {
1047
+ "required": [
1048
+ "slack.message.post"
1049
+ ]
1050
+ },
1051
+ {
1052
+ "required": [
1053
+ "slack.message.update"
1054
+ ]
1055
+ },
1056
+ {
1057
+ "required": [
1058
+ "slack.message.delete"
1059
+ ]
1060
+ },
1061
+ {
1062
+ "required": [
1063
+ "slack.dm.send"
1064
+ ]
1065
+ },
1066
+ {
1067
+ "required": [
1068
+ "slack.user.lookup"
1069
+ ]
1070
+ },
1071
+ {
1072
+ "required": [
1073
+ "gmail.thread.list"
1074
+ ]
1075
+ },
1076
+ {
1077
+ "required": [
1078
+ "gmail.thread.read"
1079
+ ]
1080
+ },
1081
+ {
1082
+ "required": [
1083
+ "gmail.message.read"
1084
+ ]
1085
+ },
1086
+ {
1087
+ "required": [
1088
+ "gmail.message.send"
1089
+ ]
1090
+ },
1091
+ {
1092
+ "required": [
1093
+ "gmail.attachment.read"
1094
+ ]
1095
+ },
1096
+ {
1097
+ "required": [
1098
+ "basecamp.project.list"
1099
+ ]
1100
+ },
1101
+ {
1102
+ "required": [
1103
+ "basecamp.todolist.list"
1104
+ ]
1105
+ },
1106
+ {
1107
+ "required": [
1108
+ "basecamp.todo.list"
1109
+ ]
1110
+ },
1111
+ {
1112
+ "required": [
1113
+ "basecamp.todo.create"
1114
+ ]
1115
+ },
1116
+ {
1117
+ "required": [
1118
+ "basecamp.todo.complete"
1119
+ ]
1120
+ },
1121
+ {
1122
+ "required": [
1123
+ "basecamp.message.list"
1124
+ ]
1125
+ },
1126
+ {
1127
+ "required": [
1128
+ "basecamp.message.post"
1129
+ ]
1130
+ },
1131
+ {
1132
+ "required": [
1133
+ "basecamp.comment.list"
1134
+ ]
1135
+ },
1136
+ {
1137
+ "required": [
1138
+ "basecamp.comment.post"
1139
+ ]
1140
+ },
1141
+ {
1142
+ "required": [
1143
+ "basecamp.campfire.post"
1144
+ ]
1145
+ },
1146
+ {
1147
+ "required": [
1148
+ "basecamp.people.list"
1149
+ ]
1150
+ },
1151
+ {
1152
+ "required": [
1153
+ "sharepoint.list.list"
1154
+ ]
1155
+ },
1156
+ {
1157
+ "required": [
1158
+ "sharepoint.item.list"
1159
+ ]
1160
+ },
1161
+ {
1162
+ "required": [
1163
+ "sharepoint.item.create"
1164
+ ]
1165
+ },
1166
+ {
1167
+ "required": [
1168
+ "sharepoint.item.update"
1169
+ ]
1170
+ },
1171
+ {
1172
+ "required": [
1173
+ "sharepoint.drive.list"
1174
+ ]
1175
+ },
1176
+ {
1177
+ "required": [
1178
+ "sharepoint.file.list"
1179
+ ]
1180
+ },
1181
+ {
1182
+ "required": [
1183
+ "sharepoint.file.search"
1184
+ ]
1185
+ },
1186
+ {
1187
+ "required": [
1188
+ "sharepoint.file.read"
1189
+ ]
1190
+ },
1191
+ {
1192
+ "required": [
1193
+ "sharepoint.file.upload"
1194
+ ]
1195
+ },
1196
+ {
1197
+ "required": [
1198
+ "phone.sms.list"
1199
+ ]
1200
+ },
1201
+ {
1202
+ "required": [
1203
+ "phone.number.get"
1204
+ ]
1205
+ },
1206
+ {
1207
+ "required": [
1208
+ "calendar.calendar.list"
1209
+ ]
1210
+ },
1211
+ {
1212
+ "required": [
1213
+ "calendar.event.list"
1214
+ ]
1215
+ },
1216
+ {
1217
+ "required": [
1218
+ "calendar.event.read"
1219
+ ]
1220
+ },
1221
+ {
1222
+ "required": [
1223
+ "calendar.event.create"
1224
+ ]
1225
+ },
1226
+ {
1227
+ "required": [
1228
+ "calendar.event.update"
1229
+ ]
1230
+ },
1231
+ {
1232
+ "required": [
1233
+ "calendar.event.cancel"
1234
+ ]
1235
+ },
1236
+ {
1237
+ "required": [
1238
+ "drive.file.list"
1239
+ ]
1240
+ },
1241
+ {
1242
+ "required": [
1243
+ "drive.file.search"
1244
+ ]
1245
+ },
1246
+ {
1247
+ "required": [
1248
+ "drive.file.read"
1249
+ ]
1250
+ },
1251
+ {
1252
+ "required": [
1253
+ "drive.file.upload"
1254
+ ]
1255
+ },
1256
+ {
1257
+ "required": [
1258
+ "drive.folder.create"
1259
+ ]
1260
+ },
1261
+ {
1262
+ "required": [
1263
+ "docs.document.read"
1264
+ ]
1265
+ },
1266
+ {
1267
+ "required": [
1268
+ "docs.document.create"
639
1269
  ]
640
1270
  },
641
1271
  {
642
1272
  "required": [
643
- "slack.message.post"
1273
+ "docs.document.append"
644
1274
  ]
645
1275
  },
646
1276
  {
647
1277
  "required": [
648
- "slack.message.update"
1278
+ "docs.text.replace"
649
1279
  ]
650
1280
  },
651
1281
  {
652
1282
  "required": [
653
- "slack.message.delete"
1283
+ "sheets.spreadsheet.read"
654
1284
  ]
655
1285
  },
656
1286
  {
657
1287
  "required": [
658
- "slack.dm.send"
1288
+ "sheets.values.read"
659
1289
  ]
660
1290
  },
661
1291
  {
662
1292
  "required": [
663
- "slack.user.lookup"
1293
+ "sheets.values.append"
664
1294
  ]
665
1295
  },
666
1296
  {
667
1297
  "required": [
668
- "gmail.thread.list"
1298
+ "sheets.values.update"
669
1299
  ]
670
1300
  },
671
1301
  {
672
1302
  "required": [
673
- "gmail.thread.read"
1303
+ "sheets.values.clear"
674
1304
  ]
675
1305
  },
676
1306
  {
677
1307
  "required": [
678
- "gmail.message.read"
1308
+ "sheets.spreadsheet.create"
679
1309
  ]
680
1310
  },
681
1311
  {
682
1312
  "required": [
683
- "gmail.message.send"
1313
+ "outlook.message.list"
684
1314
  ]
685
1315
  },
686
1316
  {
687
1317
  "required": [
688
- "gmail.attachment.read"
1318
+ "outlook.message.read"
689
1319
  ]
690
1320
  },
691
1321
  {
692
1322
  "required": [
693
- "basecamp.project.list"
1323
+ "outlook.attachment.read"
694
1324
  ]
695
1325
  },
696
1326
  {
697
1327
  "required": [
698
- "basecamp.todolist.list"
1328
+ "outlook.message.send"
699
1329
  ]
700
1330
  },
701
1331
  {
702
1332
  "required": [
703
- "basecamp.todo.list"
1333
+ "outlook.message.reply"
704
1334
  ]
705
1335
  },
706
1336
  {
707
1337
  "required": [
708
- "basecamp.todo.create"
1338
+ "outlook.event.list"
709
1339
  ]
710
1340
  },
711
1341
  {
712
1342
  "required": [
713
- "basecamp.todo.complete"
1343
+ "outlook.event.read"
714
1344
  ]
715
1345
  },
716
1346
  {
717
1347
  "required": [
718
- "basecamp.message.list"
1348
+ "outlook.event.create"
719
1349
  ]
720
1350
  },
721
1351
  {
722
1352
  "required": [
723
- "basecamp.message.post"
1353
+ "outlook.event.update"
724
1354
  ]
725
1355
  },
726
1356
  {
727
1357
  "required": [
728
- "basecamp.comment.list"
1358
+ "outlook.event.cancel"
729
1359
  ]
730
1360
  },
731
1361
  {
732
1362
  "required": [
733
- "basecamp.comment.post"
1363
+ "onedrive.file.list"
734
1364
  ]
735
1365
  },
736
1366
  {
737
1367
  "required": [
738
- "basecamp.campfire.post"
1368
+ "onedrive.file.search"
739
1369
  ]
740
1370
  },
741
1371
  {
742
1372
  "required": [
743
- "basecamp.people.list"
1373
+ "onedrive.file.read"
744
1374
  ]
745
1375
  },
746
1376
  {
747
1377
  "required": [
748
- "sharepoint.list.list"
1378
+ "onedrive.file.upload"
749
1379
  ]
750
1380
  },
751
1381
  {
752
1382
  "required": [
753
- "sharepoint.item.list"
1383
+ "onedrive.folder.create"
754
1384
  ]
755
1385
  },
756
1386
  {
757
1387
  "required": [
758
- "sharepoint.item.create"
1388
+ "excel.worksheet.list"
759
1389
  ]
760
1390
  },
761
1391
  {
762
1392
  "required": [
763
- "sharepoint.item.update"
1393
+ "excel.range.read"
764
1394
  ]
765
1395
  },
766
1396
  {
767
1397
  "required": [
768
- "sharepoint.drive.list"
1398
+ "excel.range.update"
769
1399
  ]
770
1400
  },
771
1401
  {
772
1402
  "required": [
773
- "sharepoint.file.list"
1403
+ "excel.table.list"
774
1404
  ]
775
1405
  },
776
1406
  {
777
1407
  "required": [
778
- "sharepoint.file.search"
1408
+ "excel.row.add"
779
1409
  ]
780
1410
  },
781
1411
  {
782
1412
  "required": [
783
- "sharepoint.file.read"
1413
+ "excel.worksheet.add"
784
1414
  ]
785
1415
  },
786
1416
  {
787
1417
  "required": [
788
- "sharepoint.file.upload"
1418
+ "teams.message.list"
789
1419
  ]
790
1420
  },
791
1421
  {
792
1422
  "required": [
793
- "phone.sms.list"
1423
+ "teams.message.post"
794
1424
  ]
795
1425
  },
796
1426
  {
797
1427
  "required": [
798
- "phone.number.get"
1428
+ "teams.reply.post"
799
1429
  ]
800
1430
  },
801
1431
  {
@@ -1076,6 +1706,316 @@
1076
1706
  }
1077
1707
  }
1078
1708
  },
1709
+ "company-calendar": {
1710
+ "kind": "saas",
1711
+ "operations": {
1712
+ "calendar.calendar.list": {
1713
+ "identity": "user",
1714
+ "resources": [
1715
+ "primary"
1716
+ ]
1717
+ },
1718
+ "calendar.event.list": {
1719
+ "identity": "user",
1720
+ "resources": [
1721
+ "primary"
1722
+ ]
1723
+ },
1724
+ "calendar.event.read": {
1725
+ "identity": "user",
1726
+ "resources": [
1727
+ "primary"
1728
+ ]
1729
+ },
1730
+ "calendar.event.create": {
1731
+ "identity": "user",
1732
+ "resources": [
1733
+ "primary"
1734
+ ]
1735
+ },
1736
+ "calendar.event.update": {
1737
+ "identity": "user",
1738
+ "resources": [
1739
+ "primary"
1740
+ ]
1741
+ },
1742
+ "calendar.event.cancel": {
1743
+ "identity": "user",
1744
+ "resources": [
1745
+ "primary"
1746
+ ]
1747
+ }
1748
+ }
1749
+ },
1750
+ "company-drive": {
1751
+ "kind": "saas",
1752
+ "operations": {
1753
+ "drive.file.list": {
1754
+ "identity": "user",
1755
+ "resources": [
1756
+ "my-drive"
1757
+ ]
1758
+ },
1759
+ "drive.file.search": {
1760
+ "identity": "user",
1761
+ "resources": [
1762
+ "my-drive"
1763
+ ]
1764
+ },
1765
+ "drive.file.read": {
1766
+ "identity": "user",
1767
+ "resources": [
1768
+ "my-drive"
1769
+ ]
1770
+ },
1771
+ "drive.file.upload": {
1772
+ "identity": "user",
1773
+ "resources": [
1774
+ "my-drive"
1775
+ ]
1776
+ },
1777
+ "drive.folder.create": {
1778
+ "identity": "user",
1779
+ "resources": [
1780
+ "my-drive"
1781
+ ]
1782
+ }
1783
+ }
1784
+ },
1785
+ "company-docs": {
1786
+ "kind": "saas",
1787
+ "operations": {
1788
+ "docs.document.read": {
1789
+ "identity": "user",
1790
+ "resources": [
1791
+ "my-docs"
1792
+ ]
1793
+ },
1794
+ "docs.document.create": {
1795
+ "identity": "user",
1796
+ "resources": [
1797
+ "my-docs"
1798
+ ]
1799
+ },
1800
+ "docs.document.append": {
1801
+ "identity": "user",
1802
+ "resources": [
1803
+ "my-docs"
1804
+ ]
1805
+ },
1806
+ "docs.text.replace": {
1807
+ "identity": "user",
1808
+ "resources": [
1809
+ "my-docs"
1810
+ ]
1811
+ }
1812
+ }
1813
+ },
1814
+ "company-sheets": {
1815
+ "kind": "saas",
1816
+ "operations": {
1817
+ "sheets.spreadsheet.read": {
1818
+ "identity": "user",
1819
+ "resources": [
1820
+ "my-sheets"
1821
+ ]
1822
+ },
1823
+ "sheets.values.read": {
1824
+ "identity": "user",
1825
+ "resources": [
1826
+ "my-sheets"
1827
+ ]
1828
+ },
1829
+ "sheets.values.append": {
1830
+ "identity": "user",
1831
+ "resources": [
1832
+ "my-sheets"
1833
+ ]
1834
+ },
1835
+ "sheets.values.update": {
1836
+ "identity": "user",
1837
+ "resources": [
1838
+ "my-sheets"
1839
+ ]
1840
+ },
1841
+ "sheets.values.clear": {
1842
+ "identity": "user",
1843
+ "resources": [
1844
+ "my-sheets"
1845
+ ]
1846
+ },
1847
+ "sheets.spreadsheet.create": {
1848
+ "identity": "user",
1849
+ "resources": [
1850
+ "my-sheets"
1851
+ ]
1852
+ }
1853
+ }
1854
+ },
1855
+ "company-outlook": {
1856
+ "kind": "saas",
1857
+ "operations": {
1858
+ "outlook.message.list": {
1859
+ "identity": "user",
1860
+ "resources": [
1861
+ "inbox"
1862
+ ]
1863
+ },
1864
+ "outlook.message.read": {
1865
+ "identity": "user",
1866
+ "resources": [
1867
+ "inbox"
1868
+ ]
1869
+ },
1870
+ "outlook.attachment.read": {
1871
+ "identity": "user",
1872
+ "resources": [
1873
+ "inbox"
1874
+ ]
1875
+ },
1876
+ "outlook.message.send": {
1877
+ "identity": "user",
1878
+ "resources": [
1879
+ "inbox"
1880
+ ]
1881
+ },
1882
+ "outlook.message.reply": {
1883
+ "identity": "user",
1884
+ "resources": [
1885
+ "inbox"
1886
+ ]
1887
+ },
1888
+ "outlook.event.list": {
1889
+ "identity": "user",
1890
+ "resources": [
1891
+ "inbox"
1892
+ ]
1893
+ },
1894
+ "outlook.event.read": {
1895
+ "identity": "user",
1896
+ "resources": [
1897
+ "inbox"
1898
+ ]
1899
+ },
1900
+ "outlook.event.create": {
1901
+ "identity": "user",
1902
+ "resources": [
1903
+ "inbox"
1904
+ ]
1905
+ },
1906
+ "outlook.event.update": {
1907
+ "identity": "user",
1908
+ "resources": [
1909
+ "inbox"
1910
+ ]
1911
+ },
1912
+ "outlook.event.cancel": {
1913
+ "identity": "user",
1914
+ "resources": [
1915
+ "inbox"
1916
+ ]
1917
+ }
1918
+ }
1919
+ },
1920
+ "company-onedrive": {
1921
+ "kind": "saas",
1922
+ "operations": {
1923
+ "onedrive.file.list": {
1924
+ "identity": "user",
1925
+ "resources": [
1926
+ "my-drive"
1927
+ ]
1928
+ },
1929
+ "onedrive.file.search": {
1930
+ "identity": "user",
1931
+ "resources": [
1932
+ "my-drive"
1933
+ ]
1934
+ },
1935
+ "onedrive.file.read": {
1936
+ "identity": "user",
1937
+ "resources": [
1938
+ "my-drive"
1939
+ ]
1940
+ },
1941
+ "onedrive.file.upload": {
1942
+ "identity": "user",
1943
+ "resources": [
1944
+ "my-drive"
1945
+ ]
1946
+ },
1947
+ "onedrive.folder.create": {
1948
+ "identity": "user",
1949
+ "resources": [
1950
+ "my-drive"
1951
+ ]
1952
+ }
1953
+ }
1954
+ },
1955
+ "company-excel": {
1956
+ "kind": "saas",
1957
+ "operations": {
1958
+ "excel.worksheet.list": {
1959
+ "identity": "user",
1960
+ "resources": [
1961
+ "my-workbooks"
1962
+ ]
1963
+ },
1964
+ "excel.range.read": {
1965
+ "identity": "user",
1966
+ "resources": [
1967
+ "my-workbooks"
1968
+ ]
1969
+ },
1970
+ "excel.range.update": {
1971
+ "identity": "user",
1972
+ "resources": [
1973
+ "my-workbooks"
1974
+ ]
1975
+ },
1976
+ "excel.table.list": {
1977
+ "identity": "user",
1978
+ "resources": [
1979
+ "my-workbooks"
1980
+ ]
1981
+ },
1982
+ "excel.row.add": {
1983
+ "identity": "user",
1984
+ "resources": [
1985
+ "my-workbooks"
1986
+ ]
1987
+ },
1988
+ "excel.worksheet.add": {
1989
+ "identity": "user",
1990
+ "resources": [
1991
+ "my-workbooks"
1992
+ ]
1993
+ }
1994
+ }
1995
+ },
1996
+ "company-teams": {
1997
+ "kind": "saas",
1998
+ "operations": {
1999
+ "teams.message.list": {
2000
+ "identity": "user",
2001
+ "resources": [
2002
+ "engineering"
2003
+ ]
2004
+ },
2005
+ "teams.message.post": {
2006
+ "identity": "user",
2007
+ "resources": [
2008
+ "engineering"
2009
+ ]
2010
+ },
2011
+ "teams.reply.post": {
2012
+ "identity": "user",
2013
+ "resources": [
2014
+ "engineering"
2015
+ ]
2016
+ }
2017
+ }
2018
+ },
1079
2019
  "sales-warehouse": {
1080
2020
  "kind": "database",
1081
2021
  "operations": {