@fourier-labs/harbour-contracts 0.90.0 → 0.92.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.
Files changed (36) hide show
  1. package/contract-release.json +27 -25
  2. package/dist/gen-ts/app-integrations-declaration.d.ts +8 -0
  3. package/dist/gen-ts/contract-release.d.ts +6 -6
  4. package/dist/gen-ts/contract-release.js +6 -6
  5. package/dist/gen-ts/data-grant-v2.d.ts +4 -4
  6. package/dist/gen-ts/deployment-app-registration.d.ts +20 -0
  7. package/dist/gen-ts/index.d.ts +1 -0
  8. package/dist/gen-ts/index.js +1 -0
  9. package/dist/gen-ts/integration-execute-input-rules.d.ts +230 -0
  10. package/dist/gen-ts/integration-execute-input-rules.js +70 -0
  11. package/dist/gen-ts/integration-execute-request.d.ts +19 -2
  12. package/dist/gen-ts/integration-execute-result.d.ts +49 -0
  13. package/dist/gen-ts/integration-operations.d.ts +56 -0
  14. package/dist/gen-ts/integration-operations.js +72 -0
  15. package/dist/gen-ts/mail-arrival-event.d.ts +17 -0
  16. package/dist/gen-ts/mail-arrival-event.js +3 -0
  17. package/dist/gen-ts/saas-connection.d.ts +11 -7
  18. package/gen-ts/app-integrations-declaration.ts +8 -0
  19. package/gen-ts/contract-release.ts +6 -6
  20. package/gen-ts/data-grant-v2.ts +18 -2
  21. package/gen-ts/deployment-app-registration.ts +20 -0
  22. package/gen-ts/index.ts +1 -0
  23. package/gen-ts/integration-execute-input-rules.ts +70 -0
  24. package/gen-ts/integration-execute-request.ts +27 -2
  25. package/gen-ts/integration-execute-result.ts +49 -0
  26. package/gen-ts/integration-operations.ts +72 -0
  27. package/gen-ts/mail-arrival-event.ts +20 -0
  28. package/gen-ts/saas-connection.ts +33 -4
  29. package/package.json +1 -1
  30. package/schema/app-integrations-declaration.schema.json +121 -9
  31. package/schema/data-grant-v2.schema.json +2 -2
  32. package/schema/deployment-app-registration.schema.json +199 -17
  33. package/schema/integration-execute-request.schema.json +458 -7
  34. package/schema/integration-execute-result.schema.json +234 -2
  35. package/schema/mail-arrival-event.schema.json +75 -0
  36. package/schema/saas-connection.schema.json +720 -138
@@ -9,7 +9,7 @@ export type IntegrationExecuteRequest = {
9
9
  /**
10
10
  * 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 — 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.
11
11
  */
12
- operation: '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';
12
+ operation: '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';
13
13
  /**
14
14
  * Tenant-wide logical alias of a connection (governance sourceId) or of a resource under it.
15
15
  */
@@ -299,7 +299,7 @@ export type IntegrationExecuteRequest = {
299
299
  */
300
300
  allDay?: boolean;
301
301
  /**
302
- * 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).
302
+ * Google Docs document id or Zoho Books document id; each operation restricts its provider format.
303
303
  */
304
304
  documentId?: string;
305
305
  /**
@@ -359,6 +359,23 @@ export type IntegrationExecuteRequest = {
359
359
  * @maxItems 20
360
360
  */
361
361
  sheets?: string[];
362
+ vendorId?: string;
363
+ customerId?: string;
364
+ purchaseOrderId?: string;
365
+ documentNumber?: string;
366
+ documentDate?: string;
367
+ referenceNumber?: string;
368
+ /**
369
+ * @minItems 1
370
+ * @maxItems 100
371
+ */
372
+ lineItems?: {
373
+ itemId: string;
374
+ quantity: string;
375
+ rate: string;
376
+ taxId?: string;
377
+ description?: string;
378
+ }[];
362
379
  };
363
380
  /**
364
381
  * 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.
@@ -286,6 +286,55 @@ export type IntegrationExecuteResult = {
286
286
  [k: string]: string;
287
287
  };
288
288
  body?: unknown;
289
+ booksDocument?: {
290
+ id: string;
291
+ number: string;
292
+ status: string;
293
+ currency: string;
294
+ total: string;
295
+ vendorId?: string;
296
+ customerId?: string;
297
+ /**
298
+ * @maxItems 100
299
+ */
300
+ lineItems: {
301
+ itemId: string;
302
+ quantity: string;
303
+ rate: string;
304
+ total: string;
305
+ description?: string;
306
+ }[];
307
+ };
308
+ /**
309
+ * @maxItems 100
310
+ */
311
+ booksContacts?: {
312
+ id: string;
313
+ name: string;
314
+ type: string;
315
+ }[];
316
+ /**
317
+ * @maxItems 100
318
+ */
319
+ booksPurchaseOrders?: {
320
+ id: string;
321
+ number: string;
322
+ status: string;
323
+ currency: string;
324
+ total: string;
325
+ vendorId?: string;
326
+ customerId?: string;
327
+ /**
328
+ * @maxItems 100
329
+ */
330
+ lineItems: {
331
+ itemId: string;
332
+ quantity: string;
333
+ rate: string;
334
+ total: string;
335
+ description?: string;
336
+ }[];
337
+ }[];
289
338
  };
