@contractspec/example.integration-hub 1.56.1 → 1.57.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 +9 -19
- package/dist/connection/connection.enum.d.ts +2 -2
- package/dist/connection/connection.enum.d.ts.map +1 -1
- package/dist/connection/connection.operation.d.ts +27 -27
- package/dist/connection/connection.operation.d.ts.map +1 -1
- package/dist/connection/connection.presentation.d.ts.map +1 -1
- package/dist/connection/connection.schema.d.ts +16 -16
- package/dist/connection/connection.schema.d.ts.map +1 -1
- package/dist/docs/integration-hub.docblock.js +1 -0
- package/dist/docs/integration-hub.docblock.js.map +1 -1
- package/dist/events.d.ts +10 -10
- package/dist/events.d.ts.map +1 -1
- package/dist/example.d.ts +2 -2
- package/dist/example.d.ts.map +1 -1
- package/dist/example.js +1 -2
- package/dist/example.js.map +1 -1
- package/dist/handlers/integration.handlers.d.ts +1 -2
- package/dist/handlers/integration.handlers.d.ts.map +1 -1
- package/dist/handlers/integration.handlers.js.map +1 -1
- package/dist/integration/integration.enum.d.ts +2 -2
- package/dist/integration/integration.enum.d.ts.map +1 -1
- package/dist/integration/integration.operations.d.ts +25 -25
- package/dist/integration/integration.operations.d.ts.map +1 -1
- package/dist/integration/integration.presentation.d.ts +4 -4
- package/dist/integration/integration.presentation.d.ts.map +1 -1
- package/dist/integration/integration.schema.d.ts +16 -16
- package/dist/integration/integration.schema.d.ts.map +1 -1
- package/dist/integration-hub.capability.d.ts +4 -4
- package/dist/integration-hub.capability.d.ts.map +1 -1
- package/dist/integration-hub.feature.d.ts +2 -2
- package/dist/integration-hub.feature.d.ts.map +1 -1
- package/dist/seeders/index.d.ts.map +1 -1
- package/dist/seeders/index.js +40 -0
- package/dist/seeders/index.js.map +1 -1
- package/dist/sync/sync.enum.d.ts +4 -4
- package/dist/sync/sync.enum.d.ts.map +1 -1
- package/dist/sync/sync.operations.d.ts +126 -126
- package/dist/sync/sync.operations.d.ts.map +1 -1
- package/dist/sync/sync.presentation.d.ts +7 -7
- package/dist/sync/sync.presentation.d.ts.map +1 -1
- package/dist/sync/sync.schema.d.ts +85 -85
- package/dist/sync/sync.schema.d.ts.map +1 -1
- package/dist/sync-engine/index.d.ts.map +1 -1
- package/dist/tests/operations.test-spec.d.ts +4 -4
- package/dist/tests/operations.test-spec.d.ts.map +1 -1
- package/dist/ui/IntegrationDashboard.d.ts.map +1 -1
- package/dist/ui/hooks/useIntegrationData.d.ts.map +1 -1
- package/dist/ui/renderers/integration.markdown.d.ts +0 -1
- package/dist/ui/renderers/integration.markdown.d.ts.map +1 -1
- package/dist/ui/renderers/integration.markdown.js +14 -0
- package/dist/ui/renderers/integration.markdown.js.map +1 -1
- package/package.json +9 -9
package/README.md
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
Website: https://contractspec.io/
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
A comprehensive integration hub example demonstrating ContractSpec principles for data synchronization.
|
|
7
6
|
|
|
8
7
|
## Features
|
|
9
8
|
|
|
10
9
|
- **Multi-Provider Support**: Connect to various external systems (Salesforce, HubSpot, etc.)
|
|
10
|
+
- **Voice Provider Coverage**: Includes seeded examples for `ai-voice.gradium` and `ai-voice.fal`
|
|
11
|
+
- **Analytics Coverage**: Includes seeded examples for PostHog analytics
|
|
11
12
|
- **Bidirectional Sync**: INBOUND, OUTBOUND, or BIDIRECTIONAL data flow
|
|
12
13
|
- **Field Mapping**: Configurable field mappings with transforms
|
|
13
14
|
- **Sync Engine**: Change detection, deduplication, and error handling
|
|
@@ -18,12 +19,14 @@ A comprehensive integration hub example demonstrating ContractSpec principles fo
|
|
|
18
19
|
## Entities
|
|
19
20
|
|
|
20
21
|
### Core
|
|
22
|
+
|
|
21
23
|
- `Integration` - Integration definition
|
|
22
24
|
- `Connection` - Authenticated connection to external system
|
|
23
25
|
- `SyncConfig` - Sync configuration for object pairs
|
|
24
26
|
- `FieldMapping` - Field-level mapping configuration
|
|
25
27
|
|
|
26
28
|
### Sync Execution
|
|
29
|
+
|
|
27
30
|
- `SyncRun` - A single sync execution
|
|
28
31
|
- `SyncLog` - Log entries for a sync run
|
|
29
32
|
- `SyncRecord` - Tracks synced records for deduplication
|
|
@@ -31,14 +34,17 @@ A comprehensive integration hub example demonstrating ContractSpec principles fo
|
|
|
31
34
|
## Contracts
|
|
32
35
|
|
|
33
36
|
### Integration Management
|
|
37
|
+
|
|
34
38
|
- `integration.create` - Create a new integration
|
|
35
39
|
- `integration.connection.create` - Create a connection
|
|
36
40
|
|
|
37
41
|
### Sync Configuration
|
|
42
|
+
|
|
38
43
|
- `integration.syncConfig.create` - Create sync config
|
|
39
44
|
- `integration.fieldMapping.add` - Add field mapping
|
|
40
45
|
|
|
41
46
|
### Sync Execution
|
|
47
|
+
|
|
42
48
|
- `integration.sync.trigger` - Trigger manual sync
|
|
43
49
|
- `integration.syncRun.list` - List sync history
|
|
44
50
|
|
|
@@ -101,11 +107,11 @@ const result = engine.transformRecord(
|
|
|
101
107
|
## Usage
|
|
102
108
|
|
|
103
109
|
```typescript
|
|
104
|
-
import {
|
|
110
|
+
import {
|
|
105
111
|
CreateIntegrationContract,
|
|
106
112
|
CreateSyncConfigContract,
|
|
107
113
|
TriggerSyncContract,
|
|
108
|
-
integrationHubSchemaContribution
|
|
114
|
+
integrationHubSchemaContribution
|
|
109
115
|
} from '@contractspec/example.integration-hub';
|
|
110
116
|
|
|
111
117
|
// Create integration
|
|
@@ -138,19 +144,3 @@ const run = await executeContract(TriggerSyncContract, {
|
|
|
138
144
|
- `@contractspec/lib.files` - Import/export file handling
|
|
139
145
|
- `@contractspec/lib.jobs` - Background sync jobs
|
|
140
146
|
- `@contractspec/module.audit-trail` - Action auditing
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _contractspec_lib_schema0 from "@contractspec/lib.schema";
|
|
2
2
|
|
|
3
3
|
//#region src/connection/connection.enum.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* Connection status enum.
|
|
6
6
|
*/
|
|
7
|
-
declare const ConnectionStatusEnum:
|
|
7
|
+
declare const ConnectionStatusEnum: _contractspec_lib_schema0.EnumType<[string, string, string, string, string]>;
|
|
8
8
|
//#endregion
|
|
9
9
|
export { ConnectionStatusEnum };
|
|
10
10
|
//# sourceMappingURL=connection.enum.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.enum.d.ts","names":[],"sources":["../../src/connection/connection.enum.ts"],"
|
|
1
|
+
{"version":3,"file":"connection.enum.d.ts","names":[],"sources":["../../src/connection/connection.enum.ts"],"mappings":";;;;;;cAKa,oBAAA,EAMX,yBAAA,CAN+B,QAAA"}
|
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import * as
|
|
1
|
+
import * as _contractspec_lib_contracts0 from "@contractspec/lib.contracts";
|
|
2
|
+
import * as _contractspec_lib_schema0 from "@contractspec/lib.schema";
|
|
3
3
|
|
|
4
4
|
//#region src/connection/connection.operation.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* Create a connection to an external system.
|
|
7
7
|
*/
|
|
8
|
-
declare const CreateConnectionContract:
|
|
8
|
+
declare const CreateConnectionContract: _contractspec_lib_contracts0.OperationSpec<_contractspec_lib_schema0.SchemaModel<{
|
|
9
9
|
integrationId: {
|
|
10
|
-
type:
|
|
10
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
11
11
|
isOptional: false;
|
|
12
12
|
};
|
|
13
13
|
name: {
|
|
14
|
-
type:
|
|
14
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
15
15
|
isOptional: false;
|
|
16
16
|
};
|
|
17
17
|
authType: {
|
|
18
|
-
type:
|
|
18
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
19
19
|
isOptional: false;
|
|
20
20
|
};
|
|
21
21
|
credentials: {
|
|
22
|
-
type:
|
|
22
|
+
type: _contractspec_lib_schema0.FieldType<unknown, unknown>;
|
|
23
23
|
isOptional: true;
|
|
24
24
|
};
|
|
25
|
-
}>,
|
|
25
|
+
}>, _contractspec_lib_schema0.SchemaModel<{
|
|
26
26
|
id: {
|
|
27
|
-
type:
|
|
27
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
28
28
|
isOptional: false;
|
|
29
29
|
};
|
|
30
30
|
integrationId: {
|
|
31
|
-
type:
|
|
31
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
32
32
|
isOptional: false;
|
|
33
33
|
};
|
|
34
34
|
name: {
|
|
35
|
-
type:
|
|
35
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
36
36
|
isOptional: false;
|
|
37
37
|
};
|
|
38
38
|
status: {
|
|
39
|
-
type:
|
|
39
|
+
type: _contractspec_lib_schema0.EnumType<[string, string, string, string, string]>;
|
|
40
40
|
isOptional: false;
|
|
41
41
|
};
|
|
42
42
|
authType: {
|
|
43
|
-
type:
|
|
43
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
44
44
|
isOptional: false;
|
|
45
45
|
};
|
|
46
46
|
externalAccountName: {
|
|
47
|
-
type:
|
|
47
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
48
48
|
isOptional: true;
|
|
49
49
|
};
|
|
50
50
|
connectedAt: {
|
|
51
|
-
type:
|
|
51
|
+
type: _contractspec_lib_schema0.FieldType<Date, string>;
|
|
52
52
|
isOptional: true;
|
|
53
53
|
};
|
|
54
54
|
lastHealthCheck: {
|
|
55
|
-
type:
|
|
55
|
+
type: _contractspec_lib_schema0.FieldType<Date, string>;
|
|
56
56
|
isOptional: true;
|
|
57
57
|
};
|
|
58
58
|
healthStatus: {
|
|
59
|
-
type:
|
|
59
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
60
60
|
isOptional: true;
|
|
61
61
|
};
|
|
62
62
|
}>, {
|
|
63
63
|
key: string;
|
|
64
64
|
version: string;
|
|
65
65
|
when: string;
|
|
66
|
-
payload:
|
|
66
|
+
payload: _contractspec_lib_schema0.SchemaModel<{
|
|
67
67
|
id: {
|
|
68
|
-
type:
|
|
68
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
69
69
|
isOptional: false;
|
|
70
70
|
};
|
|
71
71
|
integrationId: {
|
|
72
|
-
type:
|
|
72
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
73
73
|
isOptional: false;
|
|
74
74
|
};
|
|
75
75
|
name: {
|
|
76
|
-
type:
|
|
76
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
77
77
|
isOptional: false;
|
|
78
78
|
};
|
|
79
79
|
status: {
|
|
80
|
-
type:
|
|
80
|
+
type: _contractspec_lib_schema0.EnumType<[string, string, string, string, string]>;
|
|
81
81
|
isOptional: false;
|
|
82
82
|
};
|
|
83
83
|
authType: {
|
|
84
|
-
type:
|
|
84
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
85
85
|
isOptional: false;
|
|
86
86
|
};
|
|
87
87
|
externalAccountName: {
|
|
88
|
-
type:
|
|
88
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
89
89
|
isOptional: true;
|
|
90
90
|
};
|
|
91
91
|
connectedAt: {
|
|
92
|
-
type:
|
|
92
|
+
type: _contractspec_lib_schema0.FieldType<Date, string>;
|
|
93
93
|
isOptional: true;
|
|
94
94
|
};
|
|
95
95
|
lastHealthCheck: {
|
|
96
|
-
type:
|
|
96
|
+
type: _contractspec_lib_schema0.FieldType<Date, string>;
|
|
97
97
|
isOptional: true;
|
|
98
98
|
};
|
|
99
99
|
healthStatus: {
|
|
100
|
-
type:
|
|
100
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
101
101
|
isOptional: true;
|
|
102
102
|
};
|
|
103
103
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.operation.d.ts","names":[],"sources":["../../src/connection/connection.operation.ts"],"
|
|
1
|
+
{"version":3,"file":"connection.operation.d.ts","names":[],"sources":["../../src/connection/connection.operation.ts"],"mappings":";;;;;;;cAWa,wBAAA,+BAAwB,aAAA,2BAAA,WAAA;;UAiDnC,yBAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;UAjDmC,yBAAA,CAAA,SAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.presentation.d.ts","names":[],"sources":["../../src/connection/connection.presentation.ts"],"
|
|
1
|
+
{"version":3,"file":"connection.presentation.d.ts","names":[],"sources":["../../src/connection/connection.presentation.ts"],"mappings":";;;cAGa,0BAAA,EAuBX,4BAAA,CAvBqC,gBAAA;AAAA,cAyB1B,2BAAA,EAuBX,4BAAA,CAvBsC,gBAAA"}
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _contractspec_lib_schema0 from "@contractspec/lib.schema";
|
|
2
2
|
|
|
3
3
|
//#region src/connection/connection.schema.d.ts
|
|
4
4
|
/**
|
|
5
5
|
* A connection to an external system.
|
|
6
6
|
*/
|
|
7
|
-
declare const ConnectionModel:
|
|
7
|
+
declare const ConnectionModel: _contractspec_lib_schema0.SchemaModel<{
|
|
8
8
|
id: {
|
|
9
|
-
type:
|
|
9
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
10
10
|
isOptional: false;
|
|
11
11
|
};
|
|
12
12
|
integrationId: {
|
|
13
|
-
type:
|
|
13
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
14
14
|
isOptional: false;
|
|
15
15
|
};
|
|
16
16
|
name: {
|
|
17
|
-
type:
|
|
17
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
18
18
|
isOptional: false;
|
|
19
19
|
};
|
|
20
20
|
status: {
|
|
21
|
-
type:
|
|
21
|
+
type: _contractspec_lib_schema0.EnumType<[string, string, string, string, string]>;
|
|
22
22
|
isOptional: false;
|
|
23
23
|
};
|
|
24
24
|
authType: {
|
|
25
|
-
type:
|
|
25
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
26
26
|
isOptional: false;
|
|
27
27
|
};
|
|
28
28
|
externalAccountName: {
|
|
29
|
-
type:
|
|
29
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
30
30
|
isOptional: true;
|
|
31
31
|
};
|
|
32
32
|
connectedAt: {
|
|
33
|
-
type:
|
|
33
|
+
type: _contractspec_lib_schema0.FieldType<Date, string>;
|
|
34
34
|
isOptional: true;
|
|
35
35
|
};
|
|
36
36
|
lastHealthCheck: {
|
|
37
|
-
type:
|
|
37
|
+
type: _contractspec_lib_schema0.FieldType<Date, string>;
|
|
38
38
|
isOptional: true;
|
|
39
39
|
};
|
|
40
40
|
healthStatus: {
|
|
41
|
-
type:
|
|
41
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
42
42
|
isOptional: true;
|
|
43
43
|
};
|
|
44
44
|
}>;
|
|
45
45
|
/**
|
|
46
46
|
* Input for creating a connection.
|
|
47
47
|
*/
|
|
48
|
-
declare const CreateConnectionInputModel:
|
|
48
|
+
declare const CreateConnectionInputModel: _contractspec_lib_schema0.SchemaModel<{
|
|
49
49
|
integrationId: {
|
|
50
|
-
type:
|
|
50
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
51
51
|
isOptional: false;
|
|
52
52
|
};
|
|
53
53
|
name: {
|
|
54
|
-
type:
|
|
54
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
55
55
|
isOptional: false;
|
|
56
56
|
};
|
|
57
57
|
authType: {
|
|
58
|
-
type:
|
|
58
|
+
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
59
59
|
isOptional: false;
|
|
60
60
|
};
|
|
61
61
|
credentials: {
|
|
62
|
-
type:
|
|
62
|
+
type: _contractspec_lib_schema0.FieldType<unknown, unknown>;
|
|
63
63
|
isOptional: true;
|
|
64
64
|
};
|
|
65
65
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.schema.d.ts","names":[],"sources":["../../src/connection/connection.schema.ts"],"
|
|
1
|
+
{"version":3,"file":"connection.schema.d.ts","names":[],"sources":["../../src/connection/connection.schema.ts"],"mappings":";;;;;;cAMa,eAAA,4BAAe,WAAA;;UAmB1B,yBAAA,CAAA,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAKW,0BAAA,4BAA0B,WAAA;;UAWrC,yBAAA,CAAA,SAAA"}
|
|
@@ -38,6 +38,7 @@ registerDocBlocks([
|
|
|
38
38
|
## Notes
|
|
39
39
|
|
|
40
40
|
- Providers remain agnostic; keep mappings declarative for safe regeneration.
|
|
41
|
+
- Seed data includes voice integrations for \`ai-voice.gradium\` and \`ai-voice.fal\`.
|
|
41
42
|
- Feature flags can gate specific providers; metering can track sync volume.
|
|
42
43
|
`
|
|
43
44
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration-hub.docblock.js","names":[],"sources":["../../src/docs/integration-hub.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@contractspec/lib.contracts/docs';\nimport { registerDocBlocks } from '@contractspec/lib.contracts/docs';\n\nconst integrationHubDocBlocks: DocBlock[] = [\n {\n id: 'docs.examples.integration-hub',\n title: 'Integration Hub',\n summary:\n 'Generic integration center with connectors, connections, sync configs, field mappings, and sync logs.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/examples/integration-hub',\n tags: ['integrations', 'sync', 'etl', 'connectors'],\n body: `## Entities\n\n- Integration, Connection, SyncConfig, FieldMapping, SyncLog.\n- Sync engine config lives in \\`src/sync-engine\\` to map remote <-> local entities.\n\n## Contracts\n\n- \\`integration.create\\`, \\`integration.connect\\`, \\`integration.configureSync\\`, \\`integration.mapFields\\`, \\`integration.runSync\\`.\n- Uses Jobs module for scheduled syncs and retries; Files module for payload archives.\n\n## Events\n\n- sync.started/completed/failed, connection.connected/disconnected, mapping.updated.\n- Forward to Notifications and Audit for observability.\n\n## UI / Presentations\n\n- Dashboard, integration list, connection detail, sync config editor.\n- Templates registered as \\`integration-hub\\` in Template Registry.\n\n## Notes\n\n- Providers remain agnostic; keep mappings declarative for safe regeneration.\n- Feature flags can gate specific providers; metering can track sync volume.\n`,\n },\n {\n id: 'docs.examples.integration-hub.goal',\n title: 'Integration Hub — Goal',\n summary: 'Why this integration hub exists and what success looks like.',\n kind: 'goal',\n visibility: 'public',\n route: '/docs/examples/integration-hub/goal',\n tags: ['integrations', 'goal'],\n body: `## Why it matters\n- Gives a regenerable, provider-agnostic integration hub with explicit mappings.\n- Prevents drift between sync configs, mappings, and event/log outputs.\n\n## Business/Product goal\n- Model connectors, connections, sync jobs, and mappings with governance and retries.\n- Support staged provider rollouts via Feature Flags and observability via Audit/Notifications.\n\n## Success criteria\n- Connections and mappings regenerate safely after spec edits.\n- Sync events and logs provide auditability; payloads are stored and PII-scoped.`,\n },\n {\n id: 'docs.examples.integration-hub.usage',\n title: 'Integration Hub — Usage',\n summary: 'How to configure connectors, mappings, and scheduled syncs.',\n kind: 'usage',\n visibility: 'public',\n route: '/docs/examples/integration-hub/usage',\n tags: ['integrations', 'usage'],\n body: `## Setup\n1) Seed integrations/connections (if available) or create connector definitions.\n2) Configure sync jobs with Jobs module; store payload archives via Files.\n\n## Extend & regenerate\n1) Add mapping fields or provider configs in the spec; include validation and PII paths.\n2) Regenerate to align UI/API/events/logs; verify Notifications/Audit hooks.\n3) Gate risky providers behind Feature Flags; meter sync volume if needed.\n\n## Guardrails\n- Keep mappings declarative; avoid hardcoded transforms.\n- Emit events for sync lifecycle; persist logs for audit.\n- Redact sensitive payload paths in presentations.`,\n },\n {\n id: 'docs.examples.integration-hub.constraints',\n title: 'Integration Hub — Constraints & Safety',\n summary:\n 'Internal guidance for sync lifecycle, mappings, and regeneration safety.',\n kind: 'reference',\n visibility: 'internal',\n route: '/docs/examples/integration-hub/constraints',\n tags: ['integrations', 'constraints', 'internal'],\n body: `## Constraints\n- Mappings and sync states must remain declarative in spec; no hidden code transforms.\n- Events to emit at minimum: sync.started, sync.completed, sync.failed; connection.connected/disconnected.\n- Regeneration should not alter retry/backoff semantics without explicit spec change.\n\n## PII & Payloads\n- Treat payload archives as potentially sensitive; mark policy.pii paths.\n- For MCP/web, avoid exposing raw credentials/tokens; store via provider adapters only.\n\n## Verification\n- Include fixtures for mapping changes and sync retries.\n- Validate that scheduled jobs (cron) are spec-driven; Jobs module wiring intact.\n- Ensure Audit/Notifications receive sync lifecycle events.`,\n },\n];\n\nregisterDocBlocks(integrationHubDocBlocks);\n"],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"integration-hub.docblock.js","names":[],"sources":["../../src/docs/integration-hub.docblock.ts"],"sourcesContent":["import type { DocBlock } from '@contractspec/lib.contracts/docs';\nimport { registerDocBlocks } from '@contractspec/lib.contracts/docs';\n\nconst integrationHubDocBlocks: DocBlock[] = [\n {\n id: 'docs.examples.integration-hub',\n title: 'Integration Hub',\n summary:\n 'Generic integration center with connectors, connections, sync configs, field mappings, and sync logs.',\n kind: 'reference',\n visibility: 'public',\n route: '/docs/examples/integration-hub',\n tags: ['integrations', 'sync', 'etl', 'connectors'],\n body: `## Entities\n\n- Integration, Connection, SyncConfig, FieldMapping, SyncLog.\n- Sync engine config lives in \\`src/sync-engine\\` to map remote <-> local entities.\n\n## Contracts\n\n- \\`integration.create\\`, \\`integration.connect\\`, \\`integration.configureSync\\`, \\`integration.mapFields\\`, \\`integration.runSync\\`.\n- Uses Jobs module for scheduled syncs and retries; Files module for payload archives.\n\n## Events\n\n- sync.started/completed/failed, connection.connected/disconnected, mapping.updated.\n- Forward to Notifications and Audit for observability.\n\n## UI / Presentations\n\n- Dashboard, integration list, connection detail, sync config editor.\n- Templates registered as \\`integration-hub\\` in Template Registry.\n\n## Notes\n\n- Providers remain agnostic; keep mappings declarative for safe regeneration.\n- Seed data includes voice integrations for \\`ai-voice.gradium\\` and \\`ai-voice.fal\\`.\n- Feature flags can gate specific providers; metering can track sync volume.\n`,\n },\n {\n id: 'docs.examples.integration-hub.goal',\n title: 'Integration Hub — Goal',\n summary: 'Why this integration hub exists and what success looks like.',\n kind: 'goal',\n visibility: 'public',\n route: '/docs/examples/integration-hub/goal',\n tags: ['integrations', 'goal'],\n body: `## Why it matters\n- Gives a regenerable, provider-agnostic integration hub with explicit mappings.\n- Prevents drift between sync configs, mappings, and event/log outputs.\n\n## Business/Product goal\n- Model connectors, connections, sync jobs, and mappings with governance and retries.\n- Support staged provider rollouts via Feature Flags and observability via Audit/Notifications.\n\n## Success criteria\n- Connections and mappings regenerate safely after spec edits.\n- Sync events and logs provide auditability; payloads are stored and PII-scoped.`,\n },\n {\n id: 'docs.examples.integration-hub.usage',\n title: 'Integration Hub — Usage',\n summary: 'How to configure connectors, mappings, and scheduled syncs.',\n kind: 'usage',\n visibility: 'public',\n route: '/docs/examples/integration-hub/usage',\n tags: ['integrations', 'usage'],\n body: `## Setup\n1) Seed integrations/connections (if available) or create connector definitions.\n2) Configure sync jobs with Jobs module; store payload archives via Files.\n\n## Extend & regenerate\n1) Add mapping fields or provider configs in the spec; include validation and PII paths.\n2) Regenerate to align UI/API/events/logs; verify Notifications/Audit hooks.\n3) Gate risky providers behind Feature Flags; meter sync volume if needed.\n\n## Guardrails\n- Keep mappings declarative; avoid hardcoded transforms.\n- Emit events for sync lifecycle; persist logs for audit.\n- Redact sensitive payload paths in presentations.`,\n },\n {\n id: 'docs.examples.integration-hub.constraints',\n title: 'Integration Hub — Constraints & Safety',\n summary:\n 'Internal guidance for sync lifecycle, mappings, and regeneration safety.',\n kind: 'reference',\n visibility: 'internal',\n route: '/docs/examples/integration-hub/constraints',\n tags: ['integrations', 'constraints', 'internal'],\n body: `## Constraints\n- Mappings and sync states must remain declarative in spec; no hidden code transforms.\n- Events to emit at minimum: sync.started, sync.completed, sync.failed; connection.connected/disconnected.\n- Regeneration should not alter retry/backoff semantics without explicit spec change.\n\n## PII & Payloads\n- Treat payload archives as potentially sensitive; mark policy.pii paths.\n- For MCP/web, avoid exposing raw credentials/tokens; store via provider adapters only.\n\n## Verification\n- Include fixtures for mapping changes and sync retries.\n- Validate that scheduled jobs (cron) are spec-driven; Jobs module wiring intact.\n- Ensure Audit/Notifications receive sync lifecycle events.`,\n },\n];\n\nregisterDocBlocks(integrationHubDocBlocks);\n"],"mappings":";;;AA2GA,kBAxG4C;CAC1C;EACE,IAAI;EACJ,OAAO;EACP,SACE;EACF,MAAM;EACN,YAAY;EACZ,OAAO;EACP,MAAM;GAAC;GAAgB;GAAQ;GAAO;GAAa;EACnD,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BP;CACD;EACE,IAAI;EACJ,OAAO;EACP,SAAS;EACT,MAAM;EACN,YAAY;EACZ,OAAO;EACP,MAAM,CAAC,gBAAgB,OAAO;EAC9B,MAAM;;;;;;;;;;;EAWP;CACD;EACE,IAAI;EACJ,OAAO;EACP,SAAS;EACT,MAAM;EACN,YAAY;EACZ,OAAO;EACP,MAAM,CAAC,gBAAgB,QAAQ;EAC/B,MAAM;;;;;;;;;;;;;EAaP;CACD;EACE,IAAI;EACJ,OAAO;EACP,SACE;EACF,MAAM;EACN,YAAY;EACZ,OAAO;EACP,MAAM;GAAC;GAAgB;GAAe;GAAW;EACjD,MAAM;;;;;;;;;;;;;EAaP;CACF,CAEyC"}
|
package/dist/events.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _contractspec_lib_contracts0 from "@contractspec/lib.contracts";
|
|
2
2
|
import * as _contractspec_lib_schema0 from "@contractspec/lib.schema";
|
|
3
3
|
|
|
4
4
|
//#region src/events.d.ts
|
|
5
|
-
declare const IntegrationCreatedEvent:
|
|
5
|
+
declare const IntegrationCreatedEvent: _contractspec_lib_contracts0.EventSpec<_contractspec_lib_schema0.SchemaModel<{
|
|
6
6
|
integrationId: {
|
|
7
7
|
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
8
8
|
isOptional: false;
|
|
@@ -16,7 +16,7 @@ declare const IntegrationCreatedEvent: _contractspec_lib_contracts1.EventSpec<_c
|
|
|
16
16
|
isOptional: false;
|
|
17
17
|
};
|
|
18
18
|
}>>;
|
|
19
|
-
declare const ConnectionCreatedEvent:
|
|
19
|
+
declare const ConnectionCreatedEvent: _contractspec_lib_contracts0.EventSpec<_contractspec_lib_schema0.SchemaModel<{
|
|
20
20
|
connectionId: {
|
|
21
21
|
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
22
22
|
isOptional: false;
|
|
@@ -34,7 +34,7 @@ declare const ConnectionCreatedEvent: _contractspec_lib_contracts1.EventSpec<_co
|
|
|
34
34
|
isOptional: false;
|
|
35
35
|
};
|
|
36
36
|
}>>;
|
|
37
|
-
declare const ConnectionStatusChangedEvent:
|
|
37
|
+
declare const ConnectionStatusChangedEvent: _contractspec_lib_contracts0.EventSpec<_contractspec_lib_schema0.SchemaModel<{
|
|
38
38
|
connectionId: {
|
|
39
39
|
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
40
40
|
isOptional: false;
|
|
@@ -52,7 +52,7 @@ declare const ConnectionStatusChangedEvent: _contractspec_lib_contracts1.EventSp
|
|
|
52
52
|
isOptional: false;
|
|
53
53
|
};
|
|
54
54
|
}>>;
|
|
55
|
-
declare const SyncConfigCreatedEvent:
|
|
55
|
+
declare const SyncConfigCreatedEvent: _contractspec_lib_contracts0.EventSpec<_contractspec_lib_schema0.SchemaModel<{
|
|
56
56
|
syncConfigId: {
|
|
57
57
|
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
58
58
|
isOptional: false;
|
|
@@ -66,7 +66,7 @@ declare const SyncConfigCreatedEvent: _contractspec_lib_contracts1.EventSpec<_co
|
|
|
66
66
|
isOptional: false;
|
|
67
67
|
};
|
|
68
68
|
}>>;
|
|
69
|
-
declare const SyncStartedEvent:
|
|
69
|
+
declare const SyncStartedEvent: _contractspec_lib_contracts0.EventSpec<_contractspec_lib_schema0.SchemaModel<{
|
|
70
70
|
syncRunId: {
|
|
71
71
|
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
72
72
|
isOptional: false;
|
|
@@ -80,7 +80,7 @@ declare const SyncStartedEvent: _contractspec_lib_contracts1.EventSpec<_contract
|
|
|
80
80
|
isOptional: false;
|
|
81
81
|
};
|
|
82
82
|
}>>;
|
|
83
|
-
declare const SyncCompletedEvent:
|
|
83
|
+
declare const SyncCompletedEvent: _contractspec_lib_contracts0.EventSpec<_contractspec_lib_schema0.SchemaModel<{
|
|
84
84
|
syncRunId: {
|
|
85
85
|
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
86
86
|
isOptional: false;
|
|
@@ -98,7 +98,7 @@ declare const SyncCompletedEvent: _contractspec_lib_contracts1.EventSpec<_contra
|
|
|
98
98
|
isOptional: false;
|
|
99
99
|
};
|
|
100
100
|
}>>;
|
|
101
|
-
declare const SyncFailedEvent:
|
|
101
|
+
declare const SyncFailedEvent: _contractspec_lib_contracts0.EventSpec<_contractspec_lib_schema0.SchemaModel<{
|
|
102
102
|
syncRunId: {
|
|
103
103
|
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
104
104
|
isOptional: false;
|
|
@@ -116,7 +116,7 @@ declare const SyncFailedEvent: _contractspec_lib_contracts1.EventSpec<_contracts
|
|
|
116
116
|
isOptional: false;
|
|
117
117
|
};
|
|
118
118
|
}>>;
|
|
119
|
-
declare const RecordSyncedEvent:
|
|
119
|
+
declare const RecordSyncedEvent: _contractspec_lib_contracts0.EventSpec<_contractspec_lib_schema0.SchemaModel<{
|
|
120
120
|
syncRunId: {
|
|
121
121
|
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
122
122
|
isOptional: false;
|
|
@@ -134,7 +134,7 @@ declare const RecordSyncedEvent: _contractspec_lib_contracts1.EventSpec<_contrac
|
|
|
134
134
|
isOptional: false;
|
|
135
135
|
};
|
|
136
136
|
}>>;
|
|
137
|
-
declare const FieldMappingAddedEvent:
|
|
137
|
+
declare const FieldMappingAddedEvent: _contractspec_lib_contracts0.EventSpec<_contractspec_lib_schema0.SchemaModel<{
|
|
138
138
|
syncConfigId: {
|
|
139
139
|
type: _contractspec_lib_schema0.FieldType<string, string>;
|
|
140
140
|
isOptional: false;
|
package/dist/events.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","names":[],"sources":["../src/events.ts"],"
|
|
1
|
+
{"version":3,"file":"events.d.ts","names":[],"sources":["../src/events.ts"],"mappings":";;;;cAiBa,uBAAA,EAAuB,4BAAA,CAAA,SAAA,2BAAA,WAAA;;UAUlC,yBAAA,CAAA,SAAA;;;;;;;;;;;;cAiBW,sBAAA,EAAsB,4BAAA,CAAA,SAAA,2BAAA,WAAA;;UAUjC,yBAAA,CAAA,SAAA;;;;;;;;;;;;;;;;cAgBW,4BAAA,EAA4B,4BAAA,CAAA,SAAA,2BAAA,WAAA;;UAUvC,yBAAA,CAAA,SAAA;;;;;;;;;;;;;;;;cAaW,sBAAA,EAAsB,4BAAA,CAAA,SAAA,2BAAA,WAAA;;UAUjC,yBAAA,CAAA,SAAA;;;;;;;;;;;;cAaW,gBAAA,EAAgB,4BAAA,CAAA,SAAA,2BAAA,WAAA;;UAU3B,yBAAA,CAAA,SAAA;;;;;;;;;;;;cAgBW,kBAAA,EAAkB,4BAAA,CAAA,SAAA,2BAAA,WAAA;;UAU7B,yBAAA,CAAA,SAAA;;;;;;;;;;;;;;;;cAaW,eAAA,EAAe,4BAAA,CAAA,SAAA,2BAAA,WAAA;;UAU1B,yBAAA,CAAA,SAAA;;;;;;;;;;;;;;;;cAaW,iBAAA,EAAiB,4BAAA,CAAA,SAAA,2BAAA,WAAA;;UAU5B,yBAAA,CAAA,SAAA;;;;;;;;;;;;;;;;cAYW,sBAAA,EAAsB,4BAAA,CAAA,SAAA,2BAAA,WAAA;;UAUjC,yBAAA,CAAA,SAAA"}
|
package/dist/example.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _contractspec_lib_contracts0 from "@contractspec/lib.contracts";
|
|
2
2
|
|
|
3
3
|
//#region src/example.d.ts
|
|
4
|
-
declare const example:
|
|
4
|
+
declare const example: _contractspec_lib_contracts0.ExampleSpec;
|
|
5
5
|
//#endregion
|
|
6
6
|
export { example as default };
|
|
7
7
|
//# sourceMappingURL=example.d.ts.map
|
package/dist/example.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example.d.ts","names":[],"sources":["../src/example.ts"],"
|
|
1
|
+
{"version":3,"file":"example.d.ts","names":[],"sources":["../src/example.ts"],"mappings":";;;cAEM,OAAA,EAoCJ,4BAAA,CApCW,WAAA"}
|
package/dist/example.js
CHANGED
package/dist/example.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example.js","names":[],"sources":["../src/example.ts"],"sourcesContent":["import { defineExample } from '@contractspec/lib.contracts';\n\nconst example = defineExample({\n meta: {\n key: 'integration-hub',\n version: '1.0.0',\n title: 'Integration Hub',\n description:\n 'Provider-agnostic integration center with connectors, connections, field mappings, and sync logs.',\n kind: 'template',\n visibility: 'public',\n stability: 'experimental',\n owners: ['@platform.core'],\n tags: ['integrations', 'sync', 'etl', 'connectors'],\n },\n docs: {\n rootDocId: 'docs.examples.integration-hub',\n goalDocId: 'docs.examples.integration-hub.goal',\n usageDocId: 'docs.examples.integration-hub.usage',\n constraintsDocId: 'docs.examples.integration-hub.constraints',\n },\n entrypoints: {\n packageName: '@contractspec/example.integration-hub',\n feature: './feature',\n contracts: './contracts',\n presentations: './presentations',\n handlers: './handlers',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: {\n enabled: true,\n modes: ['playground', 'specs', 'builder', 'markdown', 'evolution'],\n },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n});\n\nexport default example;\n"],"mappings":";;;AAEA,MAAM,UAAU,cAAc;CAC5B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,MAAM;EACN,YAAY;EACZ,WAAW;EACX,QAAQ,CAAC,iBAAiB;EAC1B,MAAM;GAAC;GAAgB;GAAQ;GAAO;GAAa;EACpD;CACD,MAAM;EACJ,WAAW;EACX,WAAW;EACX,YAAY;EACZ,kBAAkB;EACnB;CACD,aAAa;EACX,aAAa;EACb,SAAS;EACT,WAAW;EACX,eAAe;EACf,UAAU;EACV,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GACP,SAAS;GACT,OAAO;IAAC;IAAc;IAAS;IAAW;IAAY;IAAY;GACnE;EACD,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF,CAAC
|
|
1
|
+
{"version":3,"file":"example.js","names":[],"sources":["../src/example.ts"],"sourcesContent":["import { defineExample } from '@contractspec/lib.contracts';\n\nconst example = defineExample({\n meta: {\n key: 'integration-hub',\n version: '1.0.0',\n title: 'Integration Hub',\n description:\n 'Provider-agnostic integration center with connectors, connections, field mappings, and sync logs.',\n kind: 'template',\n visibility: 'public',\n stability: 'experimental',\n owners: ['@platform.core'],\n tags: ['integrations', 'sync', 'etl', 'connectors'],\n },\n docs: {\n rootDocId: 'docs.examples.integration-hub',\n goalDocId: 'docs.examples.integration-hub.goal',\n usageDocId: 'docs.examples.integration-hub.usage',\n constraintsDocId: 'docs.examples.integration-hub.constraints',\n },\n entrypoints: {\n packageName: '@contractspec/example.integration-hub',\n feature: './feature',\n contracts: './contracts',\n presentations: './presentations',\n handlers: './handlers',\n docs: './docs',\n },\n surfaces: {\n templates: true,\n sandbox: {\n enabled: true,\n modes: ['playground', 'specs', 'builder', 'markdown', 'evolution'],\n },\n studio: { enabled: true, installable: true },\n mcp: { enabled: true },\n },\n});\n\nexport default example;\n"],"mappings":";;;AAEA,MAAM,UAAU,cAAc;CAC5B,MAAM;EACJ,KAAK;EACL,SAAS;EACT,OAAO;EACP,aACE;EACF,MAAM;EACN,YAAY;EACZ,WAAW;EACX,QAAQ,CAAC,iBAAiB;EAC1B,MAAM;GAAC;GAAgB;GAAQ;GAAO;GAAa;EACpD;CACD,MAAM;EACJ,WAAW;EACX,WAAW;EACX,YAAY;EACZ,kBAAkB;EACnB;CACD,aAAa;EACX,aAAa;EACb,SAAS;EACT,WAAW;EACX,eAAe;EACf,UAAU;EACV,MAAM;EACP;CACD,UAAU;EACR,WAAW;EACX,SAAS;GACP,SAAS;GACT,OAAO;IAAC;IAAc;IAAS;IAAW;IAAY;IAAY;GACnE;EACD,QAAQ;GAAE,SAAS;GAAM,aAAa;GAAM;EAC5C,KAAK,EAAE,SAAS,MAAM;EACvB;CACF,CAAC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { DatabasePort } from "@contractspec/lib.runtime-sandbox";
|
|
2
2
|
|
|
3
3
|
//#region src/handlers/integration.handlers.d.ts
|
|
4
|
-
|
|
5
4
|
interface Integration {
|
|
6
5
|
id: string;
|
|
7
6
|
projectId: string;
|
|
8
7
|
organizationId: string;
|
|
9
8
|
name: string;
|
|
10
9
|
description?: string;
|
|
11
|
-
type: 'CRM' | 'MARKETING' | 'PAYMENT' | 'COMMUNICATION' | 'DATA' | 'CUSTOM';
|
|
10
|
+
type: 'CRM' | 'MARKETING' | 'PAYMENT' | 'COMMUNICATION' | 'DATA' | 'ANALYTICS' | 'CUSTOM';
|
|
12
11
|
status: 'ACTIVE' | 'INACTIVE';
|
|
13
12
|
iconUrl?: string;
|
|
14
13
|
createdAt: Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.handlers.d.ts","names":[],"sources":["../../src/handlers/integration.handlers.ts"],"
|
|
1
|
+
{"version":3,"file":"integration.handlers.d.ts","names":[],"sources":["../../src/handlers/integration.handlers.ts"],"mappings":";;;UAYiB,WAAA;EACf,EAAA;EACA,SAAA;EACA,cAAA;EACA,IAAA;EACA,WAAA;EACA,IAAA;EAQA,MAAA;EACA,OAAA;EACA,SAAA,EAAW,IAAA;EACX,SAAA,EAAW,IAAA;AAAA;AAAA,UAGI,UAAA;EACf,EAAA;EACA,aAAA;EACA,IAAA;EACA,MAAA;EACA,WAAA,GAAc,MAAA;EACd,MAAA,GAAS,MAAA;EACT,UAAA,GAAa,IAAA;EACb,YAAA;EACA,SAAA,EAAW,IAAA;EACX,SAAA,EAAW,IAAA;AAAA;AAAA,UAGI,UAAA;EACf,EAAA;EACA,YAAA;EACA,IAAA;EACA,YAAA;EACA,YAAA;EACA,SAAA;EACA,MAAA;EACA,SAAA,GAAY,IAAA;EACZ,aAAA;EACA,aAAA;EACA,SAAA,EAAW,IAAA;EACX,SAAA,EAAW,IAAA;AAAA;AAAA,UAGI,YAAA;EACf,EAAA;EACA,YAAA;EACA,WAAA;EACA,WAAA;EACA,aAAA;EACA,eAAA,GAAkB,MAAA;EAClB,SAAA,EAAW,IAAA;AAAA;AAAA,UAGI,sBAAA;EACf,IAAA;EACA,WAAA;EACA,IAAA,EAAM,WAAA;EACN,OAAA;AAAA;AAAA,UAGe,mBAAA;EACf,aAAA;EACA,IAAA;EACA,WAAA,GAAc,MAAA;EACd,MAAA,GAAS,MAAA;AAAA;AAAA,UAGM,kBAAA;EACf,YAAA;EACA,IAAA;EACA,YAAA;EACA,YAAA;EACA,SAAA,GAAY,UAAA;AAAA;AAAA,UAGG,cAAA;EACf,YAAA;EACA,QAAA;IACE,WAAA;IACA,WAAA;IACA,aAAA,GAAgB,YAAA;IAChB,eAAA,GAAkB,MAAA;EAAA;AAAA;AAAA,UAIL,qBAAA;EACf,SAAA;EACA,IAAA,GAAO,WAAA;EACP,MAAA;EACA,MAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,UAGe,sBAAA;EACf,YAAA,EAAc,WAAA;EACd,KAAA;AAAA;AAAA,UAGe,oBAAA;EACf,aAAA;EACA,MAAA,GAAS,UAAA;EACT,KAAA;EACA,MAAA;AAAA;AAAA,UAGe,qBAAA;EACf,WAAA,EAAa,UAAA;EACb,KAAA;AAAA;AAAA,UAGe,oBAAA;EACf,YAAA;EACA,MAAA,GAAS,UAAA;EACT,KAAA;EACA,MAAA;AAAA;AAAA,UAGe,qBAAA;EACf,OAAA,EAAS,UAAA;EACT,KAAA;AAAA;AAAA,iBAyHc,yBAAA,CAA0B,EAAA,EAAI,YAAA;4BAKnC,qBAAA,KACN,OAAA,CAAQ,sBAAA;6BA8CF,sBAAA,EAAsB,OAAA;IAClB,SAAA;IAAmB,cAAA;EAAA,MAC7B,OAAA,CAAQ,WAAA;2BAgCF,oBAAA,KACN,OAAA,CAAQ,qBAAA;0BAyCF,mBAAA,KACN,OAAA,CAAQ,UAAA;+CAyC6C,OAAA,CAAQ,UAAA;2BAqBvD,oBAAA,KACN,OAAA,CAAQ,qBAAA;yBAwCyB,kBAAA,KAAqB,OAAA,CAAQ,UAAA;qBA+BjC,cAAA,KAAiB,OAAA,CAAQ,YAAA;8CA8CtD,OAAA,CAAQ,YAAA;qCAcmC,OAAA,CAAQ,UAAA;AAAA;AAAA,KAgD5C,mBAAA,GAAsB,UAAA,QAAkB,yBAAA"}
|