@contractspec/example.integration-hub 3.8.8 → 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.
Files changed (89) hide show
  1. package/dist/connection/connection.enum.js +1 -29
  2. package/dist/connection/connection.operation.js +1 -124
  3. package/dist/connection/connection.presentation.js +1 -125
  4. package/dist/connection/connection.schema.js +1 -71
  5. package/dist/connection/index.js +1 -127
  6. package/dist/docs/index.js +5 -49
  7. package/dist/docs/integration-hub.docblock.js +5 -49
  8. package/dist/events.js +1 -211
  9. package/dist/example.js +1 -42
  10. package/dist/handlers/index.js +5 -292
  11. package/dist/handlers/integration.handlers.js +5 -292
  12. package/dist/index.js +8 -2355
  13. package/dist/integration/index.js +1 -92
  14. package/dist/integration/integration.enum.js +1 -12
  15. package/dist/integration/integration.operations.js +1 -89
  16. package/dist/integration/integration.presentation.js +1 -120
  17. package/dist/integration/integration.schema.js +1 -42
  18. package/dist/integration-hub.capability.js +1 -43
  19. package/dist/integration-hub.feature.js +1 -330
  20. package/dist/mcp-example.js +1 -154
  21. package/dist/node/connection/connection.enum.js +1 -29
  22. package/dist/node/connection/connection.operation.js +1 -124
  23. package/dist/node/connection/connection.presentation.js +1 -125
  24. package/dist/node/connection/connection.schema.js +1 -71
  25. package/dist/node/connection/index.js +1 -127
  26. package/dist/node/docs/index.js +5 -49
  27. package/dist/node/docs/integration-hub.docblock.js +5 -49
  28. package/dist/node/events.js +1 -211
  29. package/dist/node/example.js +1 -42
  30. package/dist/node/handlers/index.js +5 -292
  31. package/dist/node/handlers/integration.handlers.js +5 -292
  32. package/dist/node/index.js +8 -2355
  33. package/dist/node/integration/index.js +1 -92
  34. package/dist/node/integration/integration.enum.js +1 -12
  35. package/dist/node/integration/integration.operations.js +1 -89
  36. package/dist/node/integration/integration.presentation.js +1 -120
  37. package/dist/node/integration/integration.schema.js +1 -42
  38. package/dist/node/integration-hub.capability.js +1 -43
  39. package/dist/node/integration-hub.feature.js +1 -330
  40. package/dist/node/mcp-example.js +1 -154
  41. package/dist/node/run-mcp.js +1 -159
  42. package/dist/node/seeders/index.js +6 -60
  43. package/dist/node/sync/index.js +1 -332
  44. package/dist/node/sync/sync.enum.js +1 -26
  45. package/dist/node/sync/sync.operations.js +1 -321
  46. package/dist/node/sync/sync.presentation.js +1 -301
  47. package/dist/node/sync/sync.schema.js +1 -154
  48. package/dist/node/sync-engine/index.js +1 -186
  49. package/dist/node/tests/operations.test-spec.js +1 -85
  50. package/dist/node/ui/IntegrationDashboard.js +1 -886
  51. package/dist/node/ui/IntegrationDashboard.visualizations.js +1 -250
  52. package/dist/node/ui/IntegrationHubChat.js +1 -34
  53. package/dist/node/ui/hooks/index.js +1 -57
  54. package/dist/node/ui/hooks/useIntegrationData.js +1 -54
  55. package/dist/node/ui/index.js +4 -1173
  56. package/dist/node/ui/renderers/index.js +4 -484
  57. package/dist/node/ui/renderers/integration.markdown.js +4 -484
  58. package/dist/node/ui/tables/ConnectionsTable.js +1 -211
  59. package/dist/node/ui/tables/IntegrationTables.js +1 -361
  60. package/dist/node/ui/tables/SyncConfigsTable.js +1 -230
  61. package/dist/node/ui/tables/integration-table.shared.js +1 -84
  62. package/dist/node/visualizations/catalog.js +1 -137
  63. package/dist/node/visualizations/index.js +1 -211
  64. package/dist/node/visualizations/selectors.js +1 -204
  65. package/dist/run-mcp.js +1 -159
  66. package/dist/seeders/index.js +6 -60
  67. package/dist/sync/index.js +1 -332
  68. package/dist/sync/sync.enum.js +1 -26
  69. package/dist/sync/sync.operations.js +1 -321
  70. package/dist/sync/sync.presentation.js +1 -301
  71. package/dist/sync/sync.schema.js +1 -154
  72. package/dist/sync-engine/index.js +1 -186
  73. package/dist/tests/operations.test-spec.js +1 -85
  74. package/dist/ui/IntegrationDashboard.js +1 -886
  75. package/dist/ui/IntegrationDashboard.visualizations.js +1 -250
  76. package/dist/ui/IntegrationHubChat.js +1 -34
  77. package/dist/ui/hooks/index.js +1 -57
  78. package/dist/ui/hooks/useIntegrationData.js +1 -54
  79. package/dist/ui/index.js +4 -1173
  80. package/dist/ui/renderers/index.js +4 -484
  81. package/dist/ui/renderers/integration.markdown.js +4 -484
  82. package/dist/ui/tables/ConnectionsTable.js +1 -211
  83. package/dist/ui/tables/IntegrationTables.js +1 -361
  84. package/dist/ui/tables/SyncConfigsTable.js +1 -230
  85. package/dist/ui/tables/integration-table.shared.js +1 -84
  86. package/dist/visualizations/catalog.js +1 -137
  87. package/dist/visualizations/index.js +1 -211
  88. package/dist/visualizations/selectors.js +1 -204
  89. package/package.json +14 -14
