@fourier-labs/harbour-contracts 0.71.0 → 0.72.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.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "schema": "harbour.contract-release/1.0",
3
- "repositoryVersion": "0.71.0.0",
4
- "publishVersion": "0.71.0",
5
- "publishTag": "v0.71.0",
6
- "schemasDigest": "sha256:25c5de2ee9586c6280dca7c733a7063f46bd5d400112fe60f928cf6db1a627c3",
3
+ "repositoryVersion": "0.72.0.0",
4
+ "publishVersion": "0.72.0",
5
+ "publishTag": "v0.72.0",
6
+ "schemasDigest": "sha256:e06999bb8befb0b4bb6eda19d70f2fc12dab3c3416ecdd6539e770a40828ffff",
7
7
  "aiFixturesDigest": "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6",
8
- "generatedGoDigest": "sha256:09bd95f079e733af9bf594a157d7396a645cc6c9866d48b7aee6b00a9762ac62",
9
- "generatedTypeScriptDigest": "sha256:7fa5c1e4d8fdb68855b5e10208ee6c0a210f3595f7e74174efbf6bfa4c3673ce",
8
+ "generatedGoDigest": "sha256:1f39b6a41438726079b882256a402a17047dc1ee0f9209283723cc0125e88932",
9
+ "generatedTypeScriptDigest": "sha256:67ea1a0023a017eb99a47cd5e7ae2ccdd03d42e1c3ed1b8e9eed69672a7afbda",
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)"
@@ -41,10 +41,10 @@
41
41
  "schema/data-source.schema.json": "sha256:899384f4f11b05d2737766918ab47987b11ed49f1160220a55a367fed96f6f2c",
42
42
  "schema/deploy-request.schema.json": "sha256:32531e21983cdfeec511f8b4cddd4dad6530cd90e4e9fe147225d78d138b6198",
43
43
  "schema/deploy-response.schema.json": "sha256:09064948abdbba7022738285d802ed44648a16ddc2a5b8c2eeb170ae19a66aeb",
44
- "schema/deployment-app-registration.schema.json": "sha256:50bc8e308fca14d014a50d96ef1cf403eeeca5c3caea4a204fe15f0080efed32",
44
+ "schema/deployment-app-registration.schema.json": "sha256:eb705c38466ebd97cb76c1ce7a6177d75c2f10381df75976b40d47eeb8dd5712",
45
45
  "schema/deployment-continuation.schema.json": "sha256:55b6945439f2c91cd851dfe4bc9484e67a64091b7763b2d8267354b4a8bfae8c",
46
46
  "schema/deployment-environment.schema.json": "sha256:35b26cae07da9ee375a842b5e87c4570c8eca06775e9fd6dd46eb9eb8aa0df6c",
47
- "schema/deployment-preview-retirement.schema.json": "sha256:4f945253c3af015f31d6857ec13661f2239e87f2b9dc76cc0a5109d6d40f2a1a",
47
+ "schema/deployment-preview-retirement.schema.json": "sha256:ccf6b971b7853ca98530272f280fe62cd3aab5425b10b81ae6b717cc949e014f",
48
48
  "schema/deployment-source.schema.json": "sha256:256988b1efbfc90bd0e1ae31a2c5d69b20ef1e4471dc24c9f9aa759278270fbe",
49
49
  "schema/deployment-status-failure.schema.json": "sha256:7cc021d53a07c63b66eb48146d33e8875b64faf77ee927b235795469eb9a1559",
50
50
  "schema/deployment-status-request.schema.json": "sha256:1f9f87adc947a252b53b61f71ae17f8c1b8fbc1166f31301a043d11ac257dc66",
@@ -54,7 +54,7 @@
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:2865c54564aa21eaf22f017312f42ef0cf77fc26c223ddd3e9de86062ed37156",
57
+ "schema/integration-execute-request.schema.json": "sha256:2ca56a49ba709c78ca5b84d047c1430a90cf0d7287c4e889d40f34d7a26f3e43",
58
58
  "schema/integration-execute-result.schema.json": "sha256:97f345cfc094a7af1d269486f3b3b90c07d13b70954c2b01dc0313225c9e5bd1",
59
59
  "schema/internal-configuration-request.schema.json": "sha256:229d44a3458f68dceddfba802e5c1adcd95523a45af29b93b972706b88461a7d",
60
60
  "schema/kit-bundle-manifest.schema.json": "sha256:4a9fcdd52ba0d55718ef4dbdab112b145ef90471d9356d4d3fb41e50fe9e400d",
@@ -63,7 +63,7 @@
63
63
  "schema/promotion-request.schema.json": "sha256:00e96dfd8ddbdba88ea222941d43f3609ff6c815a79e34f6705cab458101c969",
64
64
  "schema/promotion-response.schema.json": "sha256:4129712d2e29d6ef21d93d4bd0bacfd60ada3f2ee0ade852824e64346b817634",
65
65
  "schema/resolved-app-serving.schema.json": "sha256:260e30ca16831ddd96b15f44eadc7daa2a5f87a0025588bd6318b236f349ec6b",
