@fourier-labs/harbour-contracts 0.90.0 → 0.91.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.
@@ -567,4 +567,60 @@ export declare const IntegrationOperations: {
567
567
  readonly declaredMode: false;
568
568
  readonly idempotencyKey: false;
569
569
  };
570
+ readonly "zohobooks.contact.list": {
571
+ readonly kind: "saas";
572
+ readonly identities: readonly ["user"];
573
+ readonly readOnly: true;
574
+ readonly declaredMode: false;
575
+ readonly idempotencyKey: false;
576
+ };
577
+ readonly "zohobooks.purchaseorder.list": {
578
+ readonly kind: "saas";
579
+ readonly identities: readonly ["user"];
580
+ readonly readOnly: true;
581
+ readonly declaredMode: false;
582
+ readonly idempotencyKey: false;
583
+ };
584
+ readonly "zohobooks.purchaseorder.read": {
585
+ readonly kind: "saas";
586
+ readonly identities: readonly ["user"];
587
+ readonly readOnly: true;
588
+ readonly declaredMode: false;
589
+ readonly idempotencyKey: false;
590
+ };
591
+ readonly "zohobooks.bill.create": {
592
+ readonly kind: "saas";
593
+ readonly identities: readonly ["user"];
594
+ readonly readOnly: false;
595
+ readonly declaredMode: false;
596
+ readonly idempotencyKey: true;
597
+ };
598
+ readonly "zohobooks.bill.read": {
599
+ readonly kind: "saas";
600
+ readonly identities: readonly ["user"];
601
+ readonly readOnly: true;
602
+ readonly declaredMode: false;
603
+ readonly idempotencyKey: false;
604
+ };
605
+ readonly "zohobooks.invoice.create": {
606
+ readonly kind: "saas";
607
+ readonly identities: readonly ["user"];
608
+ readonly readOnly: false;
609
+ readonly declaredMode: false;
610
+ readonly idempotencyKey: true;
611
+ };
612
+ readonly "zohobooks.invoice.read": {
613
+ readonly kind: "saas";
614
+ readonly identities: readonly ["user"];
615
+ readonly readOnly: true;
616
+ readonly declaredMode: false;
617
+ readonly idempotencyKey: false;
618
+ };
619
+ readonly "zohobooks.invoice.pdf": {
620
+ readonly kind: "saas";
621
+ readonly identities: readonly ["user"];
622
+ readonly readOnly: true;
623
+ readonly declaredMode: false;
624
+ readonly idempotencyKey: false;
625
+ };
570
626
  };
@@ -734,5 +734,77 @@ export const IntegrationOperations = {
734
734
  "readOnly": false,
735
735
  "declaredMode": false,
736
736
  "idempotencyKey": false
737
+ },
738
+ "zohobooks.contact.list": {
739
+ "kind": "saas",
740
+ "identities": [
741
+ "user"
742
+ ],
743
+ "readOnly": true,
744
+ "declaredMode": false,
745
+ "idempotencyKey": false
746
+ },
747
+ "zohobooks.purchaseorder.list": {
748
+ "kind": "saas",
749
+ "identities": [
750
+ "user"
751
+ ],
752
+ "readOnly": true,
753
+ "declaredMode": false,
754
+ "idempotencyKey": false
755
+ },
756
+ "zohobooks.purchaseorder.read": {
757
+ "kind": "saas",
758
+ "identities": [
759
+ "user"
760
+ ],
761
+ "readOnly": true,
762
+ "declaredMode": false,
763
+ "idempotencyKey": false
764
+ },
765
+ "zohobooks.bill.create": {
766
+ "kind": "saas",
767
+ "identities": [
768
+ "user"
769
+ ],
770
+ "readOnly": false,
771
+ "declaredMode": false,
772
+ "idempotencyKey": true
773
+ },
774
+ "zohobooks.bill.read": {
775
+ "kind": "saas",
776
+ "identities": [
777
+ "user"
778
+ ],
779
+ "readOnly": true,
780
+ "declaredMode": false,
781
+ "idempotencyKey": false
782
+ },
783
+ "zohobooks.invoice.create": {
784
+ "kind": "saas",
785
+ "identities": [
786
+ "user"
787
+ ],
788
+ "readOnly": false,
789
+ "declaredMode": false,
790
+ "idempotencyKey": true
791
+ },
792
+ "zohobooks.invoice.read": {
793
+ "kind": "saas",
794
+ "identities": [
795
+ "user"
796
+ ],
797
+ "readOnly": true,
798
+ "declaredMode": false,
799
+ "idempotencyKey": false
800
+ },
801
+ "zohobooks.invoice.pdf": {
802
+ "kind": "saas",
803
+ "identities": [
804
+ "user"
805
+ ],
806
+ "readOnly": true,
807
+ "declaredMode": false,
808
+ "idempotencyKey": false
737
809
  }
