@fourier-labs/harbour-contracts 0.85.0 → 0.87.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/contract-release.json +25 -25
- package/dist/gen-ts/app-integrations-declaration.d.ts +47 -2
- package/dist/gen-ts/contract-release.d.ts +6 -6
- package/dist/gen-ts/contract-release.js +6 -6
- package/dist/gen-ts/data-grant-v2.d.ts +4 -4
- package/dist/gen-ts/integration-execute-input-rules.d.ts +1194 -0
- package/dist/gen-ts/integration-execute-input-rules.js +392 -0
- package/dist/gen-ts/integration-execute-request.d.ts +150 -25
- package/dist/gen-ts/integration-execute-result.d.ts +237 -7
- package/dist/gen-ts/integration-operations.d.ts +315 -0
- package/dist/gen-ts/integration-operations.js +405 -0
- package/dist/gen-ts/kit-bundle-manifest.d.ts +1 -0
- package/dist/gen-ts/kit-lock.d.ts +1 -0
- package/dist/gen-ts/saas-connection.d.ts +9 -9
- package/gen-ts/app-integrations-declaration.ts +47 -2
- package/gen-ts/contract-release.ts +6 -6
- package/gen-ts/data-grant-v2.ts +48 -3
- package/gen-ts/integration-execute-input-rules.ts +390 -1
- package/gen-ts/integration-execute-request.ts +194 -24
- package/gen-ts/integration-execute-result.ts +237 -7
- package/gen-ts/integration-operations.ts +405 -0
- package/gen-ts/kit-bundle-manifest.ts +1 -0
- package/gen-ts/kit-lock.ts +1 -0
- package/gen-ts/saas-connection.ts +66 -8
- package/package.json +1 -1
- package/schema/app-integrations-declaration.schema.json +976 -36
- package/schema/data-grant-v2.schema.json +3 -3
- package/schema/integration-execute-request.schema.json +2320 -55
- package/schema/integration-execute-result.schema.json +934 -30
- package/schema/kit-bundle-manifest.schema.json +1 -0
- package/schema/saas-connection.schema.json +139 -8
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
* Body of POST /_harbour/integrations/execute (app SDK), forwarded unchanged to the governance development and runtime execute routes. Exactly one declared operation against one declared resource. The identity mode is fixed by the operation for every operation but the declared-mode Slack operations (slack.channel.history, slack.message.post, slack.message.update, slack.message.delete; 0.71.0 widened history), and always enforced from an approved grant; any identity/userId/scope field is rejected by additionalProperties. A declared-mode operation runs as the app (for a post: the IT-approved per-app name from the grant, plus a "Posted by <app> on Isomorph" footer) or as the signed-in person (no name, no footer) — the same input either way — and since 0.55.0 the call names which of the app's approved modes it runs under (`mode`): required when IT approved both modes for the app (MODE_REQUIRED otherwise), optional when it approved one (that one is used), and a named mode without an approved grant is refused (MODE_NOT_GRANTED) rather than served under the other, so approval order never decides what a call does. Per-operation input bounds (0.71.0, ADR 0018): slack.channel.history {limit? 1..100, default 15, cursor?, oldest?, latest?}; slack.message.post {text 1..4000 chars, threadId?, format? plain|mrkdwn} and a required idempotencyKey retained across retries of one explicit Send; slack.message.update {messageId, text, format?}; slack.message.delete {messageId}; slack.dm.send {to 1..8 addresses, text, format?} (app mode only) with a required idempotencyKey; slack.user.lookup {email}; gmail.thread.list {limit? 1..50, default 15, q?, labelIds? default [INBOX], pageToken?}; gmail.thread.read {threadId}; gmail.message.read {messageId}; gmail.attachment.read {messageId, attachmentId}; gmail.message.send {to 1..50 addresses (to+cc+bcc <= 50 in total), cc?, bcc?, subject 1..256 chars, text 1..4000 chars, html? <= 64 KiB, attachments? 1..5 of <= 2 MiB each as base64, replyToMessageId?} and a required idempotencyKey like slack.message.post; warehouse.view.read {columns? 1..32, where? 1..16 filters, groupBy? 1..8 columns, aggregates? 1..16, orderBy? 1..8, limit? 1..1000, default 100} (0.70.0: a plain read names columns, an aggregate read names aggregates and optionally groupBy; the cross-field rules — exactly one of columns or aggregates, groupBy needs aggregates, a filter value that fits its op, orderBy naming a returned column, every named column approved — are enforced by governance, not expressible here; ADR 0017). Basecamp (0.76.0, ADR 0022; every id a string of 1..20 digits, every operation user mode): basecamp.project.list {pageToken?, projectStatus? active|archived} on the fixed `account` alias; on a project alias basecamp.todolist.list {pageToken?}; basecamp.todo.list {todolistId, completed?, pageToken?}; basecamp.todo.create {todolistId, content 1..1000 (the to-do title), description? <= 16384, contentFormat? plain|html, dueOn? YYYY-MM-DD, assigneeIds? 1..20, notify?} with a required idempotencyKey; basecamp.todo.complete {todoId} (idempotent at Basecamp, so no key); basecamp.message.list {pageToken?}; basecamp.message.post {subject 1..256, content 1..65536, contentFormat?} with a required idempotencyKey; basecamp.comment.list {recordingId, pageToken?}; basecamp.comment.post {recordingId, content 1..16384, contentFormat?} with a required idempotencyKey; basecamp.campfire.post {content 1..4000, contentFormat?} with a required idempotencyKey; basecamp.people.list {pageToken?}. `pageToken` is the previous page's `nextPageToken` (a Basecamp page number as digits). SharePoint (0.78.0, ADR 0024; every id a Microsoft Graph id — GraphId, 1..256 characters — every operation user mode on a site alias): sharepoint.list.list {pageToken?}; sharepoint.item.list {listId, filter? 1..512 (an OData filter on `fields/...`), pageToken?}; sharepoint.item.create {listId, fields (1..32 columns, each a string <= 4000, a number, a boolean or null)} with a required idempotencyKey; sharepoint.item.update {listId, itemId, fields} (a PATCH, idempotent at Graph, so no key); sharepoint.drive.list {pageToken?}; sharepoint.file.list {driveId?, folderId?, pageToken?} (no driveId: the site's default drive; no folderId: its root); sharepoint.file.search {q 1..256, driveId?, pageToken?}; sharepoint.file.read {fileId, driveId?}; sharepoint.file.upload {filename 1..255, contentType, dataBase64 <= 2 MiB, driveId?, folderId?, conflict? rename|replace|fail} with a required idempotencyKey. A SharePoint `pageToken` is Graph's `$skiptoken` (up to 2048 characters; the shared field is that wide, the Gmail and Basecamp operations narrow it back to 256). Each operation's then-block is the one statement of its input rules: propertyNames.enum names the fields it accepts, required the ones it needs, and per-field overrides (maximum, default) narrow the shared property. Codegen derives IntegrationExecuteInputRules and validateIntegrationExecuteInput (gen-ts/integration-execute-input-rules.ts, gen-go/integration_execute_input_rules.go) from exactly these blocks, so the governance execute route, the app SDK and the kit's local check refuse the same request with the same message. Transport limits (not expressible here): request <= 16 KiB except a gmail.message.send carrying attachments (governance sizes that route for the attachment bound) and a basecamp.message.post (its 64 KiB body; governance allows 80 KiB there) and a sharepoint.file.upload (its 2 MiB file as base64; governance sizes it like the Gmail attachment route), total deadline 10 s.
|
|
5
|
+
* Body of POST /_harbour/integrations/execute (app SDK), forwarded unchanged to the governance development and runtime execute routes. Exactly one declared operation against one declared resource. The identity mode is fixed by the operation for every operation but the declared-mode Slack operations (slack.channel.history, slack.message.post, slack.message.update, slack.message.delete; 0.71.0 widened history), and always enforced from an approved grant; any identity/userId/scope field is rejected by additionalProperties. A declared-mode operation runs as the app (for a post: the IT-approved per-app name from the grant, plus a "Posted by <app> on Isomorph" footer) or as the signed-in person (no name, no footer) — the same input either way — and since 0.55.0 the call names which of the app's approved modes it runs under (`mode`): required when IT approved both modes for the app (MODE_REQUIRED otherwise), optional when it approved one (that one is used), and a named mode without an approved grant is refused (MODE_NOT_GRANTED) rather than served under the other, so approval order never decides what a call does. Per-operation input bounds (0.71.0, ADR 0018): slack.channel.history {limit? 1..100, default 15, cursor?, oldest?, latest?}; slack.message.post {text 1..4000 chars, threadId?, format? plain|mrkdwn} and a required idempotencyKey retained across retries of one explicit Send; slack.message.update {messageId, text, format?}; slack.message.delete {messageId}; slack.dm.send {to 1..8 addresses, text, format?} (app mode only) with a required idempotencyKey; slack.user.lookup {email}; gmail.thread.list {limit? 1..50, default 15, q?, labelIds? default [INBOX], pageToken?}; gmail.thread.read {threadId}; gmail.message.read {messageId}; gmail.attachment.read {messageId, attachmentId}; gmail.message.send {to 1..50 addresses (to+cc+bcc <= 50 in total), cc?, bcc?, subject 1..256 chars, text 1..4000 chars, html? <= 64 KiB, attachments? 1..5 of <= 2 MiB each as base64, replyToMessageId?} and a required idempotencyKey like slack.message.post; warehouse.view.read {columns? 1..32, where? 1..16 filters, groupBy? 1..8 columns, aggregates? 1..16, orderBy? 1..8, limit? 1..1000, default 100} (0.70.0: a plain read names columns, an aggregate read names aggregates and optionally groupBy; the cross-field rules — exactly one of columns or aggregates, groupBy needs aggregates, a filter value that fits its op, orderBy naming a returned column, every named column approved — are enforced by governance, not expressible here; ADR 0017). Basecamp (0.76.0, ADR 0022; every id a string of 1..20 digits, every operation user mode): basecamp.project.list {pageToken?, projectStatus? active|archived} on the fixed `account` alias; on a project alias basecamp.todolist.list {pageToken?}; basecamp.todo.list {todolistId, completed?, pageToken?}; basecamp.todo.create {todolistId, content 1..1000 (the to-do title), description? <= 16384, contentFormat? plain|html, dueOn? YYYY-MM-DD, assigneeIds? 1..20, notify?} with a required idempotencyKey; basecamp.todo.complete {todoId} (idempotent at Basecamp, so no key); basecamp.message.list {pageToken?}; basecamp.message.post {subject 1..256, content 1..65536, contentFormat?} with a required idempotencyKey; basecamp.comment.list {recordingId, pageToken?}; basecamp.comment.post {recordingId, content 1..16384, contentFormat?} with a required idempotencyKey; basecamp.campfire.post {content 1..4000, contentFormat?} with a required idempotencyKey; basecamp.people.list {pageToken?}. `pageToken` is the previous page's `nextPageToken` (a Basecamp page number as digits). SharePoint (0.78.0, ADR 0024; every id a Microsoft Graph id — GraphId, 1..256 characters — every operation user mode on a site alias): sharepoint.list.list {pageToken?}; sharepoint.item.list {listId, filter? 1..512 (an OData filter on `fields/...`), pageToken?}; sharepoint.item.create {listId, fields (1..32 columns, each a string <= 4000, a number, a boolean or null)} with a required idempotencyKey; sharepoint.item.update {listId, itemId, fields} (a PATCH, idempotent at Graph, so no key); sharepoint.drive.list {pageToken?}; sharepoint.file.list {driveId?, folderId?, pageToken?} (no driveId: the site's default drive; no folderId: its root); sharepoint.file.search {q 1..256, driveId?, pageToken?}; sharepoint.file.read {fileId, driveId?}; sharepoint.file.upload {filename 1..255, contentType, dataBase64 <= 2 MiB, driveId?, folderId?, conflict? rename|replace|fail} with a required idempotencyKey. A SharePoint `pageToken` is Graph's `$skiptoken` (up to 2048 characters; the shared field is that wide, the Gmail and Basecamp operations narrow it back to 256). Google Workspace and Microsoft 365 (0.86.0, ADR 0032; every operation user mode; the seven personal providers run on their fixed alias, teams.* on a channel alias): calendar.calendar.list {pageToken?}; calendar.event.list {calendarId?, timeMin, timeMax, q?, pageToken?} (RFC 3339 date-times with a zone); calendar.event.read {calendarId?, eventId}; calendar.event.create {calendarId?, title 1..256, start, end, timeZone?, allDay?, description? <= 8000, location? <= 512, attendees? 1..100 emails, notify?} with a required idempotencyKey; calendar.event.update {calendarId?, eventId, title?, start?, end?, timeZone?, description?, location?, attendees?, notify?} and calendar.event.cancel {calendarId?, eventId, notify?} (both idempotent at Google, so no key); drive.file.list {folderId?, pageToken?}; drive.file.search {q, pageToken?}; drive.file.read {fileId, exportAs? text|csv|pdf} (exportAs renders a Google Docs, Sheets or Slides file; a binary file is downloaded as is); drive.file.upload {filename, contentType, dataBase64 <= 2 MiB, folderId?, conflict?} and drive.folder.create {title, folderId?} with a required idempotencyKey; docs.document.read {documentId}; docs.document.create {title, text? <= 64 KiB} with a required idempotencyKey; docs.document.append {documentId, text <= 64 KiB} and docs.text.replace {documentId, replacements 1..64 of {find 1..512, replace <= 4000, matchCase?}} (no key: the app owns the document's state); sheets.spreadsheet.read {spreadsheetId}; sheets.values.read {spreadsheetId, range} (A1 notation, 1..256); sheets.values.append {spreadsheetId, range, values, valueInput? raw|user} with a required idempotencyKey; sheets.values.update {spreadsheetId, range, values, valueInput?} and sheets.values.clear {spreadsheetId, range} (no key); sheets.spreadsheet.create {title, sheets? 1..20 titles} with a required idempotencyKey (`values` is 1..1000 rows of 1..100 cells, each a string <= 4000, a number, a boolean or null); outlook.message.list {folder?, q?, pageToken?}; outlook.message.read {messageId}; outlook.attachment.read {messageId, attachmentId}; outlook.message.send {to, cc?, bcc?, subject, text 1..4000, html?, attachments?} and outlook.message.reply {messageId, text 1..4000} with a required idempotencyKey like gmail.message.send; outlook.event.list {start, end, pageToken?}; outlook.event.read {eventId}; outlook.event.create (as calendar.event.create without calendarId) with a required idempotencyKey; outlook.event.update (as calendar.event.update without calendarId) and outlook.event.cancel {eventId, comment? <= 4000} (no key); onedrive.file.list, onedrive.file.search, onedrive.file.read {fileId}, onedrive.file.upload and onedrive.folder.create as the drive.* operations (Graph ids, no exportAs); excel.worksheet.list {fileId, driveId?}; excel.range.read {fileId, driveId?, worksheet, address? 1..64} (no address: the used range); excel.range.update {fileId, driveId?, worksheet, address, values} (no key: a PATCH); excel.table.list {fileId, driveId?, worksheet?}; excel.row.add {fileId, driveId?, tableName, values} and excel.worksheet.add {fileId, driveId?, title} with a required idempotencyKey; teams.message.list {pageToken?}; teams.message.post {text 1..4000, html?} and teams.reply.post {messageId, text, html?} with a required idempotencyKey. An Outlook or Teams `messageId` is a Graph id (the shared field widens to ^[A-Za-z0-9._=-]{1,256}$; the Gmail and Slack operations narrow it back to ^[A-Za-z0-9._-]{1,64}$ in their then-blocks, so their rules are unchanged), and `text` widens to 64 KiB for the Docs body (every other operation that takes it narrows it back to 4000). Each operation's then-block is the one statement of its input rules: propertyNames.enum names the fields it accepts, required the ones it needs, and per-field overrides (maximum, default) narrow the shared property. Codegen derives IntegrationExecuteInputRules and validateIntegrationExecuteInput (gen-ts/integration-execute-input-rules.ts, gen-go/integration_execute_input_rules.go) from exactly these blocks, so the governance execute route, the app SDK and the kit's local check refuse the same request with the same message. Transport limits (not expressible here): request <= 16 KiB except a gmail.message.send carrying attachments (governance sizes that route for the attachment bound) and a basecamp.message.post (its 64 KiB body; governance allows 80 KiB there) and a sharepoint.file.upload, drive.file.upload or onedrive.file.upload (its 2 MiB file as base64; governance sizes it like the Gmail attachment route), an outlook.message.send with attachments (the Gmail route), a docs.document.create or docs.document.append (its 64 KiB body; governance allows 80 KiB there, as for basecamp.message.post) and a sheets.values.append, sheets.values.update, excel.range.update or excel.row.add (its 64 KiB `values`), total deadline 10 s.
|
|
6
6
|
*/
|
|
7
7
|
export type IntegrationExecuteRequest = {
|
|
8
8
|
/**
|
|
@@ -10,7 +10,7 @@ export type IntegrationExecuteRequest = {
|
|
|
10
10
|
*/
|
|
11
11
|
connection: string;
|
|
12
12
|
/**
|
|
13
|
-
* 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.
|
|
13
|
+
* 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.
|
|
14
14
|
*/
|
|
15
15
|
operation:
|
|
16
16
|
| 'slack.channel.history'
|
|
@@ -46,6 +46,51 @@ export type IntegrationExecuteRequest = {
|
|
|
46
46
|
| 'sharepoint.file.upload'
|
|
47
47
|
| 'phone.sms.list'
|
|
48
48
|
| 'phone.number.get'
|
|
49
|
+
| 'calendar.calendar.list'
|
|
50
|
+
| 'calendar.event.list'
|
|
51
|
+
| 'calendar.event.read'
|
|
52
|
+
| 'calendar.event.create'
|
|
53
|
+
| 'calendar.event.update'
|
|
54
|
+
| 'calendar.event.cancel'
|
|
55
|
+
| 'drive.file.list'
|
|
56
|
+
| 'drive.file.search'
|
|
57
|
+
| 'drive.file.read'
|
|
58
|
+
| 'drive.file.upload'
|
|
59
|
+
| 'drive.folder.create'
|
|
60
|
+
| 'docs.document.read'
|
|
61
|
+
| 'docs.document.create'
|
|
62
|
+
| 'docs.document.append'
|
|
63
|
+
| 'docs.text.replace'
|
|
64
|
+
| 'sheets.spreadsheet.read'
|
|
65
|
+
| 'sheets.values.read'
|
|
66
|
+
| 'sheets.values.append'
|
|
67
|
+
| 'sheets.values.update'
|
|
68
|
+
| 'sheets.values.clear'
|
|
69
|
+
| 'sheets.spreadsheet.create'
|
|
70
|
+
| 'outlook.message.list'
|
|
71
|
+
| 'outlook.message.read'
|
|
72
|
+
| 'outlook.attachment.read'
|
|
73
|
+
| 'outlook.message.send'
|
|
74
|
+
| 'outlook.message.reply'
|
|
75
|
+
| 'outlook.event.list'
|
|
76
|
+
| 'outlook.event.read'
|
|
77
|
+
| 'outlook.event.create'
|
|
78
|
+
| 'outlook.event.update'
|
|
79
|
+
| 'outlook.event.cancel'
|
|
80
|
+
| 'onedrive.file.list'
|
|
81
|
+
| 'onedrive.file.search'
|
|
82
|
+
| 'onedrive.file.read'
|
|
83
|
+
| 'onedrive.file.upload'
|
|
84
|
+
| 'onedrive.folder.create'
|
|
85
|
+
| 'excel.worksheet.list'
|
|
86
|
+
| 'excel.range.read'
|
|
87
|
+
| 'excel.range.update'
|
|
88
|
+
| 'excel.table.list'
|
|
89
|
+
| 'excel.row.add'
|
|
90
|
+
| 'excel.worksheet.add'
|
|
91
|
+
| 'teams.message.list'
|
|
92
|
+
| 'teams.message.post'
|
|
93
|
+
| 'teams.reply.post'
|
|
49
94
|
| 'warehouse.view.read'
|
|
50
95
|
| 'warehouse.table.append'
|
|
51
96
|
| 'service.request';
|
|
@@ -59,7 +104,7 @@ export type IntegrationExecuteRequest = {
|
|
|
59
104
|
*/
|
|
60
105
|
limit?: number;
|
|
61
106
|
/**
|
|
62
|
-
* slack.message.post / slack.message.update / slack.dm.send / gmail.message.send: the body, 1..4000 characters (plain text, or Slack mrkdwn when `format` says so).
|
|
107
|
+
* slack.message.post / slack.message.update / slack.dm.send / gmail.message.send / outlook.message.send / outlook.message.reply / teams.message.post / teams.reply.post: the body, 1..4000 characters (plain text, or Slack mrkdwn when `format` says so; the Outlook and Teams sends carry `html` beside it like Gmail). docs.document.create / docs.document.append (0.86.0): the document's plain-text body or the text appended to it, at most 64 KiB (the shared bound; every other operation narrows it back to 4000).
|
|
63
108
|
*/
|
|
64
109
|
text?: string;
|
|
65
110
|
/**
|
|
@@ -71,11 +116,11 @@ export type IntegrationExecuteRequest = {
|
|
|
71
116
|
*/
|
|
72
117
|
threadId?: string;
|
|
73
118
|
/**
|
|
74
|
-
* gmail.message.read / gmail.attachment.read: the Gmail message id a gmail.thread.list or gmail.thread.read result named. slack.message.update / slack.message.delete (0.71.0): the Slack message ts a post or history result named.
|
|
119
|
+
* gmail.message.read / gmail.attachment.read: the Gmail message id a gmail.thread.list or gmail.thread.read result named. slack.message.update / slack.message.delete (0.71.0): the Slack message ts a post or history result named. outlook.message.read / outlook.attachment.read / outlook.message.reply (0.86.0): the Graph message id an outlook.message.list result named (base64url with `=`, up to 256 characters; the shared bound, which the Gmail and Slack operations narrow back to ^[A-Za-z0-9._-]{1,64}$). teams.reply.post (0.86.0): the Teams message id a teams.message.list or teams.message.post result named.
|
|
75
120
|
*/
|
|
76
121
|
messageId?: string;
|
|
77
122
|
/**
|
|
78
|
-
* gmail.attachment.read (0.71.0): the attachment id a gmail.message.read or gmail.thread.read result named.
|
|
123
|
+
* gmail.attachment.read (0.71.0): the attachment id a gmail.message.read or gmail.thread.read result named. outlook.attachment.read (0.86.0): the attachment id an outlook.message.read result named.
|
|
79
124
|
*/
|
|
80
125
|
attachmentId?: string;
|
|
81
126
|
/**
|
|
@@ -91,7 +136,7 @@ export type IntegrationExecuteRequest = {
|
|
|
91
136
|
*/
|
|
92
137
|
latest?: string;
|
|
93
138
|
/**
|
|
94
|
-
* gmail.thread.list (0.71.0): a Gmail search query (the search-box syntax, e.g. `from:jane newer_than:7d`). sharepoint.file.search (0.78.0): the words to search a drive's file names and contents for.
|
|
139
|
+
* gmail.thread.list (0.71.0): a Gmail search query (the search-box syntax, e.g. `from:jane newer_than:7d`). sharepoint.file.search (0.78.0): the words to search a drive's file names and contents for. drive.file.search / onedrive.file.search (0.86.0): the words to search the person's files for (name and contents). calendar.event.list: free text an event must match (Google's `q`). outlook.message.list: a Graph `$search` phrase over the folder's messages.
|
|
95
140
|
*/
|
|
96
141
|
q?: string;
|
|
97
142
|
/**
|
|
@@ -102,7 +147,7 @@ export type IntegrationExecuteRequest = {
|
|
|
102
147
|
*/
|
|
103
148
|
labelIds?: string[];
|
|
104
149
|
/**
|
|
105
|
-
* gmail.thread.list (0.71.0), every basecamp.*.list operation (0.76.0) and the paged sharepoint.* reads (0.78.0: list.list, item.list, drive.list, file.list, file.search): the `nextPageToken` of the previous page; absent reads the first page. At most 2048 characters for a Graph `$skiptoken`; the Gmail and Basecamp operations narrow it to 256.
|
|
150
|
+
* gmail.thread.list (0.71.0), every basecamp.*.list operation (0.76.0) and the paged sharepoint.* reads (0.78.0: list.list, item.list, drive.list, file.list, file.search): the `nextPageToken` of the previous page; absent reads the first page. At most 2048 characters for a Graph `$skiptoken`; the Gmail and Basecamp operations narrow it to 256. Every paged 0.86.0 read (calendar.calendar.list, calendar.event.list, drive.file.list, drive.file.search, outlook.message.list, outlook.event.list, onedrive.file.list, onedrive.file.search, teams.message.list) pages the same way: a Google `nextPageToken` or a Graph `$skiptoken`.
|
|
106
151
|
*/
|
|
107
152
|
pageToken?: string;
|
|
108
153
|
/**
|
|
@@ -113,7 +158,7 @@ export type IntegrationExecuteRequest = {
|
|
|
113
158
|
cc?: EmailAddressList1;
|
|
114
159
|
bcc?: EmailAddressList2;
|
|
115
160
|
/**
|
|
116
|
-
* gmail.message.send: one-line subject (no line breaks). basecamp.message.post (0.76.0): the message's title.
|
|
161
|
+
* gmail.message.send: one-line subject (no line breaks). basecamp.message.post (0.76.0): the message's title. outlook.message.send (0.86.0): the subject.
|
|
117
162
|
*/
|
|
118
163
|
subject?: string;
|
|
119
164
|
/**
|
|
@@ -121,11 +166,11 @@ export type IntegrationExecuteRequest = {
|
|
|
121
166
|
*/
|
|
122
167
|
replyToMessageId?: string;
|
|
123
168
|
/**
|
|
124
|
-
* gmail.message.send (0.71.0): an HTML body sent beside `text` (which stays the plain-text alternative), at most 64 KiB.
|
|
169
|
+
* gmail.message.send (0.71.0): an HTML body sent beside `text` (which stays the plain-text alternative), at most 64 KiB. outlook.message.send / teams.message.post / teams.reply.post (0.86.0): an HTML body beside `text`, the same way.
|
|
125
170
|
*/
|
|
126
171
|
html?: string;
|
|
127
172
|
/**
|
|
128
|
-
* gmail.message.send (0.71.0): files to attach, 1..5, each at most 2 MiB (2,796,203 base64 characters).
|
|
173
|
+
* gmail.message.send (0.71.0): files to attach, 1..5, each at most 2 MiB (2,796,203 base64 characters). outlook.message.send (0.86.0): the same, 1..5.
|
|
129
174
|
*
|
|
130
175
|
* @minItems 1
|
|
131
176
|
* @maxItems 5
|
|
@@ -152,7 +197,7 @@ export type IntegrationExecuteRequest = {
|
|
|
152
197
|
*/
|
|
153
198
|
contentFormat?: 'plain' | 'html';
|
|
154
199
|
/**
|
|
155
|
-
* basecamp.todo.create (0.76.0): the to-do's notes, at most 16 KiB, read the way `contentFormat` says.
|
|
200
|
+
* basecamp.todo.create (0.76.0): the to-do's notes, at most 16 KiB, read the way `contentFormat` says. calendar.event.create / calendar.event.update / outlook.event.create / outlook.event.update (0.86.0): the event's description, at most 8000 characters.
|
|
156
201
|
*/
|
|
157
202
|
description?: string;
|
|
158
203
|
/**
|
|
@@ -167,7 +212,7 @@ export type IntegrationExecuteRequest = {
|
|
|
167
212
|
*/
|
|
168
213
|
assigneeIds?: string[];
|
|
169
214
|
/**
|
|
170
|
-
* basecamp.todo.create (0.76.0): whether Basecamp notifies the assignees; false when absent.
|
|
215
|
+
* basecamp.todo.create (0.76.0): whether Basecamp notifies the assignees; false when absent. calendar.event.create / calendar.event.update / calendar.event.cancel / outlook.event.create / outlook.event.update (0.86.0): whether the attendees are emailed about the change; true when absent (the provider's default; governance applies it, a boolean input takes no contract default).
|
|
171
216
|
*/
|
|
172
217
|
notify?: boolean;
|
|
173
218
|
/**
|
|
@@ -187,15 +232,15 @@ export type IntegrationExecuteRequest = {
|
|
|
187
232
|
*/
|
|
188
233
|
itemId?: string;
|
|
189
234
|
/**
|
|
190
|
-
* sharepoint.file.list / sharepoint.file.search / sharepoint.file.read / sharepoint.file.upload (0.78.0): the document library, as a sharepoint.drive.list result named it; absent means the site's default drive (its Documents library).
|
|
235
|
+
* sharepoint.file.list / sharepoint.file.search / sharepoint.file.read / sharepoint.file.upload (0.78.0): the document library, as a sharepoint.drive.list result named it; absent means the site's default drive (its Documents library). excel.worksheet.list / excel.range.read / excel.range.update / excel.table.list / excel.row.add / excel.worksheet.add (0.86.0): the drive a shared workbook lives in; absent means the person's own OneDrive.
|
|
191
236
|
*/
|
|
192
237
|
driveId?: string;
|
|
193
238
|
/**
|
|
194
|
-
* sharepoint.file.list / sharepoint.file.upload (0.78.0): the folder to list or upload into, as a sharepoint.file.list result named it (an entry with isFolder); absent means the drive's root.
|
|
239
|
+
* sharepoint.file.list / sharepoint.file.upload (0.78.0): the folder to list or upload into, as a sharepoint.file.list result named it (an entry with isFolder); absent means the drive's root. drive.file.list / drive.file.upload / drive.folder.create (0.86.0): a Google Drive folder id; absent means the root of My Drive. onedrive.file.list / onedrive.file.upload / onedrive.folder.create: a OneDrive folder id; absent means the drive's root.
|
|
195
240
|
*/
|
|
196
241
|
folderId?: string;
|
|
197
242
|
/**
|
|
198
|
-
* sharepoint.file.read (0.78.0): the file, as a sharepoint.file.list, sharepoint.file.search or sharepoint.file.upload result named it.
|
|
243
|
+
* sharepoint.file.read (0.78.0): the file, as a sharepoint.file.list, sharepoint.file.search or sharepoint.file.upload result named it. drive.file.read (0.86.0): a Google Drive file id. onedrive.file.read: a OneDrive item id. excel.* (0.86.0): the workbook (an .xlsx drive item) the operation opens.
|
|
199
244
|
*/
|
|
200
245
|
fileId?: string;
|
|
201
246
|
/**
|
|
@@ -209,19 +254,19 @@ export type IntegrationExecuteRequest = {
|
|
|
209
254
|
*/
|
|
210
255
|
filter?: string;
|
|
211
256
|
/**
|
|
212
|
-
* sharepoint.file.upload (0.78.0): what happens when a file of that name already exists in the folder; rename when absent.
|
|
257
|
+
* sharepoint.file.upload (0.78.0): what happens when a file of that name already exists in the folder; rename when absent. drive.file.upload / onedrive.file.upload (0.86.0): the same (for Drive, rename and replace are governance's: Drive itself allows duplicate names).
|
|
213
258
|
*/
|
|
214
259
|
conflict?: 'rename' | 'replace' | 'fail';
|
|
215
260
|
/**
|
|
216
|
-
* sharepoint.file.upload (0.78.0): the name the file is stored under (the result's `filename` is the stored name, which `conflict` rename may have changed).
|
|
261
|
+
* sharepoint.file.upload (0.78.0): the name the file is stored under (the result's `filename` is the stored name, which `conflict` rename may have changed). drive.file.upload / onedrive.file.upload (0.86.0): the same.
|
|
217
262
|
*/
|
|
218
263
|
filename?: string;
|
|
219
264
|
/**
|
|
220
|
-
* sharepoint.file.upload (0.78.0): the file's MIME type, e.g. application/pdf.
|
|
265
|
+
* sharepoint.file.upload (0.78.0): the file's MIME type, e.g. application/pdf. drive.file.upload / onedrive.file.upload (0.86.0): the same.
|
|
221
266
|
*/
|
|
222
267
|
contentType?: string;
|
|
223
268
|
/**
|
|
224
|
-
* sharepoint.file.upload (0.78.0): the file bytes, standard base64, at most 2 MiB of bytes (2,796,203 base64 characters) — the Gmail attachment bound.
|
|
269
|
+
* sharepoint.file.upload (0.78.0): the file bytes, standard base64, at most 2 MiB of bytes (2,796,203 base64 characters) — the Gmail attachment bound. drive.file.upload / onedrive.file.upload (0.86.0): the same bound.
|
|
225
270
|
*/
|
|
226
271
|
dataBase64?: string;
|
|
227
272
|
/**
|
|
@@ -290,9 +335,117 @@ export type IntegrationExecuteRequest = {
|
|
|
290
335
|
* phone.sms.list (0.82.0): only messages from this sender id or number (as the provider reports it, e.g. `VK-GSTNIN` or `+919876543210`); absent lists every sender.
|
|
291
336
|
*/
|
|
292
337
|
from?: string;
|
|
338
|
+
/**
|
|
339
|
+
* calendar.* (0.86.0): the Google calendar the operation reads or writes, as a calendar.calendar.list result named it; absent means `primary`, the person's own calendar (governance's default; a string input takes no contract default).
|
|
340
|
+
*/
|
|
341
|
+
calendarId?: string;
|
|
342
|
+
/**
|
|
343
|
+
* calendar.event.read / calendar.event.update / calendar.event.cancel (0.86.0): the Google event id a calendar.event.list or calendar.event.create result named (an instance of a recurring event carries its `_<start>` suffix). outlook.event.read / outlook.event.update / outlook.event.cancel: the Graph event id an outlook.event.list or outlook.event.create result named.
|
|
344
|
+
*/
|
|
345
|
+
eventId?: string;
|
|
346
|
+
/**
|
|
347
|
+
* calendar.event.list (0.86.0): the start of the window, an RFC 3339 date-time with a zone; events ending after it are listed.
|
|
348
|
+
*/
|
|
349
|
+
timeMin?: string;
|
|
350
|
+
/**
|
|
351
|
+
* calendar.event.list (0.86.0): the end of the window, an RFC 3339 date-time with a zone; events starting before it are listed.
|
|
352
|
+
*/
|
|
353
|
+
timeMax?: string;
|
|
354
|
+
/**
|
|
355
|
+
* calendar.event.create / calendar.event.update / outlook.event.create / outlook.event.update (0.86.0): when the event starts, an RFC 3339 date-time with a zone (for an all-day event its date part is used). outlook.event.list: the start of the calendar-view window.
|
|
356
|
+
*/
|
|
357
|
+
start?: string;
|
|
358
|
+
/**
|
|
359
|
+
* calendar.event.create / calendar.event.update / outlook.event.create / outlook.event.update (0.86.0): when the event ends, the same way; the day after the last day for an all-day event. outlook.event.list: the end of the calendar-view window.
|
|
360
|
+
*/
|
|
361
|
+
end?: string;
|
|
362
|
+
/**
|
|
363
|
+
* calendar.event.create / calendar.event.update / outlook.event.create / outlook.event.update (0.86.0): the IANA time zone the event is shown in (e.g. Asia/Kolkata); absent keeps the zone of `start`.
|
|
364
|
+
*/
|
|
365
|
+
timeZone?: string;
|
|
366
|
+
/**
|
|
367
|
+
* calendar.event.create / outlook.event.create (0.86.0): the event's title (Google `summary`, Graph `subject`); optional on the updates. drive.folder.create / onedrive.folder.create: the new folder's name. docs.document.create: the document's title. sheets.spreadsheet.create: the spreadsheet's title. excel.worksheet.add: the new worksheet's name (1..31 at Excel; its check).
|
|
368
|
+
*/
|
|
369
|
+
title?: string;
|
|
370
|
+
/**
|
|
371
|
+
* calendar.event.create / calendar.event.update / outlook.event.create / outlook.event.update (0.86.0): where the event is, as free text.
|
|
372
|
+
*/
|
|
373
|
+
location?: string;
|
|
374
|
+
/**
|
|
375
|
+
* calendar.event.create / calendar.event.update / outlook.event.create / outlook.event.update (0.86.0): the people invited, 1..100, by email; on an update the list replaces the invitees.
|
|
376
|
+
*
|
|
377
|
+
* @minItems 1
|
|
378
|
+
* @maxItems 100
|
|
379
|
+
*/
|
|
380
|
+
attendees?: EmailAddress[];
|
|
381
|
+
/**
|
|
382
|
+
* calendar.event.create / outlook.event.create (0.86.0): true makes the event span whole days, from the date of `start` to the day before the date of `end`; false or absent uses the times.
|
|
383
|
+
*/
|
|
384
|
+
allDay?: boolean;
|
|
385
|
+
/**
|
|
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).
|
|
387
|
+
*/
|
|
388
|
+
documentId?: string;
|
|
389
|
+
/**
|
|
390
|
+
* sheets.* (0.86.0): the Google Sheets spreadsheet id (the `/spreadsheets/d/<id>` path segment, or a sheets.spreadsheet.create result's id).
|
|
391
|
+
*/
|
|
392
|
+
spreadsheetId?: string;
|
|
393
|
+
/**
|
|
394
|
+
* sheets.values.read / sheets.values.append / sheets.values.update / sheets.values.clear (0.86.0): the cells in A1 notation, e.g. `Orders!A1:D` or `Sheet1` (the whole sheet). An append finds the table the range names and writes below it.
|
|
395
|
+
*/
|
|
396
|
+
range?: string;
|
|
397
|
+
/**
|
|
398
|
+
* sheets.values.append / sheets.values.update / excel.range.update / excel.row.add (0.86.0): the cells to write as rows, 1..1000 of them, each 1..100 cells; every cell a string of at most 4000 characters, a number, a boolean or null. An update's grid must fit the range or address (the provider's check); the 64 KiB body cap is governance's.
|
|
399
|
+
*
|
|
400
|
+
* @minItems 1
|
|
401
|
+
* @maxItems 1000
|
|
402
|
+
*/
|
|
403
|
+
values?: (string | number | boolean | null)[][];
|
|
404
|
+
/**
|
|
405
|
+
* sheets.values.append / sheets.values.update (0.86.0): how Google reads a cell string; user when absent.
|
|
406
|
+
*/
|
|
407
|
+
valueInput?: 'raw' | 'user';
|
|
408
|
+
/**
|
|
409
|
+
* docs.text.replace (0.86.0): the find-and-replace pairs applied over the whole document, 1..64, in order (a mail merge: `{{customer}}` → the name).
|
|
410
|
+
*
|
|
411
|
+
* @minItems 1
|
|
412
|
+
* @maxItems 64
|
|
413
|
+
*/
|
|
414
|
+
replacements?: DocsReplacement[];
|
|
415
|
+
/**
|
|
416
|
+
* excel.range.read / excel.range.update (0.86.0): the worksheet, by name or id as an excel.worksheet.list result named it. excel.table.list: only that worksheet's tables; absent lists the workbook's.
|
|
417
|
+
*/
|
|
418
|
+
worksheet?: string;
|
|
419
|
+
/**
|
|
420
|
+
* excel.range.read / excel.range.update (0.86.0): the cells in A1 notation without the sheet name, e.g. `A1:D10`; a read without one answers the worksheet's used range.
|
|
421
|
+
*/
|
|
422
|
+
address?: string;
|
|
423
|
+
/**
|
|
424
|
+
* excel.row.add (0.86.0): the table, by name or id as an excel.table.list result named it; the rows go below its last row.
|
|
425
|
+
*/
|
|
426
|
+
tableName?: string;
|
|
427
|
+
/**
|
|
428
|
+
* outlook.event.cancel (0.86.0): a note sent to the attendees with the cancellation.
|
|
429
|
+
*/
|
|
430
|
+
comment?: string;
|
|
431
|
+
/**
|
|
432
|
+
* outlook.message.list (0.86.0): the mail folder, a well-known name (`inbox`, `sentitems`, `drafts`, `archive`...) or a folder id; inbox when absent.
|
|
433
|
+
*/
|
|
434
|
+
folder?: string;
|
|
435
|
+
/**
|
|
436
|
+
* drive.file.read (0.86.0): how a Google Docs, Sheets or Slides file is rendered on the way out; absent exports a Docs file as text, a Sheets file as csv and a Slides file as pdf, and downloads any other file as is.
|
|
437
|
+
*/
|
|
438
|
+
exportAs?: 'text' | 'csv' | 'pdf';
|
|
439
|
+
/**
|
|
440
|
+
* sheets.spreadsheet.create (0.86.0): the titles of the sheets the new spreadsheet starts with, 1..20; absent creates the one default sheet.
|
|
441
|
+
*
|
|
442
|
+
* @minItems 1
|
|
443
|
+
* @maxItems 20
|
|
444
|
+
*/
|
|
445
|
+
sheets?: string[];
|
|
293
446
|
};
|
|
294
447
|
/**
|
|
295
|
-
* 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)
|
|
448
|
+
* 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.
|
|
296
449
|
*/
|
|
297
450
|
idempotencyKey?: string;
|
|
298
451
|
/**
|
|
@@ -313,21 +466,21 @@ export type IntegrationExecuteRequest = {
|
|
|
313
466
|
*/
|
|
314
467
|
export type EmailAddress = string;
|
|
315
468
|
/**
|
|
316
|
-
* gmail.message.send: primary recipients. slack.dm.send (0.71.0): the workspace members to message, by email, 1..8; several open one group DM.
|
|
469
|
+
* gmail.message.send: primary recipients. slack.dm.send (0.71.0): the workspace members to message, by email, 1..8; several open one group DM. outlook.message.send (0.86.0): primary recipients, as for Gmail.
|
|
317
470
|
*
|
|
318
471
|
* @minItems 1
|
|
319
472
|
* @maxItems 50
|
|
320
473
|
*/
|
|
321
474
|
export type EmailAddressList = EmailAddress[];
|
|
322
475
|
/**
|
|
323
|
-
* gmail.message.send: carbon-copy recipients.
|
|
476
|
+
* gmail.message.send: carbon-copy recipients. outlook.message.send (0.86.0): the same.
|
|
324
477
|
*
|
|
325
478
|
* @minItems 1
|
|
326
479
|
* @maxItems 50
|
|
327
480
|
*/
|
|
328
481
|
export type EmailAddressList1 = EmailAddress[];
|
|
329
482
|
/**
|
|
330
|
-
* gmail.message.send: blind-copy recipients.
|
|
483
|
+
* gmail.message.send: blind-copy recipients. outlook.message.send (0.86.0): the same.
|
|
331
484
|
*
|
|
332
485
|
* @minItems 1
|
|
333
486
|
* @maxItems 50
|
|
@@ -347,7 +500,7 @@ export type WarehouseAggregateFn = 'count' | 'sum' | 'avg' | 'min' | 'max';
|
|
|
347
500
|
export type WarehouseOrderDirection = 'asc' | 'desc';
|
|
348
501
|
|
|
349
502
|
/**
|
|
350
|
-
* One file attached to a gmail.message.send (0.71.0), carried inline as base64. At most 2 MiB of bytes, which is 2,796,203 base64 characters.
|
|
503
|
+
* One file attached to a gmail.message.send (0.71.0) or an outlook.message.send (0.86.0), carried inline as base64. At most 2 MiB of bytes, which is 2,796,203 base64 characters.
|
|
351
504
|
*/
|
|
352
505
|
export interface EmailAttachment {
|
|
353
506
|
/**
|
|
@@ -401,3 +554,20 @@ export interface WarehouseOrder {
|
|
|
401
554
|
column: string;
|
|
402
555
|
direction?: WarehouseOrderDirection;
|
|
403
556
|
}
|
|
557
|
+
/**
|
|
558
|
+
* One find-and-replace of docs.text.replace (0.86.0): every occurrence of `find` becomes `replace` (empty deletes it); `matchCase` false or absent ignores case.
|
|
559
|
+
*/
|
|
560
|
+
export interface DocsReplacement {
|
|
561
|
+
/**
|
|
562
|
+
* The text to find, 1..512 characters, matched literally.
|
|
563
|
+
*/
|
|
564
|
+
find: string;
|
|
565
|
+
/**
|
|
566
|
+
* The replacement, at most 4000 characters; empty deletes the match.
|
|
567
|
+
*/
|
|
568
|
+
replace: string;
|
|
569
|
+
/**
|
|
570
|
+
* Whether the match is case-sensitive; false when absent.
|
|
571
|
+
*/
|
|
572
|
+
matchCase?: boolean;
|
|
573
|
+
}
|