@aifabrix/builder 2.52.0 → 2.53.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/lib/api/datasources-extended.api.js +8 -8
- package/lib/api/keycloak.api.js +92 -0
- package/lib/api/token-providers.api.js +77 -0
- package/lib/api/types/keycloak.types.js +23 -0
- package/lib/api/types/token-providers.types.js +65 -0
- package/lib/app/deploy-config.js +3 -2
- package/lib/app/down.js +16 -1
- package/lib/channels/add-channel.js +134 -57
- package/lib/channels/approval-guides/chatgpt.js +1 -1
- package/lib/channels/approval-guides/index.js +3 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +27 -14
- package/lib/channels/channel-add-ensure.js +128 -0
- package/lib/channels/channel-add-existing.js +72 -0
- package/lib/channels/channel-artifact-generator.js +11 -1
- package/lib/channels/channel-branding.js +94 -0
- package/lib/channels/channel-credential.js +8 -0
- package/lib/channels/channel-discovery.js +330 -0
- package/lib/channels/channel-external-system.js +1 -1
- package/lib/channels/channel-runtime-resolver.js +107 -14
- package/lib/channels/channel-status-display.js +36 -3
- package/lib/channels/microsoft-copilot-channel-add.js +138 -0
- package/lib/channels/microsoft-copilot-entra-sso-form.js +251 -0
- package/lib/channels/microsoft-copilot-entra-sso.js +285 -0
- package/lib/channels/microsoft-copilot-icons.js +74 -0
- package/lib/channels/microsoft-copilot-limits.js +103 -0
- package/lib/channels/microsoft-copilot-package.js +178 -52
- package/lib/channels/microsoft-copilot-validate.js +227 -0
- package/lib/cli/attach-default-help-examples.js +102 -0
- package/lib/cli/index.js +4 -0
- package/lib/cli/infra-guided.js +13 -6
- package/lib/cli/setup-credential-deployment.js +7 -5
- package/lib/cli/setup-infra.js +31 -4
- package/lib/cli/setup-utility-validate.js +1 -0
- package/lib/commands/channel-add-setup.js +28 -9
- package/lib/commands/channel.js +14 -10
- package/lib/commands/credential-push.js +37 -5
- package/lib/commands/integration-definition.js +158 -0
- package/lib/commands/package-score.js +72 -0
- package/lib/commands/repair-auth-apply.js +19 -5
- package/lib/commands/repair-datasource-sync-operations.js +4 -1
- package/lib/commands/role-assistant-test-output.js +200 -0
- package/lib/commands/role-assistant.js +163 -166
- package/lib/datasource/capability/capability-resolve.js +15 -5
- package/lib/datasource/capability/copy-operations.js +14 -4
- package/lib/deployment/deployer-poll-run.js +2 -2
- package/lib/deployment/deployer.js +1 -1
- package/lib/deployment/environment.js +2 -2
- package/lib/external-system/deploy.js +11 -21
- package/lib/infrastructure/index.js +19 -4
- package/lib/integration-definition/apply.js +476 -0
- package/lib/integration-definition/canonical-json.js +51 -0
- package/lib/integration-definition/emit-suite-bid.js +94 -0
- package/lib/integration-definition/enrich-crm-field-mappings.js +240 -0
- package/lib/integration-definition/enrich-openapi-operations.js +433 -0
- package/lib/integration-definition/from-discovery.js +339 -0
- package/lib/integration-definition/hash.js +37 -0
- package/lib/integration-definition/index.js +37 -0
- package/lib/integration-definition/resource-type-catalog.js +59 -0
- package/lib/integration-definition/system-kind-enum.js +40 -0
- package/lib/integration-definition/validate.js +148 -0
- package/lib/lab/package-parity-score.js +417 -0
- package/lib/programmatic/builder-api-request.js +5 -1
- package/lib/programmatic/builder-help-governance.js +3 -2
- package/lib/programmatic/capability-registry.js +20 -0
- package/lib/programmatic/help-content/channel-onboarding.md +35 -0
- package/lib/programmatic/help-content/cip-overview.md +27 -0
- package/lib/programmatic/help-content/connected-system-ui.md +70 -0
- package/lib/programmatic/help-content/dimensions-guide.md +23 -0
- package/lib/programmatic/help-content/enterprise-sync-fabrix.md +123 -0
- package/lib/programmatic/help-content/overview.md +25 -0
- package/lib/programmatic/help-content/subscription-guide.md +27 -0
- package/lib/programmatic/help-content/workflow.md +50 -0
- package/lib/programmatic/openapi-component-schemas.js +7 -1
- package/lib/programmatic/openapi-descriptions.js +46 -0
- package/lib/programmatic/openapi-envelope-examples.js +280 -0
- package/lib/programmatic/openapi-operation-bindings.js +50 -0
- package/lib/programmatic/openapi-request-schemas.js +40 -0
- package/lib/programmatic/openapi-result-schemas-overflow.js +101 -0
- package/lib/programmatic/openapi-result-schemas.js +76 -99
- package/lib/programmatic/openapi-schema-descriptions-core.js +25 -4
- package/lib/programmatic/openapi-schema-descriptions-help.js +1 -1
- package/lib/programmatic/openapi-schema-descriptions-operations.js +43 -0
- package/lib/programmatic/openapi-schema-helpers.js +9 -9
- package/lib/programmatic/openapi-spec.js +11 -1
- package/lib/programmatic/orchestration-openapi-meta.js +10 -0
- package/lib/programmatic/persist-supplied-openapi.js +180 -0
- package/lib/programmatic/route-handler-map.js +35 -1
- package/lib/programmatic/run-channel-package.js +236 -0
- package/lib/programmatic/run-integration-definition.js +77 -0
- package/lib/role-assistant/evidence-sync.js +55 -7
- package/lib/role-assistant/knowledge-sync-logging.js +58 -0
- package/lib/role-assistant/knowledge-sync.js +88 -93
- package/lib/role-assistant/test-cases-bid.js +155 -0
- package/lib/role-assistant/test-cases-evaluate.js +9 -1
- package/lib/role-assistant/test-cases-honesty.js +24 -10
- package/lib/role-assistant/test-cases.js +28 -0
- package/lib/role-assistant/test-runner-attachments.js +118 -0
- package/lib/role-assistant/test-runner-bid-apply.js +201 -0
- package/lib/role-assistant/test-runner-bid-document.js +278 -0
- package/lib/role-assistant/test-runner-start-payload.js +96 -0
- package/lib/role-assistant/test-runner-workhub-answers.js +249 -20
- package/lib/role-assistant/test-runner-workhub-helpers.js +100 -0
- package/lib/role-assistant/test-runner-workhub-soft.js +86 -0
- package/lib/role-assistant/test-runner-workhub.js +152 -107
- package/lib/role-assistant/test-runner.js +5 -63
- package/lib/role-assistant/test-suite.js +112 -0
- package/lib/schema/application-schema.json +56 -6
- package/lib/schema/external-datasource.schema.json +103 -17
- package/lib/schema/external-system.schema.json +54 -3
- package/lib/schema/integration-definition.schema.json +195 -0
- package/lib/utils/authentication-shape.js +6 -0
- package/lib/utils/compose-generator.js +10 -1
- package/lib/utils/compose-traefik-extra-routes.js +107 -0
- package/lib/utils/docker-build.js +2 -2
- package/lib/utils/help-builder.js +3 -1
- package/lib/utils/promote-dev-docker-image.js +102 -18
- package/lib/utils/transient-developer-id.js +28 -0
- package/package.json +14 -16
- package/templates/README.md +12 -1
- package/templates/applications/dataplane/application.yaml +10 -2
- package/templates/applications/dataplane/env.template +7 -6
- package/templates/applications/miso-controller/application.yaml +23 -8
- package/templates/applications/miso-controller/env.template +8 -2
- package/templates/applications/miso-controller/rbac.yaml +1 -0
- package/templates/channels/README.md +11 -1
- package/templates/channels/brand/color-192.png +0 -0
- package/templates/channels/brand/dark/128.png +0 -0
- package/templates/channels/brand/dark/192.png +0 -0
- package/templates/channels/brand/dark/256.png +0 -0
- package/templates/channels/brand/dark/32.png +0 -0
- package/templates/channels/brand/dark/512.png +0 -0
- package/templates/channels/brand/dark/64.png +0 -0
- package/templates/channels/brand/light/128.png +0 -0
- package/templates/channels/brand/light/192.png +0 -0
- package/templates/channels/brand/light/256.png +0 -0
- package/templates/channels/brand/light/32.png +0 -0
- package/templates/channels/brand/light/512.png +0 -0
- package/templates/channels/brand/light/64.png +0 -0
- package/templates/channels/brand/mono-white/128.png +0 -0
- package/templates/channels/brand/mono-white/192.png +0 -0
- package/templates/channels/brand/mono-white/256.png +0 -0
- package/templates/channels/brand/mono-white/32.png +0 -0
- package/templates/channels/brand/mono-white/512.png +0 -0
- package/templates/channels/brand/mono-white/64.png +0 -0
- package/templates/channels/brand/outline-32.png +0 -0
- package/templates/channels/chatgpt/install.template.md.hbs +6 -4
- package/templates/channels/chatgpt/integration/README.md +4 -5
- package/templates/channels/chatgpt/integration/chatgpt-system.json +1 -16
- package/templates/channels/microsoft-copilot/ai-plugin.template.json.hbs +14 -16
- package/templates/channels/microsoft-copilot/declarative-agent.template.json.hbs +5 -3
- package/templates/channels/microsoft-copilot/entra-sso-registration.template.md.hbs +30 -0
- package/templates/channels/microsoft-copilot/fi-fi.template.json.hbs +7 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +93 -22
- package/templates/channels/microsoft-copilot/integration/README.md +2 -3
- package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +1 -22
- package/templates/channels/microsoft-copilot/manifest.template.json.hbs +34 -19
- package/templates/channels/microsoft-copilot/oauth-plugin-vault-required.template.md.hbs +15 -0
- package/templates/channels/slack/integration/README.md +2 -4
- package/templates/channels/teams-bot/install.template.md.hbs +4 -0
- package/templates/channels/teams-bot/integration/README.md +3 -5
- package/templates/channels/web-embed/integration/web-embed-system.json +1 -16
- package/templates/python/docker-compose.hbs +36 -0
- package/templates/typescript/docker-compose.hbs +36 -0
- package/.cursor/plans/Done/157.1-security-quality-violations-by-type.csv +0 -374
- package/.cursor/process/README.md +0 -9
- package/.cursor/rules/anchor-docs.mdc +0 -15
- package/.cursor/rules/assistant-driven-integration-build.mdc +0 -40
- package/.cursor/rules/cli-layout.mdc +0 -81
- package/.cursor/rules/cli-product-neutral.mdc +0 -43
- package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +0 -49
- package/.cursor/rules/docs-rules.mdc +0 -32
- package/.cursor/rules/plan-rules/application-lifecycle.mdc +0 -30
- package/.cursor/rules/plan-rules/plan-frontmatter.mdc +0 -35
- package/.cursor/rules/plan-rules/plan-lifecycle.mdc +0 -31
- package/.cursor/rules/plan-rules/plan-validation-gate.mdc +0 -34
- package/.cursor/rules/project-rules.mdc +0 -913
- package/.cursor/skills/README.md +0 -15
- package/.dockerignore +0 -52
- package/.eslintignore +0 -22
- package/.markdownlint.json +0 -14
- package/anchor-docs/README.md +0 -10
- package/anchor-docs/_TEMPLATE +0 -24
- package/babel.config.js +0 -6
- package/bin/builder-api-cleanup.js +0 -26
- package/bin/builder-api-nest.js +0 -10
- package/bin/builder-api-spike.js +0 -19
- package/enterprise-knowledge/README.md +0 -50
- package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +0 -22
- package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +0 -15
- package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +0 -69
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +0 -52
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +0 -29
- package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +0 -2
- package/integration/README.md +0 -81
- package/integration/github/README.md +0 -53
- package/integration/github/application.json +0 -21
- package/integration/github/deploy.js +0 -72
- package/integration/github/env.template +0 -11
- package/integration/github/github-datasource-issue-comments.json +0 -239
- package/integration/github/github-datasource-issues.json +0 -399
- package/integration/github/github-datasource-repository.json +0 -354
- package/integration/github/github-deploy.json +0 -1202
- package/integration/github/github-system.json +0 -82
- package/integration/hubspot-test/README.md +0 -159
- package/integration/hubspot-test/application.json +0 -54
- package/integration/hubspot-test/companies.json +0 -2048
- package/integration/hubspot-test/create-hubspot.js +0 -523
- package/integration/hubspot-test/env.template +0 -4
- package/integration/hubspot-test/hubspot-test-datasource-company.json +0 -138
- package/integration/hubspot-test/hubspot-test-datasource-contact.json +0 -146
- package/integration/hubspot-test/hubspot-test-datasource-deal.json +0 -146
- package/integration/hubspot-test/hubspot-test-datasource-users.json +0 -76
- package/integration/hubspot-test/hubspot-test-deploy.json +0 -2160
- package/integration/hubspot-test/hubspot-test-system.json +0 -74
- package/integration/hubspot-test/rbac.json +0 -166
- package/integration/hubspot-test/test-artifacts/wizard-hubspot-credential-real.yaml +0 -20
- package/integration/hubspot-test/test-artifacts/wizard-hubspot-env-vars.yaml +0 -9
- package/integration/hubspot-test/test-artifacts/wizard-invalid-add-datasource.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-app-name.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-credential-create.yaml +0 -7
- package/integration/hubspot-test/test-artifacts/wizard-invalid-credential-select.yaml +0 -7
- package/integration/hubspot-test/test-artifacts/wizard-invalid-known-platform.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-app.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-source.yaml +0 -2
- package/integration/hubspot-test/test-artifacts/wizard-invalid-mode.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-openapi-file.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-invalid-openapi-url.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-invalid-source.yaml +0 -4
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-array-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-key-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-path-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-rbac-test.yaml +0 -5
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-rbac-yaml-test.yaml +0 -5
- package/integration/hubspot-test/test-dataplane-down-helpers.js +0 -249
- package/integration/hubspot-test/test-dataplane-down-tests.js +0 -386
- package/integration/hubspot-test/test-dataplane-down.js +0 -209
- package/integration/hubspot-test/test.js +0 -1588
- package/integration/hubspot-test/wizard-hubspot-e2e.yaml +0 -16
- package/integration/hubspot-test/wizard-hubspot-platform.yaml +0 -8
- package/integration/hubspot-test/wizard-hubspot-test-headless.yaml +0 -23
- package/integration/roundtrip-test-local/README.md +0 -143
- package/integration/roundtrip-test-local/application.yaml +0 -13
- package/integration/roundtrip-test-local/env.template +0 -15
- package/integration/roundtrip-test-local/roundtrip-test-local-datasource-roundtrip-test-company.yaml +0 -14
- package/integration/roundtrip-test-local/roundtrip-test-local-deploy.json +0 -61
- package/integration/roundtrip-test-local/roundtrip-test-local-system.yaml +0 -25
- package/integration/roundtrip-test-local2/README.md +0 -143
- package/integration/roundtrip-test-local2/application.yaml +0 -13
- package/integration/roundtrip-test-local2/env.template +0 -15
- package/integration/roundtrip-test-local2/roundtrip-test-local2-datasource-company.yaml +0 -31
- package/integration/roundtrip-test-local2/roundtrip-test-local2-deploy.json +0 -86
- package/integration/roundtrip-test-local2/roundtrip-test-local2-system.yaml +0 -25
- package/integration/test/wizard.yaml +0 -8
- package/jest.config.coverage.js +0 -37
- package/jest.config.default.js +0 -11
- package/jest.config.integration.fixtures.js +0 -22
- package/jest.config.integration.js +0 -33
- package/jest.config.isolated.js +0 -11
- package/jest.config.manual.js +0 -30
- package/jest.global-live-fabrix-hooks.js +0 -36
- package/jest.isolated-projects.js +0 -260
- package/jest.projects.js +0 -76
- package/packages/builder-api/README.md +0 -120
- package/packages/builder-api/package.json +0 -30
- package/packages/builder-api/src/app.module.ts +0 -7
- package/packages/builder-api/src/auth/auth.module.ts +0 -5
- package/packages/builder-api/src/external-system/external-system.module.ts +0 -5
- package/packages/builder-api/src/main.ts +0 -16
- package/packages/builder-api/tsconfig.json +0 -15
- package/scripts/check-builder-api-architecture-grep.js +0 -79
- package/scripts/check-datasource-test-run-schema-sync.js +0 -34
- package/scripts/ci-fix.sh +0 -19
- package/scripts/ci-simulate.sh +0 -19
- package/scripts/diagnose-cli.js +0 -150
- package/scripts/docker_image_content_gate.js +0 -47
- package/scripts/docker_image_content_gate.sh +0 -5
- package/scripts/export-builder-api-evidence.js +0 -262
- package/scripts/install-local.js +0 -490
- package/scripts/lib/builder-api-docker-staging-copy.js +0 -60
- package/scripts/lib/builder-api-docker-staging-core.js +0 -183
- package/scripts/lib/docker-image-content-gate-core.js +0 -166
- package/scripts/lib/plan-actor.js +0 -109
- package/scripts/lib/plan-config.js +0 -20
- package/scripts/lib/plan-gates.js +0 -154
- package/scripts/lib/plan-meta.js +0 -104
- package/scripts/lib/plan-parse.js +0 -162
- package/scripts/lib/plan-prevalidate-gates.js +0 -337
- package/scripts/lib/plan-run-core.js +0 -125
- package/scripts/lib/plan-run-report.js +0 -119
- package/scripts/plan-approve.js +0 -24
- package/scripts/plan-archive.js +0 -49
- package/scripts/plan-run.js +0 -13
- package/scripts/plan-set-actor.js +0 -21
- package/scripts/plan-validate.js +0 -80
- package/scripts/pnpm/af.mjs +0 -110
- package/scripts/pnpm/check-quiet.mjs +0 -32
- package/scripts/pnpm/dev-install.mjs +0 -29
- package/scripts/pnpm/dev-reload.mjs +0 -18
- package/scripts/pnpm/help.mjs +0 -55
- package/scripts/pnpm/lib/dev-reload-core.mjs +0 -189
- package/scripts/pnpm/lib/dev-reload-log-capture.mjs +0 -67
- package/scripts/pnpm/lib/dev-reload-log-utils.mjs +0 -32
- package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +0 -124
- package/scripts/pnpm/lib/resolve-app-url.mjs +0 -183
- package/scripts/pnpm/lib/spinner.mjs +0 -42
- package/scripts/pnpm-global-remove.js +0 -48
- package/scripts/stage_builder_api_for_docker.js +0 -65
- package/scripts/sync-builder-api-template.js +0 -44
- package/scripts/test-dataplane-bootstrap.js +0 -331
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Enterprise Synchronization Fabrix
|
|
2
|
+
|
|
3
|
+
Webhook change signals and syncBridge propagation connect vendor events to governed CIP sync without a separate webhook engine.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
| Concept | Role |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| **webhook** | Inbound vendor POST trigger only — records WebhookDelivery and may create SyncIntent |
|
|
10
|
+
| **syncBridge** | Resource-type propagation mode (`disabled`, `master`, `bidirectional`) across datasources |
|
|
11
|
+
| **CIP get** | Business data always loaded via existing get operations and fieldMappings |
|
|
12
|
+
|
|
13
|
+
Webhook does not carry full record payloads for sync. The coordinator runs CIP get after a valid trigger.
|
|
14
|
+
|
|
15
|
+
## authentications[] usage slots
|
|
16
|
+
|
|
17
|
+
Declare multiple authentication slots on the **external system** manifest (`authentications[]`), not on datasource files:
|
|
18
|
+
|
|
19
|
+
| usage | Purpose |
|
|
20
|
+
| --- | --- |
|
|
21
|
+
| `api` | Outbound vendor API calls (default slot) |
|
|
22
|
+
| `webhookInbound` | Validates inbound vendor webhook signatures or API keys |
|
|
23
|
+
| `syncExecution` | Credentials for syncBridge propagation CIP calls |
|
|
24
|
+
|
|
25
|
+
Example structure (YAML):
|
|
26
|
+
|
|
27
|
+
```yaml
|
|
28
|
+
authentications:
|
|
29
|
+
- key: default
|
|
30
|
+
usage: api
|
|
31
|
+
authType: credential
|
|
32
|
+
credential:
|
|
33
|
+
method: apikey
|
|
34
|
+
security:
|
|
35
|
+
apiKey: kv://my-app/apiKey
|
|
36
|
+
- key: webhookInbound
|
|
37
|
+
usage: webhookInbound
|
|
38
|
+
authType: credential
|
|
39
|
+
credential:
|
|
40
|
+
method: hmac
|
|
41
|
+
security:
|
|
42
|
+
signingSecret: kv://my-app/webhookSigningSecret
|
|
43
|
+
- key: syncExecution
|
|
44
|
+
usage: syncExecution
|
|
45
|
+
authType: credential
|
|
46
|
+
credential:
|
|
47
|
+
method: apikey
|
|
48
|
+
security:
|
|
49
|
+
apiKey: kv://my-app/syncApiKey
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Repair helpers:
|
|
53
|
+
|
|
54
|
+
- `aifabrix repair <systemKey>` — normalize legacy `authentication` to `authentications[]`
|
|
55
|
+
- `aifabrix repair <systemKey> --auth apikey` — repair the default **api** slot only
|
|
56
|
+
- `aifabrix repair <systemKey> --auth-webhook` — add webhookInbound slot from template
|
|
57
|
+
- `aifabrix repair <systemKey> --auth-sync` — add syncExecution slot from template
|
|
58
|
+
|
|
59
|
+
## Datasource webhook block
|
|
60
|
+
|
|
61
|
+
Minimal enabled configuration on a datasource manifest:
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
webhook:
|
|
65
|
+
enabled: true
|
|
66
|
+
endpointMode: datasource
|
|
67
|
+
events:
|
|
68
|
+
- company.updated
|
|
69
|
+
idPath: $.objectId
|
|
70
|
+
vendorDeliveryIdPath: $.deliveryId
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
| Field | Notes |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| `endpointMode` | `system`, `datasource`, or `event` — controls generated POST path |
|
|
76
|
+
| `events` | Vendor event names that create SyncIntent |
|
|
77
|
+
| `idPath` | JSONPath to vendor object id in payload |
|
|
78
|
+
| `eventTypePath` | Required when multiple `events` and mode is not `event` |
|
|
79
|
+
| `vendorDeliveryIdPath` | Payload JSONPath for idempotent dedupe |
|
|
80
|
+
|
|
81
|
+
Generated receiver paths (first-party dataplane API):
|
|
82
|
+
|
|
83
|
+
- System: `POST /api/v1/webhooks/{systemKey}`
|
|
84
|
+
- Datasource: `POST /api/v1/webhooks/{systemKey}/{datasourceKey}`
|
|
85
|
+
- Event: `POST /api/v1/webhooks/{systemKey}/{datasourceKey}/{eventKey}`
|
|
86
|
+
|
|
87
|
+
Signature and API-key **headers** belong on the webhookInbound credential only — not on the datasource webhook block.
|
|
88
|
+
|
|
89
|
+
## syncBridge modes
|
|
90
|
+
|
|
91
|
+
| Mode | Behavior |
|
|
92
|
+
| --- | --- |
|
|
93
|
+
| `disabled` | Default — no propagation |
|
|
94
|
+
| `master` | Authoritative source for a resourceType; receives webhook triggers |
|
|
95
|
+
| `bidirectional` | Participates in propagation; exactly one master per resourceType |
|
|
96
|
+
|
|
97
|
+
When syncBridge is not `disabled`, ensure `metadataSchema.properties.externalId` exists for routing.
|
|
98
|
+
|
|
99
|
+
## Activation workflow
|
|
100
|
+
|
|
101
|
+
1. Edit system + datasource manifests (authentications[], webhook, syncBridge).
|
|
102
|
+
2. Run `aifabrix validate <app>` and `aifabrix repair <systemKey>` as needed.
|
|
103
|
+
3. Run `aifabrix upload <app>` to publish.
|
|
104
|
+
4. Open Connected Systems **Authentication** — add live secrets for each usage slot.
|
|
105
|
+
5. Open datasource **Sync** tab — use **How to activate webhook** for operator copy/paste URLs.
|
|
106
|
+
6. Run certification / test-e2e after credentials are live.
|
|
107
|
+
|
|
108
|
+
UI displays webhook and syncBridge config as **read-only**; manifest and API remain SSOT.
|
|
109
|
+
|
|
110
|
+
## Validate and certification
|
|
111
|
+
|
|
112
|
+
- `aifabrix validate <app>` — schema + cross-field rules for webhook and syncBridge
|
|
113
|
+
- Dataplane certification readiness — webhookInbound auth, idPath, syncBridge master uniqueness
|
|
114
|
+
|
|
115
|
+
## Logs and troubleshooting
|
|
116
|
+
|
|
117
|
+
After webhook POST, inspect datasource **Logs** tab for CIP execution traces. SyncIntent and coordinator outcomes appear in execution audit — no separate webhook log API.
|
|
118
|
+
|
|
119
|
+
## Related help topics
|
|
120
|
+
|
|
121
|
+
- `connectedSystemUi` — post-upload Authentication and Sync tab URLs
|
|
122
|
+
- `workflow` — validate → upload → handoff ladder
|
|
123
|
+
- `schemaCatalog` — manifest property reference
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Builder manifest editing overview
|
|
2
|
+
|
|
3
|
+
The Builder API exposes governed manifest sections for external integrations. Agents read one section at a time, resolve missing inputs with the user, patch with explicit intent, repair derived sections, then validate and test the workspace draft.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
Help agents and MCP tools bootstrap without guessing manifest structure. Structured topics describe section keys, dependency order, repair hooks, workflow rules, golden patterns, and evidence expectations.
|
|
8
|
+
|
|
9
|
+
## Core concepts
|
|
10
|
+
|
|
11
|
+
### Governed sections
|
|
12
|
+
|
|
13
|
+
Manifests split into section keys for the external system and each datasource. Each section has schema fragments, mutability rules, and optional repair hooks.
|
|
14
|
+
|
|
15
|
+
### Section quality
|
|
16
|
+
|
|
17
|
+
Every section read returns a quality score, missing-input questions, blocking issues, and recommended next actions. Required missing inputs must be collected from the user before patching.
|
|
18
|
+
|
|
19
|
+
### Dependency graph
|
|
20
|
+
|
|
21
|
+
Some sections derive from others. After patching metadata or capabilities, run explicit repair hooks so field mappings, exposure, and RBAC stay aligned.
|
|
22
|
+
|
|
23
|
+
## Getting started
|
|
24
|
+
|
|
25
|
+
Call the help endpoint with topic overview, then workflow, then schemaCatalog or sections. Use topic section with a sectionKey when editing a specific area. Use subscriptionGuide and cipOverview for subscriptions and execution depth. Use enterpriseSyncFabrix for webhook change signals and syncBridge propagation. After upload, use connectedSystemUi for shareable dataplane UI paths and post-upload authentication handoff.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Subscription and role-scoped generation guide
|
|
2
|
+
|
|
3
|
+
Subscriptions on the external system manifest bootstrap platform tasks when records change or after publish. They connect certified datasources to role assistants without a separate workflow engine.
|
|
4
|
+
|
|
5
|
+
## Where subscriptions live
|
|
6
|
+
|
|
7
|
+
Edit the system.subscriptions section. Each entry has a unique key, optional filter conditions, a task type, and optional runOnPublish flag.
|
|
8
|
+
|
|
9
|
+
Datasource manifests may declare subscriptionFilter to scope which role keys, system kinds, resource types, or datasource keys participate in generation.
|
|
10
|
+
|
|
11
|
+
## Normalized record events
|
|
12
|
+
|
|
13
|
+
Vendor sync and pipeline execution emit normalized events only: record insert, update, delete, and sync completed. Subscription conditions reference generic field paths such as after.status with operators equals, in, changed, exists, and missing.
|
|
14
|
+
|
|
15
|
+
## Role and resource scoping
|
|
16
|
+
|
|
17
|
+
Scope resourceTypes to business tokens on the datasource, such as company or deal, not generic placeholders. Match subscription filters to the same resourceType declared on each datasource.
|
|
18
|
+
|
|
19
|
+
For document libraries linked to CRM records, declare foreignKeys on the library datasource and use a business resourceType on that datasource. Exclude generic document resource types from role assistant subscription filters when business libraries exist.
|
|
20
|
+
|
|
21
|
+
## Editing workflow
|
|
22
|
+
|
|
23
|
+
Read system.subscriptions with topic section before patch. Patch with intent describing the business trigger. Validate after edit; subscriptions do not auto-repair derived sections.
|
|
24
|
+
|
|
25
|
+
## Related sections
|
|
26
|
+
|
|
27
|
+
system.subscriptions, system.rolesPermissions, datasource.resourceType, datasource.foreignKeys, datasource.governance
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Manifest development workflow
|
|
2
|
+
|
|
3
|
+
Follow this loop when editing external integration manifests through the Builder API.
|
|
4
|
+
|
|
5
|
+
## Normative loop
|
|
6
|
+
|
|
7
|
+
Read a governed section, resolve required missing inputs with the user, patch with intent, repair derived sections, validate, then test.
|
|
8
|
+
|
|
9
|
+
## Rules
|
|
10
|
+
|
|
11
|
+
### Read before patch
|
|
12
|
+
|
|
13
|
+
Prefer GET when you need quality scores or `missingInputs`. `sectionReadToken` on PATCH is **optional**: when omitted, the server re-reads the section immediately before write (same race window as CLI `patch-section` without `--token`). If you send a token and it is stale, PATCH returns **409** — GET again and retry.
|
|
14
|
+
|
|
15
|
+
Do not invent primary keys, entity types, or similar values.
|
|
16
|
+
|
|
17
|
+
### Ask when inputs are missing
|
|
18
|
+
|
|
19
|
+
When quality reports required missingInputs, ask the user. Do not invent primary keys, entity types, or similar values.
|
|
20
|
+
|
|
21
|
+
### Patch requires intent
|
|
22
|
+
|
|
23
|
+
Every write records audit metadata describing why the change was made.
|
|
24
|
+
|
|
25
|
+
### Repair is explicit
|
|
26
|
+
|
|
27
|
+
Pass named repair hooks after patches that affect derived sections. The dependency graph defines downstream order.
|
|
28
|
+
|
|
29
|
+
### No auto-upload
|
|
30
|
+
|
|
31
|
+
Upload and certification are separate steps after validate and test succeed.
|
|
32
|
+
|
|
33
|
+
### Post-upload authentication (enterprise handoff)
|
|
34
|
+
|
|
35
|
+
Validate, test, test-integration, and upload must not depend on resolved integration secrets in Builder API scope. Upload publishes configuration including `authentication.credential.variables` (non-secrets). The user adds live secrets in the dataplane Connected Systems Authentication UI afterward.
|
|
36
|
+
|
|
37
|
+
After upload succeeds:
|
|
38
|
+
|
|
39
|
+
1. Read `authentication.authType` and `authentication.credential.method` from the published system manifest (`system.authentication`).
|
|
40
|
+
2. Confirm non-secret `variables` (baseUrl, headerName, tokenUrl, and similar) were set in the manifest — they are pre-filled in the UI after upload.
|
|
41
|
+
3. Fetch help topic `connectedSystemUi` with `systemKey`, optional `authType`, and optional `credentialMethod`.
|
|
42
|
+
4. Ask the user for their dataplane public UI base (origin including `/data`).
|
|
43
|
+
5. Provide the Authentication URL and tell the user to add **only the required secrets** (for example apiKey token for apikey method).
|
|
44
|
+
6. User adds secrets in the UI, then re-runs E2E or live verification.
|
|
45
|
+
|
|
46
|
+
Do not instruct the user to paste vendor tokens into Builder API or workspace env files when UI authentication is the intended path.
|
|
47
|
+
|
|
48
|
+
## Typical sequence
|
|
49
|
+
|
|
50
|
+
Start with datasource metadata for a new entity. Patch with intent describing the vendor payload mapping. Repair fieldMappings, expose, and rbac hooks. Patch openapiOperations when adding write capabilities. Repair again, validate, then test. Upload when ready, then hand off to Connected Systems Authentication per topic `connectedSystemUi`.
|
|
@@ -21,13 +21,16 @@ const {
|
|
|
21
21
|
OPENAPI_EVIDENCE_REQUEST_SCHEMAS,
|
|
22
22
|
OPENAPI_EVIDENCE_RESULT_SCHEMAS
|
|
23
23
|
} = require('./openapi-evidence-schemas');
|
|
24
|
+
const { OPENAPI_HELP_RESULT_SCHEMAS } = require('./openapi-help-schemas');
|
|
24
25
|
|
|
25
26
|
const RESPONSE_ENVELOPES = [
|
|
26
27
|
['ListSystemsResponse', 'ListSystemsData'],
|
|
27
28
|
['CreateSystemResponse', 'CreateSystemData'],
|
|
29
|
+
['PersistSuppliedOpenApiResponse', 'PersistSuppliedOpenApiData'],
|
|
28
30
|
['SystemManifestResponse', 'SystemManifestData'],
|
|
29
31
|
['DeleteSystemResponse', 'DeleteSystemData'],
|
|
30
32
|
['WizardRunResponse', 'WizardRunData'],
|
|
33
|
+
['IntegrationDefinitionApplyResponse', 'IntegrationDefinitionApplyData'],
|
|
31
34
|
['RepairResultResponse', 'RepairResultData'],
|
|
32
35
|
['ValidateResultResponse', 'ValidateResultData'],
|
|
33
36
|
['PreviewUploadResponse', 'PreviewUploadData'],
|
|
@@ -51,7 +54,8 @@ const RESPONSE_ENVELOPES = [
|
|
|
51
54
|
['EvidenceAuthoringMetadataResponse', 'EvidenceAuthoringMetadataData'],
|
|
52
55
|
['EvidenceDownloadResponse', 'EvidenceDownloadData'],
|
|
53
56
|
['EvidenceUploadResponse', 'EvidenceUploadData'],
|
|
54
|
-
['EvidenceActivateResponse', 'EvidenceActivateData']
|
|
57
|
+
['EvidenceActivateResponse', 'EvidenceActivateData'],
|
|
58
|
+
['BuilderHelpResponse', 'BuilderHelpData']
|
|
55
59
|
];
|
|
56
60
|
|
|
57
61
|
/**
|
|
@@ -70,6 +74,7 @@ function buildOpenApiComponentSchemas() {
|
|
|
70
74
|
...OPENAPI_APPLY_RESULT_SCHEMAS,
|
|
71
75
|
...OPENAPI_MANIFEST_RESULT_SCHEMAS,
|
|
72
76
|
...OPENAPI_EVIDENCE_RESULT_SCHEMAS,
|
|
77
|
+
...OPENAPI_HELP_RESULT_SCHEMAS,
|
|
73
78
|
EmptyResultData: { type: 'object', properties: {}, additionalProperties: false },
|
|
74
79
|
...envelopes
|
|
75
80
|
});
|
|
@@ -78,6 +83,7 @@ function buildOpenApiComponentSchemas() {
|
|
|
78
83
|
module.exports = {
|
|
79
84
|
buildOpenApiComponentSchemas,
|
|
80
85
|
buildSuccessEnvelopeSchema,
|
|
86
|
+
RESPONSE_ENVELOPES,
|
|
81
87
|
OPENAPI_REQUEST_SCHEMAS,
|
|
82
88
|
OPENAPI_RESULT_SCHEMAS
|
|
83
89
|
};
|
|
@@ -22,6 +22,12 @@ const OPERATION_DESCRIPTIONS = Object.freeze({
|
|
|
22
22
|
'Create an empty integration workspace for a systemKey. Mutating; requires Idempotency-Key on retries.',
|
|
23
23
|
tags: ['workspace']
|
|
24
24
|
},
|
|
25
|
+
persistSuppliedOpenApi: {
|
|
26
|
+
summary: 'Persist supplied OpenAPI documents to workspace',
|
|
27
|
+
description:
|
|
28
|
+
'Validate Runtime-authorized OpenAPI documents and write them under integration/<systemKey>/openapi/. Does not run wizard or BID apply. Mutating.',
|
|
29
|
+
tags: ['workspace']
|
|
30
|
+
},
|
|
25
31
|
getSystemManifest: {
|
|
26
32
|
summary: 'Read workspace manifest summary',
|
|
27
33
|
description: 'Return local workspace metadata and file manifest for one systemKey. Read-only.',
|
|
@@ -39,6 +45,12 @@ const OPERATION_DESCRIPTIONS = Object.freeze({
|
|
|
39
45
|
'Run headless wizard to materialize system and datasource JSON under the workspace. Mutating; may take up to MAX_REQUEST_TIMEOUT_MS. Retry with the same Idempotency-Key.',
|
|
40
46
|
tags: ['build']
|
|
41
47
|
},
|
|
48
|
+
applyIntegrationDefinition: {
|
|
49
|
+
summary: 'Apply Builder Integration Definition (BID) into workspace',
|
|
50
|
+
description:
|
|
51
|
+
'Materialize system and datasource package files from an aifabrix.builder.integrationDefinition document. Prefer this over wizard when OpenAPI is not yet available. Mutating; retry with the same Idempotency-Key.',
|
|
52
|
+
tags: ['build']
|
|
53
|
+
},
|
|
42
54
|
runRepair: {
|
|
43
55
|
summary: 'Repair workspace manifest drift',
|
|
44
56
|
description:
|
|
@@ -194,6 +206,12 @@ const OPERATION_DESCRIPTIONS = Object.freeze({
|
|
|
194
206
|
description: 'Returns ready with configured dataplaneUrl. Does not verify Dataplane connectivity in V1.',
|
|
195
207
|
tags: ['infra']
|
|
196
208
|
},
|
|
209
|
+
getBuilderHelp: {
|
|
210
|
+
summary: 'LLM help topics',
|
|
211
|
+
description:
|
|
212
|
+
'Deterministic product help for agents (no tenant data). Required topic enum includes resourceTypeCatalog for BID resourceType keys. No authentication.',
|
|
213
|
+
tags: ['help']
|
|
214
|
+
},
|
|
197
215
|
getEvidenceMetadata: {
|
|
198
216
|
summary: 'Evidence authoring metadata',
|
|
199
217
|
description:
|
|
@@ -217,6 +235,34 @@ const OPERATION_DESCRIPTIONS = Object.freeze({
|
|
|
217
235
|
description:
|
|
218
236
|
'Activate one or many human-approved certified Evidence ids. Organizational gate after technical certification. Mutating; use Idempotency-Key.',
|
|
219
237
|
tags: ['evidence']
|
|
238
|
+
},
|
|
239
|
+
buildChannelPackage: {
|
|
240
|
+
summary: 'Build channel package',
|
|
241
|
+
description:
|
|
242
|
+
'Build vendor channel package from External AI Discovery plus optional workspace branding. Returns summary, README/ZIP links, and installReady. Mutating.',
|
|
243
|
+
tags: ['channel']
|
|
244
|
+
},
|
|
245
|
+
getChannelPackageSummary: {
|
|
246
|
+
summary: 'Get channel package summary',
|
|
247
|
+
description: 'Return last built channel package summary and README/ZIP links. Read-only.',
|
|
248
|
+
tags: ['channel']
|
|
249
|
+
},
|
|
250
|
+
getChannelPackageZip: {
|
|
251
|
+
summary: 'Download channel package ZIP',
|
|
252
|
+
description:
|
|
253
|
+
'Return the built app package as zipBase64 (application/zip). Build package first. Read-only.',
|
|
254
|
+
tags: ['channel']
|
|
255
|
+
},
|
|
256
|
+
getChannelBranding: {
|
|
257
|
+
summary: 'Get channel branding',
|
|
258
|
+
description: 'Return optional workspace branding (displayName, description, icon paths). Read-only.',
|
|
259
|
+
tags: ['channel']
|
|
260
|
+
},
|
|
261
|
+
patchChannelBranding: {
|
|
262
|
+
summary: 'Patch channel branding',
|
|
263
|
+
description:
|
|
264
|
+
'Update optional package branding overrides stored in the Builder API workspace. Mutating.',
|
|
265
|
+
tags: ['channel']
|
|
220
266
|
}
|
|
221
267
|
});
|
|
222
268
|
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal valid `data` examples for builder-api success envelopes (OAPI-136).
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview Envelope data examples keyed by data schema name
|
|
5
|
+
* @author AI Fabrix Team
|
|
6
|
+
* @version 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
|
|
11
|
+
const SAMPLE_SYSTEM_KEY = 'hubspot-demo';
|
|
12
|
+
const SAMPLE_DATASOURCE_KEY = 'hubspot-demo-companies';
|
|
13
|
+
const SAMPLE_UUID = '00000000-0000-4000-8000-000000000010';
|
|
14
|
+
const SAMPLE_ISO = '2026-01-15T12:00:00.000Z';
|
|
15
|
+
|
|
16
|
+
const SAMPLE_META = {
|
|
17
|
+
ownerUserId: 'user-demo',
|
|
18
|
+
systemKey: SAMPLE_SYSTEM_KEY,
|
|
19
|
+
createdAt: SAMPLE_ISO,
|
|
20
|
+
lastModifiedAt: SAMPLE_ISO,
|
|
21
|
+
lastOperation: 'validate'
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const SAMPLE_QUALITY = {
|
|
25
|
+
score: 100,
|
|
26
|
+
blockingIssues: [],
|
|
27
|
+
warnings: [],
|
|
28
|
+
missingInputs: [],
|
|
29
|
+
assumptions: []
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const SAMPLE_MCP_RESULT = {
|
|
33
|
+
success: true,
|
|
34
|
+
status: 'ok',
|
|
35
|
+
message: 'completed'
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const SAMPLE_SYSTEM_MANIFEST = {
|
|
39
|
+
systemKey: SAMPLE_SYSTEM_KEY,
|
|
40
|
+
meta: SAMPLE_META,
|
|
41
|
+
files: [{ path: 'application.json', isDirectory: false, sizeBytes: 128, redacted: false }]
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const SAMPLE_VALIDATION_STEP = {
|
|
45
|
+
valid: true,
|
|
46
|
+
errors: [],
|
|
47
|
+
warnings: []
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/** @type {Record<string, Object>} */
|
|
51
|
+
const OPENAPI_ENVELOPE_DATA_EXAMPLES = {
|
|
52
|
+
HealthData: { status: 'ok' },
|
|
53
|
+
ReadyData: { status: 'ready', dataplaneUrl: 'http://localhost:3601' },
|
|
54
|
+
BuilderHelpData: {
|
|
55
|
+
version: '1.0.0',
|
|
56
|
+
schemaVersion: '1.0.0',
|
|
57
|
+
topic: 'resourceTypeCatalog',
|
|
58
|
+
key: 'all',
|
|
59
|
+
title: 'Resource type catalog',
|
|
60
|
+
summary: 'Taxonomy-only catalog keys for datasource.resourceType.',
|
|
61
|
+
data: {
|
|
62
|
+
schemaVersion: '1.0.0',
|
|
63
|
+
minimumSystemKeys: ['customer'],
|
|
64
|
+
resourceTypes: [
|
|
65
|
+
{
|
|
66
|
+
key: 'customer',
|
|
67
|
+
displayName: 'Customer',
|
|
68
|
+
description: 'Customer organization.',
|
|
69
|
+
category: 'business',
|
|
70
|
+
defaultRiskLevel: 'medium',
|
|
71
|
+
status: 'active'
|
|
72
|
+
}
|
|
73
|
+
]
|
|
74
|
+
},
|
|
75
|
+
related: ['schemaCatalog'],
|
|
76
|
+
recommendedNext: ['topic=section§ionKey=datasource.resourceType']
|
|
77
|
+
},
|
|
78
|
+
EmptyResultData: {},
|
|
79
|
+
ListSystemsData: { systems: [{ systemKey: SAMPLE_SYSTEM_KEY, meta: SAMPLE_META }] },
|
|
80
|
+
CreateSystemData: { systemKey: SAMPLE_SYSTEM_KEY, meta: SAMPLE_META },
|
|
81
|
+
PersistSuppliedOpenApiData: {
|
|
82
|
+
accepted: [
|
|
83
|
+
{
|
|
84
|
+
filename: 'companies.json',
|
|
85
|
+
path: `integration/${SAMPLE_SYSTEM_KEY}/openapi/companies.json`,
|
|
86
|
+
digest: 'sha256:demo'
|
|
87
|
+
}
|
|
88
|
+
],
|
|
89
|
+
rejected: [],
|
|
90
|
+
workspaceRoot: '/workspace/integration'
|
|
91
|
+
},
|
|
92
|
+
SystemManifestData: SAMPLE_SYSTEM_MANIFEST,
|
|
93
|
+
DeleteSystemData: { systemKey: SAMPLE_SYSTEM_KEY, deleted: true },
|
|
94
|
+
WizardRunData: { systemKey: SAMPLE_SYSTEM_KEY, status: 'completed' },
|
|
95
|
+
IntegrationDefinitionApplyData: {
|
|
96
|
+
status: 'updated',
|
|
97
|
+
systemKey: SAMPLE_SYSTEM_KEY,
|
|
98
|
+
outputDir: `/workspace/integration/${SAMPLE_SYSTEM_KEY}`,
|
|
99
|
+
definitionId: 'bid-demo',
|
|
100
|
+
definitionHash: 'sha256:demo',
|
|
101
|
+
packageVersion: '1.0.0',
|
|
102
|
+
files: ['application.json']
|
|
103
|
+
},
|
|
104
|
+
RepairResultData: {
|
|
105
|
+
updated: true,
|
|
106
|
+
changes: ['synced dataSources'],
|
|
107
|
+
warnings: [],
|
|
108
|
+
changedFiles: ['application.json']
|
|
109
|
+
},
|
|
110
|
+
ValidateResultData: {
|
|
111
|
+
validationResult: {
|
|
112
|
+
valid: true,
|
|
113
|
+
errors: [],
|
|
114
|
+
warnings: [],
|
|
115
|
+
steps: {
|
|
116
|
+
application: SAMPLE_VALIDATION_STEP,
|
|
117
|
+
components: SAMPLE_VALIDATION_STEP,
|
|
118
|
+
manifest: SAMPLE_VALIDATION_STEP
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
pipelineValidation: null
|
|
122
|
+
},
|
|
123
|
+
PreviewUploadData: {
|
|
124
|
+
manifest: { key: SAMPLE_SYSTEM_KEY, version: '1.0.0', type: 'external' },
|
|
125
|
+
payload: {
|
|
126
|
+
version: '1.0.0',
|
|
127
|
+
application: { key: SAMPLE_SYSTEM_KEY, displayName: 'Demo', type: 'external' },
|
|
128
|
+
dataSources: [{ key: SAMPLE_DATASOURCE_KEY }]
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
UploadResultData: {
|
|
132
|
+
dataplaneUrl: 'http://localhost:3601',
|
|
133
|
+
environment: 'dev',
|
|
134
|
+
uploadSkipped: false
|
|
135
|
+
},
|
|
136
|
+
DeployResultData: {
|
|
137
|
+
deployed: true,
|
|
138
|
+
deploymentId: SAMPLE_UUID,
|
|
139
|
+
environment: 'dev',
|
|
140
|
+
systemKey: SAMPLE_SYSTEM_KEY
|
|
141
|
+
},
|
|
142
|
+
ProtectionUploadData: {
|
|
143
|
+
datasourceKey: SAMPLE_DATASOURCE_KEY,
|
|
144
|
+
uploaded: true,
|
|
145
|
+
dryRun: false
|
|
146
|
+
},
|
|
147
|
+
ProtectionCreateData: {
|
|
148
|
+
datasourceKey: SAMPLE_DATASOURCE_KEY,
|
|
149
|
+
created: true,
|
|
150
|
+
dryRun: false
|
|
151
|
+
},
|
|
152
|
+
TestResultData: {
|
|
153
|
+
runType: 'unit',
|
|
154
|
+
valid: true,
|
|
155
|
+
errors: [],
|
|
156
|
+
warnings: [],
|
|
157
|
+
systemResults: [{ file: 'hubspot-demo-system.json', valid: true, errors: [] }],
|
|
158
|
+
datasourceResults: [
|
|
159
|
+
{
|
|
160
|
+
key: SAMPLE_DATASOURCE_KEY,
|
|
161
|
+
file: 'hubspot-demo-datasource-companies.json',
|
|
162
|
+
valid: true,
|
|
163
|
+
errors: [],
|
|
164
|
+
warnings: []
|
|
165
|
+
}
|
|
166
|
+
],
|
|
167
|
+
systemKey: SAMPLE_SYSTEM_KEY,
|
|
168
|
+
appName: SAMPLE_SYSTEM_KEY
|
|
169
|
+
},
|
|
170
|
+
CertifyResultData: {
|
|
171
|
+
command: 'verify-operations',
|
|
172
|
+
systemKey: SAMPLE_SYSTEM_KEY,
|
|
173
|
+
verdict: 'VERIFIED',
|
|
174
|
+
operationalReadinessPercent: 100,
|
|
175
|
+
certification: { level: 'SILVER', status: 'AI_READY' },
|
|
176
|
+
warnings: [],
|
|
177
|
+
details: [],
|
|
178
|
+
stepResults: []
|
|
179
|
+
},
|
|
180
|
+
LifecycleReportData: {
|
|
181
|
+
systemKey: SAMPLE_SYSTEM_KEY,
|
|
182
|
+
certification: { level: 'SILVER', status: 'AI_READY' },
|
|
183
|
+
operationalReadinessPercent: 100,
|
|
184
|
+
summary: true,
|
|
185
|
+
details: false
|
|
186
|
+
},
|
|
187
|
+
EnterpriseMcpInvocationData: {
|
|
188
|
+
capabilityKey: 'repository.status',
|
|
189
|
+
result: SAMPLE_MCP_RESULT
|
|
190
|
+
},
|
|
191
|
+
WorkspaceStatusData: {
|
|
192
|
+
local: SAMPLE_SYSTEM_MANIFEST,
|
|
193
|
+
remote: null
|
|
194
|
+
},
|
|
195
|
+
RepositoryStatusData: {
|
|
196
|
+
capabilityKey: 'repository.status',
|
|
197
|
+
result: SAMPLE_MCP_RESULT
|
|
198
|
+
},
|
|
199
|
+
ManifestSectionViewData: {
|
|
200
|
+
sectionKey: 'system.authentication',
|
|
201
|
+
target: 'system',
|
|
202
|
+
datasourceKey: null,
|
|
203
|
+
currentValue: {},
|
|
204
|
+
schemaFragment: {},
|
|
205
|
+
required: true,
|
|
206
|
+
mutable: true,
|
|
207
|
+
sourceOfTruth: true,
|
|
208
|
+
dependencyGraph: { downstreamFromThis: [] },
|
|
209
|
+
repairHooks: [],
|
|
210
|
+
recommendedNextActions: [],
|
|
211
|
+
sectionReadToken: SAMPLE_UUID,
|
|
212
|
+
quality: SAMPLE_QUALITY
|
|
213
|
+
},
|
|
214
|
+
ManifestPatchResultData: {
|
|
215
|
+
sectionKey: 'system.authentication',
|
|
216
|
+
datasourceKey: null,
|
|
217
|
+
intent: 'align auth method',
|
|
218
|
+
changedPaths: ['authentication.method'],
|
|
219
|
+
beforeHash: 'sha256:before',
|
|
220
|
+
afterHash: 'sha256:after',
|
|
221
|
+
derivedSectionsAffected: [],
|
|
222
|
+
repairRecommended: false,
|
|
223
|
+
repairHooks: [],
|
|
224
|
+
validationPreview: {},
|
|
225
|
+
riskHints: [],
|
|
226
|
+
nextActions: [],
|
|
227
|
+
dryRun: false,
|
|
228
|
+
quality: SAMPLE_QUALITY
|
|
229
|
+
},
|
|
230
|
+
ManifestSectionsListData: {
|
|
231
|
+
systemKey: SAMPLE_SYSTEM_KEY,
|
|
232
|
+
sections: [{ sectionKey: 'system.authentication', target: 'system' }],
|
|
233
|
+
datasourceKeys: [SAMPLE_DATASOURCE_KEY]
|
|
234
|
+
},
|
|
235
|
+
ManifestRepairResultData: {
|
|
236
|
+
hooksRun: ['sync-datasources'],
|
|
237
|
+
derivedSectionsUpdated: [],
|
|
238
|
+
repairResult: {},
|
|
239
|
+
dryRun: false,
|
|
240
|
+
quality: SAMPLE_QUALITY
|
|
241
|
+
},
|
|
242
|
+
EvidenceAuthoringMetadataData: {
|
|
243
|
+
roleKey: 'aifabrix-business-transformation',
|
|
244
|
+
evidenceKinds: [],
|
|
245
|
+
aspects: [],
|
|
246
|
+
resourceTypes: [],
|
|
247
|
+
assistantCapabilities: [],
|
|
248
|
+
writableFields: [],
|
|
249
|
+
requiredFields: [],
|
|
250
|
+
constraints: {
|
|
251
|
+
certification: {},
|
|
252
|
+
activation: { requiresCertified: true, requiresAuthority: false }
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
EvidenceDownloadData: {
|
|
256
|
+
roleKey: 'aifabrix-business-transformation',
|
|
257
|
+
count: 0,
|
|
258
|
+
data: []
|
|
259
|
+
},
|
|
260
|
+
EvidenceUploadData: {
|
|
261
|
+
roleKey: 'aifabrix-business-transformation',
|
|
262
|
+
inserted: 0,
|
|
263
|
+
updated: 0,
|
|
264
|
+
accepted: [],
|
|
265
|
+
rejected: [],
|
|
266
|
+
warnings: [],
|
|
267
|
+
certified: [],
|
|
268
|
+
readyToActivate: false
|
|
269
|
+
},
|
|
270
|
+
EvidenceActivateData: {
|
|
271
|
+
requested: 0,
|
|
272
|
+
activated: [],
|
|
273
|
+
failed: [],
|
|
274
|
+
success: true
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
module.exports = {
|
|
279
|
+
OPENAPI_ENVELOPE_DATA_EXAMPLES
|
|
280
|
+
};
|
|
@@ -81,6 +81,11 @@ const OPERATION_BINDINGS = Object.freeze({
|
|
|
81
81
|
requestBody: jsonRequestBody('CreateSystemRequest', true),
|
|
82
82
|
successResponse: 'CreateSystemResponse'
|
|
83
83
|
},
|
|
84
|
+
persistSuppliedOpenApi: {
|
|
85
|
+
parameters: [SYSTEM_KEY_PARAM],
|
|
86
|
+
requestBody: jsonRequestBody('PersistSuppliedOpenApiRequest', true),
|
|
87
|
+
successResponse: 'PersistSuppliedOpenApiResponse'
|
|
88
|
+
},
|
|
84
89
|
getSystemManifest: {
|
|
85
90
|
parameters: [SYSTEM_KEY_PARAM],
|
|
86
91
|
successResponse: 'SystemManifestResponse'
|
|
@@ -103,6 +108,11 @@ const OPERATION_BINDINGS = Object.freeze({
|
|
|
103
108
|
requestBody: jsonRequestBody('WizardConfigRequest', true),
|
|
104
109
|
successResponse: 'WizardRunResponse'
|
|
105
110
|
},
|
|
111
|
+
applyIntegrationDefinition: {
|
|
112
|
+
parameters: [SYSTEM_KEY_PARAM],
|
|
113
|
+
requestBody: jsonRequestBody('IntegrationDefinitionApplyRequest', true),
|
|
114
|
+
successResponse: 'IntegrationDefinitionApplyResponse'
|
|
115
|
+
},
|
|
106
116
|
runRepair: {
|
|
107
117
|
parameters: [SYSTEM_KEY_PARAM],
|
|
108
118
|
queryParameters: [
|
|
@@ -275,6 +285,46 @@ const OPERATION_BINDINGS = Object.freeze({
|
|
|
275
285
|
ready: {
|
|
276
286
|
successResponse: 'ReadyResponse'
|
|
277
287
|
},
|
|
288
|
+
getBuilderHelp: {
|
|
289
|
+
queryParameters: [
|
|
290
|
+
{
|
|
291
|
+
name: 'topic',
|
|
292
|
+
in: 'query',
|
|
293
|
+
required: true,
|
|
294
|
+
schema: { $ref: '#/components/schemas/BuilderHelpTopic' },
|
|
295
|
+
description: 'Help topic. Use resourceTypeCatalog for taxonomy keys agents may set on BID datasources.'
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
name: 'sectionKey',
|
|
299
|
+
in: 'query',
|
|
300
|
+
required: false,
|
|
301
|
+
schema: { type: 'string' },
|
|
302
|
+
description: 'Required when topic=section.'
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
name: 'exampleKey',
|
|
306
|
+
in: 'query',
|
|
307
|
+
required: false,
|
|
308
|
+
schema: { type: 'string' },
|
|
309
|
+
description: 'Required when topic=goldenExample.'
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
name: 'category',
|
|
313
|
+
in: 'query',
|
|
314
|
+
required: false,
|
|
315
|
+
schema: { type: 'string' },
|
|
316
|
+
description: 'Optional filter for topic=resourceTypeCatalog.'
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
name: 'resourceType',
|
|
320
|
+
in: 'query',
|
|
321
|
+
required: false,
|
|
322
|
+
schema: { type: 'string' },
|
|
323
|
+
description: 'Optional key filter for resourceTypeCatalog or schemaCatalog target.'
|
|
324
|
+
}
|
|
325
|
+
],
|
|
326
|
+
successResponse: 'BuilderHelpResponse'
|
|
327
|
+
},
|
|
278
328
|
getEvidenceMetadata: {
|
|
279
329
|
parameters: [ROLE_KEY_PARAM],
|
|
280
330
|
successResponse: 'EvidenceAuthoringMetadataResponse'
|