66
- "schema/saas-connection.schema.json": "sha256:91ea0e7b1bf503962fba7aea4672bcaba5be70c2a91f4f5fbafe9e93460d5002",
66
+ "schema/saas-connection.schema.json": "sha256:6720b906b89293eebd8c5a6cb8ac6bc14dfca9b13d822e3026641f935b637892",
67
67
  "schema/sanitized-binding-evidence.schema.json": "sha256:1191ab88e2764df927e5f17837674cebebe068d480da2b2fdb390e589f96b51f",
68
68
  "schema/secret-reference.schema.json": "sha256:db4e3c2c6a2dbd72d7ea0f9c91cb3b2343a7e67b601996c6818b2ef08e440895",
69
69
  "schema/security-scan-input-v2.schema.json": "sha256:0d418342078c9b5046ea6f4bef3c2c57539285dfee99cc0850d4f0d03739ee13",
@@ -111,8 +111,9 @@
111
111
  "gen-go/error_category.go": "sha256:b2ddea22dcfa030f1a45e721e635485b0bd816cf1f38e7654628a653f5ed4583",
112
112
  "gen-go/integration_execute_input_rules.go": "sha256:0293686700684419c8aae3d78c85b27825b9fc3429b013c5a84a6378c4e3f778",
113
113
  "gen-go/integration_execute_input_rules_test.go": "sha256:9d81e4aac0c3d7f35ea98a40c6d8851570f715ddc95d1ae7324cdc095de4a72e",
114
+ "gen-go/integration_operations.go": "sha256:ae055414ff7c2c41cd7aaa173ff37376bf3fbd748babac95fee3fcf20d18b353",
114
115
  "gen-go/schema_documents.go": "sha256:c19c0d540f602ee997a84b90e20702d9bc63ed7d27aec267e76c04655fc182e0",
115
- "gen-go/types.go": "sha256:4a301cf02eb10f4f666e4358b0c7054aed742ec924a1e4f9420c58ff7b8f0c88",
116
+ "gen-go/types.go": "sha256:115f327d0e6551a8c514aefbecac126948a4846520dcffb6bfb08cb9cbec200f",
116
117
  "gen-go/version_state.go": "sha256:4ef8abb126414c0025cf2c59bc9c79a74ef4a2ff89e8f316cbf05acc872371c1"
117
118
  },
