The easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:
2279 matches across 19 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | frontend/parse-deps.js | 77 | function getFilePathFromImportPath(name) { |
| LOW | …t-plugin-metabase/rules/no-unsafe-element-filtering.js | 72 | function isPreviousALengthAssertion(node) { |
| LOW | …/lint/eslint-plugin-metabase/rules/jtag-missing-key.js | 42 | function isDirectChildOfTemplateExpression(node) { |
| LOW | frontend/test/__support__/utils.ts | 58 | export function mockGetBoundingClientRect(rect: Partial<DOMRect> = {}) { |
| LOW | frontend/test/__support__/storybook.tsx | 136 | export function createWaitForResizeToStopDecorator(timeoutMs: number = 1000) { |
| LOW | frontend/test/__support__/storybook.tsx | 137 | return function WaitForResizeToStopDecorator(Story: StoryFn) { |
| LOW | frontend/test/__support__/enterprise.js | 60 | export function setupEnterpriseOnlyPlugin(pluginName) { |
| LOW | frontend/test/__support__/server-mocks/data-studio.ts | 8 | export function setupTableSelectionInfoEndpoint( |
| LOW | frontend/test/__support__/server-mocks/data-studio.ts | 14 | export function setupPublishTablesEndpoint( |
| LOW | frontend/test/__support__/server-mocks/data-studio.ts | 20 | export function setupPublishTablesEndpointError() { |
| LOW | frontend/test/__support__/server-mocks/data-studio.ts | 26 | export function setupUnpublishTablesEndpoint() { |
| LOW | frontend/test/__support__/server-mocks/data-studio.ts | 32 | export function setupUnpublishTablesEndpointError() { |
| LOW | frontend/test/__support__/server-mocks/dependencies.ts | 11 | export function setupCheckCardDependenciesEndpoint( |
| LOW | frontend/test/__support__/server-mocks/dependencies.ts | 17 | export function setupCheckCardDependenciesEndpointError() { |
| LOW | frontend/test/__support__/server-mocks/dependencies.ts | 21 | export function setupCheckSnippetDependenciesEndpoint( |
| LOW | frontend/test/__support__/server-mocks/dependencies.ts | 27 | export function setupCheckTransformDependenciesEndpoint( |
| LOW | frontend/test/__support__/server-mocks/dependencies.ts | 33 | export function setupListGraphNodeDependentsEndpoint(nodes: DependencyNode[]) { |
| LOW | frontend/test/__support__/server-mocks/dependencies.ts | 37 | export function setupListBreakingGraphNodesEndpoint( |
| LOW | frontend/test/__support__/server-mocks/dependencies.ts | 43 | export function setupListBrokenGraphNodesEndpoint(nodes: DependencyNode[]) { |
| LOW | frontend/test/__support__/server-mocks/dependencies.ts | 47 | export function setupListUnreferencedGraphNodesEndpoint( |
| LOW | frontend/test/__support__/server-mocks/dependencies.ts | 53 | export function setupDependencyGraphEndpoint(response: DependencyGraph) { |
| LOW | …nd/test/__support__/server-mocks/workspace-instance.ts | 7 | export function setupGetCurrentWorkspaceEndpoint( |
| LOW | …nd/test/__support__/server-mocks/workspace-instance.ts | 13 | export function setupDeleteWorkspaceInstanceEndpoint() { |
| LOW | …nd/test/__support__/server-mocks/workspace-instance.ts | 17 | export function setupListTableRemappingsEndpoint(remappings: TableRemapping[]) { |
| LOW | frontend/test/__support__/server-mocks/slack.ts | 6 | export function setupSlackManifestEndpoint() { |
| LOW | frontend/test/__support__/server-mocks/slack.ts | 10 | export function setupSlackSettingsEndpoint() { |
| LOW | frontend/test/__support__/server-mocks/slack.ts | 14 | export function setupSlackAppInfoEndpoint(appInfo?: Partial<SlackAppInfo>) { |
| LOW | …d/test/__support__/server-mocks/content-translation.ts | 5 | export function setupContentTranslationEndpoints({ |
| LOW | …end/test/__support__/server-mocks/workspace-manager.ts | 7 | export function setupListWorkspacesEndpoint(workspaces: Workspace[]) { |
| LOW | …end/test/__support__/server-mocks/workspace-manager.ts | 11 | export function setupGetWorkspaceEndpoint(workspace: Workspace) { |
| LOW | …end/test/__support__/server-mocks/workspace-manager.ts | 15 | export function setupCreateWorkspaceEndpoint(workspace: Workspace) { |
| LOW | …end/test/__support__/server-mocks/workspace-manager.ts | 19 | export function setupUpdateWorkspaceEndpoint(workspace: Workspace) { |
| LOW | …end/test/__support__/server-mocks/workspace-manager.ts | 23 | export function setupDeleteWorkspaceEndpoint(workspaceId: WorkspaceId) { |
| LOW | …end/test/__support__/server-mocks/workspace-manager.ts | 30 | export function setupDeleteWorkspaceEndpointError(workspaceId: WorkspaceId) { |
| LOW | …end/test/__support__/server-mocks/workspace-manager.ts | 34 | export function setupCreateWorkspaceDatabaseEndpoint(workspace: Workspace) { |
| LOW | …end/test/__support__/server-mocks/workspace-manager.ts | 38 | export function setupUpdateWorkspaceDatabaseEndpoint( |
| LOW | …end/test/__support__/server-mocks/workspace-manager.ts | 48 | export function setupDeleteWorkspaceDatabaseEndpoint( |
| LOW | …end/test/__support__/server-mocks/workspace-manager.ts | 58 | export function setupDeleteWorkspaceDatabaseEndpointError( |
| LOW | frontend/test/__support__/server-mocks/performance.ts | 4 | export function setupPerformanceEndpoints(cacheConfigs: CacheConfig[]) { |
| LOW | frontend/test/__support__/server-mocks/table.ts | 37 | export function setupTableQueryMetadataEndpoint(table: Table) { |
| LOW | frontend/test/__support__/server-mocks/table.ts | 41 | export function setupTableQueryMetadataEndpointError( |
| LOW | frontend/test/__support__/server-mocks/table.ts | 99 | export function setupUploadManagementEndpoint(tables: Table[]) { |
| LOW | frontend/test/__support__/server-mocks/table.ts | 107 | export function setupDeleteUploadManagementDeleteEndpoint(failureId?: number) { |
| LOW | frontend/test/__support__/server-mocks/segment.ts | 6 | export function setupSegmentRevisionsEndpointError(segmentId: number) { |
| LOW | frontend/test/__support__/server-mocks/segment.ts | 17 | export function setupSegmentEndpointError(segmentId: number) { |
| LOW | frontend/test/__support__/server-mocks/search.ts | 49 | export function setupEmbeddingDataPickerDecisionEndpoints( |
| LOW | frontend/test/__support__/server-mocks/replacement.ts | 8 | export function setupListSourceReplacementRunsEndpoint( |
| LOW | frontend/test/__support__/server-mocks/replacement.ts | 14 | export function setupReplaceModelWithTransformEndpoint( |
| LOW | frontend/test/__support__/server-mocks/settings.ts | 34 | export function setupUpdateSettingEndpoint( |
| LOW | frontend/test/__support__/server-mocks/settings.ts | 42 | export function setupUpdateSettingsEndpoint( |
| LOW | frontend/test/__support__/server-mocks/settings.ts | 62 | export function setupGenerateRandomTokenEndpoint(token: string) { |
| LOW | frontend/test/__support__/server-mocks/collection.ts | 33 | export function setupCollectionsEndpoints({ |
| LOW | frontend/test/__support__/server-mocks/collection.ts | 124 | function getCollectionVirtualSchemaURLs(collection: Collection) { |
| LOW | frontend/test/__support__/server-mocks/collection.ts | 135 | export function setupCollectionVirtualSchemaEndpoints( |
| LOW | frontend/test/__support__/server-mocks/collection.ts | 158 | function handleCollectionItemsResponse({ |
| LOW | frontend/test/__support__/server-mocks/collection.ts | 189 | export function setupCollectionItemsEndpoint({ |
| LOW | frontend/test/__support__/server-mocks/collection.ts | 211 | export function setupTenantCollectionItemsEndpoint({ |
| LOW | frontend/test/__support__/server-mocks/collection.ts | 240 | export function setupRootCollectionItemsEndpoint({ |
| LOW | frontend/test/__support__/server-mocks/collection.ts | 276 | export function setupDashboardItemsEndpoint({ |
| LOW | frontend/test/__support__/server-mocks/collection.ts | 302 | export function setupCollectionsWithError({ |
| 1850 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …ase-lib/v1/metadata/utils/saved-questions.unit.spec.ts | 36 | schemaName: "John Doe's Personal collection", |
| LOW | …ettingsPages/test/AuthenticationSettingsPage.setup.tsx | 35 | common_name: "John Doe", |
| LOW | …ettingsPages/test/AuthenticationSettingsPage.setup.tsx | 51 | common_name: "Jane Doe", |
| LOW | …ettings/components/ApiKeys/ManageApiKeys.unit.spec.tsx | 40 | common_name: "John Doe", |
| LOW | …ettings/components/ApiKeys/ManageApiKeys.unit.spec.tsx | 56 | common_name: "Jane Doe", |
| LOW | …onents/widgets/Notifications/WebhookForm.unit.spec.tsx | 92 | "foo@bar.com", |
| LOW | …onents/widgets/Notifications/WebhookForm.unit.spec.tsx | 107 | "auth-username": "foo@bar.com", |
| LOW | …ools/notifications/UserPicker/UserPicker.unit.spec.tsx | 18 | common_name: "Jane Doe", |
| LOW | …ools/notifications/UserPicker/UserPicker.unit.spec.tsx | 96 | await screen.findByRole("option", { name: "Jane Doe" }), |
| LOW | …ools/notifications/UserPicker/UserPicker.unit.spec.tsx | 103 | expect(getUserQueries()).not.toContain("Jane Doe"); |
| LOW | …ools/notifications/UserPicker/UserPicker.unit.spec.tsx | 115 | await screen.findByRole("option", { name: "Jane Doe" }), |
| LOW | …ools/notifications/UserPicker/UserPicker.unit.spec.tsx | 126 | expect(getUserQueries()).not.toContain("Jane Doe"); |
| LOW | …ools/notifications/UserPicker/UserPicker.unit.spec.tsx | 155 | await screen.findByRole("option", { name: "Jane Doe" }), |
| LOW | …src/metabase/admin/people/forms/UserForm.unit.spec.tsx | 325 | createMockTenant({ id: 1, name: "Acme Corp" }), |
| LOW | …src/metabase/admin/people/forms/UserForm.unit.spec.tsx | 368 | await userEvent.click(await screen.findByText("Acme Corp")); |
| LOW | …ents/GroupMembersTable/GroupMembersTable.unit.spec.tsx | 17 | email: "user@example.com", |
| LOW | …ashboardSubscriptionsSidebar/tests/common.unit.spec.ts | 212 | expect(await screen.findByText("John Doe")).toBeInTheDocument(); |
| LOW | …ItemsTable/BaseItemsTable/BaseItemsTable.unit.spec.tsx | 89 | expect(screen.getByText("John Doe")).toBeInTheDocument(); |
| LOW | …tend/src/metabase/visualizations/lib/text.unit.spec.ts | 27 | expect(truncateText("John Doe", 48, test.measurer, fontStyle)).toBe( |
| LOW | …tend/src/metabase/visualizations/lib/text.unit.spec.ts | 28 | "John Doe", |
| LOW | …tend/src/metabase/visualizations/lib/text.unit.spec.ts | 33 | expect(truncateText("John Doe", 48, test.measurer, fontStyle)).toBe( |
| LOW | …tend/src/metabase/visualizations/lib/text.unit.spec.ts | 34 | "John Doe", |
| LOW | …tend/src/metabase/visualizations/lib/text.unit.spec.ts | 39 | expect(truncateText("John Doe", 0, test.measurer, fontStyle)).toBe("…"); |
| LOW | …base/visualizations/lib/formatting/value.unit.spec.tsx | 208 | setup("user@example.com", { |
| LOW | …base/visualizations/lib/formatting/value.unit.spec.tsx | 214 | clicked: { value: "user@example.com" }, |
| LOW | …/transforms/pages/TransformListPage/utils.unit.spec.ts | 93 | email: "user@example.com", |
| LOW | frontend/src/metabase/urls/collections.ts | 30 | // `originalName` keeps the original name like "John Doe's Personal Collection" |
| LOW | frontend/src/metabase/urls/urls.unit.spec.ts | 226 | name: "John Doe's Personal Collection", |
| LOW | frontend/src/metabase/urls/urls.unit.spec.ts | 247 | originalName: "John Doe's Personal Collection", |
| LOW | …mCreator/FormFieldEditor/FormFieldEditor.unit.spec.tsx | 60 | placeholder: "John Doe", |
| LOW | …base/documents/components/DocumentHeader.unit.spec.tsx | 12 | creator: createMockUser({ common_name: "John Doe" }), |
| LOW | …base/documents/components/DocumentHeader.unit.spec.tsx | 105 | expect(screen.getByText("John Doe")).toBeInTheDocument(); |
| LOW | …onents/NotificationList/NotificationList.unit.spec.tsx | 11 | const mockUser = createMockUser({ common_name: "John Doe" }); |
| LOW | …tificationCard/DashboardNotificationCard.unit.spec.tsx | 27 | common_name: "John Doe", |
| LOW | …onents/NotificationCard/NotificationCard.unit.spec.tsx | 115 | common_name: "John Doe", |
| LOW | …fications/components/HelpModal/HelpModal.unit.spec.tsx | 16 | mockSettings({ "admin-email": "admin@example.com" }); |
| LOW | …reRevisionHistory/MeasureRevisionHistory.unit.spec.tsx | 92 | common_name: "John Doe", |
| LOW | …reRevisionHistory/MeasureRevisionHistory.unit.spec.tsx | 100 | expect(screen.getByText("John Doe")).toBeInTheDocument(); |
| LOW | …ntRevisionHistory/SegmentRevisionHistory.unit.spec.tsx | 90 | common_name: "John Doe", |
| LOW | …ntRevisionHistory/SegmentRevisionHistory.unit.spec.tsx | 98 | expect(screen.getByText("John Doe")).toBeInTheDocument(); |
| LOW | …base/notifications/EmailAttachmentPicker.unit.spec.tsx | 348 | creator: { id: 1, common_name: "Test", email: "test@test.com" } as any, |
| LOW | …base/notifications/EmailAttachmentPicker.unit.spec.tsx | 403 | creator: { id: 1, common_name: "Test", email: "test@test.com" } as any, |
| LOW | …e/notifications/channels/RecipientPicker.unit.spec.tsx | 112 | { email: "foo@bar.com" }, |
| LOW | …ontend/src/metabase/selectors/store-users.unit.spec.ts | 40 | const user = createMockUser({ email: "user@example.com" }); |
| LOW | …ontend/src/metabase/selectors/store-users.unit.spec.ts | 62 | anyStoreUserEmailAddress: "user@example.com", |
| LOW | …components/TenantsListing/TenantsListing.unit.spec.tsx | 43 | createMockTenant({ id: 11, name: "Acme Corp", slug: "acme-corp" }), |
| LOW | …components/TenantsListing/TenantsListing.unit.spec.tsx | 47 | expect(screen.getByText("Acme Corp")).toBeInTheDocument(); |
| LOW | …components/TenantsListing/TenantsListing.unit.spec.tsx | 53 | createMockTenant({ id: 11, name: "Acme Corp", slug: "acme-corp" }), |
| LOW | …components/TenantsListing/TenantsListing.unit.spec.tsx | 60 | expect(screen.queryByText("Acme Corp")).not.toBeInTheDocument(); |
| LOW | …components/TenantsListing/TenantsListing.unit.spec.tsx | 66 | createMockTenant({ id: 11, name: "Acme Corp", slug: "acme-corp" }), |
| LOW | …components/TenantsListing/TenantsListing.unit.spec.tsx | 73 | expect(screen.getByText("Acme Corp")).toBeInTheDocument(); |
| LOW | …boardingStep/TenantsSummaryOnboardingStep.unit.spec.ts | 7 | const TENANT_NAME = "Acme Corp"; |
| LOW | …s/SupportSettingsSection/AccessGrantList.unit.spec.tsx | 47 | user_name: "John Doe", |
| LOW | …s/SupportSettingsSection/AccessGrantList.unit.spec.tsx | 70 | expect(within(table).getByText("John Doe")).toBeInTheDocument(); |
| LOW | …sSection/TenantLimitsTab/TenantLimitsTab.unit.spec.tsx | 16 | name: "Acme Corp", |
| LOW | …sSection/TenantLimitsTab/TenantLimitsTab.unit.spec.tsx | 25 | const tenant1 = createMockTenant({ id: 1, name: "Acme Corp", slug: "acme" }); |
| LOW | …sSection/TenantLimitsTab/TenantLimitsTab.unit.spec.tsx | 71 | expect(screen.getByText("Acme Corp")).toBeInTheDocument(); |
| LOW | …sSection/TenantLimitsTab/TenantLimitsTab.unit.spec.tsx | 124 | expect(screen.getByText("Acme Corp")).toBeInTheDocument(); |
| LOW | …sSection/TenantLimitsTab/TenantLimitsTab.unit.spec.tsx | 135 | expect(screen.getByText("Acme Corp")).toBeInTheDocument(); |
| LOW | …nsubscribeUserModal/UnsubscribeUserModal.unit.spec.tsx | 17 | const user = createMockUser({ id: 1, common_name: "John Doe" }); |
| 96 more matches not shown… | |||
| Severity | File | Line | Snippet |
|---|---|---|---|
| CRITICAL | …_editing/tiptap/extensions/CardEmbed/CardEmbedNode.tsx | 274 | editor.view.state.schema.nodes.flexContainer.create( |
| CRITICAL | …extensions/HandleEditorDrop/DropHandlers/cardToCard.ts | 39 | const flexContainer = view.state.schema.nodes.flexContainer.create( |
| CRITICAL | …extensions/HandleEditorDrop/DropHandlers/cardToCard.ts | 45 | const wrapper = view.state.schema.nodes.resizeNode.create( |
| CRITICAL | …s/HandleEditorDrop/DropHandlers/cardToFlexContainer.ts | 108 | const newContainer = view.state.schema.nodes.flexContainer.create( |
| CRITICAL | …s/HandleEditorDrop/DropHandlers/cardToFlexContainer.ts | 202 | const wrappedRemainingCard = view.state.schema.nodes.resizeNode.create( |
| CRITICAL | …s/HandleEditorDrop/DropHandlers/cardToFlexContainer.ts | 241 | view.state.schema.nodes.flexContainer.create( |
| CRITICAL | …s/HandleEditorDrop/DropHandlers/cardToFlexContainer.ts | 296 | const newTargetFlexContainer = view.state.schema.nodes.flexContainer.create( |
| CRITICAL | …s/HandleEditorDrop/DropHandlers/cardToFlexContainer.ts | 373 | const newFlexContainer = view.state.schema.nodes.flexContainer.create( |
| CRITICAL | …nsions/HandleEditorDrop/DropHandlers/cardToDocument.ts | 75 | view.state.schema.nodes.resizeNode.create( |
| CRITICAL | …nsions/HandleEditorDrop/DropHandlers/cardToDocument.ts | 106 | const newFlexContainer = view.state.schema.nodes.flexContainer.create( |
| CRITICAL | …nsions/HandleEditorDrop/DropHandlers/cardToDocument.ts | 139 | const wrappedNode = view.state.schema.nodes.resizeNode.create( |
| CRITICAL | …nsions/HandleEditorDrop/DropHandlers/cardToDocument.ts | 164 | const wrappedNode = view.state.schema.nodes.resizeNode.create( |
| CRITICAL | frontend/src/metabase/redux/downloads.ts | 626 | title: t`Results for ${action.meta.arg.opts.question.card().name}`, |
| CRITICAL | frontend/src/metabase/redux/downloads.ts | 640 | title: t`Image for ${action.meta.arg.opts.question.card().name}`, |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | mise.toml | 4 | # ================================= |
| MEDIUM | mise.toml | 17 | # ------------------------------------------ |
| MEDIUM | mise.toml | 45 | # ============================================================================= |
| MEDIUM | mise.toml | 47 | # ============================================================================= |
| MEDIUM | mise.toml | 74 | # ============================================================================= |
| MEDIUM | mise.toml | 76 | # ============================================================================= |
| MEDIUM | …tabase/metrics-viewer/components/MetricSearch/utils.ts | 652 | // ── Positioned token type (internal) ──────────────────────────────────────── |
| MEDIUM | …rics-viewer/components/MetricSearch/utils.unit.spec.ts | 1486 | // ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | …rics-viewer/components/MetricSearch/utils.unit.spec.ts | 1494 | // ───────────────────────────────────────────────────────────────────────── |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 234 | // ── Collapsed view (pills) ────────────────────────────────────────────────── |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 282 | // ── Expanded view (focused text input) ───────────────────────────────────── |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 329 | // ── Blur / unfocus behavior ───────────────────────────────────────────────── |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 397 | // ── Run button and validation ─────────────────────────────────────────────── |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 468 | // ── Removing items ────────────────────────────────────────────────────────── |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 538 | // ── Expression pill display after Run ──────────────────────────────────────── |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 615 | // ── Typing / onChange ─────────────────────────────────────────────────────── |
| MEDIUM | …MetricSearch/MetricSearchInput/metricTokenHighlight.ts | 46 | // ── Identity tracking ────────────────────────────────────────────────────── |
| MEDIUM | …MetricSearch/MetricSearchInput/metricTokenHighlight.ts | 144 | // ── Token highlighting ───────────────────────────────────────────────────── |
| MEDIUM | …nfigModal/NotificationChannelConfigModal.unit.spec.tsx | 28 | // ── UI behaviour tests (mocked hook) ──────────────────────────────── |
| MEDIUM | …nfigModal/NotificationChannelConfigModal.unit.spec.tsx | 247 | // ── Save‐payload tests (real hook + context) ──────────────────────── |
| MEDIUM | …nfigModal/NotificationChannelConfigModal.unit.spec.tsx | 475 | // ── Send-test-notification payload tests (real hook + context) ────── |
| MEDIUM | bin/utils/tools.sh | 16 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 18 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 27 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 29 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 39 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 41 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 51 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 53 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 116 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 118 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 137 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 139 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 149 | # ============================================================================= |
| MEDIUM | bin/utils/tools.sh | 151 | # ============================================================================= |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | docs/people-and-groups/api-keys.md | 76 | Replace `YOUR_API_KEY` with the API key you generated above. |
| HIGH | docs/people-and-groups/api-keys.md | 80 | -H 'X-API-Key: YOUR_API_KEY' \ |
| HIGH | docs/people-and-groups/api-keys.md | 89 | export METABASE_API_KEY="YOUR_API_KEY" |
| HIGH | …nteractive-embedding-quick-start-guide/sso-with-jwt.ts | 9 | const METABASE_JWT_SHARED_SECRET = "YOUR_SECRET_HERE"; |
| HIGH | docs/embedding/sdk/snippets/quickstart/example.tsx | 13 | apiKey: "YOUR_API_KEY", |
| HIGH | …mbedding/sdk/snippets/authentication/express-server.ts | 11 | const METABASE_JWT_SHARED_SECRET = "YOUR_SECRET_HERE"; |
| HIGH | …ng/sdk/snippets/authentication/auth-config-api-key.tsx | 8 | apiKey: "YOUR_API_KEY", |
| HIGH | …s/authentication/express-server-interactive-and-sdk.ts | 8 | const METABASE_JWT_SHARED_SECRET = "YOUR_SECRET_HERE"; |
| HIGH | docs/ai/agent-api.md | 60 | X-API-Key: YOUR_API_KEY |
| HIGH | docs/ai/file-based-development.md | 65 | METABASE_API_KEY={your-api-key} |
| HIGH | docs/ai/file-based-development.md | 180 | -H 'X-API-Key: YOUR_API_KEY' \ |
| HIGH | docs/ai/file-based-development.md | 215 | -H 'X-API-Key: YOUR_API_KEY' \ |
| HIGH | docs/installation-and-operation/serialization.md | 419 | -H 'X-API-Key: YOUR_API_KEY' \ |
| HIGH | docs/installation-and-operation/serialization.md | 424 | substituting `YOUR_API_KEY` with your API key and `your-metabase-url` with the URL of your Metabase instance. |
| HIGH | docs/installation-and-operation/serialization.md | 452 | -H 'X-API-Key: YOUR_API_KEY' \ |
| HIGH | docs/installation-and-operation/serialization.md | 458 | substituting `YOUR_API_KEY` with your API key and `your-metabase-url` with your Metabase instance URL. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | .pre-commit-config.yaml | 1 | repos: |
| LOW | mise.toml | 1 | #:schema https://mise.jdx.dev/schema/mise.json |
| LOW | mise.toml | 21 | # 1. Use mise shims (recommended for IDEs): |
| LOW | mise.toml | 61 | |
| LOW | mise.toml | 81 | # See: https://mise.jdx.dev/registry.html#tools |
| LOW | …tabase/rules/no-unconditional-metabase-links-render.js | 1 | //------------------------------------------------------------------------------ |
| LOW | …nd/src/embedding-sdk-bundle/embedding-sdk-bootstrap.ts | 1 | import { waitForAuthConfigAndStartEarlyAuthFlow } from "./bootstrap-auth"; |
| LOW | frontend/src/metabase/ui/fonts.ts | 21 | | "Lora" |
| LOW | …ntend/src/metabase/admin/ai/MetabotSetup.unit.spec.tsx | 681 | }); |
| LOW | …ntend/src/metabase/admin/ai/MetabotSetup.unit.spec.tsx | 701 | // await selectProvider("OpenAI"); |
| LOW | …ntend/src/metabase/admin/ai/MetabotSetup.unit.spec.tsx | 721 | // |
| LOW | frontend/src/metabase/utils/noop.ts | 1 | // there's nothing here! |
| LOW | frontend/src/metabase/common/components/UndoListing.tsx | 221 | Record<string, boolean> |
| LOW | …tabase/visualizations/visualizations/Scalar/Scalar.tsx | 121 | // used by metrics viewer |
| LOW | …/visualizations/echarts/cartesian/constants/dataset.ts | 21 | // When working with time series or numeric scales, we process x-axis values for ECharts |
| LOW | …ations/echarts/cartesian/utils/timeseries.unit.spec.ts | 401 | { expectedUnit: "year", expectedCount: 1 }, |
| LOW | frontend/src/metabase/redux/entities/tables-reducer.ts | 81 | return { |
| LOW | …rc/metabase/visualizer/visualizations/pie.unit.spec.ts | 161 | // TODO Enable when VIZ-652 is closed |
| LOW | …-enterprise/custom_viz/sandbox/distortions-dom-read.ts | 1 | import type { CustomVizPluginId } from "metabase-types/api"; |
| LOW | …rc/embedding/data-picker/DataSelector/DataSelector.jsx | 101 | // If the isOpen prop is passed in, use the controlled value. |
| LOW | bin/build.sh | 1 | #!/usr/bin/env bash |
| LOW | bin/custom-viz/resolve-release.sh | 1 | #!/usr/bin/env bash |
| LOW | bin/utils/files.sh | 1 | # bin/utils/files.sh - File utilities |
| LOW | bin/utils/logging.sh | 1 | # bin/utils/logging.sh - Logging and output functions |
| LOW | bin/utils/tools.sh | 1 | # bin/utils/tools.sh - Tool detection and version checking utilities |
| LOW | bin/utils/prompts.sh | 1 | # bin/utils/prompts.sh - Interactive prompt utilities |
| LOW | resources/liquibase_legacy_migrations.yaml | 5621 | # |
| LOW | resources/liquibase_legacy_migrations.yaml | 10561 | 'type/Country', |
| LOW | resources/liquibase_legacy_migrations.yaml | 10581 | # |
| LOW | resources/automagic_dashboards/table/example.yaml | 1 | # Each automagic dashboard heuristic produces one dashboard and is primarily drawing |
| LOW | resources/automagic_dashboards/table/example.yaml | 21 | # Each metric is a map of metric name to metric definition which is again a map with |
| LOW | resources/automagic_dashboards/table/example.yaml | 41 | # Each filter has the form of a map of filter name to filter definition, |
| LOW | cross-version/dev.sh | 1 | #!/usr/bin/env bash |
| LOW | docs/developers-guide/drivers/plugins.md | 81 | |
| LOW | docs/developers-guide/drivers/plugins.md | 101 | # You can list any dependencies needed by the plugin by specifying a |
| LOW | docs/developers-guide/drivers/plugins.md | 121 | for more details |
| LOW | docs/developers-guide/drivers/plugins.md | 141 | # that multiple drivers currently still must share the same dependencies |
| LOW | docs/developers-guide/drivers/plugins.md | 201 | # Steps to take to initialize the plugin. For lazy-load drivers, this |
| LOW | .github/workflows/backend-cloverage.yml | 1 | name: Backend-Cloverage |
| LOW | .github/workflows/drivers.yml | 1501 | with: |
| LOW | .github/workflows/drivers.yml | 1521 | # name: Starburst |
| LOW | .github/workflows/cache-generator.yml | 1 | # This workflow is the single source of truth for generating and updating various caches used by our CI pipeline. |
| LOW | dev/docker-compose.yml | 1 | version: '3.1' |
| LOW | dev/docker-compose.yml | 21 | # ;; connect (e.g. metabasedb_postgres_14_data:5432 vs. localhost:15432). |
| LOW | …enarios/visualizations-tabular/pivot_tables.cy.spec.js | 101 | // open drill-through menu and filter to that value |
| LOW | …est/scenarios/embedding/embedding-dashboard.cy.spec.js | 1101 | cy.visit( |
| LOW | …ios/dashboard-filters-matrix/helpers/matrix-helpers.ts | 181 | // return id; |
| LOW | e2e/cross-version/run.sh | 1 | #!/usr/bin/env bash |
| LOW | src/metabase/cmd/resources/config-file-intro.md | 21 | # To use an env var, you can use a template string: "{{ env YOUR_ENV_VAR }}" |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | frontend/src/embedding-sdk-bundle/bootstrap-auth.ts | 160 | // Step 1: SSO discovery (skip if jwtProviderUri provided) |
| LOW | frontend/src/embedding-sdk-bundle/bootstrap-auth.ts | 186 | // Step 4: Fetch user and site settings in parallel (bootstrap-specific) |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 377 | // Step 1: Verify we start on Dashboard A |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 380 | // Step 2: Navigate to question by clicking on dashcard title |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 390 | // Step 3: First drill - click on Product ID cell |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 397 | // Step 4: Second drill |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 404 | // Step 5: One back click should undo BOTH drills and return to the question |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 411 | // Step 6: Another back click should return to the dashboard |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 436 | // Step 1: Verify we start on Dashboard A |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 439 | // Step 2: First drill directly from dashboard (click on User ID cell - no custom click behavior) |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 453 | // Step 3: Second drill on the drill result |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 460 | // Step 4: One back click should go directly back to Dashboard A |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 534 | // Step 1: Verify we start on Dashboard A |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 537 | // Step 2: Navigate from Dashboard A to Dashboard B via click behavior |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 546 | // Step 3: Navigate from Dashboard B to question via click behavior |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 558 | // Step 4: Perform first drill on the question (click on Product ID to drill) |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 574 | // Step 5: Perform second drill |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 590 | // Step 6: Perform third drill |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 600 | // Step 7: One back click should revert ALL drills and return to the original question |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 609 | // Step 8: Go back to Dashboard B |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 616 | // Step 9: Go back to Dashboard A |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | mise.toml | 6 | # This file defines the tools required for Metabase development. |
| MEDIUM | resources/liquibase_legacy_migrations.yaml | 3 | # This file contains the legacy migrations that used to bootstrap metabase, now this file should be |
| MEDIUM | resources/liquibase_legacy_migrations.yaml | 5496 | # Create the TaskHistory table, intended to provide debugging info on our background/quartz processes |
| MEDIUM | resources/liquibase_legacy_migrations.yaml | 6768 | # Create the native query snippets table, intended to store snippets and their metadata |
| MEDIUM | resources/liquibase_legacy_migrations.yaml | 10169 | # Create the magic Permissions Groups if they don't already exist. |
| MEDIUM | resources/python-sources/sql_tools.py | 405 | # Create the Into expression with the table identifier |
| MEDIUM | resources/python-sources/sql_tools.py | 1266 | # Create a fake column to reuse column resolution |
| MEDIUM | cross-version/test.sh | 175 | # This function is idempotent - it takes a version string and handles everything internally. |
| MEDIUM | .github/workflows/optimize-images.yml | 38 | # Initialize tracking variables |
| MEDIUM | .github/actions/fetch-artifact/action.yml | 82 | # Create a temporary directory for extraction to avoid conflicts |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | frontend/src/metabase/route-guards.unit.spec.tsx | 27 | // leverage the same context used by the main application |
| MEDIUM | frontend/src/metabase/visualizations/lib/sensibility.ts | 163 | // the sankey sensibility check is quite robust, so we recommend it whenever it's sensible |
| MEDIUM | …tabase/documents/components/DocumentPage.unit.spec.tsx | 56 | // doesn't exist *anymore* should be more robust |
| MEDIUM | …erprise/custom_viz/sandbox/distortions-blocked-apis.ts | 21 | // property of the global. Walk the chain so the lookup is robust. |
| MEDIUM | …ateExternalUserButton/ReactivateExternalUserButton.tsx | 9 | // Making the same API request, so we can leverage the cached result |
| MEDIUM | bin/embedding-sdk/change-react-version.bash | 17 | # Install React and Cypress React test harness |
| MEDIUM | .github/workflows/cache-generator.yml | 8 | # Jobs can utilize the prior week's cache if the current week's cache is not found. |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | resources/python-sources/sql_tools.py | 73 | [[null, null, "users"], [null, "public", "orders"], ["myproject", "dataset", "events"]] |
| HIGH | resources/python-sources/sql_tools.py | 82 | => '[[null, null, "users"]]' |
| HIGH | resources/python-sources/sql_tools.py | 85 | => '[[null, "public", "users"]]' |
| HIGH | resources/python-sources/sql_tools.py | 109 | [[null, null, "users", "id"], [null, "public", "orders", "total"]] |
| HIGH | resources/python-sources/sql_tools.py | 125 | => '[[null, null, "users", "id"]]' |
| HIGH | resources/python-sources/sql_tools.py | 128 | => '[[null, "public", "users", "*"]]' |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | …-sdk-shared/.storybook/msw-public/mockServiceWorker.js | 122 | async function handleRequest(event, requestId) { |
| LOW | …ents/DatabaseCacheScheduleField/ScheduleModePicker.tsx | 43 | function getData(): SelectData<ScheduleMode> { |
| LOW | …dmin/tools/components/LogLevelsModal/DurationInput.tsx | 47 | function getData() { |
| LOW | …abase/admin/tools/components/TaskPicker/TaskPicker.tsx | 40 | function getData(uniqueTasks?: string[]) { |
| LOW | …tools/components/TaskStatusPicker/TaskStatusPicker.tsx | 38 | function getData() { |
| LOW | …d/src/metabase/metadata/components/DataSourceInput.tsx | 48 | function getData({ |
| LOW | frontend/src/metabase/metadata/components/UserInput.tsx | 121 | function getData( |
| LOW | …onents/FieldValuesTypePicker/FieldValuesTypePicker.tsx | 50 | function getData() { |
| LOW | …adata/components/FieldOrderPicker/FieldOrderPicker.tsx | 46 | function getData() { |
| LOW | …/metadata/components/CurrencyPicker/CurrencyPicker.tsx | 84 | function getData() { |
| LOW | …pingPicker/DisplayValuesPicker/DisplayValuesPicker.tsx | 95 | function getData(options: RemappingValue[], value: RemappingValue) { |
| LOW | …adata/components/UnfoldJsonPicker/UnfoldJsonPicker.tsx | 44 | function getData() { |
| LOW | …onents/FieldVisibilityPicker/FieldVisibilityPicker.tsx | 82 | function getData() { |
| LOW | …a/components/SemanticTypePicker/SemanticTypePicker.tsx | 71 | function getData({ field, value }: Pick<Props, "field" | "value">) { |
| LOW | …/metadata/components/FkTargetPicker/FkTargetPicker.tsx | 160 | function getData(comparableIdFields: Field[], includeSchema: boolean) { |
| LOW | .storybook/msw-public/mockServiceWorker.js | 123 | async function handleRequest(event, requestId) { |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | bin/utils/colors.sh | 4 | # Usage: |
| LOW | bin/utils/files.sh | 4 | # Usage: |
| LOW | bin/utils/logging.sh | 4 | # Usage: |
| LOW | bin/utils/tools.sh | 4 | # Usage: |
| LOW | bin/utils/all.sh | 4 | # Usage: |
| LOW | bin/utils/prompts.sh | 4 | # Usage: |
| LOW | cross-version/dev.sh | 11 | # Usage: |
| LOW | cross-version/test.sh | 5 | # Usage: |
| LOW | e2e/cross-version/run.sh | 7 | # Usage: |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | bin/openapi-check.sh | 29 | # Check if there are any differences between generated and committed versions |
| LOW | bin/utils/tools.sh | 20 | # Check if a command/tool is available |
| LOW | resources/python-sources/sql_tools.py | 975 | # Check if it's a CTE reference |
| LOW | resources/python-sources/sql_tools.py | 1515 | # Check if it looks like a dict (frozenset of 2-tuples) |
| LOW | cross-version/test.sh | 292 | # Check if Metabase refuses to start (downgrade detection) |
| LOW | .github/workflows/resolve-backport-conflicts.yml | 92 | # Check if we're in a cherry-pick state with conflicts |
| LOW | .github/workflows/optimize-images.yml | 65 | # Output results for use in commit message |
| LOW | .github/workflows/sync-fork.yml | 161 | # Check if branch exists on origin |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | frontend/src/metabase-shared/color_selector.js | 31 | print("ERROR", e); |
| HIGH | …scenarios/data-studio/transforms/transforms.cy.spec.ts | 3697 | print("Hello, world!") |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | …ing-sdk-package/cli/snippets/express-server-snippet.ts | 18 | // This is hard-coded for demonstration purposes. |
| MEDIUM | …mbedding/sdk/snippets/authentication/express-server.ts | 17 | // Here it's hardcoded for demonstration purposes |
| MEDIUM | …s/authentication/express-server-interactive-and-sdk.ts | 21 | // Here it's hardcoded for demonstration purposes |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | resources/python-sources/sql_tools.py | 68 | |
| LOW | resources/python-sources/sql_tools.py | 104 | |
| LOW | resources/python-sources/sql_tools.py | 416 | |
| LOW | resources/python-sources/sql_tools.py | 476 | |
| LOW | resources/python-sources/sql_tools.py | 1587 | |
| LOW | resources/python-sources/sql_tools.py | 530 | |
| LOW | resources/python-sources/sql_tools.py | 717 | |
| LOW | resources/python-sources/sql_tools.py | 1030 | |
| LOW | resources/python-sources/sql_tools.py | 1097 | |
| LOW | resources/python-sources/sql_tools.py | 1276 | |
| LOW | resources/python-sources/sql_tools.py | 1434 | |
| LOW | resources/python-sources/sql_tools.py | 1506 |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | …rc/metabase/query_builder/actions/core/initializeQB.ts | 377 | // This handles cases like AI-generated queries with model references {{#1}} |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | resources/python-sources/sql_tools.py | 477 | Replace schema, table, and column names in a SQL query. SECURITY NOTE: Replacement values are injected into th |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | resources/python-sources/sql_tools.py | 378 | except Exception as e: |
| LOW | resources/python-sources/sql_tools.py | 1627 | except Exception as e: |
| LOW | resources/python-sources/sql_tools.py | 1645 | except Exception as e: |