738
810
  };
@@ -1,7 +1,7 @@
1
1
  /**
2
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' | 'calendar' | 'drive' | 'docs' | 'sheets' | 'outlook' | 'onedrive' | 'excel' | 'teams';
4
+ export type SaasProvider = 'slack' | 'gmail' | 'basecamp' | 'sharepoint' | 'phone' | 'calendar' | 'drive' | 'docs' | 'sheets' | 'outlook' | 'onedrive' | 'excel' | 'teams' | 'zohobooks';
5
5
  /**
6
6
  * DISABLED stops every app call immediately (details.code CONNECTION_DISABLED).
7
7
  */
@@ -55,15 +55,15 @@ export interface SaasConnection {
55
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 78
58
+ * @maxItems 86
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' | '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')[];
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' | 'zohobooks.contact.list' | 'zohobooks.purchaseorder.list' | 'zohobooks.purchaseorder.read' | 'zohobooks.bill.create' | 'zohobooks.bill.read' | 'zohobooks.invoice.create' | 'zohobooks.invoice.read' | 'zohobooks.invoice.pdf')[];
61
61
  /**
62
62
  * Explicit user-mode operations eligible for automatic app access, subject to the connection operation ceiling and personal consent. Empty means review all; absent inherits company defaults or the existing userModeApproval migration rule. Governance validates provider and mode compatibility. Background execution still requires personal background consent, not a separate admin grant.
63
63
  *
64
- * @maxItems 78
64
+ * @maxItems 86
65
65
  */
66
- automaticUserOperations?: ('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')[];
66
+ automaticUserOperations?: ('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' | 'zohobooks.contact.list' | 'zohobooks.purchaseorder.list' | 'zohobooks.purchaseorder.read' | 'zohobooks.bill.create' | 'zohobooks.bill.read' | 'zohobooks.invoice.create' | 'zohobooks.invoice.read' | 'zohobooks.invoice.pdf')[];
67
67
  /**
68
68
  * Reusable permissions for admitted builders on explicit shared SaaS resources. Governance checks registered resources, provider/mode compatibility and the connection operation ceiling. Connection version and audit record changes; no per-entry approval metadata.
69
69
  *
@@ -116,6 +116,10 @@ export interface SaasConnection {
116
116
  installations?: {
117
117
  [k: string]: LegacySaasInstallation;
118
118
  };
119
+ /**
120
+ * Zoho data center. Chosen by the connection administrator, never by an app call.
121
+ */
122
+ region?: 'us' | 'in' | 'eu' | 'au' | 'jp' | 'ca' | 'sa' | 'cn' | 'ae';
119
123
  }
120
124
  /**
121
125
  * The one bot installation of the platform-owned provider app in this tenant's workspace.
@@ -164,9 +168,9 @@ export interface ReusableSaasAccess {
164
168
  mode: 'app' | 'user';
165
169
  /**
166
170
  * @minItems 1
167
- * @maxItems 78
171
+ * @maxItems 86
168
172
  */
169
- 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')[];
173
+ 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' | 'zohobooks.contact.list' | 'zohobooks.purchaseorder.list' | 'zohobooks.purchaseorder.read' | 'zohobooks.bill.create' | 'zohobooks.bill.read' | 'zohobooks.invoice.create' | 'zohobooks.invoice.read' | 'zohobooks.invoice.pdf')[];
170
174
  }
