@eventcatalog/core 5.0.0-beta.8 → 5.0.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/LICENSE +234 -134
- package/README.md +5 -5
- package/dist/analytics/analytics.cjs +18 -3
- package/dist/analytics/analytics.d.cts +1 -1
- package/dist/analytics/analytics.d.ts +1 -1
- package/dist/analytics/analytics.js +3 -2
- package/dist/analytics/log-build.cjs +157 -76
- package/dist/analytics/log-build.d.cts +2 -2
- package/dist/analytics/log-build.d.ts +2 -2
- package/dist/analytics/log-build.js +7 -5
- package/dist/analytics/studio-usage.cjs +90 -0
- package/dist/analytics/studio-usage.d.cts +5 -0
- package/dist/analytics/studio-usage.d.ts +5 -0
- package/dist/analytics/studio-usage.js +10 -0
- package/dist/analytics/telemetry.cjs +42 -0
- package/dist/analytics/telemetry.d.cts +20 -0
- package/dist/analytics/telemetry.d.ts +20 -0
- package/dist/analytics/telemetry.js +8 -0
- package/dist/catalog-runtime.cjs +1 -1
- package/dist/{chunk-RFIXKATC.js → chunk-4G7FSRPN.js} +35 -42
- package/dist/{chunk-AWOO63ME.js → chunk-AD7CL772.js} +11 -4
- package/dist/chunk-CA6WCQ2T.js +54 -0
- package/dist/chunk-CPW6G62V.js +17 -0
- package/dist/{chunk-PU25TOOJ.js → chunk-JZN4RSMF.js} +1 -1
- package/dist/{chunk-4W55ZOOS.js → chunk-NEAVAFSJ.js} +66 -35
- package/dist/{chunk-C6T2AAFR.js → chunk-NIVST4WY.js} +9 -3
- package/dist/{chunk-ENAG6UH7.js → chunk-NKNOXQ62.js} +1 -6
- package/dist/{chunk-AYNZXUB5.js → chunk-OX6TSVHY.js} +5 -5
- package/dist/{chunk-36RYTYT5.js → chunk-PD7KTSYN.js} +1 -1
- package/dist/{chunk-RDIZJ7UT.js → chunk-RE7UTPWH.js} +1 -1
- package/dist/chunk-S5GWAUG5.js +29 -0
- package/dist/{chunk-T4G3VVZ4.js → chunk-YQGRMDRB.js} +4 -2
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/docs/api/02-config.md +57 -7
- package/dist/docs/development/00-why-eventcatalog.md +11 -11
- package/dist/docs/development/01-fundamentals.md +20 -13
- package/dist/docs/development/01-getting-started/configuration-overview.md +2 -2
- package/dist/docs/development/01-getting-started/installation.md +9 -1
- package/dist/docs/development/_getting-started.mdx +1 -1
- package/dist/docs/development/ask-your-architecture/01-intro.md +5 -5
- package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/01-what-is-eventcatalog-assistant.md +0 -4
- package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/02-configuration.md +15 -3
- package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/03-bring-your-own-tools.md +0 -3
- package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/_category_.json +1 -1
- package/dist/docs/development/ask-your-architecture/02-llms.txt.md +1 -1
- package/dist/docs/development/ask-your-architecture/{05-skills/01-introduction.md → 03-install-skills.md} +57 -7
- package/dist/docs/development/ask-your-architecture/03-mcp-server/_category_.json +1 -1
- package/dist/docs/development/ask-your-architecture/03-mcp-server/getting-started.md +86 -33
- package/dist/docs/development/ask-your-architecture/03-mcp-server/introduction.md +14 -4
- package/dist/docs/development/ask-your-architecture/03-schemas.txt.md +1 -1
- package/dist/docs/development/ask-your-architecture/04-agents/_category_.json +1 -1
- package/dist/docs/development/authentication/01-introduction.md +2 -23
- package/dist/docs/development/authentication/02-enabling-authentication.md +0 -20
- package/dist/docs/development/authentication/07-rbac-middleware.md +0 -2
- package/dist/docs/development/authentication/providers/03-setting-up-github.md +0 -2
- package/dist/docs/development/authentication/providers/03a-setting-up-google.md +0 -2
- package/dist/docs/development/authentication/providers/04-setting-up-azure-ad.md +0 -2
- package/dist/docs/development/authentication/providers/05-setting-up-okta.md +0 -3
- package/dist/docs/development/authentication/providers/06-setting-up-auth0.md +0 -2
- package/dist/docs/development/bring-your-own-documentation/01-introduction.md +0 -4
- package/dist/docs/development/bring-your-own-documentation/custom-pages/01-introduction.md +0 -3
- package/dist/docs/development/bring-your-own-documentation/custom-pages/02-adding-custom-docs.md +0 -17
- package/dist/docs/development/bring-your-own-documentation/custom-pages/03-components.md +0 -4
- package/dist/docs/development/bring-your-own-documentation/custom-pages/04-owners.md +0 -2
- package/dist/docs/development/bring-your-own-documentation/resource-docs/01-introduction.md +1 -3
- package/dist/docs/development/bring-your-own-documentation/resource-docs/02-adding-resource-docs.md +1 -4
- package/dist/docs/development/bring-your-own-documentation/resource-docs/03-categories.md +0 -2
- package/dist/docs/development/bring-your-own-documentation/resource-docs/04-versioning.md +1 -3
- package/dist/docs/development/components/components/11-flow.md +17 -0
- package/dist/docs/development/components/components/15-nodegraph.md +43 -10
- package/dist/docs/development/components/components/18-remote-schema.md +1 -4
- package/dist/docs/development/components/custom-components/07-reference.md +14 -0
- package/dist/docs/development/customization/02-themes.md +0 -5
- package/dist/docs/development/customization/03-search.md +1 -1
- package/dist/docs/development/customization/05-custom-pages-and-api-routes/01-introduction.md +0 -2
- package/dist/docs/development/customization/05-custom-pages-and-api-routes/04-reference.md +7 -1
- package/dist/docs/development/customization/05-resource-sidebar.md +1 -1
- package/dist/docs/development/customization/09-embed-eventcatalog.md +20 -25
- package/dist/docs/development/deployment/hosting-options.md +7 -2
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/05-fix-common-problems.md +16 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/03-rules.md +31 -1
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/05-supported-resources.md +1 -1
- package/dist/docs/development/governance/architecture-change-detection/01-introduction.md +0 -10
- package/dist/docs/development/governance/architecture-change-detection/06-pipeline-gates.md +0 -4
- package/dist/docs/development/guides/97-architecture-graph.md +1 -1
- package/dist/docs/development/guides/99-adding-analytics.md +0 -7
- package/dist/docs/development/guides/domains/03-model-subdomains.md +2 -2
- package/dist/docs/development/guides/domains/04-add-resources-to-domains/01-add-systems-to-domains.md +3 -1
- package/dist/docs/development/guides/domains/04-add-resources-to-domains/02-add-services-to-domains.md +5 -1
- package/dist/docs/development/guides/domains/04-add-resources-to-domains/03-add-messages-to-domains.md +2 -2
- package/dist/docs/development/guides/domains/04-add-resources-to-domains/05-add-entities-to-domains.md +1 -1
- package/dist/docs/development/guides/domains/04-add-resources-to-domains/06-domain-resources-page.md +40 -0
- package/dist/docs/development/guides/domains/06-visualize-domains/01-domain-diagram.md +89 -0
- package/dist/docs/development/guides/domains/06-visualize-domains/_category_.json +1 -2
- package/dist/docs/development/guides/domains/09-reference.md +4 -4
- package/dist/docs/development/guides/owners/automated-teams-and-users/create-your-own-connector.md +0 -2
- package/dist/docs/development/guides/owners/automated-teams-and-users/sync-from-github.md +0 -3
- package/dist/docs/development/guides/owners/automated-teams-and-users/sync-from-microsoft-entra.md +0 -2
- package/dist/docs/development/guides/resources/adrs/03-linking-resources.md +8 -0
- package/dist/docs/development/guides/resources/adrs/06-reference.md +4 -4
- package/dist/docs/development/guides/resources/agents/11-reference.md +1 -1
- package/dist/docs/development/guides/resources/data/04-reference.md +1 -1
- package/dist/docs/development/guides/resources/data-products/07-reference.md +1 -1
- package/dist/docs/development/guides/resources/entities/05-entity-maps.md +1 -1
- package/dist/docs/development/guides/resources/entities/06-reference.md +2 -2
- package/dist/docs/development/guides/resources/flows/01-introduction.md +11 -1
- package/dist/docs/development/guides/resources/flows/03-model-flow-steps.md +65 -6
- package/dist/docs/development/guides/resources/flows/05-explore-flows.md +112 -0
- package/dist/docs/development/guides/resources/flows/06-reference.md +25 -4
- package/dist/docs/development/guides/resources/messages/01-what-are-messages.md +19 -0
- package/dist/docs/development/guides/resources/messages/04-message-channels/01-introduction.md +16 -0
- package/dist/docs/development/guides/resources/messages/04-message-channels/05-reference.md +2 -1
- package/dist/docs/development/guides/resources/messages/10-reference.md +6 -3
- package/dist/docs/development/guides/resources/schemas/04-explore-schemas/01-schema-explorer.md +2 -2
- package/dist/docs/development/guides/resources/schemas/04-explore-schemas/02-fields-explorer.md +0 -9
- package/dist/docs/development/guides/resources/schemas/05-schema-api.md +0 -3
- package/dist/docs/development/guides/resources/schemas/06-schema-mcp.md +11 -3
- package/dist/docs/development/guides/resources/services/04-add-resources-to-services/03-add-entities-to-services.md +1 -1
- package/dist/docs/development/guides/resources/services/05-resources-page.md +50 -0
- package/dist/docs/development/guides/resources/services/08-reference.md +2 -1
- package/dist/docs/development/guides/systems/01-introduction.md +1 -1
- package/dist/docs/development/guides/systems/02-create-system.md +2 -2
- package/dist/docs/development/guides/systems/03-add-resources-to-systems.md +35 -9
- package/dist/docs/development/guides/systems/04-model-relationships-and-actors.md +5 -3
- package/dist/docs/development/guides/systems/05-system-context-maps.md +39 -22
- package/dist/docs/development/guides/systems/06-reference.md +4 -4
- package/dist/docs/development/license/01-license-file.md +151 -0
- package/dist/docs/development/license/_category_.json +12 -0
- package/dist/docs/development/license-keys/_category_.json +3 -3
- package/dist/docs/development/license-keys/integrations.md +7 -37
- package/dist/docs/development/license-keys/license-validation.md +4 -0
- package/dist/docs/development/license-keys/overview.md +5 -1
- package/dist/docs/development/license-keys/plans.md +4 -2
- package/dist/docs/development/studio/01-introduction.md +60 -0
- package/dist/docs/development/studio/02-create-a-canvas.md +103 -0
- package/dist/docs/development/studio/03-set-up-persistent-storage.md +59 -0
- package/dist/docs/development/studio/04-collaborate-on-a-canvas.md +78 -0
- package/dist/docs/development/studio/05-connect-your-agent.md +102 -0
- package/dist/docs/development/studio/06-run-studio-in-production.md +54 -0
- package/dist/docs/development/studio/07-reference.md +294 -0
- package/dist/docs/development/studio/_category_.json +12 -0
- package/dist/docs/development/upgrading/v5.md +345 -0
- package/dist/docs/federation/00-overview.md +2 -8
- package/dist/docs/federation/01-first-federation.md +6 -18
- package/dist/docs/federation/explanation/how-it-works.md +0 -4
- package/dist/docs/federation/explanation/lockfile-and-cache.md +0 -4
- package/dist/docs/federation/explanation/mvp-status-and-feedback.md +0 -4
- package/dist/docs/federation/explanation/ownership-and-references.md +0 -4
- package/dist/docs/federation/how-to/configure-github-sources.md +6 -5
- package/dist/docs/federation/how-to/configure-validation-rules.md +0 -4
- package/dist/docs/federation/how-to/run-in-ci.md +2 -9
- package/dist/docs/federation/how-to/share-assets-and-components.md +0 -4
- package/dist/docs/federation/how-to/use-local-sources.md +0 -4
- package/dist/docs/federation/legacy-federation/00-introduction.md +4 -22
- package/dist/docs/federation/legacy-federation/01-installation.md +7 -58
- package/dist/docs/federation/legacy-federation/02-plugin-configuration.md +3 -21
- package/dist/docs/federation/legacy-federation/03-examples.md +3 -5
- package/dist/docs/federation/legacy-federation/04-configuration.md +3 -8
- package/dist/docs/federation/legacy-federation/05-setup-team-catalog.md +3 -6
- package/dist/docs/federation/reference/cli.md +2 -8
- package/dist/docs/federation/reference/configuration.md +0 -4
- package/dist/docs/federation/reference/diagnostic-rules.md +0 -5
- package/dist/docs/federation/reference/generated-output.md +0 -4
- package/dist/docs/federation/reference/supported-content.md +0 -4
- package/dist/docs/federation/reference/troubleshooting.md +0 -14
- package/dist/docs/plugins/02-generators.md +1 -1
- package/dist/docs/plugins/amazon-apigateway/00-intro.md +3 -28
- package/dist/docs/plugins/amazon-apigateway/01-installation.md +4 -56
- package/dist/docs/plugins/amazon-apigateway/02-plugin-configuration.md +1 -6
- package/dist/docs/plugins/apicurio/00-intro.md +2 -31
- package/dist/docs/plugins/apicurio/01-installation.md +2 -26
- package/dist/docs/plugins/apicurio/02-plugin-configuration.md +5 -13
- package/dist/docs/plugins/apicurio/03-features.md +1 -3
- package/dist/docs/plugins/asyncapi/00-intro.md +2 -28
- package/dist/docs/plugins/asyncapi/01-installation.md +3 -54
- package/dist/docs/plugins/asyncapi/02-plugin-configuration.md +2 -1
- package/dist/docs/plugins/aws-glue-registry/00-intro.md +4 -32
- package/dist/docs/plugins/aws-glue-registry/00a-installation.md +3 -53
- package/dist/docs/plugins/azure-schema-registry/00-intro.md +4 -32
- package/dist/docs/plugins/azure-schema-registry/01-installation.md +6 -33
- package/dist/docs/plugins/azure-schema-registry/02-plugin-configuration.md +1 -14
- package/dist/docs/plugins/azure-schema-registry/04-examples.md +0 -2
- package/dist/docs/plugins/backstage/00-overview.md +1 -7
- package/dist/docs/plugins/backstage/01-get-started.md +6 -15
- package/dist/docs/plugins/backstage/06-configuration.md +2 -8
- package/dist/docs/plugins/confluent-schema-registry/00-intro.md +2 -29
- package/dist/docs/plugins/confluent-schema-registry/01-installation.md +2 -26
- package/dist/docs/plugins/eventbridge/00-intro.md +0 -4
- package/dist/docs/plugins/eventbridge/00a-installation.md +1 -87
- package/dist/docs/plugins/eventbridge/03-api.md +2 -20
- package/dist/docs/plugins/github/00-intro.md +0 -31
- package/dist/docs/plugins/github/01-installation.md +2 -34
- package/dist/docs/plugins/graphql/00-intro.md +0 -30
- package/dist/docs/plugins/graphql/01-installation.md +1 -53
- package/dist/docs/plugins/graphql/02-plugin-configuration.md +0 -1
- package/dist/docs/plugins/hookdeck/01-intro.md +1 -1
- package/dist/docs/plugins/openapi/00-intro.md +0 -30
- package/dist/docs/plugins/openapi/01-installation.md +1 -57
- package/dist/docs/plugins/openapi/02-plugin-configuration.md +0 -5
- package/dist/docs/plugins/openapi/03-features.md +0 -4
- package/dist/eventcatalog-config-file-utils.cjs +34 -41
- package/dist/eventcatalog-config-file-utils.d.cts +56 -58
- package/dist/eventcatalog-config-file-utils.d.ts +56 -58
- package/dist/eventcatalog-config-file-utils.js +1 -1
- package/dist/eventcatalog.cjs +408 -281
- package/dist/eventcatalog.config.d.cts +26 -15
- package/dist/eventcatalog.config.d.ts +26 -15
- package/dist/eventcatalog.js +46 -27
- package/dist/features.cjs +36 -49
- package/dist/features.d.cts +1 -3
- package/dist/features.d.ts +1 -3
- package/dist/features.js +4 -6
- package/dist/federation/federate.cjs +37 -44
- package/dist/federation/federate.js +5 -5
- package/dist/federation/source-provider.js +2 -2
- package/dist/generate.cjs +37 -42
- package/dist/generate.js +4 -4
- package/dist/resolve-catalog-dependencies.cjs +34 -41
- package/dist/resolve-catalog-dependencies.js +2 -2
- package/dist/runtime-dependencies/@eventcatalog__visualiser__studio-fonts.css.mjs +3 -0
- package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.css.mjs +3 -0
- package/dist/runtime-dependencies/@eventcatalog__visualiser__studio.mjs +3 -0
- package/dist/runtime-dependencies/htmlparser2.mjs +3 -0
- package/dist/runtime-dependencies/manifest.json +5 -1
- package/dist/runtime-dependencies/react-syntax-highlighter__dist__cjs__create-element.js.mjs +3 -0
- package/dist/utils/child-process-signals.cjs +53 -0
- package/dist/utils/child-process-signals.d.cts +19 -0
- package/dist/utils/child-process-signals.d.ts +19 -0
- package/dist/utils/child-process-signals.js +6 -0
- package/dist/utils/cli-logger.cjs +1 -1
- package/dist/utils/cli-logger.js +2 -2
- package/dist/utils/license-status.cjs +11 -4
- package/dist/utils/license-status.d.cts +3 -2
- package/dist/utils/license-status.d.ts +3 -2
- package/dist/utils/license-status.js +1 -1
- package/eventcatalog/astro.config.mjs +21 -1
- package/eventcatalog/integrations/config-loader.mjs +56 -58
- package/eventcatalog/integrations/skip-startup-reload.mjs +31 -0
- package/eventcatalog/integrations/stable-dependency-order.mjs +29 -0
- package/eventcatalog/integrations/storage.mjs +20 -0
- package/eventcatalog/integrations/studio-server.mjs +4 -1
- package/eventcatalog/src/components/CatalogGraph/CatalogForceGraph.tsx +39 -0
- package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +2 -0
- package/eventcatalog/src/components/Homepage/CatalogDashboard.astro +342 -0
- package/eventcatalog/src/components/MDX/NodeGraph/AstroNodeGraph.tsx +60 -4
- package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.astro +5 -1
- package/eventcatalog/src/components/NavigationProgress.astro +7 -0
- package/eventcatalog/src/components/SchemaExplorer/ApiContentViewer.tsx +2 -0
- package/eventcatalog/src/components/SchemaExplorer/ExamplesViewer.tsx +2 -0
- package/eventcatalog/src/components/SchemaExplorer/SchemaCodeModal.tsx +2 -0
- package/eventcatalog/src/components/SchemaExplorer/SchemaContentViewer.tsx +2 -0
- package/eventcatalog/src/components/Search/SearchDataLoader.astro +16 -28
- package/eventcatalog/src/components/Search/SearchModal.tsx +2 -10
- package/eventcatalog/src/components/Search/search-utils.ts +26 -0
- package/eventcatalog/src/components/Seo.astro +5 -1
- package/eventcatalog/src/components/Settings/AssistantSettingsForm.tsx +53 -48
- package/eventcatalog/src/components/Settings/GeneralSettingsForm.tsx +183 -178
- package/eventcatalog/src/components/Settings/LicenseSettings.tsx +140 -31
- package/eventcatalog/src/components/Settings/LlmAccessSettingsForm.tsx +40 -35
- package/eventcatalog/src/components/Settings/LogoUpload.tsx +1 -1
- package/eventcatalog/src/components/Settings/McpSettingsForm.tsx +9 -8
- package/eventcatalog/src/components/Settings/Row.tsx +7 -4
- package/eventcatalog/src/components/Settings/SettingsShared.tsx +3 -3
- package/eventcatalog/src/components/SideNav/NestedSideBar/index.tsx +37 -76
- package/eventcatalog/src/components/SideNav/NestedSideBar/storage.ts +2 -0
- package/eventcatalog/src/components/SideNav/NestedSideBar/utils.ts +122 -1
- package/eventcatalog/src/components/SideNav/SideNav.astro +9 -1
- package/eventcatalog/src/components/TrialBadge.astro +20 -9
- package/eventcatalog/src/content.config.ts +19 -2
- package/eventcatalog/src/features/auth/error.astro +4 -2
- package/eventcatalog/src/features/auth/login.astro +2 -1
- package/eventcatalog/src/features/auth/middleware/middleware-auth.ts +21 -1
- package/eventcatalog/src/features/auth/unauthorized.astro +1 -1
- package/eventcatalog/src/features/fields/pages/fields.astro +1 -1
- package/eventcatalog/src/features/integrations/eventcatalog-features.ts +13 -7
- package/eventcatalog/src/features/mcp/apps/architecture-diagram/node-chat.tsx +6 -45
- package/eventcatalog/src/features/mcp/apps/canvas/shared.ts +3 -3
- package/eventcatalog/src/features/mcp/apps/canvas/styles.css +3 -1
- package/eventcatalog/src/features/mcp/apps/canvas/view.tsx +7 -5
- package/eventcatalog/src/features/mcp/apps/generated/canvas.html +123 -98
- package/eventcatalog/src/features/mcp/apps/generated/viewer.html +118 -101
- package/eventcatalog/src/features/mcp/mcp-server.ts +20 -4
- package/eventcatalog/src/features/server/start.ts +25 -0
- package/eventcatalog/src/features/storage/database.ts +88 -0
- package/eventcatalog/src/features/storage/migrations.ts +85 -0
- package/eventcatalog/src/features/storage/sql/database.sql +5 -0
- package/eventcatalog/src/features/storage/sql/migrations/0001-studio-canvases.sql +12 -0
- package/eventcatalog/src/features/storage/sql/migrations.sql +15 -0
- package/eventcatalog/src/features/storage/sql.ts +28 -0
- package/eventcatalog/src/features/studio/agent-choreography.ts +13 -10
- package/eventcatalog/src/features/studio/agents.ts +28 -0
- package/eventcatalog/src/features/studio/api/canvases-api.ts +219 -0
- package/eventcatalog/src/features/studio/api/canvases.ts +25 -0
- package/eventcatalog/src/features/studio/api/client.ts +40 -0
- package/eventcatalog/src/features/studio/canvas-actions.ts +160 -34
- package/eventcatalog/src/features/studio/canvas-preview.ts +1 -2
- package/eventcatalog/src/features/studio/catalog.ts +16 -14
- package/eventcatalog/src/features/studio/components/CanvasHeader.tsx +274 -105
- package/eventcatalog/src/features/studio/components/CanvasStatusMenu.tsx +15 -14
- package/eventcatalog/src/features/studio/components/ConnectAgentDialog.tsx +272 -119
- package/eventcatalog/src/features/studio/components/ConnectionsChooser.tsx +1 -2
- package/eventcatalog/src/features/studio/components/DeleteCanvasDialog.tsx +65 -0
- package/eventcatalog/src/features/studio/components/Dialog.tsx +60 -0
- package/eventcatalog/src/features/studio/components/JoinForm.tsx +101 -26
- package/eventcatalog/src/features/studio/components/LeftPanel.tsx +122 -230
- package/eventcatalog/src/features/studio/components/NodeDetails.tsx +183 -0
- package/eventcatalog/src/features/studio/components/OpenInStudioDialog.tsx +79 -0
- package/eventcatalog/src/features/studio/components/Presence.tsx +52 -45
- package/eventcatalog/src/features/studio/components/ShareDialog.tsx +277 -141
- package/eventcatalog/src/features/studio/components/ShortcutsDialog.tsx +41 -0
- package/eventcatalog/src/features/studio/components/StudioDesigner.tsx +1314 -385
- package/eventcatalog/src/features/studio/components/StudioNotice.astro +24 -0
- package/eventcatalog/src/features/studio/document-name.ts +7 -0
- package/eventcatalog/src/features/studio/from-visualiser.ts +138 -0
- package/eventcatalog/src/features/studio/hooks/presence-sender.ts +19 -2
- package/eventcatalog/src/features/studio/hooks/use-canvas-webmcp.ts +9 -3
- package/eventcatalog/src/features/studio/hooks/use-comments.ts +2 -2
- package/eventcatalog/src/features/studio/hooks/use-follow-camera.ts +8 -3
- package/eventcatalog/src/features/studio/hooks/use-studio-flow.ts +244 -32
- package/eventcatalog/src/features/studio/identity.ts +25 -1
- package/eventcatalog/src/features/studio/limits.ts +2 -0
- package/eventcatalog/src/features/studio/pages/[id].astro +42 -16
- package/eventcatalog/src/features/studio/pages/index.astro +596 -373
- package/eventcatalog/src/features/studio/pages/webmcp-relay.ts +12 -15
- package/eventcatalog/src/features/studio/server/canvas-mcp.ts +8 -23
- package/eventcatalog/src/features/studio/server/runtime.ts +150 -46
- package/eventcatalog/src/features/studio/server/sql/storage.sql +18 -0
- package/eventcatalog/src/features/studio/server/storage.ts +53 -73
- package/eventcatalog/src/features/studio/webmcp-relay/LICENSE +21 -0
- package/eventcatalog/src/features/studio/webmcp-relay/README.md +5 -0
- package/eventcatalog/src/features/studio/webmcp-relay/embed.js +2 -0
- package/eventcatalog/src/features/studio/webmcp-relay/widget.html +10 -0
- package/eventcatalog/src/features/studio/webmcp-relay/widget.js +1 -0
- package/eventcatalog/src/features/tools/catalog-tools.ts +3 -1
- package/eventcatalog/src/layouts/BaseLayout.astro +4 -4
- package/eventcatalog/src/layouts/SettingsLayout.astro +2 -2
- package/eventcatalog/src/layouts/VerticalSideBarLayout.astro +3 -2
- package/eventcatalog/src/pages/_index.astro +5 -342
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.spec.ts +2 -3
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/architecture/[type]/[id]/[version]/index.astro +3 -1
- package/eventcatalog/src/pages/diagrams/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/diagrams/[id]/[version]/embed.astro +1 -0
- package/eventcatalog/src/pages/diagrams/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/directory/[type]/_index.data.ts +5 -7
- package/eventcatalog/src/pages/directory/[type]/index.astro +3 -1
- package/eventcatalog/src/pages/discover/[type]/_index.data.ts +5 -7
- package/eventcatalog/src/pages/discover/[type]/index.astro +3 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +3 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/_[filename].data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/changelog/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/[...filename].astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/examples/_[...filename].data.ts +0 -4
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/field-lineage/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/[filename].astro +3 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/graphql/_[filename].data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.spec.ts +2 -3
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/resources/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/[filename].astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/_[filename].data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/index.astro +2 -1
- package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/language/[dictionaryId]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/[type]/[id]/language/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/[type]/[id]/language/index.astro +1 -0
- package/eventcatalog/src/pages/docs/custom/[...path]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/custom/[...path]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/services/[id]/[docType]/[docId]/index.astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/[version]/resources/index.astro +1 -0
- package/eventcatalog/src/pages/docs/services/[id]/asyncapi/[filename].astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/changelog/index.astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/graphql/[filename].astro +1 -1
- package/eventcatalog/src/pages/docs/services/[id]/spec/[filename].astro +1 -1
- package/eventcatalog/src/pages/docs/teams/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/teams/[id]/index.astro +1 -0
- package/eventcatalog/src/pages/docs/users/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/docs/users/[id]/index.astro +1 -0
- package/eventcatalog/src/pages/index.astro +4 -2
- package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/schemas/[type]/[id]/[version]/index.astro +9 -1
- package/eventcatalog/src/pages/schemas/explorer/_index.data.ts +0 -7
- package/eventcatalog/src/pages/schemas/explorer/index.astro +4 -2
- package/eventcatalog/src/pages/settings/license.astro +9 -1
- package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/triggers/[type]/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/data/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/entity-map/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/_index.data.ts +38 -0
- package/eventcatalog/src/pages/visualiser/[type]/[id]/index.astro +18 -41
- package/eventcatalog/src/pages/visualiser/designs/[id]/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/designs/[id]/index.astro +2 -1
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/entity-map/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/domains/[id]/[version]/systems-context/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/_index.data.ts +0 -7
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/context/index.astro +1 -0
- package/eventcatalog/src/pages/visualiser/systems/[id]/[version]/index.astro +1 -0
- package/eventcatalog/src/types/react-syntax-highlighter.d.ts +10 -0
- package/eventcatalog/src/utils/collections/flows.ts +20 -7
- package/eventcatalog/src/utils/collections/resource-owners.ts +8 -2
- package/eventcatalog/src/utils/collections/resources.ts +2 -0
- package/eventcatalog/src/utils/collections/util.ts +8 -4
- package/eventcatalog/src/utils/git.ts +11 -0
- package/eventcatalog/src/utils/homepage-dashboard.ts +143 -0
- package/eventcatalog/src/utils/license.ts +1 -1
- package/eventcatalog/src/utils/link-validation.ts +25 -19
- package/eventcatalog/src/utils/node-graphs/domain-entity-map.ts +3 -1
- package/eventcatalog/src/utils/node-graphs/domain-levels-node-graph.ts +3 -3
- package/eventcatalog/src/utils/node-graphs/field-node-graph.ts +4 -2
- package/eventcatalog/src/utils/node-graphs/layout-node-graph.ts +20 -1
- package/eventcatalog/src/utils/node-graphs/node-resource.ts +67 -0
- package/eventcatalog/src/utils/node-graphs/systems-node-graph.ts +1 -1
- package/eventcatalog/src/utils/page-loaders/hybrid-page.ts +4 -15
- package/eventcatalog/src/utils/page-title.ts +15 -0
- package/eventcatalog/src/utils/syntax-highlighter-renderer.ts +64 -0
- package/eventcatalog/src/utils/trial.ts +13 -0
- package/package.json +11 -11
- package/dist/docs/development/ask-your-architecture/05-skills/02-installation.md +0 -60
- package/dist/docs/development/ask-your-architecture/05-skills/_category_.json +0 -11
- package/dist/docs/development/ask-your-architecture/06-slack-integration/01-introduction.md +0 -63
- package/dist/docs/development/ask-your-architecture/06-slack-integration/02-slack-app-setup.md +0 -154
- package/dist/docs/development/ask-your-architecture/06-slack-integration/03-installation.md +0 -169
- package/dist/docs/development/ask-your-architecture/06-slack-integration/04-deployment.md +0 -236
- package/dist/docs/development/ask-your-architecture/06-slack-integration/05-usage.md +0 -140
- package/dist/docs/development/ask-your-architecture/06-slack-integration/06-troubleshooting.md +0 -268
- package/dist/docs/development/ask-your-architecture/06-slack-integration/_category_.json +0 -13
- package/dist/docs/development/guides/domains/06-visualize-domains/01-domain-integration-map.md +0 -40
- package/dist/runtime-dependencies/@mcp-b__webmcp-local-relay.mjs +0 -3
- package/eventcatalog/src/features/studio/canvas-doc.ts +0 -409
- package/eventcatalog/src/features/studio/clipboard.ts +0 -97
- package/eventcatalog/src/features/studio/components/CanvasControls.tsx +0 -154
- package/eventcatalog/src/features/studio/components/Comments.tsx +0 -770
- package/eventcatalog/src/features/studio/components/ContainerChooser.tsx +0 -145
- package/eventcatalog/src/features/studio/components/DragGhost.tsx +0 -115
- package/eventcatalog/src/features/studio/components/Picture.tsx +0 -21
- package/eventcatalog/src/features/studio/components/PropertiesPanel.tsx +0 -212
- package/eventcatalog/src/features/studio/components/canvas-nodes.tsx +0 -255
- package/eventcatalog/src/features/studio/components/icons.ts +0 -53
- package/eventcatalog/src/features/studio/components/status.ts +0 -51
- package/eventcatalog/src/features/studio/edges.ts +0 -56
- package/eventcatalog/src/features/studio/flow-state.ts +0 -92
- package/eventcatalog/src/features/studio/grouping.ts +0 -226
- package/eventcatalog/src/features/studio/layout.ts +0 -42
- package/eventcatalog/src/features/studio/levels.ts +0 -282
- package/eventcatalog/src/features/studio/node-types.ts +0 -205
- package/eventcatalog/src/features/studio/pages/new.astro +0 -24
- package/eventcatalog/src/features/studio/pages/wake.ts +0 -15
- package/eventcatalog/src/features/studio/placement.ts +0 -197
- package/eventcatalog/src/features/studio/studio.css +0 -273
- package/dist/{chunk-A2RZR3U4.js → chunk-6K7XZAYI.js} +3 -3
|
@@ -267,7 +267,7 @@ export const buildDomainGraph = ({
|
|
|
267
267
|
draggable: false,
|
|
268
268
|
selectable: false,
|
|
269
269
|
data: {
|
|
270
|
-
domain: { name: d.data.name, version: d.data.version },
|
|
270
|
+
domain: { id: d.data.id, name: d.data.name, version: d.data.version },
|
|
271
271
|
// The domain viewed may itself be a subdomain of another
|
|
272
272
|
subdomain: !!parentId || parentDomainOf.has(d.data.id),
|
|
273
273
|
isFocused: !parentId,
|
|
@@ -309,7 +309,7 @@ export const buildDomainGraph = ({
|
|
|
309
309
|
position: { x: 0, y: 0 },
|
|
310
310
|
...(parentId ? { parentId } : {}),
|
|
311
311
|
data: {
|
|
312
|
-
domain: { name: other.data.name, version: other.data.version },
|
|
312
|
+
domain: { id: other.data.id, name: other.data.name, version: other.data.version },
|
|
313
313
|
subdomain: !!parentId,
|
|
314
314
|
isFocused: false,
|
|
315
315
|
otherDomain: true,
|
|
@@ -375,7 +375,7 @@ export const buildDomainGraph = ({
|
|
|
375
375
|
type: 'system-group',
|
|
376
376
|
parentId: domainGroup,
|
|
377
377
|
position: { x: 0, y: 0 },
|
|
378
|
-
data: { system: { name: system.data.name, version: system.data.version } },
|
|
378
|
+
data: { system: { id: system.data.id, name: system.data.name, version: system.data.version } },
|
|
379
379
|
});
|
|
380
380
|
}
|
|
381
381
|
addNodes(graph.nodes);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Node, Edge } from '@xyflow/react';
|
|
2
2
|
import { createEdge, createNode, buildContextMenuForMessage, buildContextMenuForService } from './utils/utils';
|
|
3
|
-
import {
|
|
3
|
+
import { layoutWithElk } from '@eventcatalog/visualiser/layout';
|
|
4
4
|
|
|
5
5
|
export interface FieldOccurrence {
|
|
6
6
|
messageId: string;
|
|
@@ -173,5 +173,7 @@ export const getNodesAndEdges = async ({
|
|
|
173
173
|
|
|
174
174
|
if (!layout) return { nodes, edges };
|
|
175
175
|
|
|
176
|
-
|
|
176
|
+
// Lays out with ELK directly rather than layoutNodeGraph: this runs in the browser (the Fields Explorer),
|
|
177
|
+
// and layoutNodeGraph's cache reads the catalog's config, which would put the config in the browser's bundle
|
|
178
|
+
return (await layoutWithElk({ nodes, edges })) as unknown as { nodes: Node[]; edges: Edge[] };
|
|
177
179
|
};
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import { hideMessageNodes, layoutWithElk } from '@eventcatalog/visualiser/layout';
|
|
2
|
+
import { isSSR } from '@utils/feature';
|
|
2
3
|
|
|
3
4
|
type Graph = { nodes: any[]; edges: any[] };
|
|
4
5
|
|
|
6
|
+
// A build renders one route at a time (every message's docs page, then every schema page), so the
|
|
7
|
+
// cache has to outlast a whole route to be reused. A server keeps running as the catalog changes and
|
|
8
|
+
// renders pages as they're asked for, so it keeps the most recent layouts only.
|
|
9
|
+
const MAX_CACHED_LAYOUTS = isSSR() ? 200 : 5000;
|
|
10
|
+
const layouts = new Map<string, ReturnType<typeof layoutWithElk>>();
|
|
11
|
+
|
|
5
12
|
/**
|
|
6
13
|
* Lays a node graph out for the visualiser (with ELK, left to right). Builders
|
|
7
14
|
* create their nodes and edges without positions and lay the finished graph
|
|
@@ -9,7 +16,19 @@ type Graph = { nodes: any[]; edges: any[] };
|
|
|
9
16
|
* (nodes with children) are sized to fit them, and edges get the route they're
|
|
10
17
|
* drawn along (`data.route`), with room for their labels.
|
|
11
18
|
*/
|
|
12
|
-
export const layoutNodeGraph = async <G extends Graph>(graph: G): Promise<G> =>
|
|
19
|
+
export const layoutNodeGraph = async <G extends Graph>(graph: G): Promise<G> => {
|
|
20
|
+
// A build lays the same graph out on several pages (a message's docs, visualiser and schema pages):
|
|
21
|
+
// reuse the layout. Each caller gets its own copy, so it can't change the one kept.
|
|
22
|
+
const key = JSON.stringify(graph);
|
|
23
|
+
let layout = layouts.get(key);
|
|
24
|
+
if (!layout) {
|
|
25
|
+
layout = layoutWithElk(graph);
|
|
26
|
+
layouts.set(key, layout);
|
|
27
|
+
layout.catch(() => layouts.delete(key));
|
|
28
|
+
if (layouts.size > MAX_CACHED_LAYOUTS) layouts.delete(layouts.keys().next().value!);
|
|
29
|
+
}
|
|
30
|
+
return structuredClone(await layout) as unknown as G;
|
|
31
|
+
};
|
|
13
32
|
|
|
14
33
|
/**
|
|
15
34
|
* Lays out the graphs of a levels page: level 1 (`overview`: domains, systems
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The catalog resource a diagram node shows, for the node types the node graphs build. Has no imports so it can
|
|
3
|
+
* be shared by the server and the browser (the visualiser's "Open in Studio", the MCP App views).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// The collection each node type shows a resource of
|
|
7
|
+
const NODE_COLLECTIONS: Record<string, string> = {
|
|
8
|
+
service: 'services',
|
|
9
|
+
services: 'services',
|
|
10
|
+
agent: 'agents',
|
|
11
|
+
agents: 'agents',
|
|
12
|
+
event: 'events',
|
|
13
|
+
events: 'events',
|
|
14
|
+
command: 'commands',
|
|
15
|
+
commands: 'commands',
|
|
16
|
+
query: 'queries',
|
|
17
|
+
queries: 'queries',
|
|
18
|
+
channel: 'channels',
|
|
19
|
+
channels: 'channels',
|
|
20
|
+
flow: 'flows',
|
|
21
|
+
flows: 'flows',
|
|
22
|
+
data: 'containers',
|
|
23
|
+
containers: 'containers',
|
|
24
|
+
'data-products': 'data-products',
|
|
25
|
+
domain: 'domains',
|
|
26
|
+
domains: 'domains',
|
|
27
|
+
'context-domain': 'domains',
|
|
28
|
+
'domain-group': 'domains',
|
|
29
|
+
system: 'systems',
|
|
30
|
+
systems: 'systems',
|
|
31
|
+
'system-group': 'systems',
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// Where each node type keeps the resource it shows
|
|
35
|
+
const RESOURCE_DATA_KEYS = [
|
|
36
|
+
'service',
|
|
37
|
+
'agent',
|
|
38
|
+
'message',
|
|
39
|
+
'channel',
|
|
40
|
+
'data',
|
|
41
|
+
'dataProduct',
|
|
42
|
+
'flow',
|
|
43
|
+
'entity',
|
|
44
|
+
'domain',
|
|
45
|
+
'system',
|
|
46
|
+
'custom',
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
type DiagramNode = { type?: string; data?: Record<string, unknown> };
|
|
50
|
+
type ResourceDetails = { id?: unknown; version?: unknown; [key: string]: unknown };
|
|
51
|
+
|
|
52
|
+
/** The resource a node shows, as in its data: the fields shown, or the catalog entry's data (if it holds the entry) */
|
|
53
|
+
export const getNodeResourceDetails = (node: DiagramNode): ResourceDetails | undefined => {
|
|
54
|
+
const data = node.data ?? {};
|
|
55
|
+
const resource = RESOURCE_DATA_KEYS.map((key) => data[key]).find(Boolean) as
|
|
56
|
+
| (ResourceDetails & { data?: ResourceDetails })
|
|
57
|
+
| undefined;
|
|
58
|
+
return resource?.data ?? resource;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/** The catalog resource a node shows (its collection, id and version), if it shows one */
|
|
62
|
+
export const getNodeCatalogResource = (node: DiagramNode): { collection: string; id: string; version?: string } | undefined => {
|
|
63
|
+
const collection = NODE_COLLECTIONS[node.type ?? ''];
|
|
64
|
+
const details = getNodeResourceDetails(node);
|
|
65
|
+
if (!collection || typeof details?.id !== 'string') return undefined;
|
|
66
|
+
return { collection, id: details.id, ...(typeof details.version === 'string' && { version: details.version }) };
|
|
67
|
+
};
|
|
@@ -142,7 +142,7 @@ const wrapNodesInSystemGroup = (systemNodes: any[], system: any) => {
|
|
|
142
142
|
draggable: false,
|
|
143
143
|
selectable: false,
|
|
144
144
|
data: {
|
|
145
|
-
system: { name: system.data.name, version: system.data.version },
|
|
145
|
+
system: { id: system.data.id, name: system.data.name, version: system.data.version },
|
|
146
146
|
// The system is the resource being viewed on its own diagram
|
|
147
147
|
isFocused: true,
|
|
148
148
|
},
|
|
@@ -24,7 +24,9 @@ export class HybridPage<T = any> {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* The page's data: its props in a static build, or looked up from its URL on a server. Undefined
|
|
28
|
+
* when nothing matches (an unknown resource or version): the page then returns
|
|
29
|
+
* `Astro.rewrite('/404')`. Throwing a Response instead made Astro answer with an empty 500.
|
|
28
30
|
*/
|
|
29
31
|
static async getData(astro: AstroGlobal): Promise<any> {
|
|
30
32
|
// Try props first (static mode)
|
|
@@ -32,13 +34,7 @@ export class HybridPage<T = any> {
|
|
|
32
34
|
return this.transformProps(astro.props);
|
|
33
35
|
}
|
|
34
36
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if (!data) {
|
|
38
|
-
throw this.createNotFoundResponse();
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return data;
|
|
37
|
+
return (await this.fetchData(astro.params)) ?? undefined;
|
|
42
38
|
}
|
|
43
39
|
|
|
44
40
|
/**
|
|
@@ -58,11 +54,4 @@ export class HybridPage<T = any> {
|
|
|
58
54
|
protected static transformProps(props: any): any {
|
|
59
55
|
return props;
|
|
60
56
|
}
|
|
61
|
-
|
|
62
|
-
protected static createNotFoundResponse(): Response {
|
|
63
|
-
return new Response(null, {
|
|
64
|
-
status: 404,
|
|
65
|
-
statusText: 'Not found',
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
57
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import config from '@config';
|
|
2
|
+
|
|
3
|
+
/** The catalog's name: `title` in eventcatalog.config.js, or EventCatalog when it has none */
|
|
4
|
+
export const getCatalogTitle = (): string => config?.title?.trim() || 'EventCatalog';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A page's title, as browser tabs and link previews show it: the page's own title, then the
|
|
8
|
+
* catalog's (`Domains | Ordering | Acme Inc`), so tabs show the page first. A page without a title
|
|
9
|
+
* of its own (the homepage) is just the catalog's.
|
|
10
|
+
*/
|
|
11
|
+
export const formatPageTitle = (title?: string): string => {
|
|
12
|
+
const catalogTitle = getCatalogTitle();
|
|
13
|
+
const pageTitle = title?.trim();
|
|
14
|
+
return pageTitle && pageTitle !== catalogTitle ? `${pageTitle} | ${catalogTitle}` : catalogTitle;
|
|
15
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { createElement, type CSSProperties, type ReactNode } from 'react';
|
|
2
|
+
import { createStyleObject } from 'react-syntax-highlighter/dist/cjs/create-element.js';
|
|
3
|
+
|
|
4
|
+
type Stylesheet = { [selector: string]: CSSProperties };
|
|
5
|
+
type HighlightedNode = {
|
|
6
|
+
type: 'element' | 'text';
|
|
7
|
+
value?: string | number;
|
|
8
|
+
tagName?: any;
|
|
9
|
+
properties?: { className?: string[]; style?: CSSProperties; [key: string]: unknown };
|
|
10
|
+
children?: HighlightedNode[];
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const selectorsByStylesheet = new WeakMap<Stylesheet, Set<string>>();
|
|
14
|
+
|
|
15
|
+
/** The class names a theme styles, worked out once per theme */
|
|
16
|
+
const stylesheetSelectors = (stylesheet: Stylesheet) => {
|
|
17
|
+
let selectors = selectorsByStylesheet.get(stylesheet);
|
|
18
|
+
if (!selectors) {
|
|
19
|
+
selectors = new Set(Object.keys(stylesheet).flatMap((selector) => selector.split('.')));
|
|
20
|
+
selectorsByStylesheet.set(stylesheet, selectors);
|
|
21
|
+
}
|
|
22
|
+
return selectors;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const renderNode = (node: HighlightedNode, stylesheet: Stylesheet, useInlineStyles: boolean, key: string): ReactNode => {
|
|
26
|
+
if (node.type === 'text') return node.value;
|
|
27
|
+
if (!node.tagName) return undefined;
|
|
28
|
+
|
|
29
|
+
const properties = node.properties ?? {};
|
|
30
|
+
const classNames = properties.className;
|
|
31
|
+
let props;
|
|
32
|
+
if (!useInlineStyles) {
|
|
33
|
+
props = { ...properties, className: classNames?.join(' ') };
|
|
34
|
+
} else {
|
|
35
|
+
// Theme classes become inline styles; any other class names stay
|
|
36
|
+
const selectors = stylesheetSelectors(stylesheet);
|
|
37
|
+
const className =
|
|
38
|
+
classNames && (classNames.includes('token') ? ['token'] : []).concat(classNames.filter((name) => !selectors.has(name)));
|
|
39
|
+
props = {
|
|
40
|
+
...properties,
|
|
41
|
+
className: className?.join(' ') || undefined,
|
|
42
|
+
style: createStyleObject(classNames ?? [], { ...properties.style }, stylesheet),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const children = (node.children ?? []).map((child, i) => renderNode(child, stylesheet, useInlineStyles, `code-segment-1-${i}`));
|
|
47
|
+
return createElement(node.tagName, { key, ...props }, children);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Renders react-syntax-highlighter's rows as its default renderer does (same elements, styles and keys), but
|
|
52
|
+
* works out the theme's class names once per theme rather than for every token: the default renderer did
|
|
53
|
+
* that for every token, which made highlighting a schema on the server take tens of milliseconds a page.
|
|
54
|
+
* Set `wrapLines`: with a custom renderer, react-syntax-highlighter turns it on when it isn't set.
|
|
55
|
+
*/
|
|
56
|
+
export const renderHighlightedRows = ({
|
|
57
|
+
rows,
|
|
58
|
+
stylesheet,
|
|
59
|
+
useInlineStyles,
|
|
60
|
+
}: {
|
|
61
|
+
rows: HighlightedNode[];
|
|
62
|
+
stylesheet: Stylesheet;
|
|
63
|
+
useInlineStyles: boolean;
|
|
64
|
+
}): ReactNode[] => rows.map((node, i) => renderNode(node, stylesheet, useInlineStyles, `code-segment-${i}`));
|
|
@@ -5,6 +5,19 @@ export const LICENSE_FAQ_URL = 'https://www.eventcatalog.dev/license-faq';
|
|
|
5
5
|
// Where a commercial license is renewed
|
|
6
6
|
export const LICENSE_RENEW_URL = 'https://eventcatalog.cloud';
|
|
7
7
|
|
|
8
|
+
// Where the Business plan is bought: the order form on the website
|
|
9
|
+
export const BUY_BUSINESS_URL = 'https://www.eventcatalog.dev/buy?source=cli';
|
|
10
|
+
|
|
11
|
+
// Prices for a commercial license, linked while the trial is running
|
|
12
|
+
export const PRICING_URL = 'https://www.eventcatalog.dev/pricing';
|
|
13
|
+
|
|
14
|
+
// Questions about licensing or buying: talk to the EventCatalog team
|
|
15
|
+
export const TALK_TO_US_URL = 'https://www.eventcatalog.dev/book-demo';
|
|
16
|
+
|
|
17
|
+
// Shown with the trial, so organisations that qualify for Free Use don't read it as "EventCatalog is now paid"
|
|
18
|
+
export const FREE_USE_NOTE =
|
|
19
|
+
'Under $10M revenue and $10M raised, an individual or an open-source project? You qualify for Free Use; get a free key at eventcatalog.cloud.';
|
|
20
|
+
|
|
8
21
|
const DAY_IN_MS = 24 * 60 * 60 * 1000;
|
|
9
22
|
|
|
10
23
|
export type TrialStatus = {
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"license": "BUSL-1.1",
|
|
9
9
|
"type": "module",
|
|
10
|
-
"version": "5.0.0
|
|
10
|
+
"version": "5.0.0",
|
|
11
11
|
"publishConfig": {
|
|
12
12
|
"access": "public"
|
|
13
13
|
},
|
|
@@ -47,10 +47,10 @@
|
|
|
47
47
|
],
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@ai-sdk/react": "^4.0.109",
|
|
50
|
-
"@astrojs/markdown-remark": "^7.3.
|
|
51
|
-
"@astrojs/mdx": "^8.0.
|
|
52
|
-
"@astrojs/node": "^11.1.
|
|
53
|
-
"@astrojs/react": "^
|
|
50
|
+
"@astrojs/markdown-remark": "^7.3.2",
|
|
51
|
+
"@astrojs/mdx": "^8.0.3",
|
|
52
|
+
"@astrojs/node": "^11.1.7",
|
|
53
|
+
"@astrojs/react": "^7.0.1",
|
|
54
54
|
"@astrojs/rss": "^4.0.19",
|
|
55
55
|
"@asyncapi/avro-schema-parser": "3.0.24",
|
|
56
56
|
"@asyncapi/parser": "^3.6.0",
|
|
@@ -63,7 +63,6 @@
|
|
|
63
63
|
"@hocuspocus/provider": "^4.7.0",
|
|
64
64
|
"@hocuspocus/server": "^4.7.0",
|
|
65
65
|
"@iconify-json/logos": "^1.2.4",
|
|
66
|
-
"@mcp-b/webmcp-local-relay": "5.1.0",
|
|
67
66
|
"@mcp-b/webmcp-polyfill": "5.1.0",
|
|
68
67
|
"@mermaid-js/layout-elk": "^0.2.0",
|
|
69
68
|
"@modelcontextprotocol/ext-apps": "^1.7.5",
|
|
@@ -81,7 +80,7 @@
|
|
|
81
80
|
"@tanstack/react-table": "^8.17.3",
|
|
82
81
|
"@xyflow/react": "^12.12.0",
|
|
83
82
|
"ai": "^7.0.106",
|
|
84
|
-
"astro": "7.3.
|
|
83
|
+
"astro": "7.3.8",
|
|
85
84
|
"astro-expressive-code": "^0.44.0",
|
|
86
85
|
"astro-seo": "^1.2.0",
|
|
87
86
|
"boxen": "^8.0.1",
|
|
@@ -99,6 +98,7 @@
|
|
|
99
98
|
"gray-matter": "^4.0.3",
|
|
100
99
|
"hono": "^4.13.7",
|
|
101
100
|
"html-to-image": "^1.11.11",
|
|
101
|
+
"htmlparser2": "^12.0.0",
|
|
102
102
|
"js-yaml": "^4.3.2",
|
|
103
103
|
"jsonpath-plus": "^10.4.0",
|
|
104
104
|
"jsonwebtoken": "^9.0.2",
|
|
@@ -139,10 +139,10 @@
|
|
|
139
139
|
"uuid": "^11.1.1",
|
|
140
140
|
"y-protocols": "^1.0.7",
|
|
141
141
|
"yjs": "^13.6.33",
|
|
142
|
-
"zod": "^4.
|
|
143
|
-
"@eventcatalog/
|
|
144
|
-
"@eventcatalog/
|
|
145
|
-
"@eventcatalog/
|
|
142
|
+
"zod": "^4.6.6",
|
|
143
|
+
"@eventcatalog/linter": "1.2.0",
|
|
144
|
+
"@eventcatalog/sdk": "2.30.0",
|
|
145
|
+
"@eventcatalog/visualiser": "^5.0.0"
|
|
146
146
|
},
|
|
147
147
|
"devDependencies": {
|
|
148
148
|
"@astrojs/check": "^0.9.10",
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 2
|
|
3
|
-
keywords:
|
|
4
|
-
- AI Skills
|
|
5
|
-
- installation
|
|
6
|
-
sidebar_label: Installation
|
|
7
|
-
title: Installing AI Skills
|
|
8
|
-
description: How to install EventCatalog AI skills for your AI coding agent
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## CLI install (recommended)
|
|
12
|
-
|
|
13
|
-
Use [npx skills](https://github.com/vercel-labs/skills) to install skills directly into your project:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
# Install all EventCatalog skills
|
|
17
|
-
npx skills add event-catalog/skills
|
|
18
|
-
|
|
19
|
-
# Install a specific skill
|
|
20
|
-
npx skills add event-catalog/skills --skill catalog-documentation-creator
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
This copies the skill files into your project's `.claude/skills/` directory where your AI agent can access them.
|
|
24
|
-
|
|
25
|
-
## Clone and copy
|
|
26
|
-
|
|
27
|
-
Clone the repository and copy the skills you need:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
git clone https://github.com/event-catalog/skills.git
|
|
31
|
-
cp -r skills/skills/catalog-documentation-creator .claude/skills/
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## Git submodule
|
|
35
|
-
|
|
36
|
-
Add as a submodule for easy updates:
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
git submodule add https://github.com/event-catalog/skills.git .claude/skills/eventcatalog
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
When new skills are released, pull updates with:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
git submodule update --remote
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Fork and customize
|
|
49
|
-
|
|
50
|
-
Fork the repository and tailor skills to your team's conventions:
|
|
51
|
-
|
|
52
|
-
1. Fork [event-catalog/skills](https://github.com/event-catalog/skills) on GitHub
|
|
53
|
-
2. Modify skills to match your naming conventions, ownership patterns, and schema formats
|
|
54
|
-
3. Install from your fork:
|
|
55
|
-
|
|
56
|
-
```bash
|
|
57
|
-
npx add-skill https://github.com/YOUR_ORG/eventcatalog-skills
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
This is useful when your team has specific conventions for IDs, owners, or folder structures that differ from the defaults.
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"label": "Skills",
|
|
3
|
-
"position": 7,
|
|
4
|
-
"collapsible": true,
|
|
5
|
-
"collapsed": true,
|
|
6
|
-
"link": {
|
|
7
|
-
"type": "generated-index",
|
|
8
|
-
"slug": "/development/ask-your-architecture/skills",
|
|
9
|
-
"description": "Pre-built AI skills for generating EventCatalog documentation"
|
|
10
|
-
}
|
|
11
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 1
|
|
3
|
-
keywords:
|
|
4
|
-
- Slack Bot
|
|
5
|
-
- Slack Integration
|
|
6
|
-
sidebar_label: Introduction
|
|
7
|
-
title: Slack integration
|
|
8
|
-
description: Query architecture documentation directly from Slack
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
import PlanBanner from '@site/src/components/MDX/PlanBanner';
|
|
12
|
-
|
|
13
|
-
<PlanBanner plan="Scale" />
|
|
14
|
-
|
|
15
|
-
The EventCatalog Slack Bot connects to your EventCatalog MCP server, allowing teams to query architecture documentation directly from Slack. Ask questions about events, services, domains, and schemas without leaving your workspace.
|
|
16
|
-
|
|
17
|
-
The slack bot is self hosted, you own your data and deployment.
|
|
18
|
-
|
|
19
|
-
<div className="flex justify-center items-center gap-4 flex-col">
|
|
20
|
-
<img src="/img/slack.png" alt="EventCatalog Slack Bot" className="rounded-lg" style={{ width: '30%', height: 'auto' }} />
|
|
21
|
-
<span className="text-center text-sm text-gray-500">Example of the EventCatalog Slack Bot in action asking about the OrderCreated event</span>
|
|
22
|
-
</div>
|
|
23
|
-
|
|
24
|
-
## How it works
|
|
25
|
-
|
|
26
|
-
1. You configure the bot with your own AI provider and model (e.g. Anthropic, OpenAI, Google)
|
|
27
|
-
1. Users @mention the bot or post in dedicated channels
|
|
28
|
-
2. The bot queries your EventCatalog MCP server
|
|
29
|
-
3. AI-powered responses appear in threads to keep channels organized
|
|
30
|
-
|
|
31
|
-
## Key features
|
|
32
|
-
|
|
33
|
-
- **@Mention anywhere** - Add the bot to any channel and ask questions
|
|
34
|
-
- **Dedicated channels** - Create auto-reply channels for architecture questions
|
|
35
|
-
- **Multiple AI providers** - Works with Anthropic, OpenAI, or Google
|
|
36
|
-
- **Self-hosted** - Your data stays private, you control your data and deployment
|
|
37
|
-
- **Socket Mode** - No public URL or webhooks needed
|
|
38
|
-
- **Custom tools support** - Bring your own integrations for real-time data
|
|
39
|
-
|
|
40
|
-
## Custom tools
|
|
41
|
-
|
|
42
|
-
The Slack bot supports [custom tools](/docs/development/ask-your-architecture/eventcatalog-assistant/bring-your-own-tools) defined in your `eventcatalog.chat.js` file. This means you can bring real-time data into your Slack conversations:
|
|
43
|
-
|
|
44
|
-
- Query production metrics from Datadog or Prometheus
|
|
45
|
-
- Check service health and uptime
|
|
46
|
-
- Look up on-call engineers from PagerDuty
|
|
47
|
-
- Fetch queue depths from Kafka
|
|
48
|
-
- Any custom integration your team needs
|
|
49
|
-
|
|
50
|
-
Custom tools work automatically - the AI decides when to use them based on user questions. Ask "who is on-call for OrderService?" and get live data directly in Slack.
|
|
51
|
-
|
|
52
|
-
## Prerequisites
|
|
53
|
-
|
|
54
|
-
- EventCatalog instance (with configured MCP server) running in [SSR mode](/docs/development/deployment/build-ssr-mode)
|
|
55
|
-
- [EventCatalog Scale license](https://eventcatalog.cloud)
|
|
56
|
-
- Slack workspace with app creation permissions
|
|
57
|
-
- API key for your chosen AI provider
|
|
58
|
-
|
|
59
|
-
## Repository
|
|
60
|
-
|
|
61
|
-
The EventCatalog Slack Bot is open source:
|
|
62
|
-
|
|
63
|
-
[github.com/event-catalog/eventcatalog-slack-bot](https://github.com/event-catalog/eventcatalog-slack-bot)
|
package/dist/docs/development/ask-your-architecture/06-slack-integration/02-slack-app-setup.md
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 2
|
|
3
|
-
keywords:
|
|
4
|
-
- Slack Bot
|
|
5
|
-
- Slack App
|
|
6
|
-
sidebar_label: Slack app setup
|
|
7
|
-
title: Slack app setup
|
|
8
|
-
description: Create and configure your Slack app
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
import PlanBanner from '@site/src/components/MDX/PlanBanner';
|
|
12
|
-
|
|
13
|
-
<PlanBanner plan="Scale" />
|
|
14
|
-
|
|
15
|
-
Create a Slack app to enable the EventCatalog bot in your workspace. You can create the app using a manifest (recommended) or manually configure all settings.
|
|
16
|
-
|
|
17
|
-
## Create from manifest (recommended)
|
|
18
|
-
|
|
19
|
-
The fastest way to get started. The manifest automatically configures all required permissions and settings.
|
|
20
|
-
|
|
21
|
-
### Steps
|
|
22
|
-
|
|
23
|
-
1. Navigate to [api.slack.com/apps](https://api.slack.com/apps)
|
|
24
|
-
2. Click **Create New App** → **From an app manifest**
|
|
25
|
-
3. Select your workspace and click **Next**
|
|
26
|
-
4. Choose **YAML** and paste this manifest:
|
|
27
|
-
|
|
28
|
-
```yaml
|
|
29
|
-
display_information:
|
|
30
|
-
name: EventCatalog Bot
|
|
31
|
-
description: Query your EventCatalog directly from Slack
|
|
32
|
-
background_color: "#000000"
|
|
33
|
-
|
|
34
|
-
features:
|
|
35
|
-
bot_user:
|
|
36
|
-
display_name: EventCatalog
|
|
37
|
-
always_online: true
|
|
38
|
-
|
|
39
|
-
oauth_config:
|
|
40
|
-
scopes:
|
|
41
|
-
bot:
|
|
42
|
-
- app_mentions:read
|
|
43
|
-
- chat:write
|
|
44
|
-
- reactions:read
|
|
45
|
-
- reactions:write
|
|
46
|
-
- channels:history
|
|
47
|
-
|
|
48
|
-
settings:
|
|
49
|
-
event_subscriptions:
|
|
50
|
-
bot_events:
|
|
51
|
-
- app_mention
|
|
52
|
-
- message.channels
|
|
53
|
-
interactivity:
|
|
54
|
-
is_enabled: false
|
|
55
|
-
org_deploy_enabled: false
|
|
56
|
-
socket_mode_enabled: true
|
|
57
|
-
token_rotation_enabled: false
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
5. Click **Next**, review the summary, and click **Create**
|
|
61
|
-
|
|
62
|
-
### Get credentials
|
|
63
|
-
|
|
64
|
-
After creating the app, collect three credentials needed to run the bot.
|
|
65
|
-
|
|
66
|
-
#### App-Level Token
|
|
67
|
-
|
|
68
|
-
1. Go to **Basic Information** → **App-Level Tokens**
|
|
69
|
-
2. Click **Generate Token and Scopes**
|
|
70
|
-
3. Name: `socket-mode-token`
|
|
71
|
-
4. Add scope: `connections:write`
|
|
72
|
-
5. Click **Generate** and copy the token (starts with `xapp-`)
|
|
73
|
-
6. Save this as `SLACK_APP_TOKEN`
|
|
74
|
-
|
|
75
|
-
#### Bot Token
|
|
76
|
-
|
|
77
|
-
1. Go to **OAuth & Permissions**
|
|
78
|
-
2. Click **Install to Workspace**
|
|
79
|
-
3. Review permissions and click **Allow**
|
|
80
|
-
4. Copy the **Bot User OAuth Token** (starts with `xoxb-`)
|
|
81
|
-
5. Save this as `SLACK_BOT_TOKEN`
|
|
82
|
-
|
|
83
|
-
#### Signing Secret
|
|
84
|
-
|
|
85
|
-
1. Go to **Basic Information** → **App Credentials**
|
|
86
|
-
2. Copy the **Signing Secret**
|
|
87
|
-
3. Save this as `SLACK_SIGNING_SECRET`
|
|
88
|
-
|
|
89
|
-
<details>
|
|
90
|
-
<summary>Setup Slack app manually</summary>
|
|
91
|
-
|
|
92
|
-
If you prefer to configure settings yourself, follow these steps.
|
|
93
|
-
|
|
94
|
-
### Create the app
|
|
95
|
-
|
|
96
|
-
1. Navigate to [api.slack.com/apps](https://api.slack.com/apps)
|
|
97
|
-
2. Click **Create New App** → **From scratch**
|
|
98
|
-
3. Name your app (e.g., "EventCatalog Bot") and select your workspace
|
|
99
|
-
4. Click **Create App**
|
|
100
|
-
|
|
101
|
-
### Enable Socket Mode
|
|
102
|
-
|
|
103
|
-
1. Click **Socket Mode** in the left sidebar
|
|
104
|
-
2. Toggle **Enable Socket Mode** to On
|
|
105
|
-
3. Create an App-Level Token when prompted:
|
|
106
|
-
- Name: `socket-mode-token`
|
|
107
|
-
- Scope: `connections:write`
|
|
108
|
-
4. Click **Generate**
|
|
109
|
-
5. Copy the token (starts with `xapp-`) - this is `SLACK_APP_TOKEN`
|
|
110
|
-
|
|
111
|
-
### Configure permissions
|
|
112
|
-
|
|
113
|
-
1. Click **OAuth & Permissions** in the left sidebar
|
|
114
|
-
2. Scroll to **Scopes** → **Bot Token Scopes**
|
|
115
|
-
3. Add these scopes:
|
|
116
|
-
- `app_mentions:read` - Receive @mention events
|
|
117
|
-
- `chat:write` - Send messages
|
|
118
|
-
- `reactions:read` - Read reactions
|
|
119
|
-
- `reactions:write` - Add and remove reactions
|
|
120
|
-
- `channels:history` - Read public channel messages
|
|
121
|
-
|
|
122
|
-
### Enable events
|
|
123
|
-
|
|
124
|
-
1. Click **Event Subscriptions** in the left sidebar
|
|
125
|
-
2. Toggle **Enable Events** to On
|
|
126
|
-
3. Expand **Subscribe to bot events**
|
|
127
|
-
4. Add these events:
|
|
128
|
-
- `app_mention`
|
|
129
|
-
- `message.channels`
|
|
130
|
-
|
|
131
|
-
### Install the app
|
|
132
|
-
|
|
133
|
-
1. Click **OAuth & Permissions** in the left sidebar
|
|
134
|
-
2. Click **Install to Workspace**
|
|
135
|
-
3. Review permissions and click **Allow**
|
|
136
|
-
4. Copy the **Bot User OAuth Token** (starts with `xoxb-`) - this is `SLACK_BOT_TOKEN`
|
|
137
|
-
|
|
138
|
-
### Get signing secret
|
|
139
|
-
|
|
140
|
-
1. Click **Basic Information** in the left sidebar
|
|
141
|
-
2. Scroll to **App Credentials**
|
|
142
|
-
3. Copy the **Signing Secret** - this is `SLACK_SIGNING_SECRET`
|
|
143
|
-
|
|
144
|
-
</details>
|
|
145
|
-
|
|
146
|
-
## Optional: Private channels and DMs
|
|
147
|
-
|
|
148
|
-
By default, the bot only reads thread context in public channels. To enable thread context in private channels and DMs, add these additional scopes:
|
|
149
|
-
|
|
150
|
-
- `groups:history` - Private channels
|
|
151
|
-
- `im:history` - Direct messages
|
|
152
|
-
- `mpim:history` - Group DMs
|
|
153
|
-
|
|
154
|
-
After adding scopes, reinstall the app to your workspace.
|