290
339
  /**
291
340
  * An event's state (0.86.0): confirmed (Google `confirmed`, Graph not cancelled and not tentative), tentative, or cancelled.
@@ -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
  };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * IAM-authorized invocation of a deployed app Event Function. The delivery ID is stable across notification retries; runtime deduplicates before running the declared job. No tokens or message bodies.
3
+ */
4
+ export interface MailArrivalEvent {
5
+ mailArrival: {
6
+ deliveryId: string;
7
+ job: string;
8
+ owner: string;
9
+ input: {
10
+ provider: 'gmail' | 'outlook';
11
+ sourceId: string;
12
+ messageId: string;
13
+ threadId: string;
14
+ receivedAt: string;
15
+ };
16
+ };
17
+ }
@@ -0,0 +1,3 @@
1
+ /* eslint-disable */
2
+ // Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
3
+ export {};
@@ -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.92.0.0" as const;
5
+ export const ContractPublishVersion = "0.92.0" as const;
6
+ export const ContractPublishTag = "v0.92.0" as const;
7
+ export const ContractSchemasDigest = "sha256:5b6aede1f569d02bf976d5331c9e8eb1e657b062be28fb89565ff50acd105c5a" 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:64d78d9952ac08558ad956eb4c923677a0691e6260743c0dbc367b57e59ea822" as const;
10
+ export const ContractGeneratedTypeScriptDigest = "sha256:a99c149dbeb2b081bd460b95df4d44e29cc95e2fe2c737f4b012b7449c0c94d3" 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
@@ -24,4 +24,24 @@ export type DeploymentAppRegistration = {
24
24
  * @maxItems 1
25
25
  */
26
26
  signInMethods?: ('phone' | 'email')[];
27
+ mailArrivalTarget?: {
28
+ functionArn: string;
29
+ versionId: string;
30
+ /**
31
+ * @minItems 1
32
+ * @maxItems 100
33
+ */
34
+ jobs: {
35
+ name: string;
36
+ trigger: {
37
+ type: 'email.arrived';
38
+ connection: string;
39
+ resource: 'inbox';
40
+ filter?: {
41
+ from?: string;
42
+ subjectContains?: string;
43
+ };
44
+ };
45
+ }[];
46
+ };
27
47
  };
package/gen-ts/index.ts CHANGED
@@ -59,6 +59,7 @@ export * from './internal-configuration-request.js';
59
59
  export * from './kit-bundle-manifest.js';
60
60
  export * from './kit-lock.js';
61
61
  export * from './kvs-routing-entry.js';
62
+ export * from './mail-arrival-event.js';
62
63
  export * from './promotion-request.js';
63
64
  export * from './promotion-response.js';
64
65
  export * from './resolved-app-serving.js';
@@ -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.