118
119
  "generatedTypeScript": {
@@ -148,10 +149,10 @@
148
149
  "gen-ts/data-source.ts": "sha256:1a40c252e94ee717d287ba63647e4368668dad9ea731770f8b58deb17d18b311",
149
150
  "gen-ts/deploy-request.ts": "sha256:0214faa8be6680f0bfc117d5ce67c1a59fcc18bd0ea4bc840e03e7d051fa9ab6",
150
151
  "gen-ts/deploy-response.ts": "sha256:364d9f1acf32e491498237cdd3f402d5f8e102f208db7748034f4ec68c6a6137",
151
- "gen-ts/deployment-app-registration.ts": "sha256:07f840a82dddd770e54e1020a034cdbfc84e226a94131e3f5a4cdd5da8acc2f0",
152
+ "gen-ts/deployment-app-registration.ts": "sha256:642db3a3f796e5d7089cdb834991277ab1aac5bff37cd5cab42aa2f1c116f0be",
152
153
  "gen-ts/deployment-continuation.ts": "sha256:cc9f63af4d0da5086a79103789e4f043783b75b4ed11c6512f044439a551a79c",
153
154
  "gen-ts/deployment-environment.ts": "sha256:fc08cabe2e52ebb93cfe84d2019994260f71734c33d0e50e7c63e40ef5b17cef",
154
- "gen-ts/deployment-preview-retirement.ts": "sha256:0b30339d6f1d14a9d4a14fa4b59c4c476a5d8aa534be71f7d750c677bb9a2d44",
155
+ "gen-ts/deployment-preview-retirement.ts": "sha256:309421d08daf0ade163b6457ed0e5410ec6573c40a59423a6cce14780d9c38db",
155
156
  "gen-ts/deployment-source.ts": "sha256:8ccb55aaa7260eb6d19a00987d6a20a4b514e343564da13f27cd7fee8013500a",
156
157
  "gen-ts/deployment-status-failure.ts": "sha256:6da2e6eb2f708efa51d416a1ec50f71ea7967cf9be9f93e7ce2e4760dae2cfe3",
157
158
  "gen-ts/deployment-status-request.ts": "sha256:7ddccd07ab9f6d0821903a291ab35f903bb055727e03a058b99165ec048f6483",
@@ -160,12 +161,13 @@
160
161
  "gen-ts/error-category-registry.ts": "sha256:7466a502c0723a77db825cdeaa9556a244201b55d9b7acbf2c098e9e84351df1",
161
162
  "gen-ts/error-category.ts": "sha256:9bda89180c3b740c9aa8be466216592e8ca9d0d368c274333edf6ea5c45afd8e",
162
163
  "gen-ts/error-envelope.ts": "sha256:4457309be794f9d4fc0cf62530cc2d442c007bac9ae84aff66df099cc9e40310",
163
- "gen-ts/index.ts": "sha256:8459b1cf136a0c822795154e2df2a28c848cddfadced329604be893ae6eef069",
164
+ "gen-ts/index.ts": "sha256:57927b9fcddf506785671bbd44cced9f729373e4dd3e3480bc6c37fd05fb59e8",
164
165
  "gen-ts/integration-connect-result.ts": "sha256:4b10f169b6e1af364e9b418de21caa9fadbfb77b43cbff77d741cfae0b52180c",
165
166
  "gen-ts/integration-error-details.ts": "sha256:ad7ecec9dd4533a6e86b3508886a7d69937052f52105497285797f77106bcc6f",
166
167
  "gen-ts/integration-execute-input-rules.ts": "sha256:3304b0fd14df331a164a035410de9b10885be6585077add4720da39b5d16d527",
167
168
  "gen-ts/integration-execute-request.ts": "sha256:92ee799c42e5434229cb72198382352dabc469a2be551ef5c1926ed5ada45619",
168
169
  "gen-ts/integration-execute-result.ts": "sha256:d72ca736d06741552e6a7be6c98fe1ae506ddaa1e58938b785303fdc3e1784ac",
170
+ "gen-ts/integration-operations.ts": "sha256:dcb61abfe380637f7537b4d3b8a399fd869e93485b7b3091be2434191a2c82a0",
169
171
  "gen-ts/internal-configuration-request.ts": "sha256:7032437797473fa1c581d134adef2f3d4b4f4132f482cd17743e9d47097886bc",
170
172
  "gen-ts/kit-bundle-manifest.ts": "sha256:2777a268aef8787b81e71d154a7d05f6f5ded09d66f378211ff5493ddb885171",
171
173
  "gen-ts/kit-lock.ts": "sha256:00ceeb97e9b7d0187bec00728f5099fd34e775e9cc44c85c4714f7a3a4118ef6",
@@ -173,7 +175,7 @@
173
175
  "gen-ts/promotion-request.ts": "sha256:9db88cef67f777a16bac628039ec3f582acb9e8cfff6fb592b30d0a0e55abc68",
174
176
  "gen-ts/promotion-response.ts": "sha256:f1c9cafac96faeb02a443a31786f67714e818f38d90108e7af41958396524d6f",
175
177
  "gen-ts/resolved-app-serving.ts": "sha256:6131a6cc5f784f0d101081d2ce1b96b76b2f904b2c5e7b2809f9ede5878ada1f",
176
- "gen-ts/saas-connection.ts": "sha256:b1ad7d3694806b429f10daf7440d0dbdfbb78d4022044da2324189ca59b1f737",
178
+ "gen-ts/saas-connection.ts": "sha256:f169d1bf454ad926bb15dfbc3f6b8dd7e8a3ed6bce77ce244a2069e5667de935",
177
179
  "gen-ts/sanitized-binding-digest-helper.ts": "sha256:c47d7fdc20500e2e72c23fe39ecdd610fc397c47fcba51335ebec3c380fe6872",
178
180
  "gen-ts/sanitized-binding-evidence.ts": "sha256:f3fb7b1d7d2e0929eb0ea981eaf32db3104010647185f6ae59f67167d42538a9",
179
181
  "gen-ts/secret-reference.ts": "sha256:731fbcde7315cb4128d5b01bdbe6e6f248f13c7ad8dea04a3a4e927ac4890198",
@@ -1,7 +1,7 @@
1
- export declare const ContractRepositoryVersion: "0.71.0.0";
2
- export declare const ContractPublishVersion: "0.71.0";
3
- export declare const ContractPublishTag: "v0.71.0";
4
- export declare const ContractSchemasDigest: "sha256:25c5de2ee9586c6280dca7c733a7063f46bd5d400112fe60f928cf6db1a627c3";
1
+ export declare const ContractRepositoryVersion: "0.72.0.0";
2
+ export declare const ContractPublishVersion: "0.72.0";
3
+ export declare const ContractPublishTag: "v0.72.0";
4
+ export declare const ContractSchemasDigest: "sha256:e06999bb8befb0b4bb6eda19d70f2fc12dab3c3416ecdd6539e770a40828ffff";
5
5
  export declare const ContractAiFixturesDigest: "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6";
6
- export declare const ContractGeneratedGoDigest: "sha256:09bd95f079e733af9bf594a157d7396a645cc6c9866d48b7aee6b00a9762ac62";
7
- export declare const ContractGeneratedTypeScriptDigest: "sha256:7fa5c1e4d8fdb68855b5e10208ee6c0a210f3595f7e74174efbf6bfa4c3673ce";
6
+ export declare const ContractGeneratedGoDigest: "sha256:1f39b6a41438726079b882256a402a17047dc1ee0f9209283723cc0125e88932";
7
+ export declare const ContractGeneratedTypeScriptDigest: "sha256:67ea1a0023a017eb99a47cd5e7ae2ccdd03d42e1c3ed1b8e9eed69672a7afbda";
@@ -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.71.0.0";
4
- export const ContractPublishVersion = "0.71.0";
5
- export const ContractPublishTag = "v0.71.0";
6
- export const ContractSchemasDigest = "sha256:25c5de2ee9586c6280dca7c733a7063f46bd5d400112fe60f928cf6db1a627c3";
3
+ export const ContractRepositoryVersion = "0.72.0.0";
4
+ export const ContractPublishVersion = "0.72.0";
5
+ export const ContractPublishTag = "v0.72.0";
6
+ export const ContractSchemasDigest = "sha256:e06999bb8befb0b4bb6eda19d70f2fc12dab3c3416ecdd6539e770a40828ffff";
7
7
  export const ContractAiFixturesDigest = "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6";
8
- export const ContractGeneratedGoDigest = "sha256:09bd95f079e733af9bf594a157d7396a645cc6c9866d48b7aee6b00a9762ac62";
9
- export const ContractGeneratedTypeScriptDigest = "sha256:7fa5c1e4d8fdb68855b5e10208ee6c0a210f3595f7e74174efbf6bfa4c3673ce";
8
+ export const ContractGeneratedGoDigest = "sha256:1f39b6a41438726079b882256a402a17047dc1ee0f9209283723cc0125e88932";
9
+ export const ContractGeneratedTypeScriptDigest = "sha256:67ea1a0023a017eb99a47cd5e7ae2ccdd03d42e1c3ed1b8e9eed69672a7afbda";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * IAM/SigV4 POST /v1/deployment/apps/register body. Governance derives tenant identity-provider configuration; no identity secrets are supplied. apiHostnames explicitly identifies API hosts among backendHostnames; runtime validates that subset. Omission preserves legacy .api. inference during the coordinated V2 auth migration.
2
+ * IAM/SigV4 POST /v1/internal/deployment/apps/{appId}/register (Internal API) or POST /v1/deployment/apps/register body. Governance derives tenant identity-provider configuration; no identity secrets are supplied. apiHostnames explicitly identifies API hosts among backendHostnames; runtime validates that subset. Omission preserves legacy .api. inference during the coordinated V2 auth migration.
3
3
  */
4
4
  export interface DeploymentAppRegistration {
5
5
  tenantId: string;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * IAM-protected POST /v1/deployment/apps/retire-preview request after production is LIVE and the deployment plane holds the preview retirement reservation. Disables only the registered preview version's serving routes and workload authority.
2
+ * IAM-protected POST /v1/internal/deployment/apps/{appId}/retire-preview (Internal API) or POST /v1/deployment/apps/retire-preview request after production is LIVE and the deployment plane holds the preview retirement reservation. Disables only the registered preview version's serving routes and workload authority.
3
3
  */
4
4
  export interface DeploymentPreviewRetirement {
5
5
  tenantId: string;
@@ -48,6 +48,7 @@ export * from './integration-error-details.js';
48
48
  export * from './integration-execute-input-rules.js';
49
49
  export * from './integration-execute-request.js';
50
50
  export * from './integration-execute-result.js';
51
+ export * from './integration-operations.js';
51
52
  export * from './internal-configuration-request.js';
52
53
  export * from './kit-bundle-manifest.js';
53
54
  export * from './kit-lock.js';
@@ -50,6 +50,7 @@ export * from './integration-error-details.js';
50
50
  export * from './integration-execute-input-rules.js';
51
51
  export * from './integration-execute-request.js';
52
52
  export * from './integration-execute-result.js';
53
+ export * from './integration-operations.js';
53
54
  export * from './internal-configuration-request.js';
54
55
  export * from './kit-bundle-manifest.js';
55
56
  export * from './kit-lock.js';
@@ -0,0 +1,87 @@
1
+ /** Declaration and execute metadata from the contract schemas. */
2
+ export declare const IntegrationOperations: {
3
+ readonly "slack.channel.history": {
4
+ readonly kind: "saas";
5
+ readonly identities: readonly ["user", "app"];
6
+ readonly readOnly: true;
7
+ readonly declaredMode: true;
8
+ readonly idempotencyKey: false;
9
+ };
10
+ readonly "slack.message.post": {
11
+ readonly kind: "saas";
12
+ readonly identities: readonly ["app", "user"];
13
+ readonly readOnly: false;
14
+ readonly declaredMode: true;
15
+ readonly idempotencyKey: true;
16
+ };
17
+ readonly "slack.message.update": {
18
+ readonly kind: "saas";
19
+ readonly identities: readonly ["app", "user"];
20
+ readonly readOnly: false;
21
+ readonly declaredMode: true;
22
+ readonly idempotencyKey: false;
23
+ };
24
+ readonly "slack.message.delete": {
25
+ readonly kind: "saas";
26
+ readonly identities: readonly ["app", "user"];
27
+ readonly readOnly: false;
28
+ readonly declaredMode: true;
29
+ readonly idempotencyKey: false;
30
+ };
31
+ readonly "slack.dm.send": {
32
+ readonly kind: "saas";
33
+ readonly identities: readonly ["app"];
34
+ readonly readOnly: false;
35
+ readonly declaredMode: false;
36
+ readonly idempotencyKey: true;
37
+ };
38
+ readonly "slack.user.lookup": {
39
+ readonly kind: "saas";
40
+ readonly identities: readonly ["app"];
41
+ readonly readOnly: true;
42
+ readonly declaredMode: false;
43
+ readonly idempotencyKey: false;
44
+ };
45
+ readonly "gmail.thread.list": {
46
+ readonly kind: "saas";
47
+ readonly identities: readonly ["user"];
48
+ readonly readOnly: true;
49
+ readonly declaredMode: false;
50
+ readonly idempotencyKey: false;
51
+ };
52
+ readonly "gmail.thread.read": {
53
+ readonly kind: "saas";
54
+ readonly identities: readonly ["user"];
55
+ readonly readOnly: true;
56
+ readonly declaredMode: false;
57
+ readonly idempotencyKey: false;
58
+ };
59
+ readonly "gmail.message.read": {
60
+ readonly kind: "saas";
61
+ readonly identities: readonly ["user"];
62
+ readonly readOnly: true;
63
+ readonly declaredMode: false;
64
+ readonly idempotencyKey: false;
65
+ };
66
+ readonly "gmail.message.send": {
67
+ readonly kind: "saas";
68
+ readonly identities: readonly ["user"];
69
+ readonly readOnly: false;
70
+ readonly declaredMode: false;
71
+ readonly idempotencyKey: true;
72
+ };
73
+ readonly "gmail.attachment.read": {
74
+ readonly kind: "saas";
75
+ readonly identities: readonly ["user"];
76
+ readonly readOnly: true;
77
+ readonly declaredMode: false;
78
+ readonly idempotencyKey: false;
79
+ };
80
+ readonly "warehouse.view.read": {
81
+ readonly kind: "database";
82
+ readonly identities: readonly ["app"];
83
+ readonly readOnly: true;
84
+ readonly declaredMode: false;
85
+ readonly idempotencyKey: false;
86
+ };
87
+ };
@@ -0,0 +1,117 @@
1
+ /* eslint-disable */
2
+ // Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
3
+ /** Declaration and execute metadata from the contract schemas. */
4
+ export const IntegrationOperations = {
5
+ "slack.channel.history": {
6
+ "kind": "saas",
7
+ "identities": [
8
+ "user",
9
+ "app"
10
+ ],
11
+ "readOnly": true,
12
+ "declaredMode": true,
13
+ "idempotencyKey": false
14
+ },
15
+ "slack.message.post": {
16
+ "kind": "saas",
17
+ "identities": [
18
+ "app",
19
+ "user"
20
+ ],
21
+ "readOnly": false,
22
+ "declaredMode": true,
23
+ "idempotencyKey": true
24
+ },
25
+ "slack.message.update": {
26
+ "kind": "saas",
27
+ "identities": [
28
+ "app",
29
+ "user"
30
+ ],
31
+ "readOnly": false,
32
+ "declaredMode": true,
33
+ "idempotencyKey": false
34
+ },
35
+ "slack.message.delete": {
36
+ "kind": "saas",
37
+ "identities": [
38
+ "app",
39
+ "user"
40
+ ],
41
+ "readOnly": false,
42
+ "declaredMode": true,
43
+ "idempotencyKey": false
44
+ },
45
+ "slack.dm.send": {
46
+ "kind": "saas",
47
+ "identities": [
48
+ "app"
49
+ ],
50
+ "readOnly": false,
51
+ "declaredMode": false,
52
+ "idempotencyKey": true
53
+ },
54
+ "slack.user.lookup": {
55
+ "kind": "saas",
56
+ "identities": [
57
+ "app"
58
+ ],
59
+ "readOnly": true,
60
+ "declaredMode": false,
61
+ "idempotencyKey": false
62
+ },
63
+ "gmail.thread.list": {
64
+ "kind": "saas",
65
+ "identities": [
66
+ "user"
67
+ ],
68
+ "readOnly": true,
69
+ "declaredMode": false,
70
+ "idempotencyKey": false
71
+ },
72
+ "gmail.thread.read": {
73
+ "kind": "saas",
74
+ "identities": [
75
+ "user"
76
+ ],
77
+ "readOnly": true,
78
+ "declaredMode": false,
79
+ "idempotencyKey": false
80
+ },
81
+ "gmail.message.read": {
82
+ "kind": "saas",
83
+ "identities": [
84
+ "user"
85
+ ],
86
+ "readOnly": true,
87
+ "declaredMode": false,
88
+ "idempotencyKey": false
89
+ },
90
+ "gmail.message.send": {
91
+ "kind": "saas",
92
+ "identities": [
93
+ "user"
94
+ ],
95
+ "readOnly": false,
96
+ "declaredMode": false,
97
+ "idempotencyKey": true
98
+ },
99
+ "gmail.attachment.read": {
100
+ "kind": "saas",
101
+ "identities": [
102
+ "user"
103
+ ],
104
+ "readOnly": true,
105
+ "declaredMode": false,
106
+ "idempotencyKey": false
107
+ },
108
+ "warehouse.view.read": {
109
+ "kind": "database",
110
+ "identities": [
111
+ "app"
112
+ ],
113
+ "readOnly": true,
114
+ "declaredMode": false,
115
+ "idempotencyKey": false
116
+ }
117
+ };
@@ -16,7 +16,7 @@ export type UserModeApproval = 'automatic' | 'it';
16
16
  */
17
17
  export type DirectMessageAudience = 'signed_in_person' | 'channel_members' | 'anyone';
18
18
  /**
19
- * block — every recipient must be internal (the default when absent); allowlist — internal or in `allowedDomains`; allow — any address.
19
+ * block — every recipient must be internal (what a new Gmail connection is given; a connection stored without a policy reads as allow); allowlist — internal or in `allowedDomains`; allow — any address.
20
20
  */
21
21
  export type ExternalRecipientMode = 'block' | 'allowlist' | 'allow';
22
22
  /**
@@ -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.71.0.0" as const;
5
- export const ContractPublishVersion = "0.71.0" as const;
6
- export const ContractPublishTag = "v0.71.0" as const;
7
- export const ContractSchemasDigest = "sha256:25c5de2ee9586c6280dca7c733a7063f46bd5d400112fe60f928cf6db1a627c3" as const;
4
+ export const ContractRepositoryVersion = "0.72.0.0" as const;
5
+ export const ContractPublishVersion = "0.72.0" as const;
6
+ export const ContractPublishTag = "v0.72.0" as const;
7
+ export const ContractSchemasDigest = "sha256:e06999bb8befb0b4bb6eda19d70f2fc12dab3c3416ecdd6539e770a40828ffff" as const;
8
8
  export const ContractAiFixturesDigest = "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6" as const;
9
- export const ContractGeneratedGoDigest = "sha256:09bd95f079e733af9bf594a157d7396a645cc6c9866d48b7aee6b00a9762ac62" as const;
10
- export const ContractGeneratedTypeScriptDigest = "sha256:7fa5c1e4d8fdb68855b5e10208ee6c0a210f3595f7e74174efbf6bfa4c3673ce" as const;
9
+ export const ContractGeneratedGoDigest = "sha256:1f39b6a41438726079b882256a402a17047dc1ee0f9209283723cc0125e88932" as const;
10
+ export const ContractGeneratedTypeScriptDigest = "sha256:67ea1a0023a017eb99a47cd5e7ae2ccdd03d42e1c3ed1b8e9eed69672a7afbda" as const;
@@ -2,7 +2,7 @@
2
2
  // Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
3
3
 
4
4
  /**
5
- * IAM/SigV4 POST /v1/deployment/apps/register body. Governance derives tenant identity-provider configuration; no identity secrets are supplied. apiHostnames explicitly identifies API hosts among backendHostnames; runtime validates that subset. Omission preserves legacy .api. inference during the coordinated V2 auth migration.
5
+ * IAM/SigV4 POST /v1/internal/deployment/apps/{appId}/register (Internal API) or POST /v1/deployment/apps/register body. Governance derives tenant identity-provider configuration; no identity secrets are supplied. apiHostnames explicitly identifies API hosts among backendHostnames; runtime validates that subset. Omission preserves legacy .api. inference during the coordinated V2 auth migration.
6
6
  */
7
7
  export interface DeploymentAppRegistration {
8
8
  tenantId: string;
@@ -2,7 +2,7 @@
2
2
  // Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
3
3
 
4
4
  /**
5
- * IAM-protected POST /v1/deployment/apps/retire-preview request after production is LIVE and the deployment plane holds the preview retirement reservation. Disables only the registered preview version's serving routes and workload authority.
5
+ * IAM-protected POST /v1/internal/deployment/apps/{appId}/retire-preview (Internal API) or POST /v1/deployment/apps/retire-preview request after production is LIVE and the deployment plane holds the preview retirement reservation. Disables only the registered preview version's serving routes and workload authority.
6
6
  */
7
7
  export interface DeploymentPreviewRetirement {
8
8
  tenantId: string;
package/gen-ts/index.ts CHANGED
@@ -51,6 +51,7 @@ export * from './integration-error-details.js';
51
51
  export * from './integration-execute-input-rules.js';
52
52
  export * from './integration-execute-request.js';
53
53
  export * from './integration-execute-result.js';
54
+ export * from './integration-operations.js';
54
55
  export * from './internal-configuration-request.js';
55
56
  export * from './kit-bundle-manifest.js';
56
57
  export * from './kit-lock.js';
@@ -0,0 +1,118 @@
1
+ /* eslint-disable */
2
+ // Code generated by tools/gen/gen.mjs from schema/*.json. DO NOT EDIT.
3
+
4
+ /** Declaration and execute metadata from the contract schemas. */
5
+ export const IntegrationOperations = {
6
+ "slack.channel.history": {
7
+ "kind": "saas",
8
+ "identities": [
9
+ "user",
10
+ "app"
11
+ ],
12
+ "readOnly": true,
13
+ "declaredMode": true,
14
+ "idempotencyKey": false
15
+ },
16
+ "slack.message.post": {
17
+ "kind": "saas",
18
+ "identities": [
19
+ "app",
20
+ "user"
21
+ ],
22
+ "readOnly": false,
23
+ "declaredMode": true,
24
+ "idempotencyKey": true
25
+ },
26
+ "slack.message.update": {
27
+ "kind": "saas",
28
+ "identities": [
29
+ "app",
30
+ "user"
31
+ ],
32
+ "readOnly": false,
33
+ "declaredMode": true,
34
+ "idempotencyKey": false
35
+ },
36
+ "slack.message.delete": {
37
+ "kind": "saas",
38
+ "identities": [
39
+ "app",
40
+ "user"
41
+ ],
42
+ "readOnly": false,
43
+ "declaredMode": true,
44
+ "idempotencyKey": false
45
+ },
46
+ "slack.dm.send": {
47
+ "kind": "saas",
48
+ "identities": [
49
+ "app"
50
+ ],
51
+ "readOnly": false,
52
+ "declaredMode": false,
53
+ "idempotencyKey": true
54
+ },
55
+ "slack.user.lookup": {
56
+ "kind": "saas",
57
+ "identities": [
58
+ "app"
59
+ ],
60
+ "readOnly": true,
61
+ "declaredMode": false,
62
+ "idempotencyKey": false
63
+ },
64
+ "gmail.thread.list": {
65
+ "kind": "saas",
66
+ "identities": [
67
+ "user"
68
+ ],
69
+ "readOnly": true,
70
+ "declaredMode": false,
71
+ "idempotencyKey": false
72
+ },
73
+ "gmail.thread.read": {
74
+ "kind": "saas",
75
+ "identities": [
76
+ "user"
77
+ ],
78
+ "readOnly": true,
79
+ "declaredMode": false,
80
+ "idempotencyKey": false
81
+ },
82
+ "gmail.message.read": {
83
+ "kind": "saas",
84
+ "identities": [
85
+ "user"
86
+ ],
87
+ "readOnly": true,
88
+ "declaredMode": false,
89
+ "idempotencyKey": false
90
+ },
91
+ "gmail.message.send": {
92
+ "kind": "saas",
93
+ "identities": [
94
+ "user"
95
+ ],
96
+ "readOnly": false,
97
+ "declaredMode": false,
98
+ "idempotencyKey": true
99
+ },
100
+ "gmail.attachment.read": {
101
+ "kind": "saas",
102
+ "identities": [
103
+ "user"
104
+ ],
105
+ "readOnly": true,
106
+ "declaredMode": false,
107
+ "idempotencyKey": false
108
+ },
109
+ "warehouse.view.read": {
110
+ "kind": "database",
111
+ "identities": [
112
+ "app"
113
+ ],
114
+ "readOnly": true,
115
+ "declaredMode": false,
116
+ "idempotencyKey": false
117
+ }
118
+ } as const;
@@ -19,7 +19,7 @@ export type UserModeApproval = 'automatic' | 'it';
19
19
  */
20
20
  export type DirectMessageAudience = 'signed_in_person' | 'channel_members' | 'anyone';
21
21
  /**
22
- * block — every recipient must be internal (the default when absent); allowlist — internal or in `allowedDomains`; allow — any address.
22
+ * block — every recipient must be internal (what a new Gmail connection is given; a connection stored without a policy reads as allow); allowlist — internal or in `allowedDomains`; allow — any address.
23
23
  */
24
24
  export type ExternalRecipientMode = 'block' | 'allowlist' | 'allow';
25
25
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fourier-labs/harbour-contracts",
3
- "version": "0.71.0",
3
+ "version": "0.72.0",
4
4
  "description": "Single source of truth for every data shape that crosses a boundary between Isomorph components.",
5
5
  "license": "UNLICENSED",
6
6
  "private": false,
@@ -2,7 +2,7 @@
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://contracts.harbour.dev/deployment-app-registration.schema.json",
4
4
  "title": "DeploymentAppRegistration",
5
- "description": "IAM/SigV4 POST /v1/deployment/apps/register body. Governance derives tenant identity-provider configuration; no identity secrets are supplied. apiHostnames explicitly identifies API hosts among backendHostnames; runtime validates that subset. Omission preserves legacy .api. inference during the coordinated V2 auth migration.",
5
+ "description": "IAM/SigV4 POST /v1/internal/deployment/apps/{appId}/register (Internal API) or POST /v1/deployment/apps/register body. Governance derives tenant identity-provider configuration; no identity secrets are supplied. apiHostnames explicitly identifies API hosts among backendHostnames; runtime validates that subset. Omission preserves legacy .api. inference during the coordinated V2 auth migration.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "required": ["tenantId", "appId", "origin"],
@@ -2,7 +2,7 @@
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://contracts.harbour.dev/deployment-preview-retirement.schema.json",
4
4
  "title": "DeploymentPreviewRetirement",
5
- "description": "IAM-protected POST /v1/deployment/apps/retire-preview request after production is LIVE and the deployment plane holds the preview retirement reservation. Disables only the registered preview version's serving routes and workload authority.",
5
+ "description": "IAM-protected POST /v1/internal/deployment/apps/{appId}/retire-preview (Internal API) or POST /v1/deployment/apps/retire-preview request after production is LIVE and the deployment plane holds the preview retirement reservation. Disables only the registered preview version's serving routes and workload authority.",
6
6
  "type": "object",
7
7
  "additionalProperties": false,
8
8
  "required": ["tenantId", "appId", "previewVersionId"],
@@ -92,6 +92,8 @@
92
92
  {
93
93
  "if": { "properties": { "operation": { "const": "slack.channel.history" } } },
94
94
  "then": {
95
+ "x-read-only": true,
96
+ "x-primary-identity": "user",
95
97
  "not": { "required": ["idempotencyKey"] },
96
98
  "properties": {
97
99
  "input": { "propertyNames": { "enum": ["limit", "cursor", "oldest", "latest"] }, "properties": { "limit": { "maximum": 100, "default": 15 } } }
@@ -101,6 +103,7 @@
101
103
  {
102
104
  "if": { "properties": { "operation": { "const": "slack.message.post" } } },
103
105
  "then": {
106
+ "x-read-only": false,
104
107
  "required": ["idempotencyKey"],
105
108
  "properties": {
106
109
  "input": { "propertyNames": { "enum": ["text", "threadId", "format"] }, "required": ["text"] }
@@ -110,6 +113,7 @@
110
113
  {
111
114
  "if": { "properties": { "operation": { "const": "slack.message.update" } } },
112
115
  "then": {
116
+ "x-read-only": false,
113
117
  "not": { "required": ["idempotencyKey"] },
114
118
  "properties": {
115
119
  "input": { "propertyNames": { "enum": ["messageId", "text", "format"] }, "required": ["messageId", "text"] }
@@ -119,6 +123,7 @@
119
123
  {
120
124
  "if": { "properties": { "operation": { "const": "slack.message.delete" } } },
121
125
  "then": {
126
+ "x-read-only": false,
122
127
  "not": { "required": ["idempotencyKey"] },
123
128
  "properties": {
124
129
  "input": { "propertyNames": { "enum": ["messageId"] }, "required": ["messageId"] }
@@ -128,6 +133,7 @@
128
133
  {
129
134
  "if": { "properties": { "operation": { "const": "slack.dm.send" } } },
130
135
  "then": {
136
+ "x-read-only": false,
131
137
  "required": ["idempotencyKey"],
132
138
  "properties": {
133
139
  "mode": false,
@@ -138,6 +144,7 @@
138
144
  {
139
145
  "if": { "properties": { "operation": { "const": "slack.user.lookup" } } },
140
146
  "then": {
147
+ "x-read-only": true,
141
148
  "not": { "required": ["idempotencyKey"] },
142
149
  "properties": {
143
150
  "mode": false,
@@ -148,6 +155,7 @@
148
155
  {
149
156
  "if": { "properties": { "operation": { "const": "warehouse.view.read" } } },
150
157
  "then": {
158
+ "x-read-only": true,
151
159
  "not": { "required": ["idempotencyKey"] },
152
160
  "properties": {
153
161
  "mode": false,
@@ -158,6 +166,7 @@
158
166
  {
159
167
  "if": { "properties": { "operation": { "const": "gmail.thread.list" } } },
160
168
  "then": {
169
+ "x-read-only": true,
161
170
  "not": { "required": ["idempotencyKey"] },
162
171
  "properties": {
163
172
  "mode": false,
@@ -168,6 +177,7 @@
168
177
  {
169
178
  "if": { "properties": { "operation": { "const": "gmail.thread.read" } } },
170
179
  "then": {
180
+ "x-read-only": true,
171
181
  "not": { "required": ["idempotencyKey"] },
172
182
  "properties": {
173
183
  "mode": false,
@@ -178,6 +188,7 @@
178
188
  {
179
189
  "if": { "properties": { "operation": { "const": "gmail.message.read" } } },
180
190
  "then": {
191
+ "x-read-only": true,
181
192
  "not": { "required": ["idempotencyKey"] },
182
193
  "properties": {
183
194
  "mode": false,
@@ -188,6 +199,7 @@
188
199
  {
189
200
  "if": { "properties": { "operation": { "const": "gmail.attachment.read" } } },
190
201
  "then": {
202
+ "x-read-only": true,
191
203
  "not": { "required": ["idempotencyKey"] },
192
204
  "properties": {
193
205
  "mode": false,
@@ -198,6 +210,7 @@
198
210
  {
199
211
  "if": { "properties": { "operation": { "const": "gmail.message.send" } } },
200
212
  "then": {
213
+ "x-read-only": false,
201
214
  "required": ["idempotencyKey"],
202
215
  "properties": {
203
216
  "mode": false,
@@ -138,7 +138,7 @@
138
138
  "ExternalRecipientMode": {
139
139
  "type": "string",
140
140
  "enum": ["block", "allowlist", "allow"],
141
- "description": "block — every recipient must be internal (the default when absent); allowlist — internal or in `allowedDomains`; allow — any address."
141
+ "description": "block — every recipient must be internal (what a new Gmail connection is given; a connection stored without a policy reads as allow); allowlist — internal or in `allowedDomains`; allow — any address."
142
142
  },
143
143
  "SaasConnectionStatus": {
144
144
  "type": "string",