171
175
  export interface DevelopmentPreapproval {
172
176
  /**
@@ -86,6 +86,14 @@ export type DeclaredConnection = {
86
86
  'warehouse.view.read'?: AppModeViewOperation;
87
87
  'warehouse.table.append'?: AppModeViewOperation;
88
88
  'service.request'?: ServiceOperation;
89
+ 'zohobooks.contact.list'?: UserModeChannelOperation;
90
+ 'zohobooks.purchaseorder.list'?: UserModeChannelOperation;
91
+ 'zohobooks.purchaseorder.read'?: UserModeChannelOperation;
92
+ 'zohobooks.bill.create'?: UserModeChannelOperation;
93
+ 'zohobooks.bill.read'?: UserModeChannelOperation;
94
+ 'zohobooks.invoice.create'?: UserModeChannelOperation;
95
+ 'zohobooks.invoice.read'?: UserModeChannelOperation;
96
+ 'zohobooks.invoice.pdf'?: UserModeChannelOperation;
89
97
  };
90
98
  };
91
99
  export type IntegrationConnectionKind = 'saas' | 'database' | 'service';
@@ -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.90.0.0" as const;
5
- export const ContractPublishVersion = "0.90.0" as const;
6
- export const ContractPublishTag = "v0.90.0" as const;
7
- export const ContractSchemasDigest = "sha256:332836a0ce8cb9ace1540cf172e5991f5e9b2fe4cfc48230f3956bc832a282d8" as const;
4
+ export const ContractRepositoryVersion = "0.91.0.0" as const;
5
+ export const ContractPublishVersion = "0.91.0" as const;
6
+ export const ContractPublishTag = "v0.91.0" as const;
7
+ export const ContractSchemasDigest = "sha256:b6ef945b91544184715900ca739d16f3ad8a40d5307a3b04d71cf7ac39c4fb39" as const;
8
8
  export const ContractAiFixturesDigest = "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6" as const;
9
- export const ContractGeneratedGoDigest = "sha256:16ef224065767ea2fd06545bfdd22a4e3d58fe6c903512952424a010c29508fa" as const;
10
- export const ContractGeneratedTypeScriptDigest = "sha256:53846b6ac7df436c1dd49293fbb73e93d8f6cbf4d74e10c9cf8a020bd76de086" as const;
9
+ export const ContractGeneratedGoDigest = "sha256:7dc23154d2d8cc3a50733c32bc005d71afa877ab327d89a3c3a7dc8dbec7dc5b" as const;
10
+ export const ContractGeneratedTypeScriptDigest = "sha256:ae301b3932627690ffc23da6368dac812e5e33968dbe65fed52716c4896cbfcb" as const;
@@ -35,7 +35,7 @@ export interface DataGrantV2 {
35
35
  /**
36
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 78
38
+ * @maxItems 86
39
39
  */
40
40
  operations: (
41
41
  | 'slack.channel.history'
@@ -119,6 +119,14 @@ export interface DataGrantV2 {
119
119
  | 'warehouse.view.read'
120
120
  | 'warehouse.table.append'
121
121
  | 'service.request'
122
+ | 'zohobooks.contact.list'
123
+ | 'zohobooks.purchaseorder.list'
124
+ | 'zohobooks.purchaseorder.read'
125
+ | 'zohobooks.bill.create'
126
+ | 'zohobooks.bill.read'
127
+ | 'zohobooks.invoice.create'
128
+ | 'zohobooks.invoice.read'
129
+ | 'zohobooks.invoice.pdf'
122
130
  )[];
123
131
  /**
124
132
  * Approved logical resources. Never inherited by wildcard. Empty until the first approval.
@@ -189,7 +197,7 @@ export interface IntegrationResource {
189
197
  */
190
198
  export interface ReviewedIntegrationScope {
191
199
  /**
192
- * @maxItems 78
200
+ * @maxItems 86
193
201
  */
194
202
  operations: (
195
203
  | 'slack.channel.history'
@@ -273,6 +281,14 @@ export interface ReviewedIntegrationScope {
273
281
  | 'warehouse.view.read'
274
282
  | 'warehouse.table.append'
275
283
  | 'service.request'
284
+ | 'zohobooks.contact.list'
285
+ | 'zohobooks.purchaseorder.list'
286
+ | 'zohobooks.purchaseorder.read'
287
+ | 'zohobooks.bill.create'
288
+ | 'zohobooks.bill.read'
289
+ | 'zohobooks.invoice.create'
290
+ | 'zohobooks.invoice.read'
291
+ | 'zohobooks.invoice.pdf'
276
292
  )[];
277
293
  /**
278
294
  * @maxItems 64
@@ -697,6 +697,76 @@ export const IntegrationExecuteInputRules = {
697
697
  body: { kind: "object", required: false },
698
698
  },
699
699
  },
700
+ "zohobooks.contact.list": {
701
+ idempotencyKey: false,
702
+ fields: {
703
+ q: { kind: "string", required: false, minLength: 1, maxLength: 256 },
704
+ pageToken: { kind: "string", required: false, minLength: 1, maxLength: 2048 },
705
+ },
706
+ },
707
+ "zohobooks.purchaseorder.list": {
708
+ idempotencyKey: false,
709
+ fields: {
710
+ vendorId: { kind: "string", required: true, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
711
+ pageToken: { kind: "string", required: false, minLength: 1, maxLength: 2048 },
712
+ },
713
+ },
714
+ "zohobooks.purchaseorder.read": {
715
+ idempotencyKey: false,
716
+ fields: {
717
+ purchaseOrderId: { kind: "string", required: true, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
718
+ },
719
+ },
720
+ "zohobooks.bill.create": {
721
+ idempotencyKey: true,
722
+ fields: {
723
+ vendorId: { kind: "string", required: true, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
724
+ documentNumber: { kind: "string", required: true, minLength: 1, maxLength: 100 },
725
+ documentDate: { kind: "string", required: true, minLength: 0, maxLength: 10, pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" },
726
+ purchaseOrderId: { kind: "string", required: false, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
727
+ lineItems: { kind: "object[]", required: true, minItems: 1, maxItems: 100, fields: {
728
+ itemId: { kind: "string", required: true, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
729
+ quantity: { kind: "string", required: true, minLength: 0, maxLength: 17, pattern: "^[0-9]{1,10}(\\.[0-9]{1,6})?$" },
730
+ rate: { kind: "string", required: true, minLength: 0, maxLength: 17, pattern: "^[0-9]{1,10}(\\.[0-9]{1,6})?$" },
731
+ taxId: { kind: "string", required: false, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
732
+ description: { kind: "string", required: false, minLength: 0, maxLength: 2000 },
733
+ } },
734
+ },
735
+ },
736
+ "zohobooks.bill.read": {
737
+ idempotencyKey: false,
738
+ fields: {
739
+ documentId: { kind: "string", required: true, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
740
+ },
741
+ },
742
+ "zohobooks.invoice.create": {
743
+ idempotencyKey: true,
744
+ fields: {
745
+ customerId: { kind: "string", required: true, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
746
+ documentNumber: { kind: "string", required: false, minLength: 1, maxLength: 100 },
747
+ documentDate: { kind: "string", required: true, minLength: 0, maxLength: 10, pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" },
748
+ referenceNumber: { kind: "string", required: false, minLength: 1, maxLength: 100 },
749
+ lineItems: { kind: "object[]", required: true, minItems: 1, maxItems: 100, fields: {
750
+ itemId: { kind: "string", required: true, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
751
+ quantity: { kind: "string", required: true, minLength: 0, maxLength: 17, pattern: "^[0-9]{1,10}(\\.[0-9]{1,6})?$" },
752
+ rate: { kind: "string", required: true, minLength: 0, maxLength: 17, pattern: "^[0-9]{1,10}(\\.[0-9]{1,6})?$" },
753
+ taxId: { kind: "string", required: false, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
754
+ description: { kind: "string", required: false, minLength: 0, maxLength: 2000 },
755
+ } },
756
+ },
757
+ },
758
+ "zohobooks.invoice.read": {
759
+ idempotencyKey: false,
760
+ fields: {
761
+ documentId: { kind: "string", required: true, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
762
+ },
763
+ },
764
+ "zohobooks.invoice.pdf": {
765
+ idempotencyKey: false,
766
+ fields: {
767
+ documentId: { kind: "string", required: true, minLength: 0, maxLength: 32, pattern: "^[0-9]{1,32}$" },
768
+ },
769
+ },
700
770
  } as const satisfies Record<string, IntegrationExecuteOperationRule>;
701
771
 
702
772
  export type IntegrationExecuteOperation = keyof typeof IntegrationExecuteInputRules;
@@ -93,7 +93,15 @@ export type IntegrationExecuteRequest = {
93
93
  | 'teams.reply.post'
94
94
  | 'warehouse.view.read'
95
95
  | 'warehouse.table.append'
96
- | 'service.request';
96
+ | 'service.request'
97
+ | 'zohobooks.contact.list'
98
+ | 'zohobooks.purchaseorder.list'
99
+ | 'zohobooks.purchaseorder.read'
100
+ | 'zohobooks.bill.create'
101
+ | 'zohobooks.bill.read'
102
+ | 'zohobooks.invoice.create'
103
+ | 'zohobooks.invoice.read'
104
+ | 'zohobooks.invoice.pdf';
97
105
  /**
98
106
  * Tenant-wide logical alias of a connection (governance sourceId) or of a resource under it.
99
107
  */
@@ -383,7 +391,7 @@ export type IntegrationExecuteRequest = {
383
391
  */
384
392
  allDay?: boolean;
385
393
  /**
386
- * docs.document.read / docs.document.append / docs.text.replace (0.86.0): the Google Docs document id (the `/document/d/<id>` path segment, or a docs.document.create result's id).
394
+ * Google Docs document id or Zoho Books document id; each operation restricts its provider format.
387
395
  */
388
396
  documentId?: string;
389
397
  /**
@@ -443,6 +451,23 @@ export type IntegrationExecuteRequest = {
443
451
  * @maxItems 20
444
452
  */
445
453
  sheets?: string[];
454
+ vendorId?: string;
455
+ customerId?: string;
456
+ purchaseOrderId?: string;
457
+ documentNumber?: string;
458
+ documentDate?: string;
459
+ referenceNumber?: string;
460
+ /**
461
+ * @minItems 1
462
+ * @maxItems 100
463
+ */
464
+ lineItems?: {
465
+ itemId: string;
466
+ quantity: string;
467
+ rate: string;
468
+ taxId?: string;
469
+ description?: string;
470
+ }[];
446
471
  };
447
472
  /**
448
473
  * UUID of one explicit Send action; required for the sends (slack.message.post, slack.dm.send, gmail.message.send), the receipted Basecamp writes (basecamp.todo.create, basecamp.message.post, basecamp.comment.post, basecamp.campfire.post; 0.76.0) the receipted SharePoint writes (sharepoint.item.create, sharepoint.file.upload; 0.78.0) the receipted warehouse append (warehouse.table.append; 0.82.0, where it is also the BigQuery load job id) and the receipted Google Workspace and Microsoft 365 writes (0.86.0: calendar.event.create, drive.file.upload, drive.folder.create, docs.document.create, sheets.values.append, sheets.spreadsheet.create, outlook.message.send, outlook.message.reply, outlook.event.create, onedrive.file.upload, onedrive.folder.create, excel.row.add, excel.worksheet.add, teams.message.post, teams.reply.post), refused everywhere else. The same key with the same payload and subject returns the recorded outcome for seven days.
@@ -289,6 +289,55 @@ export type IntegrationExecuteResult = {
289
289
  [k: string]: string;
290
290
  };
291
291
  body?: unknown;
292
+ booksDocument?: {
293
+ id: string;
294
+ number: string;
295
+ status: string;
296
+ currency: string;
297
+ total: string;
298
+ vendorId?: string;
299
+ customerId?: string;
300
+ /**
301
+ * @maxItems 100
302
+ */
303
+ lineItems: {
304
+ itemId: string;
305
+ quantity: string;
306
+ rate: string;
307
+ total: string;
308
+ description?: string;
309
+ }[];
310
+ };
311
+ /**
312
+ * @maxItems 100
313
+ */
314
+ booksContacts?: {
315
+ id: string;
316
+ name: string;
317
+ type: string;
318
+ }[];
319
+ /**
320
+ * @maxItems 100
321
+ */
322
+ booksPurchaseOrders?: {
323
+ id: string;
324
+ number: string;
325
+ status: string;
326
+ currency: string;
327
+ total: string;
328
+ vendorId?: string;
329
+ customerId?: string;
330
+ /**
331
+ * @maxItems 100
332
+ */
333
+ lineItems: {
334
+ itemId: string;
335
+ quantity: string;
336
+ rate: string;
337
+ total: string;
338
+ description?: string;
339
+ }[];
340
+ }[];
292
341
  };
293
342
  /**
294
343
  * An event's state (0.86.0): confirmed (Google `confirmed`, Graph not cancelled and not tentative), tentative, or cancelled.
@@ -735,5 +735,77 @@ export const IntegrationOperations = {
735
735
  "readOnly": false,
736
736
  "declaredMode": false,
737
737
  "idempotencyKey": false
738
+ },
739
+ "zohobooks.contact.list": {
740
+ "kind": "saas",
741
+ "identities": [
742
+ "user"
743
+ ],
744
+ "readOnly": true,
745
+ "declaredMode": false,
746
+ "idempotencyKey": false
747
+ },
748
+ "zohobooks.purchaseorder.list": {
749
+ "kind": "saas",
750
+ "identities": [
751
+ "user"
752
+ ],
753
+ "readOnly": true,
754
+ "declaredMode": false,
755
+ "idempotencyKey": false
756
+ },
757
+ "zohobooks.purchaseorder.read": {
758
+ "kind": "saas",
759
+ "identities": [
760
+ "user"
761
+ ],
762
+ "readOnly": true,
763
+ "declaredMode": false,
764
+ "idempotencyKey": false
765
+ },
766
+ "zohobooks.bill.create": {
767
+ "kind": "saas",
768
+ "identities": [
769
+ "user"
770
+ ],
771
+ "readOnly": false,
772
+ "declaredMode": false,
773
+ "idempotencyKey": true
774
+ },
775
+ "zohobooks.bill.read": {
776
+ "kind": "saas",
777
+ "identities": [
778
+ "user"
779
+ ],
780
+ "readOnly": true,
781
+ "declaredMode": false,
782
+ "idempotencyKey": false
783
+ },
784
+ "zohobooks.invoice.create": {
785
+ "kind": "saas",
786
+ "identities": [
787
+ "user"
788
+ ],
789
+ "readOnly": false,
790
+ "declaredMode": false,
791
+ "idempotencyKey": true
792
+ },
793
+ "zohobooks.invoice.read": {
794
+ "kind": "saas",
795
+ "identities": [
796
+ "user"
797
+ ],
798
+ "readOnly": true,
799
+ "declaredMode": false,
800
+ "idempotencyKey": false
801
+ },
802
+ "zohobooks.invoice.pdf": {
803
+ "kind": "saas",
804
+ "identities": [
805
+ "user"
806
+ ],
807
+ "readOnly": true,
808
+ "declaredMode": false,
809
+ "idempotencyKey": false
738
810
  }
739
811
  } as const;
@@ -17,7 +17,8 @@ export type SaasProvider =
17
17
  | 'outlook'
18
18
  | 'onedrive'
19
19
  | 'excel'
20
- | 'teams';
20
+ | 'teams'
21
+ | 'zohobooks';
21
22
  /**
22
23
  * DISABLED stops every app call immediately (details.code CONNECTION_DISABLED).
23
24
  */
@@ -72,7 +73,7 @@ export interface SaasConnection {
72
73
  * 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.
73
74
  *
74
75
  * @minItems 1
75
- * @maxItems 78
76
+ * @maxItems 86
76
77
  */
77
78
  operations: (
78
79
  | 'slack.channel.history'
@@ -156,11 +157,19 @@ export interface SaasConnection {
156
157
  | 'warehouse.view.read'
157
158
  | 'warehouse.table.append'
158
159
  | 'service.request'
160
+ | 'zohobooks.contact.list'
161
+ | 'zohobooks.purchaseorder.list'
162
+ | 'zohobooks.purchaseorder.read'
163
+ | 'zohobooks.bill.create'
164
+ | 'zohobooks.bill.read'
165
+ | 'zohobooks.invoice.create'
166
+ | 'zohobooks.invoice.read'
167
+ | 'zohobooks.invoice.pdf'
159
168
  )[];
160
169
  /**
161
170
  * Explicit user-mode operations eligible for automatic app access, subject to the connection operation ceiling and personal consent. Empty means review all; absent inherits company defaults or the existing userModeApproval migration rule. Governance validates provider and mode compatibility. Background execution still requires personal background consent, not a separate admin grant.
162
171
  *
163
- * @maxItems 78
172
+ * @maxItems 86
164
173
  */
165
174
  automaticUserOperations?: (
166
175
  | 'slack.channel.history'
@@ -244,6 +253,14 @@ export interface SaasConnection {
244
253
  | 'warehouse.view.read'
245
254
  | 'warehouse.table.append'
246
255
  | 'service.request'
256
+ | 'zohobooks.contact.list'
257
+ | 'zohobooks.purchaseorder.list'
258
+ | 'zohobooks.purchaseorder.read'
259
+ | 'zohobooks.bill.create'
260
+ | 'zohobooks.bill.read'
261
+ | 'zohobooks.invoice.create'
262
+ | 'zohobooks.invoice.read'
263
+ | 'zohobooks.invoice.pdf'
247
264
  )[];
248
265
  /**
249
266
  * Reusable permissions for admitted builders on explicit shared SaaS resources. Governance checks registered resources, provider/mode compatibility and the connection operation ceiling. Connection version and audit record changes; no per-entry approval metadata.
@@ -297,6 +314,10 @@ export interface SaasConnection {
297
314
  installations?: {
298
315
  [k: string]: LegacySaasInstallation;
299
316
  };
317
+ /**
318
+ * Zoho data center. Chosen by the connection administrator, never by an app call.
319
+ */
320
+ region?: 'us' | 'in' | 'eu' | 'au' | 'jp' | 'ca' | 'sa' | 'cn' | 'ae';
300
321
  }
301
322
  /**
302
323
  * The one bot installation of the platform-owned provider app in this tenant's workspace.
@@ -345,7 +366,7 @@ export interface ReusableSaasAccess {
345
366
  mode: 'app' | 'user';
346
367
  /**
347
368
  * @minItems 1
348
- * @maxItems 78
369
+ * @maxItems 86
349
370
  */
350
371
  operations: (
351
372
  | 'slack.channel.history'
@@ -429,6 +450,14 @@ export interface ReusableSaasAccess {
429
450
  | 'warehouse.view.read'
430
451
  | 'warehouse.table.append'
431
452
  | 'service.request'
453
+ | 'zohobooks.contact.list'
454
+ | 'zohobooks.purchaseorder.list'
455
+ | 'zohobooks.purchaseorder.read'
456
+ | 'zohobooks.bill.create'
457
+ | 'zohobooks.bill.read'
458
+ | 'zohobooks.invoice.create'
459
+ | 'zohobooks.invoice.read'
460
+ | 'zohobooks.invoice.pdf'
432
461
  )[];
433
462
  }
434
463
  export interface DevelopmentPreapproval {