@fourier-labs/harbour-contracts 0.72.0 → 0.73.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/contract-release.json +20 -20
- package/dist/gen-ts/app-integrations-declaration.d.ts +29 -20
- 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 +2 -2
- package/dist/gen-ts/integration-execute-input-rules.d.ts +35 -0
- package/dist/gen-ts/integration-execute-input-rules.js +15 -0
- package/dist/gen-ts/integration-execute-request.d.ts +16 -2
- package/dist/gen-ts/integration-execute-result.d.ts +5 -0
- package/dist/gen-ts/integration-operations.d.ts +7 -0
- package/dist/gen-ts/integration-operations.js +9 -0
- package/dist/gen-ts/saas-connection.d.ts +1 -1
- package/gen-ts/app-integrations-declaration.ts +29 -20
- package/gen-ts/contract-release.ts +6 -6
- package/gen-ts/data-grant-v2.ts +2 -1
- package/gen-ts/integration-execute-input-rules.ts +15 -0
- package/gen-ts/integration-execute-request.ts +17 -2
- package/gen-ts/integration-execute-result.ts +5 -0
- package/gen-ts/integration-operations.ts +9 -0
- package/gen-ts/saas-connection.ts +1 -0
- package/package.json +1 -1
- package/schema/app-integrations-declaration.schema.json +478 -67
- package/schema/integration-execute-request.schema.json +871 -120
- package/schema/integration-execute-result.schema.json +505 -82
package/contract-release.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "harbour.contract-release/1.0",
|
|
3
|
-
"repositoryVersion": "0.
|
|
4
|
-
"publishVersion": "0.
|
|
5
|
-
"publishTag": "v0.
|
|
6
|
-
"schemasDigest": "sha256:
|
|
3
|
+
"repositoryVersion": "0.73.0.0",
|
|
4
|
+
"publishVersion": "0.73.0",
|
|
5
|
+
"publishTag": "v0.73.0",
|
|
6
|
+
"schemasDigest": "sha256:c0f37c59c7c2decb4fb62d96596b787628483bdcdb09756c3ea286385d31a5f5",
|
|
7
7
|
"aiFixturesDigest": "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6",
|
|
8
|
-
"generatedGoDigest": "sha256:
|
|
9
|
-
"generatedTypeScriptDigest": "sha256:
|
|
8
|
+
"generatedGoDigest": "sha256:eb98ee80133c91e8562b95d92388c5bb637a06ae8d97a0827f528cd6decde8c9",
|
|
9
|
+
"generatedTypeScriptDigest": "sha256:ad539efcc9e4a7521f9526dd6304215f6b764be64bd40cd598ec023f6bbb4583",
|
|
10
10
|
"generatedExclusions": {
|
|
11
11
|
"gen-go/contract_release.go": "contains the generated aggregate digests (self-reference)",
|
|
12
12
|
"gen-ts/contract-release.ts": "contains the generated aggregate digests (self-reference)"
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"schema/ai-transform-result.schema.json": "sha256:244e380a36957ab2dcb526ea22aaecb56b53664ce1fda6934d0021c084c99133",
|
|
32
32
|
"schema/ai-verification-evidence.schema.json": "sha256:bdbc762df256d2a8dd0bdda60d4d13915ce40034cd756af9515871d145f10ad9",
|
|
33
33
|
"schema/api-error-response.schema.json": "sha256:3d43d5bdf0b59c944e20509d832e6776c3ecdba4d6c245a9118bbe52062a8304",
|
|
34
|
-
"schema/app-integrations-declaration.schema.json": "sha256:
|
|
34
|
+
"schema/app-integrations-declaration.schema.json": "sha256:2647af515f9291ea02bed363d535f36ac3d0b1cf012466a25937cf4e41c4dedd",
|
|
35
35
|
"schema/artifact-contract.schema.json": "sha256:8047b461a1c6d07bbe867a259c57bdf5cc0fdf282cf842ec7b683a9e93713b10",
|
|
36
36
|
"schema/binding-classification-subject.schema.json": "sha256:a8825ce652e7e00a18759c4249bd5bcd0cae552dd58440513f867e87f685133c",
|
|
37
37
|
"schema/builder-input-proposal.schema.json": "sha256:fe85cffa6d76b1e1effe1f5d75525f8fe0e1eaa3be4a304e491aa23ad72c0e72",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
"schema/error-envelope.schema.json": "sha256:75dccda7dd16fdf8435deda53fc7dbcdc109b65114617a17f11763010c656f90",
|
|
55
55
|
"schema/integration-connect-result.schema.json": "sha256:3f254b67ef739dc1fa395bdc8c4dc93359b16d481dba2a2d777aa5b6f34b7af8",
|
|
56
56
|
"schema/integration-error-details.schema.json": "sha256:47ad7621c34b092c7e40f912a21e7ccbdc000b974cfb7fa0c9200463e029f8fb",
|
|
57
|
-
"schema/integration-execute-request.schema.json": "sha256:
|
|
58
|
-
"schema/integration-execute-result.schema.json": "sha256:
|
|
57
|
+
"schema/integration-execute-request.schema.json": "sha256:03b462a721dbd41f0591922d84e66b6074d36947338240d4f548eb0179d11ac7",
|
|
58
|
+
"schema/integration-execute-result.schema.json": "sha256:3097b25f93234bc19872fa2081be0e3df1600c375106bd8b013533aea8deb95e",
|
|
59
59
|
"schema/internal-configuration-request.schema.json": "sha256:229d44a3458f68dceddfba802e5c1adcd95523a45af29b93b972706b88461a7d",
|
|
60
60
|
"schema/kit-bundle-manifest.schema.json": "sha256:4a9fcdd52ba0d55718ef4dbdab112b145ef90471d9356d4d3fb41e50fe9e400d",
|
|
61
61
|
"schema/kit-lock.schema.json": "sha256:a48154d9471e49a893d928f7b0e1e0bc77708a4a7edce4fdf14073203e0e8987",
|
|
@@ -109,11 +109,11 @@
|
|
|
109
109
|
"gen-go/contracts_test.go": "sha256:56376287cb1548be1b35ab4c65d6f0b558c5d34885f7a47cb3d9e8d786607bf5",
|
|
110
110
|
"gen-go/doc.go": "sha256:316d610ce568597a2ce6f38e9782e34fa5920f6f51ab0866e6d061b8a41cd822",
|
|
111
111
|
"gen-go/error_category.go": "sha256:b2ddea22dcfa030f1a45e721e635485b0bd816cf1f38e7654628a653f5ed4583",
|
|
112
|
-
"gen-go/integration_execute_input_rules.go": "sha256:
|
|
113
|
-
"gen-go/integration_execute_input_rules_test.go": "sha256:
|
|
114
|
-
"gen-go/integration_operations.go": "sha256:
|
|
112
|
+
"gen-go/integration_execute_input_rules.go": "sha256:f319996ec5ec3df38f357a84901680df15f80e982a3cbaec4956b3ef1f13548b",
|
|
113
|
+
"gen-go/integration_execute_input_rules_test.go": "sha256:17830fe9bc76d55d95e4e1959363c35ac595064972ac5c6eea3c2fae1efcaff9",
|
|
114
|
+
"gen-go/integration_operations.go": "sha256:e2871c9df4c07068753256f0549aebe1ca6009495cdef8dab1168efd2894b77c",
|
|
115
115
|
"gen-go/schema_documents.go": "sha256:c19c0d540f602ee997a84b90e20702d9bc63ed7d27aec267e76c04655fc182e0",
|
|
116
|
-
"gen-go/types.go": "sha256:
|
|
116
|
+
"gen-go/types.go": "sha256:5c18e15a00dc7e7e0296cf7a6afefb24a93d828aca3b019f95b8256dea5754f6",
|
|
117
117
|
"gen-go/version_state.go": "sha256:4ef8abb126414c0025cf2c59bc9c79a74ef4a2ff89e8f316cbf05acc872371c1"
|
|
118
118
|
},
|
|
119
119
|
"generatedTypeScript": {
|
|
@@ -138,13 +138,13 @@
|
|
|
138
138
|
"gen-ts/ai-transform-result.ts": "sha256:208c66b2aeb425c0cbcc18b7191f6e8989443f2b2c1690648e0e06cc1448ce25",
|
|
139
139
|
"gen-ts/ai-verification-evidence.ts": "sha256:979439d77f8b47631d1eb3b6c3c54ea6fec41089d2a51dc815fd370b1c4917fc",
|
|
140
140
|
"gen-ts/api-error-response.ts": "sha256:0fd73be282e7a5d72d6c343a4e64d09c232556b16161167f0cffd6278ed7e3d3",
|
|
141
|
-
"gen-ts/app-integrations-declaration.ts": "sha256:
|
|
141
|
+
"gen-ts/app-integrations-declaration.ts": "sha256:18c495f22f4501e8f425688f5294cc7e2bba48bc6c7faba7e35d169da540f77b",
|
|
142
142
|
"gen-ts/artifact-contract.ts": "sha256:4a6dc6d2caaeed4bb2066cc8a333e6e09e5a0d4745e0b1038293d54ab9403aeb",
|
|
143
143
|
"gen-ts/binding-classification-digest-helper.ts": "sha256:40fc7d85b4c3f3ffc5caf7d7950c62d013c83ee42058c7453b2100d95817f167",
|
|
144
144
|
"gen-ts/binding-classification-subject.ts": "sha256:c409a3fd7b942b50419632c51d9a79474fb30d6374bdc79c0e25c73618e800c3",
|
|
145
145
|
"gen-ts/builder-input-proposal.ts": "sha256:b0108c3787873d3cf1a39f00967379418a6766275d3474cfa55f5a9d93ead174",
|
|
146
146
|
"gen-ts/data-dependency.ts": "sha256:259f19e2759395d72ead90b8ed74a6dcef0c2641124f4f182823138cfd19bedf",
|
|
147
|
-
"gen-ts/data-grant-v2.ts": "sha256:
|
|
147
|
+
"gen-ts/data-grant-v2.ts": "sha256:cce15e51813fd693850391f12602a4436d869c75fc286b24cca539cfc5e27789",
|
|
148
148
|
"gen-ts/data-grant.ts": "sha256:2358579d8aa1e57b01a6f2b0eacce5531e7f21ef226404c9809925365e0d6155",
|
|
149
149
|
"gen-ts/data-source.ts": "sha256:1a40c252e94ee717d287ba63647e4368668dad9ea731770f8b58deb17d18b311",
|
|
150
150
|
"gen-ts/deploy-request.ts": "sha256:0214faa8be6680f0bfc117d5ce67c1a59fcc18bd0ea4bc840e03e7d051fa9ab6",
|
|
@@ -164,10 +164,10 @@
|
|
|
164
164
|
"gen-ts/index.ts": "sha256:57927b9fcddf506785671bbd44cced9f729373e4dd3e3480bc6c37fd05fb59e8",
|
|
165
165
|
"gen-ts/integration-connect-result.ts": "sha256:4b10f169b6e1af364e9b418de21caa9fadbfb77b43cbff77d741cfae0b52180c",
|
|
166
166
|
"gen-ts/integration-error-details.ts": "sha256:ad7ecec9dd4533a6e86b3508886a7d69937052f52105497285797f77106bcc6f",
|
|
167
|
-
"gen-ts/integration-execute-input-rules.ts": "sha256:
|
|
168
|
-
"gen-ts/integration-execute-request.ts": "sha256:
|
|
169
|
-
"gen-ts/integration-execute-result.ts": "sha256:
|
|
170
|
-
"gen-ts/integration-operations.ts": "sha256:
|
|
167
|
+
"gen-ts/integration-execute-input-rules.ts": "sha256:1127c321720cb9bde63a6d20dadd177c923fef1c8c8f37e0b106a2488fe079de",
|
|
168
|
+
"gen-ts/integration-execute-request.ts": "sha256:c9904987f61b006ebcc7d8500ec255e7bd7fc1ae0f98f23cf3a096a4273e3d42",
|
|
169
|
+
"gen-ts/integration-execute-result.ts": "sha256:f82de8f2e36bac732e015cecd7454a7cecd6ea5cf09b6efd119e252990a47c92",
|
|
170
|
+
"gen-ts/integration-operations.ts": "sha256:f4ddc2dc5776557d20dbf92a1e20cec63198c7d008426773c2e0fc3f509cd460",
|
|
171
171
|
"gen-ts/internal-configuration-request.ts": "sha256:7032437797473fa1c581d134adef2f3d4b4f4132f482cd17743e9d47097886bc",
|
|
172
172
|
"gen-ts/kit-bundle-manifest.ts": "sha256:2777a268aef8787b81e71d154a7d05f6f5ded09d66f378211ff5493ddb885171",
|
|
173
173
|
"gen-ts/kit-lock.ts": "sha256:00ceeb97e9b7d0187bec00728f5099fd34e775e9cc44c85c4714f7a3a4118ef6",
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
"gen-ts/promotion-request.ts": "sha256:9db88cef67f777a16bac628039ec3f582acb9e8cfff6fb592b30d0a0e55abc68",
|
|
176
176
|
"gen-ts/promotion-response.ts": "sha256:f1c9cafac96faeb02a443a31786f67714e818f38d90108e7af41958396524d6f",
|
|
177
177
|
"gen-ts/resolved-app-serving.ts": "sha256:6131a6cc5f784f0d101081d2ce1b96b76b2f904b2c5e7b2809f9ede5878ada1f",
|
|
178
|
-
"gen-ts/saas-connection.ts": "sha256:
|
|
178
|
+
"gen-ts/saas-connection.ts": "sha256:807554f7e4bd3629fff4d05778e56b71096ba70a6dda9e1645ebdc8c40a5d3a8",
|
|
179
179
|
"gen-ts/sanitized-binding-digest-helper.ts": "sha256:c47d7fdc20500e2e72c23fe39ecdd610fc397c47fcba51335ebec3c380fe6872",
|
|
180
180
|
"gen-ts/sanitized-binding-evidence.ts": "sha256:f3fb7b1d7d2e0929eb0ea981eaf32db3104010647185f6ae59f67167d42538a9",
|
|
181
181
|
"gen-ts/secret-reference.ts": "sha256:731fbcde7315cb4128d5b01bdbe6e6f248f13c7ad8dea04a3a4e927ac4890198",
|
|
@@ -1,4 +1,23 @@
|
|
|
1
|
-
export type
|
|
1
|
+
export type DeclaredConnection = {
|
|
2
|
+
kind: IntegrationConnectionKind;
|
|
3
|
+
presentation?: IntegrationPresentation;
|
|
4
|
+
operations: {
|
|
5
|
+
'slack.channel.history'?: DeclaredModeChannelOperation;
|
|
6
|
+
'slack.message.post'?: DeclaredModeChannelOperation;
|
|
7
|
+
'slack.message.update'?: DeclaredModeChannelOperation;
|
|
8
|
+
'slack.message.delete'?: DeclaredModeChannelOperation;
|
|
9
|
+
'slack.dm.send'?: AppModeChannelOperation;
|
|
10
|
+
'slack.user.lookup'?: AppModeChannelOperation;
|
|
11
|
+
'gmail.thread.list'?: UserModeChannelOperation;
|
|
12
|
+
'gmail.thread.read'?: UserModeChannelOperation;
|
|
13
|
+
'gmail.message.read'?: UserModeChannelOperation;
|
|
14
|
+
'gmail.message.send'?: UserModeChannelOperation;
|
|
15
|
+
'gmail.attachment.read'?: UserModeChannelOperation;
|
|
16
|
+
'warehouse.view.read'?: AppModeViewOperation;
|
|
17
|
+
'service.request'?: ServiceOperation;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export type IntegrationConnectionKind = 'saas' | 'database' | 'service';
|
|
2
21
|
/**
|
|
3
22
|
* Whose authority an operation runs under. Fixed per operation, except the declared-mode Slack operations (slack.message.post; since 0.71.0 also slack.channel.history, slack.message.update, slack.message.delete): declared per app for the access request, and named per call among the app's approved modes (execute request `mode`, 0.55.0).
|
|
4
23
|
*/
|
|
@@ -17,7 +36,7 @@ export type ResourceNames = IntegrationAlias[];
|
|
|
17
36
|
*/
|
|
18
37
|
export type ColumnName = string;
|
|
19
38
|
/**
|
|
20
|
-
* Committed `.isomorph/integrations.json`: the app's declared use of tenant-wide integration connections. Keys are logical connection aliases (the governance sourceId); resources are logical names (Slack channel alias, warehouse view name), never IDs, tokens or URLs. The operation set is closed (
|
|
39
|
+
* Committed `.isomorph/integrations.json`: the app's declared use of tenant-wide integration connections. Keys are logical connection aliases (the governance sourceId); resources are logical names (Slack channel alias, warehouse view name), never IDs, tokens or URLs. The operation set is closed (thirteen operations since 0.73.0, ADR 0018). Each operation carries a fixed identity mode — slack.dm.send=app, slack.user.lookup=app, every gmail.* operation=user, warehouse.view.read=app — except the declared-mode Slack operations (slack.message.post, and since 0.71.0 slack.channel.history, slack.message.update and slack.message.delete), whose mode the app DECLARES: `app` acts as the company's Slack app (the one audited bot identity; a post goes out under the IT-approved per-app display name when the connection declares `presentation`), `user` acts as the signed-in person after their own consent (reads what they can read, edits what they wrote). The declared mode is the one the app requests access for; an app may hold approved grants for both modes after two requests, and each declared-mode call names which approved mode it runs under (`mode` on the execute request, 0.55.0) — a mode IT did not approve is refused, never swapped for the other. A `saas` connection may declare only the Slack and Gmail operations and a `database` connection only warehouse.view.read; `presentation` is a `saas` connection's optional per-app display name and icon for app-mode Slack posts, shown to IT at approval time and applied only from the approved grant. Gmail is user-mode only (reads, one send); its single resource is the fixed `inbox` alias. slack.dm.send and slack.user.lookup address people by email rather than a channel, so their single resource is the fixed `workspace` alias (the connection's installed workspace), the way Gmail's is `inbox`. This file also owns the shared IntegrationOperation / IntegrationIdentityMode / IntegrationEnvironment / IntegrationConnectionKind / IntegrationPresentation definitions referenced by the other integration schemas.
|
|
21
40
|
*/
|
|
22
41
|
export interface AppIntegrationsDeclaration {
|
|
23
42
|
schema: 'isomorph.app-integrations/2.0';
|
|
@@ -25,24 +44,6 @@ export interface AppIntegrationsDeclaration {
|
|
|
25
44
|
[k: string]: DeclaredConnection;
|
|
26
45
|
};
|
|
27
46
|
}
|
|
28
|
-
export interface DeclaredConnection {
|
|
29
|
-
kind: IntegrationConnectionKind;
|
|
30
|
-
presentation?: IntegrationPresentation;
|
|
31
|
-
operations: {
|
|
32
|
-
'slack.channel.history'?: DeclaredModeChannelOperation;
|
|
33
|
-
'slack.message.post'?: DeclaredModeChannelOperation;
|
|
34
|
-
'slack.message.update'?: DeclaredModeChannelOperation;
|
|
35
|
-
'slack.message.delete'?: DeclaredModeChannelOperation;
|
|
36
|
-
'slack.dm.send'?: AppModeChannelOperation;
|
|
37
|
-
'slack.user.lookup'?: AppModeChannelOperation;
|
|
38
|
-
'gmail.thread.list'?: UserModeChannelOperation;
|
|
39
|
-
'gmail.thread.read'?: UserModeChannelOperation;
|
|
40
|
-
'gmail.message.read'?: UserModeChannelOperation;
|
|
41
|
-
'gmail.message.send'?: UserModeChannelOperation;
|
|
42
|
-
'gmail.attachment.read'?: UserModeChannelOperation;
|
|
43
|
-
'warehouse.view.read'?: AppModeViewOperation;
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
47
|
/**
|
|
47
48
|
* saas connections only (Slack): how this app's app-mode posts are presented; meaningless for every other operation.
|
|
48
49
|
*/
|
|
@@ -87,3 +88,11 @@ export interface ViewResource {
|
|
|
87
88
|
*/
|
|
88
89
|
columns: ColumnName[];
|
|
89
90
|
}
|
|
91
|
+
export interface ServiceOperation {
|
|
92
|
+
identity: 'app';
|
|
93
|
+
/**
|
|
94
|
+
* @minItems 1
|
|
95
|
+
* @maxItems 1
|
|
96
|
+
*/
|
|
97
|
+
resources: 'api'[];
|
|
98
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export declare const ContractRepositoryVersion: "0.
|
|
2
|
-
export declare const ContractPublishVersion: "0.
|
|
3
|
-
export declare const ContractPublishTag: "v0.
|
|
4
|
-
export declare const ContractSchemasDigest: "sha256:
|
|
1
|
+
export declare const ContractRepositoryVersion: "0.73.0.0";
|
|
2
|
+
export declare const ContractPublishVersion: "0.73.0";
|
|
3
|
+
export declare const ContractPublishTag: "v0.73.0";
|
|
4
|
+
export declare const ContractSchemasDigest: "sha256:c0f37c59c7c2decb4fb62d96596b787628483bdcdb09756c3ea286385d31a5f5";
|
|
5
5
|
export declare const ContractAiFixturesDigest: "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6";
|
|
6
|
-
export declare const ContractGeneratedGoDigest: "sha256:
|
|
7
|
-
export declare const ContractGeneratedTypeScriptDigest: "sha256:
|
|
6
|
+
export declare const ContractGeneratedGoDigest: "sha256:eb98ee80133c91e8562b95d92388c5bb637a06ae8d97a0827f528cd6decde8c9";
|
|
7
|
+
export declare const ContractGeneratedTypeScriptDigest: "sha256:ad539efcc9e4a7521f9526dd6304215f6b764be64bd40cd598ec023f6bbb4583";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
|
-
export const ContractRepositoryVersion = "0.
|
|
4
|
-
export const ContractPublishVersion = "0.
|
|
5
|
-
export const ContractPublishTag = "v0.
|
|
6
|
-
export const ContractSchemasDigest = "sha256:
|
|
3
|
+
export const ContractRepositoryVersion = "0.73.0.0";
|
|
4
|
+
export const ContractPublishVersion = "0.73.0";
|
|
5
|
+
export const ContractPublishTag = "v0.73.0";
|
|
6
|
+
export const ContractSchemasDigest = "sha256:c0f37c59c7c2decb4fb62d96596b787628483bdcdb09756c3ea286385d31a5f5";
|
|
7
7
|
export const ContractAiFixturesDigest = "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6";
|
|
8
|
-
export const ContractGeneratedGoDigest = "sha256:
|
|
9
|
-
export const ContractGeneratedTypeScriptDigest = "sha256:
|
|
8
|
+
export const ContractGeneratedGoDigest = "sha256:eb98ee80133c91e8562b95d92388c5bb637a06ae8d97a0827f528cd6decde8c9";
|
|
9
|
+
export const ContractGeneratedTypeScriptDigest = "sha256:ad539efcc9e4a7521f9526dd6304215f6b764be64bd40cd598ec023f6bbb4583";
|
|
@@ -26,14 +26,14 @@ export interface DataGrantV2 {
|
|
|
26
26
|
* Whose authority an operation runs under. Fixed per operation, except the declared-mode Slack operations (slack.message.post; since 0.71.0 also slack.channel.history, slack.message.update, slack.message.delete): declared per app for the access request, and named per call among the app's approved modes (execute request `mode`, 0.55.0).
|
|
27
27
|
*/
|
|
28
28
|
mode: 'app' | 'user';
|
|
29
|
-
kind: 'saas' | 'database';
|
|
29
|
+
kind: 'saas' | 'database' | 'service';
|
|
30
30
|
status: DataGrantV2Status;
|
|
31
31
|
/**
|
|
32
32
|
* Approved operations; each must match this grant's mode. Empty until the first approval. At most the eleven SaaS operations (0.71.0); a database grant holds one.
|
|
33
33
|
*
|
|
34
34
|
* @maxItems 11
|
|
35
35
|
*/
|
|
36
|
-
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' | 'warehouse.view.read')[];
|
|
36
|
+
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' | 'warehouse.view.read' | 'service.request')[];
|
|
37
37
|
/**
|
|
38
38
|
* Approved logical resources. Never inherited by wildcard. Empty until the first approval.
|
|
39
39
|
*
|
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
* same message wherever it is made.
|
|
7
7
|
*/
|
|
8
8
|
export type IntegrationExecuteInputFieldRule = {
|
|
9
|
+
kind: 'object';
|
|
10
|
+
required: boolean;
|
|
11
|
+
} | {
|
|
9
12
|
kind: 'integer';
|
|
10
13
|
required: boolean;
|
|
11
14
|
minimum: number;
|
|
@@ -461,6 +464,38 @@ export declare const IntegrationExecuteInputRules: {
|
|
|
461
464
|
};
|
|
462
465
|
};
|
|
463
466
|
};
|
|
467
|
+
readonly "service.request": {
|
|
468
|
+
readonly idempotencyKey: false;
|
|
469
|
+
readonly fields: {
|
|
470
|
+
readonly method: {
|
|
471
|
+
readonly kind: "enum";
|
|
472
|
+
readonly required: true;
|
|
473
|
+
readonly values: readonly ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"];
|
|
474
|
+
};
|
|
475
|
+
readonly path: {
|
|
476
|
+
readonly kind: "string";
|
|
477
|
+
readonly required: true;
|
|
478
|
+
readonly minLength: 0;
|
|
479
|
+
readonly maxLength: 16384;
|
|
480
|
+
};
|
|
481
|
+
readonly pathParams: {
|
|
482
|
+
readonly kind: "object";
|
|
483
|
+
readonly required: false;
|
|
484
|
+
};
|
|
485
|
+
readonly query: {
|
|
486
|
+
readonly kind: "object";
|
|
487
|
+
readonly required: false;
|
|
488
|
+
};
|
|
489
|
+
readonly headers: {
|
|
490
|
+
readonly kind: "object";
|
|
491
|
+
readonly required: false;
|
|
492
|
+
};
|
|
493
|
+
readonly body: {
|
|
494
|
+
readonly kind: "object";
|
|
495
|
+
readonly required: false;
|
|
496
|
+
};
|
|
497
|
+
};
|
|
498
|
+
};
|
|
464
499
|
};
|
|
465
500
|
export type IntegrationExecuteOperation = keyof typeof IntegrationExecuteInputRules;
|
|
466
501
|
/** The upper bound of one integer input as a literal type: integrationExecuteInputMaximum('slack.channel.history', 'limit') is 15. */
|
|
@@ -113,6 +113,17 @@ export const IntegrationExecuteInputRules = {
|
|
|
113
113
|
limit: { kind: "integer", required: false, minimum: 1, maximum: 1000, default: 100 },
|
|
114
114
|
},
|
|
115
115
|
},
|
|
116
|
+
"service.request": {
|
|
117
|
+
idempotencyKey: false,
|
|
118
|
+
fields: {
|
|
119
|
+
method: { kind: "enum", required: true, values: ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"] },
|
|
120
|
+
path: { kind: "string", required: true, minLength: 0, maxLength: 16384 },
|
|
121
|
+
pathParams: { kind: "object", required: false },
|
|
122
|
+
query: { kind: "object", required: false },
|
|
123
|
+
headers: { kind: "object", required: false },
|
|
124
|
+
body: { kind: "object", required: false },
|
|
125
|
+
},
|
|
126
|
+
},
|
|
116
127
|
};
|
|
117
128
|
/** The upper bound of one integer input as a literal type: integrationExecuteInputMaximum('slack.channel.history', 'limit') is 15. */
|
|
118
129
|
export function integrationExecuteInputMaximum(operation, field) {
|
|
@@ -173,6 +184,10 @@ function checkFields(operation, prefix, fields, given, nullIsAbsent) {
|
|
|
173
184
|
}
|
|
174
185
|
function checkField(operation, path, name, field, value) {
|
|
175
186
|
switch (field.kind) {
|
|
187
|
+
case 'object':
|
|
188
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
189
|
+
return refuse(path, `${path} must be a JSON object`);
|
|
190
|
+
return { ok: true, value };
|
|
176
191
|
case 'integer':
|
|
177
192
|
if (typeof value !== 'number' || !Number.isInteger(value) || value < field.minimum || value > field.maximum)
|
|
178
193
|
return refuse(path, `${path} must be an integer between ${field.minimum} and ${field.maximum}`);
|
|
@@ -9,11 +9,11 @@ export type IntegrationExecuteRequest = {
|
|
|
9
9
|
/**
|
|
10
10
|
* Closed operation set. Extending it is a contracts change. 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.
|
|
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' | 'warehouse.view.read';
|
|
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' | 'warehouse.view.read' | 'service.request';
|
|
13
13
|
/**
|
|
14
14
|
* Tenant-wide logical alias of a connection (governance sourceId) or of a resource under it.
|
|
15
15
|
*/
|
|
16
|
-
resource
|
|
16
|
+
resource?: string;
|
|
17
17
|
input: {
|
|
18
18
|
/**
|
|
19
19
|
* Read operations: how many items to return; the per-operation then-block sets the real ceiling (100 for slack.channel.history, 50 for gmail.thread.list, 1000 for warehouse.view.read) and the default.
|
|
@@ -127,6 +127,20 @@ export type IntegrationExecuteRequest = {
|
|
|
127
127
|
* @maxItems 8
|
|
128
128
|
*/
|
|
129
129
|
orderBy?: WarehouseOrder[];
|
|
130
|
+
method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
|
|
131
|
+
path?: string;
|
|
132
|
+
pathParams?: {
|
|
133
|
+
[k: string]: unknown;
|
|
134
|
+
};
|
|
135
|
+
query?: {
|
|
136
|
+
[k: string]: unknown;
|
|
137
|
+
};
|
|
138
|
+
headers?: {
|
|
139
|
+
[k: string]: unknown;
|
|
140
|
+
};
|
|
141
|
+
body?: {
|
|
142
|
+
[k: string]: unknown;
|
|
143
|
+
};
|
|
130
144
|
};
|
|
131
145
|
/**
|
|
132
146
|
* UUID of one explicit Send action; required for slack.message.post and gmail.message.send only. The same key with the same payload and subject returns the recorded outcome for seven days.
|
|
@@ -84,4 +84,11 @@ export declare const IntegrationOperations: {
|
|
|
84
84
|
readonly declaredMode: false;
|
|
85
85
|
readonly idempotencyKey: false;
|
|
86
86
|
};
|
|
87
|
+
readonly "service.request": {
|
|
88
|
+
readonly kind: "service";
|
|
89
|
+
readonly identities: readonly ["app"];
|
|
90
|
+
readonly readOnly: false;
|
|
91
|
+
readonly declaredMode: false;
|
|
92
|
+
readonly idempotencyKey: false;
|
|
93
|
+
};
|
|
87
94
|
};
|
|
@@ -113,5 +113,14 @@ export const IntegrationOperations = {
|
|
|
113
113
|
"readOnly": true,
|
|
114
114
|
"declaredMode": false,
|
|
115
115
|
"idempotencyKey": false
|
|
116
|
+
},
|
|
117
|
+
"service.request": {
|
|
118
|
+
"kind": "service",
|
|
119
|
+
"identities": [
|
|
120
|
+
"app"
|
|
121
|
+
],
|
|
122
|
+
"readOnly": false,
|
|
123
|
+
"declaredMode": false,
|
|
124
|
+
"idempotencyKey": false
|
|
116
125
|
}
|
|
117
126
|
};
|
|
@@ -56,7 +56,7 @@ export interface SaasConnection {
|
|
|
56
56
|
* @minItems 1
|
|
57
57
|
* @maxItems 11
|
|
58
58
|
*/
|
|
59
|
-
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' | 'warehouse.view.read')[];
|
|
59
|
+
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' | 'warehouse.view.read' | 'service.request')[];
|
|
60
60
|
developmentPreapproval: DevelopmentPreapproval;
|
|
61
61
|
oauthClient?: SaasOauthClient;
|
|
62
62
|
userModeApproval?: UserModeApproval;
|
|
@@ -1,7 +1,26 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
3
|
|
|
4
|
-
export type
|
|
4
|
+
export type DeclaredConnection = {
|
|
5
|
+
kind: IntegrationConnectionKind;
|
|
6
|
+
presentation?: IntegrationPresentation;
|
|
7
|
+
operations: {
|
|
8
|
+
'slack.channel.history'?: DeclaredModeChannelOperation;
|
|
9
|
+
'slack.message.post'?: DeclaredModeChannelOperation;
|
|
10
|
+
'slack.message.update'?: DeclaredModeChannelOperation;
|
|
11
|
+
'slack.message.delete'?: DeclaredModeChannelOperation;
|
|
12
|
+
'slack.dm.send'?: AppModeChannelOperation;
|
|
13
|
+
'slack.user.lookup'?: AppModeChannelOperation;
|
|
14
|
+
'gmail.thread.list'?: UserModeChannelOperation;
|
|
15
|
+
'gmail.thread.read'?: UserModeChannelOperation;
|
|
16
|
+
'gmail.message.read'?: UserModeChannelOperation;
|
|
17
|
+
'gmail.message.send'?: UserModeChannelOperation;
|
|
18
|
+
'gmail.attachment.read'?: UserModeChannelOperation;
|
|
19
|
+
'warehouse.view.read'?: AppModeViewOperation;
|
|
20
|
+
'service.request'?: ServiceOperation;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export type IntegrationConnectionKind = 'saas' | 'database' | 'service';
|
|
5
24
|
/**
|
|
6
25
|
* Whose authority an operation runs under. Fixed per operation, except the declared-mode Slack operations (slack.message.post; since 0.71.0 also slack.channel.history, slack.message.update, slack.message.delete): declared per app for the access request, and named per call among the app's approved modes (execute request `mode`, 0.55.0).
|
|
7
26
|
*/
|
|
@@ -21,7 +40,7 @@ export type ResourceNames = IntegrationAlias[];
|
|
|
21
40
|
export type ColumnName = string;
|
|
22
41
|
|
|
23
42
|
/**
|
|
24
|
-
* Committed `.isomorph/integrations.json`: the app's declared use of tenant-wide integration connections. Keys are logical connection aliases (the governance sourceId); resources are logical names (Slack channel alias, warehouse view name), never IDs, tokens or URLs. The operation set is closed (
|
|
43
|
+
* Committed `.isomorph/integrations.json`: the app's declared use of tenant-wide integration connections. Keys are logical connection aliases (the governance sourceId); resources are logical names (Slack channel alias, warehouse view name), never IDs, tokens or URLs. The operation set is closed (thirteen operations since 0.73.0, ADR 0018). Each operation carries a fixed identity mode — slack.dm.send=app, slack.user.lookup=app, every gmail.* operation=user, warehouse.view.read=app — except the declared-mode Slack operations (slack.message.post, and since 0.71.0 slack.channel.history, slack.message.update and slack.message.delete), whose mode the app DECLARES: `app` acts as the company's Slack app (the one audited bot identity; a post goes out under the IT-approved per-app display name when the connection declares `presentation`), `user` acts as the signed-in person after their own consent (reads what they can read, edits what they wrote). The declared mode is the one the app requests access for; an app may hold approved grants for both modes after two requests, and each declared-mode call names which approved mode it runs under (`mode` on the execute request, 0.55.0) — a mode IT did not approve is refused, never swapped for the other. A `saas` connection may declare only the Slack and Gmail operations and a `database` connection only warehouse.view.read; `presentation` is a `saas` connection's optional per-app display name and icon for app-mode Slack posts, shown to IT at approval time and applied only from the approved grant. Gmail is user-mode only (reads, one send); its single resource is the fixed `inbox` alias. slack.dm.send and slack.user.lookup address people by email rather than a channel, so their single resource is the fixed `workspace` alias (the connection's installed workspace), the way Gmail's is `inbox`. This file also owns the shared IntegrationOperation / IntegrationIdentityMode / IntegrationEnvironment / IntegrationConnectionKind / IntegrationPresentation definitions referenced by the other integration schemas.
|
|
25
44
|
*/
|
|
26
45
|
export interface AppIntegrationsDeclaration {
|
|
27
46
|
schema: 'isomorph.app-integrations/2.0';
|
|
@@ -29,24 +48,6 @@ export interface AppIntegrationsDeclaration {
|
|
|
29
48
|
[k: string]: DeclaredConnection;
|
|
30
49
|
};
|
|
31
50
|
}
|
|
32
|
-
export interface DeclaredConnection {
|
|
33
|
-
kind: IntegrationConnectionKind;
|
|
34
|
-
presentation?: IntegrationPresentation;
|
|
35
|
-
operations: {
|
|
36
|
-
'slack.channel.history'?: DeclaredModeChannelOperation;
|
|
37
|
-
'slack.message.post'?: DeclaredModeChannelOperation;
|
|
38
|
-
'slack.message.update'?: DeclaredModeChannelOperation;
|
|
39
|
-
'slack.message.delete'?: DeclaredModeChannelOperation;
|
|
40
|
-
'slack.dm.send'?: AppModeChannelOperation;
|
|
41
|
-
'slack.user.lookup'?: AppModeChannelOperation;
|
|
42
|
-
'gmail.thread.list'?: UserModeChannelOperation;
|
|
43
|
-
'gmail.thread.read'?: UserModeChannelOperation;
|
|
44
|
-
'gmail.message.read'?: UserModeChannelOperation;
|
|
45
|
-
'gmail.message.send'?: UserModeChannelOperation;
|
|
46
|
-
'gmail.attachment.read'?: UserModeChannelOperation;
|
|
47
|
-
'warehouse.view.read'?: AppModeViewOperation;
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
51
|
/**
|
|
51
52
|
* saas connections only (Slack): how this app's app-mode posts are presented; meaningless for every other operation.
|
|
52
53
|
*/
|
|
@@ -91,3 +92,11 @@ export interface ViewResource {
|
|
|
91
92
|
*/
|
|
92
93
|
columns: ColumnName[];
|
|
93
94
|
}
|
|
95
|
+
export interface ServiceOperation {
|
|
96
|
+
identity: 'app';
|
|
97
|
+
/**
|
|
98
|
+
* @minItems 1
|
|
99
|
+
* @maxItems 1
|
|
100
|
+
*/
|
|
101
|
+
resources: 'api'[];
|
|
102
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* eslint-disable */
|
|
2
2
|
// Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
|
|
3
3
|
|
|
4
|
-
export const ContractRepositoryVersion = "0.
|
|
5
|
-
export const ContractPublishVersion = "0.
|
|
6
|
-
export const ContractPublishTag = "v0.
|
|
7
|
-
export const ContractSchemasDigest = "sha256:
|
|
4
|
+
export const ContractRepositoryVersion = "0.73.0.0" as const;
|
|
5
|
+
export const ContractPublishVersion = "0.73.0" as const;
|
|
6
|
+
export const ContractPublishTag = "v0.73.0" as const;
|
|
7
|
+
export const ContractSchemasDigest = "sha256:c0f37c59c7c2decb4fb62d96596b787628483bdcdb09756c3ea286385d31a5f5" as const;
|
|
8
8
|
export const ContractAiFixturesDigest = "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6" as const;
|
|
9
|
-
export const ContractGeneratedGoDigest = "sha256:
|
|
10
|
-
export const ContractGeneratedTypeScriptDigest = "sha256:
|
|
9
|
+
export const ContractGeneratedGoDigest = "sha256:eb98ee80133c91e8562b95d92388c5bb637a06ae8d97a0827f528cd6decde8c9" as const;
|
|
10
|
+
export const ContractGeneratedTypeScriptDigest = "sha256:ad539efcc9e4a7521f9526dd6304215f6b764be64bd40cd598ec023f6bbb4583" as const;
|
package/gen-ts/data-grant-v2.ts
CHANGED
|
@@ -30,7 +30,7 @@ export interface DataGrantV2 {
|
|
|
30
30
|
* Whose authority an operation runs under. Fixed per operation, except the declared-mode Slack operations (slack.message.post; since 0.71.0 also slack.channel.history, slack.message.update, slack.message.delete): declared per app for the access request, and named per call among the app's approved modes (execute request `mode`, 0.55.0).
|
|
31
31
|
*/
|
|
32
32
|
mode: 'app' | 'user';
|
|
33
|
-
kind: 'saas' | 'database';
|
|
33
|
+
kind: 'saas' | 'database' | 'service';
|
|
34
34
|
status: DataGrantV2Status;
|
|
35
35
|
/**
|
|
36
36
|
* Approved operations; each must match this grant's mode. Empty until the first approval. At most the eleven SaaS operations (0.71.0); a database grant holds one.
|
|
@@ -50,6 +50,7 @@ export interface DataGrantV2 {
|
|
|
50
50
|
| 'gmail.message.send'
|
|
51
51
|
| 'gmail.attachment.read'
|
|
52
52
|
| 'warehouse.view.read'
|
|
53
|
+
| 'service.request'
|
|
53
54
|
)[];
|
|
54
55
|
/**
|
|
55
56
|
* Approved logical resources. Never inherited by wildcard. Empty until the first approval.
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* same message wherever it is made.
|
|
10
10
|
*/
|
|
11
11
|
export type IntegrationExecuteInputFieldRule =
|
|
12
|
+
| { kind: 'object'; required: boolean }
|
|
12
13
|
| { kind: 'integer'; required: boolean; minimum: number; maximum: number; default?: number }
|
|
13
14
|
| { kind: 'string'; required: boolean; minLength: number; maxLength?: number; pattern?: string }
|
|
14
15
|
| { kind: 'string[]'; required: boolean; minItems: number; maxItems: number; uniqueItems: boolean; item: { minLength: number; maxLength?: number; pattern?: string }; default?: readonly string[] }
|
|
@@ -134,6 +135,17 @@ export const IntegrationExecuteInputRules = {
|
|
|
134
135
|
limit: { kind: "integer", required: false, minimum: 1, maximum: 1000, default: 100 },
|
|
135
136
|
},
|
|
136
137
|
},
|
|
138
|
+
"service.request": {
|
|
139
|
+
idempotencyKey: false,
|
|
140
|
+
fields: {
|
|
141
|
+
method: { kind: "enum", required: true, values: ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"] },
|
|
142
|
+
path: { kind: "string", required: true, minLength: 0, maxLength: 16384 },
|
|
143
|
+
pathParams: { kind: "object", required: false },
|
|
144
|
+
query: { kind: "object", required: false },
|
|
145
|
+
headers: { kind: "object", required: false },
|
|
146
|
+
body: { kind: "object", required: false },
|
|
147
|
+
},
|
|
148
|
+
},
|
|
137
149
|
} as const satisfies Record<string, IntegrationExecuteOperationRule>;
|
|
138
150
|
|
|
139
151
|
export type IntegrationExecuteOperation = keyof typeof IntegrationExecuteInputRules;
|
|
@@ -194,6 +206,9 @@ function checkFields(operation: string, prefix: string, fields: Readonly<Record<
|
|
|
194
206
|
|
|
195
207
|
function checkField(operation: string, path: string, name: string, field: IntegrationExecuteInputFieldRule, value: unknown): { ok: true; value: unknown } | Refusal {
|
|
196
208
|
switch (field.kind) {
|
|
209
|
+
case 'object':
|
|
210
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) return refuse(path, `${path} must be a JSON object`);
|
|
211
|
+
return { ok: true, value };
|
|
197
212
|
case 'integer':
|
|
198
213
|
if (typeof value !== 'number' || !Number.isInteger(value) || value < field.minimum || value > field.maximum) return refuse(path, `${path} must be an integer between ${field.minimum} and ${field.maximum}`);
|
|
199
214
|
return { ok: true, value };
|
|
@@ -24,11 +24,12 @@ export type IntegrationExecuteRequest = {
|
|
|
24
24
|
| 'gmail.message.read'
|
|
25
25
|
| 'gmail.message.send'
|
|
26
26
|
| 'gmail.attachment.read'
|
|
27
|
-
| 'warehouse.view.read'
|
|
27
|
+
| 'warehouse.view.read'
|
|
28
|
+
| 'service.request';
|
|
28
29
|
/**
|
|
29
30
|
* Tenant-wide logical alias of a connection (governance sourceId) or of a resource under it.
|
|
30
31
|
*/
|
|
31
|
-
resource
|
|
32
|
+
resource?: string;
|
|
32
33
|
input: {
|
|
33
34
|
/**
|
|
34
35
|
* Read operations: how many items to return; the per-operation then-block sets the real ceiling (100 for slack.channel.history, 50 for gmail.thread.list, 1000 for warehouse.view.read) and the default.
|
|
@@ -142,6 +143,20 @@ export type IntegrationExecuteRequest = {
|
|
|
142
143
|
* @maxItems 8
|
|
143
144
|
*/
|
|
144
145
|
orderBy?: WarehouseOrder[];
|
|
146
|
+
method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTIONS';
|
|
147
|
+
path?: string;
|
|
148
|
+
pathParams?: {
|
|
149
|
+
[k: string]: unknown;
|
|
150
|
+
};
|
|
151
|
+
query?: {
|
|
152
|
+
[k: string]: unknown;
|
|
153
|
+
};
|
|
154
|
+
headers?: {
|
|
155
|
+
[k: string]: unknown;
|
|
156
|
+
};
|
|
157
|
+
body?: {
|
|
158
|
+
[k: string]: unknown;
|
|
159
|
+
};
|
|
145
160
|
};
|
|
146
161
|
/**
|
|
147
162
|
* UUID of one explicit Send action; required for slack.message.post and gmail.message.send only. The same key with the same payload and subject returns the recorded outcome for seven days.
|
|
@@ -114,5 +114,14 @@ export const IntegrationOperations = {
|
|
|
114
114
|
"readOnly": true,
|
|
115
115
|
"declaredMode": false,
|
|
116
116
|
"idempotencyKey": false
|
|
117
|
+
},
|
|
118
|
+
"service.request": {
|
|
119
|
+
"kind": "service",
|
|
120
|
+
"identities": [
|
|
121
|
+
"app"
|
|
122
|
+
],
|
|
123
|
+
"readOnly": false,
|
|
124
|
+
"declaredMode": false,
|
|
125
|
+
"idempotencyKey": false
|
|
117
126
|
}
|
|
118
127
|
} as const;
|
package/package.json
CHANGED