@@ -1,321 +1 @@
1
- // src/sync/sync.enum.ts
2
- import { defineEnum } from "@contractspec/lib.schema";
3
- var SyncDirectionEnum = defineEnum("SyncDirection", [
4
- "INBOUND",
5
- "OUTBOUND",
6
- "BIDIRECTIONAL"
7
- ]);
8
- var SyncStatusEnum = defineEnum("SyncStatus", [
9
- "PENDING",
10
- "RUNNING",
11
- "COMPLETED",
12
- "FAILED",
13
- "CANCELLED"
14
- ]);
15
- var MappingTypeEnum = defineEnum("MappingType", [
16
- "DIRECT",
17
- "TRANSFORM",
18
- "LOOKUP",
19
- "CONSTANT",
20
- "COMPUTED"
21
- ]);
22
-
23
- // src/sync/sync.schema.ts
24
- import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
25
- var FieldMappingModel = defineSchemaModel({
26
- name: "FieldMappingModel",
27
- fields: {
28
- id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
29
- sourceField: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
30
- targetField: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
31
- mappingType: { type: MappingTypeEnum, isOptional: false },
32
- transformExpression: {
33
- type: ScalarTypeEnum.String_unsecure(),
34
- isOptional: true
35
- },
36
- isRequired: { type: ScalarTypeEnum.Boolean(), isOptional: false }
37
- }
38
- });
39
- var SyncConfigModel = defineSchemaModel({
40
- name: "SyncConfigModel",
41
- fields: {
42
- id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
43
- integrationId: {
44
- type: ScalarTypeEnum.String_unsecure(),
45
- isOptional: false
46
- },
47
- connectionId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
48
- name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
49
- direction: { type: SyncDirectionEnum, isOptional: false },
50
- sourceObject: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
51
- targetObject: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
52
- scheduleEnabled: { type: ScalarTypeEnum.Boolean(), isOptional: false },
53
- scheduleCron: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
54
- isActive: { type: ScalarTypeEnum.Boolean(), isOptional: false },
55
- lastSyncAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
56
- fieldMappings: { type: FieldMappingModel, isArray: true, isOptional: true }
57
- }
58
- });
59
- var SyncRunModel = defineSchemaModel({
60
- name: "SyncRunModel",
61
- fields: {
62
- id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
63
- syncConfigId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
64
- status: { type: SyncStatusEnum, isOptional: false },
65
- direction: { type: SyncDirectionEnum, isOptional: false },
66
- trigger: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
67
- recordsProcessed: {
68
- type: ScalarTypeEnum.Int_unsecure(),
69
- isOptional: false
70
- },
71
- recordsCreated: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
72
- recordsUpdated: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
73
- recordsFailed: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
74
- errorMessage: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
75
- startedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
76
- completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
77
- createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
78
- }
79
- });
80
- var CreateSyncConfigInputModel = defineSchemaModel({
81
- name: "CreateSyncConfigInput",
82
- fields: {
83
- integrationId: {
84
- type: ScalarTypeEnum.String_unsecure(),
85
- isOptional: false
86
- },
87
- connectionId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
88
- name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
89
- direction: { type: SyncDirectionEnum, isOptional: false },
90
- sourceObject: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
91
- targetObject: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
92
- scheduleEnabled: { type: ScalarTypeEnum.Boolean(), isOptional: true },
93
- scheduleCron: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
94
- }
95
- });
96
- var AddFieldMappingInputModel = defineSchemaModel({
97
- name: "AddFieldMappingInput",
98
- fields: {
99
- syncConfigId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
100
- sourceField: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
101
- targetField: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
102
- mappingType: { type: MappingTypeEnum, isOptional: false },
103
- transformExpression: {
104
- type: ScalarTypeEnum.String_unsecure(),
105
- isOptional: true
106
- },
107
- lookupConfig: { type: ScalarTypeEnum.JSON(), isOptional: true },
108
- constantValue: { type: ScalarTypeEnum.JSON(), isOptional: true },
109
- isRequired: { type: ScalarTypeEnum.Boolean(), isOptional: true },
110
- defaultValue: { type: ScalarTypeEnum.JSON(), isOptional: true }
111
- }
112
- });
113
- var TriggerSyncInputModel = defineSchemaModel({
114
- name: "TriggerSyncInput",
115
- fields: {
116
- syncConfigId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
117
- direction: { type: SyncDirectionEnum, isOptional: true },
118
- fullSync: { type: ScalarTypeEnum.Boolean(), isOptional: true }
119
- }
120
- });
121
- var ListSyncRunsInputModel = defineSchemaModel({
122
- name: "ListSyncRunsInput",
123
- fields: {
124
- syncConfigId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
125
- status: { type: SyncStatusEnum, isOptional: true },
126
- limit: {
127
- type: ScalarTypeEnum.Int_unsecure(),
128
- isOptional: true,
129
- defaultValue: 20
130
- },
131
- offset: {
132
- type: ScalarTypeEnum.Int_unsecure(),
133
- isOptional: true,
134
- defaultValue: 0
135
- }
136
- }
137
- });
138
- var ListSyncRunsOutputModel = defineSchemaModel({
139
- name: "ListSyncRunsOutput",
140
- fields: {
141
- runs: { type: SyncRunModel, isArray: true, isOptional: false },
142
- total: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false }
143
- }
144
- });
145
-
146
- // src/sync/sync.operations.ts
147
- import {
148
- defineCommand,
149
- defineQuery
150
- } from "@contractspec/lib.contracts-spec/operations";
151
- var OWNERS = ["@example.integration-hub"];
152
- var CreateSyncConfigContract = defineCommand({
153
- meta: {
154
- key: "integration.syncConfig.create",
155
- version: "1.0.0",
156
- stability: "stable",
157
- owners: [...OWNERS],
158
- tags: ["integration", "sync", "config", "create"],
159
- description: "Create a sync configuration.",
160
- goal: "Define how data should be synchronized.",
161
- context: "Sync setup."
162
- },
163
- io: { input: CreateSyncConfigInputModel, output: SyncConfigModel },
164
- policy: { auth: "user" },
165
- sideEffects: {
166
- emits: [
167
- {
168
- key: "integration.syncConfig.created",
169
- version: "1.0.0",
170
- when: "Sync config created",
171
- payload: SyncConfigModel
172
- }
173
- ],
174
- audit: ["integration.syncConfig.created"]
175
- },
176
- acceptance: {
177
- scenarios: [
178
- {
179
- key: "create-sync-happy-path",
180
- given: ["User is authenticated"],
181
- when: ["User creates sync config"],
182
- then: ["Sync config is created", "SyncConfigCreated event is emitted"]
183
- }
184
- ],
185
- examples: [
186
- {
187
- key: "create-contact-sync",
188
- input: {
189
- name: "Contacts Sync",
190
- sourceConnectionId: "conn-1",
191
- targetConnectionId: "conn-2"
192
- },
193
- output: { id: "sync-123", status: "active" }
194
- }
195
- ]
196
- }
197
- });
198
- var AddFieldMappingContract = defineCommand({
199
- meta: {
200
- key: "integration.fieldMapping.add",
201
- version: "1.0.0",
202
- stability: "stable",
203
- owners: [...OWNERS],
204
- tags: ["integration", "mapping", "field"],
205
- description: "Add a field mapping to a sync config.",
206
- goal: "Map fields between systems.",
207
- context: "Mapping configuration."
208
- },
209
- io: { input: AddFieldMappingInputModel, output: FieldMappingModel },
210
- policy: { auth: "user" },
211
- sideEffects: {
212
- emits: [
213
- {
214
- key: "integration.fieldMapping.added",
215
- version: "1.0.0",
216
- when: "Mapping added",
217
- payload: FieldMappingModel
218
- }
219
- ]
220
- },
221
- acceptance: {
222
- scenarios: [
223
- {
224
- key: "add-mapping-happy-path",
225
- given: ["Sync config exists"],
226
- when: ["User adds field mapping"],
227
- then: ["Mapping is added", "FieldMappingAdded event is emitted"]
228
- }
229
- ],
230
- examples: [
231
- {
232
- key: "map-email",
233
- input: {
234
- syncConfigId: "sync-123",
235
- sourceField: "email",
236
- targetField: "user_email"
237
- },
238
- output: { id: "map-456", type: "string" }
239
- }
240
- ]
241
- }
242
- });
243
- var TriggerSyncContract = defineCommand({
244
- meta: {
245
- key: "integration.sync.trigger",
246
- version: "1.0.0",
247
- stability: "stable",
248
- owners: [...OWNERS],
249
- tags: ["integration", "sync", "trigger"],
250
- description: "Trigger a manual sync.",
251
- goal: "Start data synchronization.",
252
- context: "Manual sync or webhook trigger."
253
- },
254
- io: { input: TriggerSyncInputModel, output: SyncRunModel },
255
- policy: { auth: "user" },
256
- sideEffects: {
257
- emits: [
258
- {
259
- key: "integration.sync.started",
260
- version: "1.0.0",
261
- when: "Sync starts",
262
- payload: SyncRunModel
263
- }
264
- ],
265
- audit: ["integration.sync.triggered"]
266
- },
267
- acceptance: {
268
- scenarios: [
269
- {
270
- key: "trigger-sync-happy-path",
271
- given: ["Sync config exists"],
272
- when: ["User triggers sync"],
273
- then: ["Sync run starts", "SyncStarted event is emitted"]
274
- }
275
- ],
276
- examples: [
277
- {
278
- key: "manual-trigger",
279
- input: { syncConfigId: "sync-123" },
280
- output: { id: "run-789", status: "pending" }
281
- }
282
- ]
283
- }
284
- });
285
- var ListSyncRunsContract = defineQuery({
286
- meta: {
287
- key: "integration.syncRun.list",
288
- version: "1.0.0",
289
- stability: "stable",
290
- owners: [...OWNERS],
291
- tags: ["integration", "sync", "run", "list"],
292
- description: "List sync run history.",
293
- goal: "View sync history and status.",
294
- context: "Sync monitoring."
295
- },
296
- io: { input: ListSyncRunsInputModel, output: ListSyncRunsOutputModel },
297
- policy: { auth: "user" },
298
- acceptance: {
299
- scenarios: [
300
- {
301
- key: "list-runs-happy-path",
302
- given: ["User has access to syncs"],
303
- when: ["User lists sync runs"],
304
- then: ["List of runs is returned"]
305
- }
306
- ],
307
- examples: [
308
- {
309
- key: "list-recent",
310
- input: { limit: 10 },
311
- output: { items: [], total: 50 }
312
- }
313
- ]
314
- }
315
- });
316
- export {
317
- TriggerSyncContract,
318
- ListSyncRunsContract,
319
- CreateSyncConfigContract,
320
- AddFieldMappingContract
321
- };
1
+ import{defineEnum as O}from"@contractspec/lib.schema";var U=O("SyncDirection",["INBOUND","OUTBOUND","BIDIRECTIONAL"]),P=O("SyncStatus",["PENDING","RUNNING","COMPLETED","FAILED","CANCELLED"]),x=O("MappingType",["DIRECT","TRANSFORM","LOOKUP","CONSTANT","COMPUTED"]);import{defineSchemaModel as D,ScalarTypeEnum as N}from"@contractspec/lib.schema";var A=D({name:"FieldMappingModel",fields:{id:{type:N.String_unsecure(),isOptional:!1},sourceField:{type:N.String_unsecure(),isOptional:!1},targetField:{type:N.String_unsecure(),isOptional:!1},mappingType:{type:x,isOptional:!1},transformExpression:{type:N.String_unsecure(),isOptional:!0},isRequired:{type:N.Boolean(),isOptional:!1}}}),B=D({name:"SyncConfigModel",fields:{id:{type:N.String_unsecure(),isOptional:!1},integrationId:{type:N.String_unsecure(),isOptional:!1},connectionId:{type:N.String_unsecure(),isOptional:!1},name:{type:N.String_unsecure(),isOptional:!1},direction:{type:U,isOptional:!1},sourceObject:{type:N.String_unsecure(),isOptional:!1},targetObject:{type:N.String_unsecure(),isOptional:!1},scheduleEnabled:{type:N.Boolean(),isOptional:!1},scheduleCron:{type:N.String_unsecure(),isOptional:!0},isActive:{type:N.Boolean(),isOptional:!1},lastSyncAt:{type:N.DateTime(),isOptional:!0},fieldMappings:{type:A,isArray:!0,isOptional:!0}}}),I=D({name:"SyncRunModel",fields:{id:{type:N.String_unsecure(),isOptional:!1},syncConfigId:{type:N.String_unsecure(),isOptional:!1},status:{type:P,isOptional:!1},direction:{type:U,isOptional:!1},trigger:{type:N.String_unsecure(),isOptional:!1},recordsProcessed:{type:N.Int_unsecure(),isOptional:!1},recordsCreated:{type:N.Int_unsecure(),isOptional:!1},recordsUpdated:{type:N.Int_unsecure(),isOptional:!1},recordsFailed:{type:N.Int_unsecure(),isOptional:!1},errorMessage:{type:N.String_unsecure(),isOptional:!0},startedAt:{type:N.DateTime(),isOptional:!0},completedAt:{type:N.DateTime(),isOptional:!0},createdAt:{type:N.DateTime(),isOptional:!1}}}),K=D({name:"CreateSyncConfigInput",fields:{integrationId:{type:N.String_unsecure(),isOptional:!1},connectionId:{type:N.String_unsecure(),isOptional:!1},name:{type:N.NonEmptyString(),isOptional:!1},direction:{type:U,isOptional:!1},sourceObject:{type:N.NonEmptyString(),isOptional:!1},targetObject:{type:N.NonEmptyString(),isOptional:!1},scheduleEnabled:{type:N.Boolean(),isOptional:!0},scheduleCron:{type:N.String_unsecure(),isOptional:!0}}}),j=D({name:"AddFieldMappingInput",fields:{syncConfigId:{type:N.String_unsecure(),isOptional:!1},sourceField:{type:N.NonEmptyString(),isOptional:!1},targetField:{type:N.NonEmptyString(),isOptional:!1},mappingType:{type:x,isOptional:!1},transformExpression:{type:N.String_unsecure(),isOptional:!0},lookupConfig:{type:N.JSON(),isOptional:!0},constantValue:{type:N.JSON(),isOptional:!0},isRequired:{type:N.Boolean(),isOptional:!0},defaultValue:{type:N.JSON(),isOptional:!0}}}),k=D({name:"TriggerSyncInput",fields:{syncConfigId:{type:N.String_unsecure(),isOptional:!1},direction:{type:U,isOptional:!0},fullSync:{type:N.Boolean(),isOptional:!0}}}),q=D({name:"ListSyncRunsInput",fields:{syncConfigId:{type:N.String_unsecure(),isOptional:!1},status:{type:P,isOptional:!0},limit:{type:N.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:N.Int_unsecure(),isOptional:!0,defaultValue:0}}}),v=D({name:"ListSyncRunsOutput",fields:{runs:{type:I,isArray:!0,isOptional:!1},total:{type:N.Int_unsecure(),isOptional:!1}}});import{defineCommand as G,defineQuery as w}from"@contractspec/lib.contracts-spec/operations";var L=["@example.integration-hub"],Z=G({meta:{key:"integration.syncConfig.create",version:"1.0.0",stability:"stable",owners:[...L],tags:["integration","sync","config","create"],description:"Create a sync configuration.",goal:"Define how data should be synchronized.",context:"Sync setup."},io:{input:K,output:B},policy:{auth:"user"},sideEffects:{emits:[{key:"integration.syncConfig.created",version:"1.0.0",when:"Sync config created",payload:B}],audit:["integration.syncConfig.created"]},acceptance:{scenarios:[{key:"create-sync-happy-path",given:["User is authenticated"],when:["User creates sync config"],then:["Sync config is created","SyncConfigCreated event is emitted"]}],examples:[{key:"create-contact-sync",input:{name:"Contacts Sync",sourceConnectionId:"conn-1",targetConnectionId:"conn-2"},output:{id:"sync-123",status:"active"}}]}}),_=G({meta:{key:"integration.fieldMapping.add",version:"1.0.0",stability:"stable",owners:[...L],tags:["integration","mapping","field"],description:"Add a field mapping to a sync config.",goal:"Map fields between systems.",context:"Mapping configuration."},io:{input:j,output:A},policy:{auth:"user"},sideEffects:{emits:[{key:"integration.fieldMapping.added",version:"1.0.0",when:"Mapping added",payload:A}]},acceptance:{scenarios:[{key:"add-mapping-happy-path",given:["Sync config exists"],when:["User adds field mapping"],then:["Mapping is added","FieldMappingAdded event is emitted"]}],examples:[{key:"map-email",input:{syncConfigId:"sync-123",sourceField:"email",targetField:"user_email"},output:{id:"map-456",type:"string"}}]}}),$=G({meta:{key:"integration.sync.trigger",version:"1.0.0",stability:"stable",owners:[...L],tags:["integration","sync","trigger"],description:"Trigger a manual sync.",goal:"Start data synchronization.",context:"Manual sync or webhook trigger."},io:{input:k,output:I},policy:{auth:"user"},sideEffects:{emits:[{key:"integration.sync.started",version:"1.0.0",when:"Sync starts",payload:I}],audit:["integration.sync.triggered"]},acceptance:{scenarios:[{key:"trigger-sync-happy-path",given:["Sync config exists"],when:["User triggers sync"],then:["Sync run starts","SyncStarted event is emitted"]}],examples:[{key:"manual-trigger",input:{syncConfigId:"sync-123"},output:{id:"run-789",status:"pending"}}]}}),Q=w({meta:{key:"integration.syncRun.list",version:"1.0.0",stability:"stable",owners:[...L],tags:["integration","sync","run","list"],description:"List sync run history.",goal:"View sync history and status.",context:"Sync monitoring."},io:{input:q,output:v},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-runs-happy-path",given:["User has access to syncs"],when:["User lists sync runs"],then:["List of runs is returned"]}],examples:[{key:"list-recent",input:{limit:10},output:{items:[],total:50}}]}});export{$ as TriggerSyncContract,Q as ListSyncRunsContract,Z as CreateSyncConfigContract,_ as AddFieldMappingContract};
@@ -1,301 +1 @@
1
- // src/sync/sync.enum.ts
2
- import { defineEnum } from "@contractspec/lib.schema";
3
- var SyncDirectionEnum = defineEnum("SyncDirection", [
4
- "INBOUND",
5
- "OUTBOUND",
6
- "BIDIRECTIONAL"
7
- ]);
8
- var SyncStatusEnum = defineEnum("SyncStatus", [
9
- "PENDING",
10
- "RUNNING",
11
- "COMPLETED",
12
- "FAILED",
13
- "CANCELLED"
14
- ]);
15
- var MappingTypeEnum = defineEnum("MappingType", [
16
- "DIRECT",
17
- "TRANSFORM",
18
- "LOOKUP",
19
- "CONSTANT",
20
- "COMPUTED"
21
- ]);
22
-
23
- // src/sync/sync.schema.ts
24
- import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
25
- var FieldMappingModel = defineSchemaModel({
26
- name: "FieldMappingModel",
27
- fields: {
28
- id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
29
- sourceField: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
30
- targetField: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
31
- mappingType: { type: MappingTypeEnum, isOptional: false },
32
- transformExpression: {
33
- type: ScalarTypeEnum.String_unsecure(),
34
- isOptional: true
35
- },
36
- isRequired: { type: ScalarTypeEnum.Boolean(), isOptional: false }
37
- }
38
- });
39
- var SyncConfigModel = defineSchemaModel({
40
- name: "SyncConfigModel",
41
- fields: {
42
- id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
43
- integrationId: {
44
- type: ScalarTypeEnum.String_unsecure(),
45
- isOptional: false
46
- },
47
- connectionId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
48
- name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
49
- direction: { type: SyncDirectionEnum, isOptional: false },
50
- sourceObject: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
51
- targetObject: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
52
- scheduleEnabled: { type: ScalarTypeEnum.Boolean(), isOptional: false },
53
- scheduleCron: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
54
- isActive: { type: ScalarTypeEnum.Boolean(), isOptional: false },
55
- lastSyncAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
56
- fieldMappings: { type: FieldMappingModel, isArray: true, isOptional: true }
57
- }
58
- });
59
- var SyncRunModel = defineSchemaModel({
60
- name: "SyncRunModel",
61
- fields: {
62
- id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
63
- syncConfigId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
64
- status: { type: SyncStatusEnum, isOptional: false },
65
- direction: { type: SyncDirectionEnum, isOptional: false },
66
- trigger: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
67
- recordsProcessed: {
68
- type: ScalarTypeEnum.Int_unsecure(),
69
- isOptional: false
70
- },
71
- recordsCreated: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
72
- recordsUpdated: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
73
- recordsFailed: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
74
- errorMessage: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
75
- startedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
76
- completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
77
- createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false }
78
- }
79
- });
80
- var CreateSyncConfigInputModel = defineSchemaModel({
81
- name: "CreateSyncConfigInput",
82
- fields: {
83
- integrationId: {
84
- type: ScalarTypeEnum.String_unsecure(),
85
- isOptional: false
86
- },
87
- connectionId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
88
- name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
89
- direction: { type: SyncDirectionEnum, isOptional: false },
90
- sourceObject: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
91
- targetObject: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
92
- scheduleEnabled: { type: ScalarTypeEnum.Boolean(), isOptional: true },
93
- scheduleCron: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
94
- }
95
- });
96
- var AddFieldMappingInputModel = defineSchemaModel({
97
- name: "AddFieldMappingInput",
98
- fields: {
99
- syncConfigId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
100
- sourceField: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
101
- targetField: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
102
- mappingType: { type: MappingTypeEnum, isOptional: false },
103
- transformExpression: {
104
- type: ScalarTypeEnum.String_unsecure(),
105
- isOptional: true
106
- },
107
- lookupConfig: { type: ScalarTypeEnum.JSON(), isOptional: true },
108
- constantValue: { type: ScalarTypeEnum.JSON(), isOptional: true },
109
- isRequired: { type: ScalarTypeEnum.Boolean(), isOptional: true },
110
- defaultValue: { type: ScalarTypeEnum.JSON(), isOptional: true }
111
- }
112
- });
113
- var TriggerSyncInputModel = defineSchemaModel({
114
- name: "TriggerSyncInput",
115
- fields: {
116
- syncConfigId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
117
- direction: { type: SyncDirectionEnum, isOptional: true },
118
- fullSync: { type: ScalarTypeEnum.Boolean(), isOptional: true }
119
- }
120
- });
121
- var ListSyncRunsInputModel = defineSchemaModel({
122
- name: "ListSyncRunsInput",
123
- fields: {
124
- syncConfigId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
125
- status: { type: SyncStatusEnum, isOptional: true },
126
- limit: {
127
- type: ScalarTypeEnum.Int_unsecure(),
128
- isOptional: true,
129
- defaultValue: 20
130
- },
131
- offset: {
132
- type: ScalarTypeEnum.Int_unsecure(),
133
- isOptional: true,
134
- defaultValue: 0
135
- }
136
- }
137
- });
138
- var ListSyncRunsOutputModel = defineSchemaModel({
139
- name: "ListSyncRunsOutput",
140
- fields: {
141
- runs: { type: SyncRunModel, isArray: true, isOptional: false },
142
- total: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false }
143
- }
144
- });
145
-
146
- // src/sync/sync.presentation.ts
147
- import {
148
- definePresentation,
149
- StabilityEnum
150
- } from "@contractspec/lib.contracts-spec";
151
- var SyncConfigListPresentation = definePresentation({
152
- meta: {
153
- key: "integration.syncConfig.list",
154
- version: "1.0.0",
155
- title: "Sync Config List",
156
- description: "List of sync configurations",
157
- domain: "integration",
158
- owners: ["@integration-team"],
159
- tags: ["integration", "sync", "config", "list"],
160
- stability: StabilityEnum.Experimental,
161
- goal: "Show users their current sync configurations.",
162
- context: "Management view for data synchronization."
163
- },
164
- source: {
165
- type: "component",
166
- framework: "react",
167
- componentKey: "SyncConfigList",
168
- props: SyncConfigModel
169
- },
170
- targets: ["react", "markdown"],
171
- policy: {
172
- flags: ["integration.sync.enabled"]
173
- }
174
- });
175
- var SyncConfigEditorPresentation = definePresentation({
176
- meta: {
177
- key: "integration.syncConfig.editor",
178
- version: "1.0.0",
179
- title: "Sync Config Editor",
180
- description: "Editor for sync configuration settings",
181
- domain: "integration",
182
- owners: ["@integration-team"],
183
- tags: ["integration", "sync", "config", "editor"],
184
- stability: StabilityEnum.Experimental,
185
- goal: "Allow users to configure schedule, filters, and settings for a sync.",
186
- context: "Configuration interface for sync jobs."
187
- },
188
- source: {
189
- type: "component",
190
- framework: "react",
191
- componentKey: "SyncConfigEditor",
192
- props: SyncConfigModel
193
- },
194
- targets: ["react"],
195
- policy: {
196
- flags: ["integration.sync.enabled"]
197
- }
198
- });
199
- var FieldMappingEditorPresentation = definePresentation({
200
- meta: {
201
- key: "integration.fieldMapping.editor",
202
- version: "1.0.0",
203
- title: "Field Mapping Editor",
204
- description: "Visual field mapping editor",
205
- domain: "integration",
206
- owners: ["@integration-team"],
207
- tags: ["integration", "field-mapping", "editor"],
208
- stability: StabilityEnum.Experimental,
209
- goal: "Allow users to map source fields to target fields visually.",
210
- context: "Schema mapping tool for data consistency."
211
- },
212
- source: {
213
- type: "component",
214
- framework: "react",
215
- componentKey: "FieldMappingEditor",
216
- props: FieldMappingModel
217
- },
218
- targets: ["react"],
219
- policy: {
220
- flags: ["integration.sync.enabled"]
221
- }
222
- });
223
- var SyncRunListPresentation = definePresentation({
224
- meta: {
225
- key: "integration.syncRun.viewList",
226
- version: "1.0.0",
227
- title: "Sync Run History",
228
- description: "History of sync runs",
229
- domain: "integration",
230
- owners: ["@integration-team"],
231
- tags: ["integration", "sync", "runs", "history"],
232
- stability: StabilityEnum.Experimental,
233
- goal: "Provide a historical log of all sync attempts and their results.",
234
- context: "Audit and troubleshooting view for sync jobs."
235
- },
236
- source: {
237
- type: "component",
238
- framework: "react",
239
- componentKey: "SyncRunList",
240
- props: SyncRunModel
241
- },
242
- targets: ["react", "markdown"],
243
- policy: {
244
- flags: ["integration.sync.enabled"]
245
- }
246
- });
247
- var SyncRunDetailPresentation = definePresentation({
248
- meta: {
249
- key: "integration.syncRun.detail",
250
- version: "1.0.0",
251
- title: "Sync Run Details",
252
- description: "Detailed view of a sync run with logs",
253
- domain: "integration",
254
- owners: ["@integration-team"],
255
- tags: ["integration", "sync", "run", "detail"],
256
- stability: StabilityEnum.Experimental,
257
- goal: "Show granular details and logs for a specific sync run.",
258
- context: "Detailed troubleshooting view."
259
- },
260
- source: {
261
- type: "component",
262
- framework: "react",
263
- componentKey: "SyncRunDetail",
264
- props: SyncRunModel
265
- },
266
- targets: ["react", "markdown"],
267
- policy: {
268
- flags: ["integration.sync.enabled"]
269
- }
270
- });
271
- var SyncActivityPresentation = definePresentation({
272
- meta: {
273
- key: "integration.sync.activity",
274
- version: "1.0.0",
275
- title: "Sync Activity Monitor",
276
- description: "Real-time sync activity monitor",
277
- domain: "integration",
278
- owners: ["@integration-team"],
279
- tags: ["integration", "sync", "activity", "realtime"],
280
- stability: StabilityEnum.Experimental,
281
- goal: "Monitor live data flow and sync performance.",
282
- context: "Real-time operations monitor."
283
- },
284
- source: {
285
- type: "component",
286
- framework: "react",
287
- componentKey: "SyncActivity"
288
- },
289
- targets: ["react", "markdown"],
290
- policy: {
291
- flags: ["integration.sync.enabled"]
292
- }
293
- });
294
- export {
295
- SyncRunListPresentation,
296
- SyncRunDetailPresentation,
297
- SyncConfigListPresentation,
298
- SyncConfigEditorPresentation,
299
- SyncActivityPresentation,
300
- FieldMappingEditorPresentation
301
- };
1
+ import{defineEnum as A}from"@contractspec/lib.schema";var L=A("SyncDirection",["INBOUND","OUTBOUND","BIDIRECTIONAL"]),C=A("SyncStatus",["PENDING","RUNNING","COMPLETED","FAILED","CANCELLED"]),x=A("MappingType",["DIRECT","TRANSFORM","LOOKUP","CONSTANT","COMPUTED"]);import{defineSchemaModel as O,ScalarTypeEnum as N}from"@contractspec/lib.schema";var B=O({name:"FieldMappingModel",fields:{id:{type:N.String_unsecure(),isOptional:!1},sourceField:{type:N.String_unsecure(),isOptional:!1},targetField:{type:N.String_unsecure(),isOptional:!1},mappingType:{type:x,isOptional:!1},transformExpression:{type:N.String_unsecure(),isOptional:!0},isRequired:{type:N.Boolean(),isOptional:!1}}}),G=O({name:"SyncConfigModel",fields:{id:{type:N.String_unsecure(),isOptional:!1},integrationId:{type:N.String_unsecure(),isOptional:!1},connectionId:{type:N.String_unsecure(),isOptional:!1},name:{type:N.String_unsecure(),isOptional:!1},direction:{type:L,isOptional:!1},sourceObject:{type:N.String_unsecure(),isOptional:!1},targetObject:{type:N.String_unsecure(),isOptional:!1},scheduleEnabled:{type:N.Boolean(),isOptional:!1},scheduleCron:{type:N.String_unsecure(),isOptional:!0},isActive:{type:N.Boolean(),isOptional:!1},lastSyncAt:{type:N.DateTime(),isOptional:!0},fieldMappings:{type:B,isArray:!0,isOptional:!0}}}),U=O({name:"SyncRunModel",fields:{id:{type:N.String_unsecure(),isOptional:!1},syncConfigId:{type:N.String_unsecure(),isOptional:!1},status:{type:C,isOptional:!1},direction:{type:L,isOptional:!1},trigger:{type:N.String_unsecure(),isOptional:!1},recordsProcessed:{type:N.Int_unsecure(),isOptional:!1},recordsCreated:{type:N.Int_unsecure(),isOptional:!1},recordsUpdated:{type:N.Int_unsecure(),isOptional:!1},recordsFailed:{type:N.Int_unsecure(),isOptional:!1},errorMessage:{type:N.String_unsecure(),isOptional:!0},startedAt:{type:N.DateTime(),isOptional:!0},completedAt:{type:N.DateTime(),isOptional:!0},createdAt:{type:N.DateTime(),isOptional:!1}}}),q=O({name:"CreateSyncConfigInput",fields:{integrationId:{type:N.String_unsecure(),isOptional:!1},connectionId:{type:N.String_unsecure(),isOptional:!1},name:{type:N.NonEmptyString(),isOptional:!1},direction:{type:L,isOptional:!1},sourceObject:{type:N.NonEmptyString(),isOptional:!1},targetObject:{type:N.NonEmptyString(),isOptional:!1},scheduleEnabled:{type:N.Boolean(),isOptional:!0},scheduleCron:{type:N.String_unsecure(),isOptional:!0}}}),v=O({name:"AddFieldMappingInput",fields:{syncConfigId:{type:N.String_unsecure(),isOptional:!1},sourceField:{type:N.NonEmptyString(),isOptional:!1},targetField:{type:N.NonEmptyString(),isOptional:!1},mappingType:{type:x,isOptional:!1},transformExpression:{type:N.String_unsecure(),isOptional:!0},lookupConfig:{type:N.JSON(),isOptional:!0},constantValue:{type:N.JSON(),isOptional:!0},isRequired:{type:N.Boolean(),isOptional:!0},defaultValue:{type:N.JSON(),isOptional:!0}}}),w=O({name:"TriggerSyncInput",fields:{syncConfigId:{type:N.String_unsecure(),isOptional:!1},direction:{type:L,isOptional:!0},fullSync:{type:N.Boolean(),isOptional:!0}}}),z=O({name:"ListSyncRunsInput",fields:{syncConfigId:{type:N.String_unsecure(),isOptional:!1},status:{type:C,isOptional:!0},limit:{type:N.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:N.Int_unsecure(),isOptional:!0,defaultValue:0}}}),F=O({name:"ListSyncRunsOutput",fields:{runs:{type:U,isArray:!0,isOptional:!1},total:{type:N.Int_unsecure(),isOptional:!1}}});import{definePresentation as I,StabilityEnum as D}from"@contractspec/lib.contracts-spec";var V=I({meta:{key:"integration.syncConfig.list",version:"1.0.0",title:"Sync Config List",description:"List of sync configurations",domain:"integration",owners:["@integration-team"],tags:["integration","sync","config","list"],stability:D.Experimental,goal:"Show users their current sync configurations.",context:"Management view for data synchronization."},source:{type:"component",framework:"react",componentKey:"SyncConfigList",props:G},targets:["react","markdown"],policy:{flags:["integration.sync.enabled"]}}),W=I({meta:{key:"integration.syncConfig.editor",version:"1.0.0",title:"Sync Config Editor",description:"Editor for sync configuration settings",domain:"integration",owners:["@integration-team"],tags:["integration","sync","config","editor"],stability:D.Experimental,goal:"Allow users to configure schedule, filters, and settings for a sync.",context:"Configuration interface for sync jobs."},source:{type:"component",framework:"react",componentKey:"SyncConfigEditor",props:G},targets:["react"],policy:{flags:["integration.sync.enabled"]}}),X=I({meta:{key:"integration.fieldMapping.editor",version:"1.0.0",title:"Field Mapping Editor",description:"Visual field mapping editor",domain:"integration",owners:["@integration-team"],tags:["integration","field-mapping","editor"],stability:D.Experimental,goal:"Allow users to map source fields to target fields visually.",context:"Schema mapping tool for data consistency."},source:{type:"component",framework:"react",componentKey:"FieldMappingEditor",props:B},targets:["react"],policy:{flags:["integration.sync.enabled"]}}),Y=I({meta:{key:"integration.syncRun.viewList",version:"1.0.0",title:"Sync Run History",description:"History of sync runs",domain:"integration",owners:["@integration-team"],tags:["integration","sync","runs","history"],stability:D.Experimental,goal:"Provide a historical log of all sync attempts and their results.",context:"Audit and troubleshooting view for sync jobs."},source:{type:"component",framework:"react",componentKey:"SyncRunList",props:U},targets:["react","markdown"],policy:{flags:["integration.sync.enabled"]}}),Z=I({meta:{key:"integration.syncRun.detail",version:"1.0.0",title:"Sync Run Details",description:"Detailed view of a sync run with logs",domain:"integration",owners:["@integration-team"],tags:["integration","sync","run","detail"],stability:D.Experimental,goal:"Show granular details and logs for a specific sync run.",context:"Detailed troubleshooting view."},source:{type:"component",framework:"react",componentKey:"SyncRunDetail",props:U},targets:["react","markdown"],policy:{flags:["integration.sync.enabled"]}}),_=I({meta:{key:"integration.sync.activity",version:"1.0.0",title:"Sync Activity Monitor",description:"Real-time sync activity monitor",domain:"integration",owners:["@integration-team"],tags:["integration","sync","activity","realtime"],stability:D.Experimental,goal:"Monitor live data flow and sync performance.",context:"Real-time operations monitor."},source:{type:"component",framework:"react",componentKey:"SyncActivity"},targets:["react","markdown"],policy:{flags:["integration.sync.enabled"]}});export{Y as SyncRunListPresentation,Z as SyncRunDetailPresentation,V as SyncConfigListPresentation,W as SyncConfigEditorPresentation,_ as SyncActivityPresentation,X as FieldMappingEditorPresentation};