@fourier-labs/harbour-contracts 0.79.0 → 0.80.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 +1 -1
- package/contract-release.json +9 -9
- package/dist/gen-ts/contract-release.d.ts +6 -6
- package/dist/gen-ts/contract-release.js +6 -6
- package/dist/gen-ts/saas-connection.d.ts +6 -0
- package/gen-ts/contract-release.ts +6 -6
- package/gen-ts/saas-connection.ts +6 -0
- package/package.json +1 -1
- package/schema/saas-connection.schema.json +8 -0
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ exist here first.
|
|
|
40
40
|
| `ai-pricing-revision`, `ai-metering-policy`, `ai-budget-ledger-event`, `ai-trace-event-v2` | Additive metering v2 records, including media dimensions and P5 trace attribution; v1 records remain readable | AI governance §9 |
|
|
41
41
|
| `app-integrations-declaration.schema.json` | Committed `.isomorph/integrations.json` (`isomorph.app-integrations/2.0`): closed thirty-three-operation set (Slack read/post/update/delete/DM/lookup, Gmail list/thread/read/send/attachment — ADR 0018; Basecamp project/to-do list/to-do/message/comment/people lists, to-do create and complete, message, comment and Campfire posts — ADR 0022; SharePoint list/item/drive/file lists, file search and read, item create and update, file upload — ADR 0024; warehouse view read; service request) with fixed or declared identity modes; owns the shared operation/identity/environment enums | Dev kit §4 |
|
|
42
42
|
| `integration-execute-request`, `integration-execute-result`, `integration-connect-result`, `integration-error-details` | App SDK integrations wire contract on `/_harbour/integrations/*`: per-operation input bounds (a warehouse read filters, groups, aggregates and sorts in the warehouse and says when it was `truncated` — ADR 0017; Slack and Gmail reads page, posts thread, mail carries HTML and attachments — ADR 0018; a development warehouse read may carry the app's `sampleRows` and the result says `sample` — ADR 0021; Basecamp lists page by `pageToken`, ids are digit strings, writes answer `{id, appUrl}` — ADR 0022; SharePoint lists page by a Graph `$skiptoken`, ids are Graph ids, `fields` is a bounded record, writes answer `{id, webUrl}` — ADR 0024), the per-operation result shapes, consent states and the closed `details.code` reason set | Dev kit §4, §8 |
|
|
43
|
-
| `saas-connection.schema.json`, `data-grant-v2.schema.json` | Tenant SaaS connection record (one installation and channel map per tenant and provider; IT's optional `oauthClient`, `userModeApproval`, `directMessages`, `externalRecipients` — ADR 0018; a Basecamp connection's pinned `account` and project ids in `channels` — ADR 0022; a SharePoint connection's pinned Microsoft 365 tenant in `account` and site ids in `channels` — ADR 0024) and the additive `harbour.data-grant/2.0` grant record with structured resources and provisioning lease/cleanup (status machine generated; legacy `data-grant` untouched) | Dev kit §5 |
|
|
43
|
+
| `saas-connection.schema.json`, `data-grant-v2.schema.json` | Tenant SaaS connection record (one installation and channel map per tenant and provider; IT's optional `oauthClient`, `userModeApproval`, `directMessages`, `externalRecipients` — ADR 0018; a Basecamp connection's pinned `account` and project ids in `channels` — ADR 0022; a SharePoint connection's pinned Microsoft 365 tenant in `account` and site ids in `channels` — ADR 0024; up to 20 `approvers` who may approve access requests beside the tenant admins — ADR 0026) and the additive `harbour.data-grant/2.0` grant record with structured resources and provisioning lease/cleanup (status machine generated; legacy `data-grant` untouched) | Dev kit §5 |
|
|
44
44
|
| `kit-bundle-manifest.schema.json`, `kit-lock.schema.json` | Published kit bundle identity (SDK tarball digest plus optional `sdk.version` and https `sdk.url` download location) and the committed `.isomorph/kit.lock.json` the CodeBuild SDK-vendoring gate compares against | Dev kit §3 |
|
|
45
45
|
| `deploy-response.schema.json` | 202 Accepted body for `POST /v1/tenants/{tenant}/apps/{app}/deployments`, returned only after the authoritative QUEUED version exists and its SQS message is accepted | — |
|
|
46
46
|
| `deployment-source.schema.json` | Credential-free source in the `DeployRequest` body: `provider` is `github` or `gitlab`, `repositoryUrl` is shape-only and the deployment control plane checks the host against the tenant's source connection (ADR 0023); credentials are resolved internally by MaterializeSource | — |
|
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.80.0.0",
|
|
4
|
+
"publishVersion": "0.80.0",
|
|
5
|
+
"publishTag": "v0.80.0",
|
|
6
|
+
"schemasDigest": "sha256:194d7a45ce74a147405e7cd0f4ef9c252c9a953f165b2834a5fa65d8a45e80fa",
|
|
7
7
|
"aiFixturesDigest": "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6",
|
|
8
|
-
"generatedGoDigest": "sha256:
|
|
9
|
-
"generatedTypeScriptDigest": "sha256:
|
|
8
|
+
"generatedGoDigest": "sha256:8e22b9a650b562812579b20fa5b8b28ac63b97007da74e9ac47a5d581e1a6d2d",
|
|
9
|
+
"generatedTypeScriptDigest": "sha256:85b684d40d0c461fad52ec530250245a25f7db1d7e69a5ce81edc00e9486ef66",
|
|
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)"
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"schema/promotion-request.schema.json": "sha256:00e96dfd8ddbdba88ea222941d43f3609ff6c815a79e34f6705cab458101c969",
|
|
67
67
|
"schema/promotion-response.schema.json": "sha256:4129712d2e29d6ef21d93d4bd0bacfd60ada3f2ee0ade852824e64346b817634",
|
|
68
68
|
"schema/resolved-app-serving.schema.json": "sha256:260e30ca16831ddd96b15f44eadc7daa2a5f87a0025588bd6318b236f349ec6b",
|
|
69
|
-
"schema/saas-connection.schema.json": "sha256:
|
|
69
|
+
"schema/saas-connection.schema.json": "sha256:88de2039c9acd726f9e79860c71ec7e74a92c323f44e1c55b8a29c5bf69b29df",
|
|
70
70
|
"schema/sanitized-binding-evidence.schema.json": "sha256:1191ab88e2764df927e5f17837674cebebe068d480da2b2fdb390e589f96b51f",
|
|
71
71
|
"schema/secret-reference.schema.json": "sha256:db4e3c2c6a2dbd72d7ea0f9c91cb3b2343a7e67b601996c6818b2ef08e440895",
|
|
72
72
|
"schema/security-scan-input-v2.schema.json": "sha256:0d418342078c9b5046ea6f4bef3c2c57539285dfee99cc0850d4f0d03739ee13",
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"gen-go/integration_execute_input_rules_test.go": "sha256:4961b4b87012e8cb6e2c64653769f5fd4dd58e1d7d18af459f4f5b69a3e6760d",
|
|
117
117
|
"gen-go/integration_operations.go": "sha256:fab89489825680fee6dfd7d5874e955839691af4cc5245d96caaf36505668db1",
|
|
118
118
|
"gen-go/schema_documents.go": "sha256:c19c0d540f602ee997a84b90e20702d9bc63ed7d27aec267e76c04655fc182e0",
|
|
119
|
-
"gen-go/types.go": "sha256:
|
|
119
|
+
"gen-go/types.go": "sha256:0c147e97773521638fec09868c6299d2746ed8af24082720d883a448b2cb813c",
|
|
120
120
|
"gen-go/version_state.go": "sha256:4ef8abb126414c0025cf2c59bc9c79a74ef4a2ff89e8f316cbf05acc872371c1"
|
|
121
121
|
},
|
|
122
122
|
"generatedTypeScript": {
|
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
"gen-ts/promotion-request.ts": "sha256:9db88cef67f777a16bac628039ec3f582acb9e8cfff6fb592b30d0a0e55abc68",
|
|
182
182
|
"gen-ts/promotion-response.ts": "sha256:f1c9cafac96faeb02a443a31786f67714e818f38d90108e7af41958396524d6f",
|
|
183
183
|
"gen-ts/resolved-app-serving.ts": "sha256:6131a6cc5f784f0d101081d2ce1b96b76b2f904b2c5e7b2809f9ede5878ada1f",
|
|
184
|
-
"gen-ts/saas-connection.ts": "sha256:
|
|
184
|
+
"gen-ts/saas-connection.ts": "sha256:5ab9875d20a50a99aec63d204425655816d7d27ea874497c6e483e6a363f4dcc",
|
|
185
185
|
"gen-ts/sanitized-binding-digest-helper.ts": "sha256:c47d7fdc20500e2e72c23fe39ecdd610fc397c47fcba51335ebec3c380fe6872",
|
|
186
186
|
"gen-ts/sanitized-binding-evidence.ts": "sha256:f3fb7b1d7d2e0929eb0ea981eaf32db3104010647185f6ae59f67167d42538a9",
|
|
187
187
|
"gen-ts/secret-reference.ts": "sha256:731fbcde7315cb4128d5b01bdbe6e6f248f13c7ad8dea04a3a4e927ac4890198",
|
|
@@ -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.80.0.0";
|
|
2
|
+
export declare const ContractPublishVersion: "0.80.0";
|
|
3
|
+
export declare const ContractPublishTag: "v0.80.0";
|
|
4
|
+
export declare const ContractSchemasDigest: "sha256:194d7a45ce74a147405e7cd0f4ef9c252c9a953f165b2834a5fa65d8a45e80fa";
|
|
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:8e22b9a650b562812579b20fa5b8b28ac63b97007da74e9ac47a5d581e1a6d2d";
|
|
7
|
+
export declare const ContractGeneratedTypeScriptDigest: "sha256:85b684d40d0c461fad52ec530250245a25f7db1d7e69a5ce81edc00e9486ef66";
|
|
@@ -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.80.0.0";
|
|
4
|
+
export const ContractPublishVersion = "0.80.0";
|
|
5
|
+
export const ContractPublishTag = "v0.80.0";
|
|
6
|
+
export const ContractSchemasDigest = "sha256:194d7a45ce74a147405e7cd0f4ef9c252c9a953f165b2834a5fa65d8a45e80fa";
|
|
7
7
|
export const ContractAiFixturesDigest = "sha256:edac31c92e146ca1c40130f2fb5649db82e24b8cd1ac758153b90612052fddb6";
|
|
8
|
-
export const ContractGeneratedGoDigest = "sha256:
|
|
9
|
-
export const ContractGeneratedTypeScriptDigest = "sha256:
|
|
8
|
+
export const ContractGeneratedGoDigest = "sha256:8e22b9a650b562812579b20fa5b8b28ac63b97007da74e9ac47a5d581e1a6d2d";
|
|
9
|
+
export const ContractGeneratedTypeScriptDigest = "sha256:85b684d40d0c461fad52ec530250245a25f7db1d7e69a5ce81edc00e9486ef66";
|
|
@@ -69,6 +69,12 @@ export interface SaasConnection {
|
|
|
69
69
|
* @maxItems 256
|
|
70
70
|
*/
|
|
71
71
|
blockedDevelopmentBuilders?: string[];
|
|
72
|
+
/**
|
|
73
|
+
* Lower-cased emails who may approve an app's access requests for this connection, besides tenant admins. Empty or absent means tenant admins only.
|
|
74
|
+
*
|
|
75
|
+
* @maxItems 20
|
|
76
|
+
*/
|
|
77
|
+
approvers?: string[];
|
|
72
78
|
createdAt: string;
|
|
73
79
|
updatedAt: string;
|
|
74
80
|
/**
|
|
@@ -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.80.0.0" as const;
|
|
5
|
+
export const ContractPublishVersion = "0.80.0" as const;
|
|
6
|
+
export const ContractPublishTag = "v0.80.0" as const;
|
|
7
|
+
export const ContractSchemasDigest = "sha256:194d7a45ce74a147405e7cd0f4ef9c252c9a953f165b2834a5fa65d8a45e80fa" 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:8e22b9a650b562812579b20fa5b8b28ac63b97007da74e9ac47a5d581e1a6d2d" as const;
|
|
10
|
+
export const ContractGeneratedTypeScriptDigest = "sha256:85b684d40d0c461fad52ec530250245a25f7db1d7e69a5ce81edc00e9486ef66" as const;
|
|
@@ -107,6 +107,12 @@ export interface SaasConnection {
|
|
|
107
107
|
* @maxItems 256
|
|
108
108
|
*/
|
|
109
109
|
blockedDevelopmentBuilders?: string[];
|
|
110
|
+
/**
|
|
111
|
+
* Lower-cased emails who may approve an app's access requests for this connection, besides tenant admins. Empty or absent means tenant admins only.
|
|
112
|
+
*
|
|
113
|
+
* @maxItems 20
|
|
114
|
+
*/
|
|
115
|
+
approvers?: string[];
|
|
110
116
|
createdAt: string;
|
|
111
117
|
updatedAt: string;
|
|
112
118
|
/**
|
package/package.json
CHANGED
|
@@ -45,6 +45,13 @@
|
|
|
45
45
|
"items": { "type": "string", "minLength": 1, "maxLength": 255 },
|
|
46
46
|
"description": "Lower-cased builder emails excluded from development preapproval."
|
|
47
47
|
},
|
|
48
|
+
"approvers": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"maxItems": 20,
|
|
51
|
+
"uniqueItems": true,
|
|
52
|
+
"items": { "$ref": "integration-execute-request.schema.json#/definitions/EmailAddress" },
|
|
53
|
+
"description": "Lower-cased emails who may approve an app's access requests for this connection, besides tenant admins. Empty or absent means tenant admins only."
|
|
54
|
+
},
|
|
48
55
|
"createdAt": { "type": "string", "format": "date-time" },
|
|
49
56
|
"updatedAt": { "type": "string", "format": "date-time" },
|
|
50
57
|
"clientId": { "type": "string", "minLength": 1, "maxLength": 255, "deprecated": true, "description": "Deprecated (pre-T25 tenant-owned provider client). Dropped on read; never written." },
|
|
@@ -229,6 +236,7 @@
|
|
|
229
236
|
"oauthClient": { "clientId": "1234567890.1234567890", "secretRef": "secretref://tenant/fourier/saas/company-slack/oauth-client", "setAt": "2026-10-01T08:00:00Z", "setBy": "it-admin@example.com" },
|
|
230
237
|
"userModeApproval": "automatic",
|
|
231
238
|
"directMessages": { "allowed": "channel_members", "channel": "team-updates", "dailyRecipientCap": 50 },
|
|
239
|
+
"approvers": ["slack-owner@example.com", "it-lead@example.com"],
|
|
232
240
|
"createdAt": "2026-09-09T08:00:00Z",
|
|
233
241
|
"updatedAt": "2026-09-09T08:00:00Z"
|
|
234
242
|
},
|