@contractspec/example.integration-hub 3.8.9 → 3.8.10
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/dist/connection/connection.enum.js +1 -29
- package/dist/connection/connection.operation.js +1 -124
- package/dist/connection/connection.presentation.js +1 -125
- package/dist/connection/connection.schema.js +1 -71
- package/dist/connection/index.js +1 -127
- package/dist/docs/index.js +5 -49
- package/dist/docs/integration-hub.docblock.js +5 -49
- package/dist/events.js +1 -211
- package/dist/example.js +1 -42
- package/dist/handlers/index.js +5 -292
- package/dist/handlers/integration.handlers.js +5 -292
- package/dist/index.js +8 -2355
- package/dist/integration/index.js +1 -92
- package/dist/integration/integration.enum.js +1 -12
- package/dist/integration/integration.operations.js +1 -89
- package/dist/integration/integration.presentation.js +1 -120
- package/dist/integration/integration.schema.js +1 -42
- package/dist/integration-hub.capability.js +1 -43
- package/dist/integration-hub.feature.js +1 -330
- package/dist/mcp-example.js +1 -154
- package/dist/node/connection/connection.enum.js +1 -29
- package/dist/node/connection/connection.operation.js +1 -124
- package/dist/node/connection/connection.presentation.js +1 -125
- package/dist/node/connection/connection.schema.js +1 -71
- package/dist/node/connection/index.js +1 -127
- package/dist/node/docs/index.js +5 -49
- package/dist/node/docs/integration-hub.docblock.js +5 -49
- package/dist/node/events.js +1 -211
- package/dist/node/example.js +1 -42
- package/dist/node/handlers/index.js +5 -292
- package/dist/node/handlers/integration.handlers.js +5 -292
- package/dist/node/index.js +8 -2355
- package/dist/node/integration/index.js +1 -92
- package/dist/node/integration/integration.enum.js +1 -12
- package/dist/node/integration/integration.operations.js +1 -89
- package/dist/node/integration/integration.presentation.js +1 -120
- package/dist/node/integration/integration.schema.js +1 -42
- package/dist/node/integration-hub.capability.js +1 -43
- package/dist/node/integration-hub.feature.js +1 -330
- package/dist/node/mcp-example.js +1 -154
- package/dist/node/run-mcp.js +1 -159
- package/dist/node/seeders/index.js +6 -60
- package/dist/node/sync/index.js +1 -332
- package/dist/node/sync/sync.enum.js +1 -26
- package/dist/node/sync/sync.operations.js +1 -321
- package/dist/node/sync/sync.presentation.js +1 -301
- package/dist/node/sync/sync.schema.js +1 -154
- package/dist/node/sync-engine/index.js +1 -186
- package/dist/node/tests/operations.test-spec.js +1 -85
- package/dist/node/ui/IntegrationDashboard.js +1 -886
- package/dist/node/ui/IntegrationDashboard.visualizations.js +1 -250
- package/dist/node/ui/IntegrationHubChat.js +1 -34
- package/dist/node/ui/hooks/index.js +1 -57
- package/dist/node/ui/hooks/useIntegrationData.js +1 -54
- package/dist/node/ui/index.js +4 -1173
- package/dist/node/ui/renderers/index.js +4 -484
- package/dist/node/ui/renderers/integration.markdown.js +4 -484
- package/dist/node/ui/tables/ConnectionsTable.js +1 -211
- package/dist/node/ui/tables/IntegrationTables.js +1 -361
- package/dist/node/ui/tables/SyncConfigsTable.js +1 -230
- package/dist/node/ui/tables/integration-table.shared.js +1 -84
- package/dist/node/visualizations/catalog.js +1 -137
- package/dist/node/visualizations/index.js +1 -211
- package/dist/node/visualizations/selectors.js +1 -204
- package/dist/run-mcp.js +1 -159
- package/dist/seeders/index.js +6 -60
- package/dist/sync/index.js +1 -332
- package/dist/sync/sync.enum.js +1 -26
- package/dist/sync/sync.operations.js +1 -321
- package/dist/sync/sync.presentation.js +1 -301
- package/dist/sync/sync.schema.js +1 -154
- package/dist/sync-engine/index.js +1 -186
- package/dist/tests/operations.test-spec.js +1 -85
- package/dist/ui/IntegrationDashboard.js +1 -886
- package/dist/ui/IntegrationDashboard.visualizations.js +1 -250
- package/dist/ui/IntegrationHubChat.js +1 -34
- package/dist/ui/hooks/index.js +1 -57
- package/dist/ui/hooks/useIntegrationData.js +1 -54
- package/dist/ui/index.js +4 -1173
- package/dist/ui/renderers/index.js +4 -484
- package/dist/ui/renderers/integration.markdown.js +4 -484
- package/dist/ui/tables/ConnectionsTable.js +1 -211
- package/dist/ui/tables/IntegrationTables.js +1 -361
- package/dist/ui/tables/SyncConfigsTable.js +1 -230
- package/dist/ui/tables/integration-table.shared.js +1 -84
- package/dist/visualizations/catalog.js +1 -137
- package/dist/visualizations/index.js +1 -211
- package/dist/visualizations/selectors.js +1 -204
- package/package.json +11 -11
|
@@ -1,30 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
|
|
3
|
-
import { defineEnum } from "@contractspec/lib.schema";
|
|
4
|
-
var ConnectionStatusEnum = defineEnum("ConnectionStatus", [
|
|
5
|
-
"PENDING",
|
|
6
|
-
"CONNECTED",
|
|
7
|
-
"DISCONNECTED",
|
|
8
|
-
"ERROR",
|
|
9
|
-
"EXPIRED"
|
|
10
|
-
]);
|
|
11
|
-
var AuthTypeEnum = defineEnum("AuthType", [
|
|
12
|
-
"api_key",
|
|
13
|
-
"oauth2",
|
|
14
|
-
"bearer",
|
|
15
|
-
"header",
|
|
16
|
-
"basic",
|
|
17
|
-
"webhook_signing",
|
|
18
|
-
"service_account"
|
|
19
|
-
]);
|
|
20
|
-
var TransportTypeEnum = defineEnum("TransportType", [
|
|
21
|
-
"rest",
|
|
22
|
-
"mcp",
|
|
23
|
-
"webhook",
|
|
24
|
-
"sdk"
|
|
25
|
-
]);
|
|
26
|
-
export {
|
|
27
|
-
TransportTypeEnum,
|
|
28
|
-
ConnectionStatusEnum,
|
|
29
|
-
AuthTypeEnum
|
|
30
|
-
};
|
|
2
|
+
import{defineEnum as j}from"@contractspec/lib.schema";var q=j("ConnectionStatus",["PENDING","CONNECTED","DISCONNECTED","ERROR","EXPIRED"]),v=j("AuthType",["api_key","oauth2","bearer","header","basic","webhook_signing","service_account"]),z=j("TransportType",["rest","mcp","webhook","sdk"]);export{z as TransportTypeEnum,q as ConnectionStatusEnum,v as AuthTypeEnum};
|
|
@@ -1,125 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
|
|
3
|
-
import { defineEnum } from "@contractspec/lib.schema";
|
|
4
|
-
var ConnectionStatusEnum = defineEnum("ConnectionStatus", [
|
|
5
|
-
"PENDING",
|
|
6
|
-
"CONNECTED",
|
|
7
|
-
"DISCONNECTED",
|
|
8
|
-
"ERROR",
|
|
9
|
-
"EXPIRED"
|
|
10
|
-
]);
|
|
11
|
-
var AuthTypeEnum = defineEnum("AuthType", [
|
|
12
|
-
"api_key",
|
|
13
|
-
"oauth2",
|
|
14
|
-
"bearer",
|
|
15
|
-
"header",
|
|
16
|
-
"basic",
|
|
17
|
-
"webhook_signing",
|
|
18
|
-
"service_account"
|
|
19
|
-
]);
|
|
20
|
-
var TransportTypeEnum = defineEnum("TransportType", [
|
|
21
|
-
"rest",
|
|
22
|
-
"mcp",
|
|
23
|
-
"webhook",
|
|
24
|
-
"sdk"
|
|
25
|
-
]);
|
|
26
|
-
|
|
27
|
-
// src/connection/connection.schema.ts
|
|
28
|
-
import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
|
|
29
|
-
var ConnectionModel = defineSchemaModel({
|
|
30
|
-
name: "ConnectionModel",
|
|
31
|
-
fields: {
|
|
32
|
-
id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
33
|
-
integrationId: {
|
|
34
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
35
|
-
isOptional: false
|
|
36
|
-
},
|
|
37
|
-
name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
38
|
-
status: { type: ConnectionStatusEnum, isOptional: false },
|
|
39
|
-
authType: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
40
|
-
externalAccountName: {
|
|
41
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
42
|
-
isOptional: true
|
|
43
|
-
},
|
|
44
|
-
connectedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
|
|
45
|
-
lastHealthCheck: { type: ScalarTypeEnum.DateTime(), isOptional: true },
|
|
46
|
-
healthStatus: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
47
|
-
transport: { type: TransportTypeEnum, isOptional: true },
|
|
48
|
-
authMethod: { type: AuthTypeEnum, isOptional: true },
|
|
49
|
-
apiVersion: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
50
|
-
ownershipMode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
var CreateConnectionInputModel = defineSchemaModel({
|
|
54
|
-
name: "CreateConnectionInput",
|
|
55
|
-
fields: {
|
|
56
|
-
integrationId: {
|
|
57
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
58
|
-
isOptional: false
|
|
59
|
-
},
|
|
60
|
-
name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
|
|
61
|
-
authType: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
|
|
62
|
-
credentials: { type: ScalarTypeEnum.JSON(), isOptional: true },
|
|
63
|
-
transport: { type: TransportTypeEnum, isOptional: true },
|
|
64
|
-
authMethod: { type: AuthTypeEnum, isOptional: true },
|
|
65
|
-
apiVersion: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
66
|
-
ownershipMode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
// src/connection/connection.operation.ts
|
|
71
|
-
import { defineCommand } from "@contractspec/lib.contracts-spec/operations";
|
|
72
|
-
var OWNERS = ["@example.integration-hub"];
|
|
73
|
-
var CreateConnectionContract = defineCommand({
|
|
74
|
-
meta: {
|
|
75
|
-
key: "integration.connection.create",
|
|
76
|
-
version: "1.0.0",
|
|
77
|
-
stability: "stable",
|
|
78
|
-
owners: [...OWNERS],
|
|
79
|
-
tags: ["integration", "connection", "create"],
|
|
80
|
-
description: "Create a connection to an external system.",
|
|
81
|
-
goal: "Authenticate with external systems.",
|
|
82
|
-
context: "Connection setup."
|
|
83
|
-
},
|
|
84
|
-
io: { input: CreateConnectionInputModel, output: ConnectionModel },
|
|
85
|
-
policy: { auth: "user" },
|
|
86
|
-
sideEffects: {
|
|
87
|
-
emits: [
|
|
88
|
-
{
|
|
89
|
-
key: "integration.connection.created",
|
|
90
|
-
version: "1.0.0",
|
|
91
|
-
when: "Connection created",
|
|
92
|
-
payload: ConnectionModel
|
|
93
|
-
}
|
|
94
|
-
],
|
|
95
|
-
audit: ["integration.connection.created"]
|
|
96
|
-
},
|
|
97
|
-
acceptance: {
|
|
98
|
-
scenarios: [
|
|
99
|
-
{
|
|
100
|
-
key: "create-connection-happy-path",
|
|
101
|
-
given: ["User is authenticated"],
|
|
102
|
-
when: ["User creates connection with valid credentials"],
|
|
103
|
-
then: ["Connection is created", "ConnectionCreated event is emitted"]
|
|
104
|
-
}
|
|
105
|
-
],
|
|
106
|
-
examples: [
|
|
107
|
-
{
|
|
108
|
-
key: "connect-crm",
|
|
109
|
-
input: {
|
|
110
|
-
name: "Salesforce Prod",
|
|
111
|
-
integrationId: "salesforce",
|
|
112
|
-
credentials: { clientId: "xxx" }
|
|
113
|
-
},
|
|
114
|
-
output: {
|
|
115
|
-
id: "conn-123",
|
|
116
|
-
status: "connected",
|
|
117
|
-
connectedAt: "2025-01-01T12:00:00Z"
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
]
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
export {
|
|
124
|
-
CreateConnectionContract
|
|
125
|
-
};
|
|
2
|
+
import{defineEnum as k}from"@contractspec/lib.schema";var B=k("ConnectionStatus",["PENDING","CONNECTED","DISCONNECTED","ERROR","EXPIRED"]),q=k("AuthType",["api_key","oauth2","bearer","header","basic","webhook_signing","service_account"]),v=k("TransportType",["rest","mcp","webhook","sdk"]);import{defineSchemaModel as D,ScalarTypeEnum as j}from"@contractspec/lib.schema";var z=D({name:"ConnectionModel",fields:{id:{type:j.String_unsecure(),isOptional:!1},integrationId:{type:j.String_unsecure(),isOptional:!1},name:{type:j.String_unsecure(),isOptional:!1},status:{type:B,isOptional:!1},authType:{type:j.String_unsecure(),isOptional:!1},externalAccountName:{type:j.String_unsecure(),isOptional:!0},connectedAt:{type:j.DateTime(),isOptional:!0},lastHealthCheck:{type:j.DateTime(),isOptional:!0},healthStatus:{type:j.String_unsecure(),isOptional:!0},transport:{type:v,isOptional:!0},authMethod:{type:q,isOptional:!0},apiVersion:{type:j.String_unsecure(),isOptional:!0},ownershipMode:{type:j.String_unsecure(),isOptional:!0}}}),F=D({name:"CreateConnectionInput",fields:{integrationId:{type:j.String_unsecure(),isOptional:!1},name:{type:j.NonEmptyString(),isOptional:!1},authType:{type:j.NonEmptyString(),isOptional:!1},credentials:{type:j.JSON(),isOptional:!0},transport:{type:v,isOptional:!0},authMethod:{type:q,isOptional:!0},apiVersion:{type:j.String_unsecure(),isOptional:!0},ownershipMode:{type:j.String_unsecure(),isOptional:!0}}});import{defineCommand as G}from"@contractspec/lib.contracts-spec/operations";var H=["@example.integration-hub"],X=G({meta:{key:"integration.connection.create",version:"1.0.0",stability:"stable",owners:[...H],tags:["integration","connection","create"],description:"Create a connection to an external system.",goal:"Authenticate with external systems.",context:"Connection setup."},io:{input:F,output:z},policy:{auth:"user"},sideEffects:{emits:[{key:"integration.connection.created",version:"1.0.0",when:"Connection created",payload:z}],audit:["integration.connection.created"]},acceptance:{scenarios:[{key:"create-connection-happy-path",given:["User is authenticated"],when:["User creates connection with valid credentials"],then:["Connection is created","ConnectionCreated event is emitted"]}],examples:[{key:"connect-crm",input:{name:"Salesforce Prod",integrationId:"salesforce",credentials:{clientId:"xxx"}},output:{id:"conn-123",status:"connected",connectedAt:"2025-01-01T12:00:00Z"}}]}});export{X as CreateConnectionContract};
|
|
@@ -1,126 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
|
|
3
|
-
import { defineEnum } from "@contractspec/lib.schema";
|
|
4
|
-
var ConnectionStatusEnum = defineEnum("ConnectionStatus", [
|
|
5
|
-
"PENDING",
|
|
6
|
-
"CONNECTED",
|
|
7
|
-
"DISCONNECTED",
|
|
8
|
-
"ERROR",
|
|
9
|
-
"EXPIRED"
|
|
10
|
-
]);
|
|
11
|
-
var AuthTypeEnum = defineEnum("AuthType", [
|
|
12
|
-
"api_key",
|
|
13
|
-
"oauth2",
|
|
14
|
-
"bearer",
|
|
15
|
-
"header",
|
|
16
|
-
"basic",
|
|
17
|
-
"webhook_signing",
|
|
18
|
-
"service_account"
|
|
19
|
-
]);
|
|
20
|
-
var TransportTypeEnum = defineEnum("TransportType", [
|
|
21
|
-
"rest",
|
|
22
|
-
"mcp",
|
|
23
|
-
"webhook",
|
|
24
|
-
"sdk"
|
|
25
|
-
]);
|
|
26
|
-
|
|
27
|
-
// src/connection/connection.schema.ts
|
|
28
|
-
import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
|
|
29
|
-
var ConnectionModel = defineSchemaModel({
|
|
30
|
-
name: "ConnectionModel",
|
|
31
|
-
fields: {
|
|
32
|
-
id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
33
|
-
integrationId: {
|
|
34
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
35
|
-
isOptional: false
|
|
36
|
-
},
|
|
37
|
-
name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
38
|
-
status: { type: ConnectionStatusEnum, isOptional: false },
|
|
39
|
-
authType: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
40
|
-
externalAccountName: {
|
|
41
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
42
|
-
isOptional: true
|
|
43
|
-
},
|
|
44
|
-
connectedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
|
|
45
|
-
lastHealthCheck: { type: ScalarTypeEnum.DateTime(), isOptional: true },
|
|
46
|
-
healthStatus: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
47
|
-
transport: { type: TransportTypeEnum, isOptional: true },
|
|
48
|
-
authMethod: { type: AuthTypeEnum, isOptional: true },
|
|
49
|
-
apiVersion: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
50
|
-
ownershipMode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
var CreateConnectionInputModel = defineSchemaModel({
|
|
54
|
-
name: "CreateConnectionInput",
|
|
55
|
-
fields: {
|
|
56
|
-
integrationId: {
|
|
57
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
58
|
-
isOptional: false
|
|
59
|
-
},
|
|
60
|
-
name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
|
|
61
|
-
authType: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
|
|
62
|
-
credentials: { type: ScalarTypeEnum.JSON(), isOptional: true },
|
|
63
|
-
transport: { type: TransportTypeEnum, isOptional: true },
|
|
64
|
-
authMethod: { type: AuthTypeEnum, isOptional: true },
|
|
65
|
-
apiVersion: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
66
|
-
ownershipMode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
// src/connection/connection.presentation.ts
|
|
71
|
-
import {
|
|
72
|
-
definePresentation,
|
|
73
|
-
StabilityEnum
|
|
74
|
-
} from "@contractspec/lib.contracts-spec";
|
|
75
|
-
var ConnectionListPresentation = definePresentation({
|
|
76
|
-
meta: {
|
|
77
|
-
key: "integration.connection.list",
|
|
78
|
-
version: "1.0.0",
|
|
79
|
-
title: "Connection List",
|
|
80
|
-
description: "List of integration connections",
|
|
81
|
-
domain: "integration",
|
|
82
|
-
owners: ["@integration-team"],
|
|
83
|
-
tags: ["integration", "connection", "list"],
|
|
84
|
-
stability: StabilityEnum.Experimental,
|
|
85
|
-
goal: "Provide an overview of all established integration connections.",
|
|
86
|
-
context: "The primary management view for integration hubs."
|
|
87
|
-
},
|
|
88
|
-
source: {
|
|
89
|
-
type: "component",
|
|
90
|
-
framework: "react",
|
|
91
|
-
componentKey: "ConnectionList",
|
|
92
|
-
props: ConnectionModel
|
|
93
|
-
},
|
|
94
|
-
targets: ["react", "markdown"],
|
|
95
|
-
policy: {
|
|
96
|
-
flags: ["integration.enabled"]
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
var ConnectionSetupPresentation = definePresentation({
|
|
100
|
-
meta: {
|
|
101
|
-
key: "integration.connection.setup",
|
|
102
|
-
version: "1.0.0",
|
|
103
|
-
title: "Connection Setup",
|
|
104
|
-
description: "Setup wizard for creating integration connections",
|
|
105
|
-
domain: "integration",
|
|
106
|
-
owners: ["@integration-team"],
|
|
107
|
-
tags: ["integration", "connection", "setup"],
|
|
108
|
-
stability: StabilityEnum.Experimental,
|
|
109
|
-
goal: "Guide users through the multi-step process of connecting to a new integration.",
|
|
110
|
-
context: "The onboarding flow for new integrations."
|
|
111
|
-
},
|
|
112
|
-
source: {
|
|
113
|
-
type: "component",
|
|
114
|
-
framework: "react",
|
|
115
|
-
componentKey: "ConnectionSetup",
|
|
116
|
-
props: ConnectionModel
|
|
117
|
-
},
|
|
118
|
-
targets: ["react"],
|
|
119
|
-
policy: {
|
|
120
|
-
flags: ["integration.enabled"]
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
export {
|
|
124
|
-
ConnectionSetupPresentation,
|
|
125
|
-
ConnectionListPresentation
|
|
126
|
-
};
|
|
2
|
+
import{defineEnum as k}from"@contractspec/lib.schema";var B=k("ConnectionStatus",["PENDING","CONNECTED","DISCONNECTED","ERROR","EXPIRED"]),q=k("AuthType",["api_key","oauth2","bearer","header","basic","webhook_signing","service_account"]),v=k("TransportType",["rest","mcp","webhook","sdk"]);import{defineSchemaModel as D,ScalarTypeEnum as j}from"@contractspec/lib.schema";var z=D({name:"ConnectionModel",fields:{id:{type:j.String_unsecure(),isOptional:!1},integrationId:{type:j.String_unsecure(),isOptional:!1},name:{type:j.String_unsecure(),isOptional:!1},status:{type:B,isOptional:!1},authType:{type:j.String_unsecure(),isOptional:!1},externalAccountName:{type:j.String_unsecure(),isOptional:!0},connectedAt:{type:j.DateTime(),isOptional:!0},lastHealthCheck:{type:j.DateTime(),isOptional:!0},healthStatus:{type:j.String_unsecure(),isOptional:!0},transport:{type:v,isOptional:!0},authMethod:{type:q,isOptional:!0},apiVersion:{type:j.String_unsecure(),isOptional:!0},ownershipMode:{type:j.String_unsecure(),isOptional:!0}}}),N=D({name:"CreateConnectionInput",fields:{integrationId:{type:j.String_unsecure(),isOptional:!1},name:{type:j.NonEmptyString(),isOptional:!1},authType:{type:j.NonEmptyString(),isOptional:!1},credentials:{type:j.JSON(),isOptional:!0},transport:{type:v,isOptional:!0},authMethod:{type:q,isOptional:!0},apiVersion:{type:j.String_unsecure(),isOptional:!0},ownershipMode:{type:j.String_unsecure(),isOptional:!0}}});import{definePresentation as F,StabilityEnum as G}from"@contractspec/lib.contracts-spec";var U=F({meta:{key:"integration.connection.list",version:"1.0.0",title:"Connection List",description:"List of integration connections",domain:"integration",owners:["@integration-team"],tags:["integration","connection","list"],stability:G.Experimental,goal:"Provide an overview of all established integration connections.",context:"The primary management view for integration hubs."},source:{type:"component",framework:"react",componentKey:"ConnectionList",props:z},targets:["react","markdown"],policy:{flags:["integration.enabled"]}}),V=F({meta:{key:"integration.connection.setup",version:"1.0.0",title:"Connection Setup",description:"Setup wizard for creating integration connections",domain:"integration",owners:["@integration-team"],tags:["integration","connection","setup"],stability:G.Experimental,goal:"Guide users through the multi-step process of connecting to a new integration.",context:"The onboarding flow for new integrations."},source:{type:"component",framework:"react",componentKey:"ConnectionSetup",props:z},targets:["react"],policy:{flags:["integration.enabled"]}});export{V as ConnectionSetupPresentation,U as ConnectionListPresentation};
|
|
@@ -1,72 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
|
|
3
|
-
import { defineEnum } from "@contractspec/lib.schema";
|
|
4
|
-
var ConnectionStatusEnum = defineEnum("ConnectionStatus", [
|
|
5
|
-
"PENDING",
|
|
6
|
-
"CONNECTED",
|
|
7
|
-
"DISCONNECTED",
|
|
8
|
-
"ERROR",
|
|
9
|
-
"EXPIRED"
|
|
10
|
-
]);
|
|
11
|
-
var AuthTypeEnum = defineEnum("AuthType", [
|
|
12
|
-
"api_key",
|
|
13
|
-
"oauth2",
|
|
14
|
-
"bearer",
|
|
15
|
-
"header",
|
|
16
|
-
"basic",
|
|
17
|
-
"webhook_signing",
|
|
18
|
-
"service_account"
|
|
19
|
-
]);
|
|
20
|
-
var TransportTypeEnum = defineEnum("TransportType", [
|
|
21
|
-
"rest",
|
|
22
|
-
"mcp",
|
|
23
|
-
"webhook",
|
|
24
|
-
"sdk"
|
|
25
|
-
]);
|
|
26
|
-
|
|
27
|
-
// src/connection/connection.schema.ts
|
|
28
|
-
import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
|
|
29
|
-
var ConnectionModel = defineSchemaModel({
|
|
30
|
-
name: "ConnectionModel",
|
|
31
|
-
fields: {
|
|
32
|
-
id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
33
|
-
integrationId: {
|
|
34
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
35
|
-
isOptional: false
|
|
36
|
-
},
|
|
37
|
-
name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
38
|
-
status: { type: ConnectionStatusEnum, isOptional: false },
|
|
39
|
-
authType: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
40
|
-
externalAccountName: {
|
|
41
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
42
|
-
isOptional: true
|
|
43
|
-
},
|
|
44
|
-
connectedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
|
|
45
|
-
lastHealthCheck: { type: ScalarTypeEnum.DateTime(), isOptional: true },
|
|
46
|
-
healthStatus: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
47
|
-
transport: { type: TransportTypeEnum, isOptional: true },
|
|
48
|
-
authMethod: { type: AuthTypeEnum, isOptional: true },
|
|
49
|
-
apiVersion: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
50
|
-
ownershipMode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
var CreateConnectionInputModel = defineSchemaModel({
|
|
54
|
-
name: "CreateConnectionInput",
|
|
55
|
-
fields: {
|
|
56
|
-
integrationId: {
|
|
57
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
58
|
-
isOptional: false
|
|
59
|
-
},
|
|
60
|
-
name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
|
|
61
|
-
authType: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
|
|
62
|
-
credentials: { type: ScalarTypeEnum.JSON(), isOptional: true },
|
|
63
|
-
transport: { type: TransportTypeEnum, isOptional: true },
|
|
64
|
-
authMethod: { type: AuthTypeEnum, isOptional: true },
|
|
65
|
-
apiVersion: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
66
|
-
ownershipMode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
export {
|
|
70
|
-
CreateConnectionInputModel,
|
|
71
|
-
ConnectionModel
|
|
72
|
-
};
|
|
2
|
+
import{defineEnum as k}from"@contractspec/lib.schema";var z=k("ConnectionStatus",["PENDING","CONNECTED","DISCONNECTED","ERROR","EXPIRED"]),q=k("AuthType",["api_key","oauth2","bearer","header","basic","webhook_signing","service_account"]),v=k("TransportType",["rest","mcp","webhook","sdk"]);import{defineSchemaModel as B,ScalarTypeEnum as j}from"@contractspec/lib.schema";var J=B({name:"ConnectionModel",fields:{id:{type:j.String_unsecure(),isOptional:!1},integrationId:{type:j.String_unsecure(),isOptional:!1},name:{type:j.String_unsecure(),isOptional:!1},status:{type:z,isOptional:!1},authType:{type:j.String_unsecure(),isOptional:!1},externalAccountName:{type:j.String_unsecure(),isOptional:!0},connectedAt:{type:j.DateTime(),isOptional:!0},lastHealthCheck:{type:j.DateTime(),isOptional:!0},healthStatus:{type:j.String_unsecure(),isOptional:!0},transport:{type:v,isOptional:!0},authMethod:{type:q,isOptional:!0},apiVersion:{type:j.String_unsecure(),isOptional:!0},ownershipMode:{type:j.String_unsecure(),isOptional:!0}}}),K=B({name:"CreateConnectionInput",fields:{integrationId:{type:j.String_unsecure(),isOptional:!1},name:{type:j.NonEmptyString(),isOptional:!1},authType:{type:j.NonEmptyString(),isOptional:!1},credentials:{type:j.JSON(),isOptional:!0},transport:{type:v,isOptional:!0},authMethod:{type:q,isOptional:!0},apiVersion:{type:j.String_unsecure(),isOptional:!0},ownershipMode:{type:j.String_unsecure(),isOptional:!0}}});export{K as CreateConnectionInputModel,J as ConnectionModel};
|
package/dist/connection/index.js
CHANGED
|
@@ -1,128 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
|
|
3
|
-
import { defineEnum } from "@contractspec/lib.schema";
|
|
4
|
-
var ConnectionStatusEnum = defineEnum("ConnectionStatus", [
|
|
5
|
-
"PENDING",
|
|
6
|
-
"CONNECTED",
|
|
7
|
-
"DISCONNECTED",
|
|
8
|
-
"ERROR",
|
|
9
|
-
"EXPIRED"
|
|
10
|
-
]);
|
|
11
|
-
var AuthTypeEnum = defineEnum("AuthType", [
|
|
12
|
-
"api_key",
|
|
13
|
-
"oauth2",
|
|
14
|
-
"bearer",
|
|
15
|
-
"header",
|
|
16
|
-
"basic",
|
|
17
|
-
"webhook_signing",
|
|
18
|
-
"service_account"
|
|
19
|
-
]);
|
|
20
|
-
var TransportTypeEnum = defineEnum("TransportType", [
|
|
21
|
-
"rest",
|
|
22
|
-
"mcp",
|
|
23
|
-
"webhook",
|
|
24
|
-
"sdk"
|
|
25
|
-
]);
|
|
26
|
-
|
|
27
|
-
// src/connection/connection.schema.ts
|
|
28
|
-
import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
|
|
29
|
-
var ConnectionModel = defineSchemaModel({
|
|
30
|
-
name: "ConnectionModel",
|
|
31
|
-
fields: {
|
|
32
|
-
id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
33
|
-
integrationId: {
|
|
34
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
35
|
-
isOptional: false
|
|
36
|
-
},
|
|
37
|
-
name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
38
|
-
status: { type: ConnectionStatusEnum, isOptional: false },
|
|
39
|
-
authType: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
|
|
40
|
-
externalAccountName: {
|
|
41
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
42
|
-
isOptional: true
|
|
43
|
-
},
|
|
44
|
-
connectedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
|
|
45
|
-
lastHealthCheck: { type: ScalarTypeEnum.DateTime(), isOptional: true },
|
|
46
|
-
healthStatus: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
47
|
-
transport: { type: TransportTypeEnum, isOptional: true },
|
|
48
|
-
authMethod: { type: AuthTypeEnum, isOptional: true },
|
|
49
|
-
apiVersion: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
50
|
-
ownershipMode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
var CreateConnectionInputModel = defineSchemaModel({
|
|
54
|
-
name: "CreateConnectionInput",
|
|
55
|
-
fields: {
|
|
56
|
-
integrationId: {
|
|
57
|
-
type: ScalarTypeEnum.String_unsecure(),
|
|
58
|
-
isOptional: false
|
|
59
|
-
},
|
|
60
|
-
name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
|
|
61
|
-
authType: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
|
|
62
|
-
credentials: { type: ScalarTypeEnum.JSON(), isOptional: true },
|
|
63
|
-
transport: { type: TransportTypeEnum, isOptional: true },
|
|
64
|
-
authMethod: { type: AuthTypeEnum, isOptional: true },
|
|
65
|
-
apiVersion: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
|
|
66
|
-
ownershipMode: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
// src/connection/connection.operation.ts
|
|
71
|
-
import { defineCommand } from "@contractspec/lib.contracts-spec/operations";
|
|
72
|
-
var OWNERS = ["@example.integration-hub"];
|
|
73
|
-
var CreateConnectionContract = defineCommand({
|
|
74
|
-
meta: {
|
|
75
|
-
key: "integration.connection.create",
|
|
76
|
-
version: "1.0.0",
|
|
77
|
-
stability: "stable",
|
|
78
|
-
owners: [...OWNERS],
|
|
79
|
-
tags: ["integration", "connection", "create"],
|
|
80
|
-
description: "Create a connection to an external system.",
|
|
81
|
-
goal: "Authenticate with external systems.",
|
|
82
|
-
context: "Connection setup."
|
|
83
|
-
},
|
|
84
|
-
io: { input: CreateConnectionInputModel, output: ConnectionModel },
|
|
85
|
-
policy: { auth: "user" },
|
|
86
|
-
sideEffects: {
|
|
87
|
-
emits: [
|
|
88
|
-
{
|
|
89
|
-
key: "integration.connection.created",
|
|
90
|
-
version: "1.0.0",
|
|
91
|
-
when: "Connection created",
|
|
92
|
-
payload: ConnectionModel
|
|
93
|
-
}
|
|
94
|
-
],
|
|
95
|
-
audit: ["integration.connection.created"]
|
|
96
|
-
},
|
|
97
|
-
acceptance: {
|
|
98
|
-
scenarios: [
|
|
99
|
-
{
|
|
100
|
-
key: "create-connection-happy-path",
|
|
101
|
-
given: ["User is authenticated"],
|
|
102
|
-
when: ["User creates connection with valid credentials"],
|
|
103
|
-
then: ["Connection is created", "ConnectionCreated event is emitted"]
|
|
104
|
-
}
|
|
105
|
-
],
|
|
106
|
-
examples: [
|
|
107
|
-
{
|
|
108
|
-
key: "connect-crm",
|
|
109
|
-
input: {
|
|
110
|
-
name: "Salesforce Prod",
|
|
111
|
-
integrationId: "salesforce",
|
|
112
|
-
credentials: { clientId: "xxx" }
|
|
113
|
-
},
|
|
114
|
-
output: {
|
|
115
|
-
id: "conn-123",
|
|
116
|
-
status: "connected",
|
|
117
|
-
connectedAt: "2025-01-01T12:00:00Z"
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
]
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
export {
|
|
124
|
-
CreateConnectionInputModel,
|
|
125
|
-
CreateConnectionContract,
|
|
126
|
-
ConnectionStatusEnum,
|
|
127
|
-
ConnectionModel
|
|
128
|
-
};
|
|
2
|
+
import{defineEnum as j}from"@contractspec/lib.schema";var k=j("ConnectionStatus",["PENDING","CONNECTED","DISCONNECTED","ERROR","EXPIRED"]),q=j("AuthType",["api_key","oauth2","bearer","header","basic","webhook_signing","service_account"]),v=j("TransportType",["rest","mcp","webhook","sdk"]);import{defineSchemaModel as B,ScalarTypeEnum as C}from"@contractspec/lib.schema";var x=B({name:"ConnectionModel",fields:{id:{type:C.String_unsecure(),isOptional:!1},integrationId:{type:C.String_unsecure(),isOptional:!1},name:{type:C.String_unsecure(),isOptional:!1},status:{type:k,isOptional:!1},authType:{type:C.String_unsecure(),isOptional:!1},externalAccountName:{type:C.String_unsecure(),isOptional:!0},connectedAt:{type:C.DateTime(),isOptional:!0},lastHealthCheck:{type:C.DateTime(),isOptional:!0},healthStatus:{type:C.String_unsecure(),isOptional:!0},transport:{type:v,isOptional:!0},authMethod:{type:q,isOptional:!0},apiVersion:{type:C.String_unsecure(),isOptional:!0},ownershipMode:{type:C.String_unsecure(),isOptional:!0}}}),z=B({name:"CreateConnectionInput",fields:{integrationId:{type:C.String_unsecure(),isOptional:!1},name:{type:C.NonEmptyString(),isOptional:!1},authType:{type:C.NonEmptyString(),isOptional:!1},credentials:{type:C.JSON(),isOptional:!0},transport:{type:v,isOptional:!0},authMethod:{type:q,isOptional:!0},apiVersion:{type:C.String_unsecure(),isOptional:!0},ownershipMode:{type:C.String_unsecure(),isOptional:!0}}});import{defineCommand as D}from"@contractspec/lib.contracts-spec/operations";var F=["@example.integration-hub"],G=D({meta:{key:"integration.connection.create",version:"1.0.0",stability:"stable",owners:[...F],tags:["integration","connection","create"],description:"Create a connection to an external system.",goal:"Authenticate with external systems.",context:"Connection setup."},io:{input:z,output:x},policy:{auth:"user"},sideEffects:{emits:[{key:"integration.connection.created",version:"1.0.0",when:"Connection created",payload:x}],audit:["integration.connection.created"]},acceptance:{scenarios:[{key:"create-connection-happy-path",given:["User is authenticated"],when:["User creates connection with valid credentials"],then:["Connection is created","ConnectionCreated event is emitted"]}],examples:[{key:"connect-crm",input:{name:"Salesforce Prod",integrationId:"salesforce",credentials:{clientId:"xxx"}},output:{id:"conn-123",status:"connected",connectedAt:"2025-01-01T12:00:00Z"}}]}});export{z as CreateConnectionInputModel,G as CreateConnectionContract,k as ConnectionStatusEnum,x as ConnectionModel};
|
package/dist/docs/index.js
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
|
|
3
|
-
import { registerDocBlocks } from "@contractspec/lib.contracts-spec/docs";
|
|
4
|
-
var integrationHubDocBlocks = [
|
|
5
|
-
{
|
|
6
|
-
id: "docs.examples.integration-hub",
|
|
7
|
-
title: "Integration Hub",
|
|
8
|
-
summary: "Generic integration center with connectors, connections, sync configs, field mappings, and sync logs.",
|
|
9
|
-
kind: "reference",
|
|
10
|
-
visibility: "public",
|
|
11
|
-
route: "/docs/examples/integration-hub",
|
|
12
|
-
tags: ["integrations", "sync", "etl", "connectors"],
|
|
13
|
-
body: `## Entities
|
|
2
|
+
import{registerDocBlocks as m}from"@contractspec/lib.contracts-spec/docs";var f=[{id:"docs.examples.integration-hub",title:"Integration Hub",summary:"Generic integration center with connectors, connections, sync configs, field mappings, and sync logs.",kind:"reference",visibility:"public",route:"/docs/examples/integration-hub",tags:["integrations","sync","etl","connectors"],body:`## Entities
|
|
14
3
|
|
|
15
4
|
- Integration, Connection, SyncConfig, FieldMapping, SyncLog.
|
|
16
5
|
- Sync engine config lives in \`src/sync-engine\` to map remote <-> local entities.
|
|
@@ -36,17 +25,7 @@ var integrationHubDocBlocks = [
|
|
|
36
25
|
- Seed data includes voice integrations for \`ai-voice.gradium\` and \`ai-voice.fal\`.
|
|
37
26
|
- Feature flags can gate specific providers; metering can track sync volume.
|
|
38
27
|
- The dashboard tables demonstrate client-mode sorting, pagination, visibility, pinning, resizing, and row expansion on the shared table stack.
|
|
39
|
-
`
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
id: "docs.examples.integration-hub.goal",
|
|
43
|
-
title: "Integration Hub \u2014 Goal",
|
|
44
|
-
summary: "Why this integration hub exists and what success looks like.",
|
|
45
|
-
kind: "goal",
|
|
46
|
-
visibility: "public",
|
|
47
|
-
route: "/docs/examples/integration-hub/goal",
|
|
48
|
-
tags: ["integrations", "goal"],
|
|
49
|
-
body: `## Why it matters
|
|
28
|
+
`},{id:"docs.examples.integration-hub.goal",title:"Integration Hub \u2014 Goal",summary:"Why this integration hub exists and what success looks like.",kind:"goal",visibility:"public",route:"/docs/examples/integration-hub/goal",tags:["integrations","goal"],body:`## Why it matters
|
|
50
29
|
- Gives a regenerable, provider-agnostic integration hub with explicit mappings.
|
|
51
30
|
- Prevents drift between sync configs, mappings, and event/log outputs.
|
|
52
31
|
|
|
@@ -56,17 +35,7 @@ var integrationHubDocBlocks = [
|
|
|
56
35
|
|
|
57
36
|
## Success criteria
|
|
58
37
|
- Connections and mappings regenerate safely after spec edits.
|
|
59
|
-
- Sync events and logs provide auditability; payloads are stored and PII-scoped.`
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
id: "docs.examples.integration-hub.usage",
|
|
63
|
-
title: "Integration Hub \u2014 Usage",
|
|
64
|
-
summary: "How to configure connectors, mappings, and scheduled syncs.",
|
|
65
|
-
kind: "usage",
|
|
66
|
-
visibility: "public",
|
|
67
|
-
route: "/docs/examples/integration-hub/usage",
|
|
68
|
-
tags: ["integrations", "usage"],
|
|
69
|
-
body: `## Setup
|
|
38
|
+
- Sync events and logs provide auditability; payloads are stored and PII-scoped.`},{id:"docs.examples.integration-hub.usage",title:"Integration Hub \u2014 Usage",summary:"How to configure connectors, mappings, and scheduled syncs.",kind:"usage",visibility:"public",route:"/docs/examples/integration-hub/usage",tags:["integrations","usage"],body:`## Setup
|
|
70
39
|
1) Seed integrations/connections (if available) or create connector definitions.
|
|
71
40
|
2) Configure sync jobs with Jobs module; store payload archives via Files.
|
|
72
41
|
3) Use \`src/run-mcp.ts\` to validate MCP connectivity for provider adapters.
|
|
@@ -79,17 +48,7 @@ var integrationHubDocBlocks = [
|
|
|
79
48
|
## Guardrails
|
|
80
49
|
- Keep mappings declarative; avoid hardcoded transforms.
|
|
81
50
|
- Emit events for sync lifecycle; persist logs for audit.
|
|
82
|
-
- Redact sensitive payload paths in presentations.`
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
id: "docs.examples.integration-hub.constraints",
|
|
86
|
-
title: "Integration Hub \u2014 Constraints & Safety",
|
|
87
|
-
summary: "Internal guidance for sync lifecycle, mappings, and regeneration safety.",
|
|
88
|
-
kind: "reference",
|
|
89
|
-
visibility: "internal",
|
|
90
|
-
route: "/docs/examples/integration-hub/constraints",
|
|
91
|
-
tags: ["integrations", "constraints", "internal"],
|
|
92
|
-
body: `## Constraints
|
|
51
|
+
- Redact sensitive payload paths in presentations.`},{id:"docs.examples.integration-hub.constraints",title:"Integration Hub \u2014 Constraints & Safety",summary:"Internal guidance for sync lifecycle, mappings, and regeneration safety.",kind:"reference",visibility:"internal",route:"/docs/examples/integration-hub/constraints",tags:["integrations","constraints","internal"],body:`## Constraints
|
|
93
52
|
- Mappings and sync states must remain declarative in spec; no hidden code transforms.
|
|
94
53
|
- Events to emit at minimum: sync.started, sync.completed, sync.failed; connection.connected/disconnected.
|
|
95
54
|
- Regeneration should not alter retry/backoff semantics without explicit spec change.
|
|
@@ -102,7 +61,4 @@ var integrationHubDocBlocks = [
|
|
|
102
61
|
## Verification
|
|
103
62
|
- Include fixtures for mapping changes and sync retries.
|
|
104
63
|
- Validate that scheduled jobs (cron) are spec-driven; Jobs module wiring intact.
|
|
105
|
-
- Ensure Audit/Notifications receive sync lifecycle events.`
|
|
106
|
-
}
|
|
107
|
-
];
|
|
108
|
-
registerDocBlocks(integrationHubDocBlocks);
|
|
64
|
+
- Ensure Audit/Notifications receive sync lifecycle events.`}];m(f);
|