@aifabrix/builder 2.42.1 → 2.44.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/.cursor/rules/anchor-docs.mdc +15 -0
- package/README.md +2 -2
- package/anchor-docs/README.md +10 -0
- package/anchor-docs/_TEMPLATE +24 -0
- package/bin/aifabrix.js +13 -4
- package/integration/hubspot-test/README.md +157 -0
- package/integration/{hubspot → hubspot-test}/application.json +6 -6
- package/integration/{hubspot → hubspot-test}/create-hubspot.js +10 -10
- package/integration/hubspot-test/env.template +4 -0
- package/integration/hubspot-test/hubspot-test-datasource-company.json +138 -0
- package/integration/hubspot-test/hubspot-test-datasource-contact.json +146 -0
- package/integration/hubspot-test/hubspot-test-datasource-deal.json +146 -0
- package/integration/hubspot-test/hubspot-test-datasource-users.json +76 -0
- package/integration/{hubspot/hubspot-deploy.json → hubspot-test/hubspot-test-deploy.json} +201 -24
- package/integration/{hubspot/hubspot-system.json → hubspot-test/hubspot-test-system.json} +8 -7
- package/integration/hubspot-test/rbac.json +166 -0
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-hubspot-credential-real.yaml +3 -3
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-hubspot-env-vars.yaml +2 -2
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-add-datasource.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-credential-create.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-credential-select.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-known-platform.yaml +1 -1
- package/integration/hubspot-test/test-artifacts/wizard-invalid-missing-source.yaml +2 -0
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-mode.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-openapi-file.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-openapi-url.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-source.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-valid-for-dimension-array-test.yaml +1 -1
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-key-test.yaml +5 -0
- package/integration/hubspot-test/test-artifacts/wizard-valid-for-dimension-path-test.yaml +5 -0
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-valid-for-dimension-test.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-valid-for-rbac-test.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-valid-for-rbac-yaml-test.yaml +1 -1
- package/integration/{hubspot → hubspot-test}/test-dataplane-down-tests.js +1 -7
- package/integration/{hubspot → hubspot-test}/test-dataplane-down.js +3 -3
- package/integration/{hubspot → hubspot-test}/test.js +137 -102
- package/integration/{hubspot → hubspot-test}/wizard-hubspot-e2e.yaml +2 -2
- package/integration/{hubspot → hubspot-test}/wizard-hubspot-platform.yaml +1 -1
- package/integration/hubspot-test/wizard-hubspot-test-headless.yaml +23 -0
- package/integration/roundtrip-test-local/README.md +144 -0
- package/integration/roundtrip-test-local/application.yaml +13 -0
- package/integration/roundtrip-test-local/env.template +15 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-datasource-roundtrip-test-company.yaml +14 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-deploy.json +61 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-system.yaml +25 -0
- package/integration/roundtrip-test-local2/README.md +144 -0
- package/integration/roundtrip-test-local2/application.yaml +13 -0
- package/integration/roundtrip-test-local2/env.template +15 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-datasource-company.yaml +31 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-deploy.json +86 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-system.yaml +25 -0
- package/integration/test/wizard.yaml +8 -0
- package/jest.config.default.js +10 -0
- package/jest.config.integration.fixtures.js +22 -0
- package/jest.config.integration.js +21 -18
- package/jest.config.isolated.js +10 -0
- package/jest.projects.js +288 -0
- package/lib/api/datasources-core.api.js +3 -3
- package/lib/api/dev-mtls-request.js +110 -0
- package/lib/api/dev-server-https.js +145 -0
- package/lib/api/dev.api.js +133 -144
- package/lib/api/index.js +0 -1
- package/lib/api/pipeline.api.js +67 -20
- package/lib/api/service-users.api.js +111 -2
- package/lib/api/types/dev.types.js +4 -3
- package/lib/api/types/pipeline.types.js +8 -5
- package/lib/api/types/service-users.types.js +41 -0
- package/lib/api/types/validation-run.types.js +56 -0
- package/lib/api/validation-run.api.js +99 -0
- package/lib/api/validation-runner.js +99 -0
- package/lib/app/config.js +1 -1
- package/lib/app/deploy-status-display.js +2 -2
- package/lib/app/deploy.js +7 -6
- package/lib/app/display.js +2 -1
- package/lib/app/dockerfile.js +3 -2
- package/lib/app/down.js +2 -1
- package/lib/app/helpers.js +6 -5
- package/lib/app/index.js +27 -8
- package/lib/app/list.js +7 -6
- package/lib/app/push.js +4 -3
- package/lib/app/register.js +19 -8
- package/lib/app/rotate-secret.js +17 -13
- package/lib/app/run-container-start.js +184 -0
- package/lib/app/run-docker-fallback.js +108 -0
- package/lib/app/run-env-compose.js +30 -42
- package/lib/app/run-helpers.js +49 -126
- package/lib/app/run-infra-requirements.js +30 -0
- package/lib/app/run-resolve-image.js +21 -0
- package/lib/app/run.js +74 -21
- package/lib/app/show-display.js +1 -1
- package/lib/app/show.js +1 -1
- package/lib/build/index.js +13 -10
- package/lib/cli/index.js +2 -0
- package/lib/cli/setup-app.help.js +67 -0
- package/lib/cli/setup-app.js +59 -123
- package/lib/cli/setup-app.test-commands.js +179 -0
- package/lib/cli/setup-auth.js +36 -14
- package/lib/cli/setup-credential-deployment.js +22 -8
- package/lib/cli/setup-dev-path-commands.js +124 -0
- package/lib/cli/setup-dev.js +190 -103
- package/lib/cli/setup-environment.js +11 -20
- package/lib/cli/setup-external-system.js +62 -22
- package/lib/cli/setup-infra.js +139 -47
- package/lib/cli/setup-parameters.js +32 -0
- package/lib/cli/setup-secrets.js +147 -10
- package/lib/cli/setup-service-user.js +146 -20
- package/lib/cli/setup-utility.js +47 -19
- package/lib/commands/app-down.js +5 -7
- package/lib/commands/app-install.js +14 -7
- package/lib/commands/app-logs.js +13 -10
- package/lib/commands/app-shell.js +4 -1
- package/lib/commands/app-test.js +25 -19
- package/lib/commands/app.js +22 -10
- package/lib/commands/auth-config.js +10 -14
- package/lib/commands/auth-status.js +4 -3
- package/lib/commands/credential-env.js +4 -3
- package/lib/commands/credential-list.js +5 -4
- package/lib/commands/credential-push.js +4 -3
- package/lib/commands/datasource-unified-test-cli.js +495 -0
- package/lib/commands/datasource-unified-test-cli.options.js +149 -0
- package/lib/commands/datasource-validation-cli.js +129 -0
- package/lib/commands/datasource.js +123 -71
- package/lib/commands/deployment-list.js +6 -5
- package/lib/commands/dev-cli-handlers.js +122 -18
- package/lib/commands/dev-down.js +4 -3
- package/lib/commands/dev-init.js +231 -116
- package/lib/commands/dev-show-display.js +473 -0
- package/lib/commands/login-credentials.js +3 -2
- package/lib/commands/login-device.js +4 -3
- package/lib/commands/login.js +5 -4
- package/lib/commands/logout.js +8 -7
- package/lib/commands/parameters-validate.js +54 -0
- package/lib/commands/repair-datasource.js +314 -68
- package/lib/commands/repair-env-template.js +16 -10
- package/lib/commands/repair-rbac.js +25 -19
- package/lib/commands/repair.js +116 -32
- package/lib/commands/secrets-list.js +23 -12
- package/lib/commands/secrets-remove-all.js +220 -0
- package/lib/commands/secrets-remove.js +22 -13
- package/lib/commands/secrets-set.js +21 -12
- package/lib/commands/secrets-validate.js +20 -7
- package/lib/commands/secure.js +10 -9
- package/lib/commands/service-user.js +243 -13
- package/lib/commands/test-e2e-external.js +27 -1
- package/lib/commands/up-common.js +28 -2
- package/lib/commands/up-dataplane.js +31 -18
- package/lib/commands/up-miso.js +19 -29
- package/lib/commands/upload.js +138 -39
- package/lib/commands/wizard-core-helpers.js +1 -1
- package/lib/commands/wizard-dataplane.js +4 -3
- package/lib/commands/wizard-helpers.js +3 -3
- package/lib/commands/wizard.js +2 -2
- package/lib/core/admin-secrets.js +16 -5
- package/lib/core/audit-logger.js +12 -4
- package/lib/core/config-attach-extensions.js +46 -0
- package/lib/core/config-runtime-paths.js +29 -0
- package/lib/core/config.js +59 -58
- package/lib/core/diff.js +3 -2
- package/lib/core/ensure-encryption-key.js +2 -4
- package/lib/core/secrets-ensure-infra.js +77 -0
- package/lib/core/secrets-ensure.js +120 -64
- package/lib/core/secrets-env-write.js +35 -7
- package/lib/core/secrets-infra-placeholder-sync.js +61 -0
- package/lib/core/secrets.js +228 -42
- package/lib/core/templates-env.js +4 -3
- package/lib/core/templates.js +1 -1
- package/lib/datasource/abac-validator.js +148 -0
- package/lib/datasource/deploy.js +75 -53
- package/lib/datasource/field-reference-validator.js +77 -36
- package/lib/datasource/integration-context.js +63 -0
- package/lib/datasource/list.js +8 -7
- package/lib/datasource/log-viewer.js +252 -0
- package/lib/datasource/resolve-app.js +109 -0
- package/lib/datasource/test-e2e.js +95 -155
- package/lib/datasource/test-integration.js +121 -109
- package/lib/datasource/unified-validation-run-body.js +65 -0
- package/lib/datasource/unified-validation-run-post.js +23 -0
- package/lib/datasource/unified-validation-run-resolve.js +43 -0
- package/lib/datasource/unified-validation-run.js +92 -0
- package/lib/datasource/validate.js +162 -15
- package/lib/deployment/deployer.js +4 -3
- package/lib/deployment/environment.js +7 -6
- package/lib/deployment/push.js +17 -8
- package/lib/external-system/delete.js +4 -3
- package/lib/external-system/deploy.js +131 -53
- package/lib/external-system/download-helpers.js +1 -1
- package/lib/external-system/download.js +7 -6
- package/lib/external-system/generator.js +104 -14
- package/lib/external-system/integration-test-dispatch.js +26 -0
- package/lib/external-system/test-execution.js +5 -1
- package/lib/external-system/test-helpers.js +0 -4
- package/lib/external-system/test-system-level-helpers.js +110 -0
- package/lib/external-system/test-system-level.js +83 -44
- package/lib/external-system/test.js +59 -8
- package/lib/generator/builders.js +23 -11
- package/lib/generator/deploy-manifest-azure-kv.js +81 -0
- package/lib/generator/external-controller-manifest.js +3 -3
- package/lib/generator/external.js +23 -11
- package/lib/generator/helpers.js +71 -12
- package/lib/generator/index.js +8 -4
- package/lib/generator/split-readme.js +12 -7
- package/lib/generator/split-variables.js +2 -1
- package/lib/generator/split.js +46 -11
- package/lib/generator/wizard-readme.js +3 -3
- package/lib/generator/wizard.js +16 -13
- package/lib/infrastructure/compose.js +60 -6
- package/lib/infrastructure/helpers.js +238 -51
- package/lib/infrastructure/index.js +64 -37
- package/lib/infrastructure/services.js +21 -15
- package/lib/internal/fs-real-sync.js +104 -0
- package/lib/internal/node-fs.js +98 -0
- package/lib/parameters/database-secret-values.js +173 -0
- package/lib/parameters/infra-kv-discovery.js +121 -0
- package/lib/parameters/infra-parameter-catalog.js +458 -0
- package/lib/parameters/infra-parameter-validate.js +64 -0
- package/lib/schema/application-schema.json +37 -17
- package/lib/schema/datasource-test-run.schema.json +493 -0
- package/lib/schema/deployment-rules.yaml +102 -63
- package/lib/schema/external-datasource.schema.json +1201 -433
- package/lib/schema/external-system.schema.json +181 -5
- package/lib/schema/flag-map-validation-run.json +31 -0
- package/lib/schema/infra-parameter.schema.json +106 -0
- package/lib/schema/infra.parameter.yaml +421 -0
- package/lib/schema/type/credential-auth-templates.json +40 -0
- package/lib/schema/type/document-storage.json +213 -0
- package/lib/schema/type/message-service.json +123 -0
- package/lib/schema/type/vector-store.json +88 -0
- package/lib/utils/aifabrix-runtime-config-dir.js +132 -0
- package/lib/utils/api-error-handler.js +2 -2
- package/lib/utils/api.js +49 -14
- package/lib/utils/app-config-resolver.js +23 -1
- package/lib/utils/app-register-api.js +3 -2
- package/lib/utils/app-register-auth.js +1 -1
- package/lib/utils/app-register-config.js +4 -4
- package/lib/utils/app-register-display.js +3 -2
- package/lib/utils/app-register-validator.js +3 -2
- package/lib/utils/app-run-containers.js +26 -22
- package/lib/utils/app-scoped-config.js +31 -0
- package/lib/utils/app-service-env-from-builder.js +164 -0
- package/lib/utils/build-copy.js +1 -1
- package/lib/utils/build-helpers.js +20 -20
- package/lib/utils/build-resolve-image.js +165 -0
- package/lib/utils/cli-layout-chalk.js +8 -0
- package/lib/utils/cli-test-layout-chalk.js +267 -0
- package/lib/utils/cli-utils.js +88 -11
- package/lib/utils/compose-db-passwords.js +138 -0
- package/lib/utils/compose-generate-docker-compose.js +216 -0
- package/lib/utils/compose-generator.js +197 -291
- package/lib/utils/compose-miso-env.js +18 -0
- package/lib/utils/compose-traefik-ingress-base.js +158 -0
- package/lib/utils/config-paths.js +209 -6
- package/lib/utils/config-scoped-resources-preference.js +41 -0
- package/lib/utils/controller-deployment-outcome.js +68 -0
- package/lib/utils/credential-display.js +2 -2
- package/lib/utils/credential-secrets-env.js +16 -1
- package/lib/utils/dataplane-pipeline-warning.js +4 -3
- package/lib/utils/datasource-test-run-capability-scope.js +43 -0
- package/lib/utils/datasource-test-run-debug-display.js +137 -0
- package/lib/utils/datasource-test-run-debug-slice.js +93 -0
- package/lib/utils/datasource-test-run-display.js +442 -0
- package/lib/utils/datasource-test-run-exit.js +58 -0
- package/lib/utils/datasource-test-run-legacy-adapter.js +93 -0
- package/lib/utils/datasource-test-run-report-version.js +51 -0
- package/lib/utils/datasource-test-run-schema-sync.js +59 -0
- package/lib/utils/datasource-test-run-tty-log.js +81 -0
- package/lib/utils/datasource-validation-watch.js +266 -0
- package/lib/utils/declarative-url-ports.js +47 -0
- package/lib/utils/derive-env-key-from-client-id.js +41 -0
- package/lib/utils/dev-ca-install.js +185 -23
- package/lib/utils/dev-cert-helper.js +266 -17
- package/lib/utils/dev-hosts-helper.js +307 -0
- package/lib/utils/dev-init-cert-hints.js +37 -0
- package/lib/utils/dev-init-health-messages.js +52 -0
- package/lib/utils/dev-init-resolve.js +86 -0
- package/lib/utils/dev-init-ssh-merge.js +65 -0
- package/lib/utils/dev-ssh-config-helper.js +196 -0
- package/lib/utils/dev-user-groups.js +93 -0
- package/lib/utils/docker-build.js +42 -17
- package/lib/utils/docker-exec.js +28 -0
- package/lib/utils/docker-manifest-public-port.js +116 -0
- package/lib/utils/docker-not-running-hint.js +52 -0
- package/lib/utils/docker.js +98 -11
- package/lib/utils/ensure-dev-certs-for-remote-docker.js +192 -0
- package/lib/utils/env-config-loader.js +10 -91
- package/lib/utils/env-copy.js +19 -10
- package/lib/utils/env-map.js +42 -11
- package/lib/utils/env-template.js +2 -2
- package/lib/utils/environment-scoped-resources.js +144 -0
- package/lib/utils/error-formatter.js +125 -9
- package/lib/utils/error-formatters/http-status-errors.js +6 -5
- package/lib/utils/error-formatters/network-errors.js +2 -1
- package/lib/utils/error-formatters/permission-errors.js +2 -1
- package/lib/utils/error-formatters/validation-errors.js +2 -1
- package/lib/utils/external-env-template.js +180 -0
- package/lib/utils/external-readme.js +8 -1
- package/lib/utils/external-system-display.js +277 -136
- package/lib/utils/external-system-local-test-tty.js +389 -0
- package/lib/utils/external-system-readiness-core.js +377 -0
- package/lib/utils/external-system-readiness-deploy-display.js +270 -0
- package/lib/utils/external-system-readiness-display-internals.js +150 -0
- package/lib/utils/external-system-readiness-display.js +186 -0
- package/lib/utils/external-system-test-helpers.js +24 -6
- package/lib/utils/external-system-validators.js +32 -14
- package/lib/utils/health-check-url.js +119 -0
- package/lib/utils/health-check.js +59 -25
- package/lib/utils/help-builder.js +14 -13
- package/lib/utils/image-version.js +4 -8
- package/lib/utils/infra-containers.js +4 -7
- package/lib/utils/infra-env-defaults.js +162 -0
- package/lib/utils/infra-status-display.js +167 -0
- package/lib/utils/infra-status.js +16 -8
- package/lib/utils/local-secrets.js +29 -7
- package/lib/utils/paths.js +136 -48
- package/lib/utils/port-resolver.js +10 -23
- package/lib/utils/redis-env-scope.js +62 -0
- package/lib/utils/register-aifabrix-shell-env.js +204 -0
- package/lib/utils/remote-builder-validation.js +99 -0
- package/lib/utils/remote-dev-auth.js +117 -21
- package/lib/utils/remote-docker-env.js +67 -15
- package/lib/utils/remote-secrets-loader.js +13 -4
- package/lib/utils/resolve-docker-image-ref.js +124 -0
- package/lib/utils/schema-loader.js +22 -9
- package/lib/utils/secrets-bash-kv.js +25 -0
- package/lib/utils/secrets-generator.js +171 -51
- package/lib/utils/secrets-helpers.js +70 -59
- package/lib/utils/secrets-kv-scope.js +60 -0
- package/lib/utils/secrets-utils.js +35 -37
- package/lib/utils/secrets-validation.js +3 -1
- package/lib/utils/secrets-yaml-preserve.js +109 -0
- package/lib/utils/secure-file-permissions.js +91 -0
- package/lib/utils/ssh-key-helper.js +4 -2
- package/lib/utils/template-helpers.js +2 -2
- package/lib/utils/test-log-writer.js +3 -3
- package/lib/utils/token-manager.js +37 -5
- package/lib/utils/url-declarative-public-base.js +188 -0
- package/lib/utils/url-declarative-resolve-build.js +493 -0
- package/lib/utils/url-declarative-resolve-load-doc.js +51 -0
- package/lib/utils/url-declarative-resolve.js +220 -0
- package/lib/utils/url-declarative-token-parse.js +74 -0
- package/lib/utils/url-declarative-url-flags.js +50 -0
- package/lib/utils/url-declarative-vdir-inactive-env.js +99 -0
- package/lib/utils/url-public-path-prefix.js +34 -0
- package/lib/utils/urls-local-registry.js +220 -0
- package/lib/utils/validation-report-tty-kit.js +77 -0
- package/lib/utils/validation-run-poll.js +89 -0
- package/lib/utils/validation-run-post-retry.js +73 -0
- package/lib/utils/validation-run-request.js +98 -0
- package/lib/utils/variable-transformer.js +21 -4
- package/lib/utils/yaml-preserve.js +78 -1
- package/lib/validation/datasource-warnings.js +56 -0
- package/lib/validation/env-template-auth.js +50 -2
- package/lib/validation/external-manifest-validator.js +35 -7
- package/lib/validation/validate-display.js +37 -31
- package/lib/validation/validate.js +9 -10
- package/lib/validation/validator-unresolved-placeholders.js +98 -0
- package/lib/validation/validator.js +32 -78
- package/lib/validation/wizard-config-validator.js +2 -1
- package/package.json +11 -3
- package/scripts/check-datasource-test-run-schema-sync.js +34 -0
- package/scripts/diagnose-cli.js +150 -0
- package/scripts/install-local.js +304 -55
- package/templates/README.md +15 -2
- package/templates/applications/dataplane/application.yaml +52 -2
- package/templates/applications/dataplane/env.template +80 -18
- package/templates/applications/dataplane/rbac.yaml +8 -0
- package/templates/applications/keycloak/application.yaml +9 -1
- package/templates/applications/keycloak/env.template +15 -6
- package/templates/applications/miso-controller/application.yaml +10 -2
- package/templates/applications/miso-controller/env.template +55 -14
- package/templates/applications/miso-controller/rbac.yaml +5 -0
- package/templates/external-system/README.md.hbs +20 -7
- package/templates/external-system/deploy.js.hbs +5 -5
- package/templates/external-system/env.template.hbs +22 -0
- package/templates/external-system/external-datasource.yaml.hbs +197 -118
- package/templates/infra/compose.yaml.hbs +20 -4
- package/templates/python/docker-compose.hbs +16 -0
- package/templates/typescript/docker-compose.hbs +16 -0
- package/integration/hubspot/README.md +0 -102
- package/integration/hubspot/env.template +0 -4
- package/integration/hubspot/hubspot-datasource-company.json +0 -541
- package/integration/hubspot/hubspot-datasource-contact.json +0 -639
- package/integration/hubspot/hubspot-datasource-deal.json +0 -588
- package/integration/hubspot/hubspot-datasource-users.json +0 -116
- package/integration/hubspot/test-artifacts/wizard-invalid-missing-source.yaml +0 -2
- package/integration/hubspot/test-artifacts/wizard-valid-for-dimension-key-test.yaml +0 -5
- package/integration/hubspot/test-artifacts/wizard-valid-for-dimension-path-test.yaml +0 -5
- package/lib/api/external-test.api.js +0 -111
- package/lib/schema/env-config.yaml +0 -43
- /package/integration/{hubspot → hubspot-test}/companies.json +0 -0
- /package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-app-name.yaml +0 -0
- /package/integration/{hubspot → hubspot-test}/test-artifacts/wizard-invalid-missing-app.yaml +0 -0
- /package/integration/{hubspot → hubspot-test}/test-dataplane-down-helpers.js +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Mandatory structure for Builder CLI anchor-docs.
|
|
3
|
+
globs: anchor-docs/**/*.md
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# anchor-docs (Builder)
|
|
8
|
+
|
|
9
|
+
When editing `anchor-docs/**/*.md` (only `README.md` is exempt). Copy `anchor-docs/_TEMPLATE` to create a new anchor (no `.md` extension — not validated):
|
|
10
|
+
|
|
11
|
+
- Include YAML frontmatter: `title`, `navigation_id`, `owner`, `last_verified_commit`.
|
|
12
|
+
- `navigation_id` must match **aifabrix-docs** `docs/builder/navigation.yaml` entries (`builder/<url>`).
|
|
13
|
+
- Sections required: `## Summary`, `## Details`, `## Examples`, `## Paths`.
|
|
14
|
+
- Reference repo files with **`[path:aifabrix-builder/...]`**; avoid backtick-only paths for the same references.
|
|
15
|
+
- Align with CLI user-doc rules: keep HTTP/API endpoint names out of `docs/commands/` user text; technical anchors may cite code paths.
|
package/README.md
CHANGED
|
@@ -48,7 +48,7 @@ Get the platform running locally so you can try it.
|
|
|
48
48
|
aifabrix up-infra
|
|
49
49
|
```
|
|
50
50
|
|
|
51
|
-
First-time run creates required infra secrets automatically. Use `aifabrix up-infra --
|
|
51
|
+
First-time run creates required infra secrets automatically. Use `aifabrix up-infra --adminPassword <password>` to set a custom admin password for Postgres, pgAdmin, and Redis Commander.
|
|
52
52
|
|
|
53
53
|
2. **Start the platform** (Keycloak, Miso Controller, Dataplane) from community images:
|
|
54
54
|
|
|
@@ -82,7 +82,7 @@ Create and deploy an external system (e.g. HubSpot): wizard or manual setup, the
|
|
|
82
82
|
|
|
83
83
|
**Example: HubSpot**
|
|
84
84
|
|
|
85
|
-
- Create: `aifabrix create hubspot` (external is the default; or `aifabrix wizard` for guided setup). For a web app use `aifabrix create my-app --type webapp`.
|
|
85
|
+
- Create: `aifabrix create hubspot-test` (external is the default; or `aifabrix wizard` for guided setup). For a web app use `aifabrix create my-app --type webapp`.
|
|
86
86
|
- Configure auth and datasources under `integration/hubspot-test/`.
|
|
87
87
|
- Validate: `aifabrix validate hubspot-test`
|
|
88
88
|
- Deploy: `aifabrix deploy hubspot-test`
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# anchor-docs (Builder CLI)
|
|
2
|
+
|
|
3
|
+
Canonical technical notes for the AI Fabrix Builder. Command references, JSON schemas, and generator entrypoints live here; **aifabrix-docs** `docs/builder/` should only summarize and link.
|
|
4
|
+
|
|
5
|
+
## Conventions
|
|
6
|
+
|
|
7
|
+
* Copy `anchor-docs/_TEMPLATE` to a new `*.md` file and fill in placeholders (the template is not `.md`, so it is not validated as an anchor).
|
|
8
|
+
* `navigation_id` must match **aifabrix-docs** `docs/builder/navigation.yaml` (`builder/<url>`).
|
|
9
|
+
* Use **`[path:aifabrix-builder/...]`** markers only.
|
|
10
|
+
* PRs touching anchors should request review from the `owner` team.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Copy this file to `your-topic.md` and replace placeholders. This is not `*.md` so it is not validated as an anchor-doc.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
title: <Title>
|
|
5
|
+
navigation_id: builder/<slug-from-navigation.yaml>
|
|
6
|
+
owner: <team>
|
|
7
|
+
last_verified_commit: <sha-or-TBD>
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Summary
|
|
11
|
+
|
|
12
|
+
<What this anchor covers for Builder CLI or schemas.>
|
|
13
|
+
|
|
14
|
+
## Details
|
|
15
|
+
|
|
16
|
+
<Implementation notes; keep persona docs in aifabrix-docs thin.>
|
|
17
|
+
|
|
18
|
+
## Examples
|
|
19
|
+
|
|
20
|
+
<aifabrix wizard|validate|deploy ...>
|
|
21
|
+
|
|
22
|
+
## Paths
|
|
23
|
+
|
|
24
|
+
[path:aifabrix-builder/README.md]
|
package/bin/aifabrix.js
CHANGED
|
@@ -28,14 +28,23 @@ function initializeCLI() {
|
|
|
28
28
|
|
|
29
29
|
program.name('aifabrix')
|
|
30
30
|
.version(packageJson.version)
|
|
31
|
-
.description(
|
|
31
|
+
.description(
|
|
32
|
+
'Local Docker infra, app scaffolding, validation, and deploy to Azure (or local) via Miso Controller'
|
|
33
|
+
);
|
|
32
34
|
|
|
33
35
|
// Delegate command setup to lib/cli.js (order matches help categories for consistency)
|
|
34
36
|
cli.setupCommands(program);
|
|
35
37
|
|
|
36
|
-
//
|
|
38
|
+
// Custom help replaces Commander default; append footer here (program.addHelpText is not applied)
|
|
39
|
+
const ROOT_HELP_FOOTER = `
|
|
40
|
+
|
|
41
|
+
More:
|
|
42
|
+
aifabrix <command> --help Options and examples for one command
|
|
43
|
+
docs/commands/README.md Command reference in the repo
|
|
44
|
+
`;
|
|
45
|
+
|
|
37
46
|
program.helpInformation = function() {
|
|
38
|
-
return buildCategorizedHelp(program);
|
|
47
|
+
return buildCategorizedHelp(program) + ROOT_HELP_FOOTER;
|
|
39
48
|
};
|
|
40
49
|
|
|
41
50
|
// Parse command line arguments
|
|
@@ -51,7 +60,7 @@ if (require.main === module) {
|
|
|
51
60
|
try {
|
|
52
61
|
initializeCLI();
|
|
53
62
|
} catch (error) {
|
|
54
|
-
logger.error('
|
|
63
|
+
logger.error('✖ Failed to initialize CLI:', error.message);
|
|
55
64
|
process.exit(1);
|
|
56
65
|
}
|
|
57
66
|
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# HubSpot CRM
|
|
2
|
+
|
|
3
|
+
HubSpot CRM integration with OpenAPI support for companies, contacts, and deals
|
|
4
|
+
|
|
5
|
+
## System Information
|
|
6
|
+
|
|
7
|
+
- **System Key**: `hubspot-test`
|
|
8
|
+
- **System Type**: `openapi`
|
|
9
|
+
- **Datasources**: 4
|
|
10
|
+
|
|
11
|
+
## Regenerating files with the CLI (recommended)
|
|
12
|
+
|
|
13
|
+
Datasource and system JSON under this folder are **normally produced by the Builder**, not edited by hand for structural/schema changes. Use one of these flows (from the **repository root**):
|
|
14
|
+
|
|
15
|
+
1. **Interactive wizard** (writes to `integration/hubspot-test/` when the app key is `hubspot-test`):
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
aifabrix wizard hubspot-test
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
2. **Headless wizard – known platform HubSpot** (same folder; needs dataplane + auth):
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
node bin/aifabrix.js wizard \
|
|
25
|
+
--config integration/hubspot-test/wizard-hubspot-test-headless.yaml \
|
|
26
|
+
--controller <YOUR_CONTROLLER_URL> \
|
|
27
|
+
--environment <YOUR_ENV>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Edit `deployment.controller` / `deployment.environment` in that YAML if you prefer not to pass flags.
|
|
31
|
+
|
|
32
|
+
3. **Helper script** (generates a temporary wizard config and runs the CLI; defaults OpenAPI to `companies.json` in this directory):
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
node integration/hubspot-test/create-hubspot.js --name hubspot-test --keep-wizard-files
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
After regeneration, run `aifabrix validate hubspot-test --type external` and the HubSpot integration tests as needed.
|
|
39
|
+
|
|
40
|
+
Committed copies may still be **trimmed or adjusted** for repo tests (e.g. deterministic fields); prefer changing **generators/templates** in `lib/` and `templates/` when defaults should change for everyone.
|
|
41
|
+
|
|
42
|
+
## Files
|
|
43
|
+
|
|
44
|
+
- `application.yaml` – Application configuration with `app` and `externalIntegration` blocks
|
|
45
|
+
- `hubspot-test-system.json` – External system definition (authentication, OpenAPI/MCP, RBAC)
|
|
46
|
+
- `hubspot-test-datasource-deal.json` – Datasource: HubSpot Deal
|
|
47
|
+
- `hubspot-test-datasource-contact.json` – Datasource: HubSpot Contact
|
|
48
|
+
- `hubspot-test-datasource-users.json` – Datasource: HubSpot Users
|
|
49
|
+
- `hubspot-test-datasource-company.json` – Datasource: HubSpot Company
|
|
50
|
+
- `env.template` – Environment variables template (secrets, API keys)
|
|
51
|
+
- `hubspot-test-deploy.json` – Deployment manifest (generated by `aifabrix json`)
|
|
52
|
+
|
|
53
|
+
Optional: `rbac.yaml` – Roles and permissions merged into the system when present.
|
|
54
|
+
|
|
55
|
+
## Quick Start
|
|
56
|
+
|
|
57
|
+
### 1. Create External System
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
aifabrix create hubspot-test
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
(External is the default type. Use `aifabrix create <name> --type webapp` for a builder app.)
|
|
64
|
+
|
|
65
|
+
Or use the interactive wizard:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
aifabrix wizard --app hubspot-test
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 2. Configure Authentication and Datasources
|
|
72
|
+
|
|
73
|
+
Edit files in `integration/hubspot-test/`:
|
|
74
|
+
|
|
75
|
+
- **Authentication**: `hubspot-test-system.json` (auth type, credentials placeholders)
|
|
76
|
+
- **Field mappings**: `hubspot-test-datasource-*.json` (dimensions, attributes, operations)
|
|
77
|
+
|
|
78
|
+
### 3. Validate Configuration
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
aifabrix validate hubspot-test --type external
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 4. Generate Deployment Manifest
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
aifabrix json hubspot-test --type external
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
This creates `hubspot-test-deploy.json` in `integration/hubspot-test/`.
|
|
91
|
+
|
|
92
|
+
### 5. Deploy
|
|
93
|
+
|
|
94
|
+
Controller URL and environment are read from config. Configure and log in first:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
aifabrix auth config --set-controller <url> --set-environment dev
|
|
98
|
+
aifabrix login
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Then deploy:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
aifabrix deploy hubspot-test
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Testing
|
|
108
|
+
|
|
109
|
+
### Unit Tests (Local Validation, No API)
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
aifabrix test hubspot-test
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Integration Tests (Via Dataplane)
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
aifabrix test-integration hubspot-test
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Deployment
|
|
122
|
+
|
|
123
|
+
Deploy via miso-controller pipeline (same as regular apps). Auth and controller come from `aifabrix login` and `aifabrix auth config`:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
aifabrix deploy hubspot-test
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Wizard E2E tests (`test.js`)
|
|
130
|
+
|
|
131
|
+
Run positive wizard tests with:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
pnpm test:hubspot-wizard:positive
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
If you see **"Invalid token or insufficient permissions"** or **"Failed to create wizard session"** even though `aifabrix auth status` shows connected, the dataplane may be configured to accept only **client credentials** for the wizard API, not device tokens.
|
|
138
|
+
|
|
139
|
+
**Option A – Use client credentials (recommended if dataplane requires them)**
|
|
140
|
+
|
|
141
|
+
1. Get a **client ID** and **client secret** for an app that the dataplane accepts for wizard (e.g. from your admin or Miso/Keycloak for the environment).
|
|
142
|
+
2. Put them in **`~/.aifabrix/secrets.local.yaml`** under keys that depend on the **app name in the wizard config**:
|
|
143
|
+
- For `wizard-hubspot-e2e.yaml` the app name is `wizard-e2e-e2e`, so use:
|
|
144
|
+
- `wizard-e2e-e2e-client-idKeyVault`: `<your client id>`
|
|
145
|
+
- `wizard-e2e-e2e-client-secretKeyVault`: `<your client secret>`
|
|
146
|
+
- If your platform uses a single “wizard” or “dataplane” app for all wizard runs, ask your admin for that app’s client ID/secret and the exact key names (they may be something like `dataplane-client-idKeyVault` / `dataplane-client-secretKeyVault`; the builder looks up `<appName>-client-idKeyVault` and `<appName>-client-secretKeyVault` where `appName` comes from the config file).
|
|
147
|
+
3. **Optional fallback:** you can also set **`integration/hubspot-test/.env`** with `CLIENTID` and `CLIENTSECRET`; the test runner maps those to `HUBSPOT_CLIENT_ID` / `HUBSPOT_CLIENT_SECRET` for real-credential tests, and the token manager uses `CLIENTID`/`CLIENTSECRET` when no secrets file entry exists for the app.
|
|
148
|
+
|
|
149
|
+
**Option B – Use device token**
|
|
150
|
+
|
|
151
|
+
If the dataplane is configured to accept device tokens for the wizard API, ensure you are logged in with `aifabrix login` and that the controller URL and environment match (e.g. `dev`). No client credentials are needed.
|
|
152
|
+
|
|
153
|
+
## Troubleshooting
|
|
154
|
+
|
|
155
|
+
- **Validation errors**: Run `aifabrix validate hubspot-test --type external` to see schema and manifest errors.
|
|
156
|
+
- **Deployment / auth**: Run `aifabrix auth config --set-controller <url> --set-environment <env>` and `aifabrix login` before `aifabrix deploy`.
|
|
157
|
+
- **File not found**: Run commands from the project root (where `package.json` and `integration/` live).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"app": {
|
|
3
|
-
"key": "hubspot",
|
|
3
|
+
"key": "hubspot-test",
|
|
4
4
|
"displayName": "HubSpot CRM",
|
|
5
5
|
"description": "HubSpot CRM integration with OpenAPI support for companies, contacts, and deals",
|
|
6
6
|
"type": "external"
|
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
"externalIntegration": {
|
|
9
9
|
"schemaBasePath": "./",
|
|
10
10
|
"systems": [
|
|
11
|
-
"hubspot-system.json"
|
|
11
|
+
"hubspot-test-system.json"
|
|
12
12
|
],
|
|
13
13
|
"dataSources": [
|
|
14
|
-
"hubspot-datasource-company.json",
|
|
15
|
-
"hubspot-datasource-contact.json",
|
|
16
|
-
"hubspot-datasource-deal.json",
|
|
17
|
-
"hubspot-datasource-users.json"
|
|
14
|
+
"hubspot-test-datasource-company.json",
|
|
15
|
+
"hubspot-test-datasource-contact.json",
|
|
16
|
+
"hubspot-test-datasource-deal.json",
|
|
17
|
+
"hubspot-test-datasource-users.json"
|
|
18
18
|
],
|
|
19
19
|
"autopublish": true,
|
|
20
20
|
"version": "1.0.0"
|
|
@@ -24,7 +24,7 @@ const execFileAsync = promisify(execFile);
|
|
|
24
24
|
const DEFAULT_CONTROLLER_URL = process.env.CONTROLLER_URL || 'http://localhost:3110';
|
|
25
25
|
const DEFAULT_ENVIRONMENT = process.env.ENVIRONMENT || 'miso';
|
|
26
26
|
const DEFAULT_OPENAPI_FILE = process.env.HUBSPOT_OPENAPI_FILE ||
|
|
27
|
-
path.join(process.cwd(), 'integration', 'hubspot', 'companies.json');
|
|
27
|
+
path.join(process.cwd(), 'integration', 'hubspot-test', 'companies.json');
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* Prints usage information
|
|
@@ -34,7 +34,7 @@ const DEFAULT_OPENAPI_FILE = process.env.HUBSPOT_OPENAPI_FILE ||
|
|
|
34
34
|
function printUsage() {
|
|
35
35
|
logger.log([
|
|
36
36
|
'Usage:',
|
|
37
|
-
' node integration/hubspot/create-hubspot.js [options]',
|
|
37
|
+
' node integration/hubspot-test/create-hubspot.js [options]',
|
|
38
38
|
'',
|
|
39
39
|
'Options:',
|
|
40
40
|
' --name <name> Application name (required)',
|
|
@@ -46,9 +46,9 @@ function printUsage() {
|
|
|
46
46
|
' --help Show this help message',
|
|
47
47
|
'',
|
|
48
48
|
'Examples:',
|
|
49
|
-
' node integration/hubspot/create-hubspot.js --name my-hubspot',
|
|
50
|
-
' node integration/hubspot/create-hubspot.js --name my-hubspot --output ~/my-project',
|
|
51
|
-
' node integration/hubspot/create-hubspot.js --name my-hubspot --openapi /path/to/openapi.json'
|
|
49
|
+
' node integration/hubspot-test/create-hubspot.js --name my-hubspot',
|
|
50
|
+
' node integration/hubspot-test/create-hubspot.js --name my-hubspot --output ~/my-project',
|
|
51
|
+
' node integration/hubspot-test/create-hubspot.js --name my-hubspot --openapi /path/to/openapi.json'
|
|
52
52
|
].join('\n'));
|
|
53
53
|
}
|
|
54
54
|
|
|
@@ -404,7 +404,7 @@ async function executeWizard(args) {
|
|
|
404
404
|
args.controller,
|
|
405
405
|
args.environment
|
|
406
406
|
);
|
|
407
|
-
logSuccess(
|
|
407
|
+
logSuccess(`✔ Created config: ${configPath}`);
|
|
408
408
|
|
|
409
409
|
logInfo('\n2. Running wizard...');
|
|
410
410
|
const wizardResult = await runWizard(configPath, args.controller, args.environment);
|
|
@@ -420,7 +420,7 @@ async function executeWizard(args) {
|
|
|
420
420
|
throw new Error('Wizard execution failed');
|
|
421
421
|
}
|
|
422
422
|
|
|
423
|
-
logSuccess('
|
|
423
|
+
logSuccess('✔ Wizard completed successfully');
|
|
424
424
|
return configPath;
|
|
425
425
|
}
|
|
426
426
|
|
|
@@ -444,7 +444,7 @@ async function processGeneratedFiles(args) {
|
|
|
444
444
|
if (outputDir !== wizardOutputDir) {
|
|
445
445
|
logInfo(`\n4. Copying files to: ${outputDir}`);
|
|
446
446
|
const copiedFiles = await copyDirectoryContents(wizardOutputDir, outputDir);
|
|
447
|
-
logSuccess(
|
|
447
|
+
logSuccess(`✔ Copied ${copiedFiles.length} files`);
|
|
448
448
|
} else {
|
|
449
449
|
logInfo(`\n4. Files are in: ${outputDir}`);
|
|
450
450
|
}
|
|
@@ -462,7 +462,7 @@ async function processGeneratedFiles(args) {
|
|
|
462
462
|
* @returns {Promise<void>} Resolves when summary is printed
|
|
463
463
|
*/
|
|
464
464
|
async function printSummary(outputDir, appName, environment) {
|
|
465
|
-
logSuccess('\n
|
|
465
|
+
logSuccess('\n✔ HubSpot integration created successfully!');
|
|
466
466
|
logger.log('\nGenerated files:');
|
|
467
467
|
const files = await listFiles(outputDir);
|
|
468
468
|
for (const file of files) {
|
|
@@ -490,7 +490,7 @@ async function cleanupFiles(configPath, wizardOutputDir, outputDir, keepWizardFi
|
|
|
490
490
|
if (!keepWizardFiles && outputDir !== wizardOutputDir) {
|
|
491
491
|
logInfo('\n5. Cleaning up wizard files...');
|
|
492
492
|
await fs.rm(wizardOutputDir, { recursive: true, force: true });
|
|
493
|
-
logSuccess('
|
|
493
|
+
logSuccess('✔ Cleaned up wizard files');
|
|
494
494
|
}
|
|
495
495
|
|
|
496
496
|
await fs.unlink(configPath).catch(() => {
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "hubspot-test-company",
|
|
3
|
+
"displayName": "HubSpot Company",
|
|
4
|
+
"description": "HubSpot companies datasource with field mappings for CRM company data",
|
|
5
|
+
"systemKey": "hubspot-test",
|
|
6
|
+
"entityType": "recordStorage",
|
|
7
|
+
"resourceType": "customer",
|
|
8
|
+
"enabled": true,
|
|
9
|
+
"version": "1.0.0",
|
|
10
|
+
"primaryKey": [
|
|
11
|
+
"id"
|
|
12
|
+
],
|
|
13
|
+
"labelKey": [
|
|
14
|
+
"name"
|
|
15
|
+
],
|
|
16
|
+
"metadataSchema": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"required": [
|
|
19
|
+
"id",
|
|
20
|
+
"externalId",
|
|
21
|
+
"properties"
|
|
22
|
+
],
|
|
23
|
+
"properties": {
|
|
24
|
+
"id": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"index": true
|
|
27
|
+
},
|
|
28
|
+
"externalId": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"index": true
|
|
31
|
+
},
|
|
32
|
+
"name": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"filter": true
|
|
35
|
+
},
|
|
36
|
+
"properties": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"additionalProperties": true
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"dimensions": {
|
|
43
|
+
"country": {
|
|
44
|
+
"type": "local",
|
|
45
|
+
"field": "country"
|
|
46
|
+
},
|
|
47
|
+
"domain": {
|
|
48
|
+
"type": "local",
|
|
49
|
+
"field": "domain"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"fieldMappings": {
|
|
53
|
+
"attributes": {
|
|
54
|
+
"id": {
|
|
55
|
+
"expression": "{{raw.id}}"
|
|
56
|
+
},
|
|
57
|
+
"externalId": {
|
|
58
|
+
"expression": "{{raw.id}}"
|
|
59
|
+
},
|
|
60
|
+
"name": {
|
|
61
|
+
"expression": "{{raw.properties.name.value}} | trim"
|
|
62
|
+
},
|
|
63
|
+
"domain": {
|
|
64
|
+
"expression": "{{raw.properties.domain.value}} | toLower | trim"
|
|
65
|
+
},
|
|
66
|
+
"country": {
|
|
67
|
+
"expression": "{{raw.properties.country.value}} | toUpper | trim"
|
|
68
|
+
},
|
|
69
|
+
"city": {
|
|
70
|
+
"expression": "{{raw.properties.city.value}} | trim"
|
|
71
|
+
},
|
|
72
|
+
"industry": {
|
|
73
|
+
"expression": "{{raw.properties.industry.value}} | trim"
|
|
74
|
+
},
|
|
75
|
+
"website": {
|
|
76
|
+
"expression": "{{raw.properties.website.value}} | trim"
|
|
77
|
+
},
|
|
78
|
+
"phone": {
|
|
79
|
+
"expression": "{{raw.properties.phone.value}} | trim"
|
|
80
|
+
},
|
|
81
|
+
"createdAt": {
|
|
82
|
+
"expression": "{{raw.properties.createdate.value}}"
|
|
83
|
+
},
|
|
84
|
+
"updatedAt": {
|
|
85
|
+
"expression": "{{raw.properties.hs_lastmodifieddate.value}}"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"exposed": {
|
|
90
|
+
"description": "Exposed fields for HubSpot companies",
|
|
91
|
+
"schema": {
|
|
92
|
+
"id": "metadata.id",
|
|
93
|
+
"externalId": "metadata.externalId",
|
|
94
|
+
"name": "metadata.name",
|
|
95
|
+
"domain": "metadata.domain",
|
|
96
|
+
"country": "metadata.country",
|
|
97
|
+
"city": "metadata.city",
|
|
98
|
+
"industry": "metadata.industry",
|
|
99
|
+
"website": "metadata.website",
|
|
100
|
+
"phone": "metadata.phone",
|
|
101
|
+
"createdAt": "metadata.createdAt",
|
|
102
|
+
"updatedAt": "metadata.updatedAt"
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"openapi": {
|
|
106
|
+
"enabled": true,
|
|
107
|
+
"documentKey": "hubspot-v3",
|
|
108
|
+
"baseUrl": "https://api.hubapi.com",
|
|
109
|
+
"operations": {
|
|
110
|
+
"list": {
|
|
111
|
+
"operationId": "getCompanies",
|
|
112
|
+
"method": "GET",
|
|
113
|
+
"path": "/crm/v3/objects/companies"
|
|
114
|
+
},
|
|
115
|
+
"get": {
|
|
116
|
+
"operationId": "getCompany",
|
|
117
|
+
"method": "GET",
|
|
118
|
+
"path": "/crm/v3/objects/companies/{companyId}"
|
|
119
|
+
},
|
|
120
|
+
"create": {
|
|
121
|
+
"operationId": "createCompany",
|
|
122
|
+
"method": "POST",
|
|
123
|
+
"path": "/crm/v3/objects/companies"
|
|
124
|
+
},
|
|
125
|
+
"update": {
|
|
126
|
+
"operationId": "updateCompany",
|
|
127
|
+
"method": "PATCH",
|
|
128
|
+
"path": "/crm/v3/objects/companies/{companyId}"
|
|
129
|
+
},
|
|
130
|
+
"delete": {
|
|
131
|
+
"operationId": "deleteCompany",
|
|
132
|
+
"method": "DELETE",
|
|
133
|
+
"path": "/crm/v3/objects/companies/{companyId}"
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
"autoRbac": true
|
|
137
|
+
}
|
|
138
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "hubspot-test-contact",
|
|
3
|
+
"displayName": "HubSpot Contact",
|
|
4
|
+
"description": "HubSpot contacts datasource with field mappings for CRM contact data",
|
|
5
|
+
"systemKey": "hubspot-test",
|
|
6
|
+
"entityType": "recordStorage",
|
|
7
|
+
"resourceType": "contact",
|
|
8
|
+
"enabled": true,
|
|
9
|
+
"version": "1.0.0",
|
|
10
|
+
"primaryKey": [
|
|
11
|
+
"id"
|
|
12
|
+
],
|
|
13
|
+
"labelKey": [
|
|
14
|
+
"email"
|
|
15
|
+
],
|
|
16
|
+
"metadataSchema": {
|
|
17
|
+
"type": "object",
|
|
18
|
+
"required": [
|
|
19
|
+
"id",
|
|
20
|
+
"externalId",
|
|
21
|
+
"properties"
|
|
22
|
+
],
|
|
23
|
+
"properties": {
|
|
24
|
+
"id": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"index": true
|
|
27
|
+
},
|
|
28
|
+
"externalId": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"index": true
|
|
31
|
+
},
|
|
32
|
+
"email": {
|
|
33
|
+
"type": "string",
|
|
34
|
+
"filter": true
|
|
35
|
+
},
|
|
36
|
+
"properties": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"additionalProperties": true
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"dimensions": {
|
|
43
|
+
"email": {
|
|
44
|
+
"type": "local",
|
|
45
|
+
"field": "email"
|
|
46
|
+
},
|
|
47
|
+
"country": {
|
|
48
|
+
"type": "local",
|
|
49
|
+
"field": "country"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"fieldMappings": {
|
|
53
|
+
"attributes": {
|
|
54
|
+
"id": {
|
|
55
|
+
"expression": "{{raw.id}}"
|
|
56
|
+
},
|
|
57
|
+
"externalId": {
|
|
58
|
+
"expression": "{{raw.id}}"
|
|
59
|
+
},
|
|
60
|
+
"firstName": {
|
|
61
|
+
"expression": "{{raw.properties.firstname.value}} | trim"
|
|
62
|
+
},
|
|
63
|
+
"lastName": {
|
|
64
|
+
"expression": "{{raw.properties.lastname.value}} | trim"
|
|
65
|
+
},
|
|
66
|
+
"email": {
|
|
67
|
+
"expression": "{{raw.properties.email.value}} | trim"
|
|
68
|
+
},
|
|
69
|
+
"phone": {
|
|
70
|
+
"expression": "{{raw.properties.phone.value}} | trim"
|
|
71
|
+
},
|
|
72
|
+
"company": {
|
|
73
|
+
"expression": "{{raw.properties.company.value}} | trim"
|
|
74
|
+
},
|
|
75
|
+
"jobTitle": {
|
|
76
|
+
"expression": "{{raw.properties.jobtitle.value}} | trim"
|
|
77
|
+
},
|
|
78
|
+
"address": {
|
|
79
|
+
"expression": "{{raw.properties.address.value}} | trim"
|
|
80
|
+
},
|
|
81
|
+
"city": {
|
|
82
|
+
"expression": "{{raw.properties.city.value}} | trim"
|
|
83
|
+
},
|
|
84
|
+
"country": {
|
|
85
|
+
"expression": "{{raw.properties.country.value}} | toUpper | trim"
|
|
86
|
+
},
|
|
87
|
+
"createdAt": {
|
|
88
|
+
"expression": "{{raw.properties.createdate.value}}"
|
|
89
|
+
},
|
|
90
|
+
"updatedAt": {
|
|
91
|
+
"expression": "{{raw.properties.hs_lastmodifieddate.value}}"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"exposed": {
|
|
96
|
+
"description": "Exposed fields for HubSpot contacts",
|
|
97
|
+
"schema": {
|
|
98
|
+
"id": "metadata.id",
|
|
99
|
+
"externalId": "metadata.externalId",
|
|
100
|
+
"firstName": "metadata.firstName",
|
|
101
|
+
"lastName": "metadata.lastName",
|
|
102
|
+
"email": "metadata.email",
|
|
103
|
+
"phone": "metadata.phone",
|
|
104
|
+
"company": "metadata.company",
|
|
105
|
+
"jobTitle": "metadata.jobTitle",
|
|
106
|
+
"address": "metadata.address",
|
|
107
|
+
"city": "metadata.city",
|
|
108
|
+
"country": "metadata.country",
|
|
109
|
+
"createdAt": "metadata.createdAt",
|
|
110
|
+
"updatedAt": "metadata.updatedAt"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"openapi": {
|
|
114
|
+
"enabled": true,
|
|
115
|
+
"documentKey": "hubspot-v3",
|
|
116
|
+
"baseUrl": "https://api.hubapi.com",
|
|
117
|
+
"operations": {
|
|
118
|
+
"list": {
|
|
119
|
+
"operationId": "getContacts",
|
|
120
|
+
"method": "GET",
|
|
121
|
+
"path": "/crm/v3/objects/contacts"
|
|
122
|
+
},
|
|
123
|
+
"get": {
|
|
124
|
+
"operationId": "getContact",
|
|
125
|
+
"method": "GET",
|
|
126
|
+
"path": "/crm/v3/objects/contacts/{contactId}"
|
|
127
|
+
},
|
|
128
|
+
"create": {
|
|
129
|
+
"operationId": "createContact",
|
|
130
|
+
"method": "POST",
|
|
131
|
+
"path": "/crm/v3/objects/contacts"
|
|
132
|
+
},
|
|
133
|
+
"update": {
|
|
134
|
+
"operationId": "updateContact",
|
|
135
|
+
"method": "PATCH",
|
|
136
|
+
"path": "/crm/v3/objects/contacts/{contactId}"
|
|
137
|
+
},
|
|
138
|
+
"delete": {
|
|
139
|
+
"operationId": "deleteContact",
|
|
140
|
+
"method": "DELETE",
|
|
141
|
+
"path": "/crm/v3/objects/contacts/{contactId}"
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
"autoRbac": true
|
|
145
|
+
}
|
|
146
|
+
}
|