diff --git a/datajunction-server/Makefile b/datajunction-server/Makefile index 5e4ac6a62..2be327b55 100644 --- a/datajunction-server/Makefile +++ b/datajunction-server/Makefile @@ -31,10 +31,21 @@ spellcheck: check: pdm run pre-commit run --all-files + $(MAKE) generate-schemas lint: make check +generate-schemas: + pdm run python scripts/generate-openapi.py -o ../openapi.json + pdm run python scripts/generate-graphql.py -o datajunction_server/api/graphql/ + +check-schemas: + $(MAKE) generate-schemas + @echo "Checking for uncommitted schema changes..." + git diff --exit-code ../openapi.json datajunction_server/api/graphql/schema.graphql || \ + (echo "ERROR: Schema files are out of date. Run 'make generate-schemas' and commit the changes." && exit 1) + dev-release: hatch version dev hatch build diff --git a/datajunction-ui/codegen.yml b/datajunction-ui/codegen.yml new file mode 100644 index 000000000..2a7c4a650 --- /dev/null +++ b/datajunction-ui/codegen.yml @@ -0,0 +1,24 @@ +overwrite: true +# Use static schema file from server (no live server needed) +schema: ../datajunction-server/datajunction_server/api/graphql/schema.graphql +documents: src/graphql/**/*.graphql +generates: + src/types/graphql.ts: + plugins: + - typescript + - typescript-operations + config: + # Use interface instead of type for better extensibility + declarationKind: interface + # Make optional fields nullable + maybeValue: T | null + # Skip __typename by default + skipTypename: true + # Use enums as TypeScript enums + enumsAsTypes: false + # Avoid 'Maybe' wrapper, use 'T | null' directly + inputMaybeValue: T | null + # Flatten pick helpers for cleaner types + flattenGeneratedTypes: true + # Export fragment types + exportFragmentSpreadSubTypes: true diff --git a/datajunction-ui/package.json b/datajunction-ui/package.json index b9f305bb9..9bb421f34 100644 --- a/datajunction-ui/package.json +++ b/datajunction-ui/package.json @@ -124,7 +124,12 @@ "cleanAndSetup": "ts-node ./internals/scripts/clean.ts", "prettify": "prettier --write", "extract-messages": "i18next-scanner --config=internals/extractMessages/i18next-scanner.config.js", - "prepublishOnly": "webpack --mode=production" + "prepublishOnly": "webpack --mode=production", + "codegen": "yarn codegen:graphql && yarn codegen:openapi", + "codegen:graphql": "graphql-codegen --config codegen.yml", + "codegen:graphql:watch": "graphql-codegen --config codegen.yml --watch", + "codegen:openapi": "openapi-typescript ../openapi.json -o src/types/openapi.ts", + "codegen:check": "yarn codegen && git diff --exit-code src/types/graphql.ts src/types/openapi.ts" }, "eslintConfig": { "extends": "react-app" @@ -192,17 +197,22 @@ "devDependencies": { "@babel/plugin-proposal-class-properties": "7.18.6", "@babel/plugin-proposal-private-property-in-object": "7.21.11", + "@graphql-codegen/cli": "6.1.1", + "@graphql-codegen/typescript": "5.0.7", + "@graphql-codegen/typescript-operations": "5.0.7", "@testing-library/user-event": "14.4.3", "@types/glob": "^8.1.0", "@types/minimatch": "^5.1.2", "eslint-config-prettier": "8.8.0", "eslint-plugin-prettier": "4.2.1", "eslint-plugin-react-hooks": "4.6.0", + "graphql": "16.12.0", "html-webpack-plugin": "5.5.1", "jest": "^29.5.0", "jest-fetch-mock": "3.0.3", "jest-watch-typeahead": "2.2.2", "mini-css-extract-plugin": "2.7.6", + "openapi-typescript": "7.10.1", "resize-observer-polyfill": "1.5.1" } } diff --git a/datajunction-ui/src/app/components/NotificationBell.tsx b/datajunction-ui/src/app/components/NotificationBell.tsx index a265ff44a..76e470cd2 100644 --- a/datajunction-ui/src/app/components/NotificationBell.tsx +++ b/datajunction-ui/src/app/components/NotificationBell.tsx @@ -29,7 +29,7 @@ interface NodeInfo { name: string; type: string; current?: { - displayName?: string; + displayName?: string | null; }; } @@ -54,7 +54,7 @@ const enrichWithNodeInfo = ( return { ...entry, node_type: node?.type, - display_name: node?.current?.displayName, + display_name: node?.current?.displayName ?? undefined, }; }); }; diff --git a/datajunction-ui/src/app/services/DJGraphQLService.ts b/datajunction-ui/src/app/services/DJGraphQLService.ts new file mode 100644 index 000000000..8cb285c97 --- /dev/null +++ b/datajunction-ui/src/app/services/DJGraphQLService.ts @@ -0,0 +1,580 @@ +/** + * Typed GraphQL Service for DataJunction API + * + * This service provides type-safe GraphQL operations using generated types. + * For REST operations, use DJService.js + */ + +import type { + NodeType, + NodeMode, + NodeStatus, + NodeSortField, + ListNodesForLandingQuery, + ListCubesForPresetQuery, + GetCubeForPlannerQuery, + GetNodeForEditingQuery, + GetNodesByNamesQuery, + GetMetricQuery, + GetCubeForEditingQuery, + GetUpstreamNodesQuery, + GetDownstreamNodesQuery, + GetNodeColumnsWithPartitionsQuery, +} from '../../types/graphql'; + +// GraphQL endpoint configuration +const DJ_GQL = process.env.REACT_APP_DJ_GQL + ? process.env.REACT_APP_DJ_GQL + : (process.env.REACT_APP_DJ_URL || 'http://localhost:8000') + '/graphql'; + +// GraphQL response wrapper +interface GraphQLResponse { + data?: T; + errors?: Array<{ message: string; path?: string[] }>; +} + +// Helper type for sort configuration +export interface SortConfig { + key: 'name' | 'displayName' | 'type' | 'status' | 'updatedAt'; + direction: 'ascending' | 'descending'; +} + +// Helper type for list nodes filters +export interface ListNodesFilters { + ownedBy?: string | null; + statuses?: NodeStatus[] | null; + missingDescription?: boolean; + hasMaterialization?: boolean; + orphanedDimension?: boolean; +} + +// Return type for cubeForPlanner (transformed from GraphQL response) +export interface CubeForPlannerResult { + name: string; + display_name: string | null | undefined; + cube_node_metrics: string[]; + cube_node_dimensions: string[]; + cubeMaterialization: { + strategy: string | null | undefined; + schedule: string; + lookbackWindow: string | undefined; + druidDatasource: string | undefined; + preaggTables: string[]; + workflowUrls: string[]; + timestampColumn: string | undefined; + timestampFormat: string | undefined; + } | null; +} + +// Generic GraphQL fetch helper +async function gqlFetch( + query: string, + variables?: Record, +): Promise> { + const response = await fetch(DJ_GQL, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + credentials: 'include', + body: JSON.stringify({ query, variables }), + }); + return response.json(); +} + +// Query strings +const LIST_NODES_FOR_LANDING = ` + query ListNodesForLanding( + $namespace: String + $nodeTypes: [NodeType!] + $tags: [String!] + $editedBy: String + $mode: NodeMode + $before: String + $after: String + $limit: Int + $orderBy: NodeSortField! + $ascending: Boolean! + $ownedBy: String + $statuses: [NodeStatus!] + $missingDescription: Boolean! + $hasMaterialization: Boolean! + $orphanedDimension: Boolean! + ) { + findNodesPaginated( + namespace: $namespace + nodeTypes: $nodeTypes + tags: $tags + editedBy: $editedBy + mode: $mode + limit: $limit + before: $before + after: $after + orderBy: $orderBy + ascending: $ascending + ownedBy: $ownedBy + statuses: $statuses + missingDescription: $missingDescription + hasMaterialization: $hasMaterialization + orphanedDimension: $orphanedDimension + ) { + pageInfo { + hasNextPage + endCursor + hasPrevPage + startCursor + } + edges { + node { + name + type + currentVersion + tags { + name + tagType + } + editedBy + current { + displayName + status + mode + updatedAt + } + createdBy { + username + } + } + } + } + } +`; + +const LIST_CUBES_FOR_PRESET = ` + query ListCubesForPreset { + findNodes(nodeTypes: [CUBE]) { + name + current { + displayName + } + } + } +`; + +const GET_CUBE_FOR_PLANNER = ` + query GetCubeForPlanner($name: String!) { + findNodes(names: [$name]) { + name + current { + displayName + cubeMetrics { + name + } + cubeDimensions { + name + } + materializations { + name + config + schedule + strategy + } + } + } + } +`; + +const GET_NODE_FOR_EDITING = ` + query GetNodeForEditing($name: String!) { + findNodes(names: [$name]) { + name + type + current { + displayName + description + primaryKey + query + parents { name type } + metricMetadata { + direction + unit { name } + expression + significantDigits + incompatibleDruidFunctions + } + requiredDimensions { + name + } + mode + customMetadata + } + tags { + name + displayName + } + owners { + username + } + } + } +`; + +const GET_NODES_BY_NAMES = ` + query GetNodesByNames($names: [String!]) { + findNodes(names: $names) { + name + type + current { + displayName + status + mode + } + } + } +`; + +const GET_METRIC = ` + query GetMetric($name: String!) { + findNodes(names: [$name]) { + name + current { + parents { name } + metricMetadata { + direction + unit { name } + expression + significantDigits + incompatibleDruidFunctions + } + requiredDimensions { + name + } + } + } + } +`; + +const GET_CUBE_FOR_EDITING = ` + query GetCubeForEditing($name: String!) { + findNodes(names: [$name]) { + name + type + owners { + username + } + current { + displayName + description + mode + cubeMetrics { + name + } + cubeDimensions { + name + attribute + properties + } + } + tags { + name + displayName + } + } + } +`; + +const GET_UPSTREAM_NODES = ` + query GetUpstreamNodes($nodeNames: [String!]!) { + upstreamNodes(nodeNames: $nodeNames) { + name + type + } + } +`; + +const GET_DOWNSTREAM_NODES = ` + query GetDownstreamNodes($nodeNames: [String!]!) { + downstreamNodes(nodeNames: $nodeNames) { + name + type + } + } +`; + +const GET_NODE_COLUMNS_WITH_PARTITIONS = ` + query GetNodeColumnsWithPartitions($name: String!) { + findNodes(names: [$name]) { + name + current { + columns { + name + type + partition { + type_ + format + granularity + } + } + } + } + } +`; + +// Sort field mapping +const SORT_ORDER_MAPPING: Record = { + name: 'NAME' as NodeSortField, + displayName: 'DISPLAY_NAME' as NodeSortField, + type: 'TYPE' as NodeSortField, + status: 'STATUS' as NodeSortField, + updatedAt: 'UPDATED_AT' as NodeSortField, +}; + +/** + * Typed GraphQL Service + */ +export const DJGraphQLService = { + /** + * List nodes with pagination and filters (for landing/namespace pages) + */ + listNodesForLanding: async ( + namespace: string | null, + nodeTypes: NodeType[] | null, + tags: string[] | null, + editedBy: string | null, + before: string | null, + after: string | null, + limit: number | null, + sortConfig: SortConfig, + mode: NodeMode | null, + filters: ListNodesFilters = {}, + ): Promise> => { + const { + ownedBy = null, + statuses = null, + missingDescription = false, + hasMaterialization = false, + orphanedDimension = false, + } = filters; + + return gqlFetch(LIST_NODES_FOR_LANDING, { + namespace, + nodeTypes, + tags, + editedBy, + mode: mode || null, + before, + after, + limit, + orderBy: SORT_ORDER_MAPPING[sortConfig.key], + ascending: sortConfig.direction === 'ascending', + ownedBy, + statuses, + missingDescription, + hasMaterialization, + orphanedDimension, + }); + }, + + /** + * List cubes for preset dropdown (lightweight) + */ + listCubesForPreset: async (): Promise< + Array<{ name: string; display_name: string | null }> + > => { + try { + const result = await gqlFetch( + LIST_CUBES_FOR_PRESET, + ); + const nodes = result.data?.findNodes || []; + return nodes.map(node => ({ + name: node.name, + display_name: node.current?.displayName || null, + })); + } catch (err) { + console.error('Failed to fetch cubes via GraphQL:', err); + return []; + } + }, + + /** + * Get cube details for query planner (optimized query) + */ + cubeForPlanner: async ( + name: string, + ): Promise => { + try { + const result = await gqlFetch( + GET_CUBE_FOR_PLANNER, + { name }, + ); + const node = result.data?.findNodes?.[0]; + if (!node) { + return null; + } + + const current = node.current; + const cubeMetrics = (current?.cubeMetrics || []).map(m => m.name); + const cubeDimensions = (current?.cubeDimensions || []).map(d => d.name); + + // Extract druid_cube materialization if present + const druidMat = (current?.materializations || []).find( + m => m.name === 'druid_cube' || m.name === 'druid_cube_v3', + ); + + const cubeMaterialization = druidMat + ? { + strategy: druidMat.strategy, + schedule: druidMat.schedule, + lookbackWindow: druidMat.config?.lookback_window, + druidDatasource: druidMat.config?.druid_datasource, + preaggTables: druidMat.config?.preagg_tables || [], + workflowUrls: druidMat.config?.workflow_urls || [], + timestampColumn: druidMat.config?.timestamp_column, + timestampFormat: druidMat.config?.timestamp_format, + } + : null; + + return { + name: node.name, + display_name: current?.displayName, + cube_node_metrics: cubeMetrics, + cube_node_dimensions: cubeDimensions, + cubeMaterialization, + }; + } catch (err) { + console.error('Failed to fetch cube via GraphQL:', err); + return null; + } + }, + + /** + * Get node details for editing + */ + getNodeForEditing: async ( + name: string, + ): Promise => { + const result = await gqlFetch( + GET_NODE_FOR_EDITING, + { name }, + ); + if (!result.data?.findNodes?.length) { + return null; + } + return result.data.findNodes[0]; + }, + + /** + * Get multiple nodes by names (batch fetch) + */ + getNodesByNames: async ( + names: string[], + ): Promise => { + if (!names || names.length === 0) { + return []; + } + const result = await gqlFetch(GET_NODES_BY_NAMES, { + names, + }); + return result.data?.findNodes || []; + }, + + /** + * Get metric details + */ + getMetric: async ( + name: string, + ): Promise => { + const result = await gqlFetch(GET_METRIC, { name }); + return result.data?.findNodes?.[0] || null; + }, + + /** + * Get cube details for editing + */ + getCubeForEditing: async ( + name: string, + ): Promise => { + const result = await gqlFetch( + GET_CUBE_FOR_EDITING, + { name }, + ); + if (!result.data?.findNodes?.length) { + return null; + } + return result.data.findNodes[0]; + }, + + /** + * Get upstream nodes + */ + upstreamNodes: async ( + nodeNames: string | string[], + ): Promise => { + const names = Array.isArray(nodeNames) ? nodeNames : [nodeNames]; + const result = await gqlFetch(GET_UPSTREAM_NODES, { + nodeNames: names, + }); + return result.data?.upstreamNodes || []; + }, + + /** + * Get downstream nodes + */ + downstreamNodes: async ( + nodeNames: string | string[], + ): Promise => { + const names = Array.isArray(nodeNames) ? nodeNames : [nodeNames]; + const result = await gqlFetch( + GET_DOWNSTREAM_NODES, + { nodeNames: names }, + ); + return result.data?.downstreamNodes || []; + }, + + /** + * Get node columns with partition info + */ + getNodeColumnsWithPartitions: async ( + nodeName: string, + ): Promise<{ + columns: GetNodeColumnsWithPartitionsQuery['findNodes'][0]['current']['columns']; + temporalPartitions: GetNodeColumnsWithPartitionsQuery['findNodes'][0]['current']['columns']; + }> => { + try { + const result = await gqlFetch( + GET_NODE_COLUMNS_WITH_PARTITIONS, + { name: nodeName }, + ); + + const node = result.data?.findNodes?.[0]; + if (!node) { + return { columns: [], temporalPartitions: [] }; + } + + const columns = node.current?.columns || []; + const temporalPartitions = columns.filter( + col => col.partition?.type_ === 'TEMPORAL', + ); + + return { columns, temporalPartitions }; + } catch (err) { + console.error('Failed to fetch node columns with partitions:', err); + return { columns: [], temporalPartitions: [] }; + } + }, +}; + +// Export types for consumers +export type { + NodeType, + NodeMode, + NodeStatus, + NodeSortField, + ListNodesForLandingQuery, + ListCubesForPresetQuery, + GetCubeForPlannerQuery, + GetNodeForEditingQuery, + GetNodesByNamesQuery, + GetMetricQuery, + GetCubeForEditingQuery, + GetUpstreamNodesQuery, + GetDownstreamNodesQuery, + GetNodeColumnsWithPartitionsQuery, +}; diff --git a/datajunction-ui/src/app/services/DJService.js b/datajunction-ui/src/app/services/DJService.js index 98a805629..fe20460ae 100644 --- a/datajunction-ui/src/app/services/DJService.js +++ b/datajunction-ui/src/app/services/DJService.js @@ -1,19 +1,19 @@ // Note: MarkerType.Arrow is just the string "arrow" - we use the literal // to avoid importing reactflow in this service (which would bloat the main bundle) +// Import the typed GraphQL service - all GraphQL methods delegate to this +import { DJGraphQLService } from './DJGraphQLService'; + const MARKER_TYPE_ARROW = 'arrow'; const DJ_URL = process.env.REACT_APP_DJ_URL ? process.env.REACT_APP_DJ_URL : 'http://localhost:8000'; -const DJ_GQL = process.env.REACT_APP_DJ_GQL - ? process.env.REACT_APP_DJ_GQL - : process.env.REACT_APP_DJ_URL + '/graphql'; - // Export the base URL for components that need direct access export const getDJUrl = () => DJ_URL; export const DataJunctionAPI = { + // Delegates to typed DJGraphQLService listNodesForLanding: async function ( namespace, nodeTypes, @@ -24,215 +24,30 @@ export const DataJunctionAPI = { limit, sortConfig, mode, - { - ownedBy = null, - statuses = null, - missingDescription = false, - hasMaterialization = false, - orphanedDimension = false, - } = {}, + filters = {}, ) { - const query = ` - query ListNodes($namespace: String, $nodeTypes: [NodeType!], $tags: [String!], $editedBy: String, $mode: NodeMode, $before: String, $after: String, $limit: Int, $orderBy: NodeSortField, $ascending: Boolean, $ownedBy: String, $statuses: [NodeStatus!], $missingDescription: Boolean, $hasMaterialization: Boolean, $orphanedDimension: Boolean) { - findNodesPaginated( - namespace: $namespace - nodeTypes: $nodeTypes - tags: $tags - editedBy: $editedBy - mode: $mode - limit: $limit - before: $before - after: $after - orderBy: $orderBy - ascending: $ascending - ownedBy: $ownedBy - statuses: $statuses - missingDescription: $missingDescription - hasMaterialization: $hasMaterialization - orphanedDimension: $orphanedDimension - ) { - pageInfo { - hasNextPage - endCursor - hasPrevPage - startCursor - } - edges { - node { - name - type - currentVersion - tags { - name - tagType - } - editedBy - current { - displayName - status - mode - updatedAt - } - createdBy { - username - } - } - } - } - } - `; - const sortOrderMapping = { - name: 'NAME', - displayName: 'DISPLAY_NAME', - type: 'TYPE', - status: 'STATUS', - updatedAt: 'UPDATED_AT', - }; - - return await ( - await fetch(DJ_GQL, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - credentials: 'include', - body: JSON.stringify({ - query, - variables: { - namespace: namespace, - nodeTypes: nodeTypes, - tags: tags, - editedBy: editedBy, - mode: mode || null, - before: before, - after: after, - limit: limit, - orderBy: sortOrderMapping[sortConfig.key], - ascending: sortConfig.direction === 'ascending', - ownedBy: ownedBy, - statuses: statuses, - missingDescription: missingDescription, - hasMaterialization: hasMaterialization, - orphanedDimension: orphanedDimension, - }, - }), - }) - ).json(); + return DJGraphQLService.listNodesForLanding( + namespace, + nodeTypes, + tags, + editedBy, + before, + after, + limit, + sortConfig, + mode, + filters, + ); }, - // Lightweight GraphQL query for listing cubes with display names (for preset dropdown) - listCubesForPreset: async function () { - const query = ` - query ListCubes { - findNodes(nodeTypes: [CUBE]) { - name - current { - displayName - } - } - } - `; - - try { - const result = await ( - await fetch(DJ_GQL, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - credentials: 'include', - body: JSON.stringify({ query }), - }) - ).json(); - - // Transform to simple array: [{name, display_name}] - const nodes = result?.data?.findNodes || []; - return nodes.map(node => ({ - name: node.name, - display_name: node.current?.displayName || null, - })); - } catch (err) { - console.error('Failed to fetch cubes via GraphQL:', err); - return []; - } + // Delegates to typed DJGraphQLService + listCubesForPreset: function () { + return DJGraphQLService.listCubesForPreset(); }, - // Lightweight GraphQL query for planner page - only fetches fields needed - // Much faster than REST /cubes/{name}/ which loads all columns, elements, etc. - cubeForPlanner: async function (name) { - const query = ` - query GetCubeForPlanner($name: String!) { - findNodes(names: [$name]) { - name - current { - displayName - cubeMetrics { - name - } - cubeDimensions { - name - } - materializations { - name - config - schedule - strategy - } - } - } - } - `; - - try { - const result = await ( - await fetch(DJ_GQL, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - credentials: 'include', - body: JSON.stringify({ query, variables: { name } }), - }) - ).json(); - - const node = result?.data?.findNodes?.[0]; - if (!node) { - return null; - } - - // Transform to match the shape expected by QueryPlannerPage - const current = node.current || {}; - const cubeMetrics = (current.cubeMetrics || []).map(m => m.name); - const cubeDimensions = (current.cubeDimensions || []).map(d => d.name); - - // Extract druid_cube materialization if present (v3 or legacy) - const druidMat = (current.materializations || []).find( - m => m.name === 'druid_cube' || m.name === 'druid_cube_v3', - ); - const cubeMaterialization = druidMat - ? { - strategy: druidMat.strategy, - schedule: druidMat.schedule, - lookbackWindow: druidMat.config?.lookback_window, - druidDatasource: druidMat.config?.druid_datasource, - preaggTables: druidMat.config?.preagg_tables || [], - workflowUrls: druidMat.config?.workflow_urls || [], - timestampColumn: druidMat.config?.timestamp_column, - timestampFormat: druidMat.config?.timestamp_format, - } - : null; - - return { - name: node.name, - display_name: current.displayName, - cube_node_metrics: cubeMetrics, - cube_node_dimensions: cubeDimensions, - cubeMaterialization, // Included so we don't need a second fetch - }; - } catch (err) { - console.error('Failed to fetch cube via GraphQL:', err); - return null; - } + // Delegates to typed DJGraphQLService + cubeForPlanner: function (name) { + return DJGraphQLService.cubeForPlanner(name); }, whoami: async function () { @@ -403,187 +218,24 @@ export const DataJunctionAPI = { return data; }, - getNodeForEditing: async function (name) { - const query = ` - query GetNodeForEditing($name: String!) { - findNodes (names: [$name]) { - name - type - current { - displayName - description - primaryKey - query - parents { name type } - metricMetadata { - direction - unit { name } - expression - significantDigits - incompatibleDruidFunctions - } - requiredDimensions { - name - } - mode - customMetadata - } - tags { - name - displayName - } - owners { - username - } - } - } - `; - - const results = await ( - await fetch(DJ_GQL, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - credentials: 'include', - body: JSON.stringify({ - query, - variables: { - name: name, - }, - }), - }) - ).json(); - if (results.data.findNodes.length === 0) { - return null; - } - return results.data.findNodes[0]; + // Delegates to typed DJGraphQLService + getNodeForEditing: function (name) { + return DJGraphQLService.getNodeForEditing(name); }, - // Fetch basic node info for multiple nodes by name (for Settings page) - getNodesByNames: async function (names) { - if (!names || names.length === 0) { - return []; - } - const query = ` - query GetNodesByNames($names: [String!]) { - findNodes(names: $names) { - name - type - current { - displayName - status - mode - } - } - } - `; - - const results = await ( - await fetch(DJ_GQL, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - credentials: 'include', - body: JSON.stringify({ - query, - variables: { names }, - }), - }) - ).json(); - return results.data?.findNodes || []; - }, - - getMetric: async function (name) { - const query = ` - query GetMetric($name: String!) { - findNodes (names: [$name]) { - name - current { - parents { name } - metricMetadata { - direction - unit { name } - expression - significantDigits - incompatibleDruidFunctions - } - requiredDimensions { - name - } - } - } - } - `; - - const results = await ( - await fetch(DJ_GQL, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - credentials: 'include', - body: JSON.stringify({ - query, - variables: { - name: name, - }, - }), - }) - ).json(); - return results.data.findNodes[0]; + // Delegates to typed DJGraphQLService + getNodesByNames: function (names) { + return DJGraphQLService.getNodesByNames(names); }, - getCubeForEditing: async function (name) { - const query = ` - query GetCubeForEditing($name: String!) { - findNodes(names: [$name]) { - name - type - owners { - username - } - current { - displayName - description - mode - cubeMetrics { - name - } - cubeDimensions { - name - attribute - properties - } - } - tags { - name - displayName - } - } - } - `; + // Delegates to typed DJGraphQLService + getMetric: function (name) { + return DJGraphQLService.getMetric(name); + }, - const results = await ( - await fetch(DJ_GQL, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - credentials: 'include', - body: JSON.stringify({ - query, - variables: { - name: name, - }, - }), - }) - ).json(); - if (results.data.findNodes.length === 0) { - return null; - } - return results.data.findNodes[0]; + // Delegates to typed DJGraphQLService + getCubeForEditing: function (name) { + return DJGraphQLService.getCubeForEditing(name); }, nodes: async function (prefix) { @@ -827,47 +479,14 @@ export const DataJunctionAPI = { ).json(); }, - // GraphQL-based upstream/downstream queries - more efficient as they only fetch needed fields - upstreamsGQL: async function (nodeNames) { - const names = Array.isArray(nodeNames) ? nodeNames : [nodeNames]; - const query = ` - query GetUpstreamNodes($nodeNames: [String!]!) { - upstreamNodes(nodeNames: $nodeNames) { - name - type - } - } - `; - const results = await ( - await fetch(DJ_GQL, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - credentials: 'include', - body: JSON.stringify({ query, variables: { nodeNames: names } }), - }) - ).json(); - return results.data?.upstreamNodes || []; + // Delegates to typed DJGraphQLService + upstreamsGQL: function (nodeNames) { + return DJGraphQLService.upstreamNodes(nodeNames); }, - downstreamsGQL: async function (nodeNames) { - const names = Array.isArray(nodeNames) ? nodeNames : [nodeNames]; - const query = ` - query GetDownstreamNodes($nodeNames: [String!]!) { - downstreamNodes(nodeNames: $nodeNames) { - name - type - } - } - `; - const results = await ( - await fetch(DJ_GQL, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - credentials: 'include', - body: JSON.stringify({ query, variables: { nodeNames: names } }), - }) - ).json(); - return results.data?.downstreamNodes || []; + // Delegates to typed DJGraphQLService + downstreamsGQL: function (nodeNames) { + return DJGraphQLService.downstreamNodes(nodeNames); }, node_dag: async function (name) { @@ -878,54 +497,9 @@ export const DataJunctionAPI = { ).json(); }, - // Fetch node columns with partition info via GraphQL - // Used to check if a node has temporal partitions defined - getNodeColumnsWithPartitions: async function (nodeName) { - const query = ` - query GetNodeColumnsWithPartitions($name: String!) { - findNodes(names: [$name]) { - name - current { - columns { - name - type - partition { - type_ - format - granularity - } - } - } - } - } - `; - - try { - const results = await ( - await fetch(DJ_GQL, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - credentials: 'include', - body: JSON.stringify({ query, variables: { name: nodeName } }), - }) - ).json(); - - const node = results.data?.findNodes?.[0]; - if (!node) return { columns: [], temporalPartitions: [] }; - - const columns = node.current?.columns || []; - const temporalPartitions = columns.filter( - col => col.partition?.type_ === 'TEMPORAL', - ); - - return { - columns, - temporalPartitions, - }; - } catch (err) { - console.error('Failed to fetch node columns with partitions:', err); - return { columns: [], temporalPartitions: [] }; - } + // Delegates to typed DJGraphQLService + getNodeColumnsWithPartitions: function (nodeName) { + return DJGraphQLService.getNodeColumnsWithPartitions(nodeName); }, node_lineage: async function (name) { diff --git a/datajunction-ui/src/graphql/queries/cubeForPlanner.graphql b/datajunction-ui/src/graphql/queries/cubeForPlanner.graphql new file mode 100644 index 000000000..9fda3f393 --- /dev/null +++ b/datajunction-ui/src/graphql/queries/cubeForPlanner.graphql @@ -0,0 +1,20 @@ +query GetCubeForPlanner($name: String!) { + findNodes(names: [$name]) { + name + current { + displayName + cubeMetrics { + name + } + cubeDimensions { + name + } + materializations { + name + config + schedule + strategy + } + } + } +} diff --git a/datajunction-ui/src/graphql/queries/downstreamNodes.graphql b/datajunction-ui/src/graphql/queries/downstreamNodes.graphql new file mode 100644 index 000000000..91d896caa --- /dev/null +++ b/datajunction-ui/src/graphql/queries/downstreamNodes.graphql @@ -0,0 +1,6 @@ +query GetDownstreamNodes($nodeNames: [String!]!) { + downstreamNodes(nodeNames: $nodeNames) { + name + type + } +} diff --git a/datajunction-ui/src/graphql/queries/getCubeForEditing.graphql b/datajunction-ui/src/graphql/queries/getCubeForEditing.graphql new file mode 100644 index 000000000..c01ee2f72 --- /dev/null +++ b/datajunction-ui/src/graphql/queries/getCubeForEditing.graphql @@ -0,0 +1,26 @@ +query GetCubeForEditing($name: String!) { + findNodes(names: [$name]) { + name + type + owners { + username + } + current { + displayName + description + mode + cubeMetrics { + name + } + cubeDimensions { + name + attribute + properties + } + } + tags { + name + displayName + } + } +} diff --git a/datajunction-ui/src/graphql/queries/getMetric.graphql b/datajunction-ui/src/graphql/queries/getMetric.graphql new file mode 100644 index 000000000..e0437bd7a --- /dev/null +++ b/datajunction-ui/src/graphql/queries/getMetric.graphql @@ -0,0 +1,22 @@ +query GetMetric($name: String!) { + findNodes(names: [$name]) { + name + current { + parents { + name + } + metricMetadata { + direction + unit { + name + } + expression + significantDigits + incompatibleDruidFunctions + } + requiredDimensions { + name + } + } + } +} diff --git a/datajunction-ui/src/graphql/queries/getNodeColumnsWithPartitions.graphql b/datajunction-ui/src/graphql/queries/getNodeColumnsWithPartitions.graphql new file mode 100644 index 000000000..2f24883ea --- /dev/null +++ b/datajunction-ui/src/graphql/queries/getNodeColumnsWithPartitions.graphql @@ -0,0 +1,16 @@ +query GetNodeColumnsWithPartitions($name: String!) { + findNodes(names: [$name]) { + name + current { + columns { + name + type + partition { + type_ + format + granularity + } + } + } + } +} diff --git a/datajunction-ui/src/graphql/queries/getNodeForEditing.graphql b/datajunction-ui/src/graphql/queries/getNodeForEditing.graphql new file mode 100644 index 000000000..b309a1c81 --- /dev/null +++ b/datajunction-ui/src/graphql/queries/getNodeForEditing.graphql @@ -0,0 +1,37 @@ +query GetNodeForEditing($name: String!) { + findNodes(names: [$name]) { + name + type + current { + displayName + description + primaryKey + query + parents { + name + type + } + metricMetadata { + direction + unit { + name + } + expression + significantDigits + incompatibleDruidFunctions + } + requiredDimensions { + name + } + mode + customMetadata + } + tags { + name + displayName + } + owners { + username + } + } +} diff --git a/datajunction-ui/src/graphql/queries/getNodesByNames.graphql b/datajunction-ui/src/graphql/queries/getNodesByNames.graphql new file mode 100644 index 000000000..2ea751bae --- /dev/null +++ b/datajunction-ui/src/graphql/queries/getNodesByNames.graphql @@ -0,0 +1,11 @@ +query GetNodesByNames($names: [String!]) { + findNodes(names: $names) { + name + type + current { + displayName + status + mode + } + } +} diff --git a/datajunction-ui/src/graphql/queries/listCubesForPreset.graphql b/datajunction-ui/src/graphql/queries/listCubesForPreset.graphql new file mode 100644 index 000000000..d6364f5a8 --- /dev/null +++ b/datajunction-ui/src/graphql/queries/listCubesForPreset.graphql @@ -0,0 +1,8 @@ +query ListCubesForPreset { + findNodes(nodeTypes: [CUBE]) { + name + current { + displayName + } + } +} diff --git a/datajunction-ui/src/graphql/queries/listNodesForLanding.graphql b/datajunction-ui/src/graphql/queries/listNodesForLanding.graphql new file mode 100644 index 000000000..cd2e44e27 --- /dev/null +++ b/datajunction-ui/src/graphql/queries/listNodesForLanding.graphql @@ -0,0 +1,63 @@ +query ListNodesForLanding( + $namespace: String + $nodeTypes: [NodeType!] + $tags: [String!] + $editedBy: String + $mode: NodeMode + $before: String + $after: String + $limit: Int + $orderBy: NodeSortField! = NAME + $ascending: Boolean! = true + $ownedBy: String + $statuses: [NodeStatus!] + $missingDescription: Boolean! = false + $hasMaterialization: Boolean! = false + $orphanedDimension: Boolean! = false +) { + findNodesPaginated( + namespace: $namespace + nodeTypes: $nodeTypes + tags: $tags + editedBy: $editedBy + mode: $mode + limit: $limit + before: $before + after: $after + orderBy: $orderBy + ascending: $ascending + ownedBy: $ownedBy + statuses: $statuses + missingDescription: $missingDescription + hasMaterialization: $hasMaterialization + orphanedDimension: $orphanedDimension + ) { + pageInfo { + hasNextPage + endCursor + hasPrevPage + startCursor + } + edges { + node { + name + type + currentVersion + tags { + name + tagType + } + editedBy + current { + displayName + status + mode + updatedAt + } + createdBy { + username + } + } + } + } +} diff --git a/datajunction-ui/src/graphql/queries/upstreamNodes.graphql b/datajunction-ui/src/graphql/queries/upstreamNodes.graphql new file mode 100644 index 000000000..53d51ef40 --- /dev/null +++ b/datajunction-ui/src/graphql/queries/upstreamNodes.graphql @@ -0,0 +1,6 @@ +query GetUpstreamNodes($nodeNames: [String!]!) { + upstreamNodes(nodeNames: $nodeNames) { + name + type + } +} diff --git a/datajunction-ui/src/types/graphql.ts b/datajunction-ui/src/types/graphql.ts new file mode 100644 index 000000000..356870766 --- /dev/null +++ b/datajunction-ui/src/types/graphql.ts @@ -0,0 +1,767 @@ +export type Maybe = T | null; +export type InputMaybe = T | null; +export type Exact = { + [K in keyof T]: T[K]; +}; +export type MakeOptional = Omit & { + [SubKey in K]?: Maybe; +}; +export type MakeMaybe = Omit & { + [SubKey in K]: Maybe; +}; +export type MakeEmpty< + T extends { [key: string]: unknown }, + K extends keyof T, +> = { [_ in K]?: never }; +export type Incremental = + | T + | { + [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never; + }; +/** All built-in and custom scalars, mapped to their actual values */ +export interface Scalars { + ID: { input: string; output: string }; + String: { input: string; output: string }; + Boolean: { input: boolean; output: boolean }; + Int: { input: number; output: number }; + Float: { input: number; output: number }; + /** Date with time (isoformat) */ + DateTime: { input: any; output: any }; + /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf). */ + JSON: { input: any; output: any }; + /** BigInt field */ + Union: { input: any; output: any }; +} + +export enum Aggregability { + Full = 'FULL', + Limited = 'LIMITED', + None = 'NONE', +} + +export interface AggregationRule { + level?: Maybe>; + type: Aggregability; +} + +export interface Attribute { + attributeType: AttributeTypeName; +} + +export interface AttributeTypeName { + name: Scalars['String']['output']; + namespace: Scalars['String']['output']; +} + +export interface AvailabilityState { + catalog: Scalars['String']['output']; + categoricalPartitions?: Maybe>; + maxTemporalPartition?: Maybe>; + minTemporalPartition?: Maybe>; + partitions?: Maybe>; + schema_?: Maybe; + table: Scalars['String']['output']; + temporalPartitions?: Maybe>; + url?: Maybe; + validThroughTs: Scalars['Int']['output']; +} + +export interface Backfill { + spec?: Maybe>; + urls?: Maybe>; +} + +export interface Catalog { + engines?: Maybe>; + name: Scalars['String']['output']; +} + +export interface Column { + attributes: Array; + dimension?: Maybe; + displayName?: Maybe; + name: Scalars['String']['output']; + partition?: Maybe; + type: Scalars['String']['output']; +} + +export interface ColumnMetadata { + name: Scalars['String']['output']; + semanticEntity?: Maybe; + semanticType?: Maybe; + type: Scalars['String']['output']; +} + +export interface CubeDefinition { + cube?: InputMaybe; + dimensions?: InputMaybe>; + filters?: InputMaybe>; + metrics?: InputMaybe>; + orderby?: InputMaybe>; +} + +export interface DjError { + code: ErrorCode; + context?: Maybe; + message?: Maybe; +} + +export interface DecomposedMetric { + combiner: Scalars['String']['output']; + components: Array; + derivedExpression: Scalars['String']['output']; + derivedQuery?: Maybe; +} + +export enum Dialect { + Clickhouse = 'CLICKHOUSE', + Druid = 'DRUID', + Duckdb = 'DUCKDB', + Postgres = 'POSTGRES', + Redshift = 'REDSHIFT', + Snowflake = 'SNOWFLAKE', + Spark = 'SPARK', + Sqlite = 'SQLITE', + Trino = 'TRINO', +} + +export interface DialectInfo { + name: Scalars['String']['output']; + pluginClass: Scalars['String']['output']; +} + +export interface DimensionAttribute { + DimensionNode?: Maybe; + attribute?: Maybe; + /** The dimension node this attribute belongs to */ + dimensionNode: Node; + name: Scalars['String']['output']; + properties: Array; + role?: Maybe; + type: Scalars['String']['output']; +} + +export interface DimensionLink { + dimension: NodeName; + foreignKeys: Scalars['JSON']['output']; + joinCardinality?: Maybe; + joinSql: Scalars['String']['output']; + joinType: JoinType; + role?: Maybe; +} + +export interface Engine { + dialect?: Maybe; + name: Scalars['String']['output']; + uri?: Maybe; + version: Scalars['String']['output']; +} + +export interface EngineSettings { + /** The name of the engine used by the generated SQL */ + name: Scalars['String']['input']; + /** The version of the engine used by the generated SQL */ + version?: InputMaybe; +} + +export enum ErrorCode { + AlreadyExists = 'ALREADY_EXISTS', + AuthenticationError = 'AUTHENTICATION_ERROR', + CatalogNotFound = 'CATALOG_NOT_FOUND', + CompoundBuildException = 'COMPOUND_BUILD_EXCEPTION', + IncompleteAuthorization = 'INCOMPLETE_AUTHORIZATION', + InvalidArgumentsToFunction = 'INVALID_ARGUMENTS_TO_FUNCTION', + InvalidColumn = 'INVALID_COLUMN', + InvalidColumnInFilter = 'INVALID_COLUMN_IN_FILTER', + InvalidCube = 'INVALID_CUBE', + InvalidDimension = 'INVALID_DIMENSION', + InvalidDimensionJoin = 'INVALID_DIMENSION_JOIN', + InvalidDimensionLink = 'INVALID_DIMENSION_LINK', + InvalidFilterPattern = 'INVALID_FILTER_PATTERN', + InvalidLoginCredentials = 'INVALID_LOGIN_CREDENTIALS', + InvalidMetric = 'INVALID_METRIC', + InvalidNamespace = 'INVALID_NAMESPACE', + InvalidOrderBy = 'INVALID_ORDER_BY', + InvalidParent = 'INVALID_PARENT', + InvalidSqlQuery = 'INVALID_SQL_QUERY', + InvalidValueInFilter = 'INVALID_VALUE_IN_FILTER', + MissingColumns = 'MISSING_COLUMNS', + MissingParameter = 'MISSING_PARAMETER', + MissingParent = 'MISSING_PARENT', + NodeTypeError = 'NODE_TYPE_ERROR', + NotImplementedError = 'NOT_IMPLEMENTED_ERROR', + OauthError = 'OAUTH_ERROR', + QueryServiceError = 'QUERY_SERVICE_ERROR', + TagNotFound = 'TAG_NOT_FOUND', + TypeInference = 'TYPE_INFERENCE', + UnauthorizedAccess = 'UNAUTHORIZED_ACCESS', + UnknownError = 'UNKNOWN_ERROR', + UnknownNode = 'UNKNOWN_NODE', + UserNotFound = 'USER_NOT_FOUND', +} + +export interface GeneratedSql { + columns: Array; + dialect: Dialect; + errors: Array; + node: Node; + sql: Scalars['String']['output']; + upstreamTables: Array; +} + +export enum JoinCardinality { + ManyToMany = 'MANY_TO_MANY', + ManyToOne = 'MANY_TO_ONE', + OneToMany = 'ONE_TO_MANY', + OneToOne = 'ONE_TO_ONE', +} + +export enum JoinType { + Cross = 'CROSS', + Full = 'FULL', + Inner = 'INNER', + Left = 'LEFT', + Right = 'RIGHT', +} + +export interface MaterializationConfig { + backfills: Array; + config: Scalars['JSON']['output']; + job?: Maybe; + name?: Maybe; + schedule: Scalars['String']['output']; + strategy?: Maybe; +} + +export interface MaterializationPlan { + units: Array; +} + +export interface MaterializationUnit { + filterRefs: Array; + filters: Array; + grainDimensions: Array; + measures: Array; + upstream: VersionedRef; +} + +export interface MetricComponent { + aggregation?: Maybe; + expression: Scalars['String']['output']; + merge?: Maybe; + name: Scalars['String']['output']; + rule: AggregationRule; +} + +export enum MetricDirection { + HigherIsBetter = 'HIGHER_IS_BETTER', + LowerIsBetter = 'LOWER_IS_BETTER', + Neutral = 'NEUTRAL', +} + +export interface MetricMetadata { + direction?: Maybe; + expression: Scalars['String']['output']; + incompatibleDruidFunctions: Array; + maxDecimalExponent?: Maybe; + minDecimalExponent?: Maybe; + significantDigits?: Maybe; + unit?: Maybe; +} + +export interface Node { + createdAt: Scalars['DateTime']['output']; + createdBy: User; + current: NodeRevision; + currentVersion: Scalars['String']['output']; + deactivatedAt?: Maybe; + editedBy: Array; + id: Scalars['Union']['output']; + name: Scalars['String']['output']; + owners: Array; + revisions: Array; + tags: Array; + type: NodeType; +} + +export interface NodeConnection { + edges: Array; + pageInfo: PageInfo; +} + +export interface NodeEdge { + node: Node; +} + +export enum NodeMode { + Draft = 'DRAFT', + Published = 'PUBLISHED', +} + +export interface NodeName { + name: Scalars['String']['output']; +} + +export interface NodeNameVersion { + currentVersion: Scalars['String']['output']; + name: Scalars['String']['output']; + type: Scalars['String']['output']; +} + +export interface NodeRevision { + availability?: Maybe; + catalog?: Maybe; + columns: Array; + cubeDimensions: Array; + cubeMetrics: Array; + customMetadata?: Maybe; + description: Scalars['String']['output']; + dimensionLinks: Array; + displayName?: Maybe; + extractedMeasures?: Maybe; + id: Scalars['Union']['output']; + materializations?: Maybe>; + metricMetadata?: Maybe; + mode?: Maybe; + name: Scalars['String']['output']; + parents: Array; + primaryKey: Array; + query?: Maybe; + requiredDimensions?: Maybe>; + schema_?: Maybe; + status: NodeStatus; + table?: Maybe; + type: NodeType; + updatedAt: Scalars['DateTime']['output']; + version: Scalars['String']['output']; +} + +export interface NodeRevisionColumnsArgs { + attributes?: InputMaybe>; +} + +export enum NodeSortField { + CreatedAt = 'CREATED_AT', + DisplayName = 'DISPLAY_NAME', + Mode = 'MODE', + Name = 'NAME', + Status = 'STATUS', + Type = 'TYPE', + UpdatedAt = 'UPDATED_AT', +} + +export enum NodeStatus { + Invalid = 'INVALID', + Valid = 'VALID', +} + +export enum NodeType { + Cube = 'CUBE', + Dimension = 'DIMENSION', + Metric = 'METRIC', + Source = 'SOURCE', + Transform = 'TRANSFORM', +} + +export enum OAuthProvider { + Basic = 'BASIC', + Github = 'GITHUB', + Google = 'GOOGLE', +} + +export interface PageInfo { + /** When paginating forwards, the cursor to continue. */ + endCursor?: Maybe; + /** When paginating forwards, are there more nodes? */ + hasNextPage: Scalars['Boolean']['output']; + /** When paginating forwards, are there more nodes? */ + hasPrevPage: Scalars['Boolean']['output']; + /** When paginating back, the cursor to continue. */ + startCursor?: Maybe; +} + +export interface Partition { + expression?: Maybe; + format?: Maybe; + granularity?: Maybe; + type_: PartitionType; +} + +export interface PartitionAvailability { + maxTemporalPartition?: Maybe>; + minTemporalPartition?: Maybe>; + validThroughTs?: Maybe; + value: Array>; +} + +export interface PartitionBackfill { + columnName: Scalars['String']['output']; + range?: Maybe>; + values?: Maybe>; +} + +export enum PartitionType { + Categorical = 'CATEGORICAL', + Temporal = 'TEMPORAL', +} + +export interface Query { + /** Get common dimensions for one or more nodes */ + commonDimensions: Array; + /** Find downstream nodes (optionally, of a given type) from a given node. */ + downstreamNodes: Array; + /** Find nodes based on the search parameters. */ + findNodes: Array; + /** Find nodes based on the search parameters with pagination */ + findNodesPaginated: NodeConnection; + /** List available catalogs */ + listCatalogs: Array; + /** List all supported SQL dialects */ + listDialects: Array; + /** List all available engines */ + listEngines: Array; + /** List all DJ node tag types */ + listTagTypes: Array; + /** Find DJ node tags based on the search parameters. */ + listTags: Array; + /** Get materialization plan for a list of metrics, dimensions, and filters. */ + materializationPlan: MaterializationPlan; + /** Get measures SQL for a list of metrics, dimensions, and filters. */ + measuresSql: Array; + /** Find upstream nodes (optionally, of a given type) from a given node. */ + upstreamNodes: Array; +} + +export interface QueryCommonDimensionsArgs { + nodes?: InputMaybe>; +} + +export interface QueryDownstreamNodesArgs { + includeDeactivated?: Scalars['Boolean']['input']; + nodeNames: Array; + nodeType?: InputMaybe; +} + +export interface QueryFindNodesArgs { + ascending?: Scalars['Boolean']['input']; + dimensions?: InputMaybe>; + editedBy?: InputMaybe; + fragment?: InputMaybe; + hasMaterialization?: Scalars['Boolean']['input']; + limit?: InputMaybe; + missingDescription?: Scalars['Boolean']['input']; + missingOwner?: Scalars['Boolean']['input']; + mode?: InputMaybe; + names?: InputMaybe>; + namespace?: InputMaybe; + nodeTypes?: InputMaybe>; + orderBy?: NodeSortField; + orphanedDimension?: Scalars['Boolean']['input']; + ownedBy?: InputMaybe; + statuses?: InputMaybe>; + tags?: InputMaybe>; +} + +export interface QueryFindNodesPaginatedArgs { + after?: InputMaybe; + ascending?: Scalars['Boolean']['input']; + before?: InputMaybe; + dimensions?: InputMaybe>; + editedBy?: InputMaybe; + fragment?: InputMaybe; + hasMaterialization?: Scalars['Boolean']['input']; + limit?: InputMaybe; + missingDescription?: Scalars['Boolean']['input']; + missingOwner?: Scalars['Boolean']['input']; + mode?: InputMaybe; + names?: InputMaybe>; + namespace?: InputMaybe; + nodeTypes?: InputMaybe>; + orderBy?: NodeSortField; + orphanedDimension?: Scalars['Boolean']['input']; + ownedBy?: InputMaybe; + statuses?: InputMaybe>; + tags?: InputMaybe>; +} + +export interface QueryListTagsArgs { + tagNames?: InputMaybe>; + tagTypes?: InputMaybe>; +} + +export interface QueryMaterializationPlanArgs { + cube: CubeDefinition; +} + +export interface QueryMeasuresSqlArgs { + cube: CubeDefinition; + engine?: InputMaybe; + includeAllColumns?: Scalars['Boolean']['input']; + preaggregate?: Scalars['Boolean']['input']; + queryParameters?: InputMaybe; + useMaterialized?: Scalars['Boolean']['input']; +} + +export interface QueryUpstreamNodesArgs { + includeDeactivated?: Scalars['Boolean']['input']; + nodeNames: Array; + nodeType?: InputMaybe; +} + +export interface SemanticEntity { + /** The column on the node this semantic entity is sourced from */ + column: Scalars['String']['output']; + name: Scalars['String']['output']; + /** The node this semantic entity is sourced from */ + node: Scalars['String']['output']; +} + +export enum SemanticType { + Dimension = 'DIMENSION', + Measure = 'MEASURE', + Metric = 'METRIC', + Timestamp = 'TIMESTAMP', +} + +export interface Tag { + description?: Maybe; + displayName?: Maybe; + name: Scalars['String']['output']; + /** The nodes with this tag */ + nodes: Array; + tagMetadata?: Maybe; + tagType: Scalars['String']['output']; +} + +export interface TagBase { + description?: Maybe; + displayName?: Maybe; + name: Scalars['String']['output']; + tagMetadata?: Maybe; + tagType: Scalars['String']['output']; +} + +export interface Unit { + abbreviation?: Maybe; + category?: Maybe; + label?: Maybe; + name: Scalars['String']['output']; +} + +export interface User { + email?: Maybe; + id: Scalars['Union']['output']; + isAdmin: Scalars['Boolean']['output']; + name?: Maybe; + oauthProvider: OAuthProvider; + username: Scalars['String']['output']; +} + +export interface VersionedRef { + name: Scalars['String']['output']; + version: Scalars['String']['output']; +} + +export type GetCubeForPlannerQueryVariables = Exact<{ + name: Scalars['String']['input']; +}>; + +export type GetCubeForPlannerQuery = { + findNodes: Array<{ + name: string; + current: { + displayName?: string | null; + cubeMetrics: Array<{ name: string }>; + cubeDimensions: Array<{ name: string }>; + materializations?: Array<{ + name?: string | null; + config: any; + schedule: string; + strategy?: string | null; + }> | null; + }; + }>; +}; + +export type GetDownstreamNodesQueryVariables = Exact<{ + nodeNames: Array | Scalars['String']['input']; +}>; + +export type GetDownstreamNodesQuery = { + downstreamNodes: Array<{ name: string; type: NodeType }>; +}; + +export type GetCubeForEditingQueryVariables = Exact<{ + name: Scalars['String']['input']; +}>; + +export type GetCubeForEditingQuery = { + findNodes: Array<{ + name: string; + type: NodeType; + owners: Array<{ username: string }>; + current: { + displayName?: string | null; + description: string; + mode?: NodeMode | null; + cubeMetrics: Array<{ name: string }>; + cubeDimensions: Array<{ + name: string; + attribute?: string | null; + properties: Array; + }>; + }; + tags: Array<{ name: string; displayName?: string | null }>; + }>; +}; + +export type GetMetricQueryVariables = Exact<{ + name: Scalars['String']['input']; +}>; + +export type GetMetricQuery = { + findNodes: Array<{ + name: string; + current: { + parents: Array<{ name: string }>; + metricMetadata?: { + direction?: MetricDirection | null; + expression: string; + significantDigits?: number | null; + incompatibleDruidFunctions: Array; + unit?: { name: string } | null; + } | null; + requiredDimensions?: Array<{ name: string }> | null; + }; + }>; +}; + +export type GetNodeColumnsWithPartitionsQueryVariables = Exact<{ + name: Scalars['String']['input']; +}>; + +export type GetNodeColumnsWithPartitionsQuery = { + findNodes: Array<{ + name: string; + current: { + columns: Array<{ + name: string; + type: string; + partition?: { + type_: PartitionType; + format?: string | null; + granularity?: string | null; + } | null; + }>; + }; + }>; +}; + +export type GetNodeForEditingQueryVariables = Exact<{ + name: Scalars['String']['input']; +}>; + +export type GetNodeForEditingQuery = { + findNodes: Array<{ + name: string; + type: NodeType; + current: { + displayName?: string | null; + description: string; + primaryKey: Array; + query?: string | null; + mode?: NodeMode | null; + customMetadata?: any | null; + parents: Array<{ name: string; type: string }>; + metricMetadata?: { + direction?: MetricDirection | null; + expression: string; + significantDigits?: number | null; + incompatibleDruidFunctions: Array; + unit?: { name: string } | null; + } | null; + requiredDimensions?: Array<{ name: string }> | null; + }; + tags: Array<{ name: string; displayName?: string | null }>; + owners: Array<{ username: string }>; + }>; +}; + +export type GetNodesByNamesQueryVariables = Exact<{ + names?: InputMaybe< + Array | Scalars['String']['input'] + >; +}>; + +export type GetNodesByNamesQuery = { + findNodes: Array<{ + name: string; + type: NodeType; + current: { + displayName?: string | null; + status: NodeStatus; + mode?: NodeMode | null; + }; + }>; +}; + +export type ListCubesForPresetQueryVariables = Exact<{ [key: string]: never }>; + +export type ListCubesForPresetQuery = { + findNodes: Array<{ name: string; current: { displayName?: string | null } }>; +}; + +export type ListNodesForLandingQueryVariables = Exact<{ + namespace?: InputMaybe; + nodeTypes?: InputMaybe | NodeType>; + tags?: InputMaybe< + Array | Scalars['String']['input'] + >; + editedBy?: InputMaybe; + mode?: InputMaybe; + before?: InputMaybe; + after?: InputMaybe; + limit?: InputMaybe; + orderBy?: NodeSortField; + ascending?: Scalars['Boolean']['input']; + ownedBy?: InputMaybe; + statuses?: InputMaybe | NodeStatus>; + missingDescription?: Scalars['Boolean']['input']; + hasMaterialization?: Scalars['Boolean']['input']; + orphanedDimension?: Scalars['Boolean']['input']; +}>; + +export type ListNodesForLandingQuery = { + findNodesPaginated: { + pageInfo: { + hasNextPage: boolean; + endCursor?: string | null; + hasPrevPage: boolean; + startCursor?: string | null; + }; + edges: Array<{ + node: { + name: string; + type: NodeType; + currentVersion: string; + editedBy: Array; + tags: Array<{ name: string; tagType: string }>; + current: { + displayName?: string | null; + status: NodeStatus; + mode?: NodeMode | null; + updatedAt: any; + }; + createdBy: { username: string }; + }; + }>; + }; +}; + +export type GetUpstreamNodesQueryVariables = Exact<{ + nodeNames: Array | Scalars['String']['input']; +}>; + +export type GetUpstreamNodesQuery = { + upstreamNodes: Array<{ name: string; type: NodeType }>; +}; diff --git a/datajunction-ui/src/types/openapi.ts b/datajunction-ui/src/types/openapi.ts new file mode 100644 index 000000000..e58e37ee4 --- /dev/null +++ b/datajunction-ui/src/types/openapi.ts @@ -0,0 +1,12929 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + '/catalogs': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Catalogs + * @description List all available catalogs + */ + get: operations['list_catalogs_catalogs_get']; + put?: never; + /** + * Add A Catalog + * @description Add a Catalog + */ + post: operations['Add_A_Catalog_catalogs_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/catalogs/{name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get A Catalog + * @description Return a catalog by name + */ + get: operations['Get_a_Catalog_catalogs__name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/catalogs/{name}/engines': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Engines To A Catalog + * @description Attach one or more engines to a catalog + */ + post: operations['Add_Engines_to_a_Catalog_catalogs__name__engines_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/collections': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Collections + * @description List all collections + */ + get: operations['list_collections_collections_get']; + put?: never; + /** + * Create A Collection + * @description Create a Collection + */ + post: operations['create_a_collection_collections_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/collections/{name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Collection + * @description Get a collection and its nodes + */ + get: operations['get_collection_collections__name__get']; + put?: never; + post?: never; + /** + * Delete A Collection + * @description Delete a collection + */ + delete: operations['delete_a_collection_collections__name__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/collections/{name}/nodes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Nodes To A Collection + * @description Add one or more nodes to a collection + */ + post: operations['Add_Nodes_to_a_Collection_collections__name__nodes_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/collections/{name}/remove': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Delete Nodes From A Collection + * @description Delete one or more nodes from a collection + */ + post: operations['Delete_Nodes_from_a_Collection_collections__name__remove_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/deployments': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List Deployments */ + get: operations['list_deployments_deployments_get']; + put?: never; + /** + * Creates A Bulk Deployment + * @description This endpoint takes a deployment specification (namespace, nodes, tags), topologically + * sorts and validates the deployable objects, and deploys the nodes in parallel where + * possible. It returns a summary of the deployment. + */ + post: operations['Creates_a_bulk_deployment_deployments_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/deployments/{deployment_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Deployment Status */ + get: operations['get_deployment_status_deployments__deployment_id__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/deployments/impact': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Preview Deployment Impact + * @description Analyze the impact of a deployment WITHOUT actually deploying. + * + * This endpoint takes a deployment specification and returns: + * - Direct changes: What nodes will be created, updated, deleted, or skipped + * - Downstream impacts: What existing nodes will be affected by these changes + * - Warnings: Potential issues like breaking column changes or external impacts + * + * Use this endpoint to preview changes before deploying, similar to a dry-run + * but with more detailed impact analysis including second and third-order effects. + */ + post: operations['Preview_deployment_impact_deployments_impact_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/dialects': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Dialects + * @description Returns a list of registered SQL dialects and their associated transpilation plugin class names. + */ + get: operations['list_dialects_dialects_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/engines': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Engines + * @description List all available engines + */ + get: operations['list_engines_engines_get']; + put?: never; + /** + * Add An Engine + * @description Add a new engine + */ + post: operations['Add_An_Engine_engines_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/engines/{name}/{version}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get An Engine + * @description Return an engine by name and version + */ + get: operations['get_an_engine_engines__name___version__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/metrics': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Metrics + * @description List all available metrics. + */ + get: operations['list_metrics_metrics_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/metrics/metadata': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Metric Metadata + * @description Return available metric metadata attributes + */ + get: operations['list_metric_metadata_metrics_metadata_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/metrics/{name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get A Metric + * @description Return a metric by name. + */ + get: operations['get_a_metric_metrics__name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/metrics/common/dimensions': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Common Dimensions + * @description Return common dimensions for a set of metrics. + */ + get: operations['get_common_dimensions_metrics_common_dimensions_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/djsql/data': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Data For Djsql + * @description Return data for a DJ SQL query + */ + get: operations['get_data_for_djsql_djsql_data_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/djsql/stream': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Data Stream For Djsql + * @description Return data for a DJ SQL query using server side events + */ + get: operations['get_data_stream_for_djsql_djsql_stream_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/validate': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Validate Node + * @description Determines whether the provided node is valid and returns metadata from node validation. + */ + post: operations['validate_node_nodes_validate_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}/validate': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Revalidate + * @description Revalidate a single existing node and update its status appropriately + */ + post: operations['revalidate_nodes__name__validate_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{node_name}/columns/{column_name}/attributes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Set Column Attributes + * @description Set column attributes for the node. + */ + post: operations['set_column_attributes_nodes__node_name__columns__column_name__attributes_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Nodes + * @description List the available nodes. + */ + get: operations['list_nodes_nodes_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/details': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List All Nodes With Details + * @description List the available nodes. + */ + get: operations['list_all_nodes_with_details_nodes_details_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Node + * @description Show the active version of the specified node. + */ + get: operations['get_node_nodes__name__get']; + put?: never; + post?: never; + /** + * Delete Node + * @description Delete (aka deactivate) the specified node. + */ + delete: operations['delete_node_nodes__name__delete']; + options?: never; + head?: never; + /** + * Update Node + * @description Update a node. + */ + patch: operations['update_node_nodes__name__patch']; + trace?: never; + }; + '/nodes/{name}/hard': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Hard Delete A Dj Node + * @description Hard delete a node, destroying all links and invalidating all downstream nodes. + * This should be used with caution, deactivating a node is preferred. + */ + delete: operations['Hard_Delete_a_DJ_Node_nodes__name__hard_delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}/restore': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Restore Node + * @description Restore (aka re-activate) the specified node. + */ + post: operations['restore_node_nodes__name__restore_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}/revisions': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Node Revisions + * @description List all revisions for the node. + */ + get: operations['list_node_revisions_nodes__name__revisions_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/source': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create A Source Node + * @description Create a source node. If columns are not provided, the source node's schema + * will be inferred using the configured query service. + */ + post: operations['Create_A_Source_Node_nodes_source_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/metric': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create A Metric Node + * @description Create a node. + */ + post: operations['Create_A_Metric_Node_nodes_metric_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/dimension': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create A Dimension Node + * @description Create a node. + */ + post: operations['Create_A_Dimension_Node_nodes_dimension_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/transform': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create A Transform Node + * @description Create a node. + */ + post: operations['Create_A_Transform_Node_nodes_transform_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/cube': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create A Cube + * @description Create a cube node. + */ + post: operations['Create_A_Cube_nodes_cube_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/register/table/{catalog}/{schema_}/{table}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Register Table + * @description Register a table. This creates a source node in the SOURCE_NODE_NAMESPACE and + * the source node's schema will be inferred using the configured query service. + */ + post: operations['register_table_register_table__catalog___schema____table__post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/register/view/{catalog}/{schema_}/{view}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Register View + * @description Register a view by creating the view in the database and adding a source node for it. + * The source node is created in the SOURCE_NODE_NAMESPACE and + * its schema will be inferred using the configured query service. + */ + post: operations['register_view_register_view__catalog___schema____view__post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}/columns/{column}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Link Dimension + * @description Add a simple dimension link from a node column to a dimension node. + * 1. If a specific `dimension_column` is provided, it will be used as join column for the link. + * 2. If no `dimension_column` is provided, the primary key column of the dimension node will + * be used as the join column for the link. + */ + post: operations['link_dimension_nodes__name__columns__column__post']; + /** + * Delete Dimension Link + * @description Remove the link between a node column and a dimension node + */ + delete: operations['delete_dimension_link_nodes__name__columns__column__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{node_name}/columns/{node_column}/link': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Reference Dimension Link + * @description Add reference dimension link to a node column + */ + post: operations['add_reference_dimension_link_nodes__node_name__columns__node_column__link_post']; + /** + * Remove Reference Dimension Link + * @description Remove reference dimension link from a node column + */ + delete: operations['remove_reference_dimension_link_nodes__node_name__columns__node_column__link_delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{node_name}/link': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Complex Dimension Link + * @description Links a source, dimension, or transform node to a dimension with a custom join query. + * If a link already exists, updates the link definition. + */ + post: operations['add_complex_dimension_link_nodes__node_name__link_post']; + /** + * Remove Complex Dimension Link + * @description Removes a complex dimension link based on the dimension node and its role (if any). + */ + delete: operations['remove_complex_dimension_link_nodes__node_name__link_delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}/tags': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Update Tags On Node + * @description Add a tag to a node + */ + post: operations['Update_Tags_on_Node_nodes__name__tags_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}/refresh': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Refresh Source Node + * @description Refresh a source node with the latest columns from the query service. + */ + post: operations['refresh_source_node_nodes__name__refresh_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/similarity/{node1_name}/{node2_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Calculate Node Similarity + * @description Compare two nodes by how similar their queries are + */ + get: operations['calculate_node_similarity_nodes_similarity__node1_name___node2_name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}/downstream': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Downstream Nodes For A Node + * @description List all nodes that are downstream from the given node, filterable by type and max depth. + * Setting a max depth of -1 will include all downstream nodes. + */ + get: operations['List_Downstream_Nodes_For_A_Node_nodes__name__downstream_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}/upstream': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Upstream Nodes For A Node + * @description List all nodes that are upstream from the given node, filterable by type. + */ + get: operations['List_Upstream_Nodes_For_A_Node_nodes__name__upstream_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}/dag': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List All Connected Nodes (Upstreams + Downstreams) + * @description List all nodes that are part of the DAG of the given node. This means getting all upstreams, + * downstreams, and linked dimension nodes. + */ + get: operations['List_All_Connected_Nodes__Upstreams___Downstreams__nodes__name__dag_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}/dimensions': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List All Dimension Attributes + * @description List all available dimension attributes for the given node. + */ + get: operations['List_All_Dimension_Attributes_nodes__name__dimensions_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{name}/lineage': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Column Level Lineage Of Node + * @description List column-level lineage of a node in a graph + */ + get: operations['List_column_level_lineage_of_node_nodes__name__lineage_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{node_name}/columns/{column_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Set Column Display Name + * @description Set column name for the node + */ + patch: operations['set_column_display_name_nodes__node_name__columns__column_name__patch']; + trace?: never; + }; + '/nodes/{node_name}/columns/{column_name}/description': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Set Column Description + * @description Set column description for the node + */ + patch: operations['set_column_description_nodes__node_name__columns__column_name__description_patch']; + trace?: never; + }; + '/nodes/{node_name}/columns/{column_name}/partition': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Set Node Column As Partition + * @description Add or update partition columns for the specified node. + */ + post: operations['Set_Node_Column_as_Partition_nodes__node_name__columns__column_name__partition_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{node_name}/copy': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Copy A Node + * @description Copy this node to a new name. + */ + post: operations['Copy_A_Node_nodes__node_name__copy_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/namespaces/{namespace}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Nodes In Namespace + * @description List node names in namespace, filterable to a given type if desired. + */ + get: operations['list_nodes_in_namespace_namespaces__namespace__get']; + put?: never; + /** + * Create Node Namespace + * @description Create a node namespace + */ + post: operations['create_node_namespace_namespaces__namespace__post']; + /** + * Deactivate A Namespace + * @description Deactivates a node namespace + */ + delete: operations['deactivate_a_namespace_namespaces__namespace__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/namespaces': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Namespaces + * @description List namespaces with the number of nodes contained in them + */ + get: operations['list_namespaces_namespaces_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/namespaces/{namespace}/restore': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Restore A Namespace + * @description Restores a node namespace + */ + post: operations['restore_a_namespace_namespaces__namespace__restore_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/namespaces/{namespace}/hard': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Hard Delete A Dj Namespace + * @description Hard delete a namespace, which will completely remove the namespace. Additionally, + * if any nodes are saved under this namespace, we'll hard delete the nodes if cascade + * is set to true. If cascade is set to false, we'll raise an error. This should be used + * with caution, as the impact may be large. + */ + delete: operations['Hard_Delete_a_DJ_Namespace_namespaces__namespace__hard_delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/namespaces/{namespace}/export': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Export A Namespace As A Single Project'S Metadata + * @description Generates a zip of YAML files for the contents of the given namespace + * as well as a project definition file. + */ + get: operations['Export_a_namespace_as_a_single_project_s_metadata_namespaces__namespace__export_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/namespaces/{namespace}/export/spec': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Export Namespace As A Deployment Specification + * @description Generates a deployment spec for a namespace + */ + get: operations['Export_namespace_as_a_deployment_specification_namespaces__namespace__export_spec_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/namespaces/{namespace}/export/yaml': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Export Namespace As Downloadable Yaml Zip + * @description Export a namespace as a downloadable ZIP file containing YAML files. + * + * The ZIP structure matches the expected layout for `dj push`: + * - dj.yaml (project manifest) + * - /.yaml (one file per node) + * + * This makes it easy to start managing nodes via Git/CI-CD. + */ + get: operations['Export_namespace_as_downloadable_YAML_ZIP_namespaces__namespace__export_yaml_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/namespaces/{namespace}/sources': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Deployment Sources For A Namespace + * @description Get all deployment sources that have deployed to this namespace. + * + * This helps teams understand: + * - Whether a namespace is managed by CI/CD + * - Which repositories have deployed to this namespace + * - If there are multiple sources (potential conflict indicator) + */ + get: operations['Get_deployment_sources_for_a_namespace_namespaces__namespace__sources_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/namespaces/sources/bulk': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Get Deployment Sources For Multiple Namespaces + * @description Get deployment sources for multiple namespaces in a single request. + * + * This is useful for displaying CI/CD badges in the UI for all visible namespaces. + * Returns a map of namespace name -> source info for each requested namespace. + */ + post: operations['Get_deployment_sources_for_multiple_namespaces_namespaces_sources_bulk_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/materialization/info': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Materialization Jobs Info + * @description Materialization job types and strategies + */ + get: operations['Materialization_Jobs_Info_materialization_info_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{node_name}/materialization': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Insert Or Update A Materialization For A Node + * @description Add or update a materialization of the specified node. If a node_name is specified + * for the materialization config, it will always update that named config. + */ + post: operations['Insert_or_Update_a_Materialization_for_a_Node_nodes__node_name__materialization_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{node_name}/materializations': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Materializations For A Node + * @description Show all materializations configured for the node, with any associated metadata + * like urls from the materialization service, if available. + * + * show_inactive: bool - Show materializations that have a deactivated_at timestamp set + * include_all_revisions: bool - Show materializations for all revisions of the node + */ + get: operations['List_Materializations_for_a_Node_nodes__node_name__materializations_get']; + put?: never; + post?: never; + /** + * Deactivate A Materialization For A Node + * @description Deactivate the node materialization with the provided name. + * Also calls the query service to deactivate the associated scheduled jobs. + * + * If node_version not provided, it will deactivate the materialization + * for the current version of the node. + */ + delete: operations['Deactivate_a_Materialization_for_a_Node_nodes__node_name__materializations_delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{node_name}/materializations/{materialization_name}/backfill': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Kick Off A Backfill Run For A Configured Materialization + * @description Start a backfill for a configured materialization. + */ + post: operations['Kick_off_a_backfill_run_for_a_configured_materialization_nodes__node_name__materializations__materialization_name__backfill_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{node_name}/availability': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List All Availability States For A Node + * @description Retrieve all availability states for a given node across all revisions. + */ + get: operations['List_All_Availability_States_for_a_Node_nodes__node_name__availability_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/measures': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Measures + * @description List all measures. + */ + get: operations['list_measures_measures_get']; + put?: never; + /** + * Add A Measure + * @description Add a measure + */ + post: operations['Add_a_Measure_measures_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/measures/{measure_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Measure + * @description Get info on a measure. + */ + get: operations['get_measure_measures__measure_name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Edit A Measure + * @description Edit a measure + */ + patch: operations['Edit_a_Measure_measures__measure_name__patch']; + trace?: never; + }; + '/frozen-measures': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Frozen Measures + * @description List all frozen measures, with optional filters: + * - prefix: only measures whose names start with this prefix + * - aggregation: filter by aggregation type (e.g., SUM, COUNT) + * - upstream_name: filter by the upstream node revision's name + * - upstream_version: filter by the upstream node revision's version + */ + get: operations['list_frozen_measures_frozen_measures_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/data/{node_name}/availability': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add Availability State To Node + * @description Add an availability state to a node. + */ + post: operations['Add_Availability_State_to_Node_data__node_name__availability_post']; + /** + * Remove Availability State From Node + * @description Remove an availability state from a node. + */ + delete: operations['Remove_Availability_State_from_Node_data__node_name__availability_delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/data/{node_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Data For A Node + * @description Gets data for a node + */ + get: operations['Get_Data_for_a_Node_data__node_name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/stream/{node_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Data Stream For Node + * @description Return data for a node using server side events + */ + get: operations['get_data_stream_for_node_stream__node_name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/data/query/{query_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Data For Query Id + * @description Return data for a specific query ID. + */ + get: operations['Get_Data_For_Query_ID_data_query__query_id__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/data': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Data For Metrics + * @description Return data for a set of metrics with dimensions and filters + */ + get: operations['Get_Data_For_Metrics_data_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/stream': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Data Stream For Metrics + * @description Return data for a set of metrics with dimensions and filters using server sent events + */ + get: operations['get_data_stream_for_metrics_stream_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/health/': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Health Check + * @description Healthcheck for services. + */ + get: operations['health_check_health__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/history/{entity_type}/{entity_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List History + * @description List history for an entity type (i.e. Node) and entity name + */ + get: operations['list_history_history__entity_type___entity_name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/history': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List History By Node Context + * @description List all activity history for a node context + */ + get: operations['list_history_by_node_context_history_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/cubes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get All Cubes + * @description Get information on all cubes + */ + get: operations['Get_all_Cubes_cubes_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/cubes/{name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get A Cube + * @description Get information on a cube + */ + get: operations['Get_a_Cube_cubes__name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/cubes/{name}/versions/{version}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get A Cube Revision + * @description Get information on a specific cube revision + */ + get: operations['Get_a_Cube_Revision_cubes__name__versions__version__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/cubes/{name}/materialization': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Cube Materialization Config + * @description The standard cube materialization config. DJ makes sensible materialization choices + * where possible. + * + * Requirements: + * - The cube must have a temporal partition column specified. + * - The job strategy will always be "incremental time". + * + * Outputs: + * "measures_materializations": + * We group the metrics by parent node. Then we try to pre-aggregate each parent node as + * much as possible to prepare for metric queries on the cube's dimensions. + * "combiners": + * We combine each set of measures materializations on their shared grain. Note that we don't + * support materializing cubes with measures materializations that don't share the same grain. + * However, we keep `combiners` as a list in the eventual future where we support that. + * "metrics": + * We include a list of metrics, their required measures, and the derived expression (e.g., the + * expression used by the metric that makes use of the pre-aggregated measures) + * + * Once we create a scheduled materialization workflow, we freeze the metadata for that particular + * materialized dataset. This allows us to reconstruct metrics SQL from the dataset when needed. + * To request metrics from the materialized cube, use the metrics' measures metadata. + */ + get: operations['Cube_Materialization_Config_cubes__name__materialization_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/cubes/{name}/dimensions/sql': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Dimensions Sql For Cube + * @description Generates SQL to retrieve all unique values of a dimension for the cube + */ + get: operations['Dimensions_SQL_for_Cube_cubes__name__dimensions_sql_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/cubes/{name}/dimensions/data': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Dimensions Values For Cube + * @description All unique values of a dimension from the cube + */ + get: operations['Dimensions_Values_for_Cube_cubes__name__dimensions_data_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/cubes/{name}/materialize': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Materialize Cube To Druid + * @description Create a Druid cube materialization workflow. + * + * This endpoint generates all the information needed for a Druid cube workflow: + * + * 1. **Pre-agg table dependencies**: The Druid workflow should wait (via VTTS) + * for these tables to be available before starting ingestion. + * + * 2. **Combined SQL**: SQL that reads from the pre-agg tables with re-aggregation, + * combining multiple grain groups via FULL OUTER JOIN. + * + * 3. **Druid spec**: Ingestion specification for Druid. + * + * The typical flow is: + * - Pre-agg workflows write to: `{preagg_catalog}.{preagg_schema}.{node}_preagg_{hash}` + * - Druid workflow waits on those tables' VTTS + * - Once available, Druid workflow runs the combined SQL and ingests to Druid + * + * Args: + * name: Cube name + * data: Materialization configuration (schedule, strategy, etc.) + * + * Returns: + * CubeMaterializeResponse with pre-agg dependencies, combined SQL, and Druid spec. + */ + post: operations['Materialize_Cube_to_Druid_cubes__name__materialize_post']; + /** + * Deactivate Cube Materialization + * @description Deactivate (remove) the Druid cube materialization for this cube. + * + * This will: + * 1. Remove the materialization record from the cube + * 2. Optionally deactivate the workflow in the query service (if supported) + */ + delete: operations['Deactivate_Cube_Materialization_cubes__name__materialize_delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/cubes/{name}/backfill': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Run Cube Backfill + * @description Run a backfill for the cube over the specified date range. + * + * This triggers the cube's backfill workflow with the given start_date + * and end_date. The workflow iterates through each date partition + * and re-runs the cube materialization for that date. + * + * Prerequisites: + * - Cube materialization must be scheduled (via POST /cubes/{name}/materialize) + */ + post: operations['Run_Cube_Backfill_cubes__name__backfill_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/tags': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Tags + * @description List all available tags. + */ + get: operations['list_tags_tags_get']; + put?: never; + /** + * Create A Tag + * @description Create a tag. + */ + post: operations['create_a_tag_tags_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/tags/{name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get A Tag + * @description Return a tag by name. + */ + get: operations['get_a_tag_tags__name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update A Tag + * @description Update a tag. + */ + patch: operations['update_a_tag_tags__name__patch']; + trace?: never; + }; + '/tags/{name}/nodes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Nodes For A Tag + * @description Find nodes tagged with the tag, filterable by node type. + */ + get: operations['list_nodes_for_a_tag_tags__name__nodes_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/attributes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Attributes + * @description List all available attribute types. + */ + get: operations['list_attributes_attributes_get']; + put?: never; + /** + * Add An Attribute Type + * @description Add a new attribute type + */ + post: operations['Add_an_Attribute_Type_attributes_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/sql/measures/v2': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Measures Sql + * @description Return measures SQL for a set of metrics with dimensions and filters. + * + * The measures query can be used to produce intermediate table(s) with all the measures + * and dimensions needed prior to applying specific metric aggregations. + * + * This endpoint returns one SQL query per upstream node of the requested metrics. + * For example, if some of your metrics are aggregations on measures in parent node A + * and others are aggregations on measures in parent node B, this endpoint will generate + * two measures queries, one for A and one for B. + */ + get: operations['Get_Measures_SQL_sql_measures_v2_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/sql/{node_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Sql For A Node + * @description Return SQL for a node. + */ + get: operations['Get_SQL_For_A_Node_sql__node_name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/sql/measures/v3': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Measures Sql V3 + * @description Generate pre-aggregated measures SQL for the requested metrics. + * + * Measures SQL represents the first stage of metric computation - it decomposes + * each metric into its atomic aggregation components (e.g., SUM(amount), COUNT(*)) + * and produces SQL that computes these components at the requested dimensional grain. + * + * Metrics are separated into grain groups, which represent sets of metrics that can be + * computed together at a common grain. Each grain group produces its own SQL query, which + * can be materialized independently to produce intermediate tables that are then queried + * to compute final metric values. + * + * Returns: + * One or more `GrainGroupSQL` objects, each containing: + * - SQL query computing metric components at the specified grain + * - Column metadata with semantic types + * - Component details for downstream re-aggregation + * + * Args: + * use_materialized: If True (default), use materialized tables when available. + * Set to False when generating SQL for materialization refresh to avoid + * circular references. + * + * See also: `/sql/metrics/v3/` for the final combined query with metric expressions. + */ + get: operations['Get_Measures_SQL_V3_sql_measures_v3_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/sql/measures/v3/combined': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Combined Measures Sql V3 + * @description Generate combined pre-aggregated measures SQL for the requested metrics. + * + * This endpoint combines multiple grain groups into a single SQL query using + * FULL OUTER JOIN on shared dimensions. Dimension columns are wrapped with + * COALESCE to handle NULLs from non-matching rows. + * + * This is useful for: + * - Druid cube materialization where a single combined table is needed + * - Simplifying downstream queries that need data from multiple fact tables + * - Pre-computing joined aggregations for dashboards + * + * The combined SQL contains: + * - CTEs for each grain group's pre-aggregated data + * - FULL OUTER JOIN between grain groups on shared dimensions + * - COALESCE on dimension columns to handle NULL values + * - All measure columns from all grain groups + * + * Args: + * metrics: List of metric names to include + * dimensions: List of dimensions to group by (the grain) + * filters: Optional filters to apply + * use_preagg_tables: If False (default), compute from scratch using source tables. + * If True, read from pre-aggregation tables. + * + * Returns: + * Combined SQL query with column metadata and grain information. + * + * See also: + * - `/sql/measures/v3/` for individual grain group queries + * - `/sql/metrics/v3/` for final metric computations with combiner expressions + */ + get: operations['Get_Combined_Measures_SQL_V3_sql_measures_v3_combined_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/sql/metrics/v3': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Metrics Sql V3 + * @description Generate final metrics SQL with fully computed metric expressions for the + * requested metrics, dimensions, and filters using the specified dialect. + * + * Metrics SQL is the second (and final) stage of metric computation - it takes + * the pre-aggregated components from Measures SQL and applies combiner expressions + * to produce the actual metric values requested. + * + * - Metric components are re-aggregated as needed to match the requested + * dimensional grain. + * + * - Derived metrics (defined as expressions over other metrics) + * (e.g., `conversion_rate = order_count / visitor_count`) are computed by + * substituting component references with their re-aggregated expressions. + * + * - When metrics come from different fact tables, their + * grain groups are FULL OUTER JOINed on the common dimensions, with COALESCE + * for dimension columns to handle NULLs from non-matching rows. + * + * - Dimension references in metric expressions are resolved to their + * final column aliases. + * + * Args: + * metrics: List of metric names to include + * dimensions: List of dimensions to group by (the grain) + * filters: Optional filters to apply + * dialect: SQL dialect for the generated query + * use_materialized: If True (default), use materialized tables when available. + * Set to False when generating SQL for materialization refresh to avoid + * circular references. + */ + get: operations['Get_Metrics_SQL_V3_sql_metrics_v3_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/sql': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Sql For Metrics + * @description Return SQL for a set of metrics with dimensions and filters + */ + get: operations['Get_SQL_For_Metrics_sql_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/datajunction-clients/python/new_node/{node_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Client Code For Creating Node + * @description Generate the Python client code used for creating this node + */ + get: operations['client_code_for_creating_node_datajunction_clients_python_new_node__node_name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/datajunction-clients/python/dimension_links/{node_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Client Code For Dimension Links On Node + * @description Generate the Python client code used for creating this node + */ + get: operations['client_code_for_dimension_links_on_node_datajunction_clients_python_dimension_links__node_name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/datajunction-clients/python/add_materialization/{node_name}/{materialization_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Client Code For Adding Materialization + * @description Generate the Python client code used for adding this materialization + */ + get: operations['client_code_for_adding_materialization_datajunction_clients_python_add_materialization__node_name___materialization_name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/datajunction-clients/python/notebook': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Notebook For Exporting Nodes + * @description Generate the Python client code used for exporting multiple nodes. There are two options: + * * namespace: If `namespace` is specified, the generated notebook will contain Python client + * code to export all nodes in the namespace. + * * cube: If `cube` is specified, the generated notebook will contain Python client code + * used for exporting a cube, including all metrics and dimensions referenced in the cube. + */ + get: operations['notebook_for_exporting_nodes_datajunction_clients_python_notebook_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/dimensions': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Dimensions + * @description List all available dimensions. + */ + get: operations['list_dimensions_dimensions_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/dimensions/{name}/nodes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Find Nodes With Dimension + * @description List all nodes that have the specified dimension + */ + get: operations['find_nodes_with_dimension_dimensions__name__nodes_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/dimensions/common': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Find Nodes With Common Dimensions + * @description Find all nodes that have the list of common dimensions + */ + get: operations['find_nodes_with_common_dimensions_dimensions_common_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/hierarchies': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List All Hierarchies + * @description List all available hierarchies. + */ + get: operations['list_all_hierarchies_hierarchies_get']; + put?: never; + /** + * Create Hierarchy + * @description Create a new hierarchy definition. + */ + post: operations['create_hierarchy_hierarchies_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/nodes/{dimension}/hierarchies': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Dimension Hierarchies + * @description Get all hierarchies that use a specific dimension node and show navigation options. + * + * This endpoint helps users discover: + * - What hierarchies include this dimension + * - What position the dimension occupies in each hierarchy + * - What other dimensions they can drill up or down to + */ + get: operations['get_dimension_hierarchies_nodes__dimension__hierarchies_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/hierarchies/{name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Hierarchy + * @description Get a specific hierarchy by name. + */ + get: operations['get_hierarchy_hierarchies__name__get']; + /** + * Update Hierarchy + * @description Update a hierarchy. + */ + put: operations['update_hierarchy_hierarchies__name__put']; + post?: never; + /** + * Delete Hierarchy + * @description Delete a hierarchy. + */ + delete: operations['delete_hierarchy_hierarchies__name__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/graphql': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Handle Http Get */ + get: operations['handle_http_get_graphql_get']; + put?: never; + /** Handle Http Post */ + post: operations['handle_http_post_graphql_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/whoami': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Whoami + * @description Returns the current authenticated user + */ + get: operations['whoami_whoami_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/token': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Short Lived Token + * @description Returns a token that expires in 24 hours + */ + get: operations['get_short_lived_token_token_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/users/{username}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Nodes By Username + * @description List all nodes with the specified activity type(s) by the user + */ + get: operations['list_nodes_by_username_users__username__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/users': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Users With Activity + * @description Lists all users. The endpoint will include user activity counts if the + * `with_activity` flag is set to true. + */ + get: operations['list_users_with_activity_users_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/groups': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Groups + * @description List all registered groups. + */ + get: operations['list_groups_groups_get']; + put?: never; + /** + * Register Group + * @description Register a group in DJ. + * + * This makes the group available for assignment as a node owner. + * Group membership can be managed via the membership endpoints (Postgres provider) + * or resolved externally (LDAP, etc.). + * + * Args: + * username: Unique identifier for the group (e.g., 'eng-team') + * email: Optional email for the group + * name: Display name (defaults to username) + */ + post: operations['register_group_groups_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/groups/{group_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Group + * @description Get a group by name. + */ + get: operations['get_group_groups__group_name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/groups/{group_name}/members': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Group Members + * @description List members of a group. + * + * For Postgres provider: queries group_members table. + * For external providers: returns empty (membership resolved externally). + */ + get: operations['list_group_members_groups__group_name__members_get']; + put?: never; + /** + * Add Group Member + * @description Add a member to a group (Postgres provider only). + * + * For external providers, membership is managed externally and this endpoint is disabled. + */ + post: operations['add_group_member_groups__group_name__members_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/groups/{group_name}/members/{member_username}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Remove Group Member + * @description Remove a member from a group (Postgres provider only). + */ + delete: operations['remove_group_member_groups__group_name__members__member_username__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/roles': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Roles + * @description List all roles with their scopes. + * + * By default, excludes soft-deleted roles. Set include_deleted=true to see all. + */ + get: operations['list_roles_roles_get']; + put?: never; + /** + * Create Role + * @description Create a new role with optional scopes. + * + * Roles are named collections of permissions that can be assigned to principals. + */ + post: operations['create_role_roles_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/roles/{role_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Role + * @description Get a specific role with its scopes. + * + * By default, returns 404 for deleted roles. Set include_deleted=true to see deleted roles. + */ + get: operations['get_role_roles__role_name__get']; + put?: never; + post?: never; + /** + * Delete Role + * @description Soft delete a role. + * + * Roles that have ever been assigned cannot be deleted (for SOX compliance). + * This ensures a complete audit trail. Instead, roles are marked as deleted + * and hidden from normal queries. + */ + delete: operations['delete_role_roles__role_name__delete']; + options?: never; + head?: never; + /** + * Update Role + * @description Update a role's name or description. + * + * Note: Use /roles/{role_name}/scopes/ endpoints to manage scopes. + */ + patch: operations['update_role_roles__role_name__patch']; + trace?: never; + }; + '/roles/{role_name}/scopes': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Role Scopes + * @description List all scopes for a role. + */ + get: operations['list_role_scopes_roles__role_name__scopes_get']; + put?: never; + /** + * Add Scope To Role + * @description Add a scope (permission) to a role. + */ + post: operations['add_scope_to_role_roles__role_name__scopes_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/roles/{role_name}/scopes/{action}/{scope_type}/{scope_value}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete Scope From Role + * @description Remove a scope from a role using its composite key. + * + * Example: DELETE /roles/finance-editor/scopes/read/namespace/finance.* + */ + delete: operations['delete_scope_from_role_roles__role_name__scopes__action___scope_type___scope_value__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/roles/{role_name}/assign': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Assign Role To Principal + * @description Assign a role to a principal (user, service account, or group). + * + * Example: POST /roles/finance-editor/assign + * Body: {"principal_username": "alice"} + */ + post: operations['assign_role_to_principal_roles__role_name__assign_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/roles/{role_name}/assignments': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Role Assignments + * @description List all principals who have this role. + * + * Example: GET /roles/finance-editor/assignments + */ + get: operations['list_role_assignments_roles__role_name__assignments_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/roles/{role_name}/assignments/{principal_username}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Revoke Role From Principal + * @description Revoke a role from a principal. + * + * Example: DELETE /roles/finance-editor/assignments/alice + * + * This removes the role from the principal but preserves the audit trail in History. + */ + delete: operations['revoke_role_from_principal_roles__role_name__assignments__principal_username__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/basic/user/': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create A User + * @description Create a new user + */ + post: operations['create_a_user_basic_user__post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/basic/login/': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Login + * @description Get a JWT token and set it as an HTTP only cookie + */ + post: operations['login_basic_login__post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/logout/': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Logout + * @description Logout a user by deleting the auth cookie + */ + post: operations['logout_logout__post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/notifications/subscribe': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Subscribe + * @description Subscribes to notifications by upserting a notification preference. + * If one exists, update it. Otherwise, create a new one. + */ + post: operations['subscribe_notifications_subscribe_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/notifications/unsubscribe': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Unsubscribe + * @description Unsubscribes from notifications by deleting a notification preference + */ + delete: operations['unsubscribe_notifications_unsubscribe_delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/notifications': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Preferences + * @description Gets notification preferences for the current user + */ + get: operations['get_preferences_notifications_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/notifications/users': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Users For Notification + * @description Get users for the given notification preference + */ + get: operations['get_users_for_notification_notifications_users_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/notifications/mark-read': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Mark Notifications Read + * @description Mark all notifications as read by updating the user's + * last_viewed_notifications_at timestamp to now. + */ + post: operations['mark_notifications_read_notifications_mark_read_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/preaggs': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Pre-Aggregations + * @description List pre-aggregations with optional filters. + * + * Filter options: + * - node_name: Filter by the source node name + * - node_version: Filter by node version (if omitted, uses latest version) + * - grain: Comma-separated grain columns to match + * - grain_mode: 'exact' (default) requires exact match, 'superset' finds pre-aggs + * that contain all requested columns (and possibly more - finer grain) + * - grain_group_hash: Direct lookup by grain group hash + * - measures: Comma-separated measures - pre-agg must contain ALL specified + * - status: Filter by 'pending' (no availability) or 'active' (has availability) + */ + get: operations['List_Pre_aggregations_preaggs_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/preaggs/{preagg_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Pre-Aggregation By Id + * @description Get a single pre-aggregation by its ID. + * + * The response includes the SQL needed for materialization. + */ + get: operations['Get_Pre_aggregation_by_ID_preaggs__preagg_id__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/preaggs/plan': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Plan Pre-Aggregations + * @description Create pre-aggregations from metrics + dimensions. + * + * This is the primary way to create pre-aggregations. DJ: + * 1. Computes grain groups from the metrics/dimensions (same as /sql/measures/v3) + * 2. Generates SQL for each grain group + * 3. Creates PreAggregation records (or returns existing ones if they match) + * 4. Returns the pre-aggs with their IDs and SQL + * + * After calling this endpoint: + * - Flow A: Call POST /preaggs/{id}/materialize to have DJ materialize + * - Flow B: Use the returned SQL to materialize yourself, then call + * POST /preaggs/{id}/availability/ to report completion + */ + post: operations['Plan_Pre_aggregations_preaggs_plan_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/preaggs/{preagg_id}/materialize': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Materialize Pre-Aggregation + * @description Create/update a scheduled workflow for this pre-aggregation. + * + * This creates a recurring workflow that materializes the pre-agg on schedule. + * Call this endpoint to: + * - Initially set up materialization for a pre-agg + * - Refresh/recreate the workflow after config changes + * + * The workflow runs on the configured schedule (default: daily at midnight). + * The query service will callback to POST /preaggs/{id}/availability/ when + * each run completes. + * + * For user-managed materialization, use the SQL from GET /preaggs/{id} + * and call POST /preaggs/{id}/availability/ when done. + */ + post: operations['Materialize_Pre_aggregation_preaggs__preagg_id__materialize_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/preaggs/{preagg_id}/config': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update Pre-Aggregation Config + * @description Update the materialization configuration of a single pre-aggregation. + * + * Use this endpoint to configure individual pre-aggs with different + * strategies, schedules, or lookback windows. + */ + patch: operations['Update_Pre_aggregation_Config_preaggs__preagg_id__config_patch']; + trace?: never; + }; + '/preaggs/{preagg_id}/workflow': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Deactivate Scheduled Workflow + * @description Deactivate (pause) the scheduled workflow for this pre-aggregation. + * + * The workflow definition is kept but will not run on schedule. + * Call POST /preaggs/{id}/materialize to re-activate. + */ + delete: operations['Deactivate_Scheduled_Workflow_preaggs__preagg_id__workflow_delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/preaggs/workflows': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Bulk Deactivate Workflows + * @description Bulk deactivate workflows for pre-aggregations of a node. + * + * This is useful for cleaning up stale pre-aggregations after a node + * has been updated. When stale_only=true, only deactivates workflows + * for pre-aggs that were built for older node versions. + * + * Staleness is determined by comparing the pre-agg's node_revision_id + * to the node's current revision. + */ + delete: operations['Bulk_Deactivate_Workflows_preaggs_workflows_delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/preaggs/{preagg_id}/backfill': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Run Backfill + * @description Run a backfill for the specified date range. + * + * This triggers a one-time job to process historical data from start_date + * to end_date. The workflow must already exist (created via POST /workflow). + * + * Use this to: + * - Initially populate a new pre-aggregation + * - Re-process data after a bug fix + * - Catch up on missed partitions + */ + post: operations['Run_Backfill_preaggs__preagg_id__backfill_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/preaggs/{preagg_id}/availability': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Update Pre-Aggregation Availability + * @description Update the availability state of a pre-aggregation (Flow B). + * + * Call this endpoint after your query service has materialized the data. + * The availability state includes: + * - catalog/schema/table: Where the materialized data lives + * - valid_through_ts: Timestamp through which data is valid + * - min/max_temporal_partition: Temporal partition range (high-water mark) + * - partitions: Detailed partition-level availability + * + * This is the callback endpoint for external query services to report + * materialization status back to DJ. + */ + post: operations['Update_Pre_aggregation_Availability_preaggs__preagg_id__availability_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/service-accounts': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List Service Accounts + * @description List service accounts for the current user + */ + get: operations['list_service_accounts_service_accounts_get']; + put?: never; + /** + * Create Service Account + * @description Create a new service account + */ + post: operations['create_service_account_service_accounts_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/service-accounts/{client_id}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete Service Account + * @description Delete a service account + */ + delete: operations['delete_service_account_service_accounts__client_id__delete']; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/service-accounts/token': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Service Account Token + * @description Get an authentication token for a service account + */ + post: operations['service_account_token_service_accounts_token_post']; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/system/metrics': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List System Metrics + * @description Returns a list of DJ system metrics (available as metric nodes in DJ). + */ + get: operations['list_system_metrics_system_metrics_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/system/data/{metric_name}': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Data For System Metric + * @description This is not a generic data for metrics endpoint, but rather a specific endpoint for + * system overview metrics that are automatically defined by DJ, such as the number of nodes. + * This endpoint will return data for any system metric, cut by their available dimensions + * and filters. + * + * This setup circumvents going to the query service to get metric data, since all system + * metrics can be computed directly from the database. + * + * For a list of available system metrics, see the `/system/metrics` endpoint. All dimensions + * for the metric can be discovered through the usual endpoints. + */ + get: operations['get_data_for_system_metric_system_data__metric_name__get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + '/system/dimensions': { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Dimensions Stats + * @description List dimensions statistics, including the indegree of the dimension in the DAG + * and the number of cubes that use the dimension. + */ + get: operations['get_dimensions_stats_system_dimensions_get']; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + /** + * ActivityType + * @description An activity type + * @enum {string} + */ + ActivityType: + | 'create' + | 'delete' + | 'restore' + | 'update' + | 'refresh' + | 'tag' + | 'set_attribute' + | 'status_change'; + /** + * Aggregability + * @description Type of allowed aggregation for a given metric component. + * @enum {string} + */ + Aggregability: 'full' | 'limited' | 'none'; + /** + * AggregationRule + * @description Type of allowed aggregation for a given measure. + * @enum {string} + */ + AggregationRule: 'additive' | 'non-additive' | 'semi-additive'; + /** + * AggregationRule + * @description Type of allowed aggregation for a given measure. + * @enum {string} + */ + 'AggregationRule-Input': 'additive' | 'non-additive' | 'semi-additive'; + /** + * AttributeOutput + * @description Column attribute output. + */ + AttributeOutput: { + attribute_type: components['schemas']['AttributeTypeName']; + }; + /** + * AttributeTypeBase + * @description Base attribute type. + */ + AttributeTypeBase: { + /** + * Namespace + * @default system + */ + namespace: string; + /** Name */ + name: string; + /** Description */ + description: string; + /** Allowed Node Types */ + allowed_node_types: components['schemas']['NodeType'][]; + /** Uniqueness Scope */ + uniqueness_scope?: components['schemas']['UniquenessScope'][] | null; + /** Id */ + id: number; + }; + /** + * AttributeTypeIdentifier + * @description Fields that can be used to identify an attribute type. + */ + AttributeTypeIdentifier: { + /** + * Namespace + * @default system + */ + namespace: string; + /** Name */ + name: string; + }; + /** + * AttributeTypeName + * @description Attribute type name. + */ + AttributeTypeName: { + /** Namespace */ + namespace: string; + /** Name */ + name: string; + }; + /** + * AvailabilityStateBase + * @description An availability state base + */ + AvailabilityStateBase: { + /** Min Temporal Partition */ + min_temporal_partition?: (string | number)[] | null; + /** Max Temporal Partition */ + max_temporal_partition?: (string | number)[] | null; + /** Catalog */ + catalog: string; + /** Schema */ + schema_?: string | null; + /** Table */ + table: string; + /** Valid Through Ts */ + valid_through_ts: number; + /** Url */ + url?: string | null; + /** Links */ + links?: Record | null; + /** Categorical Partitions */ + categorical_partitions?: string[] | null; + /** Temporal Partitions */ + temporal_partitions?: string[] | null; + /** Partitions */ + partitions?: components['schemas']['PartitionAvailability'][] | null; + }; + /** + * AvailabilityStateInfo + * @description Availability state information for a node + */ + AvailabilityStateInfo: { + /** Min Temporal Partition */ + min_temporal_partition?: (string | number)[] | null; + /** Max Temporal Partition */ + max_temporal_partition?: (string | number)[] | null; + /** Catalog */ + catalog: string; + /** Schema */ + schema_?: string | null; + /** Table */ + table: string; + /** Valid Through Ts */ + valid_through_ts: number; + /** Url */ + url?: string | null; + /** Links */ + links?: Record | null; + /** Categorical Partitions */ + categorical_partitions?: string[] | null; + /** Temporal Partitions */ + temporal_partitions?: string[] | null; + /** Partitions */ + partitions?: components['schemas']['PartitionAvailability'][] | null; + /** Id */ + id: number; + /** Updated At */ + updated_at: string; + /** Node Revision Id */ + node_revision_id: number; + /** Node Version */ + node_version: string; + }; + /** + * BackfillOutput + * @description Output model for backfills + */ + BackfillOutput: { + /** Spec */ + spec?: components['schemas']['PartitionBackfill'][] | null; + /** Urls */ + urls?: string[] | null; + }; + /** + * BackfillRequest + * @description Request model for running a backfill. + */ + BackfillRequest: { + /** + * Start Date + * Format: date + * @description Start date for backfill (inclusive) + */ + start_date: string; + /** + * End Date + * @description End date for backfill (inclusive). Defaults to today. + */ + end_date?: string | null; + }; + /** + * BackfillResponse + * @description Response model for backfill operation. + */ + BackfillResponse: { + /** + * Job Url + * @description URL to the backfill job + */ + job_url: string; + /** + * Start Date + * Format: date + * @description Start date of the backfill + */ + start_date: string; + /** + * End Date + * Format: date + * @description End date of the backfill + */ + end_date: string; + /** + * Status + * @description Job status + * @default running + */ + status: string; + }; + /** Body_create_a_user_basic_user__post */ + Body_create_a_user_basic_user__post: { + /** Email */ + email: string; + /** Username */ + username: string; + /** Password */ + password: string; + }; + /** Body_login_basic_login__post */ + Body_login_basic_login__post: { + /** Grant Type */ + grant_type?: string | null; + /** Username */ + username: string; + /** + * Password + * Format: password + */ + password: string; + /** + * Scope + * @default + */ + scope: string; + /** Client Id */ + client_id?: string | null; + /** + * Client Secret + * Format: password + */ + client_secret?: string | null; + }; + /** Body_service_account_token_service_accounts_token_post */ + Body_service_account_token_service_accounts_token_post: { + /** Client Id */ + client_id: string; + /** Client Secret */ + client_secret: string; + }; + /** Body_subscribe_notifications_subscribe_post */ + Body_subscribe_notifications_subscribe_post: { + entity_type: components['schemas']['EntityType']; + /** Entity Name */ + entity_name: string; + /** Activity Types */ + activity_types: components['schemas']['ActivityType'][]; + /** Alert Types */ + alert_types: string[]; + }; + /** + * BulkDeactivateWorkflowsResponse + * @description Response model for bulk workflow deactivation. + */ + BulkDeactivateWorkflowsResponse: { + /** + * Deactivated Count + * @description Number of workflows successfully deactivated + */ + deactivated_count: number; + /** + * Deactivated + * @description Details of each deactivated workflow + */ + deactivated?: components['schemas']['DeactivatedWorkflowInfo'][]; + /** + * Skipped Count + * @description Number of pre-aggs skipped (no active workflow) + * @default 0 + */ + skipped_count: number; + /** + * Message + * @description Additional information about the operation + */ + message?: string | null; + }; + /** + * BulkNamespaceSourcesRequest + * @description Request body for fetching sources for multiple namespaces at once. + */ + BulkNamespaceSourcesRequest: { + /** + * Namespaces + * @description List of namespace names to fetch sources for + */ + namespaces: string[]; + }; + /** + * BulkNamespaceSourcesResponse + * @description Response for bulk fetching namespace sources. + * Maps namespace names to their deployment source info. + */ + BulkNamespaceSourcesResponse: { + /** Sources */ + sources?: { + [key: string]: components['schemas']['NamespaceSourcesResponse']; + }; + }; + /** + * CatalogInfo + * @description Class for catalog creation + */ + 'CatalogInfo-Input': { + /** Name */ + name: string; + /** Engines */ + engines?: components['schemas']['EngineInfo'][] | null; + }; + /** + * CatalogInfo + * @description Class for catalog creation + */ + 'CatalogInfo-Output': { + /** Name */ + name: string; + /** Engines */ + engines?: components['schemas']['EngineInfo'][] | null; + }; + /** + * CollectionDetails + * @description Collection information with details + */ + CollectionDetails: { + /** Id */ + id?: number | null; + /** Name */ + name: string; + /** Description */ + description: string; + /** Nodes */ + nodes: components['schemas']['NodeNameOutput'][]; + }; + /** + * CollectionInfo + * @description Class for a collection information + */ + CollectionInfo: { + /** Id */ + id?: number | null; + /** Name */ + name: string; + /** Description */ + description: string; + }; + /** + * ColumnChange + * @description Represents a change to a column + */ + ColumnChange: { + /** Column */ + column: string; + change_type: components['schemas']['ColumnChangeType']; + /** Old Type */ + old_type?: string | null; + /** New Type */ + new_type?: string | null; + }; + /** + * ColumnChangeType + * @description Types of column changes + * @enum {string} + */ + ColumnChangeType: 'added' | 'removed' | 'type_changed'; + /** + * ColumnMetadata + * @description A simple model for column metadata. + */ + ColumnMetadata: { + /** Name */ + name: string; + /** Type */ + type: string; + /** Column */ + column?: string | null; + /** Node */ + node?: string | null; + /** Semantic Entity */ + semantic_entity?: string | null; + /** Semantic Type */ + semantic_type?: string | null; + }; + /** + * ColumnOutput + * @description A simplified column schema, without ID or dimensions. + */ + ColumnOutput: { + /** Name */ + name: string; + /** Display Name */ + display_name?: string | null; + /** Type */ + type: string; + /** Description */ + description?: string | null; + /** Dimension Column */ + dimension_column?: string | null; + /** Attributes */ + attributes?: components['schemas']['AttributeOutput'][] | null; + dimension?: components['schemas']['NodeNameOutput'] | null; + partition?: components['schemas']['PartitionOutput'] | null; + }; + /** + * ColumnSpec + * @description Represents a column. + * + * The `type` field is optional - if not provided, DJ will infer the column + * type from the query or source definition. This is useful when you only + * want to specify metadata (display_name, attributes, description) without + * hardcoding the type. + */ + 'ColumnSpec-Input': { + /** Name */ + name: string; + /** Type */ + type?: string | null; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Attributes */ + attributes?: string[]; + partition?: components['schemas']['PartitionSpec'] | null; + }; + /** + * ColumnSpec + * @description Represents a column. + * + * The `type` field is optional - if not provided, DJ will infer the column + * type from the query or source definition. This is useful when you only + * want to specify metadata (display_name, attributes, description) without + * hardcoding the type. + */ + 'ColumnSpec-Output': { + /** Name */ + name: string; + /** Type */ + type?: string | null; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Attributes */ + attributes?: string[]; + partition?: components['schemas']['PartitionSpec'] | null; + }; + /** + * ColumnType + * @description Base type for all Column Types + */ + ColumnType: { + [key: string]: unknown; + }; + /** + * CombineMaterialization + * @description Stage for combining measures datasets at their shared grain and ingesting to Druid. + * Note that if there is only one upstream measures dataset, the Spark combining stage will + * be skipped and we ingest the aggregated measures directly to Druid. + */ + CombineMaterialization: { + node: components['schemas']['NodeNameVersion']; + /** Query */ + query?: string | null; + /** Columns */ + columns: components['schemas']['ColumnMetadata'][]; + /** + * Grain + * @description The grain at which the node is being materialized. + */ + grain: string[]; + /** + * Dimensions + * @description List of dimensions included in this materialization. + */ + dimensions: string[]; + /** + * Measures + * @description List of measures included in this materialization. + */ + measures: components['schemas']['MetricComponent'][]; + /** + * Timestamp Column + * @description Timestamp column name + */ + timestamp_column?: string | null; + /** + * Timestamp Format + * @description Timestamp format. Example: `yyyyMMdd` + */ + timestamp_format?: string | null; + /** @description The time granularity for each materialization run. Examples: DAY, HOUR */ + granularity?: components['schemas']['Granularity'] | null; + /** Upstream Tables */ + upstream_tables?: string[]; + /** + * Output Table Name + * @description Builds an output table name based on the node and a hash of its unique key. + */ + readonly output_table_name: string; + /** + * Druid Spec + * @description Builds the Druid ingestion spec based on the materialization config. + */ + readonly druid_spec: string; + }; + /** + * CombinedMeasuresSQLResponse + * @description Response model for combined measures SQL. + * + * This endpoint combines multiple grain groups into a single SQL query + * using FULL OUTER JOIN on shared dimensions with COALESCE for dimension columns. + */ + CombinedMeasuresSQLResponse: { + /** Sql */ + sql: string; + /** Columns */ + columns: components['schemas']['V3ColumnMetadata'][]; + /** Grain */ + grain: string[]; + /** Grain Groups Combined */ + grain_groups_combined: number; + /** Dialect */ + dialect?: string | null; + /** Use Preagg Tables */ + use_preagg_tables: boolean; + /** Source Tables */ + source_tables: string[]; + }; + /** + * ComponentResponse + * @description Response model for a metric component in measures SQL. + */ + ComponentResponse: { + /** Name */ + name: string; + /** Expression */ + expression: string; + /** Aggregation */ + aggregation?: string | null; + /** Merge */ + merge?: string | null; + /** Aggregability */ + aggregability: string; + }; + /** + * CreateCubeNode + * @description A create object for cube nodes + */ + CreateCubeNode: { + /** Metrics */ + metrics?: string[] | null; + /** Dimensions */ + dimensions?: string[] | null; + /** Filters */ + filters?: string[] | null; + /** Orderby */ + orderby?: string[] | null; + /** Limit */ + limit?: number | null; + /** Description */ + description?: string | null; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Display Name */ + display_name?: string | null; + /** Primary Key */ + primary_key?: string[] | null; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Owners */ + owners?: string[] | null; + /** Name */ + name: string; + /** + * Namespace + * @default default + */ + namespace: string; + }; + /** + * CreateMeasure + * @description Input for creating a measure + */ + CreateMeasure: { + /** Name */ + name: string; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Columns */ + columns?: components['schemas']['NodeColumn'][]; + /** @default non-additive */ + additive: components['schemas']['AggregationRule-Input']; + }; + /** + * CreateNode + * @description Create non-source node object. + */ + CreateNode: { + /** Required Dimensions */ + required_dimensions?: string[] | null; + metric_metadata?: components['schemas']['MetricMetadataInput'] | null; + /** Query */ + query: string; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Primary Key */ + primary_key?: string[] | null; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Owners */ + owners?: string[] | null; + /** Name */ + name: string; + /** + * Namespace + * @default default + */ + namespace: string; + }; + /** + * CreateSourceNode + * @description A create object for source nodes + */ + CreateSourceNode: { + /** Catalog */ + catalog: string; + /** Schema */ + schema_: string; + /** Table */ + table: string; + /** Columns */ + columns: components['schemas']['SourceColumnOutput'][]; + /** + * Missing Table + * @default false + */ + missing_table: boolean; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Primary Key */ + primary_key?: string[] | null; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Owners */ + owners?: string[] | null; + /** Name */ + name: string; + /** + * Namespace + * @default default + */ + namespace: string; + /** Query */ + query?: string | null; + }; + /** + * CreateTag + * @description Create tag model. + */ + CreateTag: { + /** Description */ + description?: string | null; + /** Display Name */ + display_name?: string | null; + /** Tag Metadata */ + tag_metadata?: Record | null; + /** Name */ + name: string; + /** Tag Type */ + tag_type: string; + }; + /** + * CubeElementMetadata + * @description Metadata for an element in a cube + */ + CubeElementMetadata: { + /** Name */ + name: string; + /** Display Name */ + display_name: string; + /** Node Name */ + node_name: string; + /** Type */ + type: string; + partition?: components['schemas']['PartitionOutput'] | null; + }; + /** + * CubeMaterializeRequest + * @description Request for creating a cube materialization workflow. + * + * This creates a Druid workflow that: + * 1. Waits for pre-agg tables to be available (VTTS) + * 2. Runs combined SQL that reads from pre-agg tables + * 3. Ingests the combined data into Druid + */ + CubeMaterializeRequest: { + /** + * Schedule + * @description Cron schedule for the materialization (e.g., '0 0 * * *' for daily) + */ + schedule: string; + /** + * @description Materialization strategy (FULL or INCREMENTAL_TIME) + * @default incremental_time + */ + strategy: components['schemas']['MaterializationStrategy']; + /** + * Lookback Window + * @description Lookback window for incremental materialization + * @default 1 DAY + */ + lookback_window: string; + /** + * Druid Datasource + * @description Custom Druid datasource name. Defaults to 'dj__{cube_name}' + */ + druid_datasource?: string | null; + /** + * Run Backfill + * @description Whether to run an initial backfill + * @default true + */ + run_backfill: boolean; + }; + /** + * CubeMaterializeResponse + * @description Response from cube materialization endpoint. + * + * Contains all information needed to create and execute the Druid cube workflow: + * - Pre-agg table dependencies for VTTS waits + * - Combined SQL for Druid ingestion + * - Druid spec for ingestion configuration + */ + CubeMaterializeResponse: { + cube: components['schemas']['NodeNameVersion']; + /** Druid Datasource */ + druid_datasource: string; + /** Preagg Tables */ + preagg_tables: components['schemas']['PreAggTableInfo'][]; + /** Combined Sql */ + combined_sql: string; + /** Combined Columns */ + combined_columns: components['schemas']['ColumnMetadata'][]; + /** Combined Grain */ + combined_grain: string[]; + /** Druid Spec */ + druid_spec: Record; + strategy: components['schemas']['MaterializationStrategy']; + /** Schedule */ + schedule: string; + /** Lookback Window */ + lookback_window: string; + /** + * Metric Combiners + * @description Mapping of metric names to their combiner SQL expressions + */ + metric_combiners?: { + [key: string]: string; + }; + /** + * Workflow Urls + * @description URLs to the created workflows (if any) + */ + workflow_urls?: string[]; + /** Message */ + message: string; + }; + /** + * CubeMetric + * @description Represents a metric belonging to a cube. + */ + CubeMetric: { + /** @description The name and version of the metric. */ + metric: components['schemas']['NodeNameVersion']; + /** + * Required Measures + * @description List of measures required by this metric. + */ + required_measures: components['schemas']['MeasureKey'][]; + /** + * Derived Expression + * @description The query for rewriting the original metric query using the materialized measures. + */ + derived_expression: string; + /** + * Metric Expression + * @description SQL expression for rewriting the original metric query using the materialized measures. + */ + metric_expression: string; + }; + /** + * CubeRevisionMetadata + * @description Metadata for a cube node + */ + CubeRevisionMetadata: { + /** Node Revision Id */ + node_revision_id: number; + /** Node Id */ + node_id: number; + type: components['schemas']['NodeType']; + /** Name */ + name: string; + /** Display Name */ + display_name: string; + /** Version */ + version: string; + status: components['schemas']['NodeStatus']; + mode: components['schemas']['NodeMode']; + /** + * Description + * @default + */ + description: string; + availability?: components['schemas']['AvailabilityStateBase'] | null; + /** Cube Elements */ + cube_elements: components['schemas']['CubeElementMetadata'][]; + /** Cube Node Metrics */ + cube_node_metrics: string[]; + /** Cube Node Dimensions */ + cube_node_dimensions: string[]; + /** Query */ + query?: string | null; + /** Columns */ + columns: components['schemas']['ColumnOutput'][]; + /** Sql Columns */ + sql_columns?: components['schemas']['ColumnOutput'][] | null; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + /** Materializations */ + materializations: components['schemas']['MaterializationConfigOutput'][]; + /** Tags */ + tags?: components['schemas']['TagOutput'][] | null; + /** Measures */ + measures?: components['schemas']['MetricMeasures-Output'][] | null; + }; + /** + * CubeSpec + * @description Specification for a cube node + */ + 'CubeSpec-Input': { + /** Name */ + name: string; + /** Namespace */ + namespace?: string | null; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + node_type: 'cube'; + /** Owners */ + owners?: string[]; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Tags */ + tags?: string[]; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Metrics */ + metrics: string[]; + /** Dimensions */ + dimensions?: string[]; + /** Filters */ + filters?: string[] | null; + /** Columns */ + columns?: components['schemas']['ColumnSpec-Input'][] | null; + }; + /** + * CubeSpec + * @description Specification for a cube node + */ + 'CubeSpec-Output': { + /** Name */ + name: string; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + node_type: 'cube'; + /** Owners */ + owners?: string[]; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Tags */ + tags?: string[]; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Metrics */ + metrics: string[]; + /** Dimensions */ + dimensions?: string[]; + /** Filters */ + filters?: string[] | null; + /** Columns */ + columns?: components['schemas']['ColumnSpec-Output'][] | null; + }; + /** + * DAGNodeOutput + * @description Output for a node in another node's DAG + */ + DAGNodeOutput: { + /** Namespace */ + namespace: string; + /** Node Revision Id */ + node_revision_id: number; + /** Node Id */ + node_id: number; + type: components['schemas']['NodeType']; + /** Name */ + name: string; + /** Display Name */ + display_name: string; + /** Version */ + version: string; + status: components['schemas']['NodeStatus']; + mode: components['schemas']['NodeMode']; + catalog?: components['schemas']['CatalogInfo-Output'] | null; + /** Schema */ + schema_?: string | null; + /** Table */ + table?: string | null; + /** + * Description + * @default + */ + description: string; + /** Columns */ + columns: components['schemas']['ColumnOutput'][]; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + /** Parents */ + parents: components['schemas']['NodeNameOutput'][]; + /** Dimension Links */ + dimension_links: components['schemas']['LinkDimensionOutput'][]; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Tags + * @default [] + */ + tags: components['schemas']['TagOutput'][]; + /** Current Version */ + current_version: string; + }; + /** + * DJError + * @description An error. + */ + DJError: { + code: components['schemas']['ErrorCode']; + /** Message */ + message: string; + /** Debug */ + debug?: Record | null; + /** + * Context + * @default + */ + context: string; + }; + /** + * DJQueryBuildError + * @description Query build error + */ + DJQueryBuildError: { + code: components['schemas']['ErrorCode']; + /** Message */ + message: string; + /** Debug */ + debug?: Record | null; + /** + * Context + * @default + */ + context: string; + }; + /** + * DeactivatedWorkflowInfo + * @description Info about a single deactivated workflow. + */ + DeactivatedWorkflowInfo: { + /** + * Id + * @description Pre-aggregation ID + */ + id: number; + /** + * Workflow Name + * @description Name of the deactivated workflow + */ + workflow_name?: string | null; + }; + /** + * DeploymentImpactResponse + * @description Full response for deployment impact analysis + */ + DeploymentImpactResponse: { + /** Namespace */ + namespace: string; + /** Changes */ + changes?: components['schemas']['NodeChange'][]; + /** + * Create Count + * @default 0 + */ + create_count: number; + /** + * Update Count + * @default 0 + */ + update_count: number; + /** + * Delete Count + * @default 0 + */ + delete_count: number; + /** + * Skip Count + * @default 0 + */ + skip_count: number; + /** Downstream Impacts */ + downstream_impacts?: components['schemas']['DownstreamImpact'][]; + /** + * Will Invalidate Count + * @default 0 + */ + will_invalidate_count: number; + /** + * May Affect Count + * @default 0 + */ + may_affect_count: number; + /** Warnings */ + warnings?: string[]; + }; + /** + * DeploymentInfo + * @description Information about a deployment + */ + DeploymentInfo: { + /** Uuid */ + uuid: string; + /** Namespace */ + namespace: string; + status: components['schemas']['DeploymentStatus']; + /** Results */ + results?: components['schemas']['DeploymentResult'][]; + /** Created At */ + created_at?: string | null; + /** Created By */ + created_by?: string | null; + /** Source */ + source?: + | components['schemas']['GitDeploymentSource'] + | components['schemas']['LocalDeploymentSource'] + | null; + }; + /** + * DeploymentResult + * @description Result of deploying a single node, link, or tag + */ + DeploymentResult: { + /** Name */ + name: string; + deploy_type: components['schemas']['Type']; + status: components['schemas']['Status']; + operation: components['schemas']['Operation']; + /** + * Message + * @default + */ + message: string; + }; + /** + * DeploymentSpec + * @description Specification of a full deployment (namespace, nodes, tags, and add'l metadata). + * Typically hydrated from a project manifest (YAML/JSON/etc). + */ + 'DeploymentSpec-Input': { + /** Namespace */ + namespace: string; + /** Nodes */ + nodes?: ( + | components['schemas']['SourceSpec-Input'] + | components['schemas']['TransformSpec-Input'] + | components['schemas']['DimensionSpec-Input'] + | components['schemas']['MetricSpec-Input'] + | components['schemas']['CubeSpec-Input'] + )[]; + /** Tags */ + tags?: components['schemas']['TagSpec'][]; + /** Source */ + source?: + | ( + | components['schemas']['GitDeploymentSource'] + | components['schemas']['LocalDeploymentSource'] + ) + | null; + }; + /** + * DeploymentSpec + * @description Specification of a full deployment (namespace, nodes, tags, and add'l metadata). + * Typically hydrated from a project manifest (YAML/JSON/etc). + */ + 'DeploymentSpec-Output': { + /** Namespace */ + namespace: string; + /** Nodes */ + nodes?: ( + | components['schemas']['SourceSpec-Output'] + | components['schemas']['TransformSpec-Output'] + | components['schemas']['DimensionSpec-Output'] + | components['schemas']['MetricSpec-Output'] + | components['schemas']['CubeSpec-Output'] + )[]; + /** Tags */ + tags?: components['schemas']['TagSpec'][]; + /** Source */ + source?: + | ( + | components['schemas']['GitDeploymentSource'] + | components['schemas']['LocalDeploymentSource'] + ) + | null; + }; + /** + * DeploymentStatus + * @enum {string} + */ + DeploymentStatus: 'pending' | 'running' | 'failed' | 'success'; + /** + * Dialect + * @description SQL dialect + * @enum {string} + */ + Dialect: + | 'spark' + | 'trino' + | 'druid' + | 'postgres' + | 'clickhouse' + | 'duckdb' + | 'redshift' + | 'snowflake' + | 'sqlite'; + /** + * DialectInfo + * @description Information about a SQL dialect and its associated plugin class. + */ + DialectInfo: { + /** Name */ + name: string; + /** Plugin Class */ + plugin_class: string; + }; + /** + * DimensionAttributeOutput + * @description Dimension attribute output should include the name and type + */ + DimensionAttributeOutput: { + /** Name */ + name: string; + /** Node Name */ + node_name: string | null; + /** Node Display Name */ + node_display_name: string | null; + /** Properties */ + properties: string[] | null; + /** Type */ + type: string | null; + /** Path */ + path: string[]; + /** + * Filter Only + * @default false + */ + filter_only: boolean; + }; + /** + * DimensionHierarchiesResponse + * @description Response showing all hierarchies that use a dimension and navigation options. + */ + DimensionHierarchiesResponse: { + /** Dimension Node */ + dimension_node: string; + /** Hierarchies */ + hierarchies: components['schemas']['DimensionHierarchyNavigation'][]; + }; + /** + * DimensionHierarchyNavigation + * @description Navigation information for a dimension within a specific hierarchy. + */ + DimensionHierarchyNavigation: { + /** Hierarchy Name */ + hierarchy_name: string; + /** Hierarchy Display Name */ + hierarchy_display_name?: string | null; + /** Current Level */ + current_level: string; + /** Current Level Order */ + current_level_order: number; + /** + * Drill Up + * @default [] + */ + drill_up: components['schemas']['NavigationTarget'][]; + /** + * Drill Down + * @default [] + */ + drill_down: components['schemas']['NavigationTarget'][]; + }; + /** + * DimensionJoinLinkSpec + * @description Specification for a dimension join link + * + * If a custom `join_on` clause is not specified, DJ will automatically set + * this clause to be on the selected column and the dimension node's primary key + */ + 'DimensionJoinLinkSpec-Input': { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: 'join'; + /** Role */ + role?: string | null; + /** Namespace */ + namespace?: string | null; + /** Dimension Node */ + dimension_node: string; + /** Node Column */ + node_column?: string | null; + /** @default left */ + join_type: components['schemas']['JoinType']; + /** Join On */ + join_on?: string | null; + }; + /** + * DimensionJoinLinkSpec + * @description Specification for a dimension join link + * + * If a custom `join_on` clause is not specified, DJ will automatically set + * this clause to be on the selected column and the dimension node's primary key + */ + 'DimensionJoinLinkSpec-Output': { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: 'join'; + /** Role */ + role?: string | null; + /** Dimension Node */ + dimension_node: string; + /** Node Column */ + node_column?: string | null; + /** @default left */ + join_type: components['schemas']['JoinType']; + /** Join On */ + join_on?: string | null; + }; + /** + * DimensionReferenceLinkSpec + * @description Specification for a dimension reference link + * + * The `dimension` input should be a fully qualified dimension attribute name, + * e.g., "." + */ + 'DimensionReferenceLinkSpec-Input': { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: 'reference'; + /** Role */ + role?: string | null; + /** Namespace */ + namespace?: string | null; + /** Node Column */ + node_column: string; + /** Dimension */ + dimension: string; + }; + /** + * DimensionReferenceLinkSpec + * @description Specification for a dimension reference link + * + * The `dimension` input should be a fully qualified dimension attribute name, + * e.g., "." + */ + 'DimensionReferenceLinkSpec-Output': { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: 'reference'; + /** Role */ + role?: string | null; + /** Node Column */ + node_column: string; + /** Dimension */ + dimension: string; + }; + /** + * DimensionSpec + * @description Specification for a dimension node + */ + 'DimensionSpec-Input': { + /** Name */ + name: string; + /** Namespace */ + namespace?: string | null; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + node_type: 'dimension'; + /** Owners */ + owners?: string[]; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Tags */ + tags?: string[]; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Columns */ + columns?: components['schemas']['ColumnSpec-Input'][] | null; + /** Dimension Links */ + dimension_links?: ( + | components['schemas']['DimensionJoinLinkSpec-Input'] + | components['schemas']['DimensionReferenceLinkSpec-Input'] + )[]; + /** Primary Key */ + primary_key?: string[]; + /** Query */ + query: string; + }; + /** + * DimensionSpec + * @description Specification for a dimension node + */ + 'DimensionSpec-Output': { + /** Name */ + name: string; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + node_type: 'dimension'; + /** Owners */ + owners?: string[]; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Tags */ + tags?: string[]; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Columns */ + columns?: components['schemas']['ColumnSpec-Output'][] | null; + /** Dimension Links */ + dimension_links?: ( + | components['schemas']['DimensionJoinLinkSpec-Output'] + | components['schemas']['DimensionReferenceLinkSpec-Output'] + )[]; + /** Primary Key */ + primary_key?: string[]; + /** Query */ + query: string; + }; + /** + * DimensionStats + * @description Output model for dimension statistics. + */ + DimensionStats: { + /** Name */ + name: string; + /** + * Indegree + * @default 0 + */ + indegree: number; + /** Cube Count */ + cube_count: number; + }; + /** + * DimensionValue + * @description Dimension value and count + */ + DimensionValue: { + /** Value */ + value: string[]; + /** Count */ + count: number | null; + }; + /** + * DimensionValues + * @description Dimension values + */ + DimensionValues: { + /** Dimensions */ + dimensions: string[]; + /** Values */ + values: components['schemas']['DimensionValue'][]; + /** Cardinality */ + cardinality: number; + }; + /** + * DownstreamImpact + * @description Predicted impact on a downstream node + */ + DownstreamImpact: { + /** Name */ + name: string; + node_type: components['schemas']['NodeType']; + current_status: components['schemas']['NodeStatus']; + predicted_status: components['schemas']['NodeStatus']; + impact_type: components['schemas']['ImpactType']; + /** Impact Reason */ + impact_reason: string; + /** Depth */ + depth: number; + /** Caused By */ + caused_by?: string[]; + /** + * Is External + * @default false + */ + is_external: boolean; + }; + /** + * DruidConf + * @description Druid configuration + */ + DruidConf: { + /** Granularity */ + granularity?: string | null; + /** Intervals */ + intervals?: string[] | null; + /** Timestamp Column */ + timestamp_column?: string | null; + /** Timestamp Format */ + timestamp_format?: string | null; + /** Parse Spec Format */ + parse_spec_format?: string | null; + }; + /** + * DruidCubeConfigInput + * @description Specific Druid cube materialization fields that require user input + */ + DruidCubeConfigInput: { + spark?: components['schemas']['SparkConf'] | null; + /** Lookback Window */ + lookback_window?: string | null; + /** Dimensions */ + dimensions?: string[] | null; + /** Measures */ + measures?: { + [key: string]: components['schemas']['MetricMeasures-Input']; + } | null; + /** Metrics */ + metrics?: components['schemas']['ColumnMetadata'][] | null; + /** + * Prefix + * @default + */ + prefix: string | null; + /** + * Suffix + * @default + */ + suffix: string | null; + druid?: components['schemas']['DruidConf'] | null; + }; + /** + * DruidCubeMaterializationInput + * @description Materialization info as passed to the query service. + */ + DruidCubeMaterializationInput: { + /** Name */ + name: string; + cube: components['schemas']['NodeNameVersion']; + /** Dimensions */ + dimensions: string[]; + /** Metrics */ + metrics: components['schemas']['CubeMetric'][]; + strategy: components['schemas']['MaterializationStrategy']; + /** Schedule */ + schedule: string; + /** Job */ + job: string; + /** + * Lookback Window + * @default 1 DAY + */ + lookback_window: string | null; + /** Measures Materializations */ + measures_materializations: components['schemas']['MeasuresMaterialization'][]; + /** Combiners */ + combiners: components['schemas']['CombineMaterialization'][]; + }; + /** + * EditMeasure + * @description Editable fields on a measure + */ + EditMeasure: { + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Columns */ + columns?: components['schemas']['NodeColumn'][] | null; + additive?: components['schemas']['AggregationRule-Input'] | null; + }; + /** + * EngineInfo + * @description Class for engine creation + */ + EngineInfo: { + /** Name */ + name: string; + /** Version */ + version: string; + /** Uri */ + uri?: string | null; + dialect?: components['schemas']['Dialect'] | null; + }; + /** + * EntityType + * @description An entity type for which activity can occur + * @enum {string} + */ + EntityType: + | 'attribute' + | 'availability' + | 'backfill' + | 'catalog' + | 'column_attribute' + | 'dependency' + | 'engine' + | 'hierarchy' + | 'link' + | 'materialization' + | 'namespace' + | 'node' + | 'partition' + | 'query' + | 'role' + | 'role_assignment' + | 'role_scope' + | 'tag'; + /** + * ErrorCode + * @description Error codes. + * @enum {integer} + */ + ErrorCode: + | 0 + | 1 + | 2 + | 100 + | 101 + | 102 + | 200 + | 201 + | 202 + | 203 + | 204 + | 205 + | 206 + | 207 + | 208 + | 300 + | 301 + | 302 + | 303 + | 400 + | 401 + | 402 + | 403 + | 500 + | 501 + | 600 + | 601 + | 602 + | 603 + | 604 + | 700 + | 701 + | 702; + /** + * FrozenMeasureKey + * @description Base frozen measure fields. + */ + FrozenMeasureKey: { + /** Name */ + name: string; + /** Expression */ + expression: string; + /** Aggregation */ + aggregation: string; + rule: components['schemas']['datajunction_server__models__decompose__AggregationRule']; + upstream_revision: components['schemas']['NodeRevisionNameVersion']; + }; + /** + * FrozenMeasureOutput + * @description The output fields when listing frozen measure metadata + */ + FrozenMeasureOutput: { + /** Name */ + name: string; + /** Expression */ + expression: string; + /** Aggregation */ + aggregation: string; + rule: components['schemas']['datajunction_server__models__decompose__AggregationRule']; + upstream_revision: components['schemas']['NodeRevisionNameVersion']; + /** Used By Node Revisions */ + used_by_node_revisions: components['schemas']['NodeRevisionNameVersion'][]; + }; + /** + * GeneratedSQL + * @description Generated SQL for a given node, the output of a QueryBuilder(...).build() call. + */ + GeneratedSQL: { + /** Sql */ + sql: string; + dialect?: components['schemas']['Dialect'] | null; + node: components['schemas']['NodeNameVersion']; + /** Columns */ + columns?: components['schemas']['ColumnMetadata'][] | null; + /** Grain */ + grain?: string[] | null; + /** Upstream Tables */ + upstream_tables?: string[] | null; + /** Metrics */ + metrics?: { + [key: string]: [components['schemas']['MetricComponent'][], string]; + } | null; + /** Spark Conf */ + spark_conf?: { + [key: string]: string; + } | null; + /** Errors */ + errors?: components['schemas']['DJQueryBuildError'][] | null; + }; + /** + * GenericCubeConfigInput + * @description Generic cube materialization config fields that require user input + */ + GenericCubeConfigInput: { + spark?: components['schemas']['SparkConf'] | null; + /** Lookback Window */ + lookback_window?: string | null; + /** Dimensions */ + dimensions?: string[] | null; + /** Measures */ + measures?: { + [key: string]: components['schemas']['MetricMeasures-Input']; + } | null; + /** Metrics */ + metrics?: components['schemas']['ColumnMetadata'][] | null; + }; + /** + * GenericMaterializationConfigInput + * @description User-input portions of the materialization config + */ + GenericMaterializationConfigInput: { + spark?: components['schemas']['SparkConf'] | null; + /** Lookback Window */ + lookback_window?: string | null; + }; + /** + * GitDeploymentSource + * @description Deployment from a tracked git repository. + * Indicates the source of truth is in version control with CI/CD automation. + */ + GitDeploymentSource: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: 'git'; + /** Repository */ + repository: string; + /** Branch */ + branch?: string | null; + /** Commit Sha */ + commit_sha?: string | null; + /** Ci System */ + ci_system?: string | null; + /** Ci Run Url */ + ci_run_url?: string | null; + }; + /** + * GrainGroupResponse + * @description Response model for a single grain group in measures SQL. + */ + GrainGroupResponse: { + /** Sql */ + sql: string; + /** Columns */ + columns: components['schemas']['V3ColumnMetadata'][]; + /** Grain */ + grain: string[]; + /** Aggregability */ + aggregability: string; + /** Metrics */ + metrics: string[]; + /** Components */ + components: components['schemas']['ComponentResponse'][]; + /** Parent Name */ + parent_name: string; + }; + /** + * GrainMode + * @description Grain matching mode for pre-aggregation lookup. + * + * - EXACT: Pre-agg grain must match requested grain exactly + * - SUPERSET: Pre-agg grain must contain all requested columns (and possibly more) + * @enum {string} + */ + GrainMode: 'exact' | 'superset'; + /** + * Granularity + * @description Time dimension granularity. + * @enum {string} + */ + Granularity: + | 'second' + | 'minute' + | 'hour' + | 'day' + | 'week' + | 'month' + | 'quarter' + | 'year'; + /** + * GroupOutput + * @description Group information to be included in responses + */ + GroupOutput: { + /** Id */ + id: number; + /** Username */ + username: string; + /** Email */ + email?: string | null; + /** Name */ + name?: string | null; + /** Created At */ + created_at?: string | null; + }; + /** HTTPValidationError */ + HTTPValidationError: { + /** Detail */ + detail?: components['schemas']['ValidationError'][]; + }; + /** + * HealthCheck + * @description A healthcheck response. + */ + HealthCheck: { + /** Name */ + name: string; + status: components['schemas']['HealthcheckStatus']; + }; + /** + * HealthcheckStatus + * @description Possible health statuses. + * @enum {string} + */ + HealthcheckStatus: 'ok' | 'failed'; + /** + * HierarchyCreateRequest + * @description Request model for creating a hierarchy. + */ + HierarchyCreateRequest: { + /** Name */ + name: string; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Levels */ + levels: components['schemas']['HierarchyLevelInput'][]; + }; + /** + * HierarchyInfo + * @description Simplified hierarchy info for listings. + */ + HierarchyInfo: { + /** Name */ + name: string; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + created_by: components['schemas']['UserNameOnly']; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** Level Count */ + level_count: number; + }; + /** + * HierarchyLevelInput + * @description Input model for creating a hierarchy level. + */ + HierarchyLevelInput: { + /** Name */ + name: string; + /** Dimension Node */ + dimension_node: string; + /** Grain Columns */ + grain_columns?: string[] | null; + }; + /** + * HierarchyLevelOutput + * @description Output model for hierarchy levels. + */ + HierarchyLevelOutput: { + /** Name */ + name: string; + dimension_node: components['schemas']['NodeNameOutput']; + /** Level Order */ + level_order: number; + /** Grain Columns */ + grain_columns?: string[] | null; + }; + /** + * HierarchyOutput + * @description Output model for hierarchies. + */ + HierarchyOutput: { + /** Name */ + name: string; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + created_by: components['schemas']['UserNameOnly']; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** Levels */ + levels: components['schemas']['HierarchyLevelOutput'][]; + }; + /** + * HierarchyUpdateRequest + * @description Request model for updating a hierarchy. + */ + HierarchyUpdateRequest: { + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Levels */ + levels?: components['schemas']['HierarchyLevelInput'][] | null; + }; + /** + * HistoryOutput + * @description Output history event + */ + HistoryOutput: { + /** Id */ + id: number; + entity_type: components['schemas']['EntityType'] | null; + /** Entity Name */ + entity_name: string | null; + /** Node */ + node: string | null; + activity_type: components['schemas']['ActivityType'] | null; + /** User */ + user: string | null; + /** Pre */ + pre: Record; + /** Post */ + post: Record; + /** Details */ + details: Record; + /** + * Created At + * Format: date-time + */ + created_at: string; + }; + /** + * ImpactType + * @description Type of impact on a downstream node + * @enum {string} + */ + ImpactType: 'will_invalidate' | 'may_affect' | 'unchanged'; + /** + * JoinCardinality + * @description The version upgrade type + * @enum {string} + */ + JoinCardinality: + | 'one_to_one' + | 'one_to_many' + | 'many_to_one' + | 'many_to_many'; + /** + * JoinLinkInput + * @description Input for creating a join link between a dimension node and node + */ + JoinLinkInput: { + /** Dimension Node */ + dimension_node: string; + /** @default left */ + join_type: components['schemas']['JoinType'] | null; + /** Join On */ + join_on?: string | null; + /** @default many_to_one */ + join_cardinality: components['schemas']['JoinCardinality'] | null; + /** Role */ + role?: string | null; + }; + /** + * JoinType + * @description Join type + * @enum {string} + */ + JoinType: 'left' | 'right' | 'inner' | 'full' | 'cross'; + /** + * LineageColumn + * @description Column in lineage graph + */ + LineageColumn: { + /** Column Name */ + column_name: string; + /** Node Name */ + node_name?: string | null; + /** Node Type */ + node_type?: string | null; + /** Display Name */ + display_name?: string | null; + /** Lineage */ + lineage?: components['schemas']['LineageColumn'][] | null; + }; + /** + * LinkDimensionIdentifier + * @description Input for linking a dimension to a node + */ + LinkDimensionIdentifier: { + /** Dimension Node */ + dimension_node: string; + /** Role */ + role?: string | null; + }; + /** + * LinkDimensionOutput + * @description Input for linking a dimension to a node + */ + LinkDimensionOutput: { + dimension: components['schemas']['NodeNameOutput']; + join_type: components['schemas']['JoinType']; + /** Join Sql */ + join_sql: string; + join_cardinality?: components['schemas']['JoinCardinality'] | null; + /** Role */ + role?: string | null; + /** Foreign Keys */ + foreign_keys: { + [key: string]: string | null; + }; + }; + /** + * LocalDeploymentSource + * @description Adhoc deployment without a git repository context. + * Could be from CLI, direct API calls, scripts, or development/testing. + */ + LocalDeploymentSource: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + type: 'local'; + /** Hostname */ + hostname?: string | null; + /** Reason */ + reason?: string | null; + }; + /** + * MaterializationConfigInfoUnified + * @description Materialization config + info + */ + MaterializationConfigInfoUnified: { + /** Node Revision Id */ + node_revision_id: number; + /** Name */ + name: string | null; + /** Config */ + config: Record; + /** Schedule */ + schedule: string; + /** Job */ + job: string | null; + /** Backfills */ + backfills: components['schemas']['BackfillOutput'][]; + /** Strategy */ + strategy: string | null; + /** Deactivated At */ + deactivated_at: string | null; + /** Output Tables */ + output_tables: string[]; + /** Urls */ + urls: string[]; + }; + /** + * MaterializationConfigOutput + * @description Output for materialization config. + */ + MaterializationConfigOutput: { + /** Node Revision Id */ + node_revision_id: number; + /** Name */ + name: string | null; + /** Config */ + config: Record; + /** Schedule */ + schedule: string; + /** Job */ + job: string | null; + /** Backfills */ + backfills: components['schemas']['BackfillOutput'][]; + /** Strategy */ + strategy: string | null; + /** Deactivated At */ + deactivated_at: string | null; + }; + /** + * MaterializationInfo + * @description The output when calling the query service's materialization + * API endpoint for a cube node. + */ + MaterializationInfo: { + /** Output Tables */ + output_tables: string[]; + /** Urls */ + urls: string[]; + }; + /** + * MaterializationStrategy + * @description Materialization strategies + * @enum {string} + */ + MaterializationStrategy: + | 'full' + | 'snapshot' + | 'snapshot_partition' + | 'incremental_time' + | 'view'; + /** + * Measure + * @description A measure with a simple aggregation + */ + Measure: { + /** Name */ + name: string; + /** Field Name */ + field_name: string; + /** Agg */ + agg: string; + /** Type */ + type: string; + }; + /** + * MeasureKey + * @description Lookup key for a measure + */ + MeasureKey: { + node: components['schemas']['NodeNameVersion']; + /** Measure Name */ + measure_name: string; + }; + /** + * MeasureOutput + * @description Output model for measures + */ + MeasureOutput: { + /** Name */ + name: string; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Columns */ + columns?: components['schemas']['datajunction_server__models__measure__ColumnOutput'][]; + additive: components['schemas']['AggregationRule']; + }; + /** + * MeasuresMaterialization + * @description Represents a single pre-aggregation transform query for materializing a partition. + */ + MeasuresMaterialization: { + /** @description The node being materialized */ + node: components['schemas']['NodeNameVersion']; + /** + * Grain + * @description The grain at which the node is being materialized. + */ + grain: string[]; + /** + * Dimensions + * @description List of dimensions included in this materialization. + */ + dimensions: string[]; + /** + * Measures + * @description List of measures included in this materialization. + */ + measures: components['schemas']['MetricComponent'][]; + /** + * Query + * @description The query used for each materialization run. + */ + query: string; + /** Columns */ + columns: components['schemas']['ColumnMetadata'][]; + /** + * Timestamp Column + * @description Timestamp column name + */ + timestamp_column: string | null; + /** + * Timestamp Format + * @description Timestamp format. Example: `yyyyMMdd` + */ + timestamp_format: string | null; + /** @description The time granularity for each materialization run. Examples: DAY, HOUR */ + granularity: components['schemas']['Granularity'] | null; + /** + * Spark Conf + * @description Spark config for this materialization. + */ + spark_conf: { + [key: string]: string; + } | null; + /** + * Upstream Tables + * @description List of upstream tables used in this materialization. + */ + upstream_tables: string[]; + /** + * Output Table Name + * @description Generate a unique output table name based on the parameters. + */ + readonly output_table_name: string; + }; + /** + * MeasuresSQLResponse + * @description Response model for V3 measures SQL with multiple grain groups. + */ + MeasuresSQLResponse: { + /** Grain Groups */ + grain_groups: components['schemas']['GrainGroupResponse'][]; + /** Metric Formulas */ + metric_formulas: components['schemas']['MetricFormulaResponse'][]; + /** Dialect */ + dialect?: string | null; + /** Requested Dimensions */ + requested_dimensions: string[]; + }; + /** + * Metric + * @description Class for a metric. + */ + Metric: { + /** Id */ + id: number; + /** Name */ + name: string; + /** Display Name */ + display_name: string; + /** Current Version */ + current_version: string; + /** + * Description + * @default + */ + description: string; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + /** Query */ + query: string; + /** Upstream Node */ + upstream_node: string; + /** Expression */ + expression: string; + /** Dimensions */ + dimensions: components['schemas']['DimensionAttributeOutput'][]; + metric_metadata?: components['schemas']['MetricMetadataOutput'] | null; + /** Required Dimensions */ + required_dimensions: string[]; + /** Incompatible Druid Functions */ + incompatible_druid_functions: string[]; + /** Measures */ + measures: components['schemas']['MetricComponent'][]; + /** Derived Query */ + derived_query: string; + /** Derived Expression */ + derived_expression: string; + /** Custom Metadata */ + custom_metadata?: Record | null; + }; + /** + * MetricComponent + * @description A reusable, named building block of a metric definition. + * + * A MetricComponent represents a SQL expression that can serve as an input + * to building a metric. It supports a two-phase aggregation model: + * + * - Phase 1 (Accumulate): Build from raw data using `aggregation` + * Can be a function name ("SUM") or a template ("SUM(POWER({}, 2))") + * + * - Phase 2 (Merge): Combine pre-aggregated values using `merge` function + * Examples: SUM, SUM (for COUNT), hll_union_agg + * + * For most aggregations, accumulate and merge use the same function (SUM → SUM). + * For COUNT, merge is SUM (sum up the counts). + * For HLL sketches, they differ: hll_sketch_estimate vs hll_union_agg. + * + * The final expression combining merged components is specified in + * DecomposedMetric.combiner. + * + * Attributes: + * name: A unique name for the component, derived from its expression. + * expression: The raw SQL expression (column/value) being aggregated. + * aggregation: Function name or template for Phase 1. Simple cases use + * just the name ("SUM"), complex cases use templates with + * {} placeholder ("SUM(POWER({}, 2))"). + * merge: The function name for combining pre-aggregated values (Phase 2). + * rule: Aggregation rules defining how/when the component can be aggregated. + */ + MetricComponent: { + /** Name */ + name: string; + /** Expression */ + expression: string; + /** Aggregation */ + aggregation: string | null; + /** Merge */ + merge?: string | null; + rule: components['schemas']['datajunction_server__models__decompose__AggregationRule']; + }; + /** + * MetricDirection + * @description The direction of the metric that's considered good, i.e., higher is better + * @enum {string} + */ + MetricDirection: 'higher_is_better' | 'lower_is_better' | 'neutral'; + /** + * MetricFormulaResponse + * @description Response model for a metric's combiner formula. + */ + MetricFormulaResponse: { + /** Name */ + name: string; + /** Short Name */ + short_name: string; + /** Query */ + query: string; + /** Combiner */ + combiner: string; + /** Components */ + components: string[]; + /** Is Derived */ + is_derived: boolean; + /** Parent Name */ + parent_name?: string | null; + }; + /** + * MetricMeasures + * @description Represent a metric as a set of measures, along with the expression for + * combining the measures to make the metric. + */ + 'MetricMeasures-Input': { + /** Metric */ + metric: string; + /** Measures */ + measures: components['schemas']['Measure'][]; + /** Combiner */ + combiner: string; + }; + /** MetricMeasures */ + 'MetricMeasures-Output': { + metric: components['schemas']['NodeRevisionNameVersion']; + /** Frozen Measures */ + frozen_measures: components['schemas']['FrozenMeasureKey'][]; + }; + /** + * MetricMetadataInput + * @description Metric metadata output + */ + MetricMetadataInput: { + direction?: components['schemas']['MetricDirection'] | null; + /** Unit */ + unit?: string | null; + /** Significant Digits */ + significant_digits?: number | null; + /** Min Decimal Exponent */ + min_decimal_exponent?: number | null; + /** Max Decimal Exponent */ + max_decimal_exponent?: number | null; + }; + /** + * MetricMetadataOptions + * @description Metric metadata options list + */ + MetricMetadataOptions: { + /** Directions */ + directions: components['schemas']['MetricDirection'][]; + /** Units */ + units: components['schemas']['Unit'][]; + }; + /** + * MetricMetadataOutput + * @description Metric metadata output + */ + MetricMetadataOutput: { + direction?: components['schemas']['MetricDirection'] | null; + unit?: components['schemas']['Unit'] | null; + /** Significant Digits */ + significant_digits?: number | null; + /** Min Decimal Exponent */ + min_decimal_exponent?: number | null; + /** Max Decimal Exponent */ + max_decimal_exponent?: number | null; + }; + /** + * MetricRef + * @description Reference to a metric with name and display name. + */ + MetricRef: { + /** Name */ + name: string; + /** Display Name */ + display_name?: string | null; + }; + /** + * MetricSpec + * @description Specification for a metric node + */ + 'MetricSpec-Input': { + /** Name */ + name: string; + /** Namespace */ + namespace?: string | null; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + node_type: 'metric'; + /** Owners */ + owners?: string[]; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Tags */ + tags?: string[]; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Query */ + query: string; + /** Required Dimensions */ + required_dimensions?: string[] | null; + direction?: components['schemas']['MetricDirection'] | null; + unit_enum?: components['schemas']['MetricUnit'] | null; + /** Significant Digits */ + significant_digits?: number | null; + /** Min Decimal Exponent */ + min_decimal_exponent?: number | null; + /** Max Decimal Exponent */ + max_decimal_exponent?: number | null; + }; + /** + * MetricSpec + * @description Specification for a metric node + */ + 'MetricSpec-Output': { + /** Name */ + name: string; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + node_type: 'metric'; + /** Owners */ + owners?: string[]; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Tags */ + tags?: string[]; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Query */ + query: string; + /** Required Dimensions */ + required_dimensions?: string[] | null; + direction?: components['schemas']['MetricDirection'] | null; + /** Significant Digits */ + significant_digits?: number | null; + /** Min Decimal Exponent */ + min_decimal_exponent?: number | null; + /** Max Decimal Exponent */ + max_decimal_exponent?: number | null; + }; + /** + * MetricUnit + * @description Available units of measure for metrics + * TODO: Eventually this can be recorded in a database, + * since measurement units can be customized depending on the metric + * (i.e., clicks/hour). For the time being, this enum provides some basic units. + * @enum {unknown} + */ + MetricUnit: + | { + category: ''; + label: 'Unknown'; + name: 'unknown'; + } + | { + category: ''; + label: 'Unitless'; + name: 'unitless'; + } + | { + abbreviation: '%'; + category: ''; + description: 'A ratio expressed as a number out of 100. Values range from 0 to 100.'; + label: 'Percentage'; + name: 'percentage'; + } + | { + abbreviation: ''; + category: ''; + description: 'A ratio that compares a part to a whole. Values range from 0 to 1.'; + label: 'Proportion'; + name: 'proportion'; + } + | { + abbreviation: '$'; + category: 'currency'; + label: 'Dollar'; + name: 'dollar'; + } + | { + abbreviation: 's'; + category: 'time'; + label: 'Second'; + name: 'second'; + } + | { + abbreviation: 'm'; + category: 'time'; + label: 'Minute'; + name: 'minute'; + } + | { + abbreviation: 'h'; + category: 'time'; + label: 'Hour'; + name: 'hour'; + } + | { + abbreviation: 'd'; + category: 'time'; + label: 'Day'; + name: 'day'; + } + | { + abbreviation: 'w'; + category: 'time'; + label: 'Week'; + name: 'week'; + } + | { + abbreviation: 'mo'; + category: 'time'; + label: 'Month'; + name: 'month'; + } + | { + abbreviation: 'y'; + category: 'time'; + label: 'Year'; + name: 'year'; + }; + /** + * MutableAttributeTypeFields + * @description Fields on attribute types that users can set. + */ + MutableAttributeTypeFields: { + /** + * Namespace + * @default system + */ + namespace: string; + /** Name */ + name: string; + /** Description */ + description: string; + /** Allowed Node Types */ + allowed_node_types: components['schemas']['NodeType'][]; + /** Uniqueness Scope */ + uniqueness_scope?: components['schemas']['UniquenessScope'][] | null; + }; + /** + * NamespaceOutput + * @description Output for a namespace that includes the number of nodes + */ + NamespaceOutput: { + /** Namespace */ + namespace: string; + /** Num Nodes */ + num_nodes: number; + }; + /** + * NamespaceSourcesResponse + * @description Response for the /namespaces/{namespace}/sources endpoint. + * Shows the primary deployment source for a namespace. + */ + NamespaceSourcesResponse: { + /** Namespace */ + namespace: string; + /** Primary Source */ + primary_source?: + | components['schemas']['GitDeploymentSource'] + | components['schemas']['LocalDeploymentSource'] + | null; + /** + * Total Deployments + * @default 0 + */ + total_deployments: number; + }; + /** + * NavigationTarget + * @description A level that can be navigated to in a hierarchy. + */ + NavigationTarget: { + /** Level Name */ + level_name: string; + /** Dimension Node */ + dimension_node: string; + /** Level Order */ + level_order: number; + /** Steps */ + steps: number; + }; + /** + * NodeChange + * @description Represents a direct change to a node in the deployment + */ + NodeChange: { + /** Name */ + name: string; + operation: components['schemas']['NodeChangeOperation']; + node_type: components['schemas']['NodeType']; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + current_status?: components['schemas']['NodeStatus'] | null; + /** Changed Fields */ + changed_fields?: string[]; + /** Column Changes */ + column_changes?: components['schemas']['ColumnChange'][]; + }; + /** + * NodeChangeOperation + * @description Operation being performed on a node + * @enum {string} + */ + NodeChangeOperation: 'create' | 'update' | 'delete' | 'noop'; + /** + * NodeColumn + * @description Defines a column on a node + */ + NodeColumn: { + /** Node */ + node: string; + /** Column */ + column: string; + }; + /** + * NodeIndegreeOutput + * @description Node indegree output + */ + NodeIndegreeOutput: { + /** Name */ + name: string; + /** Indegree */ + indegree: number; + }; + /** + * NodeIndexItem + * @description Node details used for indexing purposes + */ + NodeIndexItem: { + /** Name */ + name: string; + /** Display Name */ + display_name: string; + /** Description */ + description: string; + type: components['schemas']['NodeType']; + }; + /** + * NodeMinimumDetail + * @description List of high level node details + */ + NodeMinimumDetail: { + /** Name */ + name: string; + /** Display Name */ + display_name: string; + /** Description */ + description: string; + /** Version */ + version: string; + type: components['schemas']['NodeType']; + status: components['schemas']['NodeStatus']; + mode: components['schemas']['NodeMode']; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + /** Tags */ + tags?: components['schemas']['TagMinimum'][]; + /** Edited By */ + edited_by?: string[] | null; + }; + /** + * NodeMode + * @description Node mode. + * + * A node can be in one of the following modes: + * + * 1. PUBLISHED - Must be valid and not cause any child nodes to be invalid + * 2. DRAFT - Can be invalid, have invalid parents, and include dangling references + * @enum {string} + */ + NodeMode: 'published' | 'draft'; + /** + * NodeNameOutput + * @description Node name only + */ + NodeNameOutput: { + /** Name */ + name: string; + }; + /** + * NodeNameVersion + * @description Node name and version + */ + NodeNameVersion: { + /** Name */ + name: string; + /** Version */ + version: string; + /** Display Name */ + display_name?: string | null; + }; + /** + * NodeOutput + * @description Output for a node that shows the current revision. + */ + NodeOutput: { + /** Namespace */ + namespace: string; + /** Node Revision Id */ + node_revision_id: number; + /** Node Id */ + node_id: number; + type: components['schemas']['NodeType']; + /** Name */ + name: string; + /** Display Name */ + display_name: string; + /** Version */ + version: string; + status: components['schemas']['NodeStatus']; + mode: components['schemas']['NodeMode']; + catalog?: components['schemas']['CatalogInfo-Output'] | null; + /** Schema */ + schema_?: string | null; + /** Table */ + table?: string | null; + /** + * Description + * @default + */ + description: string; + /** Query */ + query?: string | null; + availability?: components['schemas']['AvailabilityStateBase'] | null; + /** Columns */ + columns: components['schemas']['ColumnOutput'][]; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + /** Materializations */ + materializations: components['schemas']['MaterializationConfigOutput'][]; + /** Parents */ + parents: components['schemas']['NodeNameOutput'][]; + metric_metadata?: components['schemas']['MetricMetadataOutput'] | null; + /** Dimension Links */ + dimension_links?: components['schemas']['LinkDimensionOutput'][]; + /** + * Created At + * Format: date-time + */ + created_at: string; + created_by: components['schemas']['UserNameOnly']; + /** Tags */ + tags?: components['schemas']['TagOutput'][]; + /** Current Version */ + current_version: string; + /** + * Missing Table + * @default false + */ + missing_table: boolean | null; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Owners */ + owners?: components['schemas']['UserNameOnly'][]; + }; + /** + * NodeRevisionBase + * @description A base node revision. + */ + NodeRevisionBase: { + /** Name */ + name: string; + /** Display Name */ + display_name?: string | null; + type: components['schemas']['NodeType']; + /** Description */ + description?: string | null; + /** Query */ + query?: string | null; + /** @default published */ + mode: components['schemas']['NodeMode']; + }; + /** + * NodeRevisionNameVersion + * @description Node name and version + */ + NodeRevisionNameVersion: { + /** Name */ + name: string; + /** Version */ + version: string; + }; + /** + * NodeRevisionOutput + * @description Output for a node revision with information about columns and if it is a metric. + */ + NodeRevisionOutput: { + /** Id */ + id: number; + /** Node Id */ + node_id: number; + type: components['schemas']['NodeType']; + /** Name */ + name: string; + /** Display Name */ + display_name: string; + /** Version */ + version: string; + status: components['schemas']['NodeStatus']; + mode: components['schemas']['NodeMode']; + catalog?: components['schemas']['CatalogInfo-Output'] | null; + /** Schema */ + schema_?: string | null; + /** Table */ + table?: string | null; + /** + * Description + * @default + */ + description: string; + /** Query */ + query?: string | null; + availability?: components['schemas']['AvailabilityStateBase'] | null; + /** Columns */ + columns: components['schemas']['ColumnOutput'][]; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + /** Materializations */ + materializations: components['schemas']['MaterializationConfigOutput'][]; + /** Parents */ + parents: components['schemas']['NodeNameOutput'][]; + metric_metadata?: components['schemas']['MetricMetadataOutput'] | null; + /** Dimension Links */ + dimension_links?: components['schemas']['LinkDimensionOutput'][] | null; + /** Custom Metadata */ + custom_metadata?: Record | null; + }; + /** + * NodeStatus + * @description Node status. + * + * A node can have one of the following statuses: + * + * 1. VALID - All references to other nodes and node columns are valid + * 2. INVALID - One or more parent nodes are incompatible or do not exist + * @enum {string} + */ + NodeStatus: 'valid' | 'invalid'; + /** + * NodeStatusDetails + * @description Node status details. Contains a list of node errors or an empty list of the node status is valid + */ + NodeStatusDetails: { + status: components['schemas']['NodeStatus']; + /** Errors */ + errors: components['schemas']['NodeValidationError'][]; + }; + /** + * NodeType + * @description Node type. + * + * A node can have 4 types, currently: + * + * 1. SOURCE nodes are root nodes in the DAG, and point to tables or views in a DB. + * 2. TRANSFORM nodes are SQL transformations, reading from SOURCE/TRANSFORM nodes. + * 3. METRIC nodes are leaves in the DAG, and have a single aggregation query. + * 4. DIMENSION nodes are special SOURCE nodes that can be auto-joined with METRICS. + * 5. CUBE nodes contain a reference to a set of METRICS and a set of DIMENSIONS. + * @enum {string} + */ + NodeType: 'source' | 'transform' | 'metric' | 'dimension' | 'cube'; + /** + * NodeValidation + * @description A validation of a provided node definition + */ + NodeValidation: { + /** Message */ + message: string; + status: components['schemas']['NodeStatus']; + /** Dependencies */ + dependencies: components['schemas']['NodeRevisionOutput'][]; + /** Columns */ + columns: components['schemas']['ColumnOutput'][]; + /** Errors */ + errors: components['schemas']['DJError'][]; + /** Missing Parents */ + missing_parents: string[]; + }; + /** + * NodeValidationError + * @description Validation error + */ + NodeValidationError: { + /** Type */ + type: string; + /** Message */ + message: string; + }; + /** NotificationPreferenceModel */ + NotificationPreferenceModel: { + entity_type: components['schemas']['EntityType']; + /** Entity Name */ + entity_name: string | null; + /** Activity Types */ + activity_types: components['schemas']['ActivityType'][]; + /** User Id */ + user_id: number; + /** Username */ + username: string; + /** Alert Types */ + alert_types: string[]; + }; + /** + * OAuthProvider + * @description Support oauth providers + * @enum {string} + */ + OAuthProvider: 'basic' | 'github' | 'google'; + /** + * Operation + * @enum {string} + */ + Operation: 'create' | 'update' | 'delete' | 'noop' | 'unknown'; + /** + * PartitionAvailability + * @description Partition-level availability + */ + PartitionAvailability: { + /** Min Temporal Partition */ + min_temporal_partition?: (string | number)[] | null; + /** Max Temporal Partition */ + max_temporal_partition?: (string | number)[] | null; + /** Value */ + value: (string | null)[]; + /** Valid Through Ts */ + valid_through_ts?: number | null; + }; + /** + * PartitionBackfill + * @description Used for setting backfilled values + */ + PartitionBackfill: { + /** Column Name */ + column_name: string; + /** Values */ + values?: unknown[] | null; + /** Range */ + range?: unknown[] | null; + }; + /** + * PartitionInput + * @description Expected settings for specifying a partition column + */ + PartitionInput: { + type_: components['schemas']['PartitionType']; + granularity?: components['schemas']['Granularity'] | null; + /** Format */ + format?: string | null; + }; + /** + * PartitionOutput + * @description Output for partition + */ + PartitionOutput: { + type_: components['schemas']['PartitionType']; + /** Format */ + format?: string | null; + /** Granularity */ + granularity?: string | null; + /** Expression */ + expression?: string | null; + }; + /** + * PartitionSpec + * @description Represents a partition + */ + PartitionSpec: { + type: components['schemas']['PartitionType']; + granularity?: components['schemas']['Granularity'] | null; + /** Format */ + format?: string | null; + }; + /** + * PartitionType + * @description Partition type. + * + * A partition can be temporal or categorical + * @enum {string} + */ + PartitionType: 'temporal' | 'categorical'; + /** + * PlanPreAggregationsRequest + * @description Request model for planning pre-aggregations from metrics + dimensions. + * + * This is the primary way to create pre-aggregations. DJ computes grain groups + * from the metrics/dimensions and creates PreAggregation records with generated SQL. + */ + PlanPreAggregationsRequest: { + /** + * Metrics + * @description List of metric node names (e.g., ['default.revenue', 'default.orders']) + */ + metrics: string[]; + /** + * Dimensions + * @description List of dimension references (e.g., ['default.date_dim.date_id']) + */ + dimensions: string[]; + /** + * Filters + * @description Optional SQL filters to apply + */ + filters?: string[] | null; + /** @description Materialization strategy (FULL or INCREMENTAL_TIME) */ + strategy?: components['schemas']['MaterializationStrategy'] | null; + /** + * Schedule + * @description Cron expression for scheduled materialization + */ + schedule?: string | null; + /** + * Lookback Window + * @description Lookback window for incremental materialization (e.g., '3 days') + */ + lookback_window?: string | null; + }; + /** + * PlanPreAggregationsResponse + * @description Response model for /preaggs/plan endpoint. + */ + PlanPreAggregationsResponse: { + /** Preaggs */ + preaggs: components['schemas']['PreAggregationInfo'][]; + }; + /** + * PreAggMeasure + * @description A metric component stored in a pre-aggregation. + * + * Extends MetricComponent with an expression hash for identity matching. + * This allows finding pre-aggs that contain the same measure even if + * the component name differs. + */ + PreAggMeasure: { + /** Name */ + name: string; + /** Expression */ + expression: string; + /** Aggregation */ + aggregation: string | null; + /** Merge */ + merge?: string | null; + rule: components['schemas']['datajunction_server__models__decompose__AggregationRule']; + /** Expr Hash */ + expr_hash?: string | null; + /** Used By Metrics */ + used_by_metrics?: components['schemas']['MetricRef'][] | null; + }; + /** + * PreAggTableInfo + * @description Information about a pre-agg table used by the cube. + */ + PreAggTableInfo: { + /** + * Table Ref + * @description Full table reference (catalog.schema.table) + */ + table_ref: string; + /** + * Parent Node + * @description Parent node name this pre-agg is derived from + */ + parent_node: string; + /** + * Grain + * @description Grain columns for this pre-agg + */ + grain: string[]; + }; + /** + * PreAggregationInfo + * @description Response model for a pre-aggregation. + */ + PreAggregationInfo: { + /** Id */ + id: number; + /** Node Revision Id */ + node_revision_id: number; + /** Node Name */ + node_name: string; + /** Node Version */ + node_version: string; + /** Grain Columns */ + grain_columns: string[]; + /** Measures */ + measures: components['schemas']['PreAggMeasure'][]; + /** Columns */ + columns?: components['schemas']['V3ColumnMetadata'][] | null; + /** Sql */ + sql: string; + /** Grain Group Hash */ + grain_group_hash: string; + strategy?: components['schemas']['MaterializationStrategy'] | null; + /** Schedule */ + schedule?: string | null; + /** Lookback Window */ + lookback_window?: string | null; + /** Workflow Urls */ + workflow_urls?: components['schemas']['WorkflowUrl'][] | null; + /** Workflow Status */ + workflow_status?: string | null; + /** + * Status + * @default pending + */ + status: string; + /** Materialized Table Ref */ + materialized_table_ref?: string | null; + /** Max Partition */ + max_partition?: string[] | null; + /** Related Metrics */ + related_metrics?: string[] | null; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** Updated At */ + updated_at?: string | null; + }; + /** + * PreAggregationListResponse + * @description Paginated list of pre-aggregations. + */ + PreAggregationListResponse: { + /** Items */ + items: components['schemas']['PreAggregationInfo'][]; + /** Total */ + total: number; + /** Limit */ + limit: number; + /** Offset */ + offset: number; + }; + /** + * PrincipalOutput + * @description Output for a principal (user, service account, or group). + */ + PrincipalOutput: { + /** Username */ + username: string; + /** Email */ + email?: string | null; + }; + /** + * QueryResults + * @description Results for a given query. + */ + QueryResults: components['schemas']['StatementResults'][]; + /** + * QueryState + * @description Different states of a query. + * @enum {string} + */ + QueryState: + | 'UNKNOWN' + | 'ACCEPTED' + | 'SCHEDULED' + | 'RUNNING' + | 'FINISHED' + | 'CANCELED' + | 'FAILED'; + /** + * QueryWithResults + * @description Model for query with results. + */ + QueryWithResults: { + /** Id */ + id: string; + /** Engine Name */ + engine_name?: string | null; + /** Engine Version */ + engine_version?: string | null; + /** Submitted Query */ + submitted_query: string; + /** Executed Query */ + executed_query?: string | null; + /** Scheduled */ + scheduled?: string | null; + /** Started */ + started?: string | null; + /** Finished */ + finished?: string | null; + /** @default UNKNOWN */ + state: components['schemas']['QueryState']; + /** + * Progress + * @default 0 + */ + progress: number; + output_table?: components['schemas']['TableRef'] | null; + results: components['schemas']['QueryResults']; + /** Next */ + next?: string | null; + /** Previous */ + previous?: string | null; + /** + * Errors + * @default [] + */ + errors: string[]; + /** Links */ + links?: string[] | null; + }; + /** + * ResourceAction + * @description Actions that can be performed on resources + * @enum {string} + */ + ResourceAction: 'read' | 'write' | 'execute' | 'delete' | 'manage'; + /** + * ResourceType + * @description Types of resources + * @enum {string} + */ + ResourceType: 'node' | 'namespace'; + /** + * RoleAssignmentCreate + * @description Input for assigning a role to a principal. + */ + RoleAssignmentCreate: { + /** Principal Username */ + principal_username: string; + /** Expires At */ + expires_at?: string | null; + }; + /** + * RoleAssignmentOutput + * @description Output for role assignment. + */ + RoleAssignmentOutput: { + principal: components['schemas']['PrincipalOutput']; + role: components['schemas']['RoleOutput']; + granted_by: components['schemas']['PrincipalOutput']; + /** + * Granted At + * Format: date-time + */ + granted_at: string; + /** Expires At */ + expires_at: string | null; + }; + /** + * RoleCreate + * @description Input for creating a role. + */ + RoleCreate: { + /** Name */ + name: string; + /** Description */ + description?: string | null; + /** Scopes */ + scopes?: components['schemas']['RoleScopeInput'][]; + }; + /** + * RoleOutput + * @description Output for role. + */ + RoleOutput: { + /** Id */ + id: number; + /** Name */ + name: string; + /** Description */ + description: string | null; + created_by: components['schemas']['PrincipalOutput']; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** Deleted At */ + deleted_at?: string | null; + /** Scopes */ + scopes?: components['schemas']['RoleScopeOutput'][]; + }; + /** + * RoleScopeInput + * @description Input for creating a role scope. + */ + RoleScopeInput: { + action: components['schemas']['ResourceAction']; + scope_type: components['schemas']['ResourceType']; + /** Scope Value */ + scope_value: string; + }; + /** + * RoleScopeOutput + * @description Output for role scope. + */ + RoleScopeOutput: { + action: components['schemas']['ResourceAction']; + scope_type: components['schemas']['ResourceType']; + /** Scope Value */ + scope_value: string; + }; + /** + * RoleUpdate + * @description Input for updating a role. + */ + RoleUpdate: { + /** Name */ + name?: string | null; + /** Description */ + description?: string | null; + }; + /** + * RowOutput + * @description Output model for node counts. + */ + RowOutput: { + /** Value */ + value: unknown; + /** Col */ + col: string; + }; + /** + * ServiceAccountCreate + * @description Payload to create a service account + */ + ServiceAccountCreate: { + /** Name */ + name: string; + }; + /** + * ServiceAccountCreateResponse + * @description Response payload for creating a service account + */ + ServiceAccountCreateResponse: { + /** Id */ + id: number; + /** Name */ + name: string; + /** Client Id */ + client_id: string; + /** Client Secret */ + client_secret: string; + }; + /** + * ServiceAccountOutput + * @description Response payload for creating a service account + */ + ServiceAccountOutput: { + /** Id */ + id: number; + /** Name */ + name: string; + /** Client Id */ + client_id: string; + /** + * Created At + * Format: date-time + */ + created_at: string; + }; + /** + * SourceColumnOutput + * @description A column used in creation of a source node + */ + SourceColumnOutput: { + /** Name */ + name: string; + type: components['schemas']['ColumnType']; + /** Attributes */ + attributes?: components['schemas']['AttributeOutput'][] | null; + /** Dimension */ + dimension?: string | null; + }; + /** + * SourceSpec + * @description Specification for a source node + */ + 'SourceSpec-Input': { + /** Name */ + name: string; + /** Namespace */ + namespace?: string | null; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + node_type: 'source'; + /** Owners */ + owners?: string[]; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Tags */ + tags?: string[]; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Columns */ + columns?: components['schemas']['ColumnSpec-Input'][] | null; + /** Dimension Links */ + dimension_links?: ( + | components['schemas']['DimensionJoinLinkSpec-Input'] + | components['schemas']['DimensionReferenceLinkSpec-Input'] + )[]; + /** Primary Key */ + primary_key?: string[]; + /** Catalog */ + catalog: string; + /** Schema */ + schema: string | null; + /** Table */ + table: string; + }; + /** + * SourceSpec + * @description Specification for a source node + */ + 'SourceSpec-Output': { + /** Name */ + name: string; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + node_type: 'source'; + /** Owners */ + owners?: string[]; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Tags */ + tags?: string[]; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Columns */ + columns?: components['schemas']['ColumnSpec-Output'][] | null; + /** Dimension Links */ + dimension_links?: ( + | components['schemas']['DimensionJoinLinkSpec-Output'] + | components['schemas']['DimensionReferenceLinkSpec-Output'] + )[]; + /** Primary Key */ + primary_key?: string[]; + /** Catalog */ + catalog: string; + /** Schema */ + schema: string | null; + /** Table */ + table: string; + }; + /** + * SparkConf + * @description Spark configuration + * @default {} + */ + SparkConf: { + [key: string]: string; + }; + /** + * StatementResults + * @description Results for a given statement. + * + * This contains the SQL, column names and types, and rows + */ + StatementResults: { + /** Sql */ + sql: string; + /** Columns */ + columns: components['schemas']['ColumnMetadata'][]; + /** Rows */ + rows: unknown[][]; + /** + * Row Count + * @default 0 + */ + row_count: number; + }; + /** + * Status + * @enum {string} + */ + Status: 'success' | 'failed' | 'skipped'; + /** + * TableRef + * @description Table reference + */ + TableRef: { + /** Catalog */ + catalog: string; + /** Schema */ + schema: string; + /** Table */ + table: string; + }; + /** + * TagMinimum + * @description Output tag model. + */ + TagMinimum: { + /** Name */ + name: string; + }; + /** + * TagOutput + * @description Output tag model. + */ + TagOutput: { + /** Description */ + description?: string | null; + /** Display Name */ + display_name?: string | null; + /** Tag Metadata */ + tag_metadata?: Record | null; + /** Name */ + name: string; + /** Tag Type */ + tag_type: string; + }; + /** + * TagSpec + * @description Specification for a tag + */ + TagSpec: { + /** Name */ + name: string; + /** Display Name */ + display_name: string; + /** + * Description + * @default + */ + description: string; + /** + * Tag Type + * @default + */ + tag_type: string; + /** Tag Metadata */ + tag_metadata?: Record | null; + }; + /** + * TokenResponse + * @description Response payload for service account login + */ + TokenResponse: { + /** Token */ + token: string; + /** Token Type */ + token_type: string; + /** Expires In */ + expires_in: number; + }; + /** + * TransformSpec + * @description Specification for a transform node + */ + 'TransformSpec-Input': { + /** Name */ + name: string; + /** Namespace */ + namespace?: string | null; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + node_type: 'transform'; + /** Owners */ + owners?: string[]; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Tags */ + tags?: string[]; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Columns */ + columns?: components['schemas']['ColumnSpec-Input'][] | null; + /** Dimension Links */ + dimension_links?: ( + | components['schemas']['DimensionJoinLinkSpec-Input'] + | components['schemas']['DimensionReferenceLinkSpec-Input'] + )[]; + /** Primary Key */ + primary_key?: string[]; + /** Query */ + query: string; + }; + /** + * TransformSpec + * @description Specification for a transform node + */ + 'TransformSpec-Output': { + /** Name */ + name: string; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + node_type: 'transform'; + /** Owners */ + owners?: string[]; + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + /** Tags */ + tags?: string[]; + /** @default published */ + mode: components['schemas']['NodeMode']; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Columns */ + columns?: components['schemas']['ColumnSpec-Output'][] | null; + /** Dimension Links */ + dimension_links?: ( + | components['schemas']['DimensionJoinLinkSpec-Output'] + | components['schemas']['DimensionReferenceLinkSpec-Output'] + )[]; + /** Primary Key */ + primary_key?: string[]; + /** Query */ + query: string; + }; + /** + * TranslatedSQL + * @description Class for SQL generated from a given metric. + */ + TranslatedSQL: { + /** Sql */ + sql: string; + dialect?: components['schemas']['Dialect'] | null; + /** Columns */ + columns?: components['schemas']['ColumnMetadata'][] | null; + /** Upstream Tables */ + upstream_tables?: string[] | null; + }; + /** + * Type + * @enum {string} + */ + Type: 'node' | 'link' | 'tag' | 'general'; + /** + * UniquenessScope + * @description The scope at which this attribute needs to be unique. + * @enum {string} + */ + UniquenessScope: 'node' | 'column_type'; + /** + * Unit + * @description Metric unit + */ + Unit: { + /** Name */ + name: string; + /** Label */ + label?: string | null; + /** Category */ + category?: string | null; + /** Abbreviation */ + abbreviation?: string | null; + /** Description */ + description?: string | null; + }; + /** + * UpdateNode + * @description Update node object where all fields are optional + */ + UpdateNode: { + /** Display Name */ + display_name?: string | null; + /** Description */ + description?: string | null; + mode?: components['schemas']['NodeMode'] | null; + /** Primary Key */ + primary_key?: string[] | null; + /** Custom Metadata */ + custom_metadata?: Record | null; + /** Owners */ + owners?: string[] | null; + /** Catalog */ + catalog?: string | null; + /** Schema */ + schema_?: string | null; + /** Table */ + table?: string | null; + /** Columns */ + columns?: components['schemas']['SourceColumnOutput'][] | null; + /** Missing Table */ + missing_table?: boolean | null; + /** Query */ + query?: string | null; + /** Required Dimensions */ + required_dimensions?: string[] | null; + metric_metadata?: components['schemas']['MetricMetadataInput'] | null; + /** Metrics */ + metrics?: string[] | null; + /** Dimensions */ + dimensions?: string[] | null; + /** Filters */ + filters?: string[] | null; + /** Orderby */ + orderby?: string[] | null; + /** Limit */ + limit?: number | null; + }; + /** + * UpdatePreAggregationAvailabilityRequest + * @description Request model for updating pre-aggregation availability. + */ + UpdatePreAggregationAvailabilityRequest: { + /** + * Catalog + * @description Catalog where materialized table exists + */ + catalog: string; + /** + * Schema + * @description Schema where materialized table exists + */ + schema?: string | null; + /** + * Table + * @description Table name of materialized data + */ + table: string; + /** + * Valid Through Ts + * @description Timestamp (epoch) through which data is valid + */ + valid_through_ts: number; + /** + * Url + * @description URL to materialization job or dashboard + */ + url?: string | null; + /** + * Links + * @description Additional links related to the materialization + */ + links?: Record | null; + /** + * Categorical Partitions + * @description Ordered list of categorical partition columns + */ + categorical_partitions?: string[] | null; + /** + * Temporal Partitions + * @description Ordered list of temporal partition columns + */ + temporal_partitions?: string[] | null; + /** + * Min Temporal Partition + * @description Minimum temporal partition value + */ + min_temporal_partition?: string[] | null; + /** + * Max Temporal Partition + * @description Maximum temporal partition value (high-water mark) + */ + max_temporal_partition?: string[] | null; + /** + * Partitions + * @description Detailed partition-level availability + */ + partitions?: components['schemas']['PartitionAvailability'][] | null; + }; + /** + * UpdatePreAggregationConfigRequest + * @description Request model for updating a pre-aggregation's materialization config. + */ + UpdatePreAggregationConfigRequest: { + /** @description Materialization strategy (FULL or INCREMENTAL_TIME) */ + strategy?: components['schemas']['MaterializationStrategy'] | null; + /** + * Schedule + * @description Cron expression for scheduled materialization + */ + schedule?: string | null; + /** + * Lookback Window + * @description Lookback window for incremental materialization (e.g., '3 days') + */ + lookback_window?: string | null; + }; + /** + * UpdateTag + * @description Update tag model. Only works on mutable fields. + */ + UpdateTag: { + /** Description */ + description?: string | null; + /** Display Name */ + display_name?: string | null; + /** Tag Metadata */ + tag_metadata?: Record | null; + }; + /** + * UpsertCubeMaterialization + * @description An upsert object for cube materializations + */ + UpsertCubeMaterialization: { + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + job: 'druid_cube'; + /** @default incremental_time */ + strategy: components['schemas']['MaterializationStrategy']; + /** Schedule */ + schedule: string; + /** Config */ + config?: Record | null; + /** + * Lookback Window + * @default 1 DAY + */ + lookback_window: string | null; + }; + /** + * UpsertMaterialization + * @description An upsert object for materialization configs + */ + UpsertMaterialization: { + /** Name */ + name?: string | null; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + job: 'spark_sql' | 'druid_measures_cube' | 'druid_metrics_cube'; + /** Config */ + config?: + | components['schemas']['DruidCubeConfigInput'] + | components['schemas']['GenericCubeConfigInput'] + | components['schemas']['GenericMaterializationConfigInput'] + | null; + /** Schedule */ + schedule: string; + strategy: components['schemas']['MaterializationStrategy']; + }; + /** + * UserActivity + * @description User activity info + */ + UserActivity: { + /** Username */ + username: string; + /** Count */ + count: number; + }; + /** + * UserNameOnly + * @description Username only + */ + UserNameOnly: { + /** Username */ + username: string; + }; + /** + * UserOutput + * @description User information to be included in responses + */ + UserOutput: { + /** Id */ + id: number; + /** Username */ + username: string; + /** Email */ + email?: string | null; + /** Name */ + name?: string | null; + oauth_provider: components['schemas']['OAuthProvider']; + /** + * Is Admin + * @default false + */ + is_admin: boolean; + /** Last Viewed Notifications At */ + last_viewed_notifications_at?: string | null; + }; + /** + * V3ColumnMetadata + * @description Simplified column metadata for V3 SQL endpoints. + * + * This is a cleaner version without legacy fields (column, node) that + * V3 doesn't use. Provides clear semantic identification of output columns. + */ + V3ColumnMetadata: { + /** Name */ + name: string; + /** Type */ + type: string; + /** Semantic Entity */ + semantic_entity: string; + /** Semantic Type */ + semantic_type: string; + }; + /** + * V3TranslatedSQL + * @description SQL response model for V3 SQL generation endpoints. + * + * This is a cleaner response model specifically for V3 that: + * - Uses V3ColumnMetadata (no legacy column/node fields) + * - Has required fields (not optional like legacy TranslatedSQL) + */ + V3TranslatedSQL: { + /** Sql */ + sql: string; + /** Columns */ + columns: components['schemas']['V3ColumnMetadata'][]; + dialect: components['schemas']['Dialect']; + }; + /** ValidationError */ + ValidationError: { + /** Location */ + loc: (string | number)[]; + /** Message */ + msg: string; + /** Error Type */ + type: string; + }; + /** + * WorkflowResponse + * @description Response model for workflow operations. + */ + WorkflowResponse: { + /** + * Workflow Url + * @description URL to the scheduled workflow definition + */ + workflow_url?: string | null; + /** + * Status + * @description Workflow status: 'active', 'paused', or 'none' + */ + status: string; + /** + * Message + * @description Additional information about the operation + */ + message?: string | null; + }; + /** + * WorkflowUrl + * @description A labeled workflow URL for scheduler-agnostic display. + */ + WorkflowUrl: { + /** + * Label + * @description Label for the workflow (e.g., 'scheduled', 'backfill') + */ + label: string; + /** + * Url + * @description URL to the workflow + */ + url: string; + }; + /** + * AggregationRule + * @description The aggregation rule for the metric component. + * + * If the Aggregability type is LIMITED, the `level` should be specified to + * highlight the level at which the metric component needs to be aggregated + * in order to support the specified aggregation function. + * + * Example for COUNT(DISTINCT user_id): + * It can be decomposed into a single metric component with LIMITED + * aggregability, i.e., it is only aggregatable if the component is + * calculated at the `user_id` level: + * + * MetricComponent( + * name="num_users", + * expression="DISTINCT user_id", + * aggregation="COUNT", + * rule=AggregationRule(type=LIMITED, level=["user_id"]) + * ) + */ + datajunction_server__models__decompose__AggregationRule: { + /** @default none */ + type: components['schemas']['Aggregability']; + /** Level */ + level?: string[] | null; + }; + /** + * ColumnOutput + * @description A simplified column schema, without ID or dimensions. + */ + datajunction_server__models__measure__ColumnOutput: { + /** Name */ + name: string; + /** Type */ + type: string; + /** Node */ + node: string; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + list_catalogs_catalogs_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CatalogInfo-Output'][]; + }; + }; + }; + }; + Add_A_Catalog_catalogs_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CatalogInfo-Input']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CatalogInfo-Output']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_a_Catalog_catalogs__name__get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CatalogInfo-Output']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Add_Engines_to_a_Catalog_catalogs__name__engines_post: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['EngineInfo'][]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CatalogInfo-Output']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_collections_collections_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CollectionInfo'][]; + }; + }; + }; + }; + create_a_collection_collections_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CollectionInfo']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CollectionInfo']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_collection_collections__name__get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CollectionDetails']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_a_collection_collections__name__delete: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Add_Nodes_to_a_Collection_collections__name__nodes_post: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': string[]; + }; + }; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Delete_Nodes_from_a_Collection_collections__name__remove_post: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': string[]; + }; + }; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_deployments_deployments_get: { + parameters: { + query?: { + namespace?: string | null; + limit?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DeploymentInfo'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Creates_a_bulk_deployment_deployments_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['DeploymentSpec-Input']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DeploymentInfo']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_deployment_status_deployments__deployment_id__get: { + parameters: { + query?: never; + header?: never; + path: { + deployment_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DeploymentInfo']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Preview_deployment_impact_deployments_impact_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['DeploymentSpec-Input']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DeploymentImpactResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_dialects_dialects_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DialectInfo'][]; + }; + }; + }; + }; + list_engines_engines_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['EngineInfo'][]; + }; + }; + }; + }; + Add_An_Engine_engines_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['EngineInfo']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['EngineInfo']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_an_engine_engines__name___version__get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + version: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['EngineInfo']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_metrics_metrics_get: { + parameters: { + query?: { + prefix?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': string[]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_metric_metadata_metrics_metadata_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MetricMetadataOptions']; + }; + }; + }; + }; + get_a_metric_metrics__name__get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['Metric']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_common_dimensions_metrics_common_dimensions_get: { + parameters: { + query?: { + metric?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DimensionAttributeOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_data_for_djsql_djsql_data_get: { + parameters: { + query: { + query: string; + async_?: boolean; + engine_name?: string | null; + engine_version?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['QueryWithResults']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_data_stream_for_djsql_djsql_stream_get: { + parameters: { + query: { + query: string; + engine_name?: string | null; + engine_version?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['QueryWithResults']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + validate_node_nodes_validate_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['NodeRevisionBase']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeValidation']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + revalidate_nodes__name__validate_post: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeStatusDetails']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + set_column_attributes_nodes__node_name__columns__column_name__attributes_post: { + parameters: { + query?: never; + header?: never; + path: { + node_name: string; + column_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['AttributeTypeIdentifier'][]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ColumnOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_nodes_nodes_get: { + parameters: { + query?: { + node_type?: components['schemas']['NodeType'] | null; + prefix?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': string[]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_all_nodes_with_details_nodes_details_get: { + parameters: { + query?: { + node_type?: components['schemas']['NodeType'] | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeIndexItem'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_node_nodes__name__get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_node_nodes__name__delete: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + update_node_nodes__name__patch: { + parameters: { + query?: { + refresh_materialization?: boolean; + }; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['UpdateNode']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Hard_Delete_a_DJ_Node_nodes__name__hard_delete: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + restore_node_nodes__name__restore_post: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_node_revisions_nodes__name__revisions_get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeRevisionOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Create_A_Source_Node_nodes_source_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CreateSourceNode']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Create_A_Metric_Node_nodes_metric_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CreateNode']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Create_A_Dimension_Node_nodes_dimension_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CreateNode']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Create_A_Transform_Node_nodes_transform_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CreateNode']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Create_A_Cube_nodes_cube_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CreateCubeNode']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + register_table_register_table__catalog___schema____table__post: { + parameters: { + query?: { + source_node_namespace?: string | null; + }; + header?: never; + path: { + catalog: string; + schema_: string; + table: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + register_view_register_view__catalog___schema____view__post: { + parameters: { + query: { + query: string; + replace?: boolean; + }; + header?: never; + path: { + catalog: string; + schema_: string; + view: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + link_dimension_nodes__name__columns__column__post: { + parameters: { + query: { + dimension: string; + dimension_column?: string | null; + }; + header?: never; + path: { + name: string; + column: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_dimension_link_nodes__name__columns__column__delete: { + parameters: { + query: { + dimension: string; + dimension_column?: string | null; + }; + header?: never; + path: { + name: string; + column: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + add_reference_dimension_link_nodes__node_name__columns__node_column__link_post: { + parameters: { + query: { + dimension_node: string; + dimension_column: string; + role?: string | null; + }; + header?: never; + path: { + node_name: string; + node_column: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + remove_reference_dimension_link_nodes__node_name__columns__node_column__link_delete: { + parameters: { + query?: never; + header?: never; + path: { + node_name: string; + node_column: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + add_complex_dimension_link_nodes__node_name__link_post: { + parameters: { + query?: never; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['JoinLinkInput']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + remove_complex_dimension_link_nodes__node_name__link_delete: { + parameters: { + query?: never; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['LinkDimensionIdentifier']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Update_Tags_on_Node_nodes__name__tags_post: { + parameters: { + query?: { + tag_names?: string[] | null; + }; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + refresh_source_node_nodes__name__refresh_post: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + calculate_node_similarity_nodes_similarity__node1_name___node2_name__get: { + parameters: { + query?: never; + header?: never; + path: { + node1_name: string; + node2_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + List_Downstream_Nodes_For_A_Node_nodes__name__downstream_get: { + parameters: { + query?: { + node_type?: components['schemas']['NodeType']; + depth?: number; + }; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DAGNodeOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + List_Upstream_Nodes_For_A_Node_nodes__name__upstream_get: { + parameters: { + query?: { + node_type?: components['schemas']['NodeType']; + }; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DAGNodeOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + List_All_Connected_Nodes__Upstreams___Downstreams__nodes__name__dag_get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DAGNodeOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + List_All_Dimension_Attributes_nodes__name__dimensions_get: { + parameters: { + query?: { + depth?: number; + }; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DimensionAttributeOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + List_column_level_lineage_of_node_nodes__name__lineage_get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['LineageColumn'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + set_column_display_name_nodes__node_name__columns__column_name__patch: { + parameters: { + query: { + display_name: string; + }; + header?: never; + path: { + node_name: string; + column_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ColumnOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + set_column_description_nodes__node_name__columns__column_name__description_patch: { + parameters: { + query: { + description: string; + }; + header?: never; + path: { + node_name: string; + column_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ColumnOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Set_Node_Column_as_Partition_nodes__node_name__columns__column_name__partition_post: { + parameters: { + query?: never; + header?: never; + path: { + node_name: string; + column_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['PartitionInput']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ColumnOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Copy_A_Node_nodes__node_name__copy_post: { + parameters: { + query: { + new_name: string; + }; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DAGNodeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_nodes_in_namespace_namespaces__namespace__get: { + parameters: { + query?: { + /** @description Filter the list of nodes to this type */ + type_?: components['schemas']['NodeType'] | null; + /** @description Whether to include a list of users who edited each node */ + with_edited_by?: boolean; + }; + header?: never; + path: { + namespace: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeMinimumDetail'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + create_node_namespace_namespaces__namespace__post: { + parameters: { + query?: { + include_parents?: boolean | null; + }; + header?: never; + path: { + namespace: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + deactivate_a_namespace_namespaces__namespace__delete: { + parameters: { + query?: { + /** @description Cascade the deletion down to the nodes in the namespace */ + cascade?: boolean; + }; + header?: never; + path: { + namespace: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_namespaces_namespaces_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NamespaceOutput'][]; + }; + }; + }; + }; + restore_a_namespace_namespaces__namespace__restore_post: { + parameters: { + query?: { + /** @description Cascade the restore down to the nodes in the namespace */ + cascade?: boolean; + }; + header?: never; + path: { + namespace: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Hard_Delete_a_DJ_Namespace_namespaces__namespace__hard_delete: { + parameters: { + query?: { + cascade?: boolean; + }; + header?: never; + path: { + namespace: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Export_a_namespace_as_a_single_project_s_metadata_namespaces__namespace__export_get: { + parameters: { + query?: never; + header?: never; + path: { + namespace: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': Record[]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Export_namespace_as_a_deployment_specification_namespaces__namespace__export_spec_get: { + parameters: { + query?: never; + header?: never; + path: { + namespace: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DeploymentSpec-Output']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Export_namespace_as_downloadable_YAML_ZIP_namespaces__namespace__export_yaml_get: { + parameters: { + query?: never; + header?: never; + path: { + namespace: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_deployment_sources_for_a_namespace_namespaces__namespace__sources_get: { + parameters: { + query?: never; + header?: never; + path: { + namespace: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NamespaceSourcesResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_deployment_sources_for_multiple_namespaces_namespaces_sources_bulk_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['BulkNamespaceSourcesRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['BulkNamespaceSourcesResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Materialization_Jobs_Info_materialization_info_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + }; + }; + Insert_or_Update_a_Materialization_for_a_Node_nodes__node_name__materialization_post: { + parameters: { + query?: never; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': + | components['schemas']['UpsertCubeMaterialization'] + | components['schemas']['UpsertMaterialization']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + List_Materializations_for_a_Node_nodes__node_name__materializations_get: { + parameters: { + query?: { + show_inactive?: boolean; + include_all_revisions?: boolean; + }; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MaterializationConfigInfoUnified'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Deactivate_a_Materialization_for_a_Node_nodes__node_name__materializations_delete: { + parameters: { + query: { + materialization_name: string; + node_version?: string | null; + }; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Kick_off_a_backfill_run_for_a_configured_materialization_nodes__node_name__materializations__materialization_name__backfill_post: { + parameters: { + query?: never; + header?: never; + path: { + node_name: string; + materialization_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['PartitionBackfill'][]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MaterializationInfo']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + List_All_Availability_States_for_a_Node_nodes__node_name__availability_get: { + parameters: { + query?: never; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['AvailabilityStateInfo'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_measures_measures_get: { + parameters: { + query?: { + prefix?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': string[]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Add_a_Measure_measures_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CreateMeasure']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MeasureOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_measure_measures__measure_name__get: { + parameters: { + query?: never; + header?: never; + path: { + measure_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MeasureOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Edit_a_Measure_measures__measure_name__patch: { + parameters: { + query?: never; + header?: never; + path: { + measure_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['EditMeasure']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MeasureOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_frozen_measures_frozen_measures_get: { + parameters: { + query?: { + prefix?: string | null; + aggregation?: string | null; + upstream_name?: string | null; + upstream_version?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['FrozenMeasureOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Add_Availability_State_to_Node_data__node_name__availability_post: { + parameters: { + query?: never; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['AvailabilityStateBase']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Remove_Availability_State_from_Node_data__node_name__availability_delete: { + parameters: { + query?: never; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_Data_for_a_Node_data__node_name__get: { + parameters: { + query?: { + /** @description Dimensional attributes to group by */ + dimensions?: string[]; + /** @description Filters on dimensional attributes */ + filters?: string[]; + /** @description Expression to order by */ + orderby?: string[]; + /** @description Number of rows to limit the data retrieved to */ + limit?: number | null; + /** @description Whether to run the query async or wait for results from the query engine */ + async_?: boolean; + /** @description Whether to use materialized nodes when available */ + use_materialized?: boolean; + /** @description Whether to ignore errors when building the query */ + ignore_errors?: boolean; + /** @description Query parameters */ + query_params?: string; + engine_name?: string | null; + engine_version?: string | null; + }; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['QueryWithResults']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_data_stream_for_node_stream__node_name__get: { + parameters: { + query?: { + /** @description Dimensional attributes to group by */ + dimensions?: string[]; + /** @description Filters on dimensional attributes */ + filters?: string[]; + /** @description Expression to order by */ + orderby?: string[]; + /** @description Number of rows to limit the data retrieved to */ + limit?: number | null; + /** @description Query parameters */ + query_params?: string; + engine_name?: string | null; + engine_version?: string | null; + }; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['QueryWithResults']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_Data_For_Query_ID_data_query__query_id__get: { + parameters: { + query?: never; + header?: never; + path: { + query_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['QueryWithResults']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_Data_For_Metrics_data_get: { + parameters: { + query?: { + metrics?: string[]; + dimensions?: string[]; + filters?: string[]; + orderby?: string[]; + limit?: number | null; + /** @description Query parameters */ + query_params?: string; + async_?: boolean; + engine_name?: string | null; + engine_version?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['QueryWithResults']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_data_stream_for_metrics_stream_get: { + parameters: { + query?: { + metrics?: string[]; + dimensions?: string[]; + filters?: string[]; + orderby?: string[]; + limit?: number | null; + engine_name?: string | null; + engine_version?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['QueryWithResults']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + health_check_health__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HealthCheck'][]; + }; + }; + }; + }; + list_history_history__entity_type___entity_name__get: { + parameters: { + query?: { + offset?: number; + limit?: number; + }; + header?: never; + path: { + entity_type: components['schemas']['EntityType']; + entity_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HistoryOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_history_by_node_context_history_get: { + parameters: { + query?: { + node?: string | null; + only_subscribed?: boolean; + offset?: number; + limit?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HistoryOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_all_Cubes_cubes_get: { + parameters: { + query?: { + /** @description Filter to include only cubes available in a specific catalog */ + catalog?: string | null; + /** @description Page number (starting from 1) */ + page?: number; + /** @description Number of items per page (max 1000) */ + page_size?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CubeRevisionMetadata'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_a_Cube_cubes__name__get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CubeRevisionMetadata']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_a_Cube_Revision_cubes__name__versions__version__get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + version: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CubeRevisionMetadata']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Cube_Materialization_Config_cubes__name__materialization_get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DruidCubeMaterializationInput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Dimensions_SQL_for_Cube_cubes__name__dimensions_sql_get: { + parameters: { + query?: { + /** @description Dimensions to get values for */ + dimensions?: string[]; + /** @description Filters on dimensional attributes */ + filters?: string | null; + /** @description Number of rows to limit the data retrieved to */ + limit?: number | null; + include_counts?: boolean; + }; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['TranslatedSQL']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Dimensions_Values_for_Cube_cubes__name__dimensions_data_get: { + parameters: { + query?: { + /** @description Dimensions to get values for */ + dimensions?: string[]; + /** @description Filters on dimensional attributes */ + filters?: string | null; + /** @description Number of rows to limit the data retrieved to */ + limit?: number | null; + include_counts?: boolean; + async_?: boolean; + }; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DimensionValues']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Materialize_Cube_to_Druid_cubes__name__materialize_post: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CubeMaterializeRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CubeMaterializeResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Deactivate_Cube_Materialization_cubes__name__materialize_delete: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Run_Cube_Backfill_cubes__name__backfill_post: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['BackfillRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['BackfillResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_tags_tags_get: { + parameters: { + query?: { + tag_type?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['TagOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + create_a_tag_tags_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['CreateTag']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['TagOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_a_tag_tags__name__get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['TagOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + update_a_tag_tags__name__patch: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['UpdateTag']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['TagOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_nodes_for_a_tag_tags__name__nodes_get: { + parameters: { + query?: { + node_type?: components['schemas']['NodeType'] | null; + }; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeMinimumDetail'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_attributes_attributes_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['AttributeTypeBase'][]; + }; + }; + }; + }; + Add_an_Attribute_Type_attributes_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['MutableAttributeTypeFields']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['AttributeTypeBase']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_Measures_SQL_sql_measures_v2_get: { + parameters: { + query?: { + metrics?: string[]; + dimensions?: string[]; + filters?: string[]; + orderby?: string[]; + /** @description Whether to pre-aggregate to the requested dimensions so that subsequent queries are more efficient. */ + preaggregate?: boolean; + /** @description Query parameters */ + query_params?: string; + /** @description Whether to include all columns or only those necessary for the metrics and dimensions in the cube */ + include_all_columns?: boolean; + engine_name?: string | null; + engine_version?: string | null; + use_materialized?: boolean; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['GeneratedSQL'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_SQL_For_A_Node_sql__node_name__get: { + parameters: { + query?: { + dimensions?: string[]; + filters?: string[]; + orderby?: string[]; + limit?: number | null; + /** @description Query parameters */ + query_params?: string; + engine_name?: string | null; + engine_version?: string | null; + ignore_errors?: boolean | null; + use_materialized?: boolean | null; + }; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['TranslatedSQL']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_Measures_SQL_V3_sql_measures_v3_get: { + parameters: { + query?: { + metrics?: string[]; + dimensions?: string[]; + filters?: string[]; + use_materialized?: boolean; + /** @description SQL dialect for the generated query. */ + dialect?: components['schemas']['Dialect']; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['MeasuresSQLResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_Combined_Measures_SQL_V3_sql_measures_v3_combined_get: { + parameters: { + query?: { + metrics?: string[]; + dimensions?: string[]; + filters?: string[]; + /** @description If False (default), compute from scratch using source tables. If True, compute from pre-aggregation tables */ + use_preagg_tables?: boolean; + /** @description SQL dialect for the generated query. */ + dialect?: components['schemas']['Dialect']; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['CombinedMeasuresSQLResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_Metrics_SQL_V3_sql_metrics_v3_get: { + parameters: { + query?: { + metrics?: string[]; + dimensions?: string[]; + filters?: string[]; + use_materialized?: boolean; + /** @description SQL dialect for the generated query. */ + dialect?: components['schemas']['Dialect']; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['V3TranslatedSQL']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_SQL_For_Metrics_sql_get: { + parameters: { + query?: { + metrics?: string[]; + dimensions?: string[]; + filters?: string[]; + orderby?: string[]; + limit?: number | null; + /** @description Query parameters */ + query_params?: string; + engine_name?: string | null; + engine_version?: string | null; + ignore_errors?: boolean | null; + use_materialized?: boolean | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['TranslatedSQL']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + client_code_for_creating_node_datajunction_clients_python_new_node__node_name__get: { + parameters: { + query?: { + include_client_setup?: boolean; + replace_namespace?: string | null; + }; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': string; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + client_code_for_dimension_links_on_node_datajunction_clients_python_dimension_links__node_name__get: { + parameters: { + query?: { + include_client_setup?: boolean; + replace_namespace?: string | null; + }; + header?: never; + path: { + node_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': string; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + client_code_for_adding_materialization_datajunction_clients_python_add_materialization__node_name___materialization_name__get: { + parameters: { + query?: never; + header?: never; + path: { + node_name: string; + materialization_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': string; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + notebook_for_exporting_nodes_datajunction_clients_python_notebook_get: { + parameters: { + query?: { + namespace?: string | null; + cube?: string | null; + include_dimensions?: boolean; + include_sources?: boolean; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_dimensions_dimensions_get: { + parameters: { + query?: { + prefix?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeIndegreeOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + find_nodes_with_dimension_dimensions__name__nodes_get: { + parameters: { + query?: { + node_type?: components['schemas']['NodeType'][]; + }; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeNameOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + find_nodes_with_common_dimensions_dimensions_common_get: { + parameters: { + query?: { + dimension?: string[]; + node_type?: components['schemas']['NodeType'][]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeNameOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_all_hierarchies_hierarchies_get: { + parameters: { + query?: { + /** @description Maximum number of hierarchies to return */ + limit?: number; + /** @description Number of hierarchies to skip */ + offset?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HierarchyInfo'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + create_hierarchy_hierarchies_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['HierarchyCreateRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HierarchyOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_dimension_hierarchies_nodes__dimension__hierarchies_get: { + parameters: { + query?: never; + header?: never; + path: { + dimension: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DimensionHierarchiesResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_hierarchy_hierarchies__name__get: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HierarchyOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + update_hierarchy_hierarchies__name__put: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['HierarchyUpdateRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HierarchyOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_hierarchy_hierarchies__name__delete: { + parameters: { + query?: never; + header?: never; + path: { + name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + handle_http_get_graphql_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The GraphiQL integrated development environment. */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Not found if GraphiQL or query via GET are not enabled. */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + handle_http_post_graphql_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + }; + }; + whoami_whoami_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + }; + }; + get_short_lived_token_token_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + }; + }; + list_nodes_by_username_users__username__get: { + parameters: { + query?: { + activity_types?: string[]; + }; + header?: never; + path: { + username: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NodeMinimumDetail'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_users_with_activity_users_get: { + parameters: { + query?: { + with_activity?: boolean; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': ( + | string + | components['schemas']['UserActivity'] + )[]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_groups_groups_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['GroupOutput'][]; + }; + }; + }; + }; + register_group_groups_post: { + parameters: { + query: { + username: string; + email?: string | null; + name?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['GroupOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_group_groups__group_name__get: { + parameters: { + query?: never; + header?: never; + path: { + group_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['GroupOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_group_members_groups__group_name__members_get: { + parameters: { + query?: never; + header?: never; + path: { + group_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['UserOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + add_group_member_groups__group_name__members_post: { + parameters: { + query: { + member_username: string; + }; + header?: never; + path: { + group_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': Record; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + remove_group_member_groups__group_name__members__member_username__delete: { + parameters: { + query?: never; + header?: never; + path: { + group_name: string; + member_username: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_roles_roles_get: { + parameters: { + query?: { + limit?: number; + offset?: number; + include_deleted?: boolean; + created_by_id?: number | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RoleOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + create_role_roles_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['RoleCreate']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RoleOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_role_roles__role_name__get: { + parameters: { + query?: { + include_deleted?: boolean; + }; + header?: never; + path: { + role_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RoleOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_role_roles__role_name__delete: { + parameters: { + query?: never; + header?: never; + path: { + role_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + update_role_roles__role_name__patch: { + parameters: { + query?: never; + header?: never; + path: { + role_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['RoleUpdate']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RoleOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_role_scopes_roles__role_name__scopes_get: { + parameters: { + query?: never; + header?: never; + path: { + role_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RoleScopeOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + add_scope_to_role_roles__role_name__scopes_post: { + parameters: { + query?: never; + header?: never; + path: { + role_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['RoleScopeInput']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RoleScopeOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_scope_from_role_roles__role_name__scopes__action___scope_type___scope_value__delete: { + parameters: { + query?: never; + header?: never; + path: { + role_name: string; + action: components['schemas']['ResourceAction']; + scope_type: components['schemas']['ResourceType']; + scope_value: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + assign_role_to_principal_roles__role_name__assign_post: { + parameters: { + query?: never; + header?: never; + path: { + role_name: string; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['RoleAssignmentCreate']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RoleAssignmentOutput']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_role_assignments_roles__role_name__assignments_get: { + parameters: { + query?: { + limit?: number; + offset?: number; + }; + header?: never; + path: { + role_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RoleAssignmentOutput'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + revoke_role_from_principal_roles__role_name__assignments__principal_username__delete: { + parameters: { + query?: never; + header?: never; + path: { + role_name: string; + principal_username: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + create_a_user_basic_user__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/x-www-form-urlencoded': components['schemas']['Body_create_a_user_basic_user__post']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + login_basic_login__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/x-www-form-urlencoded': components['schemas']['Body_login_basic_login__post']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + logout_logout__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + }; + }; + subscribe_notifications_subscribe_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['Body_subscribe_notifications_subscribe_post']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + unsubscribe_notifications_unsubscribe_delete: { + parameters: { + query: { + entity_type: components['schemas']['EntityType']; + entity_name: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_preferences_notifications_get: { + parameters: { + query?: { + entity_name?: string | null; + entity_type?: components['schemas']['EntityType'] | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['NotificationPreferenceModel'][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_users_for_notification_notifications_users_get: { + parameters: { + query: { + entity_name: string; + entity_type: components['schemas']['EntityType']; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': string[]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + mark_notifications_read_notifications_mark_read_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + }; + }; + List_Pre_aggregations_preaggs_get: { + parameters: { + query?: { + /** @description Filter by node name */ + node_name?: string | null; + /** @description Filter by node version (requires node_name) */ + node_version?: string | null; + /** @description Comma-separated grain columns to match */ + grain?: string | null; + /** @description Grain matching mode: 'exact' (default) or 'superset' (pre-agg contains all requested + maybe more) */ + grain_mode?: components['schemas']['GrainMode']; + /** @description Filter by grain group hash */ + grain_group_hash?: string | null; + /** @description Comma-separated measures (pre-agg must contain ALL) */ + measures?: string | null; + /** @description Filter by status: 'pending' or 'active' */ + status?: string | null; + /** @description Include pre-aggs from older node versions (stale) */ + include_stale?: boolean; + limit?: number; + offset?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PreAggregationListResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Get_Pre_aggregation_by_ID_preaggs__preagg_id__get: { + parameters: { + query?: never; + header?: never; + path: { + preagg_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PreAggregationInfo']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Plan_Pre_aggregations_preaggs_plan_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['PlanPreAggregationsRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PlanPreAggregationsResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Materialize_Pre_aggregation_preaggs__preagg_id__materialize_post: { + parameters: { + query?: never; + header?: never; + path: { + preagg_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PreAggregationInfo']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Update_Pre_aggregation_Config_preaggs__preagg_id__config_patch: { + parameters: { + query?: never; + header?: never; + path: { + preagg_id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['UpdatePreAggregationConfigRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PreAggregationInfo']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Deactivate_Scheduled_Workflow_preaggs__preagg_id__workflow_delete: { + parameters: { + query?: never; + header?: never; + path: { + preagg_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['WorkflowResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Bulk_Deactivate_Workflows_preaggs_workflows_delete: { + parameters: { + query: { + /** @description Node name to deactivate workflows for (required) */ + node_name: string; + /** @description If true, only deactivate workflows for stale pre-aggs (pre-aggs built for non-current node versions) */ + stale_only?: boolean; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['BulkDeactivateWorkflowsResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Run_Backfill_preaggs__preagg_id__backfill_post: { + parameters: { + query?: never; + header?: never; + path: { + preagg_id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['BackfillRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['BackfillResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + Update_Pre_aggregation_Availability_preaggs__preagg_id__availability_post: { + parameters: { + query?: never; + header?: never; + path: { + preagg_id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['UpdatePreAggregationAvailabilityRequest']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['PreAggregationInfo']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_service_accounts_service_accounts_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ServiceAccountOutput'][]; + }; + }; + }; + }; + create_service_account_service_accounts_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/json': components['schemas']['ServiceAccountCreate']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['ServiceAccountCreateResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + delete_service_account_service_accounts__client_id__delete: { + parameters: { + query?: never; + header?: never; + path: { + client_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + service_account_token_service_accounts_token_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + 'application/x-www-form-urlencoded': components['schemas']['Body_service_account_token_service_accounts_token_post']; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['TokenResponse']; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + list_system_metrics_system_metrics_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': unknown; + }; + }; + }; + }; + get_data_for_system_metric_system_data__metric_name__get: { + parameters: { + query?: { + dimensions?: string[]; + filters?: string[]; + orderby?: string[]; + limit?: number | null; + }; + header?: never; + path: { + metric_name: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['RowOutput'][][]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['HTTPValidationError']; + }; + }; + }; + }; + get_dimensions_stats_system_dimensions_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + 'application/json': components['schemas']['DimensionStats'][]; + }; + }; + }; + }; +} diff --git a/datajunction-ui/yarn.lock b/datajunction-ui/yarn.lock index fd2ad3125..d4562c1bb 100644 --- a/datajunction-ui/yarn.lock +++ b/datajunction-ui/yarn.lock @@ -21,6 +21,22 @@ jsonpointer "^5.0.0" leven "^3.1.0" +"@ardatan/relay-compiler@^12.0.3": + version "12.0.3" + resolved "https://registry.yarnpkg.com/@ardatan/relay-compiler/-/relay-compiler-12.0.3.tgz#a60824672da7f7cef2a3879ed833b120d292fa08" + integrity sha512-mBDFOGvAoVlWaWqs3hm1AciGHSQE1rqFc/liZTyYz/Oek9yZdT5H26pH2zAFuEiTiBVPPyMuqf5VjOFPI2DGsQ== + dependencies: + "@babel/generator" "^7.26.10" + "@babel/parser" "^7.26.10" + "@babel/runtime" "^7.26.10" + chalk "^4.0.0" + fb-watchman "^2.0.0" + immutable "~3.7.6" + invariant "^2.2.4" + nullthrows "^1.1.1" + relay-runtime "12.0.0" + signedsource "^1.0.0" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.27.1", "@babel/code-frame@^7.8.3": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" @@ -30,11 +46,25 @@ js-tokens "^4.0.0" picocolors "^1.1.1" +"@babel/code-frame@^7.26.2", "@babel/code-frame@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.28.6.tgz#72499312ec58b1e2245ba4a4f550c132be4982f7" + integrity sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q== + dependencies: + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" + "@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== +"@babel/compat-data@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.6.tgz#103f466803fa0f059e82ccac271475470570d74c" + integrity sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg== + "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.18.2", "@babel/core@^7.23.9", "@babel/core@^7.7.2", "@babel/core@^7.8.0": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" @@ -56,6 +86,27 @@ json5 "^2.2.3" semver "^6.3.1" +"@babel/core@^7.26.10": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.6.tgz#531bf883a1126e53501ba46eb3bb414047af507f" + integrity sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/generator" "^7.28.6" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helpers" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/eslint-parser@^7.16.3": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.28.5.tgz#0b8883a4a1c2cbed7b3cd9d7765d80e8f480b9ae" @@ -65,6 +116,17 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.1" +"@babel/generator@^7.18.13", "@babel/generator@^7.26.10", "@babel/generator@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.6.tgz#48dcc65d98fcc8626a48f72b62e263d25fc3c3f1" + integrity sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw== + dependencies: + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + "@babel/generator@^7.28.5", "@babel/generator@^7.7.2": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" @@ -94,6 +156,17 @@ lru-cache "^5.1.1" semver "^6.3.1" +"@babel/helper-compilation-targets@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz#32c4a3f41f12ed1532179b108a4d746e105c2b25" + integrity sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA== + dependencies: + "@babel/compat-data" "^7.28.6" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3", "@babel/helper-create-class-features-plugin@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz#472d0c28028850968979ad89f173594a6995da46" @@ -148,6 +221,14 @@ "@babel/traverse" "^7.27.1" "@babel/types" "^7.27.1" +"@babel/helper-module-imports@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz#60632cbd6ffb70b22823187201116762a03e2d5c" + integrity sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw== + dependencies: + "@babel/traverse" "^7.28.6" + "@babel/types" "^7.28.6" + "@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": version "7.28.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" @@ -157,6 +238,15 @@ "@babel/helper-validator-identifier" "^7.27.1" "@babel/traverse" "^7.28.3" +"@babel/helper-module-transforms@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz#9312d9d9e56edc35aeb6e95c25d4106b50b9eb1e" + integrity sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA== + dependencies: + "@babel/helper-module-imports" "^7.28.6" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.6" + "@babel/helper-optimise-call-expression@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" @@ -169,6 +259,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== +"@babel/helper-plugin-utils@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz#6f13ea251b68c8532e985fd532f28741a8af9ac8" + integrity sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug== + "@babel/helper-remap-async-to-generator@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" @@ -227,6 +322,14 @@ "@babel/template" "^7.27.2" "@babel/types" "^7.28.4" +"@babel/helpers@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.6.tgz#fca903a313ae675617936e8998b814c415cbf5d7" + integrity sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw== + dependencies: + "@babel/template" "^7.28.6" + "@babel/types" "^7.28.6" + "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" @@ -234,6 +337,13 @@ dependencies: "@babel/types" "^7.28.5" +"@babel/parser@^7.26.10", "@babel/parser@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.6.tgz#f01a8885b7fa1e56dd8a155130226cd698ef13fd" + integrity sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ== + dependencies: + "@babel/types" "^7.28.6" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" @@ -380,6 +490,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz#ae9bc1923a6ba527b70104dd2191b0cd872c8507" + integrity sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw== + dependencies: + "@babel/helper-plugin-utils" "^7.28.6" + "@babel/plugin-syntax-import-assertions@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" @@ -1081,11 +1198,25 @@ dependencies: core-js-pure "^3.43.0" +"@babel/runtime@^7.0.0", "@babel/runtime@^7.26.10": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.6.tgz#d267a43cb1836dc4d182cce93ae75ba954ef6d2b" + integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA== + "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.3", "@babel/runtime@^7.18.6", "@babel/runtime@^7.18.9", "@babel/runtime@^7.28.4", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== +"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" + integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" + "@babel/template@^7.27.1", "@babel/template@^7.27.2", "@babel/template@^7.3.3": version "7.27.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" @@ -1095,6 +1226,19 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" +"@babel/traverse@^7.26.10", "@babel/traverse@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.6.tgz#871ddc79a80599a5030c53b1cc48cbe3a5583c2e" + integrity sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/generator" "^7.28.6" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.6" + "@babel/template" "^7.28.6" + "@babel/types" "^7.28.6" + debug "^4.3.1" + "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5", "@babel/traverse@^7.7.2": version "7.28.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" @@ -1116,6 +1260,14 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.28.5" +"@babel/types@^7.18.13", "@babel/types@^7.26.10", "@babel/types@^7.28.6": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.6.tgz#c3e9377f1b155005bcc4c46020e7e394e13089df" + integrity sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1690,6 +1842,32 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== +"@envelop/core@^5.2.3", "@envelop/core@^5.3.0", "@envelop/core@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@envelop/core/-/core-5.4.0.tgz#e79b8da5ab4f05eccd9758435df3dc50b11e607d" + integrity sha512-/1fat63pySE8rw/dZZArEVytLD90JApY85deDJ0/34gm+yhQ3k70CloSUevxoOE4YCGveG3s9SJJfQeeB4NAtQ== + dependencies: + "@envelop/instrumentation" "^1.0.0" + "@envelop/types" "^5.2.1" + "@whatwg-node/promise-helpers" "^1.2.4" + tslib "^2.5.0" + +"@envelop/instrumentation@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@envelop/instrumentation/-/instrumentation-1.0.0.tgz#43268392e065d8ba975cacbdf4fc297dfe3e11e5" + integrity sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw== + dependencies: + "@whatwg-node/promise-helpers" "^1.2.1" + tslib "^2.5.0" + +"@envelop/types@^5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@envelop/types/-/types-5.2.1.tgz#6bc9713f2aea56d7de3ea39e8bb70035c0475b36" + integrity sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg== + dependencies: + "@whatwg-node/promise-helpers" "^1.0.0" + tslib "^2.5.0" + "@eslint-community/eslint-utils@^4.2.0": version "4.9.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" @@ -1722,6 +1900,11 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== +"@fastify/busboy@^3.1.1": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-3.2.0.tgz#13ed8212f3b9ba697611529d15347f8528058cea" + integrity sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA== + "@floating-ui/core@^1.7.3": version "1.7.3" resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.7.3.tgz#462d722f001e23e46d86fd2bd0d21b7693ccb8b7" @@ -1742,6 +1925,550 @@ resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.10.tgz#a2a1e3812d14525f725d011a73eceb41fef5bc1c" integrity sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ== +"@graphql-codegen/add@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@graphql-codegen/add/-/add-6.0.0.tgz#d195051d7c4bd6d3955a92361cc9eec7784bb541" + integrity sha512-biFdaURX0KTwEJPQ1wkT6BRgNasqgQ5KbCI1a3zwtLtO7XTo7/vKITPylmiU27K5DSOWYnY/1jfSqUAEBuhZrQ== + dependencies: + "@graphql-codegen/plugin-helpers" "^6.0.0" + tslib "~2.6.0" + +"@graphql-codegen/cli@6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@graphql-codegen/cli/-/cli-6.1.1.tgz#2bd7c14267e53b570039926b2a837b281fc78de2" + integrity sha512-Ni8UdZ6D/UTvLvDtPb6PzshI0lTqtLDnmv/2t1w2SYP92H0MMEdAzxB/ujDWwIXm2LzVPvvrGvzzCTMsyXa+mA== + dependencies: + "@babel/generator" "^7.18.13" + "@babel/template" "^7.18.10" + "@babel/types" "^7.18.13" + "@graphql-codegen/client-preset" "^5.2.0" + "@graphql-codegen/core" "^5.0.0" + "@graphql-codegen/plugin-helpers" "^6.1.0" + "@graphql-tools/apollo-engine-loader" "^8.0.0" + "@graphql-tools/code-file-loader" "^8.0.0" + "@graphql-tools/git-loader" "^8.0.0" + "@graphql-tools/github-loader" "^9.0.0" + "@graphql-tools/graphql-file-loader" "^8.0.0" + "@graphql-tools/json-file-loader" "^8.0.0" + "@graphql-tools/load" "^8.1.0" + "@graphql-tools/url-loader" "^9.0.0" + "@graphql-tools/utils" "^10.0.0" + "@inquirer/prompts" "^7.8.2" + "@whatwg-node/fetch" "^0.10.0" + chalk "^4.1.0" + cosmiconfig "^9.0.0" + debounce "^2.0.0" + detect-indent "^6.0.0" + graphql-config "^5.1.1" + is-glob "^4.0.1" + jiti "^2.3.0" + json-to-pretty-yaml "^1.2.2" + listr2 "^9.0.0" + log-symbols "^4.0.0" + micromatch "^4.0.5" + shell-quote "^1.7.3" + string-env-interpolation "^1.0.1" + ts-log "^2.2.3" + tslib "^2.4.0" + yaml "^2.3.1" + yargs "^17.0.0" + +"@graphql-codegen/client-preset@^5.2.0": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@graphql-codegen/client-preset/-/client-preset-5.2.2.tgz#8a8bae0b0490bb73a6d81a99bc6d7e5d1b169fee" + integrity sha512-1xufIJZr04ylx0Dnw49m8Jrx1s1kujUNVm+Tp5cPRsQmgPN9VjB7wWY7CGD8ArStv6Vjb0a31Xnm5I+VzZM+Rw== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/template" "^7.20.7" + "@graphql-codegen/add" "^6.0.0" + "@graphql-codegen/gql-tag-operations" "5.1.2" + "@graphql-codegen/plugin-helpers" "^6.1.0" + "@graphql-codegen/typed-document-node" "^6.1.5" + "@graphql-codegen/typescript" "^5.0.7" + "@graphql-codegen/typescript-operations" "^5.0.7" + "@graphql-codegen/visitor-plugin-common" "^6.2.2" + "@graphql-tools/documents" "^1.0.0" + "@graphql-tools/utils" "^10.0.0" + "@graphql-typed-document-node/core" "3.2.0" + tslib "~2.6.0" + +"@graphql-codegen/core@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@graphql-codegen/core/-/core-5.0.0.tgz#c3fd07226a3cd2f75c80896c127adc191f42e179" + integrity sha512-vLTEW0m8LbE4xgRwbFwCdYxVkJ1dBlVJbQyLb9Q7bHnVFgHAP982Xo8Uv7FuPBmON+2IbTjkCqhFLHVZbqpvjQ== + dependencies: + "@graphql-codegen/plugin-helpers" "^6.0.0" + "@graphql-tools/schema" "^10.0.0" + "@graphql-tools/utils" "^10.0.0" + tslib "~2.6.0" + +"@graphql-codegen/gql-tag-operations@5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-5.1.2.tgz#02ede77db4ab959b3b8a8fe5e5d974283f391d1e" + integrity sha512-BIv66VJ2bKlpfXBeVakJxihBSKnBIdGFLMaFdnGPxqYlKIzaGffjsGbhViPwwBinmBChW4Se6PU4Py7eysYEiA== + dependencies: + "@graphql-codegen/plugin-helpers" "^6.1.0" + "@graphql-codegen/visitor-plugin-common" "6.2.2" + "@graphql-tools/utils" "^10.0.0" + auto-bind "~4.0.0" + tslib "~2.6.0" + +"@graphql-codegen/plugin-helpers@^6.0.0", "@graphql-codegen/plugin-helpers@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@graphql-codegen/plugin-helpers/-/plugin-helpers-6.1.0.tgz#251d76dac2801a4baaef5613b9a22698c1218c47" + integrity sha512-JJypehWTcty9kxKiqH7TQOetkGdOYjY78RHlI+23qB59cV2wxjFFVf8l7kmuXS4cpGVUNfIjFhVr7A1W7JMtdA== + dependencies: + "@graphql-tools/utils" "^10.0.0" + change-case-all "1.0.15" + common-tags "1.8.2" + import-from "4.0.0" + lodash "~4.17.0" + tslib "~2.6.0" + +"@graphql-codegen/schema-ast@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@graphql-codegen/schema-ast/-/schema-ast-5.0.0.tgz#9708d7484a01bb3a502685126708d7b139fd0721" + integrity sha512-jn7Q3PKQc0FxXjbpo9trxzlz/GSFQWxL042l0iC8iSbM/Ar+M7uyBwMtXPsev/3Razk+osQyreghIz0d2+6F7Q== + dependencies: + "@graphql-codegen/plugin-helpers" "^6.0.0" + "@graphql-tools/utils" "^10.0.0" + tslib "~2.6.0" + +"@graphql-codegen/typed-document-node@^6.1.5": + version "6.1.5" + resolved "https://registry.yarnpkg.com/@graphql-codegen/typed-document-node/-/typed-document-node-6.1.5.tgz#e8d545d42875885a776b9cad9649d07137bfdf59" + integrity sha512-6dgEPz+YRMzSPpATj7tsKh/L6Y8OZImiyXIUzvSq/dRAEgoinahrES5y/eZQyc7CVxfoFCyHF9KMQQ9jiLn7lw== + dependencies: + "@graphql-codegen/plugin-helpers" "^6.1.0" + "@graphql-codegen/visitor-plugin-common" "6.2.2" + auto-bind "~4.0.0" + change-case-all "1.0.15" + tslib "~2.6.0" + +"@graphql-codegen/typescript-operations@5.0.7", "@graphql-codegen/typescript-operations@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript-operations/-/typescript-operations-5.0.7.tgz#a8a00dd24362e4dd0472abb61b4d0f1a2623992a" + integrity sha512-5N3myNse1putRQlp8+l1k9ayvc98oq2mPJx0zN8MTOlTBxcb2grVPFRLy5wJJjuv9NffpyCkVJ9LvUaf8mqQgg== + dependencies: + "@graphql-codegen/plugin-helpers" "^6.1.0" + "@graphql-codegen/typescript" "^5.0.7" + "@graphql-codegen/visitor-plugin-common" "6.2.2" + auto-bind "~4.0.0" + tslib "~2.6.0" + +"@graphql-codegen/typescript@5.0.7", "@graphql-codegen/typescript@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@graphql-codegen/typescript/-/typescript-5.0.7.tgz#fe739ff8d32598cadf66f965d477ae79b8eed5c0" + integrity sha512-kZwcu9Iat5RWXxLGPnDbG6qVbGTigF25/aGqCG/DCQ1Al8RufSjVXhIOkJBp7QWAqXn3AupHXL1WTMXP7xs4dQ== + dependencies: + "@graphql-codegen/plugin-helpers" "^6.1.0" + "@graphql-codegen/schema-ast" "^5.0.0" + "@graphql-codegen/visitor-plugin-common" "6.2.2" + auto-bind "~4.0.0" + tslib "~2.6.0" + +"@graphql-codegen/visitor-plugin-common@6.2.2", "@graphql-codegen/visitor-plugin-common@^6.2.2": + version "6.2.2" + resolved "https://registry.yarnpkg.com/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-6.2.2.tgz#5286bf7577baf44cc75a9162905f729ff5f5a3ab" + integrity sha512-wEJ4zJj58PKlXISItZfr0xIHyM1lAuRfoflPegsb1L17Mx5+YzNOy0WAlLele3yzyV89WvCiprFKMcVQ7KfDXg== + dependencies: + "@graphql-codegen/plugin-helpers" "^6.1.0" + "@graphql-tools/optimize" "^2.0.0" + "@graphql-tools/relay-operation-optimizer" "^7.0.0" + "@graphql-tools/utils" "^10.0.0" + auto-bind "~4.0.0" + change-case-all "1.0.15" + dependency-graph "^1.0.0" + graphql-tag "^2.11.0" + parse-filepath "^1.0.2" + tslib "~2.6.0" + +"@graphql-hive/signal@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@graphql-hive/signal/-/signal-1.0.0.tgz#6e2193660a47c925abadbe72293dfc9430e24f8f" + integrity sha512-RiwLMc89lTjvyLEivZ/qxAC5nBHoS2CtsWFSOsN35sxG9zoo5Z+JsFHM8MlvmO9yt+MJNIyC5MLE1rsbOphlag== + +"@graphql-hive/signal@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@graphql-hive/signal/-/signal-2.0.0.tgz#205805328b118e1ae556417ed364257234800464" + integrity sha512-Pz8wB3K0iU6ae9S1fWfsmJX24CcGeTo6hE7T44ucmV/ALKRj+bxClmqrYcDT7v3f0d12Rh4FAXBb6gon+WkDpQ== + +"@graphql-tools/apollo-engine-loader@^8.0.0": + version "8.0.28" + resolved "https://registry.yarnpkg.com/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.28.tgz#b69334ea21540faee316f0026a53b3889dd90a01" + integrity sha512-MzgDrUuoxp6dZeo54zLBL3cEJKJtM3N/2RqK0rbPxPq5X2z6TUA7EGg8vIFTUkt5xelAsUrm8/4ai41ZDdxOng== + dependencies: + "@graphql-tools/utils" "^11.0.0" + "@whatwg-node/fetch" "^0.10.13" + sync-fetch "0.6.0" + tslib "^2.4.0" + +"@graphql-tools/batch-execute@^10.0.5": + version "10.0.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-10.0.5.tgz#0ad010fb6a415ebf1c4386f041e7b46299c5d416" + integrity sha512-dL13tXkfGvAzLq2XfzTKAy9logIcltKYRuPketxdh3Ok3U6PN1HKMCHfrE9cmtAsxD96/8Hlghz5AtM+LRv/ig== + dependencies: + "@graphql-tools/utils" "^11.0.0" + "@whatwg-node/promise-helpers" "^1.3.2" + dataloader "^2.2.3" + tslib "^2.8.1" + +"@graphql-tools/batch-execute@^9.0.19": + version "9.0.19" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-9.0.19.tgz#b724f3542e2cee8a3a71262a711469afa39cae88" + integrity sha512-VGamgY4PLzSx48IHPoblRw0oTaBa7S26RpZXt0Y4NN90ytoE0LutlpB2484RbkfcTjv9wa64QD474+YP1kEgGA== + dependencies: + "@graphql-tools/utils" "^10.9.1" + "@whatwg-node/promise-helpers" "^1.3.0" + dataloader "^2.2.3" + tslib "^2.8.1" + +"@graphql-tools/code-file-loader@^8.0.0": + version "8.1.28" + resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-8.1.28.tgz#c90655d86210d7ad8489f452867754b49c89f57a" + integrity sha512-BL3Ft/PFlXDE5nNuqA36hYci7Cx+8bDrPDc8X3VSpZy9iKFBY+oQ+IwqnEHCkt8OSp2n2V0gqTg4u3fcQP1Kwg== + dependencies: + "@graphql-tools/graphql-tag-pluck" "8.3.27" + "@graphql-tools/utils" "^11.0.0" + globby "^11.0.3" + tslib "^2.4.0" + unixify "^1.0.0" + +"@graphql-tools/delegate@^10.2.23": + version "10.2.23" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-10.2.23.tgz#fcd42e7aa70149269ad644e03098c8d28810bd87" + integrity sha512-xrPtl7f1LxS+B6o+W7ueuQh67CwRkfl+UKJncaslnqYdkxKmNBB4wnzVcW8ZsRdwbsla/v43PtwAvSlzxCzq2w== + dependencies: + "@graphql-tools/batch-execute" "^9.0.19" + "@graphql-tools/executor" "^1.4.9" + "@graphql-tools/schema" "^10.0.25" + "@graphql-tools/utils" "^10.9.1" + "@repeaterjs/repeater" "^3.0.6" + "@whatwg-node/promise-helpers" "^1.3.0" + dataloader "^2.2.3" + dset "^3.1.2" + tslib "^2.8.1" + +"@graphql-tools/delegate@^12.0.4": + version "12.0.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-12.0.4.tgz#57a91546d2cf460aeab03752c1e96077da18c1c1" + integrity sha512-mYz3s3YoE8ubdSHC2SnzvGwMthhWDdln6JXhz8KomD1wr4hXOUtkuLYLuF1gEcSSCqhl7UZmVarouZkl5zalKw== + dependencies: + "@graphql-tools/batch-execute" "^10.0.5" + "@graphql-tools/executor" "^1.4.13" + "@graphql-tools/schema" "^10.0.29" + "@graphql-tools/utils" "^11.0.0" + "@repeaterjs/repeater" "^3.0.6" + "@whatwg-node/promise-helpers" "^1.3.2" + dataloader "^2.2.3" + tslib "^2.8.1" + +"@graphql-tools/documents@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/documents/-/documents-1.0.1.tgz#ae19cd5667d22c23b331d3a1429443ed7130faee" + integrity sha512-aweoMH15wNJ8g7b2r4C4WRuJxZ0ca8HtNO54rkye/3duxTkW4fGBEutCx03jCIr5+a1l+4vFJNP859QnAVBVCA== + dependencies: + lodash.sortby "^4.7.0" + tslib "^2.4.0" + +"@graphql-tools/executor-common@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-common/-/executor-common-0.0.4.tgz#763603a6d7a22bb09d67ce682e84a0d730ff2bf9" + integrity sha512-SEH/OWR+sHbknqZyROCFHcRrbZeUAyjCsgpVWCRjqjqRbiJiXq6TxNIIOmpXgkrXWW/2Ev4Wms6YSGJXjdCs6Q== + dependencies: + "@envelop/core" "^5.2.3" + "@graphql-tools/utils" "^10.8.1" + +"@graphql-tools/executor-common@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-common/-/executor-common-0.0.6.tgz#f681de443d7e90e1768c44bd64a4cd418dc356e3" + integrity sha512-JAH/R1zf77CSkpYATIJw+eOJwsbWocdDjY+avY7G+P5HCXxwQjAjWVkJI1QJBQYjPQDVxwf1fmTZlIN3VOadow== + dependencies: + "@envelop/core" "^5.3.0" + "@graphql-tools/utils" "^10.9.1" + +"@graphql-tools/executor-common@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-common/-/executor-common-1.0.6.tgz#01f0e11a90c031afe3608b2435e3bfd37ada2692" + integrity sha512-23/K5C+LSlHDI0mj2SwCJ33RcELCcyDUgABm1Z8St7u/4Z5+95i925H/NAjUyggRjiaY8vYtNiMOPE49aPX1sg== + dependencies: + "@envelop/core" "^5.4.0" + "@graphql-tools/utils" "^11.0.0" + +"@graphql-tools/executor-graphql-ws@^2.0.1": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-2.0.7.tgz#e8d7689d266b3ccea962b708d6f5d31a1a246c66" + integrity sha512-J27za7sKF6RjhmvSOwOQFeNhNHyP4f4niqPnerJmq73OtLx9Y2PGOhkXOEB0PjhvPJceuttkD2O1yMgEkTGs3Q== + dependencies: + "@graphql-tools/executor-common" "^0.0.6" + "@graphql-tools/utils" "^10.9.1" + "@whatwg-node/disposablestack" "^0.0.6" + graphql-ws "^6.0.6" + isomorphic-ws "^5.0.0" + tslib "^2.8.1" + ws "^8.18.3" + +"@graphql-tools/executor-graphql-ws@^3.1.2": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-3.1.4.tgz#16aa62ab17f622a530ac45c81aa1ff84a2896aac" + integrity sha512-wCQfWYLwg1JZmQ7rGaFy74AQyVFxpeqz19WWIGRgANiYlm+T0K3Hs6POgi0+nL3HvwxJIxhUlaRLFvkqm1zxSA== + dependencies: + "@graphql-tools/executor-common" "^1.0.6" + "@graphql-tools/utils" "^11.0.0" + "@whatwg-node/disposablestack" "^0.0.6" + graphql-ws "^6.0.6" + isows "^1.0.7" + tslib "^2.8.1" + ws "^8.18.3" + +"@graphql-tools/executor-http@^1.1.9": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-http/-/executor-http-1.3.3.tgz#057de79ebc90edbd242259cccb1268d37ee6c579" + integrity sha512-LIy+l08/Ivl8f8sMiHW2ebyck59JzyzO/yF9SFS4NH6MJZUezA1xThUXCDIKhHiD56h/gPojbkpcFvM2CbNE7A== + dependencies: + "@graphql-hive/signal" "^1.0.0" + "@graphql-tools/executor-common" "^0.0.4" + "@graphql-tools/utils" "^10.8.1" + "@repeaterjs/repeater" "^3.0.4" + "@whatwg-node/disposablestack" "^0.0.6" + "@whatwg-node/fetch" "^0.10.4" + "@whatwg-node/promise-helpers" "^1.3.0" + meros "^1.2.1" + tslib "^2.8.1" + +"@graphql-tools/executor-http@^3.0.6": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-http/-/executor-http-3.1.0.tgz#571d47c46d88235ade7245130935c07c2594392b" + integrity sha512-DTaNU1rT2sxffwQlt+Aw68cHQWfGkjsaRk1D8nvG+DcCR8RNQo0d9qYt7pXIcfXYcQLb/OkABcGSuCfkopvHJg== + dependencies: + "@graphql-hive/signal" "^2.0.0" + "@graphql-tools/executor-common" "^1.0.6" + "@graphql-tools/utils" "^11.0.0" + "@repeaterjs/repeater" "^3.0.4" + "@whatwg-node/disposablestack" "^0.0.6" + "@whatwg-node/fetch" "^0.10.13" + "@whatwg-node/promise-helpers" "^1.3.2" + meros "^1.3.2" + tslib "^2.8.1" + +"@graphql-tools/executor-legacy-ws@^1.1.19", "@graphql-tools/executor-legacy-ws@^1.1.25": + version "1.1.25" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.1.25.tgz#235c334443a4dba79ceff9c20b0a03e766743d4c" + integrity sha512-6uf4AEXO0QMxJ7AWKVPqEZXgYBJaiz5vf29X0boG8QtcqWy8mqkXKWLND2Swdx0SbEx0efoGFcjuKufUcB0ASQ== + dependencies: + "@graphql-tools/utils" "^11.0.0" + "@types/ws" "^8.0.0" + isomorphic-ws "^5.0.0" + tslib "^2.4.0" + ws "^8.19.0" + +"@graphql-tools/executor@^1.4.13", "@graphql-tools/executor@^1.4.9": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-1.5.1.tgz#2171473cc7cd0b7ca468c21d767eec9ac9df00fe" + integrity sha512-n94Qcu875Mji9GQ52n5UbgOTxlgvFJicBPYD+FRks9HKIQpdNPjkkrKZUYNG51XKa+bf03rxNflm4+wXhoHHrA== + dependencies: + "@graphql-tools/utils" "^11.0.0" + "@graphql-typed-document-node/core" "^3.2.0" + "@repeaterjs/repeater" "^3.0.4" + "@whatwg-node/disposablestack" "^0.0.6" + "@whatwg-node/promise-helpers" "^1.0.0" + tslib "^2.4.0" + +"@graphql-tools/git-loader@^8.0.0": + version "8.0.32" + resolved "https://registry.yarnpkg.com/@graphql-tools/git-loader/-/git-loader-8.0.32.tgz#b72f8830aacf26a10044c39c3a3e512d8f23e8c2" + integrity sha512-H5HTp2vevv0rRMEnCJBVmVF8md3LpJI1C1+d6OtzvmuONJ8mOX2mkf9rtoqwiztynVegaDUekvMFsc9k5iE2WA== + dependencies: + "@graphql-tools/graphql-tag-pluck" "8.3.27" + "@graphql-tools/utils" "^11.0.0" + is-glob "4.0.3" + micromatch "^4.0.8" + tslib "^2.4.0" + unixify "^1.0.0" + +"@graphql-tools/github-loader@^9.0.0": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/github-loader/-/github-loader-9.0.6.tgz#75353e71c431cae3ac04751b804b5122c1704556" + integrity sha512-hhlt2MMkRcvDva/qyzqFddXzaMmRnriJ0Ts+/LcNeYnB8hcEqRMpF9RCsHYjo1mFRaiu8i4PSIpXyyFu3To7Ow== + dependencies: + "@graphql-tools/executor-http" "^3.0.6" + "@graphql-tools/graphql-tag-pluck" "^8.3.27" + "@graphql-tools/utils" "^11.0.0" + "@whatwg-node/fetch" "^0.10.13" + "@whatwg-node/promise-helpers" "^1.0.0" + sync-fetch "0.6.0" + tslib "^2.4.0" + +"@graphql-tools/graphql-file-loader@^8.0.0": + version "8.1.9" + resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.1.9.tgz#c0a6a7619ab22b7e3297296b842e29c387b7f53f" + integrity sha512-rkLK46Q62Zxift8B6Kfw6h8SH3pCR3DPCfNeC/lpLwYReezZz+2ARuLDFZjQGjW+4lpMwiAw8CIxDyQAUgqU6A== + dependencies: + "@graphql-tools/import" "7.1.9" + "@graphql-tools/utils" "^11.0.0" + globby "^11.0.3" + tslib "^2.4.0" + unixify "^1.0.0" + +"@graphql-tools/graphql-tag-pluck@8.3.27", "@graphql-tools/graphql-tag-pluck@^8.3.27": + version "8.3.27" + resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.3.27.tgz#5f138347addfa3df5c169be69dbe41c902c6227f" + integrity sha512-CJ0WVXhGYsfFngpRrAAcjRHyxSDHx4dEz2W15bkwvt9he/AWhuyXm07wuGcoLrl0q0iQp1BiRjU7D8SxWZo3JQ== + dependencies: + "@babel/core" "^7.26.10" + "@babel/parser" "^7.26.10" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/traverse" "^7.26.10" + "@babel/types" "^7.26.10" + "@graphql-tools/utils" "^11.0.0" + tslib "^2.4.0" + +"@graphql-tools/import@7.1.9": + version "7.1.9" + resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-7.1.9.tgz#c3738c3ce0ff9b66b5c1df8d9f162aeab977ae0f" + integrity sha512-mHzOgyfzsAgstaZPIFEtKg4GVH4FbDHeHYrSs73mAPKS5F59/FlRuUJhAoRnxbVnc3qIZ6EsWBjOjNbnPK8viA== + dependencies: + "@graphql-tools/utils" "^11.0.0" + "@theguild/federation-composition" "^0.21.1" + resolve-from "5.0.0" + tslib "^2.4.0" + +"@graphql-tools/json-file-loader@^8.0.0": + version "8.0.26" + resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-8.0.26.tgz#82ff8afbecb77082625c7ee76384da7aed0f70ce" + integrity sha512-kwy9IFi5QtXXTLBgWkvA1RqsZeJDn0CxsTbhNlziCzmga9fNo7qtZ18k9FYIq3EIoQQlok+b7W7yeyJATA2xhw== + dependencies: + "@graphql-tools/utils" "^11.0.0" + globby "^11.0.3" + tslib "^2.4.0" + unixify "^1.0.0" + +"@graphql-tools/load@^8.1.0": + version "8.1.8" + resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-8.1.8.tgz#977fdf0005078283942e0e4a028ff97c78dd6f0b" + integrity sha512-gxO662b64qZSToK3N6XUxWG5E6HOUjlg5jEnmGvD4bMtGJ0HwEe/BaVZbBQemCfLkxYjwRIBiVfOY9o0JyjZJg== + dependencies: + "@graphql-tools/schema" "^10.0.31" + "@graphql-tools/utils" "^11.0.0" + p-limit "3.1.0" + tslib "^2.4.0" + +"@graphql-tools/merge@^9.0.0", "@graphql-tools/merge@^9.1.7": + version "9.1.7" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-9.1.7.tgz#8040553c19aeadf6df41060b811e9c5df8716be1" + integrity sha512-Y5E1vTbTabvcXbkakdFUt4zUIzB1fyaEnVmIWN0l0GMed2gdD01TpZWLUm4RNAxpturvolrb24oGLQrBbPLSoQ== + dependencies: + "@graphql-tools/utils" "^11.0.0" + tslib "^2.4.0" + +"@graphql-tools/optimize@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/optimize/-/optimize-2.0.0.tgz#7a9779d180824511248a50c5a241eff6e7a2d906" + integrity sha512-nhdT+CRGDZ+bk68ic+Jw1OZ99YCDIKYA5AlVAnBHJvMawSx9YQqQAIj4refNc1/LRieGiuWvhbG3jvPVYho0Dg== + dependencies: + tslib "^2.4.0" + +"@graphql-tools/relay-operation-optimizer@^7.0.0": + version "7.0.27" + resolved "https://registry.yarnpkg.com/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-7.0.27.tgz#dbc5ebf62946b5a9bb50e3b7417c856d32874f85" + integrity sha512-rdkL1iDMFaGDiHWd7Bwv7hbhrhnljkJaD0MXeqdwQlZVgVdUDlMot2WuF7CEKVgijpH6eSC6AxXMDeqVgSBS2g== + dependencies: + "@ardatan/relay-compiler" "^12.0.3" + "@graphql-tools/utils" "^11.0.0" + tslib "^2.4.0" + +"@graphql-tools/schema@^10.0.0", "@graphql-tools/schema@^10.0.25", "@graphql-tools/schema@^10.0.29", "@graphql-tools/schema@^10.0.31": + version "10.0.31" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-10.0.31.tgz#dea275db4d7423f293826cff2aa11e7b3027ddce" + integrity sha512-ZewRgWhXef6weZ0WiP7/MV47HXiuFbFpiDUVLQl6mgXsWSsGELKFxQsyUCBos60Qqy1JEFAIu3Ns6GGYjGkqkQ== + dependencies: + "@graphql-tools/merge" "^9.1.7" + "@graphql-tools/utils" "^11.0.0" + tslib "^2.4.0" + +"@graphql-tools/url-loader@^8.0.0": + version "8.0.33" + resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-8.0.33.tgz#1e5ebfa6a840e3bdc25336c231df2889028f7e0c" + integrity sha512-Fu626qcNHcqAj8uYd7QRarcJn5XZ863kmxsg1sm0fyjyfBJnsvC7ddFt6Hayz5kxVKfsnjxiDfPMXanvsQVBKw== + dependencies: + "@graphql-tools/executor-graphql-ws" "^2.0.1" + "@graphql-tools/executor-http" "^1.1.9" + "@graphql-tools/executor-legacy-ws" "^1.1.19" + "@graphql-tools/utils" "^10.9.1" + "@graphql-tools/wrap" "^10.0.16" + "@types/ws" "^8.0.0" + "@whatwg-node/fetch" "^0.10.0" + "@whatwg-node/promise-helpers" "^1.0.0" + isomorphic-ws "^5.0.0" + sync-fetch "0.6.0-2" + tslib "^2.4.0" + ws "^8.17.1" + +"@graphql-tools/url-loader@^9.0.0": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-9.0.6.tgz#281ad72428170a08167423071e2ee9a06d910f49" + integrity sha512-QdJI3f7ANDMYfYazRgJzzybznjOrQAOuDXweC9xmKgPZoTqNxEAsatiy69zcpTf6092taJLyrqRH6R7xUTzf4A== + dependencies: + "@graphql-tools/executor-graphql-ws" "^3.1.2" + "@graphql-tools/executor-http" "^3.0.6" + "@graphql-tools/executor-legacy-ws" "^1.1.25" + "@graphql-tools/utils" "^11.0.0" + "@graphql-tools/wrap" "^11.1.1" + "@types/ws" "^8.0.0" + "@whatwg-node/fetch" "^0.10.13" + "@whatwg-node/promise-helpers" "^1.0.0" + isomorphic-ws "^5.0.0" + sync-fetch "0.6.0" + tslib "^2.4.0" + ws "^8.19.0" + +"@graphql-tools/utils@^10.0.0", "@graphql-tools/utils@^10.8.1", "@graphql-tools/utils@^10.9.1": + version "10.11.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-10.11.0.tgz#2513dca9ca25bab5a2651da2d66c37b1e2616bdf" + integrity sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + "@whatwg-node/promise-helpers" "^1.0.0" + cross-inspect "1.0.1" + tslib "^2.4.0" + +"@graphql-tools/utils@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-11.0.0.tgz#f54a09372e96c32416fcbd0eb8e9e0f1338900bd" + integrity sha512-bM1HeZdXA2C3LSIeLOnH/bcqSgbQgKEDrjxODjqi3y58xai2TkNrtYcQSoWzGbt9VMN1dORGjR7Vem8SPnUFQA== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + "@whatwg-node/promise-helpers" "^1.0.0" + cross-inspect "1.0.1" + tslib "^2.4.0" + +"@graphql-tools/wrap@^10.0.16": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-10.1.4.tgz#46f94b00113693d4d4eccddcf262494164234ba6" + integrity sha512-7pyNKqXProRjlSdqOtrbnFRMQAVamCmEREilOXtZujxY6kYit3tvWWSjUrcIOheltTffoRh7EQSjpy2JDCzasg== + dependencies: + "@graphql-tools/delegate" "^10.2.23" + "@graphql-tools/schema" "^10.0.25" + "@graphql-tools/utils" "^10.9.1" + "@whatwg-node/promise-helpers" "^1.3.0" + tslib "^2.8.1" + +"@graphql-tools/wrap@^11.1.1": + version "11.1.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-11.1.4.tgz#5fea02e589549fa9e8ee3e5939a4696d25b0ca40" + integrity sha512-V4msVMzxv0XmKaNr56HGsma1gKq/Ev3vV6ZeKe2iEX6/vVpxX4chVQxIl9nKnv28280xwraRgQRZ2oicjjZhuQ== + dependencies: + "@graphql-tools/delegate" "^12.0.4" + "@graphql-tools/schema" "^10.0.29" + "@graphql-tools/utils" "^11.0.0" + "@whatwg-node/promise-helpers" "^1.3.2" + tslib "^2.8.1" + +"@graphql-typed-document-node/core@3.2.0", "@graphql-typed-document-node/core@^3.1.1", "@graphql-typed-document-node/core@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" + integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== + "@humanwhocodes/config-array@^0.13.0": version "0.13.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" @@ -1761,6 +2488,151 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@inquirer/ansi@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.2.tgz#674a4c4d81ad460695cb2a1fc69d78cd187f337e" + integrity sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ== + +"@inquirer/checkbox@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.3.2.tgz#e1483e6519d6ffef97281a54d2a5baa0d81b3f3b" + integrity sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/confirm@^5.1.21": + version "5.1.21" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.21.tgz#610c4acd7797d94890a6e2dde2c98eb1e891dd12" + integrity sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/core@^10.3.2": + version "10.3.2" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.3.2.tgz#535979ff3ff4fe1e7cc4f83e2320504c743b7e20" + integrity sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + cli-width "^4.1.0" + mute-stream "^2.0.0" + signal-exit "^4.1.0" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.3" + +"@inquirer/editor@^4.2.23": + version "4.2.23" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.23.tgz#fe046a3bfdae931262de98c1052437d794322e0b" + integrity sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/external-editor" "^1.0.3" + "@inquirer/type" "^3.0.10" + +"@inquirer/expand@^4.0.23": + version "4.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.23.tgz#a38b5f32226d75717c370bdfed792313b92bdc05" + integrity sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/external-editor@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.3.tgz#c23988291ee676290fdab3fd306e64010a6d13b8" + integrity sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA== + dependencies: + chardet "^2.1.1" + iconv-lite "^0.7.0" + +"@inquirer/figures@^1.0.15": + version "1.0.15" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.15.tgz#dbb49ed80df11df74268023b496ac5d9acd22b3a" + integrity sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g== + +"@inquirer/input@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.3.1.tgz#778683b4c4c4d95d05d4b05c4a854964b73565b4" + integrity sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/number@^3.0.23": + version "3.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.23.tgz#3fdec2540d642093fd7526818fd8d4bdc7335094" + integrity sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/password@^4.0.23": + version "4.0.23" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.23.tgz#b9f5187c8c92fd7aa9eceb9d8f2ead0d7e7b000d" + integrity sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + +"@inquirer/prompts@^7.8.2": + version "7.10.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.10.1.tgz#e1436c0484cf04c22548c74e2cd239e989d5f847" + integrity sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg== + dependencies: + "@inquirer/checkbox" "^4.3.2" + "@inquirer/confirm" "^5.1.21" + "@inquirer/editor" "^4.2.23" + "@inquirer/expand" "^4.0.23" + "@inquirer/input" "^4.3.1" + "@inquirer/number" "^3.0.23" + "@inquirer/password" "^4.0.23" + "@inquirer/rawlist" "^4.1.11" + "@inquirer/search" "^3.2.2" + "@inquirer/select" "^4.4.2" + +"@inquirer/rawlist@^4.1.11": + version "4.1.11" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.11.tgz#313c8c3ffccb7d41e990c606465726b4a898a033" + integrity sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/search@^3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.2.2.tgz#4cc6fd574dcd434e4399badc37c742c3fd534ac8" + integrity sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA== + dependencies: + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/select@^4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.4.2.tgz#2ac8fca960913f18f1d1b35323ed8fcd27d89323" + integrity sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/type@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.10.tgz#11ed564ec78432a200ea2601a212d24af8150d50" + integrity sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA== + "@isaacs/balanced-match@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz#3081dadbc3460661b751e7591d7faea5df39dd29" @@ -2587,6 +3459,36 @@ classcat "^5.0.3" zustand "^4.4.1" +"@redocly/ajv@^8.11.2": + version "8.17.1" + resolved "https://registry.yarnpkg.com/@redocly/ajv/-/ajv-8.17.1.tgz#e2b1722cbc8b4cd7e05da14a745d3ddd03293734" + integrity sha512-EDtsGZS964mf9zAUXAl9Ew16eYbeyAFWhsPr0fX6oaJxgd8rApYlPBf0joyhnUHz88WxrigyFtTaqqzXNzPgqw== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +"@redocly/config@^0.22.0": + version "0.22.2" + resolved "https://registry.yarnpkg.com/@redocly/config/-/config-0.22.2.tgz#9a05e694816d53a5236cf8768d3cad0e49d8b116" + integrity sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ== + +"@redocly/openapi-core@^1.34.5": + version "1.34.6" + resolved "https://registry.yarnpkg.com/@redocly/openapi-core/-/openapi-core-1.34.6.tgz#6230b140530dc6f1d0684c52d0f31dce0ef3cb3b" + integrity sha512-2+O+riuIUgVSuLl3Lyh5AplWZyVMNuG2F98/o6NrutKJfW4/GTZdPpZlIphS0HGgcOHgmWcCSHj+dWFlZaGSHw== + dependencies: + "@redocly/ajv" "^8.11.2" + "@redocly/config" "^0.22.0" + colorette "^1.2.0" + https-proxy-agent "^7.0.5" + js-levenshtein "^1.1.6" + js-yaml "^4.1.0" + minimatch "^5.0.1" + pluralize "^8.0.0" + yaml-ast-parser "0.0.43" + "@redux-saga/core@^1.2.1": version "1.4.2" resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.4.2.tgz#7d64721b490c2ed88eb8b07a45074a428d5076d6" @@ -2652,6 +3554,11 @@ redux-thunk "^3.1.0" reselect "^5.1.0" +"@repeaterjs/repeater@^3.0.4", "@repeaterjs/repeater@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.6.tgz#be23df0143ceec3c69f8b6c2517971a5578fdaa2" + integrity sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA== + "@replit/codemirror-lang-csharp@^6.1.0": version "6.2.0" resolved "https://registry.yarnpkg.com/@replit/codemirror-lang-csharp/-/codemirror-lang-csharp-6.2.0.tgz#bd652f5788ad93579ee0dcab5b163ed2674b974f" @@ -2929,6 +3836,16 @@ resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.4.3.tgz#af975e367743fa91989cd666666aec31a8f50591" integrity sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q== +"@theguild/federation-composition@^0.21.1": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@theguild/federation-composition/-/federation-composition-0.21.3.tgz#29126aa594123f36789928955e66fd210fff76c0" + integrity sha512-+LlHTa4UbRpZBog3ggAxjYIFvdfH3UMvvBUptur19TMWkqU4+n3GmN+mDjejU+dyBXIG27c25RsiQP1HyvM99g== + dependencies: + constant-case "^3.0.4" + debug "4.4.3" + json5 "^2.2.3" + lodash.sortby "^4.7.0" + "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -3750,7 +4667,7 @@ tapable "^2.2.0" webpack "^5" -"@types/ws@^8.5.1", "@types/ws@^8.5.5": +"@types/ws@^8.0.0", "@types/ws@^8.5.1", "@types/ws@^8.5.5": version "8.18.1" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== @@ -4065,6 +4982,39 @@ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== +"@whatwg-node/disposablestack@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz#2064a1425ea66194def6df0c7a1851b6939c82bb" + integrity sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw== + dependencies: + "@whatwg-node/promise-helpers" "^1.0.0" + tslib "^2.6.3" + +"@whatwg-node/fetch@^0.10.0", "@whatwg-node/fetch@^0.10.13", "@whatwg-node/fetch@^0.10.4": + version "0.10.13" + resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.10.13.tgz#2d47190c620f134dda31c7f827976a909b2cca7a" + integrity sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q== + dependencies: + "@whatwg-node/node-fetch" "^0.8.3" + urlpattern-polyfill "^10.0.0" + +"@whatwg-node/node-fetch@^0.8.3": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.8.5.tgz#5ab2226866ae10a9d0403f9d44bd684178963781" + integrity sha512-4xzCl/zphPqlp9tASLVeUhB5+WJHbuWGYpfoC2q1qh5dw0AqZBW7L27V5roxYWijPxj4sspRAAoOH3d2ztaHUQ== + dependencies: + "@fastify/busboy" "^3.1.1" + "@whatwg-node/disposablestack" "^0.0.6" + "@whatwg-node/promise-helpers" "^1.3.2" + tslib "^2.6.3" + +"@whatwg-node/promise-helpers@^1.0.0", "@whatwg-node/promise-helpers@^1.2.1", "@whatwg-node/promise-helpers@^1.2.4", "@whatwg-node/promise-helpers@^1.3.0", "@whatwg-node/promise-helpers@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz#3b54987ad6517ef6db5920c66a6f0dada606587d" + integrity sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA== + dependencies: + tslib "^2.6.3" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -4198,6 +5148,11 @@ agent-base@6: dependencies: debug "4" +agent-base@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -4262,6 +5217,11 @@ ansi-align@^3.0.1: dependencies: string-width "^4.1.0" +ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -4279,6 +5239,13 @@ ansi-escapes@^6.0.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.1.tgz#76c54ce9b081dad39acec4b5d53377913825fb0f" integrity sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig== +ansi-escapes@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-7.2.0.tgz#31b25afa3edd3efc09d98c2fee831d460ff06b49" + integrity sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw== + dependencies: + environment "^1.0.0" + ansi-html-community@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" @@ -4323,7 +5290,7 @@ ansi-styles@^5.0.0, ansi-styles@^5.2.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.0.0: +ansi-styles@^6.0.0, ansi-styles@^6.2.1: version "6.2.3" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.3.tgz#c044d5dcc521a076413472597a1acb1f103c4041" integrity sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== @@ -4537,7 +5504,7 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -asap@~2.0.6: +asap@~2.0.3, asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== @@ -4582,6 +5549,11 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +auto-bind@~4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-4.0.0.tgz#e3589fc6c2da8f7ca43ba9f84fa52a744fc997fb" + integrity sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ== + autoprefixer@^10.4.13: version "10.4.23" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.23.tgz#c6aa6db8e7376fcd900f9fd79d143ceebad8c4e6" @@ -5090,6 +6062,15 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001759, caniuse-lite@^1.0.30001760: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== +capital-case@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/capital-case/-/capital-case-1.0.4.tgz#9d130292353c9249f6b00fa5852bee38a717e669" + integrity sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" @@ -5153,6 +6134,22 @@ chalk@^5.0.1, chalk@^5.2.0: resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== +change-case-all@1.0.15: + version "1.0.15" + resolved "https://registry.yarnpkg.com/change-case-all/-/change-case-all-1.0.15.tgz#de29393167fc101d646cd76b0ef23e27d09756ad" + integrity sha512-3+GIFhk3sNuvFAJKU46o26OdzudQlPNBCu1ZQi3cMeMHhty1bhDxu2WrEilVNYaGvqUtR1VSigFcJOiS13dRhQ== + dependencies: + change-case "^4.1.2" + is-lower-case "^2.0.2" + is-upper-case "^2.0.2" + lower-case "^2.0.2" + lower-case-first "^2.0.2" + sponge-case "^1.0.1" + swap-case "^2.0.2" + title-case "^3.0.3" + upper-case "^2.0.2" + upper-case-first "^2.0.2" + change-case@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.1.0.tgz#0e611b7edc9952df2e8513b27b42de72647dd17e" @@ -5177,6 +6174,29 @@ change-case@^3.1.0: upper-case "^1.1.1" upper-case-first "^1.1.0" +change-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-4.1.2.tgz#fedfc5f136045e2398c0410ee441f95704641e12" + integrity sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A== + dependencies: + camel-case "^4.1.2" + capital-case "^1.0.4" + constant-case "^3.0.4" + dot-case "^3.0.4" + header-case "^2.0.4" + no-case "^3.0.4" + param-case "^3.0.4" + pascal-case "^3.1.2" + path-case "^3.0.4" + sentence-case "^3.0.4" + snake-case "^3.0.4" + tslib "^2.0.3" + +change-case@^5.4.4: + version "5.4.4" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-5.4.4.tgz#0d52b507d8fb8f204343432381d1a6d7bff97a02" + integrity sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w== + char-regex@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" @@ -5227,6 +6247,11 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +chardet@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.1.tgz#5c75593704a642f71ee53717df234031e65373c8" + integrity sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ== + check-types@^11.2.3: version "11.2.3" resolved "https://registry.yarnpkg.com/check-types/-/check-types-11.2.3.tgz#1ffdf68faae4e941fce252840b1787b8edc93b71" @@ -5325,6 +6350,13 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== + dependencies: + restore-cursor "^5.0.0" + cli-spinners@^2.0.0: version "2.9.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" @@ -5346,6 +6378,14 @@ cli-truncate@^3.1.0: slice-ansi "^5.0.0" string-width "^5.0.0" +cli-truncate@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-5.1.1.tgz#455476face9904d94b7d11e98d9adbca15292ea5" + integrity sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A== + dependencies: + slice-ansi "^7.1.0" + string-width "^8.0.0" + cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" @@ -5356,6 +6396,11 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + clipboardy@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-3.0.0.tgz#f3876247404d334c9ed01b6f269c11d09a5e3092" @@ -5509,7 +6554,12 @@ colord@^2.9.1, colord@^2.9.3: resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== -colorette@^2.0.10, colorette@^2.0.14, colorette@^2.0.16, colorette@^2.0.17: +colorette@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +colorette@^2.0.10, colorette@^2.0.14, colorette@^2.0.16, colorette@^2.0.17, colorette@^2.0.20: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== @@ -5561,7 +6611,7 @@ commander@^9.0.0, commander@^9.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -common-tags@^1.8.0: +common-tags@1.8.2, common-tags@^1.8.0: version "1.8.2" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== @@ -5642,6 +6692,15 @@ constant-case@^2.0.0: snake-case "^2.1.0" upper-case "^1.1.1" +constant-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case "^2.0.2" + content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" @@ -5733,6 +6792,26 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" +cosmiconfig@^8.1.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + create-jest@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" @@ -5768,13 +6847,20 @@ cross-env@7.0.3: dependencies: cross-spawn "^7.0.1" -cross-fetch@^3.0.4: +cross-fetch@^3.0.4, cross-fetch@^3.1.5: version "3.2.0" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.2.0.tgz#34e9192f53bc757d6614304d9e5e6fb4edb782e3" integrity sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q== dependencies: node-fetch "^2.7.0" +cross-inspect@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cross-inspect/-/cross-inspect-1.0.1.tgz#15f6f65e4ca963cf4cc1a2b5fef18f6ca328712b" + integrity sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A== + dependencies: + tslib "^2.4.0" + cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" @@ -6127,6 +7213,11 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -6168,6 +7259,16 @@ datajunction@0.0.1-rc.0: resolved "https://registry.yarnpkg.com/datajunction/-/datajunction-0.0.1-rc.0.tgz#865f1d937a802eb4180ccd5191ba86f5eafc55b7" integrity sha512-hooPyiEzV/Olkoev1dLoXbbgF6CrNROGNjOmCwcI4eMKDni3NLW1XAsdHZrH3TQi21JJ5O3z0QPjhtJOj1DAlQ== +dataloader@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.3.tgz#42d10b4913515f5b37c6acedcb4960d6ae1b1517" + integrity sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA== + +debounce@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-2.2.0.tgz#f895fa2fbdb579a0f0d3dcf5dde19657e50eaad5" + integrity sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw== + debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -6175,7 +7276,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.1: +debug@4, debug@4.4.3, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.1: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -6366,6 +7467,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +dependency-graph@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-1.0.0.tgz#bb5e85aec1310bc13b22dbd76e3196c4ee4c10d2" + integrity sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg== + dequal@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" @@ -6381,6 +7487,11 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== +detect-indent@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== + detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -6577,6 +7688,11 @@ dotenv@^10.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dset@^3.1.2: + version "3.1.4" + resolved "https://registry.yarnpkg.com/dset/-/dset-3.1.4.tgz#f8eaf5f023f068a036d08cd07dc9ffb7d0065248" + integrity sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA== + dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" @@ -6683,11 +7799,21 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + envinfo@^7.7.3: version "7.21.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.21.0.tgz#04a251be79f92548541f37d13c8b6f22940c3bae" integrity sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow== +environment@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" + integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== + eol@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" @@ -7482,11 +8608,37 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.5.tgz#aa0edb7d5caa6340011790bd9249dbef8a81128d" + integrity sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^1.0.35" + fdir@^6.5.0: version "6.5.0" resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + figures@^1.3.5, figures@^1.4.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -7721,6 +8873,13 @@ format@^0.2.0: resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + formik@2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/formik/-/formik-2.4.3.tgz#6020e85eb3e3e8415b3b19d6f4f65793ab754b24" @@ -7840,6 +8999,11 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-east-asian-width@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz#9bc4caa131702b4b61729cb7e42735bc550c9ee6" + integrity sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q== + get-intrinsic@^1.1.3, get-intrinsic@^1.2.2, get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" @@ -8047,7 +9211,7 @@ globby@^10.0.1: merge2 "^1.2.3" slash "^3.0.0" -globby@^11.0.4, globby@^11.1.0: +globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -8086,6 +9250,40 @@ graphlib@^2.1.8: dependencies: lodash "^4.17.15" +graphql-config@^5.1.1: + version "5.1.5" + resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-5.1.5.tgz#34e0bfba88e74b6eefd889716a9378086f595f7f" + integrity sha512-mG2LL1HccpU8qg5ajLROgdsBzx/o2M6kgI3uAmoaXiSH9PCUbtIyLomLqUtCFaAeG2YCFsl0M5cfQ9rKmDoMVA== + dependencies: + "@graphql-tools/graphql-file-loader" "^8.0.0" + "@graphql-tools/json-file-loader" "^8.0.0" + "@graphql-tools/load" "^8.1.0" + "@graphql-tools/merge" "^9.0.0" + "@graphql-tools/url-loader" "^8.0.0" + "@graphql-tools/utils" "^10.0.0" + cosmiconfig "^8.1.0" + jiti "^2.0.0" + minimatch "^9.0.5" + string-env-interpolation "^1.0.1" + tslib "^2.4.0" + +graphql-tag@^2.11.0: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql-ws@^6.0.6: + version "6.0.6" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-6.0.6.tgz#e9c9ff85f4ddb5bbe6faa2721c0d27e6c11746d2" + integrity sha512-zgfER9s+ftkGKUZgc0xbx8T7/HMO4AV5/YuYiFc+AtgcO5T0v8AxYYNQ+ltzuzDZgNkYJaFspm5MMYLjQzrkmw== + +graphql@16.12.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.12.0.tgz#28cc2462435b1ac3fdc6976d030cef83a0c13ac7" + integrity sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ== + gulp-sort@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/gulp-sort/-/gulp-sort-2.0.0.tgz#c6762a2f1f0de0a3fc595a21599d3fac8dba1aca" @@ -8270,6 +9468,14 @@ header-case@^1.0.0: no-case "^2.2.0" upper-case "^1.1.3" +header-case@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-2.0.4.tgz#5a42e63b55177349cf405beb8d775acabb92c063" + integrity sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q== + dependencies: + capital-case "^1.0.4" + tslib "^2.0.3" + highlight.js@^10.4.1, highlight.js@~10.7.0: version "10.7.3" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" @@ -8486,6 +9692,14 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +https-proxy-agent@^7.0.5: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -8562,6 +9776,13 @@ iconv-lite@^0.6.3: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" + integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" @@ -8604,7 +9825,12 @@ immutable@^4.0.0: resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== -import-fresh@^3.1.0, import-fresh@^3.2.1: +immutable@~3.7.6: + version "3.7.6" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" + integrity sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw== + +import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== @@ -8612,6 +9838,11 @@ import-fresh@^3.1.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-from@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" + integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== + import-lazy@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" @@ -8635,6 +9866,11 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== +index-to-position@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/index-to-position/-/index-to-position-1.2.0.tgz#c800eb34dacf4dbf96b9b06c7eb78d5f704138b4" + integrity sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -8958,6 +10194,13 @@ is-fullwidth-code-point@^4.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== +is-fullwidth-code-point@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz#046b2a6d4f6b156b2233d3207d4b5a9783999b98" + integrity sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ== + dependencies: + get-east-asian-width "^1.3.1" + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -8974,6 +10217,13 @@ is-generator-function@^1.0.10: has-tostringtag "^1.0.2" safe-regex-test "^1.1.0" +is-glob@4.0.3, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -8981,13 +10231,6 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - is-hexadecimal@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" @@ -9005,6 +10248,13 @@ is-lower-case@^1.1.0: dependencies: lower-case "^1.1.0" +is-lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-2.0.2.tgz#1c0884d3012c841556243483aa5d522f47396d2a" + integrity sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ== + dependencies: + tslib "^2.0.3" + is-map@^2.0.2, is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" @@ -9182,6 +10432,11 @@ is-unc-path@^1.0.0: dependencies: unc-path-regex "^0.1.2" +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-upper-case@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" @@ -9189,6 +10444,13 @@ is-upper-case@^1.1.0: dependencies: upper-case "^1.1.0" +is-upper-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-2.0.2.tgz#f1105ced1fe4de906a5f39553e7d3803fd804649" + integrity sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ== + dependencies: + tslib "^2.0.3" + is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -9263,6 +10525,16 @@ isobject@^3.0.0, isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== +isomorphic-ws@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" + integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== + +isows@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.7.tgz#1c06400b7eed216fbba3bcbd68f12490fc342915" + integrity sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg== + istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" @@ -10275,11 +11547,21 @@ jiti@^1.21.7: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== +jiti@^2.0.0, jiti@^2.3.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== + js-cookie@3.0.5: version "3.0.5" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.5.tgz#0b7e2fd0c01552c58ba86e0841f94dc2557dcdbc" integrity sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw== +js-levenshtein@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -10368,6 +11650,14 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-to-pretty-yaml@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/json-to-pretty-yaml/-/json-to-pretty-yaml-1.2.2.tgz#f4cd0bd0a5e8fe1df25aaf5ba118b099fd992d5b" + integrity sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A== + dependencies: + remedial "^1.0.7" + remove-trailing-spaces "^1.0.6" + json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" @@ -10576,6 +11866,18 @@ listr2@^4.0.5: through "^2.3.8" wrap-ansi "^7.0.0" +listr2@^9.0.0: + version "9.0.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-9.0.5.tgz#92df7c4416a6da630eb9ef46da469b70de97b316" + integrity sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g== + dependencies: + cli-truncate "^5.0.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^6.1.0" + rfdc "^1.4.1" + wrap-ansi "^9.0.0" + loader-runner@^4.2.0, loader-runner@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.1.tgz#6c76ed29b0ccce9af379208299f07f876de737e3" @@ -10657,7 +11959,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.3.0, lodash@^4.7.0: +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.3.0, lodash@^4.7.0, lodash@~4.17.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -10669,6 +11971,14 @@ log-symbols@^2.2.0: dependencies: chalk "^2.0.1" +log-symbols@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + log-update@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" @@ -10679,6 +11989,17 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +log-update@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.1.0.tgz#1a04ff38166f94647ae1af562f4bd6a15b1b7cd4" + integrity sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== + dependencies: + ansi-escapes "^7.0.0" + cli-cursor "^5.0.0" + slice-ansi "^7.1.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" + longest-streak@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.1.0.tgz#62fa67cd958742a1574af9f39866364102d90cd4" @@ -10698,6 +12019,13 @@ lower-case-first@^1.0.0: dependencies: lower-case "^1.1.2" +lower-case-first@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-2.0.2.tgz#64c2324a2250bf7c37c5901e76a5b5309301160b" + integrity sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg== + dependencies: + tslib "^2.0.3" + lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" @@ -10984,6 +12312,11 @@ merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +meros@^1.2.1, meros@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/meros/-/meros-1.3.2.tgz#4cb0d7f3d22074c6e7ae1d66f72c080bca2e414b" + integrity sha512-Q3mobPbvEx7XbwhnC1J1r60+5H6EZyNccdzSz0eGexJRwouUtTZxPVRGdqKtxlpD84ScK4+tIGldkqDtCKdI0A== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -11259,6 +12592,11 @@ mimic-fn@^4.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + min-indent@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -11312,7 +12650,7 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.4: +minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -11386,6 +12724,11 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -11467,6 +12810,11 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -11474,6 +12822,15 @@ node-fetch@^2.7.0: dependencies: whatwg-url "^5.0.0" +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + node-forge@^1: version "1.3.3" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.3.tgz#0ad80f6333b3a0045e827ac20b7f735f93716751" @@ -11578,6 +12935,11 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" +nullthrows@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" + integrity sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw== + nwsapi@^2.2.0: version "2.2.23" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.23.tgz#59712c3a88e6de2bb0b6ccc1070397267019cf6c" @@ -11771,6 +13133,13 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + dependencies: + mimic-function "^5.0.0" + open@^8.0.9, open@^8.4.0: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" @@ -11780,6 +13149,18 @@ open@^8.0.9, open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" +openapi-typescript@7.10.1: + version "7.10.1" + resolved "https://registry.yarnpkg.com/openapi-typescript/-/openapi-typescript-7.10.1.tgz#813bb63b3252e7c6d5e706c9b7fa962164604d53" + integrity sha512-rBcU8bjKGGZQT4K2ekSTY2Q5veOQbVG/lTKZ49DeCyT9z62hM2Vj/LLHjDHC9W7LJG8YMHcdXpRZDqC1ojB/lw== + dependencies: + "@redocly/openapi-core" "^1.34.5" + ansi-colors "^4.1.3" + change-case "^5.4.4" + parse-json "^8.3.0" + supports-color "^10.2.2" + yargs-parser "^21.1.1" + optionator@^0.8.1: version "0.8.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" @@ -11842,6 +13223,13 @@ own-keys@^1.0.1: object-keys "^1.1.1" safe-push-apply "^1.0.0" +p-limit@3.1.0, p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -11849,13 +13237,6 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2, p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -11956,7 +13337,7 @@ parse-entities@^4.0.0: is-decimal "^2.0.0" is-hexadecimal "^2.0.0" -parse-filepath@^1.0.1: +parse-filepath@^1.0.1, parse-filepath@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" integrity sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q== @@ -11975,6 +13356,15 @@ parse-json@^5.0.0, parse-json@^5.2.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-json@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-8.3.0.tgz#88a195a2157025139a2317a4f2f9252b61304ed5" + integrity sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ== + dependencies: + "@babel/code-frame" "^7.26.2" + index-to-position "^1.1.0" + type-fest "^4.39.1" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -12018,6 +13408,14 @@ path-case@^2.1.0: dependencies: no-case "^2.2.0" +path-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-3.0.4.tgz#9168645334eb942658375c56f80b4c0cb5f82c6f" + integrity sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -12181,6 +13579,11 @@ plop@2.7.6: ora "^3.4.0" v8flags "^2.0.10" +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -12857,6 +14260,13 @@ promise-polyfill@^8.1.3: resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.3.0.tgz#9284810268138d103807b11f4e23d5e945a4db63" integrity sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg== +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + promise@^8.1.0: version "8.3.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" @@ -13610,6 +15020,15 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== +relay-runtime@12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/relay-runtime/-/relay-runtime-12.0.0.tgz#1e039282bdb5e0c1b9a7dc7f6b9a09d4f4ff8237" + integrity sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug== + dependencies: + "@babel/runtime" "^7.0.0" + fbjs "^3.0.0" + invariant "^2.2.4" + remark-parse@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-11.0.0.tgz#aa60743fcb37ebf6b069204eb4da304e40db45a1" @@ -13631,6 +15050,11 @@ remark-rehype@^11.0.0: unified "^11.0.0" vfile "^6.0.0" +remedial@^1.0.7: + version "1.0.8" + resolved "https://registry.yarnpkg.com/remedial/-/remedial-1.0.8.tgz#a5e4fd52a0e4956adbaf62da63a5a46a78c578a0" + integrity sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg== + remove-bom-buffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" @@ -13653,6 +15077,11 @@ remove-trailing-separator@^1.0.1: resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== +remove-trailing-spaces@^1.0.6: + version "1.0.9" + resolved "https://registry.yarnpkg.com/remove-trailing-spaces/-/remove-trailing-spaces-1.0.9.tgz#39c270a309ea16fda84253ffbdeb1b5afa0aa271" + integrity sha512-xzG7w5IRijvIkHIjDk65URsJJ7k4J95wmcArY5PRcmjldIOl7oTvG8+X2Ag690R7SfwiOcHrWZKVc1Pp5WIOzA== + renderkid@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" @@ -13724,16 +15153,16 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1: expand-tilde "^2.0.0" global-modules "^1.0.0" +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - resolve-options@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" @@ -13809,6 +15238,14 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== + dependencies: + onetime "^7.0.0" + signal-exit "^4.1.0" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -13824,7 +15261,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== -rfdc@^1.3.0: +rfdc@^1.3.0, rfdc@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== @@ -14098,6 +15535,15 @@ sentence-case@^2.1.0: no-case "^2.2.0" upper-case-first "^1.1.2" +sentence-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-3.0.4.tgz#3645a7b8c117c787fde8702056225bb62a45131f" + integrity sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case-first "^2.0.2" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -14207,6 +15653,11 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -14305,11 +15756,16 @@ signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +signedsource@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/signedsource/-/signedsource-1.0.0.tgz#1ddace4981798f93bd833973803d80d52e93ad6a" + integrity sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww== + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -14356,6 +15812,14 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" +slice-ansi@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.2.tgz#adf7be70aa6d72162d907cd0e6d5c11f507b5403" + integrity sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w== + dependencies: + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" + snake-case@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" @@ -14363,6 +15827,14 @@ snake-case@^2.1.0: dependencies: no-case "^2.2.0" +snake-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c" + integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -14559,6 +16031,13 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +sponge-case@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sponge-case/-/sponge-case-1.0.1.tgz#260833b86453883d974f84854cdb63aecc5aef4c" + integrity sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA== + dependencies: + tslib "^2.0.3" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -14638,6 +16117,11 @@ string-argv@^0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" integrity sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q== +string-env-interpolation@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" + integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" @@ -14659,7 +16143,7 @@ string-natural-compare@^3.0.1: resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4" integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw== -"string-width-cjs@npm:string-width@^4.2.0", "string-width-cjs@npm:string-width@^4.2.3", string-width@^1.0.1, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3, string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2: +"string-width-cjs@npm:string-width@^4.2.0", "string-width-cjs@npm:string-width@^4.2.3", string-width@^1.0.1, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3, string-width@^5.0.0, string-width@^5.0.1, string-width@^5.1.2, string-width@^8.0.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -14767,7 +16251,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^3.0.0, strip-ansi@^5.2.0, strip-ansi@^6.0.0, strip-ansi@^6.0.1, strip-ansi@^7.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^3.0.0, strip-ansi@^5.2.0, strip-ansi@^6.0.0, strip-ansi@^6.0.1, strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -14925,6 +16409,11 @@ sucrase@^3.35.0: tinyglobby "^0.2.11" ts-interface-checker "^0.1.9" +supports-color@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-10.2.2.tgz#466c2978cc5cd0052d542a0b576461c2b802ebb4" + integrity sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g== + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -15014,11 +16503,36 @@ swap-case@^1.1.0: lower-case "^1.1.1" upper-case "^1.1.1" +swap-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-2.0.2.tgz#671aedb3c9c137e2985ef51c51f9e98445bf70d9" + integrity sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw== + dependencies: + tslib "^2.0.3" + symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +sync-fetch@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/sync-fetch/-/sync-fetch-0.6.0.tgz#5759e775f3d5202e1b3d14821bc152fec32aa180" + integrity sha512-IELLEvzHuCfc1uTsshPK58ViSdNqXxlml1U+fmwJIKLYKOr/rAtBrorE2RYm5IHaMpDNlmC0fr1LAvdXvyheEQ== + dependencies: + node-fetch "^3.3.2" + timeout-signal "^2.0.0" + whatwg-mimetype "^4.0.0" + +sync-fetch@0.6.0-2: + version "0.6.0-2" + resolved "https://registry.yarnpkg.com/sync-fetch/-/sync-fetch-0.6.0-2.tgz#d82d6dc8efaf2d103a9015e7bd7ba0bfc8e078f2" + integrity sha512-c7AfkZ9udatCuAy9RSfiGPpeOKKUAUK5e1cXadLOGUjasdxqYqAK0jTNkM/FSEyJ3a5Ra27j/tw/PS0qLmaF/A== + dependencies: + node-fetch "^3.3.2" + timeout-signal "^2.0.0" + whatwg-mimetype "^4.0.0" + table@^6.8.0: version "6.9.0" resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" @@ -15178,6 +16692,11 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== +timeout-signal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/timeout-signal/-/timeout-signal-2.0.0.tgz#23207ea448d50258bb0defe3beea4a467643abba" + integrity sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA== + tiny-case@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" @@ -15209,6 +16728,13 @@ title-case@^2.1.0: no-case "^2.2.0" upper-case "^1.0.3" +title-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/title-case/-/title-case-3.0.3.tgz#bc689b46f02e411f1d1e1d081f7c3deca0489982" + integrity sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA== + dependencies: + tslib "^2.0.3" + tmp@^0.0.29: version "0.0.29" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0" @@ -15349,6 +16875,11 @@ ts-loader@9.4.2: micromatch "^4.0.0" semver "^7.3.4" +ts-log@^2.2.3: + version "2.2.7" + resolved "https://registry.yarnpkg.com/ts-log/-/ts-log-2.2.7.tgz#4f4512144898b77c9984e91587076fcb8518688e" + integrity sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg== + ts-node@10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" @@ -15383,11 +16914,16 @@ tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0: +tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.3, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== +tslib@~2.6.0: + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -15449,6 +16985,11 @@ type-fest@^2.13.0, type-fest@^2.19.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== +type-fest@^4.39.1: + version "4.41.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" + integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -15538,6 +17079,11 @@ typescript@5.8.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== +ua-parser-js@^1.0.35: + version "1.0.41" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.41.tgz#bd04dc9ec830fcf9e4fad35cf22dcedd2e3b4e9c" + integrity sha512-LbBDqdIC5s8iROCUjMbW1f5dJQTEFB1+KO9ogbvlb3nm9n4YHa5p4KTvFPWvh2Hs8gZMBuiB1/8+pdfe/tDPug== + uglify-js@^3.1.4: version "3.19.3" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" @@ -15692,6 +17238,13 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== +unixify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090" + integrity sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg== + dependencies: + normalize-path "^2.1.1" + unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -15738,11 +17291,25 @@ upper-case-first@^1.1.0, upper-case-first@^1.1.2: dependencies: upper-case "^1.1.1" +upper-case-first@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-2.0.2.tgz#992c3273f882abd19d1e02894cc147117f844324" + integrity sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg== + dependencies: + tslib "^2.0.3" + upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== +upper-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== + dependencies: + tslib "^2.0.3" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -15763,6 +17330,11 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" +urlpattern-polyfill@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz#1b2517e614136c73ba32948d5e7a3a063cba8e74" + integrity sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw== + use-isomorphic-layout-effect@^1.1.2, use-isomorphic-layout-effect@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.1.tgz#2f11a525628f56424521c748feabc2ffcc962fce" @@ -16017,6 +17589,11 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +web-streams-polyfill@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" + integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== + web-vitals@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-2.1.4.tgz#76563175a475a5e835264d373704f9dde718290c" @@ -16274,6 +17851,11 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-mimetype@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" + integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -16558,7 +18140,7 @@ workbox-window@6.6.1: "@types/trusted-types" "^2.0.2" workbox-core "6.6.1" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^6.2.0, wrap-ansi@^7.0.0, wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^6.2.0, wrap-ansi@^7.0.0, wrap-ansi@^8.0.1, wrap-ansi@^8.1.0, wrap-ansi@^9.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -16600,6 +18182,11 @@ ws@^8.13.0: resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== +ws@^8.17.1, ws@^8.18.3, ws@^8.19.0: + version "8.19.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" + integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" @@ -16630,12 +18217,17 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml-ast-parser@0.0.43: + version "0.0.43" + resolved "https://registry.yarnpkg.com/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz#e8a23e6fb4c38076ab92995c5dca33f3d3d7c9bb" + integrity sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A== + yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yaml@^2.1.1: +yaml@^2.1.1, yaml@^2.3.1: version "2.8.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== @@ -16663,7 +18255,7 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.3.1: +yargs@^17.0.0, yargs@^17.3.1: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -16686,6 +18278,11 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +yoctocolors-cjs@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" + integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== + yup@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/yup/-/yup-1.3.2.tgz#afffc458f1513ed386e6aaf4bcaa4e67a9e270dc" diff --git a/openapi.json b/openapi.json index f83e7a20c..ccd39af3b 100644 --- a/openapi.json +++ b/openapi.json @@ -7,7 +7,7 @@ "name": "MIT License", "url": "https://mit-license.org/" }, - "version": "0.0.1a44" + "version": "0.0.33" }, "paths": { "/catalogs": { @@ -25,7 +25,7 @@ "application/json": { "schema": { "items": { - "$ref": "#/components/schemas/CatalogInfo" + "$ref": "#/components/schemas/CatalogInfo-Output" }, "type": "array", "title": "Response List Catalogs Catalogs Get" @@ -51,7 +51,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CatalogInfo" + "$ref": "#/components/schemas/CatalogInfo-Input" } } }, @@ -63,7 +63,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CatalogInfo" + "$ref": "#/components/schemas/CatalogInfo-Output" } } } @@ -94,15 +94,20 @@ "summary": "Get A Catalog", "description": "Return a catalog by name", "operationId": "Get_a_Catalog_catalogs__name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", "title": "Name" - }, - "name": "name", - "in": "path" + } } ], "responses": { @@ -111,7 +116,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CatalogInfo" + "$ref": "#/components/schemas/CatalogInfo-Output" } } } @@ -126,12 +131,7 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, "/catalogs/{name}/engines": { @@ -142,30 +142,35 @@ "summary": "Add Engines To A Catalog", "description": "Attach one or more engines to a catalog", "operationId": "Add_Engines_to_a_Catalog_catalogs__name__engines_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", "title": "Name" - }, - "name": "name", - "in": "path" + } } ], "requestBody": { + "required": true, "content": { "application/json": { "schema": { + "type": "array", "items": { "$ref": "#/components/schemas/EngineInfo" }, - "type": "array", "title": "Data" } } - }, - "required": true + } }, "responses": { "201": { @@ -173,7 +178,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CatalogInfo" + "$ref": "#/components/schemas/CatalogInfo-Output" } } } @@ -188,22 +193,17 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/engines": { + "/collections": { "get": { "tags": [ - "engines" + "collections" ], - "summary": "List Engines", - "description": "List all available engines", - "operationId": "list_engines_engines_get", + "summary": "List Collections", + "description": "List all collections", + "operationId": "list_collections_collections_get", "responses": { "200": { "description": "Successful Response", @@ -211,10 +211,10 @@ "application/json": { "schema": { "items": { - "$ref": "#/components/schemas/EngineInfo" + "$ref": "#/components/schemas/CollectionInfo" }, "type": "array", - "title": "Response List Engines Engines Get" + "title": "Response List Collections Collections Get" } } } @@ -228,16 +228,16 @@ }, "post": { "tags": [ - "engines" + "collections" ], - "summary": "Add An Engine", - "description": "Add a new engine", - "operationId": "Add_An_Engine_engines_post", + "summary": "Create A Collection", + "description": "Create a Collection", + "operationId": "create_a_collection_collections_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EngineInfo" + "$ref": "#/components/schemas/CollectionInfo" } } }, @@ -249,7 +249,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/EngineInfo" + "$ref": "#/components/schemas/CollectionInfo" } } } @@ -272,44 +272,33 @@ ] } }, - "/engines/{name}/{version}": { - "get": { + "/collections/{name}": { + "delete": { "tags": [ - "engines" + "collections" + ], + "summary": "Delete A Collection", + "description": "Delete a collection", + "operationId": "delete_a_collection_collections__name__delete", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "Get An Engine", - "description": "Return an engine by name and version", - "operationId": "get_an_engine_engines__name___version__get", "parameters": [ { - "required": true, - "schema": { - "type": "string", - "title": "Name" - }, "name": "name", - "in": "path" - }, - { + "in": "path", "required": true, "schema": { "type": "string", - "title": "Version" - }, - "name": "version", - "in": "path" + "title": "Name" + } } ], "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EngineInfo" - } - } - } + "204": { + "description": "Successful Response" }, "422": { "description": "Validation Error", @@ -321,31 +310,29 @@ } } } - }, + } + }, + "get": { + "tags": [ + "collections" + ], + "summary": "Get Collection", + "description": "Get a collection and its nodes", + "operationId": "get_collection_collections__name__get", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/metrics": { - "get": { - "tags": [ - "metrics" ], - "summary": "List Metrics", - "description": "List all available metrics.", - "operationId": "list_metrics_metrics_get", "parameters": [ { - "required": false, + "name": "name", + "in": "path", + "required": true, "schema": { "type": "string", - "title": "Prefix" - }, - "name": "prefix", - "in": "query" + "title": "Name" + } } ], "responses": { @@ -354,11 +341,7 @@ "content": { "application/json": { "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Response List Metrics Metrics Get" + "$ref": "#/components/schemas/CollectionDetails" } } } @@ -373,70 +356,105 @@ } } } - }, + } + } + }, + "/collections/{name}/nodes": { + "post": { + "tags": [ + "collections" + ], + "summary": "Add Nodes To A Collection", + "description": "Add one or more nodes to a collection", + "operationId": "Add_Nodes_to_a_Collection_collections__name__nodes_post", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/metrics/metadata": { - "get": { - "tags": [ - "metrics" ], - "summary": "List Metric Metadata", - "description": "Return available metric metadata attributes", - "operationId": "list_metric_metadata_metrics_metadata_get", + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Data" + } + } + } + }, "responses": { - "200": { - "description": "Successful Response", + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MetricMetadataOptions" + "$ref": "#/components/schemas/HTTPValidationError" } } } } - }, + } + } + }, + "/collections/{name}/remove": { + "post": { + "tags": [ + "collections" + ], + "summary": "Delete Nodes From A Collection", + "description": "Delete one or more nodes from a collection", + "operationId": "Delete_Nodes_from_a_Collection_collections__name__remove_post", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/metrics/{name}": { - "get": { - "tags": [ - "metrics" ], - "summary": "Get A Metric", - "description": "Return a metric by name.", - "operationId": "get_a_metric_metrics__name__get", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", "title": "Name" - }, - "name": "name", - "in": "path" + } } ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Metric" - } + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Data" } } + } + }, + "responses": { + "204": { + "description": "Successful Response" }, "422": { "description": "Validation Error", @@ -448,48 +466,39 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/metrics/common/dimensions": { - "get": { + "/deployments": { + "post": { "tags": [ - "metrics" + "deployments" ], - "summary": "Get Common Dimensions", - "description": "Return common dimensions for a set of metrics.", - "operationId": "get_common_dimensions_metrics_common_dimensions_get", - "parameters": [ + "summary": "Creates A Bulk Deployment", + "description": "This endpoint takes a deployment specification (namespace, nodes, tags), topologically\nsorts and validates the deployable objects, and deploys the nodes in parallel where\npossible. It returns a summary of the deployment.", + "operationId": "Creates_a_bulk_deployment_deployments_post", + "security": [ { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "List of metrics to find common dimensions for", - "default": [] - }, - "name": "metric", - "in": "query" + "DJHTTPBearer": [] } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeploymentSpec-Input" + } + } + } + }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/DimensionAttributeOutput" - }, - "type": "array", - "title": "Response Get Common Dimensions Metrics Common Dimensions Get" + "$ref": "#/components/schemas/DeploymentInfo" } } } @@ -504,59 +513,45 @@ } } } - }, + } + }, + "get": { + "tags": [ + "deployments" + ], + "summary": "List Deployments", + "operationId": "list_deployments_deployments_get", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/djsql/data": { - "get": { - "tags": [ - "DJSQL" ], - "summary": "Get Data For Djsql", - "description": "Return data for a DJ SQL query", - "operationId": "get_data_for_djsql_djsql_data_get", "parameters": [ { - "required": true, - "schema": { - "type": "string", - "title": "Query" - }, - "name": "query", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "boolean", - "title": "Async ", - "default": false - }, - "name": "async_", - "in": "query" - }, - { + "name": "namespace", + "in": "query", "required": false, "schema": { - "type": "string", - "title": "Engine Name" - }, - "name": "engine_name", - "in": "query" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Namespace" + } }, { + "name": "limit", + "in": "query", "required": false, "schema": { - "type": "string", - "title": "Engine Version" - }, - "name": "engine_version", - "in": "query" + "type": "integer", + "default": 50, + "title": "Limit" + } } ], "responses": { @@ -565,7 +560,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/QueryWithResults" + "type": "array", + "items": { + "$ref": "#/components/schemas/DeploymentInfo" + }, + "title": "Response List Deployments Deployments Get" } } } @@ -580,49 +579,30 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/djsql/stream": { + "/deployments/{deployment_id}": { "get": { "tags": [ - "DJSQL" + "deployments" + ], + "summary": "Get Deployment Status", + "operationId": "get_deployment_status_deployments__deployment_id__get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "Get Data Stream For Djsql", - "description": "Return data for a DJ SQL query using server side events", - "operationId": "get_data_stream_for_djsql_djsql_stream_get", "parameters": [ { + "name": "deployment_id", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Query" - }, - "name": "query", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "string", - "title": "Engine Name" - }, - "name": "engine_name", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "string", - "title": "Engine Version" - }, - "name": "engine_version", - "in": "query" + "title": "Deployment Id" + } } ], "responses": { @@ -631,7 +611,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/QueryWithResults" + "$ref": "#/components/schemas/DeploymentInfo" } } } @@ -646,27 +626,22 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/validate": { + "/deployments/impact": { "post": { "tags": [ - "nodes" + "deployments" ], - "summary": "Validate Node", - "description": "Determines whether the provided node is valid and returns metadata from node validation.", - "operationId": "validate_node_nodes_validate_post", + "summary": "Preview Deployment Impact", + "description": "Analyze the impact of a deployment WITHOUT actually deploying.\n\nThis endpoint takes a deployment specification and returns:\n- Direct changes: What nodes will be created, updated, deleted, or skipped\n- Downstream impacts: What existing nodes will be affected by these changes\n- Warnings: Potential issues like breaking column changes or external impacts\n\nUse this endpoint to preview changes before deploying, similar to a dry-run\nbut with more detailed impact analysis including second and third-order effects.", + "operationId": "Preview_deployment_impact_deployments_impact_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NodeRevisionBase" + "$ref": "#/components/schemas/DeploymentSpec-Input" } } }, @@ -678,7 +653,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NodeValidation" + "$ref": "#/components/schemas/DeploymentImpactResponse" } } } @@ -701,42 +676,56 @@ ] } }, - "/nodes/{name}/validate": { - "post": { + "/dialects": { + "get": { "tags": [ - "nodes" - ], - "summary": "Revalidate", - "description": "Revalidate a single existing node and update its status appropriately", - "operationId": "revalidate_nodes__name__validate_post", - "parameters": [ - { - "required": true, - "schema": { - "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" - } + "engines" ], + "summary": "List Dialects", + "description": "Returns a list of registered SQL dialects and their associated transpilation plugin class names.", + "operationId": "list_dialects_dialects_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NodeValidation" + "items": { + "$ref": "#/components/schemas/DialectInfo" + }, + "type": "array", + "title": "Response List Dialects Dialects Get" } } } - }, - "422": { - "description": "Validation Error", + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } + }, + "/engines": { + "get": { + "tags": [ + "engines" + ], + "summary": "List Engines", + "description": "List all available engines", + "operationId": "list_engines_engines_get", + "responses": { + "200": { + "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "items": { + "$ref": "#/components/schemas/EngineInfo" + }, + "type": "array", + "title": "Response List Engines Engines Get" } } } @@ -747,45 +736,19 @@ "DJHTTPBearer": [] } ] - } - }, - "/nodes/{node_name}/columns/{column_name}/attributes": { + }, "post": { "tags": [ - "nodes" - ], - "summary": "Set Column Attributes", - "description": "Set column attributes for the node.", - "operationId": "set_column_attributes_nodes__node_name__columns__column_name__attributes_post", - "parameters": [ - { - "required": true, - "schema": { - "type": "string", - "title": "Node Name" - }, - "name": "node_name", - "in": "path" - }, - { - "required": true, - "schema": { - "type": "string", - "title": "Column Name" - }, - "name": "column_name", - "in": "path" - } + "engines" ], + "summary": "Add An Engine", + "description": "Add a new engine", + "operationId": "Add_An_Engine_engines_post", "requestBody": { "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/AttributeTypeIdentifier" - }, - "type": "array", - "title": "Attributes" + "$ref": "#/components/schemas/EngineInfo" } } }, @@ -797,11 +760,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/datajunction_server__models__node__ColumnOutput" - }, - "type": "array", - "title": "Response Set Column Attributes Nodes Node Name Columns Column Name Attributes Post" + "$ref": "#/components/schemas/EngineInfo" } } } @@ -824,31 +783,37 @@ ] } }, - "/nodes": { + "/engines/{name}/{version}": { "get": { "tags": [ - "nodes" + "engines" + ], + "summary": "Get An Engine", + "description": "Return an engine by name and version", + "operationId": "get_an_engine_engines__name___version__get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "List Nodes", - "description": "List the available nodes.", - "operationId": "list_nodes_nodes_get", "parameters": [ { - "required": false, + "name": "name", + "in": "path", + "required": true, "schema": { - "$ref": "#/components/schemas/NodeType" - }, - "name": "node_type", - "in": "query" + "type": "string", + "title": "Name" + } }, { - "required": false, + "name": "version", + "in": "path", + "required": true, "schema": { "type": "string", - "title": "Prefix" - }, - "name": "prefix", - "in": "query" + "title": "Version" + } } ], "responses": { @@ -857,11 +822,7 @@ "content": { "application/json": { "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Response List Nodes Nodes Get" + "$ref": "#/components/schemas/EngineInfo" } } } @@ -876,43 +837,51 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/details": { + "/metrics": { "get": { "tags": [ - "nodes" + "metrics" + ], + "summary": "List Metrics", + "description": "List all available metrics.", + "operationId": "list_metrics_metrics_get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "List All Nodes With Details", - "description": "List the available nodes.", - "operationId": "list_all_nodes_with_details_nodes_details_get", "parameters": [ { + "name": "prefix", + "in": "query", "required": false, "schema": { - "$ref": "#/components/schemas/NodeType" - }, - "name": "node_type", - "in": "query" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prefix" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { "schema": { + "type": "array", "items": { - "$ref": "#/components/schemas/NodeIndexItem" + "type": "string" }, - "type": "array", - "title": "Response List All Nodes With Details Nodes Details Get" + "title": "Response List Metrics Metrics Get" } } } @@ -927,6 +896,28 @@ } } } + } + } + }, + "/metrics/metadata": { + "get": { + "tags": [ + "metrics" + ], + "summary": "List Metric Metadata", + "description": "Return available metric metadata attributes", + "operationId": "list_metric_metadata_metrics_metadata_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MetricMetadataOptions" + } + } + } + } }, "security": [ { @@ -935,23 +926,28 @@ ] } }, - "/nodes/{name}": { + "/metrics/{name}": { "get": { "tags": [ - "nodes" + "metrics" + ], + "summary": "Get A Metric", + "description": "Return a metric by name.", + "operationId": "get_a_metric_metrics__name__get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "Get Node", - "description": "Show the active version of the specified node.", - "operationId": "get_node_nodes__name__get", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", "title": "Name" - }, - "name": "name", - "in": "path" + } } ], "responses": { @@ -960,7 +956,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NodeOutput" + "$ref": "#/components/schemas/Metric" } } } @@ -975,29 +971,35 @@ } } } - }, + } + } + }, + "/metrics/common/dimensions": { + "get": { + "tags": [ + "metrics" + ], + "summary": "Get Common Dimensions", + "description": "Return common dimensions for a set of metrics.", + "operationId": "get_common_dimensions_metrics_common_dimensions_get", "security": [ { "DJHTTPBearer": [] } - ] - }, - "delete": { - "tags": [ - "nodes" ], - "summary": "Delete Node", - "description": "Delete (aka deactivate) the specified node.", - "operationId": "delete_node_nodes__name__delete", "parameters": [ { - "required": true, + "name": "metric", + "in": "query", + "required": false, "schema": { - "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" + "type": "array", + "items": { + "type": "string" + }, + "title": "List of metrics to find common dimensions for", + "default": [] + } } ], "responses": { @@ -1005,7 +1007,13 @@ "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DimensionAttributeOutput" + }, + "title": "Response Get Common Dimensions Metrics Common Dimensions Get" + } } } }, @@ -1019,48 +1027,82 @@ } } } - }, + } + } + }, + "/djsql/data": { + "get": { + "tags": [ + "DJSQL" + ], + "summary": "Get Data For Djsql", + "description": "Return data for a DJ SQL query", + "operationId": "get_data_for_djsql_djsql_data_get", "security": [ { "DJHTTPBearer": [] } - ] - }, - "patch": { - "tags": [ - "nodes" ], - "summary": "Update Node", - "description": "Update a node.", - "operationId": "update_node_nodes__name__patch", "parameters": [ { + "name": "query", + "in": "query", "required": true, "schema": { "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateNode" - } + "title": "Query" } }, - "required": true - }, + { + "name": "async_", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Async " + } + }, + { + "name": "engine_name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Name" + } + }, + { + "name": "engine_version", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Version" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NodeOutput" + "$ref": "#/components/schemas/QueryWithResults" } } } @@ -1075,31 +1117,63 @@ } } } - }, + } + } + }, + "/djsql/stream": { + "get": { + "tags": [ + "DJSQL" + ], + "summary": "Get Data Stream For Djsql", + "description": "Return data for a DJ SQL query using server side events", + "operationId": "get_data_stream_for_djsql_djsql_stream_get", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/nodes/{name}/hard": { - "delete": { - "tags": [ - "nodes" ], - "summary": "Hard Delete A Dj Node", - "description": "Hard delete a node, destroying all links and invalidating all downstream nodes.\nThis should be used with caution, deactivating a node is preferred.", - "operationId": "Hard_Delete_a_DJ_Node_nodes__name__hard_delete", "parameters": [ { + "name": "query", + "in": "query", "required": true, "schema": { "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" + "title": "Query" + } + }, + { + "name": "engine_name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Name" + } + }, + { + "name": "engine_version", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Version" + } } ], "responses": { @@ -1107,7 +1181,9 @@ "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/QueryWithResults" + } } } }, @@ -1121,39 +1197,35 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/{name}/restore": { + "/nodes/validate": { "post": { "tags": [ "nodes" ], - "summary": "Restore Node", - "description": "Restore (aka re-activate) the specified node.", - "operationId": "restore_node_nodes__name__restore_post", - "parameters": [ - { - "required": true, - "schema": { - "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" - } - ], + "summary": "Validate Node", + "description": "Determines whether the provided node is valid and returns metadata from node validation.", + "operationId": "validate_node_nodes_validate_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/NodeRevisionBase" + } + } + }, + "required": true + }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/NodeValidation" + } } } }, @@ -1175,23 +1247,28 @@ ] } }, - "/nodes/{name}/revisions": { - "get": { + "/nodes/{name}/validate": { + "post": { "tags": [ "nodes" ], - "summary": "List Node Revisions", - "description": "List all revisions for the node.", - "operationId": "list_node_revisions_nodes__name__revisions_get", + "summary": "Revalidate", + "description": "Revalidate a single existing node and update its status appropriately", + "operationId": "revalidate_nodes__name__validate_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", "title": "Name" - }, - "name": "name", - "in": "path" + } } ], "responses": { @@ -1200,11 +1277,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/NodeRevisionOutput" - }, - "type": "array", - "title": "Response List Node Revisions Nodes Name Revisions Get" + "$ref": "#/components/schemas/NodeStatusDetails" } } } @@ -1219,78 +1292,55 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/source": { + "/nodes/{node_name}/columns/{column_name}/attributes": { "post": { "tags": [ "nodes" ], - "summary": "Create A Source Node", - "description": "Create a source node. If columns are not provided, the source node's schema\nwill be inferred using the configured query service.", - "operationId": "Create_A_Source_Node_nodes_source_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateSourceNode" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NodeOutput" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, + "summary": "Set Column Attributes", + "description": "Set column attributes for the node.", + "operationId": "set_column_attributes_nodes__node_name__columns__column_name__attributes_post", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/nodes/metric": { - "post": { - "tags": [ - "nodes" ], - "summary": "Create A Metric Node", - "description": "Create a node.", - "operationId": "Create_A_Metric_Node_nodes_metric_post", + "parameters": [ + { + "name": "node_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Node Name" + } + }, + { + "name": "column_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Column Name" + } + } + ], "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateNode" + "type": "array", + "items": { + "$ref": "#/components/schemas/AttributeTypeIdentifier" + }, + "title": "Attributes" } } - }, - "required": true + } }, "responses": { "201": { @@ -1298,7 +1348,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NodeOutput" + "type": "array", + "items": { + "$ref": "#/components/schemas/ColumnOutput" + }, + "title": "Response Set Column Attributes Nodes Node Name Columns Column Name Attributes Post" } } } @@ -1313,39 +1367,67 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/dimension": { - "post": { + "/nodes": { + "get": { "tags": [ "nodes" ], - "summary": "Create A Dimension Node", - "description": "Create a node.", - "operationId": "Create_A_Dimension_Node_nodes_dimension_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateNode" - } + "summary": "List Nodes", + "description": "List the available nodes.", + "operationId": "list_nodes_nodes_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "node_type", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeType" + }, + { + "type": "null" + } + ], + "title": "Node Type" } }, - "required": true - }, + { + "name": "prefix", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prefix" + } + } + ], "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NodeOutput" + "type": "array", + "items": { + "type": "string" + }, + "title": "Response List Nodes Nodes Get" } } } @@ -1360,39 +1442,51 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/transform": { - "post": { + "/nodes/details": { + "get": { "tags": [ "nodes" ], - "summary": "Create A Transform Node", - "description": "Create a node.", - "operationId": "Create_A_Transform_Node_nodes_transform_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateNode" - } + "summary": "List All Nodes With Details", + "description": "List the available nodes.", + "operationId": "list_all_nodes_with_details_nodes_details_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "node_type", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeType" + }, + { + "type": "null" + } + ], + "title": "Node Type" } - }, - "required": true - }, + } + ], "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/NodeOutput" + "type": "array", + "items": { + "$ref": "#/components/schemas/NodeIndexItem" + }, + "title": "Response List All Nodes With Details Nodes Details Get" } } } @@ -1407,34 +1501,35 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/cube": { - "post": { + "/nodes/{name}": { + "get": { "tags": [ "nodes" ], - "summary": "Create A Cube", - "description": "Create a cube node.", - "operationId": "Create_A_Cube_nodes_cube_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateCubeNode" - } + "summary": "Get Node", + "description": "Show the active version of the specified node.", + "operationId": "get_node_nodes__name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" } - }, - "required": true - }, + } + ], "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { @@ -1454,59 +1549,37 @@ } } } - }, + } + }, + "delete": { + "tags": [ + "nodes" + ], + "summary": "Delete Node", + "description": "Delete (aka deactivate) the specified node.", + "operationId": "delete_node_nodes__name__delete", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/register/table/{catalog}/{schema_}/{table}": { - "post": { - "tags": [ - "nodes" ], - "summary": "Register Table", - "description": "Register a table. This creates a source node in the SOURCE_NODE_NAMESPACE and\nthe source node's schema will be inferred using the configured query service.", - "operationId": "register_table_register_table__catalog___schema____table__post", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Catalog" - }, - "name": "catalog", - "in": "path" - }, - { - "required": true, - "schema": { - "type": "string", - "title": "Schema " - }, - "name": "schema_", - "in": "path" - }, - { - "required": true, - "schema": { - "type": "string", - "title": "Table" - }, - "name": "table", - "in": "path" + "title": "Name" + } } ], "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/NodeOutput" - } + "schema": {} } } }, @@ -1520,66 +1593,59 @@ } } } - }, + } + }, + "patch": { + "tags": [ + "nodes" + ], + "summary": "Update Node", + "description": "Update a node.", + "operationId": "update_node_nodes__name__patch", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/nodes/{name}/columns/{column}": { - "post": { - "tags": [ - "nodes" ], - "summary": "Link Dimension", - "description": "Add information to a node column", - "operationId": "link_dimension_nodes__name__columns__column__post", "parameters": [ { - "required": true, - "schema": { - "type": "string", - "title": "Name" - }, "name": "name", - "in": "path" - }, - { - "required": true, - "schema": { - "type": "string", - "title": "Column" - }, - "name": "column", - "in": "path" - }, - { + "in": "path", "required": true, "schema": { "type": "string", - "title": "Dimension" - }, - "name": "dimension", - "in": "query" + "title": "Name" + } }, { + "name": "refresh_materialization", + "in": "query", "required": false, "schema": { - "type": "string", - "title": "Dimension Column" - }, - "name": "dimension_column", - "in": "query" + "type": "boolean", + "default": false, + "title": "Refresh Materialization" + } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateNode" + } + } + } + }, "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/NodeOutput" + } } } }, @@ -1593,60 +1659,35 @@ } } } - }, + } + } + }, + "/nodes/{name}/hard": { + "delete": { + "tags": [ + "nodes" + ], + "summary": "Hard Delete A Dj Node", + "description": "Hard delete a node, destroying all links and invalidating all downstream nodes.\nThis should be used with caution, deactivating a node is preferred.", + "operationId": "Hard_Delete_a_DJ_Node_nodes__name__hard_delete", "security": [ { "DJHTTPBearer": [] } - ] - }, - "delete": { - "tags": [ - "nodes" ], - "summary": "Delete Dimension Link", - "description": "Remove the link between a node column and a dimension node", - "operationId": "delete_dimension_link_nodes__name__columns__column__delete", "parameters": [ { - "required": true, - "schema": { - "type": "string", - "title": "Name" - }, "name": "name", - "in": "path" - }, - { - "required": true, - "schema": { - "type": "string", - "title": "Column" - }, - "name": "column", - "in": "path" - }, - { + "in": "path", "required": true, "schema": { "type": "string", - "title": "Dimension" - }, - "name": "dimension", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "string", - "title": "Dimension Column" - }, - "name": "dimension_column", - "in": "query" + "title": "Name" + } } ], "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { @@ -1664,45 +1705,35 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/{node_name}/link": { + "/nodes/{name}/restore": { "post": { "tags": [ "nodes" ], - "summary": "Add Complex Dimension Link", - "description": "Links a source, dimension, or transform node to a dimension with a custom join query.\nIf a link already exists, updates the link definition.", - "operationId": "add_complex_dimension_link_nodes__node_name__link_post", + "summary": "Restore Node", + "description": "Restore (aka re-activate) the specified node.", + "operationId": "restore_node_nodes__name__restore_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Node Name" - }, - "name": "node_name", - "in": "path" + "title": "Name" + } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LinkDimensionInput" - } - } - }, - "required": true - }, "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { @@ -1720,47 +1751,87 @@ } } } - }, + } + } + }, + "/nodes/{name}/revisions": { + "get": { + "tags": [ + "nodes" + ], + "summary": "List Node Revisions", + "description": "List all revisions for the node.", + "operationId": "list_node_revisions_nodes__name__revisions_get", "security": [ { "DJHTTPBearer": [] } - ] - }, - "delete": { - "tags": [ - "nodes" ], - "summary": "Remove Complex Dimension Link", - "description": "Removes a complex dimension link based on the dimension node and its role (if any).", - "operationId": "remove_complex_dimension_link_nodes__node_name__link_delete", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Node Name" - }, - "name": "node_name", - "in": "path" + "title": "Name" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NodeRevisionOutput" + }, + "title": "Response List Node Revisions Nodes Name Revisions Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } } + } + } + }, + "/nodes/source": { + "post": { + "tags": [ + "nodes" ], + "summary": "Create A Source Node", + "description": "Create a source node. If columns are not provided, the source node's schema\nwill be inferred using the configured query service.", + "operationId": "Create_A_Source_Node_nodes_source_post", "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LinkDimensionIdentifier" + "$ref": "#/components/schemas/CreateSourceNode" } } }, "required": true }, "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/NodeOutput" + } } } }, @@ -1782,31 +1853,32 @@ ] } }, - "/nodes/{name}/migrate_dim_link": { + "/nodes/metric": { "post": { "tags": [ "nodes" ], - "summary": "Migrate Dimension Link", - "description": "Migrate dimension link from column-level to node-level", - "operationId": "migrate_dimension_link_nodes__name__migrate_dim_link_post", - "parameters": [ - { - "required": true, - "schema": { - "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" - } - ], + "summary": "Create A Metric Node", + "description": "Create a node.", + "operationId": "Create_A_Metric_Node_nodes_metric_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNode" + } + } + }, + "required": true + }, "responses": { "201": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/NodeOutput" + } } } }, @@ -1828,44 +1900,32 @@ ] } }, - "/nodes/{name}/tags": { + "/nodes/dimension": { "post": { "tags": [ - "nodes", - "tags" + "nodes" ], - "summary": "Update Tags On Node", - "description": "Add a tag to a node", - "operationId": "Update_Tags_on_Node_nodes__name__tags_post", - "parameters": [ - { - "required": true, - "schema": { - "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" + "summary": "Create A Dimension Node", + "description": "Create a node.", + "operationId": "Create_A_Dimension_Node_nodes_dimension_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNode" + } + } }, - { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Tag Names" - }, - "name": "tag_names", - "in": "query" - } - ], + "required": true + }, "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/NodeOutput" + } } } }, @@ -1887,25 +1947,24 @@ ] } }, - "/nodes/{name}/refresh": { + "/nodes/transform": { "post": { "tags": [ "nodes" ], - "summary": "Refresh Source Node", - "description": "Refresh a source node with the latest columns from the query service.", - "operationId": "refresh_source_node_nodes__name__refresh_post", - "parameters": [ - { - "required": true, - "schema": { - "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" - } - ], + "summary": "Create A Transform Node", + "description": "Create a node.", + "operationId": "Create_A_Transform_Node_nodes_transform_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateNode" + } + } + }, + "required": true + }, "responses": { "201": { "description": "Successful Response", @@ -1935,40 +1994,32 @@ ] } }, - "/nodes/similarity/{node1_name}/{node2_name}": { - "get": { + "/nodes/cube": { + "post": { "tags": [ "nodes" ], - "summary": "Calculate Node Similarity", - "description": "Compare two nodes by how similar their queries are", - "operationId": "calculate_node_similarity_nodes_similarity__node1_name___node2_name__get", - "parameters": [ - { - "required": true, - "schema": { - "type": "string", - "title": "Node1 Name" - }, - "name": "node1_name", - "in": "path" + "summary": "Create A Cube", + "description": "Create a cube node.", + "operationId": "Create_A_Cube_nodes_cube_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCubeNode" + } + } }, - { - "required": true, - "schema": { - "type": "string", - "title": "Node2 Name" - }, - "name": "node2_name", - "in": "path" - } - ], + "required": true + }, "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/NodeOutput" + } } } }, @@ -1990,44 +2041,71 @@ ] } }, - "/nodes/{name}/downstream": { - "get": { + "/register/table/{catalog}/{schema_}/{table}": { + "post": { "tags": [ "nodes" ], - "summary": "List Downstream Nodes For A Node", - "description": "List all nodes that are downstream from the given node, filterable by type.", - "operationId": "List_Downstream_Nodes_For_A_Node_nodes__name__downstream_get", + "summary": "Register Table", + "description": "Register a table. This creates a source node in the SOURCE_NODE_NAMESPACE and\nthe source node's schema will be inferred using the configured query service.", + "operationId": "register_table_register_table__catalog___schema____table__post", + "security": [ + { + "DJHTTPBearer": [] + } + ], "parameters": [ { + "name": "catalog", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Catalog" + } + }, + { + "name": "schema_", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" + "title": "Schema " + } + }, + { + "name": "table", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Table" + } }, { + "name": "source_node_namespace", + "in": "query", "required": false, "schema": { - "$ref": "#/components/schemas/NodeType" - }, - "name": "node_type", - "in": "query" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Source Node Namespace" + } } ], "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/DAGNodeOutput" - }, - "type": "array", - "title": "Response List Downstream Nodes For A Node Nodes Name Downstream Get" + "$ref": "#/components/schemas/NodeOutput" } } } @@ -2042,52 +2120,77 @@ } } } - }, + } + } + }, + "/register/view/{catalog}/{schema_}/{view}": { + "post": { + "tags": [ + "nodes" + ], + "summary": "Register View", + "description": "Register a view by creating the view in the database and adding a source node for it.\nThe source node is created in the SOURCE_NODE_NAMESPACE and\nits schema will be inferred using the configured query service.", + "operationId": "register_view_register_view__catalog___schema____view__post", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/nodes/{name}/upstream": { - "get": { - "tags": [ - "nodes" ], - "summary": "List Upstream Nodes For A Node", - "description": "List all nodes that are upstream from the given node, filterable by type.", - "operationId": "List_Upstream_Nodes_For_A_Node_nodes__name__upstream_get", "parameters": [ { + "name": "catalog", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" + "title": "Catalog" + } + }, + { + "name": "schema_", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Schema " + } + }, + { + "name": "view", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "View" + } + }, + { + "name": "query", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Query" + } }, { + "name": "replace", + "in": "query", "required": false, "schema": { - "$ref": "#/components/schemas/NodeType" - }, - "name": "node_type", - "in": "query" + "type": "boolean", + "default": false, + "title": "Replace" + } } ], "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/DAGNodeOutput" - }, - "type": "array", - "title": "Response List Upstream Nodes For A Node Nodes Name Upstream Get" + "$ref": "#/components/schemas/NodeOutput" } } } @@ -2102,45 +2205,73 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/{name}/dag": { - "get": { + "/nodes/{name}/columns/{column}": { + "post": { "tags": [ "nodes" ], - "summary": "List All Connected Nodes (Upstreams + Downstreams)", - "description": "List all nodes that are part of the DAG of the given node. This means getting all upstreams,\ndownstreams, and linked dimension nodes.", - "operationId": "List_All_Connected_Nodes__Upstreams___Downstreams__nodes__name__dag_get", + "summary": "Link Dimension", + "description": "Add a simple dimension link from a node column to a dimension node.\n1. If a specific `dimension_column` is provided, it will be used as join column for the link.\n2. If no `dimension_column` is provided, the primary key column of the dimension node will\n be used as the join column for the link.", + "operationId": "link_dimension_nodes__name__columns__column__post", + "security": [ + { + "DJHTTPBearer": [] + } + ], "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", "title": "Name" - }, - "name": "name", - "in": "path" + } + }, + { + "name": "column", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Column" + } + }, + { + "name": "dimension", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Dimension" + } + }, + { + "name": "dimension_column", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Dimension Column" + } } ], "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/DAGNodeOutput" - }, - "type": "array", - "title": "Response List All Connected Nodes Upstreams Downstreams Nodes Name Dag Get" - } + "schema": {} } } }, @@ -2154,45 +2285,71 @@ } } } - }, + } + }, + "delete": { + "tags": [ + "nodes" + ], + "summary": "Delete Dimension Link", + "description": "Remove the link between a node column and a dimension node", + "operationId": "delete_dimension_link_nodes__name__columns__column__delete", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/nodes/{name}/dimensions": { - "get": { - "tags": [ - "nodes" ], - "summary": "List All Dimension Attributes", - "description": "List all available dimension attributes for the given node.", - "operationId": "List_All_Dimension_Attributes_nodes__name__dimensions_get", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", "title": "Name" - }, - "name": "name", - "in": "path" + } + }, + { + "name": "column", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Column" + } + }, + { + "name": "dimension", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Dimension" + } + }, + { + "name": "dimension_column", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Dimension Column" + } } ], "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/DimensionAttributeOutput" - }, - "type": "array", - "title": "Response List All Dimension Attributes Nodes Name Dimensions Get" - } + "schema": {} } } }, @@ -2206,45 +2363,82 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/{name}/lineage": { - "get": { + "/nodes/{node_name}/columns/{node_column}/link": { + "post": { "tags": [ "nodes" ], - "summary": "List Column Level Lineage Of Node", - "description": "List column-level lineage of a node in a graph", - "operationId": "List_column_level_lineage_of_node_nodes__name__lineage_get", + "summary": "Add Reference Dimension Link", + "description": "Add reference dimension link to a node column", + "operationId": "add_reference_dimension_link_nodes__node_name__columns__node_column__link_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], "parameters": [ { + "name": "node_name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" + "title": "Node Name" + } + }, + { + "name": "node_column", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Node Column" + } + }, + { + "name": "dimension_node", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Dimension Node" + } + }, + { + "name": "dimension_column", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Dimension Column" + } + }, + { + "name": "role", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role" + } } ], "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/LineageColumn" - }, - "type": "array", - "title": "Response List Column Level Lineage Of Node Nodes Name Lineage Get" - } + "schema": {} } } }, @@ -2258,49 +2452,38 @@ } } } - }, + } + }, + "delete": { + "tags": [ + "nodes" + ], + "summary": "Remove Reference Dimension Link", + "description": "Remove reference dimension link from a node column", + "operationId": "remove_reference_dimension_link_nodes__node_name__columns__node_column__link_delete", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/nodes/{node_name}/columns/{column_name}": { - "patch": { - "tags": [ - "nodes" ], - "summary": "Set Column Display Name", - "description": "Set column name for the node", - "operationId": "set_column_display_name_nodes__node_name__columns__column_name__patch", "parameters": [ { - "required": true, - "schema": { - "type": "string", - "title": "Node Name" - }, "name": "node_name", - "in": "path" - }, - { + "in": "path", "required": true, "schema": { "type": "string", - "title": "Column Name" - }, - "name": "column_name", - "in": "path" + "title": "Node Name" + } }, { + "name": "node_column", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Display Name" - }, - "name": "display_name", - "in": "query" + "title": "Node Column" + } } ], "responses": { @@ -2308,9 +2491,7 @@ "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/datajunction_server__models__node__ColumnOutput" - } + "schema": {} } } }, @@ -2324,60 +2505,49 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/{node_name}/columns/{column_name}/partition": { + "/nodes/{node_name}/link": { "post": { "tags": [ "nodes" ], - "summary": "Set Node Column As Partition", - "description": "Add or update partition columns for the specified node.", - "operationId": "Set_Node_Column_as_Partition_nodes__node_name__columns__column_name__partition_post", + "summary": "Add Complex Dimension Link", + "description": "Links a source, dimension, or transform node to a dimension with a custom join query.\nIf a link already exists, updates the link definition.", + "operationId": "add_complex_dimension_link_nodes__node_name__link_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], "parameters": [ { - "required": true, - "schema": { - "type": "string", - "title": "Node Name" - }, "name": "node_name", - "in": "path" - }, - { + "in": "path", "required": true, "schema": { "type": "string", - "title": "Column Name" - }, - "name": "column_name", - "in": "path" + "title": "Node Name" + } } ], "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PartitionInput" + "$ref": "#/components/schemas/JoinLinkInput" } } - }, - "required": true + } }, "responses": { "201": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/datajunction_server__models__node__ColumnOutput" - } + "schema": {} } } }, @@ -2391,50 +2561,47 @@ } } } - }, + } + }, + "delete": { + "tags": [ + "nodes" + ], + "summary": "Remove Complex Dimension Link", + "description": "Removes a complex dimension link based on the dimension node and its role (if any).", + "operationId": "remove_complex_dimension_link_nodes__node_name__link_delete", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/nodes/{node_name}/copy": { - "post": { - "tags": [ - "nodes" ], - "summary": "Copy A Node", - "description": "Copy this node to a new name.", - "operationId": "Copy_A_Node_nodes__node_name__copy_post", "parameters": [ { - "required": true, - "schema": { - "type": "string", - "title": "Node Name" - }, "name": "node_name", - "in": "path" - }, - { + "in": "path", "required": true, "schema": { "type": "string", - "title": "New Name" - }, - "name": "new_name", - "in": "query" + "title": "Node Name" + } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LinkDimensionIdentifier" + } + } + } + }, "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/DAGNodeOutput" - } + "schema": {} } } }, @@ -2448,45 +2615,51 @@ } } } - }, + } + } + }, + "/nodes/{name}/tags": { + "post": { + "tags": [ + "nodes", + "tags" + ], + "summary": "Update Tags On Node", + "description": "Add a tag to a node", + "operationId": "Update_Tags_on_Node_nodes__name__tags_post", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/namespaces/{namespace}": { - "get": { - "tags": [ - "namespaces" ], - "summary": "List Nodes In Namespace", - "description": "List node names in namespace, filterable to a given type if desired.", - "operationId": "list_nodes_in_namespace_namespaces__namespace__get", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Namespace" - }, - "name": "namespace", - "in": "path" + "title": "Name" + } }, { - "description": "Filter the list of nodes to this type", + "name": "tag_names", + "in": "query", "required": false, "schema": { - "allOf": [ + "anyOf": [ { - "$ref": "#/components/schemas/NodeType" + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "null" } ], - "description": "Filter the list of nodes to this type" - }, - "name": "type_", - "in": "query" + "title": "Tag Names" + } } ], "responses": { @@ -2494,13 +2667,7 @@ "description": "Successful Response", "content": { "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/NodeMinimumDetail" - }, - "type": "array", - "title": "Response List Nodes In Namespace Namespaces Namespace Get" - } + "schema": {} } } }, @@ -2514,39 +2681,31 @@ } } } - }, + } + } + }, + "/nodes/{name}/refresh": { + "post": { + "tags": [ + "nodes" + ], + "summary": "Refresh Source Node", + "description": "Refresh a source node with the latest columns from the query service.", + "operationId": "refresh_source_node_nodes__name__refresh_post", "security": [ { "DJHTTPBearer": [] } - ] - }, - "post": { - "tags": [ - "namespaces" ], - "summary": "Create Node Namespace", - "description": "Create a node namespace", - "operationId": "create_node_namespace_namespaces__namespace__post", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Namespace" - }, - "name": "namespace", - "in": "path" - }, - { - "required": false, - "schema": { - "type": "boolean", - "title": "Include Parents", - "default": false - }, - "name": "include_parents", - "in": "query" + "title": "Name" + } } ], "responses": { @@ -2554,7 +2713,9 @@ "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "$ref": "#/components/schemas/NodeOutput" + } } } }, @@ -2568,41 +2729,40 @@ } } } - }, + } + } + }, + "/nodes/similarity/{node1_name}/{node2_name}": { + "get": { + "tags": [ + "nodes" + ], + "summary": "Calculate Node Similarity", + "description": "Compare two nodes by how similar their queries are", + "operationId": "calculate_node_similarity_nodes_similarity__node1_name___node2_name__get", "security": [ { "DJHTTPBearer": [] } - ] - }, - "delete": { - "tags": [ - "namespaces" ], - "summary": "Deactivate A Namespace", - "description": "Deactivates a node namespace", - "operationId": "deactivate_a_namespace_namespaces__namespace__delete", "parameters": [ { + "name": "node1_name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Namespace" - }, - "name": "namespace", - "in": "path" + "title": "Node1 Name" + } }, { - "description": "Cascade the deletion down to the nodes in the namespace", - "required": false, + "name": "node2_name", + "in": "path", + "required": true, "schema": { - "type": "boolean", - "title": "Cascade", - "description": "Cascade the deletion down to the nodes in the namespace", - "default": false - }, - "name": "cascade", - "in": "query" + "type": "string", + "title": "Node2 Name" + } } ], "responses": { @@ -2624,82 +2784,63 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/namespaces": { + "/nodes/{name}/downstream": { "get": { "tags": [ - "namespaces" + "nodes" ], - "summary": "List Namespaces", - "description": "List namespaces with the number of nodes contained in them", - "operationId": "list_namespaces_namespaces_get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/NamespaceOutput" - }, - "type": "array", - "title": "Response List Namespaces Namespaces Get" - } - } - } - } - }, + "summary": "List Downstream Nodes For A Node", + "description": "List all nodes that are downstream from the given node, filterable by type and max depth.\nSetting a max depth of -1 will include all downstream nodes.", + "operationId": "List_Downstream_Nodes_For_A_Node_nodes__name__downstream_get", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/namespaces/{namespace}/restore": { - "post": { - "tags": [ - "namespaces" ], - "summary": "Restore A Namespace", - "description": "Restores a node namespace", - "operationId": "restore_a_namespace_namespaces__namespace__restore_post", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Namespace" - }, - "name": "namespace", - "in": "path" + "title": "Name" + } }, { - "description": "Cascade the restore down to the nodes in the namespace", + "name": "node_type", + "in": "query", "required": false, "schema": { - "type": "boolean", - "title": "Cascade", - "description": "Cascade the restore down to the nodes in the namespace", - "default": false - }, - "name": "cascade", - "in": "query" + "$ref": "#/components/schemas/NodeType" + } + }, + { + "name": "depth", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": -1, + "title": "Depth" + } } ], "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DAGNodeOutput" + }, + "title": "Response List Downstream Nodes For A Node Nodes Name Downstream Get" + } } } }, @@ -2713,41 +2854,39 @@ } } } - }, + } + } + }, + "/nodes/{name}/upstream": { + "get": { + "tags": [ + "nodes" + ], + "summary": "List Upstream Nodes For A Node", + "description": "List all nodes that are upstream from the given node, filterable by type.", + "operationId": "List_Upstream_Nodes_For_A_Node_nodes__name__upstream_get", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/namespaces/{namespace}/hard": { - "delete": { - "tags": [ - "namespaces" ], - "summary": "Hard Delete A Dj Namespace", - "description": "Hard delete a namespace, which will completely remove the namespace. Additionally,\nif any nodes are saved under this namespace, we'll hard delete the nodes if cascade\nis set to true. If cascade is set to false, we'll raise an error. This should be used\nwith caution, as the impact may be large.", - "operationId": "Hard_Delete_a_DJ_Namespace_namespaces__namespace__hard_delete", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Namespace" - }, - "name": "namespace", - "in": "path" + "title": "Name" + } }, { + "name": "node_type", + "in": "query", "required": false, "schema": { - "type": "boolean", - "title": "Cascade", - "default": false - }, - "name": "cascade", - "in": "query" + "$ref": "#/components/schemas/NodeType" + } } ], "responses": { @@ -2755,7 +2894,13 @@ "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DAGNodeOutput" + }, + "title": "Response List Upstream Nodes For A Node Nodes Name Upstream Get" + } } } }, @@ -2769,31 +2914,31 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/namespaces/{namespace}/export": { + "/nodes/{name}/dag": { "get": { "tags": [ - "namespaces" + "nodes" + ], + "summary": "List All Connected Nodes (Upstreams + Downstreams)", + "description": "List all nodes that are part of the DAG of the given node. This means getting all upstreams,\ndownstreams, and linked dimension nodes.", + "operationId": "List_All_Connected_Nodes__Upstreams___Downstreams__nodes__name__dag_get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "Export A Namespace As A Single Project'S Metadata", - "description": "Generates a zip of YAML files for the contents of the given namespace\nas well as a project definition file.", - "operationId": "Export_a_namespace_as_a_single_project_s_metadata_namespaces__namespace__export_get", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Namespace" - }, - "name": "namespace", - "in": "path" + "title": "Name" + } } ], "responses": { @@ -2802,11 +2947,11 @@ "content": { "application/json": { "schema": { + "type": "array", "items": { - "type": "object" + "$ref": "#/components/schemas/DAGNodeOutput" }, - "type": "array", - "title": "Response Export A Namespace As A Single Project S Metadata Namespaces Namespace Export Get" + "title": "Response List All Connected Nodes Upstreams Downstreams Nodes Name Dag Get" } } } @@ -2821,74 +2966,55 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/materialization/info": { + "/nodes/{name}/dimensions": { "get": { "tags": [ - "materializations" + "nodes" ], - "summary": "Materialization Jobs Info", - "description": "Materialization job types and strategies", - "operationId": "Materialization_Jobs_Info_materialization_info_get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, + "summary": "List All Dimension Attributes", + "description": "List all available dimension attributes for the given node.", + "operationId": "List_All_Dimension_Attributes_nodes__name__dimensions_get", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/nodes/{node_name}/materialization": { - "post": { - "tags": [ - "materializations" ], - "summary": "Insert Or Update A Materialization For A Node", - "description": "Add or update a materialization of the specified node. If a node_name is specified\nfor the materialization config, it will always update that named config.", - "operationId": "Insert_or_Update_a_Materialization_for_a_Node_nodes__node_name__materialization_post", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Node Name" - }, - "name": "node_name", - "in": "path" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpsertMaterialization" - } + "title": "Name" } }, - "required": true - }, + { + "name": "depth", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 30, + "title": "Depth" + } + } + ], "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DimensionAttributeOutput" + }, + "title": "Response List All Dimension Attributes Nodes Name Dimensions Get" + } } } }, @@ -2902,41 +3028,31 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/nodes/{node_name}/materializations": { + "/nodes/{name}/lineage": { "get": { "tags": [ - "materializations" + "nodes" + ], + "summary": "List Column Level Lineage Of Node", + "description": "List column-level lineage of a node in a graph", + "operationId": "List_column_level_lineage_of_node_nodes__name__lineage_get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "List Materializations For A Node", - "description": "Show all materializations configured for the node, with any associated metadata\nlike urls from the materialization service, if available.", - "operationId": "List_Materializations_for_a_Node_nodes__node_name__materializations_get", "parameters": [ { + "name": "name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Node Name" - }, - "name": "node_name", - "in": "path" - }, - { - "required": false, - "schema": { - "type": "boolean", - "title": "Show Deleted", - "default": false - }, - "name": "show_deleted", - "in": "query" + "title": "Name" + } } ], "responses": { @@ -2945,11 +3061,11 @@ "content": { "application/json": { "schema": { + "type": "array", "items": { - "$ref": "#/components/schemas/MaterializationConfigInfoUnified" + "$ref": "#/components/schemas/LineageColumn" }, - "type": "array", - "title": "Response List Materializations For A Node Nodes Node Name Materializations Get" + "title": "Response List Column Level Lineage Of Node Nodes Name Lineage Get" } } } @@ -2964,51 +3080,58 @@ } } } - }, + } + } + }, + "/nodes/{node_name}/columns/{column_name}": { + "patch": { + "tags": [ + "nodes" + ], + "summary": "Set Column Display Name", + "description": "Set column name for the node", + "operationId": "set_column_display_name_nodes__node_name__columns__column_name__patch", "security": [ { "DJHTTPBearer": [] } - ] - }, - "delete": { - "tags": [ - "materializations" ], - "summary": "Deactivate A Materialization For A Node", - "description": "Deactivate the node materialization with the provided name.\nAlso calls the query service to deactivate the associated scheduled jobs.", - "operationId": "Deactivate_a_Materialization_for_a_Node_nodes__node_name__materializations_delete", "parameters": [ { + "name": "node_name", + "in": "path", "required": true, "schema": { "type": "string", "title": "Node Name" - }, - "name": "node_name", - "in": "path" + } }, { + "name": "column_name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Materialization Name" - }, - "name": "materialization_name", - "in": "query" + "title": "Column Name" + } + }, + { + "name": "display_name", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Display Name" + } } ], "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/MaterializationConfigInfoUnified" - }, - "type": "array", - "title": "Response Deactivate A Materialization For A Node Nodes Node Name Materializations Delete" + "$ref": "#/components/schemas/ColumnOutput" } } } @@ -3023,59 +3146,58 @@ } } } - }, + } + } + }, + "/nodes/{node_name}/columns/{column_name}/description": { + "patch": { + "tags": [ + "nodes" + ], + "summary": "Set Column Description", + "description": "Set column description for the node", + "operationId": "set_column_description_nodes__node_name__columns__column_name__description_patch", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/nodes/{node_name}/materializations/{materialization_name}/backfill": { - "post": { - "tags": [ - "materializations" ], - "summary": "Kick Off A Backfill Run For A Configured Materialization", - "description": "Start a backfill for a configured materialization.", - "operationId": "Kick_off_a_backfill_run_for_a_configured_materialization_nodes__node_name__materializations__materialization_name__backfill_post", "parameters": [ { + "name": "node_name", + "in": "path", "required": true, "schema": { "type": "string", "title": "Node Name" - }, - "name": "node_name", - "in": "path" + } }, { + "name": "column_name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Materialization Name" - }, - "name": "materialization_name", - "in": "path" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PartitionBackfill" - } + "title": "Column Name" } }, - "required": true - }, + { + "name": "description", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Description" + } + } + ], "responses": { "201": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MaterializationInfo" + "$ref": "#/components/schemas/ColumnOutput" } } } @@ -3090,81 +3212,51 @@ } } } - }, + } + } + }, + "/nodes/{node_name}/columns/{column_name}/partition": { + "post": { + "tags": [ + "nodes" + ], + "summary": "Set Node Column As Partition", + "description": "Add or update partition columns for the specified node.", + "operationId": "Set_Node_Column_as_Partition_nodes__node_name__columns__column_name__partition_post", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/measures": { - "get": { - "tags": [ - "measures" ], - "summary": "List Measures", - "description": "List all measures.", - "operationId": "list_measures_measures_get", "parameters": [ { - "required": false, + "name": "node_name", + "in": "path", + "required": true, "schema": { "type": "string", - "title": "Prefix" - }, - "name": "prefix", - "in": "query" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Response List Measures Measures Get" - } - } + "title": "Node Name" } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ { - "DJHTTPBearer": [] + "name": "column_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Column Name" + } } - ] - }, - "post": { - "tags": [ - "measures" ], - "summary": "Add A Measure", - "description": "Add a measure", - "operationId": "Add_a_Measure_measures_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateMeasure" + "$ref": "#/components/schemas/PartitionInput" } } - }, - "required": true + } }, "responses": { "201": { @@ -3172,7 +3264,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MeasureOutput" + "$ref": "#/components/schemas/ColumnOutput" } } } @@ -3187,31 +3279,40 @@ } } } - }, + } + } + }, + "/nodes/{node_name}/copy": { + "post": { + "tags": [ + "nodes" + ], + "summary": "Copy A Node", + "description": "Copy this node to a new name.", + "operationId": "Copy_A_Node_nodes__node_name__copy_post", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/measures/{measure_name}": { - "get": { - "tags": [ - "measures" ], - "summary": "Get Measure", - "description": "Get info on a measure.", - "operationId": "get_measure_measures__measure_name__get", "parameters": [ { + "name": "node_name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Measure Name" - }, - "name": "measure_name", - "in": "path" + "title": "Node Name" + } + }, + { + "name": "new_name", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "New Name" + } } ], "responses": { @@ -3220,7 +3321,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MeasureOutput" + "$ref": "#/components/schemas/DAGNodeOutput" } } } @@ -3235,49 +3336,56 @@ } } } - }, + } + } + }, + "/namespaces/{namespace}": { + "post": { + "tags": [ + "namespaces" + ], + "summary": "Create Node Namespace", + "description": "Create a node namespace", + "operationId": "create_node_namespace_namespaces__namespace__post", "security": [ { "DJHTTPBearer": [] } - ] - }, - "patch": { - "tags": [ - "measures" ], - "summary": "Edit A Measure", - "description": "Edit a measure", - "operationId": "Edit_a_Measure_measures__measure_name__patch", "parameters": [ { + "name": "namespace", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Measure Name" - }, - "name": "measure_name", - "in": "path" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EditMeasure" - } + "title": "Namespace" } }, - "required": true - }, + { + "name": "include_parents", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "title": "Include Parents" + } + } + ], "responses": { "201": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/MeasureOutput" - } + "schema": {} } } }, @@ -3291,49 +3399,73 @@ } } } - }, + } + }, + "get": { + "tags": [ + "namespaces" + ], + "summary": "List Nodes In Namespace", + "description": "List node names in namespace, filterable to a given type if desired.", + "operationId": "list_nodes_in_namespace_namespaces__namespace__get", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/data/{node_name}/availability": { - "post": { - "tags": [ - "data" ], - "summary": "Add Availability State To Node", - "description": "Add an availability state to a node.", - "operationId": "Add_Availability_State_to_Node_data__node_name__availability_post", "parameters": [ { + "name": "namespace", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Node Name" - }, - "name": "node_name", - "in": "path" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AvailabilityStateBase" - } + "title": "Namespace" } }, - "required": true - }, + { + "name": "type_", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeType" + }, + { + "type": "null" + } + ], + "description": "Filter the list of nodes to this type", + "title": "Type " + }, + "description": "Filter the list of nodes to this type" + }, + { + "name": "with_edited_by", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether to include a list of users who edited each node", + "default": false, + "title": "With Edited By" + }, + "description": "Whether to include a list of users who edited each node" + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NodeMinimumDetail" + }, + "title": "Response List Nodes In Namespace Namespaces Namespace Get" + } } } }, @@ -3347,117 +3479,41 @@ } } } - }, + } + }, + "delete": { + "tags": [ + "namespaces" + ], + "summary": "Deactivate A Namespace", + "description": "Deactivates a node namespace", + "operationId": "deactivate_a_namespace_namespaces__namespace__delete", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/data/{node_name}": { - "get": { - "tags": [ - "data" ], - "summary": "Get Data For A Node", - "description": "Gets data for a node", - "operationId": "Get_Data_for_a_Node_data__node_name__get", "parameters": [ { + "name": "namespace", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Node Name" - }, - "name": "node_name", - "in": "path" - }, - { - "description": "Dimensional attributes to group by", - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensional attributes to group by", - "default": [] - }, - "name": "dimensions", - "in": "query" - }, - { - "description": "Filters on dimensional attributes", - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Filters", - "description": "Filters on dimensional attributes", - "default": [] - }, - "name": "filters", - "in": "query" - }, - { - "description": "Expression to order by", - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Orderby", - "description": "Expression to order by", - "default": [] - }, - "name": "orderby", - "in": "query" - }, - { - "description": "Number of rows to limit the data retrieved to", - "required": false, - "schema": { - "type": "integer", - "title": "Limit", - "description": "Number of rows to limit the data retrieved to" - }, - "name": "limit", - "in": "query" + "title": "Namespace" + } }, { - "description": "Whether to run the query async or wait for results from the query engine", + "name": "cascade", + "in": "query", "required": false, "schema": { "type": "boolean", - "title": "Async ", - "description": "Whether to run the query async or wait for results from the query engine", - "default": false - }, - "name": "async_", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "string", - "title": "Engine Name" - }, - "name": "engine_name", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "string", - "title": "Engine Version" + "description": "Cascade the deletion down to the nodes in the namespace", + "default": false, + "title": "Cascade" }, - "name": "engine_version", - "in": "query" + "description": "Cascade the deletion down to the nodes in the namespace" } ], "responses": { @@ -3465,9 +3521,7 @@ "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/QueryWithResults" - } + "schema": {} } } }, @@ -3481,6 +3535,32 @@ } } } + } + } + }, + "/namespaces": { + "get": { + "tags": [ + "namespaces" + ], + "summary": "List Namespaces", + "description": "List namespaces with the number of nodes contained in them", + "operationId": "list_namespaces_namespaces_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/NamespaceOutput" + }, + "type": "array", + "title": "Response List Namespaces Namespaces Get" + } + } + } + } }, "security": [ { @@ -3489,33 +3569,48 @@ ] } }, - "/data/query/{query_id}": { - "get": { + "/namespaces/{namespace}/restore": { + "post": { "tags": [ - "data" + "namespaces" + ], + "summary": "Restore A Namespace", + "description": "Restores a node namespace", + "operationId": "restore_a_namespace_namespaces__namespace__restore_post", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "Get Data For Query Id", - "description": "Return data for a specific query ID.", - "operationId": "Get_Data_For_Query_ID_data_query__query_id__get", "parameters": [ { + "name": "namespace", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Query Id" + "title": "Namespace" + } + }, + { + "name": "cascade", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Cascade the restore down to the nodes in the namespace", + "default": false, + "title": "Cascade" }, - "name": "query_id", - "in": "path" + "description": "Cascade the restore down to the nodes in the namespace" } ], "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/QueryWithResults" - } + "schema": {} } } }, @@ -3529,111 +3624,87 @@ } } } - }, + } + } + }, + "/namespaces/{namespace}/hard": { + "delete": { + "tags": [ + "namespaces" + ], + "summary": "Hard Delete A Dj Namespace", + "description": "Hard delete a namespace, which will completely remove the namespace. Additionally,\nif any nodes are saved under this namespace, we'll hard delete the nodes if cascade\nis set to true. If cascade is set to false, we'll raise an error. This should be used\nwith caution, as the impact may be large.", + "operationId": "Hard_Delete_a_DJ_Namespace_namespaces__namespace__hard_delete", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/data": { - "get": { - "tags": [ - "data" ], - "summary": "Get Data For Metrics", - "description": "Return data for a set of metrics with dimensions and filters", - "operationId": "Get_Data_For_Metrics_data_get", "parameters": [ { - "required": false, + "name": "namespace", + "in": "path", + "required": true, "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Metrics", - "default": [] - }, - "name": "metrics", - "in": "query" + "type": "string", + "title": "Namespace" + } }, { + "name": "cascade", + "in": "query", "required": false, "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Dimensions", - "default": [] - }, - "name": "dimensions", - "in": "query" - }, - { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Filters", - "default": [] - }, - "name": "filters", - "in": "query" - }, - { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Orderby", - "default": [] - }, - "name": "orderby", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "integer", - "title": "Limit" - }, - "name": "limit", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "boolean", - "title": "Async ", - "default": false - }, - "name": "async_", - "in": "query" + "type": "boolean", + "default": false, + "title": "Cascade" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/namespaces/{namespace}/export": { + "get": { + "tags": [ + "namespaces" + ], + "summary": "Export A Namespace As A Single Project'S Metadata", + "description": "Generates a zip of YAML files for the contents of the given namespace\nas well as a project definition file.", + "operationId": "Export_a_namespace_as_a_single_project_s_metadata_namespaces__namespace__export_get", + "security": [ { - "required": false, - "schema": { - "type": "string", - "title": "Engine Name" - }, - "name": "engine_name", - "in": "query" - }, + "DJHTTPBearer": [] + } + ], + "parameters": [ { - "required": false, + "name": "namespace", + "in": "path", + "required": true, "schema": { "type": "string", - "title": "Engine Version" - }, - "name": "engine_version", - "in": "query" + "title": "Namespace" + } } ], "responses": { @@ -3642,7 +3713,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/QueryWithResults" + "type": "array", + "items": { + "type": "object" + }, + "title": "Response Export A Namespace As A Single Project S Metadata Namespaces Namespace Export Get" } } } @@ -3657,101 +3732,31 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/stream": { + "/namespaces/{namespace}/export/spec": { "get": { "tags": [ - "data" + "namespaces" ], - "summary": "Get Data Stream For Metrics", - "description": "Return data for a set of metrics with dimensions and filters using server side events", - "operationId": "get_data_stream_for_metrics_stream_get", - "parameters": [ - { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Metrics", - "default": [] - }, - "name": "metrics", - "in": "query" - }, - { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Dimensions", - "default": [] - }, - "name": "dimensions", - "in": "query" - }, - { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Filters", - "default": [] - }, - "name": "filters", - "in": "query" - }, - { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Orderby", - "default": [] - }, - "name": "orderby", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "integer", - "title": "Limit" - }, - "name": "limit", - "in": "query" - }, + "summary": "Export Namespace As A Deployment Specification", + "description": "Generates a deployment spec for a namespace", + "operationId": "Export_namespace_as_a_deployment_specification_namespaces__namespace__export_spec_get", + "security": [ { - "required": false, - "schema": { - "type": "string", - "title": "Engine Name" - }, - "name": "engine_name", - "in": "query" - }, + "DJHTTPBearer": [] + } + ], + "parameters": [ { - "required": false, + "name": "namespace", + "in": "path", + "required": true, "schema": { "type": "string", - "title": "Engine Version" - }, - "name": "engine_version", - "in": "query" + "title": "Namespace" + } } ], "responses": { @@ -3760,7 +3765,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/QueryWithResults" + "$ref": "#/components/schemas/DeploymentSpec-Output" } } } @@ -3775,33 +3780,43 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/health/": { + "/namespaces/{namespace}/export/yaml": { "get": { "tags": [ - "health" + "namespaces" + ], + "summary": "Export Namespace As Downloadable Yaml Zip", + "description": "Export a namespace as a downloadable ZIP file containing YAML files.\n\nThe ZIP structure matches the expected layout for `dj push`:\n- dj.yaml (project manifest)\n- /.yaml (one file per node)\n\nThis makes it easy to start managing nodes via Git/CI-CD.", + "operationId": "Export_namespace_as_downloadable_YAML_ZIP_namespaces__namespace__export_yaml_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "namespace", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Namespace" + } + } ], - "summary": "Health Check", - "description": "Healthcheck for services.", - "operationId": "health_check_health__get", "responses": { "200": { - "description": "Successful Response", + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/HealthCheck" - }, - "type": "array", - "title": "Response Health Check Health Get" + "$ref": "#/components/schemas/HTTPValidationError" } } } @@ -3809,52 +3824,28 @@ } } }, - "/history/{entity_type}/{entity_name}": { + "/namespaces/{namespace}/sources": { "get": { "tags": [ - "history" + "namespaces" ], - "summary": "List History", - "description": "List history for an entity type (i.e. Node) and entity name", - "operationId": "list_history_history__entity_type___entity_name__get", - "parameters": [ + "summary": "Get Deployment Sources For A Namespace", + "description": "Get all deployment sources that have deployed to this namespace.\n\nThis helps teams understand:\n- Whether a namespace is managed by CI/CD\n- Which repositories have deployed to this namespace\n- If there are multiple sources (potential conflict indicator)", + "operationId": "Get_deployment_sources_for_a_namespace_namespaces__namespace__sources_get", + "security": [ { - "required": true, - "schema": { - "$ref": "#/components/schemas/EntityType" - }, - "name": "entity_type", - "in": "path" - }, + "DJHTTPBearer": [] + } + ], + "parameters": [ { + "name": "namespace", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Entity Name" - }, - "name": "entity_name", - "in": "path" - }, - { - "required": false, - "schema": { - "type": "integer", - "title": "Offset", - "default": 0 - }, - "name": "offset", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "integer", - "title": "Limit", - "default": 100, - "lte": 100 - }, - "name": "limit", - "in": "query" + "title": "Namespace" + } } ], "responses": { @@ -3863,11 +3854,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/HistoryOutput" - }, - "type": "array", - "title": "Response List History History Entity Type Entity Name Get" + "$ref": "#/components/schemas/NamespaceSourcesResponse" } } } @@ -3882,65 +3869,34 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/history": { - "get": { + "/namespaces/sources/bulk": { + "post": { "tags": [ - "history" + "namespaces" ], - "summary": "List History By Node Context", - "description": "List all activity history for a node context", - "operationId": "list_history_by_node_context_history_get", - "parameters": [ - { - "required": true, - "schema": { - "type": "string", - "title": "Node" - }, - "name": "node", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "integer", - "title": "Offset", - "default": 0 - }, - "name": "offset", - "in": "query" + "summary": "Get Deployment Sources For Multiple Namespaces", + "description": "Get deployment sources for multiple namespaces in a single request.\n\nThis is useful for displaying CI/CD badges in the UI for all visible namespaces.\nReturns a map of namespace name -> source info for each requested namespace.", + "operationId": "Get_deployment_sources_for_multiple_namespaces_namespaces_sources_bulk_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BulkNamespaceSourcesRequest" + } + } }, - { - "required": false, - "schema": { - "type": "integer", - "title": "Limit", - "default": 100, - "lte": 100 - }, - "name": "limit", - "in": "query" - } - ], + "required": true + }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/HistoryOutput" - }, - "type": "array", - "title": "Response List History By Node Context History Get" + "$ref": "#/components/schemas/BulkNamespaceSourcesResponse" } } } @@ -3963,33 +3919,88 @@ ] } }, - "/cubes/{name}": { + "/materialization/info": { "get": { "tags": [ - "cubes" + "materializations" + ], + "summary": "Materialization Jobs Info", + "description": "Materialization job types and strategies", + "operationId": "Materialization_Jobs_Info_materialization_info_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } + }, + "/nodes/{node_name}/materialization": { + "post": { + "tags": [ + "materializations" + ], + "summary": "Insert Or Update A Materialization For A Node", + "description": "Add or update a materialization of the specified node. If a node_name is specified\nfor the materialization config, it will always update that named config.", + "operationId": "Insert_or_Update_a_Materialization_for_a_Node_nodes__node_name__materialization_post", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "Get A Cube", - "description": "Get information on a cube", - "operationId": "Get_a_Cube_cubes__name__get", "parameters": [ { + "name": "node_name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" + "title": "Node Name" + } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/UpsertCubeMaterialization" + }, + { + "$ref": "#/components/schemas/UpsertMaterialization" + } + ], + "discriminator": { + "propertyName": "job", + "mapping": { + "druid_cube": "#/components/schemas/UpsertCubeMaterialization", + "spark_sql": "#/components/schemas/UpsertMaterialization", + "druid_measures_cube": "#/components/schemas/UpsertMaterialization", + "druid_metrics_cube": "#/components/schemas/UpsertMaterialization" + } + }, + "title": "Materialization" + } + } + } + }, "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/CubeRevisionMetadata" - } + "schema": {} } } }, @@ -4003,78 +4014,51 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/cubes/{name}/dimensions/sql": { + "/nodes/{node_name}/materializations": { "get": { "tags": [ - "cubes" + "materializations" + ], + "summary": "List Materializations For A Node", + "description": "Show all materializations configured for the node, with any associated metadata\nlike urls from the materialization service, if available.\n\nshow_inactive: bool - Show materializations that have a deactivated_at timestamp set\ninclude_all_revisions: bool - Show materializations for all revisions of the node", + "operationId": "List_Materializations_for_a_Node_nodes__node_name__materializations_get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "Dimensions Sql For Cube", - "description": "Generates SQL to retrieve all unique values of a dimension for the cube", - "operationId": "Dimensions_SQL_for_Cube_cubes__name__dimensions_sql_get", "parameters": [ { + "name": "node_name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" - }, - { - "description": "Dimensions to get values for", - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to get values for", - "default": [] - }, - "name": "dimensions", - "in": "query" - }, - { - "description": "Filters on dimensional attributes", - "required": false, - "schema": { - "type": "string", - "title": "Filters", - "description": "Filters on dimensional attributes" - }, - "name": "filters", - "in": "query" + "title": "Node Name" + } }, { - "description": "Number of rows to limit the data retrieved to", + "name": "show_inactive", + "in": "query", "required": false, "schema": { - "type": "integer", - "title": "Limit", - "description": "Number of rows to limit the data retrieved to" - }, - "name": "limit", - "in": "query" + "type": "boolean", + "default": false, + "title": "Show Inactive" + } }, { + "name": "include_all_revisions", + "in": "query", "required": false, "schema": { "type": "boolean", - "title": "Include Counts", - "default": false - }, - "name": "include_counts", - "in": "query" + "default": false, + "title": "Include All Revisions" + } } ], "responses": { @@ -4083,7 +4067,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TranslatedSQL" + "type": "array", + "items": { + "$ref": "#/components/schemas/MaterializationConfigInfoUnified" + }, + "title": "Response List Materializations For A Node Nodes Node Name Materializations Get" } } } @@ -4098,88 +4086,54 @@ } } } - }, + } + }, + "delete": { + "tags": [ + "materializations" + ], + "summary": "Deactivate A Materialization For A Node", + "description": "Deactivate the node materialization with the provided name.\nAlso calls the query service to deactivate the associated scheduled jobs.\n\nIf node_version not provided, it will deactivate the materialization\nfor the current version of the node.", + "operationId": "Deactivate_a_Materialization_for_a_Node_nodes__node_name__materializations_delete", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/cubes/{name}/dimensions/data": { - "get": { - "tags": [ - "cubes" ], - "summary": "Dimensions Values For Cube", - "description": "All unique values of a dimension from the cube", - "operationId": "Dimensions_Values_for_Cube_cubes__name__dimensions_data_get", "parameters": [ { + "name": "node_name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" - }, - { - "description": "Dimensions to get values for", - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Dimensions", - "description": "Dimensions to get values for", - "default": [] - }, - "name": "dimensions", - "in": "query" + "title": "Node Name" + } }, { - "description": "Filters on dimensional attributes", - "required": false, + "name": "materialization_name", + "in": "query", + "required": true, "schema": { "type": "string", - "title": "Filters", - "description": "Filters on dimensional attributes" - }, - "name": "filters", - "in": "query" - }, - { - "description": "Number of rows to limit the data retrieved to", - "required": false, - "schema": { - "type": "integer", - "title": "Limit", - "description": "Number of rows to limit the data retrieved to" - }, - "name": "limit", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "boolean", - "title": "Include Counts", - "default": false - }, - "name": "include_counts", - "in": "query" + "title": "Materialization Name" + } }, { + "name": "node_version", + "in": "query", "required": false, "schema": { - "type": "boolean", - "title": "Async ", - "default": false - }, - "name": "async_", - "in": "query" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node Version" + } } ], "responses": { @@ -4187,9 +4141,7 @@ "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/DimensionValues" - } + "schema": {} } } }, @@ -4203,44 +4155,63 @@ } } } - }, + } + } + }, + "/nodes/{node_name}/materializations/{materialization_name}/backfill": { + "post": { + "tags": [ + "materializations" + ], + "summary": "Kick Off A Backfill Run For A Configured Materialization", + "description": "Start a backfill for a configured materialization.", + "operationId": "Kick_off_a_backfill_run_for_a_configured_materialization_nodes__node_name__materializations__materialization_name__backfill_post", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/tags": { - "get": { - "tags": [ - "tags" ], - "summary": "List Tags", - "description": "List all available tags.", - "operationId": "list_tags_tags_get", "parameters": [ { - "required": false, + "name": "node_name", + "in": "path", + "required": true, "schema": { "type": "string", - "title": "Tag Type" - }, - "name": "tag_type", - "in": "query" + "title": "Node Name" + } + }, + { + "name": "materialization_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Materialization Name" + } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PartitionBackfill" + }, + "title": "Backfill Partitions" + } + } + } + }, "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/TagOutput" - }, - "type": "array", - "title": "Response List Tags Tags Get" + "$ref": "#/components/schemas/MaterializationInfo" } } } @@ -4255,37 +4226,44 @@ } } } - }, + } + } + }, + "/nodes/{node_name}/availability": { + "get": { + "tags": [ + "materializations" + ], + "summary": "List All Availability States For A Node", + "description": "Retrieve all availability states for a given node across all revisions.", + "operationId": "List_All_Availability_States_for_a_Node_nodes__node_name__availability_get", "security": [ { "DJHTTPBearer": [] } - ] - }, - "post": { - "tags": [ - "tags" ], - "summary": "Create A Tag", - "description": "Create a tag.", - "operationId": "create_a_tag_tags_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateTag" - } + "parameters": [ + { + "name": "node_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Node Name" } - }, - "required": true - }, + } + ], "responses": { - "201": { + "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagOutput" + "type": "array", + "items": { + "$ref": "#/components/schemas/AvailabilityStateInfo" + }, + "title": "Response List All Availability States For A Node Nodes Node Name Availability Get" } } } @@ -4300,31 +4278,38 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/tags/{name}": { + "/measures": { "get": { "tags": [ - "tags" + "measures" + ], + "summary": "List Measures", + "description": "List all measures.", + "operationId": "list_measures_measures_get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "Get A Tag", - "description": "Return a tag by name.", - "operationId": "get_a_tag_tags__name__get", "parameters": [ { - "required": true, + "name": "prefix", + "in": "query", + "required": false, "schema": { - "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prefix" + } } ], "responses": { @@ -4333,7 +4318,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagOutput" + "type": "array", + "items": { + "type": "string" + }, + "title": "Response List Measures Measures Get" } } } @@ -4348,48 +4337,37 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } }, - "patch": { + "post": { "tags": [ - "tags" + "measures" ], - "summary": "Update A Tag", - "description": "Update a tag.", - "operationId": "update_a_tag_tags__name__patch", - "parameters": [ + "summary": "Add A Measure", + "description": "Add a measure", + "operationId": "Add_a_Measure_measures_post", + "security": [ { - "required": true, - "schema": { - "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" + "DJHTTPBearer": [] } ], "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateTag" + "$ref": "#/components/schemas/CreateMeasure" } } - }, - "required": true + } }, "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TagOutput" + "$ref": "#/components/schemas/MeasureOutput" } } } @@ -4404,39 +4382,31 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/tags/{name}/nodes": { + "/measures/{measure_name}": { "get": { "tags": [ - "tags" + "measures" + ], + "summary": "Get Measure", + "description": "Get info on a measure.", + "operationId": "get_measure_measures__measure_name__get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "List Nodes For A Tag", - "description": "Find nodes tagged with the tag, filterable by node type.", - "operationId": "list_nodes_for_a_tag_tags__name__nodes_get", "parameters": [ { + "name": "measure_name", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" - }, - { - "required": false, - "schema": { - "$ref": "#/components/schemas/NodeType" - }, - "name": "node_type", - "in": "query" + "title": "Measure Name" + } } ], "responses": { @@ -4445,11 +4415,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/NodeMinimumDetail" - }, - "type": "array", - "title": "Response List Nodes For A Tag Tags Name Nodes Get" + "$ref": "#/components/schemas/MeasureOutput" } } } @@ -4464,60 +4430,40 @@ } } } - }, + } + }, + "patch": { + "tags": [ + "measures" + ], + "summary": "Edit A Measure", + "description": "Edit a measure", + "operationId": "Edit_a_Measure_measures__measure_name__patch", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/attributes": { - "get": { - "tags": [ - "attributes" ], - "summary": "List Attributes", - "description": "List all available attribute types.", - "operationId": "list_attributes_attributes_get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/AttributeTypeBase" - }, - "type": "array", - "title": "Response List Attributes Attributes Get" - } - } - } - } - }, - "security": [ + "parameters": [ { - "DJHTTPBearer": [] + "name": "measure_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Measure Name" + } } - ] - }, - "post": { - "tags": [ - "attributes" ], - "summary": "Add An Attribute Type", - "description": "Add a new attribute type", - "operationId": "Add_an_Attribute_Type_attributes_post", "requestBody": { + "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/MutableAttributeTypeFields" + "$ref": "#/components/schemas/EditMeasure" } } - }, - "required": true + } }, "responses": { "201": { @@ -4525,7 +4471,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AttributeTypeBase" + "$ref": "#/components/schemas/MeasureOutput" } } } @@ -4540,79 +4486,86 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/sql/measures": { + "/frozen-measures": { "get": { "tags": [ - "sql" + "measures" ], - "summary": "Get Measures Sql", - "description": "Return the measures SQL for a set of metrics with dimensions and filters.\nThis SQL can be used to produce an intermediate table with all the measures\nand dimensions needed for an analytics database (e.g., Druid).", - "operationId": "Get_Measures_SQL_sql_measures_get", - "parameters": [ + "summary": "List Frozen Measures", + "description": "List all frozen measures, with optional filters:\n- prefix: only measures whose names start with this prefix\n- aggregation: filter by aggregation type (e.g., SUM, COUNT)\n- upstream_name: filter by the upstream node revision's name\n- upstream_version: filter by the upstream node revision's version", + "operationId": "list_frozen_measures_frozen_measures_get", + "security": [ { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Metrics", - "default": [] - }, - "name": "metrics", - "in": "query" - }, + "DJHTTPBearer": [] + } + ], + "parameters": [ { + "name": "prefix", + "in": "query", "required": false, "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Dimensions", - "default": [] - }, - "name": "dimensions", - "in": "query" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prefix" + } }, { + "name": "aggregation", + "in": "query", "required": false, "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Filters", - "default": [] - }, - "name": "filters", - "in": "query" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Aggregation" + } }, { + "name": "upstream_name", + "in": "query", "required": false, "schema": { - "type": "string", - "title": "Engine Name" - }, - "name": "engine_name", - "in": "query" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Upstream Name" + } }, { + "name": "upstream_version", + "in": "query", "required": false, "schema": { - "type": "string", - "title": "Engine Version" - }, - "name": "engine_version", - "in": "query" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Upstream Version" + } } ], "responses": { @@ -4621,7 +4574,11 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TranslatedSQL" + "type": "array", + "items": { + "$ref": "#/components/schemas/FrozenMeasureOutput" + }, + "title": "Response List Frozen Measures Frozen Measures Get" } } } @@ -4636,97 +4593,85 @@ } } } - }, + } + } + }, + "/data/{node_name}/availability": { + "post": { + "tags": [ + "data" + ], + "summary": "Add Availability State To Node", + "description": "Add an availability state to a node.", + "operationId": "Add_Availability_State_to_Node_data__node_name__availability_post", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/sql/{node_name}": { - "get": { - "tags": [ - "sql" ], - "summary": "Get Sql For A Node", - "description": "Return SQL for a node.", - "operationId": "Get_SQL_For_A_Node_sql__node_name__get", "parameters": [ { + "name": "node_name", + "in": "path", "required": true, "schema": { "type": "string", "title": "Node Name" - }, - "name": "node_name", - "in": "path" - }, - { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Dimensions", - "default": [] - }, - "name": "dimensions", - "in": "query" - }, - { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Filters", - "default": [] - }, - "name": "filters", - "in": "query" - }, - { - "required": false, - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Orderby", - "default": [] - }, - "name": "orderby", - "in": "query" - }, - { - "required": false, - "schema": { - "type": "integer", - "title": "Limit" - }, - "name": "limit", - "in": "query" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AvailabilityStateBase" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "delete": { + "tags": [ + "data" + ], + "summary": "Remove Availability State From Node", + "description": "Remove an availability state from a node.", + "operationId": "Remove_Availability_State_from_Node_data__node_name__availability_delete", + "security": [ { - "required": false, - "schema": { - "type": "string", - "title": "Engine Name" - }, - "name": "engine_name", - "in": "query" - }, + "DJHTTPBearer": [] + } + ], + "parameters": [ { - "required": false, + "name": "node_name", + "in": "path", + "required": true, "schema": { "type": "string", - "title": "Engine Version" - }, - "name": "engine_version", - "in": "query" + "title": "Node Name" + } } ], "responses": { @@ -4734,9 +4679,7 @@ "description": "Successful Response", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/TranslatedSQL" - } + "schema": {} } } }, @@ -4750,101 +4693,174 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/sql": { + "/data/{node_name}": { "get": { "tags": [ - "sql" + "data" + ], + "summary": "Get Data For A Node", + "description": "Gets data for a node", + "operationId": "Get_Data_for_a_Node_data__node_name__get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "Get Sql For Metrics", - "description": "Return SQL for a set of metrics with dimensions and filters", - "operationId": "Get_SQL_For_Metrics_sql_get", "parameters": [ { + "name": "node_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Node Name" + } + }, + { + "name": "dimensions", + "in": "query", "required": false, "schema": { + "type": "array", "items": { "type": "string" }, - "type": "array", - "title": "Metrics", - "default": [] + "description": "Dimensional attributes to group by", + "default": [], + "title": "Dimensions" }, - "name": "metrics", - "in": "query" + "description": "Dimensional attributes to group by" }, { + "name": "filters", + "in": "query", "required": false, "schema": { + "type": "array", "items": { "type": "string" }, - "type": "array", - "title": "Dimensions", - "default": [] + "description": "Filters on dimensional attributes", + "default": [], + "title": "Filters" }, - "name": "dimensions", - "in": "query" + "description": "Filters on dimensional attributes" }, { + "name": "orderby", + "in": "query", "required": false, "schema": { + "type": "array", "items": { "type": "string" }, - "type": "array", - "title": "Filters", - "default": [] + "description": "Expression to order by", + "default": [], + "title": "Orderby" }, - "name": "filters", - "in": "query" + "description": "Expression to order by" }, { + "name": "limit", + "in": "query", "required": false, "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Orderby", - "default": [] + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Number of rows to limit the data retrieved to", + "title": "Limit" }, - "name": "orderby", - "in": "query" + "description": "Number of rows to limit the data retrieved to" }, { + "name": "async_", + "in": "query", "required": false, "schema": { - "type": "integer", - "title": "Limit" + "type": "boolean", + "description": "Whether to run the query async or wait for results from the query engine", + "default": false, + "title": "Async " }, - "name": "limit", - "in": "query" + "description": "Whether to run the query async or wait for results from the query engine" }, { + "name": "use_materialized", + "in": "query", "required": false, "schema": { - "type": "string", - "title": "Engine Name" + "type": "boolean", + "description": "Whether to use materialized nodes when available", + "default": true, + "title": "Use Materialized" }, - "name": "engine_name", - "in": "query" + "description": "Whether to use materialized nodes when available" + }, + { + "name": "ignore_errors", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether to ignore errors when building the query", + "default": false, + "title": "Ignore Errors" + }, + "description": "Whether to ignore errors when building the query" }, { + "name": "query_params", + "in": "query", "required": false, "schema": { "type": "string", - "title": "Engine Version" + "description": "Query parameters", + "default": "{}", + "title": "Query Params" }, + "description": "Query parameters" + }, + { + "name": "engine_name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Name" + } + }, + { "name": "engine_version", - "in": "query" + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Version" + } } ], "responses": { @@ -4853,7 +4869,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TranslatedSQL" + "$ref": "#/components/schemas/QueryWithResults" } } } @@ -4868,89 +4884,138 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/datajunction-clients/python/new_node/{node_name}": { + "/stream/{node_name}": { "get": { "tags": [ - "client" - ], - "summary": "Client Code For Creating Node", - "description": "Generate the Python client code used for creating this node", - "operationId": "client_code_for_creating_node_datajunction_clients_python_new_node__node_name__get", - "parameters": [ - { - "required": true, - "schema": { - "type": "string", - "title": "Node Name" - }, - "name": "node_name", - "in": "path" - } + "data" ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "type": "string", - "title": "Response Client Code For Creating Node Datajunction Clients Python New Node Node Name Get" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, + "summary": "Get Data Stream For Node", + "description": "Return data for a node using server side events", + "operationId": "get_data_stream_for_node_stream__node_name__get", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/datajunction-clients/python/add_materialization/{node_name}/{materialization_name}": { - "get": { - "tags": [ - "client" ], - "summary": "Client Code For Adding Materialization", - "description": "Generate the Python client code used for adding this materialization", - "operationId": "client_code_for_adding_materialization_datajunction_clients_python_add_materialization__node_name___materialization_name__get", "parameters": [ { + "name": "node_name", + "in": "path", "required": true, "schema": { "type": "string", "title": "Node Name" + } + }, + { + "name": "dimensions", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Dimensional attributes to group by", + "default": [], + "title": "Dimensions" }, - "name": "node_name", - "in": "path" + "description": "Dimensional attributes to group by" }, { - "required": true, + "name": "filters", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Filters on dimensional attributes", + "default": [], + "title": "Filters" + }, + "description": "Filters on dimensional attributes" + }, + { + "name": "orderby", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Expression to order by", + "default": [], + "title": "Orderby" + }, + "description": "Expression to order by" + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Number of rows to limit the data retrieved to", + "title": "Limit" + }, + "description": "Number of rows to limit the data retrieved to" + }, + { + "name": "query_params", + "in": "query", + "required": false, "schema": { "type": "string", - "title": "Materialization Name" + "description": "Query parameters", + "default": "{}", + "title": "Query Params" }, - "name": "materialization_name", - "in": "path" + "description": "Query parameters" + }, + { + "name": "engine_name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Name" + } + }, + { + "name": "engine_version", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Version" + } } ], "responses": { @@ -4959,8 +5024,7 @@ "content": { "application/json": { "schema": { - "type": "string", - "title": "Response Client Code For Adding Materialization Datajunction Clients Python Add Materialization Node Name Materialization Name Get" + "$ref": "#/components/schemas/QueryWithResults" } } } @@ -4975,49 +5039,31 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/datajunction-clients/python/link_dimension/{node_name}/{column}/{dimension}": { + "/data/query/{query_id}": { "get": { "tags": [ - "client" + "data" ], - "summary": "Client Code For Linking Dimension To Node", - "description": "Generate the Python client code used for linking this node's column to a dimension", - "operationId": "client_code_for_linking_dimension_to_node_datajunction_clients_python_link_dimension__node_name___column___dimension__get", - "parameters": [ - { - "required": true, - "schema": { - "type": "string", - "title": "Node Name" - }, - "name": "node_name", - "in": "path" - }, + "summary": "Get Data For Query Id", + "description": "Return data for a specific query ID.", + "operationId": "Get_Data_For_Query_ID_data_query__query_id__get", + "security": [ { - "required": true, - "schema": { - "type": "string", - "title": "Column" - }, - "name": "column", - "in": "path" - }, + "DJHTTPBearer": [] + } + ], + "parameters": [ { + "name": "query_id", + "in": "path", "required": true, "schema": { "type": "string", - "title": "Dimension" - }, - "name": "dimension", - "in": "path" + "title": "Query Id" + } } ], "responses": { @@ -5026,8 +5072,7 @@ "content": { "application/json": { "schema": { - "type": "string", - "title": "Response Client Code For Linking Dimension To Node Datajunction Clients Python Link Dimension Node Name Column Dimension Get" + "$ref": "#/components/schemas/QueryWithResults" } } } @@ -5042,94 +5087,144 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/dimensions": { + "/data": { "get": { "tags": [ - "dimensions" + "data" + ], + "summary": "Get Data For Metrics", + "description": "Return data for a set of metrics with dimensions and filters", + "operationId": "Get_Data_For_Metrics_data_get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "List Dimensions", - "description": "List all available dimensions.", - "operationId": "list_dimensions_dimensions_get", "parameters": [ { + "name": "metrics", + "in": "query", "required": false, "schema": { - "type": "string", - "title": "Prefix" - }, - "name": "prefix", - "in": "query" - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Response List Dimensions Dimensions Get" - } - } + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Metrics" } }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - }, - "security": [ { - "DJHTTPBearer": [] - } - ] - } - }, - "/dimensions/{name}/nodes": { - "get": { - "tags": [ - "dimensions" - ], - "summary": "Find Nodes With Dimension", - "description": "List all nodes that have the specified dimension", - "operationId": "find_nodes_with_dimension_dimensions__name__nodes_get", - "parameters": [ + "name": "dimensions", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Dimensions" + } + }, { - "required": true, + "name": "filters", + "in": "query", + "required": false, "schema": { - "type": "string", - "title": "Name" - }, - "name": "name", - "in": "path" + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Filters" + } }, { + "name": "orderby", + "in": "query", "required": false, "schema": { + "type": "array", "items": { - "$ref": "#/components/schemas/NodeType" + "type": "string" }, - "type": "array" + "default": [], + "title": "Orderby" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Limit" + } + }, + { + "name": "query_params", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "Query parameters", + "default": "{}", + "title": "Query Params" }, - "name": "node_type", - "in": "query" + "description": "Query parameters" + }, + { + "name": "async_", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Async " + } + }, + { + "name": "engine_name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Name" + } + }, + { + "name": "engine_version", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Version" + } } ], "responses": { @@ -5138,11 +5233,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/NodeRevisionOutput" - }, - "type": "array", - "title": "Response Find Nodes With Dimension Dimensions Name Nodes Get" + "$ref": "#/components/schemas/QueryWithResults" } } } @@ -5157,45 +5248,122 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/dimensions/common": { + "/stream": { "get": { "tags": [ - "dimensions" + "data" + ], + "summary": "Get Data Stream For Metrics", + "description": "Return data for a set of metrics with dimensions and filters using server sent events", + "operationId": "get_data_stream_for_metrics_stream_get", + "security": [ + { + "DJHTTPBearer": [] + } ], - "summary": "Find Nodes With Common Dimensions", - "description": "Find all nodes that have the list of common dimensions", - "operationId": "find_nodes_with_common_dimensions_dimensions_common_get", "parameters": [ { + "name": "metrics", + "in": "query", "required": false, "schema": { + "type": "array", "items": { "type": "string" }, + "default": [], + "title": "Metrics" + } + }, + { + "name": "dimensions", + "in": "query", + "required": false, + "schema": { "type": "array", - "title": "Dimension" - }, - "name": "dimension", - "in": "query" + "items": { + "type": "string" + }, + "default": [], + "title": "Dimensions" + } }, { + "name": "filters", + "in": "query", "required": false, "schema": { + "type": "array", "items": { - "$ref": "#/components/schemas/NodeType" + "type": "string" }, - "type": "array" - }, - "name": "node_type", - "in": "query" + "default": [], + "title": "Filters" + } + }, + { + "name": "orderby", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Orderby" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Limit" + } + }, + { + "name": "engine_name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Name" + } + }, + { + "name": "engine_version", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Version" + } } ], "responses": { @@ -5204,11 +5372,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/NodeRevisionOutput" - }, - "type": "array", - "title": "Response Find Nodes With Common Dimensions Dimensions Common Get" + "$ref": "#/components/schemas/QueryWithResults" } } } @@ -5223,123 +5387,100 @@ } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] - } - }, - "/graphql": { - "get": { - "summary": "Handle Http Get", - "operationId": "handle_http_get_graphql_get", - "responses": { - "200": { - "description": "The GraphiQL integrated development environment.", - "content": { - "application/json": { - "schema": {} - } - } - }, - "404": { - "description": "Not found if GraphiQL or query via GET are not enabled." - } - } - }, - "post": { - "summary": "Handle Http Post", - "operationId": "handle_http_post_graphql_post", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } } } }, - "/whoami": { + "/health/": { "get": { "tags": [ - "Who am I?" + "health" ], - "summary": "Get User", - "description": "Returns the current authenticated user", - "operationId": "get_user_whoami_get", + "summary": "Health Check", + "description": "Healthcheck for services.", + "operationId": "health_check_health__get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserOutput" + "items": { + "$ref": "#/components/schemas/HealthCheck" + }, + "type": "array", + "title": "Response Health Check Health Get" } } } } - }, - "security": [ - { - "DJHTTPBearer": [] - } - ] + } } }, - "/token": { + "/history/{entity_type}/{entity_name}": { "get": { "tags": [ - "Who am I?" + "history" ], - "summary": "Get Short Lived Token", - "description": "Returns a token that expires in 24 hours", - "operationId": "get_short_lived_token_token_get", - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - } - }, + "summary": "List History", + "description": "List history for an entity type (i.e. Node) and entity name", + "operationId": "list_history_history__entity_type___entity_name__get", "security": [ { "DJHTTPBearer": [] } - ] - } - }, - "/basic/user/": { - "post": { - "tags": [ - "Basic OAuth2" ], - "summary": "Create A User", - "description": "Create a new user", - "operationId": "create_a_user_basic_user__post", - "requestBody": { - "content": { - "application/x-www-form-urlencoded": { - "schema": { - "$ref": "#/components/schemas/Body_create_a_user_basic_user__post" - } + "parameters": [ + { + "name": "entity_type", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/EntityType" } }, - "required": true - }, + { + "name": "entity_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Entity Name" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 0, + "title": "Offset" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "lte": 100, + "default": 100, + "title": "Limit" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HistoryOutput" + }, + "title": "Response List History History Entity Type Entity Name Get" + } } } }, @@ -5356,30 +5497,80 @@ } } }, - "/basic/login/": { - "post": { + "/history": { + "get": { "tags": [ - "Basic OAuth2" + "history" ], - "summary": "Login", - "description": "Get a JWT token and set it as an HTTP only cookie", - "operationId": "login_basic_login__post", - "requestBody": { - "content": { - "application/x-www-form-urlencoded": { - "schema": { - "$ref": "#/components/schemas/Body_login_basic_login__post" - } + "summary": "List History By Node Context", + "description": "List all activity history for a node context", + "operationId": "list_history_by_node_context_history_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "node", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node" } }, - "required": true - }, + { + "name": "only_subscribed", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Only Subscribed" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "default": 0, + "title": "Offset" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "lte": 100, + "default": 100, + "title": "Limit" + } + } + ], "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HistoryOutput" + }, + "title": "Response List History By Node Context History Get" + } } } }, @@ -5396,25 +5587,5113 @@ } } }, - "/logout/": { - "post": { + "/cubes": { + "get": { "tags": [ - "Basic OAuth2" + "cubes" + ], + "summary": "Get All Cubes", + "description": "Get information on all cubes", + "operationId": "Get_all_Cubes_cubes_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "catalog", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter to include only cubes available in a specific catalog", + "title": "Catalog" + }, + "description": "Filter to include only cubes available in a specific catalog" + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "Page number (starting from 1)", + "default": 1, + "title": "Page" + }, + "description": "Page number (starting from 1)" + }, + { + "name": "page_size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 1000, + "minimum": 1, + "description": "Number of items per page (max 1000)", + "default": 10, + "title": "Page Size" + }, + "description": "Number of items per page (max 1000)" + } ], - "summary": "Logout", - "description": "Logout a user by deleting the auth cookie", - "operationId": "logout_logout__post", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { - "schema": {} + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CubeRevisionMetadata" + }, + "title": "Response Get All Cubes Cubes Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } } } } } } + }, + "/cubes/{name}": { + "get": { + "tags": [ + "cubes" + ], + "summary": "Get A Cube", + "description": "Get information on a cube", + "operationId": "Get_a_Cube_cubes__name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CubeRevisionMetadata" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/cubes/{name}/versions/{version}": { + "get": { + "tags": [ + "cubes" + ], + "summary": "Get A Cube Revision", + "description": "Get information on a specific cube revision", + "operationId": "Get_a_Cube_Revision_cubes__name__versions__version__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + }, + { + "name": "version", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Version" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CubeRevisionMetadata" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/cubes/{name}/materialization": { + "get": { + "tags": [ + "cubes" + ], + "summary": "Cube Materialization Config", + "description": "The standard cube materialization config. DJ makes sensible materialization choices\nwhere possible.\n\nRequirements:\n- The cube must have a temporal partition column specified.\n- The job strategy will always be \"incremental time\".\n\nOutputs:\n\"measures_materializations\":\n We group the metrics by parent node. Then we try to pre-aggregate each parent node as\n much as possible to prepare for metric queries on the cube's dimensions.\n\"combiners\":\n We combine each set of measures materializations on their shared grain. Note that we don't\n support materializing cubes with measures materializations that don't share the same grain.\n However, we keep `combiners` as a list in the eventual future where we support that.\n\"metrics\":\n We include a list of metrics, their required measures, and the derived expression (e.g., the\n expression used by the metric that makes use of the pre-aggregated measures)\n\nOnce we create a scheduled materialization workflow, we freeze the metadata for that particular\nmaterialized dataset. This allows us to reconstruct metrics SQL from the dataset when needed.\nTo request metrics from the materialized cube, use the metrics' measures metadata.", + "operationId": "Cube_Materialization_Config_cubes__name__materialization_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DruidCubeMaterializationInput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/cubes/{name}/dimensions/sql": { + "get": { + "tags": [ + "cubes" + ], + "summary": "Dimensions Sql For Cube", + "description": "Generates SQL to retrieve all unique values of a dimension for the cube", + "operationId": "Dimensions_SQL_for_Cube_cubes__name__dimensions_sql_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + }, + { + "name": "dimensions", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Dimensions to get values for", + "default": [], + "title": "Dimensions" + }, + "description": "Dimensions to get values for" + }, + { + "name": "filters", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filters on dimensional attributes", + "title": "Filters" + }, + "description": "Filters on dimensional attributes" + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Number of rows to limit the data retrieved to", + "title": "Limit" + }, + "description": "Number of rows to limit the data retrieved to" + }, + { + "name": "include_counts", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Include Counts" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TranslatedSQL" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/cubes/{name}/dimensions/data": { + "get": { + "tags": [ + "cubes" + ], + "summary": "Dimensions Values For Cube", + "description": "All unique values of a dimension from the cube", + "operationId": "Dimensions_Values_for_Cube_cubes__name__dimensions_data_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + }, + { + "name": "dimensions", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Dimensions to get values for", + "default": [], + "title": "Dimensions" + }, + "description": "Dimensions to get values for" + }, + { + "name": "filters", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filters on dimensional attributes", + "title": "Filters" + }, + "description": "Filters on dimensional attributes" + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Number of rows to limit the data retrieved to", + "title": "Limit" + }, + "description": "Number of rows to limit the data retrieved to" + }, + { + "name": "include_counts", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Include Counts" + } + }, + { + "name": "async_", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Async " + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DimensionValues" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/cubes/{name}/materialize": { + "post": { + "tags": [ + "cubes" + ], + "summary": "Materialize Cube To Druid", + "description": "Create a Druid cube materialization workflow.\n\nThis endpoint generates all the information needed for a Druid cube workflow:\n\n1. **Pre-agg table dependencies**: The Druid workflow should wait (via VTTS)\n for these tables to be available before starting ingestion.\n\n2. **Combined SQL**: SQL that reads from the pre-agg tables with re-aggregation,\n combining multiple grain groups via FULL OUTER JOIN.\n\n3. **Druid spec**: Ingestion specification for Druid.\n\nThe typical flow is:\n- Pre-agg workflows write to: `{preagg_catalog}.{preagg_schema}.{node}_preagg_{hash}`\n- Druid workflow waits on those tables' VTTS\n- Once available, Druid workflow runs the combined SQL and ingests to Druid\n\nArgs:\n name: Cube name\n data: Materialization configuration (schedule, strategy, etc.)\n\nReturns:\n CubeMaterializeResponse with pre-agg dependencies, combined SQL, and Druid spec.", + "operationId": "Materialize_Cube_to_Druid_cubes__name__materialize_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CubeMaterializeRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CubeMaterializeResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "delete": { + "tags": [ + "cubes" + ], + "summary": "Deactivate Cube Materialization", + "description": "Deactivate (remove) the Druid cube materialization for this cube.\n\nThis will:\n1. Remove the materialization record from the cube\n2. Optionally deactivate the workflow in the query service (if supported)", + "operationId": "Deactivate_Cube_Materialization_cubes__name__materialize_delete", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/cubes/{name}/backfill": { + "post": { + "tags": [ + "cubes" + ], + "summary": "Run Cube Backfill", + "description": "Run a backfill for the cube over the specified date range.\n\nThis triggers the cube's backfill workflow with the given start_date\nand end_date. The workflow iterates through each date partition\nand re-runs the cube materialization for that date.\n\nPrerequisites:\n- Cube materialization must be scheduled (via POST /cubes/{name}/materialize)", + "operationId": "Run_Cube_Backfill_cubes__name__backfill_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackfillRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackfillResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/tags": { + "get": { + "tags": [ + "tags" + ], + "summary": "List Tags", + "description": "List all available tags.", + "operationId": "list_tags_tags_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "tag_type", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Tag Type" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TagOutput" + }, + "title": "Response List Tags Tags Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "post": { + "tags": [ + "tags" + ], + "summary": "Create A Tag", + "description": "Create a tag.", + "operationId": "create_a_tag_tags_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTag" + } + } + } + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/tags/{name}": { + "get": { + "tags": [ + "tags" + ], + "summary": "Get A Tag", + "description": "Return a tag by name.", + "operationId": "get_a_tag_tags__name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "patch": { + "tags": [ + "tags" + ], + "summary": "Update A Tag", + "description": "Update a tag.", + "operationId": "update_a_tag_tags__name__patch", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateTag" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TagOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/tags/{name}/nodes": { + "get": { + "tags": [ + "tags" + ], + "summary": "List Nodes For A Tag", + "description": "Find nodes tagged with the tag, filterable by node type.", + "operationId": "list_nodes_for_a_tag_tags__name__nodes_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + }, + { + "name": "node_type", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeType" + }, + { + "type": "null" + } + ], + "title": "Node Type" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NodeMinimumDetail" + }, + "title": "Response List Nodes For A Tag Tags Name Nodes Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/attributes": { + "get": { + "tags": [ + "attributes" + ], + "summary": "List Attributes", + "description": "List all available attribute types.", + "operationId": "list_attributes_attributes_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/AttributeTypeBase" + }, + "type": "array", + "title": "Response List Attributes Attributes Get" + } + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + }, + "post": { + "tags": [ + "attributes" + ], + "summary": "Add An Attribute Type", + "description": "Add a new attribute type", + "operationId": "Add_an_Attribute_Type_attributes_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MutableAttributeTypeFields" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AttributeTypeBase" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } + }, + "/sql/measures/v2": { + "get": { + "tags": [ + "sql" + ], + "summary": "Get Measures Sql", + "description": "Return measures SQL for a set of metrics with dimensions and filters.\n\nThe measures query can be used to produce intermediate table(s) with all the measures\nand dimensions needed prior to applying specific metric aggregations.\n\nThis endpoint returns one SQL query per upstream node of the requested metrics.\nFor example, if some of your metrics are aggregations on measures in parent node A\nand others are aggregations on measures in parent node B, this endpoint will generate\ntwo measures queries, one for A and one for B.", + "operationId": "Get_Measures_SQL_sql_measures_v2_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "metrics", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Metrics" + } + }, + { + "name": "dimensions", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Dimensions" + } + }, + { + "name": "filters", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Filters" + } + }, + { + "name": "orderby", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Orderby" + } + }, + { + "name": "preaggregate", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether to pre-aggregate to the requested dimensions so that subsequent queries are more efficient.", + "default": false, + "title": "Preaggregate" + }, + "description": "Whether to pre-aggregate to the requested dimensions so that subsequent queries are more efficient." + }, + { + "name": "query_params", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "Query parameters", + "default": "{}", + "title": "Query Params" + }, + "description": "Query parameters" + }, + { + "name": "include_all_columns", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Whether to include all columns or only those necessary for the metrics and dimensions in the cube", + "default": false, + "title": "Include All Columns" + }, + "description": "Whether to include all columns or only those necessary for the metrics and dimensions in the cube" + }, + { + "name": "engine_name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Name" + } + }, + { + "name": "engine_version", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Version" + } + }, + { + "name": "use_materialized", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true, + "title": "Use Materialized" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GeneratedSQL" + }, + "title": "Response Get Measures Sql Sql Measures V2 Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/sql/{node_name}": { + "get": { + "tags": [ + "sql" + ], + "summary": "Get Sql For A Node", + "description": "Return SQL for a node.", + "operationId": "Get_SQL_For_A_Node_sql__node_name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "node_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Node Name" + } + }, + { + "name": "dimensions", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Dimensions" + } + }, + { + "name": "filters", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Filters" + } + }, + { + "name": "orderby", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Orderby" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Limit" + } + }, + { + "name": "query_params", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "Query parameters", + "default": "{}", + "title": "Query Params" + }, + "description": "Query parameters" + }, + { + "name": "engine_name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Name" + } + }, + { + "name": "engine_version", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Version" + } + }, + { + "name": "ignore_errors", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": true, + "title": "Ignore Errors" + } + }, + { + "name": "use_materialized", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": true, + "title": "Use Materialized" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TranslatedSQL" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/sql/measures/v3": { + "get": { + "tags": [ + "sql", + "sql", + "v3" + ], + "summary": "Get Measures Sql V3", + "description": "Generate pre-aggregated measures SQL for the requested metrics.\n\nMeasures SQL represents the first stage of metric computation - it decomposes\neach metric into its atomic aggregation components (e.g., SUM(amount), COUNT(*))\nand produces SQL that computes these components at the requested dimensional grain.\n\nMetrics are separated into grain groups, which represent sets of metrics that can be\ncomputed together at a common grain. Each grain group produces its own SQL query, which\ncan be materialized independently to produce intermediate tables that are then queried\nto compute final metric values.\n\nReturns:\n One or more `GrainGroupSQL` objects, each containing:\n - SQL query computing metric components at the specified grain\n - Column metadata with semantic types\n - Component details for downstream re-aggregation\n\nArgs:\n use_materialized: If True (default), use materialized tables when available.\n Set to False when generating SQL for materialization refresh to avoid\n circular references.\n\nSee also: `/sql/metrics/v3/` for the final combined query with metric expressions.", + "operationId": "Get_Measures_SQL_V3_sql_measures_v3_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "metrics", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Metrics" + } + }, + { + "name": "dimensions", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Dimensions" + } + }, + { + "name": "filters", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Filters" + } + }, + { + "name": "use_materialized", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true, + "title": "Use Materialized" + } + }, + { + "name": "dialect", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/Dialect", + "description": "SQL dialect for the generated query.", + "default": "spark" + }, + "description": "SQL dialect for the generated query." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MeasuresSQLResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/sql/measures/v3/combined": { + "get": { + "tags": [ + "sql", + "sql", + "v3" + ], + "summary": "Get Combined Measures Sql V3", + "description": "Generate combined pre-aggregated measures SQL for the requested metrics.\n\nThis endpoint combines multiple grain groups into a single SQL query using\nFULL OUTER JOIN on shared dimensions. Dimension columns are wrapped with\nCOALESCE to handle NULLs from non-matching rows.\n\nThis is useful for:\n- Druid cube materialization where a single combined table is needed\n- Simplifying downstream queries that need data from multiple fact tables\n- Pre-computing joined aggregations for dashboards\n\nThe combined SQL contains:\n- CTEs for each grain group's pre-aggregated data\n- FULL OUTER JOIN between grain groups on shared dimensions\n- COALESCE on dimension columns to handle NULL values\n- All measure columns from all grain groups\n\nArgs:\n metrics: List of metric names to include\n dimensions: List of dimensions to group by (the grain)\n filters: Optional filters to apply\n use_preagg_tables: If False (default), compute from scratch using source tables.\n If True, read from pre-aggregation tables.\n\nReturns:\n Combined SQL query with column metadata and grain information.\n\nSee also:\n - `/sql/measures/v3/` for individual grain group queries\n - `/sql/metrics/v3/` for final metric computations with combiner expressions", + "operationId": "Get_Combined_Measures_SQL_V3_sql_measures_v3_combined_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "metrics", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Metrics" + } + }, + { + "name": "dimensions", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Dimensions" + } + }, + { + "name": "filters", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Filters" + } + }, + { + "name": "use_preagg_tables", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "If False (default), compute from scratch using source tables. If True, compute from pre-aggregation tables", + "default": false, + "title": "Use Preagg Tables" + }, + "description": "If False (default), compute from scratch using source tables. If True, compute from pre-aggregation tables" + }, + { + "name": "dialect", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/Dialect", + "description": "SQL dialect for the generated query.", + "default": "spark" + }, + "description": "SQL dialect for the generated query." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CombinedMeasuresSQLResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/sql/metrics/v3": { + "get": { + "tags": [ + "sql", + "sql", + "v3" + ], + "summary": "Get Metrics Sql V3", + "description": "Generate final metrics SQL with fully computed metric expressions for the\nrequested metrics, dimensions, and filters using the specified dialect.\n\nMetrics SQL is the second (and final) stage of metric computation - it takes\nthe pre-aggregated components from Measures SQL and applies combiner expressions\nto produce the actual metric values requested.\n\n- Metric components are re-aggregated as needed to match the requested\ndimensional grain.\n\n- Derived metrics (defined as expressions over other metrics)\n(e.g., `conversion_rate = order_count / visitor_count`) are computed by\nsubstituting component references with their re-aggregated expressions.\n\n- When metrics come from different fact tables, their\ngrain groups are FULL OUTER JOINed on the common dimensions, with COALESCE\nfor dimension columns to handle NULLs from non-matching rows.\n\n- Dimension references in metric expressions are resolved to their\nfinal column aliases.\n\nArgs:\n metrics: List of metric names to include\n dimensions: List of dimensions to group by (the grain)\n filters: Optional filters to apply\n dialect: SQL dialect for the generated query\n use_materialized: If True (default), use materialized tables when available.\n Set to False when generating SQL for materialization refresh to avoid\n circular references.", + "operationId": "Get_Metrics_SQL_V3_sql_metrics_v3_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "metrics", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Metrics" + } + }, + { + "name": "dimensions", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Dimensions" + } + }, + { + "name": "filters", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Filters" + } + }, + { + "name": "use_materialized", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true, + "title": "Use Materialized" + } + }, + { + "name": "dialect", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/Dialect", + "description": "SQL dialect for the generated query.", + "default": "spark" + }, + "description": "SQL dialect for the generated query." + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/V3TranslatedSQL" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/sql": { + "get": { + "tags": [ + "sql" + ], + "summary": "Get Sql For Metrics", + "description": "Return SQL for a set of metrics with dimensions and filters", + "operationId": "Get_SQL_For_Metrics_sql_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "metrics", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Metrics" + } + }, + { + "name": "dimensions", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Dimensions" + } + }, + { + "name": "filters", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Filters" + } + }, + { + "name": "orderby", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Orderby" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Limit" + } + }, + { + "name": "query_params", + "in": "query", + "required": false, + "schema": { + "type": "string", + "description": "Query parameters", + "default": "{}", + "title": "Query Params" + }, + "description": "Query parameters" + }, + { + "name": "engine_name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Name" + } + }, + { + "name": "engine_version", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Version" + } + }, + { + "name": "ignore_errors", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": true, + "title": "Ignore Errors" + } + }, + { + "name": "use_materialized", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": true, + "title": "Use Materialized" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TranslatedSQL" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/datajunction-clients/python/new_node/{node_name}": { + "get": { + "tags": [ + "client" + ], + "summary": "Client Code For Creating Node", + "description": "Generate the Python client code used for creating this node", + "operationId": "client_code_for_creating_node_datajunction_clients_python_new_node__node_name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "node_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Node Name" + } + }, + { + "name": "include_client_setup", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true, + "title": "Include Client Setup" + } + }, + { + "name": "replace_namespace", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Replace Namespace" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Response Client Code For Creating Node Datajunction Clients Python New Node Node Name Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/datajunction-clients/python/dimension_links/{node_name}": { + "get": { + "tags": [ + "client" + ], + "summary": "Client Code For Dimension Links On Node", + "description": "Generate the Python client code used for creating this node", + "operationId": "client_code_for_dimension_links_on_node_datajunction_clients_python_dimension_links__node_name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "node_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Node Name" + } + }, + { + "name": "include_client_setup", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": true, + "title": "Include Client Setup" + } + }, + { + "name": "replace_namespace", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Replace Namespace" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Response Client Code For Dimension Links On Node Datajunction Clients Python Dimension Links Node Name Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/datajunction-clients/python/add_materialization/{node_name}/{materialization_name}": { + "get": { + "tags": [ + "client" + ], + "summary": "Client Code For Adding Materialization", + "description": "Generate the Python client code used for adding this materialization", + "operationId": "client_code_for_adding_materialization_datajunction_clients_python_add_materialization__node_name___materialization_name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "node_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Node Name" + } + }, + { + "name": "materialization_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Materialization Name" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "string", + "title": "Response Client Code For Adding Materialization Datajunction Clients Python Add Materialization Node Name Materialization Name Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/datajunction-clients/python/notebook": { + "get": { + "tags": [ + "client" + ], + "summary": "Notebook For Exporting Nodes", + "description": "Generate the Python client code used for exporting multiple nodes. There are two options:\n* namespace: If `namespace` is specified, the generated notebook will contain Python client\ncode to export all nodes in the namespace.\n* cube: If `cube` is specified, the generated notebook will contain Python client code\nused for exporting a cube, including all metrics and dimensions referenced in the cube.", + "operationId": "notebook_for_exporting_nodes_datajunction_clients_python_notebook_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "namespace", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Namespace" + } + }, + { + "name": "cube", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Cube" + } + }, + { + "name": "include_dimensions", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Include Dimensions" + } + }, + { + "name": "include_sources", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Include Sources" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/dimensions": { + "get": { + "tags": [ + "dimensions" + ], + "summary": "List Dimensions", + "description": "List all available dimensions.", + "operationId": "list_dimensions_dimensions_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "prefix", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prefix" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NodeIndegreeOutput" + }, + "title": "Response List Dimensions Dimensions Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/dimensions/{name}/nodes": { + "get": { + "tags": [ + "dimensions" + ], + "summary": "Find Nodes With Dimension", + "description": "List all nodes that have the specified dimension", + "operationId": "find_nodes_with_dimension_dimensions__name__nodes_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + }, + { + "name": "node_type", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NodeType" + }, + "default": [], + "title": "Node Type" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NodeNameOutput" + }, + "title": "Response Find Nodes With Dimension Dimensions Name Nodes Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/dimensions/common": { + "get": { + "tags": [ + "dimensions" + ], + "summary": "Find Nodes With Common Dimensions", + "description": "Find all nodes that have the list of common dimensions", + "operationId": "find_nodes_with_common_dimensions_dimensions_common_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "dimension", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Dimension" + } + }, + { + "name": "node_type", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NodeType" + }, + "default": [], + "title": "Node Type" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NodeNameOutput" + }, + "title": "Response Find Nodes With Common Dimensions Dimensions Common Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/hierarchies": { + "get": { + "tags": [ + "hierarchies" + ], + "summary": "List All Hierarchies", + "description": "List all available hierarchies.", + "operationId": "list_all_hierarchies_hierarchies_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "description": "Maximum number of hierarchies to return", + "default": 100, + "title": "Limit" + }, + "description": "Maximum number of hierarchies to return" + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "description": "Number of hierarchies to skip", + "default": 0, + "title": "Offset" + }, + "description": "Number of hierarchies to skip" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/HierarchyInfo" + }, + "title": "Response List All Hierarchies Hierarchies Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "post": { + "tags": [ + "hierarchies" + ], + "summary": "Create Hierarchy", + "description": "Create a new hierarchy definition.", + "operationId": "create_hierarchy_hierarchies_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HierarchyCreateRequest" + } + } + } + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HierarchyOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/nodes/{dimension}/hierarchies": { + "get": { + "tags": [ + "hierarchies" + ], + "summary": "Get Dimension Hierarchies", + "description": "Get all hierarchies that use a specific dimension node and show navigation options.\n\nThis endpoint helps users discover:\n- What hierarchies include this dimension\n- What position the dimension occupies in each hierarchy\n- What other dimensions they can drill up or down to", + "operationId": "get_dimension_hierarchies_nodes__dimension__hierarchies_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "dimension", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Dimension" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DimensionHierarchiesResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/hierarchies/{name}": { + "get": { + "tags": [ + "hierarchies" + ], + "summary": "Get Hierarchy", + "description": "Get a specific hierarchy by name.", + "operationId": "get_hierarchy_hierarchies__name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HierarchyOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "put": { + "tags": [ + "hierarchies" + ], + "summary": "Update Hierarchy", + "description": "Update a hierarchy.", + "operationId": "update_hierarchy_hierarchies__name__put", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HierarchyUpdateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HierarchyOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "delete": { + "tags": [ + "hierarchies" + ], + "summary": "Delete Hierarchy", + "description": "Delete a hierarchy.", + "operationId": "delete_hierarchy_hierarchies__name__delete", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Name" + } + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/graphql": { + "get": { + "summary": "Handle Http Get", + "operationId": "handle_http_get_graphql_get", + "responses": { + "200": { + "description": "The GraphiQL integrated development environment.", + "content": { + "application/json": { + "schema": {} + } + } + }, + "404": { + "description": "Not found if GraphiQL or query via GET are not enabled." + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + }, + "post": { + "summary": "Handle Http Post", + "operationId": "handle_http_post_graphql_post", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } + }, + "/whoami": { + "get": { + "tags": [ + "Who am I?" + ], + "summary": "Whoami", + "description": "Returns the current authenticated user", + "operationId": "whoami_whoami_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } + }, + "/token": { + "get": { + "tags": [ + "Who am I?" + ], + "summary": "Get Short Lived Token", + "description": "Returns a token that expires in 24 hours", + "operationId": "get_short_lived_token_token_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } + }, + "/users/{username}": { + "get": { + "tags": [ + "users" + ], + "summary": "List Nodes By Username", + "description": "List all nodes with the specified activity type(s) by the user", + "operationId": "list_nodes_by_username_users__username__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "username", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Username" + } + }, + { + "name": "activity_types", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "create", + "update" + ], + "title": "Activity Types" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NodeMinimumDetail" + }, + "title": "Response List Nodes By Username Users Username Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/users": { + "get": { + "tags": [ + "users" + ], + "summary": "List Users With Activity", + "description": "Lists all users. The endpoint will include user activity counts if the\n`with_activity` flag is set to true.", + "operationId": "list_users_with_activity_users_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "with_activity", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "With Activity" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/UserActivity" + } + ] + }, + "title": "Response List Users With Activity Users Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/groups": { + "post": { + "tags": [ + "groups" + ], + "summary": "Register Group", + "description": "Register a group in DJ.\n\nThis makes the group available for assignment as a node owner.\nGroup membership can be managed via the membership endpoints (Postgres provider)\nor resolved externally (LDAP, etc.).\n\nArgs:\n username: Unique identifier for the group (e.g., 'eng-team')\n email: Optional email for the group\n name: Display name (defaults to username)", + "operationId": "register_group_groups_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "username", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Username" + } + }, + { + "name": "email", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Email" + } + }, + { + "name": "name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + } + } + ], + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "get": { + "tags": [ + "groups" + ], + "summary": "List Groups", + "description": "List all registered groups.", + "operationId": "list_groups_groups_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupOutput" + }, + "title": "Response List Groups Groups Get" + } + } + } + } + } + } + }, + "/groups/{group_name}": { + "get": { + "tags": [ + "groups" + ], + "summary": "Get Group", + "description": "Get a group by name.", + "operationId": "get_group_groups__group_name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "group_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Group Name" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GroupOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/groups/{group_name}/members": { + "post": { + "tags": [ + "groups" + ], + "summary": "Add Group Member", + "description": "Add a member to a group (Postgres provider only).\n\nFor external providers, membership is managed externally and this endpoint is disabled.", + "operationId": "add_group_member_groups__group_name__members_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "group_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Group Name" + } + }, + { + "name": "member_username", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Member Username" + } + } + ], + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "object", + "title": "Response Add Group Member Groups Group Name Members Post" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "get": { + "tags": [ + "groups" + ], + "summary": "List Group Members", + "description": "List members of a group.\n\nFor Postgres provider: queries group_members table.\nFor external providers: returns empty (membership resolved externally).", + "operationId": "list_group_members_groups__group_name__members_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "group_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Group Name" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/UserOutput" + }, + "title": "Response List Group Members Groups Group Name Members Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/groups/{group_name}/members/{member_username}": { + "delete": { + "tags": [ + "groups" + ], + "summary": "Remove Group Member", + "description": "Remove a member from a group (Postgres provider only).", + "operationId": "remove_group_member_groups__group_name__members__member_username__delete", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "group_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Group Name" + } + }, + { + "name": "member_username", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Member Username" + } + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/roles": { + "post": { + "tags": [ + "rbac" + ], + "summary": "Create Role", + "description": "Create a new role with optional scopes.\n\nRoles are named collections of permissions that can be assigned to principals.", + "operationId": "create_role_roles_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleCreate" + } + } + } + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "get": { + "tags": [ + "rbac" + ], + "summary": "List Roles", + "description": "List all roles with their scopes.\n\nBy default, excludes soft-deleted roles. Set include_deleted=true to see all.", + "operationId": "list_roles_roles_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 500, + "default": 100, + "title": "Limit" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" + } + }, + { + "name": "include_deleted", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Include Deleted" + } + }, + { + "name": "created_by_id", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Created By Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleOutput" + }, + "title": "Response List Roles Roles Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/roles/{role_name}": { + "get": { + "tags": [ + "rbac" + ], + "summary": "Get Role", + "description": "Get a specific role with its scopes.\n\nBy default, returns 404 for deleted roles. Set include_deleted=true to see deleted roles.", + "operationId": "get_role_roles__role_name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "role_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Role Name" + } + }, + { + "name": "include_deleted", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "default": false, + "title": "Include Deleted" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "patch": { + "tags": [ + "rbac" + ], + "summary": "Update Role", + "description": "Update a role's name or description.\n\nNote: Use /roles/{role_name}/scopes/ endpoints to manage scopes.", + "operationId": "update_role_roles__role_name__patch", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "role_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Role Name" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleUpdate" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "delete": { + "tags": [ + "rbac" + ], + "summary": "Delete Role", + "description": "Soft delete a role.\n\nRoles that have ever been assigned cannot be deleted (for SOX compliance).\nThis ensures a complete audit trail. Instead, roles are marked as deleted\nand hidden from normal queries.", + "operationId": "delete_role_roles__role_name__delete", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "role_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Role Name" + } + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/roles/{role_name}/scopes": { + "post": { + "tags": [ + "rbac" + ], + "summary": "Add Scope To Role", + "description": "Add a scope (permission) to a role.", + "operationId": "add_scope_to_role_roles__role_name__scopes_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "role_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Role Name" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleScopeInput" + } + } + } + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleScopeOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + }, + "get": { + "tags": [ + "rbac" + ], + "summary": "List Role Scopes", + "description": "List all scopes for a role.", + "operationId": "list_role_scopes_roles__role_name__scopes_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "role_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Role Name" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleScopeOutput" + }, + "title": "Response List Role Scopes Roles Role Name Scopes Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/roles/{role_name}/scopes/{action}/{scope_type}/{scope_value}": { + "delete": { + "tags": [ + "rbac" + ], + "summary": "Delete Scope From Role", + "description": "Remove a scope from a role using its composite key.\n\nExample: DELETE /roles/finance-editor/scopes/read/namespace/finance.*", + "operationId": "delete_scope_from_role_roles__role_name__scopes__action___scope_type___scope_value__delete", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "role_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Role Name" + } + }, + { + "name": "action", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/ResourceAction" + } + }, + { + "name": "scope_type", + "in": "path", + "required": true, + "schema": { + "$ref": "#/components/schemas/ResourceType" + } + }, + { + "name": "scope_value", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Scope Value" + } + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/roles/{role_name}/assign": { + "post": { + "tags": [ + "rbac" + ], + "summary": "Assign Role To Principal", + "description": "Assign a role to a principal (user, service account, or group).\n\nExample: POST /roles/finance-editor/assign\n Body: {\"principal_username\": \"alice\"}", + "operationId": "assign_role_to_principal_roles__role_name__assign_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "role_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Role Name" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleAssignmentCreate" + } + } + } + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RoleAssignmentOutput" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/roles/{role_name}/assignments": { + "get": { + "tags": [ + "rbac" + ], + "summary": "List Role Assignments", + "description": "List all principals who have this role.\n\nExample: GET /roles/finance-editor/assignments", + "operationId": "list_role_assignments_roles__role_name__assignments_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "role_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Role Name" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 500, + "default": 100, + "title": "Limit" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RoleAssignmentOutput" + }, + "title": "Response List Role Assignments Roles Role Name Assignments Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/roles/{role_name}/assignments/{principal_username}": { + "delete": { + "tags": [ + "rbac" + ], + "summary": "Revoke Role From Principal", + "description": "Revoke a role from a principal.\n\nExample: DELETE /roles/finance-editor/assignments/alice\n\nThis removes the role from the principal but preserves the audit trail in History.", + "operationId": "revoke_role_from_principal_roles__role_name__assignments__principal_username__delete", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "role_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Role Name" + } + }, + { + "name": "principal_username", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Principal Username" + } + } + ], + "responses": { + "204": { + "description": "Successful Response" + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/basic/user/": { + "post": { + "tags": [ + "Basic OAuth2" + ], + "summary": "Create A User", + "description": "Create a new user", + "operationId": "create_a_user_basic_user__post", + "requestBody": { + "content": { + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/Body_create_a_user_basic_user__post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/basic/login/": { + "post": { + "tags": [ + "Basic OAuth2" + ], + "summary": "Login", + "description": "Get a JWT token and set it as an HTTP only cookie", + "operationId": "login_basic_login__post", + "requestBody": { + "content": { + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/Body_login_basic_login__post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/logout/": { + "post": { + "tags": [ + "Basic OAuth2" + ], + "summary": "Logout", + "description": "Logout a user by deleting the auth cookie", + "operationId": "logout_logout__post", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + } + } + }, + "/notifications/subscribe": { + "post": { + "tags": [ + "notifications" + ], + "summary": "Subscribe", + "description": "Subscribes to notifications by upserting a notification preference.\nIf one exists, update it. Otherwise, create a new one.", + "operationId": "subscribe_notifications_subscribe_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Body_subscribe_notifications_subscribe_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } + }, + "/notifications/unsubscribe": { + "delete": { + "tags": [ + "notifications" + ], + "summary": "Unsubscribe", + "description": "Unsubscribes from notifications by deleting a notification preference", + "operationId": "unsubscribe_notifications_unsubscribe_delete", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "entity_type", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/EntityType" + } + }, + { + "name": "entity_name", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Entity Name" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/notifications": { + "get": { + "tags": [ + "notifications" + ], + "summary": "Get Preferences", + "description": "Gets notification preferences for the current user", + "operationId": "get_preferences_notifications_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "entity_name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Entity Name" + } + }, + { + "name": "entity_type", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "$ref": "#/components/schemas/EntityType" + }, + { + "type": "null" + } + ], + "title": "Entity Type" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NotificationPreferenceModel" + }, + "title": "Response Get Preferences Notifications Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/notifications/users": { + "get": { + "tags": [ + "notifications" + ], + "summary": "Get Users For Notification", + "description": "Get users for the given notification preference", + "operationId": "get_users_for_notification_notifications_users_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "entity_name", + "in": "query", + "required": true, + "schema": { + "type": "string", + "title": "Entity Name" + } + }, + { + "name": "entity_type", + "in": "query", + "required": true, + "schema": { + "$ref": "#/components/schemas/EntityType" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Response Get Users For Notification Notifications Users Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/notifications/mark-read": { + "post": { + "tags": [ + "notifications" + ], + "summary": "Mark Notifications Read", + "description": "Mark all notifications as read by updating the user's\nlast_viewed_notifications_at timestamp to now.", + "operationId": "mark_notifications_read_notifications_mark_read_post", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } + }, + "/preaggs": { + "get": { + "tags": [ + "preaggregations" + ], + "summary": "List Pre-Aggregations", + "description": "List pre-aggregations with optional filters.\n\nFilter options:\n- node_name: Filter by the source node name\n- node_version: Filter by node version (if omitted, uses latest version)\n- grain: Comma-separated grain columns to match\n- grain_mode: 'exact' (default) requires exact match, 'superset' finds pre-aggs\n that contain all requested columns (and possibly more - finer grain)\n- grain_group_hash: Direct lookup by grain group hash\n- measures: Comma-separated measures - pre-agg must contain ALL specified\n- status: Filter by 'pending' (no availability) or 'active' (has availability)", + "operationId": "List_Pre_aggregations_preaggs_get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "node_name", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter by node name", + "title": "Node Name" + }, + "description": "Filter by node name" + }, + { + "name": "node_version", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter by node version (requires node_name)", + "title": "Node Version" + }, + "description": "Filter by node version (requires node_name)" + }, + { + "name": "grain", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Comma-separated grain columns to match", + "title": "Grain" + }, + "description": "Comma-separated grain columns to match" + }, + { + "name": "grain_mode", + "in": "query", + "required": false, + "schema": { + "$ref": "#/components/schemas/GrainMode", + "description": "Grain matching mode: 'exact' (default) or 'superset' (pre-agg contains all requested + maybe more)", + "default": "exact" + }, + "description": "Grain matching mode: 'exact' (default) or 'superset' (pre-agg contains all requested + maybe more)" + }, + { + "name": "grain_group_hash", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter by grain group hash", + "title": "Grain Group Hash" + }, + "description": "Filter by grain group hash" + }, + { + "name": "measures", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Comma-separated measures (pre-agg must contain ALL)", + "title": "Measures" + }, + "description": "Comma-separated measures (pre-agg must contain ALL)" + }, + { + "name": "status", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter by status: 'pending' or 'active'", + "title": "Status" + }, + "description": "Filter by status: 'pending' or 'active'" + }, + { + "name": "include_stale", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "Include pre-aggs from older node versions (stale)", + "default": false, + "title": "Include Stale" + }, + "description": "Include pre-aggs from older node versions (stale)" + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "default": 50, + "title": "Limit" + } + }, + { + "name": "offset", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 0, + "default": 0, + "title": "Offset" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreAggregationListResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/preaggs/{preagg_id}": { + "get": { + "tags": [ + "preaggregations" + ], + "summary": "Get Pre-Aggregation By Id", + "description": "Get a single pre-aggregation by its ID.\n\nThe response includes the SQL needed for materialization.", + "operationId": "Get_Pre_aggregation_by_ID_preaggs__preagg_id__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "preagg_id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "title": "Preagg Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreAggregationInfo" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/preaggs/plan": { + "post": { + "tags": [ + "preaggregations" + ], + "summary": "Plan Pre-Aggregations", + "description": "Create pre-aggregations from metrics + dimensions.\n\nThis is the primary way to create pre-aggregations. DJ:\n1. Computes grain groups from the metrics/dimensions (same as /sql/measures/v3)\n2. Generates SQL for each grain group\n3. Creates PreAggregation records (or returns existing ones if they match)\n4. Returns the pre-aggs with their IDs and SQL\n\nAfter calling this endpoint:\n- Flow A: Call POST /preaggs/{id}/materialize to have DJ materialize\n- Flow B: Use the returned SQL to materialize yourself, then call\n POST /preaggs/{id}/availability/ to report completion", + "operationId": "Plan_Pre_aggregations_preaggs_plan_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanPreAggregationsRequest" + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanPreAggregationsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } + }, + "/preaggs/{preagg_id}/materialize": { + "post": { + "tags": [ + "preaggregations" + ], + "summary": "Materialize Pre-Aggregation", + "description": "Create/update a scheduled workflow for this pre-aggregation.\n\nThis creates a recurring workflow that materializes the pre-agg on schedule.\nCall this endpoint to:\n- Initially set up materialization for a pre-agg\n- Refresh/recreate the workflow after config changes\n\nThe workflow runs on the configured schedule (default: daily at midnight).\nThe query service will callback to POST /preaggs/{id}/availability/ when\neach run completes.\n\nFor user-managed materialization, use the SQL from GET /preaggs/{id}\nand call POST /preaggs/{id}/availability/ when done.", + "operationId": "Materialize_Pre_aggregation_preaggs__preagg_id__materialize_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "preagg_id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "title": "Preagg Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreAggregationInfo" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/preaggs/{preagg_id}/config": { + "patch": { + "tags": [ + "preaggregations" + ], + "summary": "Update Pre-Aggregation Config", + "description": "Update the materialization configuration of a single pre-aggregation.\n\nUse this endpoint to configure individual pre-aggs with different\nstrategies, schedules, or lookback windows.", + "operationId": "Update_Pre_aggregation_Config_preaggs__preagg_id__config_patch", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "preagg_id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "title": "Preagg Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePreAggregationConfigRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreAggregationInfo" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/preaggs/{preagg_id}/workflow": { + "delete": { + "tags": [ + "preaggregations" + ], + "summary": "Deactivate Scheduled Workflow", + "description": "Deactivate (pause) the scheduled workflow for this pre-aggregation.\n\nThe workflow definition is kept but will not run on schedule.\nCall POST /preaggs/{id}/materialize to re-activate.", + "operationId": "Deactivate_Scheduled_Workflow_preaggs__preagg_id__workflow_delete", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "preagg_id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "title": "Preagg Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkflowResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/preaggs/workflows": { + "delete": { + "tags": [ + "preaggregations" + ], + "summary": "Bulk Deactivate Workflows", + "description": "Bulk deactivate workflows for pre-aggregations of a node.\n\nThis is useful for cleaning up stale pre-aggregations after a node\nhas been updated. When stale_only=true, only deactivates workflows\nfor pre-aggs that were built for older node versions.\n\nStaleness is determined by comparing the pre-agg's node_revision_id\nto the node's current revision.", + "operationId": "Bulk_Deactivate_Workflows_preaggs_workflows_delete", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "node_name", + "in": "query", + "required": true, + "schema": { + "type": "string", + "description": "Node name to deactivate workflows for (required)", + "title": "Node Name" + }, + "description": "Node name to deactivate workflows for (required)" + }, + { + "name": "stale_only", + "in": "query", + "required": false, + "schema": { + "type": "boolean", + "description": "If true, only deactivate workflows for stale pre-aggs (pre-aggs built for non-current node versions)", + "default": false, + "title": "Stale Only" + }, + "description": "If true, only deactivate workflows for stale pre-aggs (pre-aggs built for non-current node versions)" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BulkDeactivateWorkflowsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/preaggs/{preagg_id}/backfill": { + "post": { + "tags": [ + "preaggregations" + ], + "summary": "Run Backfill", + "description": "Run a backfill for the specified date range.\n\nThis triggers a one-time job to process historical data from start_date\nto end_date. The workflow must already exist (created via POST /workflow).\n\nUse this to:\n- Initially populate a new pre-aggregation\n- Re-process data after a bug fix\n- Catch up on missed partitions", + "operationId": "Run_Backfill_preaggs__preagg_id__backfill_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "preagg_id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "title": "Preagg Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackfillRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BackfillResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/preaggs/{preagg_id}/availability": { + "post": { + "tags": [ + "preaggregations" + ], + "summary": "Update Pre-Aggregation Availability", + "description": "Update the availability state of a pre-aggregation (Flow B).\n\nCall this endpoint after your query service has materialized the data.\nThe availability state includes:\n- catalog/schema/table: Where the materialized data lives\n- valid_through_ts: Timestamp through which data is valid\n- min/max_temporal_partition: Temporal partition range (high-water mark)\n- partitions: Detailed partition-level availability\n\nThis is the callback endpoint for external query services to report\nmaterialization status back to DJ.", + "operationId": "Update_Pre_aggregation_Availability_preaggs__preagg_id__availability_post", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "preagg_id", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "title": "Preagg Id" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePreAggregationAvailabilityRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreAggregationInfo" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/service-accounts": { + "get": { + "tags": [ + "Service Accounts" + ], + "summary": "List Service Accounts", + "description": "List service accounts for the current user", + "operationId": "list_service_accounts_service_accounts_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/ServiceAccountOutput" + }, + "type": "array", + "title": "Response List Service Accounts Service Accounts Get" + } + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + }, + "post": { + "tags": [ + "Service Accounts" + ], + "summary": "Create Service Account", + "description": "Create a new service account", + "operationId": "create_service_account_service_accounts_post", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceAccountCreate" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceAccountCreateResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } + }, + "/service-accounts/{client_id}": { + "delete": { + "tags": [ + "Service Accounts" + ], + "summary": "Delete Service Account", + "description": "Delete a service account", + "operationId": "delete_service_account_service_accounts__client_id__delete", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "client_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Client Id" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/service-accounts/token": { + "post": { + "tags": [ + "Service Accounts" + ], + "summary": "Service Account Token", + "description": "Get an authentication token for a service account", + "operationId": "service_account_token_service_accounts_token_post", + "requestBody": { + "content": { + "application/x-www-form-urlencoded": { + "schema": { + "$ref": "#/components/schemas/Body_service_account_token_service_accounts_token_post" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TokenResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/system/metrics": { + "get": { + "tags": [ + "System" + ], + "summary": "List System Metrics", + "description": "Returns a list of DJ system metrics (available as metric nodes in DJ).", + "operationId": "list_system_metrics_system_metrics_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } + }, + "/system/data/{metric_name}": { + "get": { + "tags": [ + "System" + ], + "summary": "Get Data For System Metric", + "description": "This is not a generic data for metrics endpoint, but rather a specific endpoint for\nsystem overview metrics that are automatically defined by DJ, such as the number of nodes.\nThis endpoint will return data for any system metric, cut by their available dimensions\nand filters.\n\nThis setup circumvents going to the query service to get metric data, since all system\nmetrics can be computed directly from the database.\n\nFor a list of available system metrics, see the `/system/metrics` endpoint. All dimensions\nfor the metric can be discovered through the usual endpoints.", + "operationId": "get_data_for_system_metric_system_data__metric_name__get", + "security": [ + { + "DJHTTPBearer": [] + } + ], + "parameters": [ + { + "name": "metric_name", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Metric Name" + } + }, + { + "name": "dimensions", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Dimensions" + } + }, + { + "name": "filters", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Filters" + } + }, + { + "name": "orderby", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "title": "Orderby" + } + }, + { + "name": "limit", + "in": "query", + "required": false, + "schema": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Limit" + } + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/RowOutput" + } + }, + "title": "Response Get Data For System Metric System Data Metric Name Get" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/system/dimensions": { + "get": { + "tags": [ + "System" + ], + "summary": "Get Dimensions Stats", + "description": "List dimensions statistics, including the indegree of the dimension in the DAG\nand the number of cubes that use the dimension.", + "operationId": "get_dimensions_stats_system_dimensions_get", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DimensionStats" + }, + "type": "array", + "title": "Response Get Dimensions Stats System Dimensions Get" + } + } + } + } + }, + "security": [ + { + "DJHTTPBearer": [] + } + ] + } } }, "components": { @@ -5422,2673 +10701,9271 @@ "ActivityType": { "type": "string", "enum": [ - "create", - "delete", - "restore", - "update", - "refresh", - "tag", - "set_attribute", - "status_change" + "create", + "delete", + "restore", + "update", + "refresh", + "tag", + "set_attribute", + "status_change" + ], + "title": "ActivityType", + "description": "An activity type" + }, + "Aggregability": { + "type": "string", + "enum": [ + "full", + "limited", + "none" + ], + "title": "Aggregability", + "description": "Type of allowed aggregation for a given metric component." + }, + "AggregationRule": { + "type": "string", + "enum": [ + "additive", + "non-additive", + "semi-additive" + ], + "title": "AggregationRule", + "description": "Type of allowed aggregation for a given measure." + }, + "AggregationRule-Input": { + "type": "string", + "enum": [ + "additive", + "non-additive", + "semi-additive" + ], + "title": "AggregationRule", + "description": "Type of allowed aggregation for a given measure." + }, + "AttributeOutput": { + "properties": { + "attribute_type": { + "$ref": "#/components/schemas/AttributeTypeName" + } + }, + "type": "object", + "required": [ + "attribute_type" + ], + "title": "AttributeOutput", + "description": "Column attribute output." + }, + "AttributeTypeBase": { + "properties": { + "namespace": { + "type": "string", + "title": "Namespace", + "default": "system" + }, + "name": { + "type": "string", + "title": "Name" + }, + "description": { + "type": "string", + "title": "Description" + }, + "allowed_node_types": { + "items": { + "$ref": "#/components/schemas/NodeType" + }, + "type": "array", + "title": "Allowed Node Types" + }, + "uniqueness_scope": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/UniquenessScope" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Uniqueness Scope" + }, + "id": { + "type": "integer", + "title": "Id" + } + }, + "type": "object", + "required": [ + "name", + "description", + "allowed_node_types", + "id" + ], + "title": "AttributeTypeBase", + "description": "Base attribute type." + }, + "AttributeTypeIdentifier": { + "properties": { + "namespace": { + "type": "string", + "title": "Namespace", + "default": "system" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "AttributeTypeIdentifier", + "description": "Fields that can be used to identify an attribute type." + }, + "AttributeTypeName": { + "properties": { + "namespace": { + "type": "string", + "title": "Namespace" + }, + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "namespace", + "name" + ], + "title": "AttributeTypeName", + "description": "Attribute type name." + }, + "AvailabilityStateBase": { + "properties": { + "min_temporal_partition": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Min Temporal Partition" + }, + "max_temporal_partition": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Max Temporal Partition" + }, + "catalog": { + "type": "string", + "title": "Catalog" + }, + "schema_": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schema" + }, + "table": { + "type": "string", + "title": "Table" + }, + "valid_through_ts": { + "type": "integer", + "title": "Valid Through Ts" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url" + }, + "links": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Links" + }, + "categorical_partitions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Categorical Partitions" + }, + "temporal_partitions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Temporal Partitions" + }, + "partitions": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/PartitionAvailability" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Partitions" + } + }, + "type": "object", + "required": [ + "catalog", + "table", + "valid_through_ts" + ], + "title": "AvailabilityStateBase", + "description": "An availability state base" + }, + "AvailabilityStateInfo": { + "properties": { + "min_temporal_partition": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Min Temporal Partition" + }, + "max_temporal_partition": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Max Temporal Partition" + }, + "catalog": { + "type": "string", + "title": "Catalog" + }, + "schema_": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schema" + }, + "table": { + "type": "string", + "title": "Table" + }, + "valid_through_ts": { + "type": "integer", + "title": "Valid Through Ts" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url" + }, + "links": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Links" + }, + "categorical_partitions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Categorical Partitions" + }, + "temporal_partitions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Temporal Partitions" + }, + "partitions": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/PartitionAvailability" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Partitions" + }, + "id": { + "type": "integer", + "title": "Id" + }, + "updated_at": { + "type": "string", + "title": "Updated At" + }, + "node_revision_id": { + "type": "integer", + "title": "Node Revision Id" + }, + "node_version": { + "type": "string", + "title": "Node Version" + } + }, + "type": "object", + "required": [ + "catalog", + "table", + "valid_through_ts", + "id", + "updated_at", + "node_revision_id", + "node_version" + ], + "title": "AvailabilityStateInfo", + "description": "Availability state information for a node" + }, + "BackfillOutput": { + "properties": { + "spec": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/PartitionBackfill" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Spec" + }, + "urls": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Urls" + } + }, + "type": "object", + "title": "BackfillOutput", + "description": "Output model for backfills" + }, + "BackfillRequest": { + "properties": { + "start_date": { + "type": "string", + "format": "date", + "title": "Start Date", + "description": "Start date for backfill (inclusive)" + }, + "end_date": { + "anyOf": [ + { + "type": "string", + "format": "date" + }, + { + "type": "null" + } + ], + "title": "End Date", + "description": "End date for backfill (inclusive). Defaults to today." + } + }, + "type": "object", + "required": [ + "start_date" + ], + "title": "BackfillRequest", + "description": "Request model for running a backfill." + }, + "BackfillResponse": { + "properties": { + "job_url": { + "type": "string", + "title": "Job Url", + "description": "URL to the backfill job" + }, + "start_date": { + "type": "string", + "format": "date", + "title": "Start Date", + "description": "Start date of the backfill" + }, + "end_date": { + "type": "string", + "format": "date", + "title": "End Date", + "description": "End date of the backfill" + }, + "status": { + "type": "string", + "title": "Status", + "description": "Job status", + "default": "running" + } + }, + "type": "object", + "required": [ + "job_url", + "start_date", + "end_date" + ], + "title": "BackfillResponse", + "description": "Response model for backfill operation." + }, + "Body_create_a_user_basic_user__post": { + "properties": { + "email": { + "type": "string", + "title": "Email" + }, + "username": { + "type": "string", + "title": "Username" + }, + "password": { + "type": "string", + "title": "Password" + } + }, + "type": "object", + "required": [ + "email", + "username", + "password" + ], + "title": "Body_create_a_user_basic_user__post" + }, + "Body_login_basic_login__post": { + "properties": { + "grant_type": { + "anyOf": [ + { + "type": "string", + "pattern": "^password$" + }, + { + "type": "null" + } + ], + "title": "Grant Type" + }, + "username": { + "type": "string", + "title": "Username" + }, + "password": { + "type": "string", + "format": "password", + "title": "Password" + }, + "scope": { + "type": "string", + "title": "Scope", + "default": "" + }, + "client_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Client Id" + }, + "client_secret": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "format": "password", + "title": "Client Secret" + } + }, + "type": "object", + "required": [ + "username", + "password" + ], + "title": "Body_login_basic_login__post" + }, + "Body_service_account_token_service_accounts_token_post": { + "properties": { + "client_id": { + "type": "string", + "title": "Client Id" + }, + "client_secret": { + "type": "string", + "title": "Client Secret" + } + }, + "type": "object", + "required": [ + "client_id", + "client_secret" + ], + "title": "Body_service_account_token_service_accounts_token_post" + }, + "Body_subscribe_notifications_subscribe_post": { + "properties": { + "entity_type": { + "$ref": "#/components/schemas/EntityType" + }, + "entity_name": { + "type": "string", + "title": "Entity Name" + }, + "activity_types": { + "items": { + "$ref": "#/components/schemas/ActivityType" + }, + "type": "array", + "title": "Activity Types" + }, + "alert_types": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Alert Types" + } + }, + "type": "object", + "required": [ + "entity_type", + "entity_name", + "activity_types", + "alert_types" + ], + "title": "Body_subscribe_notifications_subscribe_post" + }, + "BulkDeactivateWorkflowsResponse": { + "properties": { + "deactivated_count": { + "type": "integer", + "title": "Deactivated Count", + "description": "Number of workflows successfully deactivated" + }, + "deactivated": { + "items": { + "$ref": "#/components/schemas/DeactivatedWorkflowInfo" + }, + "type": "array", + "title": "Deactivated", + "description": "Details of each deactivated workflow" + }, + "skipped_count": { + "type": "integer", + "title": "Skipped Count", + "description": "Number of pre-aggs skipped (no active workflow)", + "default": 0 + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Message", + "description": "Additional information about the operation" + } + }, + "type": "object", + "required": [ + "deactivated_count" + ], + "title": "BulkDeactivateWorkflowsResponse", + "description": "Response model for bulk workflow deactivation." + }, + "BulkNamespaceSourcesRequest": { + "properties": { + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Namespaces", + "description": "List of namespace names to fetch sources for" + } + }, + "type": "object", + "required": [ + "namespaces" + ], + "title": "BulkNamespaceSourcesRequest", + "description": "Request body for fetching sources for multiple namespaces at once." + }, + "BulkNamespaceSourcesResponse": { + "properties": { + "sources": { + "additionalProperties": { + "$ref": "#/components/schemas/NamespaceSourcesResponse" + }, + "type": "object", + "title": "Sources" + } + }, + "type": "object", + "title": "BulkNamespaceSourcesResponse", + "description": "Response for bulk fetching namespace sources.\nMaps namespace names to their deployment source info." + }, + "CatalogInfo-Input": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "engines": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/EngineInfo" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Engines" + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "CatalogInfo", + "description": "Class for catalog creation" + }, + "CatalogInfo-Output": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "engines": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/EngineInfo" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Engines" + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "CatalogInfo", + "description": "Class for catalog creation" + }, + "CollectionDetails": { + "properties": { + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "description": { + "type": "string", + "title": "Description" + }, + "nodes": { + "items": { + "$ref": "#/components/schemas/NodeNameOutput" + }, + "type": "array", + "title": "Nodes" + } + }, + "type": "object", + "required": [ + "name", + "description", + "nodes" + ], + "title": "CollectionDetails", + "description": "Collection information with details" + }, + "CollectionInfo": { + "properties": { + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Id" + }, + "name": { + "type": "string", + "title": "Name" + }, + "description": { + "type": "string", + "title": "Description" + } + }, + "type": "object", + "required": [ + "name", + "description" + ], + "title": "CollectionInfo", + "description": "Class for a collection information" + }, + "ColumnChange": { + "properties": { + "column": { + "type": "string", + "title": "Column" + }, + "change_type": { + "$ref": "#/components/schemas/ColumnChangeType" + }, + "old_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Old Type" + }, + "new_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "New Type" + } + }, + "type": "object", + "required": [ + "column", + "change_type" + ], + "title": "ColumnChange", + "description": "Represents a change to a column" + }, + "ColumnChangeType": { + "type": "string", + "enum": [ + "added", + "removed", + "type_changed" + ], + "title": "ColumnChangeType", + "description": "Types of column changes" + }, + "ColumnMetadata": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "type": { + "type": "string", + "title": "Type" + }, + "column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Column" + }, + "node": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node" + }, + "semantic_entity": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Semantic Entity" + }, + "semantic_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Semantic Type" + } + }, + "type": "object", + "required": [ + "name", + "type" + ], + "title": "ColumnMetadata", + "description": "A simple model for column metadata." + }, + "ColumnOutput": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "type": { + "type": "string", + "title": "Type" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "dimension_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Dimension Column" + }, + "attributes": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AttributeOutput" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Attributes" + }, + "dimension": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeNameOutput" + }, + { + "type": "null" + } + ] + }, + "partition": { + "anyOf": [ + { + "$ref": "#/components/schemas/PartitionOutput" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "name", + "type" + ], + "title": "ColumnOutput", + "description": "A simplified column schema, without ID or dimensions." + }, + "ColumnSpec-Input": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "attributes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Attributes" + }, + "partition": { + "anyOf": [ + { + "$ref": "#/components/schemas/PartitionSpec" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "ColumnSpec", + "description": "Represents a column.\n\nThe `type` field is optional - if not provided, DJ will infer the column\ntype from the query or source definition. This is useful when you only\nwant to specify metadata (display_name, attributes, description) without\nhardcoding the type." + }, + "ColumnSpec-Output": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "attributes": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Attributes" + }, + "partition": { + "anyOf": [ + { + "$ref": "#/components/schemas/PartitionSpec" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "ColumnSpec", + "description": "Represents a column.\n\nThe `type` field is optional - if not provided, DJ will infer the column\ntype from the query or source definition. This is useful when you only\nwant to specify metadata (display_name, attributes, description) without\nhardcoding the type." + }, + "ColumnType": { + "properties": {}, + "additionalProperties": true, + "type": "object", + "title": "ColumnType", + "description": "Base type for all Column Types" + }, + "CombineMaterialization": { + "properties": { + "node": { + "$ref": "#/components/schemas/NodeNameVersion" + }, + "query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Query" + }, + "columns": { + "items": { + "$ref": "#/components/schemas/ColumnMetadata" + }, + "type": "array", + "title": "Columns" + }, + "grain": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Grain", + "description": "The grain at which the node is being materialized." + }, + "dimensions": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Dimensions", + "description": "List of dimensions included in this materialization." + }, + "measures": { + "items": { + "$ref": "#/components/schemas/MetricComponent" + }, + "type": "array", + "title": "Measures", + "description": "List of measures included in this materialization." + }, + "timestamp_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Timestamp Column", + "description": "Timestamp column name" + }, + "timestamp_format": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Timestamp Format", + "description": "Timestamp format. Example: `yyyyMMdd`" + }, + "granularity": { + "anyOf": [ + { + "$ref": "#/components/schemas/Granularity" + }, + { + "type": "null" + } + ], + "description": "The time granularity for each materialization run. Examples: DAY, HOUR" + }, + "upstream_tables": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Upstream Tables" + }, + "output_table_name": { + "type": "string", + "title": "Output Table Name", + "description": "Builds an output table name based on the node and a hash of its unique key.", + "readOnly": true + }, + "druid_spec": { + "type": "string", + "title": "Druid Spec", + "description": "Builds the Druid ingestion spec based on the materialization config.", + "readOnly": true + } + }, + "type": "object", + "required": [ + "node", + "columns", + "grain", + "dimensions", + "measures", + "output_table_name", + "druid_spec" + ], + "title": "CombineMaterialization", + "description": "Stage for combining measures datasets at their shared grain and ingesting to Druid.\nNote that if there is only one upstream measures dataset, the Spark combining stage will\nbe skipped and we ingest the aggregated measures directly to Druid." + }, + "CombinedMeasuresSQLResponse": { + "properties": { + "sql": { + "type": "string", + "title": "Sql" + }, + "columns": { + "items": { + "$ref": "#/components/schemas/V3ColumnMetadata" + }, + "type": "array", + "title": "Columns" + }, + "grain": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Grain" + }, + "grain_groups_combined": { + "type": "integer", + "title": "Grain Groups Combined" + }, + "dialect": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Dialect" + }, + "use_preagg_tables": { + "type": "boolean", + "title": "Use Preagg Tables" + }, + "source_tables": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Source Tables" + } + }, + "type": "object", + "required": [ + "sql", + "columns", + "grain", + "grain_groups_combined", + "use_preagg_tables", + "source_tables" + ], + "title": "CombinedMeasuresSQLResponse", + "description": "Response model for combined measures SQL.\n\nThis endpoint combines multiple grain groups into a single SQL query\nusing FULL OUTER JOIN on shared dimensions with COALESCE for dimension columns." + }, + "ComponentResponse": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "expression": { + "type": "string", + "title": "Expression" + }, + "aggregation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Aggregation" + }, + "merge": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Merge" + }, + "aggregability": { + "type": "string", + "title": "Aggregability" + } + }, + "type": "object", + "required": [ + "name", + "expression", + "aggregability" + ], + "title": "ComponentResponse", + "description": "Response model for a metric component in measures SQL." + }, + "CreateCubeNode": { + "properties": { + "metrics": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Metrics" + }, + "dimensions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Dimensions" + }, + "filters": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Filters" + }, + "orderby": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Orderby" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Limit" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "primary_key": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Primary Key" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" + }, + "owners": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Owners" + }, + "name": { + "type": "string", + "title": "Name" + }, + "namespace": { + "type": "string", + "title": "Namespace", + "default": "default" + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "CreateCubeNode", + "description": "A create object for cube nodes" + }, + "CreateMeasure": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "columns": { + "items": { + "$ref": "#/components/schemas/NodeColumn" + }, + "type": "array", + "title": "Columns" + }, + "additive": { + "$ref": "#/components/schemas/AggregationRule-Input", + "default": "non-additive" + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "CreateMeasure", + "description": "Input for creating a measure" + }, + "CreateNode": { + "properties": { + "required_dimensions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Required Dimensions" + }, + "metric_metadata": { + "anyOf": [ + { + "$ref": "#/components/schemas/MetricMetadataInput" + }, + { + "type": "null" + } + ] + }, + "query": { + "type": "string", + "title": "Query" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" + }, + "primary_key": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Primary Key" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" + }, + "owners": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Owners" + }, + "name": { + "type": "string", + "title": "Name" + }, + "namespace": { + "type": "string", + "title": "Namespace", + "default": "default" + } + }, + "type": "object", + "required": [ + "query", + "name" + ], + "title": "CreateNode", + "description": "Create non-source node object." + }, + "CreateSourceNode": { + "properties": { + "catalog": { + "type": "string", + "title": "Catalog" + }, + "schema_": { + "type": "string", + "title": "Schema" + }, + "table": { + "type": "string", + "title": "Table" + }, + "columns": { + "items": { + "$ref": "#/components/schemas/SourceColumnOutput" + }, + "type": "array", + "title": "Columns" + }, + "missing_table": { + "type": "boolean", + "title": "Missing Table", + "default": false + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" + }, + "primary_key": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Primary Key" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" + }, + "owners": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Owners" + }, + "name": { + "type": "string", + "title": "Name" + }, + "namespace": { + "type": "string", + "title": "Namespace", + "default": "default" + }, + "query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Query" + } + }, + "type": "object", + "required": [ + "catalog", + "schema_", + "table", + "columns", + "name" + ], + "title": "CreateSourceNode", + "description": "A create object for source nodes" + }, + "CreateTag": { + "properties": { + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "tag_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Tag Metadata" + }, + "name": { + "type": "string", + "title": "Name" + }, + "tag_type": { + "type": "string", + "title": "Tag Type" + } + }, + "type": "object", + "required": [ + "name", + "tag_type" + ], + "title": "CreateTag", + "description": "Create tag model." + }, + "CubeElementMetadata": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "display_name": { + "type": "string", + "title": "Display Name" + }, + "node_name": { + "type": "string", + "title": "Node Name" + }, + "type": { + "type": "string", + "title": "Type" + }, + "partition": { + "anyOf": [ + { + "$ref": "#/components/schemas/PartitionOutput" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "name", + "display_name", + "node_name", + "type" + ], + "title": "CubeElementMetadata", + "description": "Metadata for an element in a cube" + }, + "CubeMaterializeRequest": { + "properties": { + "schedule": { + "type": "string", + "title": "Schedule", + "description": "Cron schedule for the materialization (e.g., '0 0 * * *' for daily)" + }, + "strategy": { + "$ref": "#/components/schemas/MaterializationStrategy", + "description": "Materialization strategy (FULL or INCREMENTAL_TIME)", + "default": "incremental_time" + }, + "lookback_window": { + "type": "string", + "title": "Lookback Window", + "description": "Lookback window for incremental materialization", + "default": "1 DAY" + }, + "druid_datasource": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Druid Datasource", + "description": "Custom Druid datasource name. Defaults to 'dj__{cube_name}'" + }, + "run_backfill": { + "type": "boolean", + "title": "Run Backfill", + "description": "Whether to run an initial backfill", + "default": true + } + }, + "type": "object", + "required": [ + "schedule" + ], + "title": "CubeMaterializeRequest", + "description": "Request for creating a cube materialization workflow.\n\nThis creates a Druid workflow that:\n1. Waits for pre-agg tables to be available (VTTS)\n2. Runs combined SQL that reads from pre-agg tables\n3. Ingests the combined data into Druid" + }, + "CubeMaterializeResponse": { + "properties": { + "cube": { + "$ref": "#/components/schemas/NodeNameVersion" + }, + "druid_datasource": { + "type": "string", + "title": "Druid Datasource" + }, + "preagg_tables": { + "items": { + "$ref": "#/components/schemas/PreAggTableInfo" + }, + "type": "array", + "title": "Preagg Tables" + }, + "combined_sql": { + "type": "string", + "title": "Combined Sql" + }, + "combined_columns": { + "items": { + "$ref": "#/components/schemas/ColumnMetadata" + }, + "type": "array", + "title": "Combined Columns" + }, + "combined_grain": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Combined Grain" + }, + "druid_spec": { + "type": "object", + "title": "Druid Spec" + }, + "strategy": { + "$ref": "#/components/schemas/MaterializationStrategy" + }, + "schedule": { + "type": "string", + "title": "Schedule" + }, + "lookback_window": { + "type": "string", + "title": "Lookback Window" + }, + "metric_combiners": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "title": "Metric Combiners", + "description": "Mapping of metric names to their combiner SQL expressions" + }, + "workflow_urls": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Workflow Urls", + "description": "URLs to the created workflows (if any)" + }, + "message": { + "type": "string", + "title": "Message" + } + }, + "type": "object", + "required": [ + "cube", + "druid_datasource", + "preagg_tables", + "combined_sql", + "combined_columns", + "combined_grain", + "druid_spec", + "strategy", + "schedule", + "lookback_window", + "message" + ], + "title": "CubeMaterializeResponse", + "description": "Response from cube materialization endpoint.\n\nContains all information needed to create and execute the Druid cube workflow:\n- Pre-agg table dependencies for VTTS waits\n- Combined SQL for Druid ingestion\n- Druid spec for ingestion configuration" + }, + "CubeMetric": { + "properties": { + "metric": { + "$ref": "#/components/schemas/NodeNameVersion", + "description": "The name and version of the metric." + }, + "required_measures": { + "items": { + "$ref": "#/components/schemas/MeasureKey" + }, + "type": "array", + "title": "Required Measures", + "description": "List of measures required by this metric." + }, + "derived_expression": { + "type": "string", + "title": "Derived Expression", + "description": "The query for rewriting the original metric query using the materialized measures." + }, + "metric_expression": { + "type": "string", + "title": "Metric Expression", + "description": "SQL expression for rewriting the original metric query using the materialized measures." + } + }, + "type": "object", + "required": [ + "metric", + "required_measures", + "derived_expression", + "metric_expression" + ], + "title": "CubeMetric", + "description": "Represents a metric belonging to a cube." + }, + "CubeRevisionMetadata": { + "properties": { + "node_revision_id": { + "type": "integer", + "title": "Node Revision Id" + }, + "node_id": { + "type": "integer", + "title": "Node Id" + }, + "type": { + "$ref": "#/components/schemas/NodeType" + }, + "name": { + "type": "string", + "title": "Name" + }, + "display_name": { + "type": "string", + "title": "Display Name" + }, + "version": { + "type": "string", + "title": "Version" + }, + "status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode" + }, + "description": { + "type": "string", + "title": "Description", + "default": "" + }, + "availability": { + "anyOf": [ + { + "$ref": "#/components/schemas/AvailabilityStateBase" + }, + { + "type": "null" + } + ] + }, + "cube_elements": { + "items": { + "$ref": "#/components/schemas/CubeElementMetadata" + }, + "type": "array", + "title": "Cube Elements" + }, + "cube_node_metrics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Cube Node Metrics" + }, + "cube_node_dimensions": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Cube Node Dimensions" + }, + "query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Query" + }, + "columns": { + "items": { + "$ref": "#/components/schemas/ColumnOutput" + }, + "type": "array", + "title": "Columns" + }, + "sql_columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnOutput" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Sql Columns" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Updated At" + }, + "materializations": { + "items": { + "$ref": "#/components/schemas/MaterializationConfigOutput" + }, + "type": "array", + "title": "Materializations" + }, + "tags": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/TagOutput" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Tags" + }, + "measures": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/MetricMeasures-Output" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Measures" + } + }, + "type": "object", + "required": [ + "node_revision_id", + "node_id", + "type", + "name", + "display_name", + "version", + "status", + "mode", + "cube_elements", + "cube_node_metrics", + "cube_node_dimensions", + "columns", + "updated_at", + "materializations" + ], + "title": "CubeRevisionMetadata", + "description": "Metadata for a cube node" + }, + "CubeSpec-Input": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "namespace": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Namespace" + }, + "node_type": { + "type": "string", + "const": "cube", + "title": "Node Type", + "default": "cube" + }, + "owners": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owners" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Tags" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" + }, + "metrics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Metrics" + }, + "dimensions": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Dimensions" + }, + "filters": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Filters" + }, + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnSpec-Input" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" + } + }, + "type": "object", + "required": [ + "name", + "metrics" + ], + "title": "CubeSpec", + "description": "Specification for a cube node" + }, + "CubeSpec-Output": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "node_type": { + "type": "string", + "const": "cube", + "title": "Node Type", + "default": "cube" + }, + "owners": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owners" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Tags" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" + }, + "metrics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Metrics" + }, + "dimensions": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Dimensions" + }, + "filters": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Filters" + }, + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnSpec-Output" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" + } + }, + "type": "object", + "required": [ + "name", + "metrics" + ], + "title": "CubeSpec", + "description": "Specification for a cube node" + }, + "DAGNodeOutput": { + "properties": { + "namespace": { + "type": "string", + "title": "Namespace" + }, + "node_revision_id": { + "type": "integer", + "title": "Node Revision Id" + }, + "node_id": { + "type": "integer", + "title": "Node Id" + }, + "type": { + "$ref": "#/components/schemas/NodeType" + }, + "name": { + "type": "string", + "title": "Name" + }, + "display_name": { + "type": "string", + "title": "Display Name" + }, + "version": { + "type": "string", + "title": "Version" + }, + "status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode" + }, + "catalog": { + "anyOf": [ + { + "$ref": "#/components/schemas/CatalogInfo-Output" + }, + { + "type": "null" + } + ] + }, + "schema_": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schema" + }, + "table": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Table" + }, + "description": { + "type": "string", + "title": "Description", + "default": "" + }, + "columns": { + "items": { + "$ref": "#/components/schemas/ColumnOutput" + }, + "type": "array", + "title": "Columns" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Updated At" + }, + "parents": { + "items": { + "$ref": "#/components/schemas/NodeNameOutput" + }, + "type": "array", + "title": "Parents" + }, + "dimension_links": { + "items": { + "$ref": "#/components/schemas/LinkDimensionOutput" + }, + "type": "array", + "title": "Dimension Links" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "tags": { + "items": { + "$ref": "#/components/schemas/TagOutput" + }, + "type": "array", + "title": "Tags", + "default": [] + }, + "current_version": { + "type": "string", + "title": "Current Version" + } + }, + "type": "object", + "required": [ + "namespace", + "node_revision_id", + "node_id", + "type", + "name", + "display_name", + "version", + "status", + "mode", + "columns", + "updated_at", + "parents", + "dimension_links", + "created_at", + "current_version" + ], + "title": "DAGNodeOutput", + "description": "Output for a node in another node's DAG" + }, + "DJError": { + "properties": { + "code": { + "$ref": "#/components/schemas/ErrorCode" + }, + "message": { + "type": "string", + "title": "Message" + }, + "debug": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Debug" + }, + "context": { + "type": "string", + "title": "Context", + "default": "" + } + }, + "type": "object", + "required": [ + "code", + "message" + ], + "title": "DJError", + "description": "An error." + }, + "DJQueryBuildError": { + "properties": { + "code": { + "$ref": "#/components/schemas/ErrorCode" + }, + "message": { + "type": "string", + "title": "Message" + }, + "debug": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Debug" + }, + "context": { + "type": "string", + "title": "Context", + "default": "" + } + }, + "type": "object", + "required": [ + "code", + "message" + ], + "title": "DJQueryBuildError", + "description": "Query build error" + }, + "DeactivatedWorkflowInfo": { + "properties": { + "id": { + "type": "integer", + "title": "Id", + "description": "Pre-aggregation ID" + }, + "workflow_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Workflow Name", + "description": "Name of the deactivated workflow" + } + }, + "type": "object", + "required": [ + "id" + ], + "title": "DeactivatedWorkflowInfo", + "description": "Info about a single deactivated workflow." + }, + "DeploymentImpactResponse": { + "properties": { + "namespace": { + "type": "string", + "title": "Namespace" + }, + "changes": { + "items": { + "$ref": "#/components/schemas/NodeChange" + }, + "type": "array", + "title": "Changes" + }, + "create_count": { + "type": "integer", + "title": "Create Count", + "default": 0 + }, + "update_count": { + "type": "integer", + "title": "Update Count", + "default": 0 + }, + "delete_count": { + "type": "integer", + "title": "Delete Count", + "default": 0 + }, + "skip_count": { + "type": "integer", + "title": "Skip Count", + "default": 0 + }, + "downstream_impacts": { + "items": { + "$ref": "#/components/schemas/DownstreamImpact" + }, + "type": "array", + "title": "Downstream Impacts" + }, + "will_invalidate_count": { + "type": "integer", + "title": "Will Invalidate Count", + "default": 0 + }, + "may_affect_count": { + "type": "integer", + "title": "May Affect Count", + "default": 0 + }, + "warnings": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Warnings" + } + }, + "type": "object", + "required": [ + "namespace" + ], + "title": "DeploymentImpactResponse", + "description": "Full response for deployment impact analysis" + }, + "DeploymentInfo": { + "properties": { + "uuid": { + "type": "string", + "title": "Uuid" + }, + "namespace": { + "type": "string", + "title": "Namespace" + }, + "status": { + "$ref": "#/components/schemas/DeploymentStatus" + }, + "results": { + "items": { + "$ref": "#/components/schemas/DeploymentResult" + }, + "type": "array", + "title": "Results" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Created At" + }, + "created_by": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Created By" + }, + "source": { + "anyOf": [ + { + "$ref": "#/components/schemas/GitDeploymentSource" + }, + { + "$ref": "#/components/schemas/LocalDeploymentSource" + }, + { + "type": "null" + } + ], + "title": "Source" + } + }, + "type": "object", + "required": [ + "uuid", + "namespace", + "status" + ], + "title": "DeploymentInfo", + "description": "Information about a deployment" + }, + "DeploymentResult": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "deploy_type": { + "$ref": "#/components/schemas/Type" + }, + "status": { + "$ref": "#/components/schemas/Status" + }, + "operation": { + "$ref": "#/components/schemas/Operation" + }, + "message": { + "type": "string", + "title": "Message", + "default": "" + } + }, + "type": "object", + "required": [ + "name", + "deploy_type", + "status", + "operation" + ], + "title": "DeploymentResult", + "description": "Result of deploying a single node, link, or tag" + }, + "DeploymentSpec-Input": { + "properties": { + "namespace": { + "type": "string", + "title": "Namespace" + }, + "nodes": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/SourceSpec-Input" + }, + { + "$ref": "#/components/schemas/TransformSpec-Input" + }, + { + "$ref": "#/components/schemas/DimensionSpec-Input" + }, + { + "$ref": "#/components/schemas/MetricSpec-Input" + }, + { + "$ref": "#/components/schemas/CubeSpec-Input" + } + ], + "discriminator": { + "propertyName": "node_type", + "mapping": { + "cube": "#/components/schemas/CubeSpec-Input", + "dimension": "#/components/schemas/DimensionSpec-Input", + "metric": "#/components/schemas/MetricSpec-Input", + "source": "#/components/schemas/SourceSpec-Input", + "transform": "#/components/schemas/TransformSpec-Input" + } + } + }, + "type": "array", + "title": "Nodes" + }, + "tags": { + "items": { + "$ref": "#/components/schemas/TagSpec" + }, + "type": "array", + "title": "Tags" + }, + "source": { + "anyOf": [ + { + "oneOf": [ + { + "$ref": "#/components/schemas/GitDeploymentSource" + }, + { + "$ref": "#/components/schemas/LocalDeploymentSource" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "git": "#/components/schemas/GitDeploymentSource", + "local": "#/components/schemas/LocalDeploymentSource" + } + } + }, + { + "type": "null" + } + ], + "title": "Source" + } + }, + "type": "object", + "required": [ + "namespace" + ], + "title": "DeploymentSpec", + "description": "Specification of a full deployment (namespace, nodes, tags, and add'l metadata).\nTypically hydrated from a project manifest (YAML/JSON/etc)." + }, + "DeploymentSpec-Output": { + "properties": { + "namespace": { + "type": "string", + "title": "Namespace" + }, + "nodes": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/SourceSpec-Output" + }, + { + "$ref": "#/components/schemas/TransformSpec-Output" + }, + { + "$ref": "#/components/schemas/DimensionSpec-Output" + }, + { + "$ref": "#/components/schemas/MetricSpec-Output" + }, + { + "$ref": "#/components/schemas/CubeSpec-Output" + } + ], + "discriminator": { + "propertyName": "node_type", + "mapping": { + "cube": "#/components/schemas/CubeSpec-Output", + "dimension": "#/components/schemas/DimensionSpec-Output", + "metric": "#/components/schemas/MetricSpec-Output", + "source": "#/components/schemas/SourceSpec-Output", + "transform": "#/components/schemas/TransformSpec-Output" + } + } + }, + "type": "array", + "title": "Nodes" + }, + "tags": { + "items": { + "$ref": "#/components/schemas/TagSpec" + }, + "type": "array", + "title": "Tags" + }, + "source": { + "anyOf": [ + { + "oneOf": [ + { + "$ref": "#/components/schemas/GitDeploymentSource" + }, + { + "$ref": "#/components/schemas/LocalDeploymentSource" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "git": "#/components/schemas/GitDeploymentSource", + "local": "#/components/schemas/LocalDeploymentSource" + } + } + }, + { + "type": "null" + } + ], + "title": "Source" + } + }, + "type": "object", + "required": [ + "namespace" + ], + "title": "DeploymentSpec", + "description": "Specification of a full deployment (namespace, nodes, tags, and add'l metadata).\nTypically hydrated from a project manifest (YAML/JSON/etc)." + }, + "DeploymentStatus": { + "type": "string", + "enum": [ + "pending", + "running", + "failed", + "success" + ], + "title": "DeploymentStatus" + }, + "Dialect": { + "type": "string", + "enum": [ + "spark", + "trino", + "druid", + "postgres", + "clickhouse", + "duckdb", + "redshift", + "snowflake", + "sqlite" + ], + "title": "Dialect", + "description": "SQL dialect" + }, + "DialectInfo": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "plugin_class": { + "type": "string", + "title": "Plugin Class" + } + }, + "type": "object", + "required": [ + "name", + "plugin_class" + ], + "title": "DialectInfo", + "description": "Information about a SQL dialect and its associated plugin class." + }, + "DimensionAttributeOutput": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "node_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node Name" + }, + "node_display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node Display Name" + }, + "properties": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Properties" + }, + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + }, + "path": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Path" + }, + "filter_only": { + "type": "boolean", + "title": "Filter Only", + "default": false + } + }, + "type": "object", + "required": [ + "name", + "node_name", + "node_display_name", + "properties", + "type", + "path" + ], + "title": "DimensionAttributeOutput", + "description": "Dimension attribute output should include the name and type" + }, + "DimensionHierarchiesResponse": { + "properties": { + "dimension_node": { + "type": "string", + "title": "Dimension Node" + }, + "hierarchies": { + "items": { + "$ref": "#/components/schemas/DimensionHierarchyNavigation" + }, + "type": "array", + "title": "Hierarchies" + } + }, + "type": "object", + "required": [ + "dimension_node", + "hierarchies" + ], + "title": "DimensionHierarchiesResponse", + "description": "Response showing all hierarchies that use a dimension and navigation options." + }, + "DimensionHierarchyNavigation": { + "properties": { + "hierarchy_name": { + "type": "string", + "title": "Hierarchy Name" + }, + "hierarchy_display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Hierarchy Display Name" + }, + "current_level": { + "type": "string", + "title": "Current Level" + }, + "current_level_order": { + "type": "integer", + "title": "Current Level Order" + }, + "drill_up": { + "items": { + "$ref": "#/components/schemas/NavigationTarget" + }, + "type": "array", + "title": "Drill Up", + "default": [] + }, + "drill_down": { + "items": { + "$ref": "#/components/schemas/NavigationTarget" + }, + "type": "array", + "title": "Drill Down", + "default": [] + } + }, + "type": "object", + "required": [ + "hierarchy_name", + "current_level", + "current_level_order" + ], + "title": "DimensionHierarchyNavigation", + "description": "Navigation information for a dimension within a specific hierarchy." + }, + "DimensionJoinLinkSpec-Input": { + "properties": { + "type": { + "type": "string", + "const": "join", + "title": "Type", + "default": "join" + }, + "role": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role" + }, + "namespace": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Namespace" + }, + "dimension_node": { + "type": "string", + "title": "Dimension Node" + }, + "node_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node Column" + }, + "join_type": { + "$ref": "#/components/schemas/JoinType", + "default": "left" + }, + "join_on": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Join On" + } + }, + "type": "object", + "required": [ + "dimension_node" + ], + "title": "DimensionJoinLinkSpec", + "description": "Specification for a dimension join link\n\nIf a custom `join_on` clause is not specified, DJ will automatically set\nthis clause to be on the selected column and the dimension node's primary key" + }, + "DimensionJoinLinkSpec-Output": { + "properties": { + "type": { + "type": "string", + "const": "join", + "title": "Type", + "default": "join" + }, + "role": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role" + }, + "dimension_node": { + "type": "string", + "title": "Dimension Node" + }, + "node_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node Column" + }, + "join_type": { + "$ref": "#/components/schemas/JoinType", + "default": "left" + }, + "join_on": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Join On" + } + }, + "type": "object", + "required": [ + "dimension_node" + ], + "title": "DimensionJoinLinkSpec", + "description": "Specification for a dimension join link\n\nIf a custom `join_on` clause is not specified, DJ will automatically set\nthis clause to be on the selected column and the dimension node's primary key" + }, + "DimensionReferenceLinkSpec-Input": { + "properties": { + "type": { + "type": "string", + "const": "reference", + "title": "Type", + "default": "reference" + }, + "role": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role" + }, + "namespace": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Namespace" + }, + "node_column": { + "type": "string", + "title": "Node Column" + }, + "dimension": { + "type": "string", + "title": "Dimension" + } + }, + "type": "object", + "required": [ + "node_column", + "dimension" + ], + "title": "DimensionReferenceLinkSpec", + "description": "Specification for a dimension reference link\n\nThe `dimension` input should be a fully qualified dimension attribute name,\ne.g., \".\"" + }, + "DimensionReferenceLinkSpec-Output": { + "properties": { + "type": { + "type": "string", + "const": "reference", + "title": "Type", + "default": "reference" + }, + "role": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role" + }, + "node_column": { + "type": "string", + "title": "Node Column" + }, + "dimension": { + "type": "string", + "title": "Dimension" + } + }, + "type": "object", + "required": [ + "node_column", + "dimension" + ], + "title": "DimensionReferenceLinkSpec", + "description": "Specification for a dimension reference link\n\nThe `dimension` input should be a fully qualified dimension attribute name,\ne.g., \".\"" + }, + "DimensionSpec-Input": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "namespace": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Namespace" + }, + "node_type": { + "type": "string", + "const": "dimension", + "title": "Node Type", + "default": "dimension" + }, + "owners": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owners" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Tags" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" + }, + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnSpec-Input" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" + }, + "dimension_links": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/DimensionJoinLinkSpec-Input" + }, + { + "$ref": "#/components/schemas/DimensionReferenceLinkSpec-Input" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "join": "#/components/schemas/DimensionJoinLinkSpec-Input", + "reference": "#/components/schemas/DimensionReferenceLinkSpec-Input" + } + } + }, + "type": "array", + "title": "Dimension Links" + }, + "primary_key": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Primary Key" + }, + "query": { + "type": "string", + "title": "Query" + } + }, + "type": "object", + "required": [ + "name", + "query" + ], + "title": "DimensionSpec", + "description": "Specification for a dimension node" + }, + "DimensionSpec-Output": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "node_type": { + "type": "string", + "const": "dimension", + "title": "Node Type", + "default": "dimension" + }, + "owners": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owners" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Tags" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" + }, + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnSpec-Output" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" + }, + "dimension_links": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/DimensionJoinLinkSpec-Output" + }, + { + "$ref": "#/components/schemas/DimensionReferenceLinkSpec-Output" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "join": "#/components/schemas/DimensionJoinLinkSpec-Output", + "reference": "#/components/schemas/DimensionReferenceLinkSpec-Output" + } + } + }, + "type": "array", + "title": "Dimension Links" + }, + "primary_key": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Primary Key" + }, + "query": { + "type": "string", + "title": "Query" + } + }, + "type": "object", + "required": [ + "name", + "query" + ], + "title": "DimensionSpec", + "description": "Specification for a dimension node" + }, + "DimensionStats": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "indegree": { + "type": "integer", + "title": "Indegree", + "default": 0 + }, + "cube_count": { + "type": "integer", + "title": "Cube Count" + } + }, + "type": "object", + "required": [ + "name", + "cube_count" + ], + "title": "DimensionStats", + "description": "Output model for dimension statistics." + }, + "DimensionValue": { + "properties": { + "value": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Value" + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Count" + } + }, + "type": "object", + "required": [ + "value", + "count" + ], + "title": "DimensionValue", + "description": "Dimension value and count" + }, + "DimensionValues": { + "properties": { + "dimensions": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Dimensions" + }, + "values": { + "items": { + "$ref": "#/components/schemas/DimensionValue" + }, + "type": "array", + "title": "Values" + }, + "cardinality": { + "type": "integer", + "title": "Cardinality" + } + }, + "type": "object", + "required": [ + "dimensions", + "values", + "cardinality" + ], + "title": "DimensionValues", + "description": "Dimension values" + }, + "DownstreamImpact": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "node_type": { + "$ref": "#/components/schemas/NodeType" + }, + "current_status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "predicted_status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "impact_type": { + "$ref": "#/components/schemas/ImpactType" + }, + "impact_reason": { + "type": "string", + "title": "Impact Reason" + }, + "depth": { + "type": "integer", + "title": "Depth" + }, + "caused_by": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Caused By" + }, + "is_external": { + "type": "boolean", + "title": "Is External", + "default": false + } + }, + "type": "object", + "required": [ + "name", + "node_type", + "current_status", + "predicted_status", + "impact_type", + "impact_reason", + "depth" + ], + "title": "DownstreamImpact", + "description": "Predicted impact on a downstream node" + }, + "DruidConf": { + "properties": { + "granularity": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Granularity" + }, + "intervals": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Intervals" + }, + "timestamp_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Timestamp Column" + }, + "timestamp_format": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Timestamp Format" + }, + "parse_spec_format": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Parse Spec Format" + } + }, + "type": "object", + "title": "DruidConf", + "description": "Druid configuration" + }, + "DruidCubeConfigInput": { + "properties": { + "spark": { + "anyOf": [ + { + "$ref": "#/components/schemas/SparkConf" + }, + { + "type": "null" + } + ] + }, + "lookback_window": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Lookback Window" + }, + "dimensions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Dimensions" + }, + "measures": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/MetricMeasures-Input" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Measures" + }, + "metrics": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnMetadata" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Metrics" + }, + "prefix": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prefix", + "default": "" + }, + "suffix": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Suffix", + "default": "" + }, + "druid": { + "anyOf": [ + { + "$ref": "#/components/schemas/DruidConf" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "title": "DruidCubeConfigInput", + "description": "Specific Druid cube materialization fields that require user input" + }, + "DruidCubeMaterializationInput": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "cube": { + "$ref": "#/components/schemas/NodeNameVersion" + }, + "dimensions": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Dimensions" + }, + "metrics": { + "items": { + "$ref": "#/components/schemas/CubeMetric" + }, + "type": "array", + "title": "Metrics" + }, + "strategy": { + "$ref": "#/components/schemas/MaterializationStrategy" + }, + "schedule": { + "type": "string", + "title": "Schedule" + }, + "job": { + "type": "string", + "title": "Job" + }, + "lookback_window": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Lookback Window", + "default": "1 DAY" + }, + "measures_materializations": { + "items": { + "$ref": "#/components/schemas/MeasuresMaterialization" + }, + "type": "array", + "title": "Measures Materializations" + }, + "combiners": { + "items": { + "$ref": "#/components/schemas/CombineMaterialization" + }, + "type": "array", + "title": "Combiners" + } + }, + "type": "object", + "required": [ + "name", + "cube", + "dimensions", + "metrics", + "strategy", + "schedule", + "job", + "measures_materializations", + "combiners" + ], + "title": "DruidCubeMaterializationInput", + "description": "Materialization info as passed to the query service." + }, + "EditMeasure": { + "properties": { + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/NodeColumn" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" + }, + "additive": { + "anyOf": [ + { + "$ref": "#/components/schemas/AggregationRule-Input" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "title": "EditMeasure", + "description": "Editable fields on a measure" + }, + "EngineInfo": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "version": { + "type": "string", + "title": "Version" + }, + "uri": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Uri" + }, + "dialect": { + "anyOf": [ + { + "$ref": "#/components/schemas/Dialect" + }, + { + "type": "null" + } + ] + } + }, + "type": "object", + "required": [ + "name", + "version" + ], + "title": "EngineInfo", + "description": "Class for engine creation" + }, + "EntityType": { + "type": "string", + "enum": [ + "attribute", + "availability", + "backfill", + "catalog", + "column_attribute", + "dependency", + "engine", + "hierarchy", + "link", + "materialization", + "namespace", + "node", + "partition", + "query", + "role", + "role_assignment", + "role_scope", + "tag" + ], + "title": "EntityType", + "description": "An entity type for which activity can occur" + }, + "ErrorCode": { + "type": "integer", + "enum": [ + 0, + 1, + 2, + 100, + 101, + 102, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 300, + 301, + 302, + 303, + 400, + 401, + 402, + 403, + 500, + 501, + 600, + 601, + 602, + 603, + 604, + 700, + 701, + 702 + ], + "title": "ErrorCode", + "description": "Error codes." + }, + "FrozenMeasureKey": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "expression": { + "type": "string", + "title": "Expression" + }, + "aggregation": { + "type": "string", + "title": "Aggregation" + }, + "rule": { + "$ref": "#/components/schemas/datajunction_server__models__decompose__AggregationRule" + }, + "upstream_revision": { + "$ref": "#/components/schemas/NodeRevisionNameVersion" + } + }, + "type": "object", + "required": [ + "name", + "expression", + "aggregation", + "rule", + "upstream_revision" + ], + "title": "FrozenMeasureKey", + "description": "Base frozen measure fields." + }, + "FrozenMeasureOutput": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "expression": { + "type": "string", + "title": "Expression" + }, + "aggregation": { + "type": "string", + "title": "Aggregation" + }, + "rule": { + "$ref": "#/components/schemas/datajunction_server__models__decompose__AggregationRule" + }, + "upstream_revision": { + "$ref": "#/components/schemas/NodeRevisionNameVersion" + }, + "used_by_node_revisions": { + "items": { + "$ref": "#/components/schemas/NodeRevisionNameVersion" + }, + "type": "array", + "title": "Used By Node Revisions" + } + }, + "type": "object", + "required": [ + "name", + "expression", + "aggregation", + "rule", + "upstream_revision", + "used_by_node_revisions" + ], + "title": "FrozenMeasureOutput", + "description": "The output fields when listing frozen measure metadata" + }, + "GeneratedSQL": { + "properties": { + "sql": { + "type": "string", + "title": "Sql" + }, + "dialect": { + "anyOf": [ + { + "$ref": "#/components/schemas/Dialect" + }, + { + "type": "null" + } + ] + }, + "node": { + "$ref": "#/components/schemas/NodeNameVersion" + }, + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnMetadata" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" + }, + "grain": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Grain" + }, + "upstream_tables": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Upstream Tables" + }, + "metrics": { + "anyOf": [ + { + "additionalProperties": { + "prefixItems": [ + { + "items": { + "$ref": "#/components/schemas/MetricComponent" + }, + "type": "array" + }, + { + "type": "string" + } + ], + "type": "array", + "maxItems": 2, + "minItems": 2 + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Metrics" + }, + "spark_conf": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Spark Conf" + }, + "errors": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/DJQueryBuildError" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Errors" + } + }, + "type": "object", + "required": [ + "sql", + "node" + ], + "title": "GeneratedSQL", + "description": "Generated SQL for a given node, the output of a QueryBuilder(...).build() call." + }, + "GenericCubeConfigInput": { + "properties": { + "spark": { + "anyOf": [ + { + "$ref": "#/components/schemas/SparkConf" + }, + { + "type": "null" + } + ] + }, + "lookback_window": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Lookback Window" + }, + "dimensions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Dimensions" + }, + "measures": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/MetricMeasures-Input" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Measures" + }, + "metrics": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnMetadata" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Metrics" + } + }, + "type": "object", + "title": "GenericCubeConfigInput", + "description": "Generic cube materialization config fields that require user input" + }, + "GenericMaterializationConfigInput": { + "properties": { + "spark": { + "anyOf": [ + { + "$ref": "#/components/schemas/SparkConf" + }, + { + "type": "null" + } + ] + }, + "lookback_window": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Lookback Window" + } + }, + "type": "object", + "title": "GenericMaterializationConfigInput", + "description": "User-input portions of the materialization config" + }, + "GitDeploymentSource": { + "properties": { + "type": { + "type": "string", + "const": "git", + "title": "Type", + "default": "git" + }, + "repository": { + "type": "string", + "title": "Repository" + }, + "branch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Branch" + }, + "commit_sha": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Commit Sha" + }, + "ci_system": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ci System" + }, + "ci_run_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Ci Run Url" + } + }, + "type": "object", + "required": [ + "repository" + ], + "title": "GitDeploymentSource", + "description": "Deployment from a tracked git repository.\nIndicates the source of truth is in version control with CI/CD automation." + }, + "GrainGroupResponse": { + "properties": { + "sql": { + "type": "string", + "title": "Sql" + }, + "columns": { + "items": { + "$ref": "#/components/schemas/V3ColumnMetadata" + }, + "type": "array", + "title": "Columns" + }, + "grain": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Grain" + }, + "aggregability": { + "type": "string", + "title": "Aggregability" + }, + "metrics": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Metrics" + }, + "components": { + "items": { + "$ref": "#/components/schemas/ComponentResponse" + }, + "type": "array", + "title": "Components" + }, + "parent_name": { + "type": "string", + "title": "Parent Name" + } + }, + "type": "object", + "required": [ + "sql", + "columns", + "grain", + "aggregability", + "metrics", + "components", + "parent_name" + ], + "title": "GrainGroupResponse", + "description": "Response model for a single grain group in measures SQL." + }, + "GrainMode": { + "type": "string", + "enum": [ + "exact", + "superset" + ], + "title": "GrainMode", + "description": "Grain matching mode for pre-aggregation lookup.\n\n- EXACT: Pre-agg grain must match requested grain exactly\n- SUPERSET: Pre-agg grain must contain all requested columns (and possibly more)" + }, + "Granularity": { + "type": "string", + "enum": [ + "second", + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year" + ], + "title": "Granularity", + "description": "Time dimension granularity." + }, + "GroupOutput": { + "properties": { + "id": { + "type": "integer", + "title": "Id" + }, + "username": { + "type": "string", + "title": "Username" + }, + "email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Email" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + }, + "created_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Created At" + } + }, + "type": "object", + "required": [ + "id", + "username" + ], + "title": "GroupOutput", + "description": "Group information to be included in responses" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "HealthCheck": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "status": { + "$ref": "#/components/schemas/HealthcheckStatus" + } + }, + "type": "object", + "required": [ + "name", + "status" + ], + "title": "HealthCheck", + "description": "A healthcheck response." + }, + "HealthcheckStatus": { + "type": "string", + "enum": [ + "ok", + "failed" + ], + "title": "HealthcheckStatus", + "description": "Possible health statuses." + }, + "HierarchyCreateRequest": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "levels": { + "items": { + "$ref": "#/components/schemas/HierarchyLevelInput" + }, + "type": "array", + "minItems": 2, + "title": "Levels" + } + }, + "type": "object", + "required": [ + "name", + "levels" + ], + "title": "HierarchyCreateRequest", + "description": "Request model for creating a hierarchy." + }, + "HierarchyInfo": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "created_by": { + "$ref": "#/components/schemas/UserNameOnly" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "level_count": { + "type": "integer", + "title": "Level Count" + } + }, + "type": "object", + "required": [ + "name", + "created_by", + "created_at", + "level_count" + ], + "title": "HierarchyInfo", + "description": "Simplified hierarchy info for listings." + }, + "HierarchyLevelInput": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "dimension_node": { + "type": "string", + "title": "Dimension Node" + }, + "grain_columns": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Grain Columns" + } + }, + "type": "object", + "required": [ + "name", + "dimension_node" + ], + "title": "HierarchyLevelInput", + "description": "Input model for creating a hierarchy level." + }, + "HierarchyLevelOutput": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "dimension_node": { + "$ref": "#/components/schemas/NodeNameOutput" + }, + "level_order": { + "type": "integer", + "title": "Level Order" + }, + "grain_columns": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Grain Columns" + } + }, + "type": "object", + "required": [ + "name", + "dimension_node", + "level_order" + ], + "title": "HierarchyLevelOutput", + "description": "Output model for hierarchy levels." + }, + "HierarchyOutput": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "created_by": { + "$ref": "#/components/schemas/UserNameOnly" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "levels": { + "items": { + "$ref": "#/components/schemas/HierarchyLevelOutput" + }, + "type": "array", + "title": "Levels" + } + }, + "type": "object", + "required": [ + "name", + "created_by", + "created_at", + "levels" + ], + "title": "HierarchyOutput", + "description": "Output model for hierarchies." + }, + "HierarchyUpdateRequest": { + "properties": { + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "levels": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/HierarchyLevelInput" + }, + "type": "array", + "minItems": 2 + }, + { + "type": "null" + } + ], + "title": "Levels" + } + }, + "type": "object", + "title": "HierarchyUpdateRequest", + "description": "Request model for updating a hierarchy." + }, + "HistoryOutput": { + "properties": { + "id": { + "type": "integer", + "title": "Id" + }, + "entity_type": { + "anyOf": [ + { + "$ref": "#/components/schemas/EntityType" + }, + { + "type": "null" + } + ] + }, + "entity_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Entity Name" + }, + "node": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node" + }, + "activity_type": { + "anyOf": [ + { + "$ref": "#/components/schemas/ActivityType" + }, + { + "type": "null" + } + ] + }, + "user": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "User" + }, + "pre": { + "type": "object", + "title": "Pre" + }, + "post": { + "type": "object", + "title": "Post" + }, + "details": { + "type": "object", + "title": "Details" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + } + }, + "type": "object", + "required": [ + "id", + "entity_type", + "entity_name", + "node", + "activity_type", + "user", + "pre", + "post", + "details", + "created_at" + ], + "title": "HistoryOutput", + "description": "Output history event" + }, + "ImpactType": { + "type": "string", + "enum": [ + "will_invalidate", + "may_affect", + "unchanged" + ], + "title": "ImpactType", + "description": "Type of impact on a downstream node" + }, + "JoinCardinality": { + "type": "string", + "enum": [ + "one_to_one", + "one_to_many", + "many_to_one", + "many_to_many" + ], + "title": "JoinCardinality", + "description": "The version upgrade type" + }, + "JoinLinkInput": { + "properties": { + "dimension_node": { + "type": "string", + "title": "Dimension Node" + }, + "join_type": { + "anyOf": [ + { + "$ref": "#/components/schemas/JoinType" + }, + { + "type": "null" + } + ], + "default": "left" + }, + "join_on": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Join On" + }, + "join_cardinality": { + "anyOf": [ + { + "$ref": "#/components/schemas/JoinCardinality" + }, + { + "type": "null" + } + ], + "default": "many_to_one" + }, + "role": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role" + } + }, + "type": "object", + "required": [ + "dimension_node" + ], + "title": "JoinLinkInput", + "description": "Input for creating a join link between a dimension node and node" + }, + "JoinType": { + "type": "string", + "enum": [ + "left", + "right", + "inner", + "full", + "cross" + ], + "title": "JoinType", + "description": "Join type" + }, + "LineageColumn": { + "properties": { + "column_name": { + "type": "string", + "title": "Column Name" + }, + "node_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node Name" + }, + "node_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Node Type" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "lineage": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/LineageColumn" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Lineage" + } + }, + "type": "object", + "required": [ + "column_name" + ], + "title": "LineageColumn", + "description": "Column in lineage graph" + }, + "LinkDimensionIdentifier": { + "properties": { + "dimension_node": { + "type": "string", + "title": "Dimension Node" + }, + "role": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role" + } + }, + "type": "object", + "required": [ + "dimension_node" + ], + "title": "LinkDimensionIdentifier", + "description": "Input for linking a dimension to a node" + }, + "LinkDimensionOutput": { + "properties": { + "dimension": { + "$ref": "#/components/schemas/NodeNameOutput" + }, + "join_type": { + "$ref": "#/components/schemas/JoinType" + }, + "join_sql": { + "type": "string", + "title": "Join Sql" + }, + "join_cardinality": { + "anyOf": [ + { + "$ref": "#/components/schemas/JoinCardinality" + }, + { + "type": "null" + } + ] + }, + "role": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Role" + }, + "foreign_keys": { + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": "object", + "title": "Foreign Keys" + } + }, + "type": "object", + "required": [ + "dimension", + "join_type", + "join_sql", + "foreign_keys" + ], + "title": "LinkDimensionOutput", + "description": "Input for linking a dimension to a node" + }, + "LocalDeploymentSource": { + "properties": { + "type": { + "type": "string", + "const": "local", + "title": "Type", + "default": "local" + }, + "hostname": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Hostname" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Reason" + } + }, + "type": "object", + "title": "LocalDeploymentSource", + "description": "Adhoc deployment without a git repository context.\nCould be from CLI, direct API calls, scripts, or development/testing." + }, + "MaterializationConfigInfoUnified": { + "properties": { + "node_revision_id": { + "type": "integer", + "title": "Node Revision Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + }, + "config": { + "type": "object", + "title": "Config" + }, + "schedule": { + "type": "string", + "title": "Schedule" + }, + "job": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Job" + }, + "backfills": { + "items": { + "$ref": "#/components/schemas/BackfillOutput" + }, + "type": "array", + "title": "Backfills" + }, + "strategy": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Strategy" + }, + "deactivated_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Deactivated At" + }, + "output_tables": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Output Tables" + }, + "urls": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Urls" + } + }, + "type": "object", + "required": [ + "node_revision_id", + "name", + "config", + "schedule", + "job", + "backfills", + "strategy", + "deactivated_at", + "output_tables", + "urls" + ], + "title": "MaterializationConfigInfoUnified", + "description": "Materialization config + info" + }, + "MaterializationConfigOutput": { + "properties": { + "node_revision_id": { + "type": "integer", + "title": "Node Revision Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name" + }, + "config": { + "type": "object", + "title": "Config" + }, + "schedule": { + "type": "string", + "title": "Schedule" + }, + "job": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Job" + }, + "backfills": { + "items": { + "$ref": "#/components/schemas/BackfillOutput" + }, + "type": "array", + "title": "Backfills" + }, + "strategy": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Strategy" + }, + "deactivated_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Deactivated At" + } + }, + "type": "object", + "required": [ + "node_revision_id", + "name", + "config", + "schedule", + "job", + "backfills", + "strategy", + "deactivated_at" + ], + "title": "MaterializationConfigOutput", + "description": "Output for materialization config." + }, + "MaterializationInfo": { + "properties": { + "output_tables": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Output Tables" + }, + "urls": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Urls" + } + }, + "type": "object", + "required": [ + "output_tables", + "urls" + ], + "title": "MaterializationInfo", + "description": "The output when calling the query service's materialization\nAPI endpoint for a cube node." + }, + "MaterializationStrategy": { + "type": "string", + "enum": [ + "full", + "snapshot", + "snapshot_partition", + "incremental_time", + "view" + ], + "title": "MaterializationStrategy", + "description": "Materialization strategies" + }, + "Measure": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "field_name": { + "type": "string", + "title": "Field Name" + }, + "agg": { + "type": "string", + "title": "Agg" + }, + "type": { + "type": "string", + "title": "Type" + } + }, + "type": "object", + "required": [ + "name", + "field_name", + "agg", + "type" ], - "title": "ActivityType", - "description": "An activity type" + "title": "Measure", + "description": "A measure with a simple aggregation" }, - "AggregationRule": { - "type": "string", - "enum": [ - "additive", - "non-additive", - "semi-additive" + "MeasureKey": { + "properties": { + "node": { + "$ref": "#/components/schemas/NodeNameVersion" + }, + "measure_name": { + "type": "string", + "title": "Measure Name" + } + }, + "type": "object", + "required": [ + "node", + "measure_name" ], - "title": "AggregationRule", - "description": "Type of allowed aggregation for a given measure." + "title": "MeasureKey", + "description": "Lookup key for a measure" }, - "AttributeOutput": { + "MeasureOutput": { "properties": { - "attribute_type": { - "$ref": "#/components/schemas/AttributeTypeName" + "name": { + "type": "string", + "title": "Name" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "columns": { + "items": { + "$ref": "#/components/schemas/datajunction_server__models__measure__ColumnOutput" + }, + "type": "array", + "title": "Columns" + }, + "additive": { + "$ref": "#/components/schemas/AggregationRule" } }, "type": "object", "required": [ - "attribute_type" + "name", + "additive" ], - "title": "AttributeOutput", - "description": "Column attribute output." + "title": "MeasureOutput", + "description": "Output model for measures" }, - "AttributeTypeBase": { + "MeasuresMaterialization": { "properties": { - "namespace": { + "node": { + "$ref": "#/components/schemas/NodeNameVersion", + "description": "The node being materialized" + }, + "grain": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Grain", + "description": "The grain at which the node is being materialized." + }, + "dimensions": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Dimensions", + "description": "List of dimensions included in this materialization." + }, + "measures": { + "items": { + "$ref": "#/components/schemas/MetricComponent" + }, + "type": "array", + "title": "Measures", + "description": "List of measures included in this materialization." + }, + "query": { "type": "string", - "title": "Namespace", - "default": "system" + "title": "Query", + "description": "The query used for each materialization run." + }, + "columns": { + "items": { + "$ref": "#/components/schemas/ColumnMetadata" + }, + "type": "array", + "title": "Columns" + }, + "timestamp_column": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Timestamp Column", + "description": "Timestamp column name" + }, + "timestamp_format": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Timestamp Format", + "description": "Timestamp format. Example: `yyyyMMdd`" + }, + "granularity": { + "anyOf": [ + { + "$ref": "#/components/schemas/Granularity" + }, + { + "type": "null" + } + ], + "description": "The time granularity for each materialization run. Examples: DAY, HOUR" + }, + "spark_conf": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Spark Conf", + "description": "Spark config for this materialization." + }, + "upstream_tables": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Upstream Tables", + "description": "List of upstream tables used in this materialization." + }, + "output_table_name": { + "type": "string", + "title": "Output Table Name", + "description": "Generate a unique output table name based on the parameters.", + "readOnly": true + } + }, + "type": "object", + "required": [ + "node", + "grain", + "dimensions", + "measures", + "query", + "columns", + "timestamp_column", + "timestamp_format", + "granularity", + "spark_conf", + "upstream_tables", + "output_table_name" + ], + "title": "MeasuresMaterialization", + "description": "Represents a single pre-aggregation transform query for materializing a partition." + }, + "MeasuresSQLResponse": { + "properties": { + "grain_groups": { + "items": { + "$ref": "#/components/schemas/GrainGroupResponse" + }, + "type": "array", + "title": "Grain Groups" + }, + "metric_formulas": { + "items": { + "$ref": "#/components/schemas/MetricFormulaResponse" + }, + "type": "array", + "title": "Metric Formulas" + }, + "dialect": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Dialect" + }, + "requested_dimensions": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Requested Dimensions" + } + }, + "type": "object", + "required": [ + "grain_groups", + "metric_formulas", + "requested_dimensions" + ], + "title": "MeasuresSQLResponse", + "description": "Response model for V3 measures SQL with multiple grain groups." + }, + "Metric": { + "properties": { + "id": { + "type": "integer", + "title": "Id" }, "name": { "type": "string", "title": "Name" }, + "display_name": { + "type": "string", + "title": "Display Name" + }, + "current_version": { + "type": "string", + "title": "Current Version" + }, "description": { "type": "string", - "title": "Description" + "title": "Description", + "default": "" }, - "allowed_node_types": { + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Updated At" + }, + "query": { + "type": "string", + "title": "Query" + }, + "upstream_node": { + "type": "string", + "title": "Upstream Node" + }, + "expression": { + "type": "string", + "title": "Expression" + }, + "dimensions": { "items": { - "$ref": "#/components/schemas/NodeType" + "$ref": "#/components/schemas/DimensionAttributeOutput" + }, + "type": "array", + "title": "Dimensions" + }, + "metric_metadata": { + "anyOf": [ + { + "$ref": "#/components/schemas/MetricMetadataOutput" + }, + { + "type": "null" + } + ] + }, + "required_dimensions": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Required Dimensions" + }, + "incompatible_druid_functions": { + "items": { + "type": "string" }, - "type": "array" + "type": "array", + "title": "Incompatible Druid Functions" }, - "uniqueness_scope": { + "measures": { "items": { - "$ref": "#/components/schemas/UniquenessScope" + "$ref": "#/components/schemas/MetricComponent" }, - "type": "array" + "type": "array", + "title": "Measures" }, - "id": { - "type": "integer", - "title": "Id" - } - }, - "type": "object", - "required": [ - "name", - "description", - "allowed_node_types", - "id" - ], - "title": "AttributeTypeBase", - "description": "Base attribute type." - }, - "AttributeTypeIdentifier": { - "properties": { - "namespace": { + "derived_query": { "type": "string", - "title": "Namespace", - "default": "system" + "title": "Derived Query" }, - "name": { + "derived_expression": { "type": "string", - "title": "Name" + "title": "Derived Expression" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" } }, "type": "object", "required": [ - "name" + "id", + "name", + "display_name", + "current_version", + "created_at", + "updated_at", + "query", + "upstream_node", + "expression", + "dimensions", + "required_dimensions", + "incompatible_druid_functions", + "measures", + "derived_query", + "derived_expression" ], - "title": "AttributeTypeIdentifier", - "description": "Fields that can be used to identify an attribute type." + "title": "Metric", + "description": "Class for a metric." }, - "AttributeTypeName": { + "MetricComponent": { "properties": { - "namespace": { - "type": "string", - "title": "Namespace" - }, "name": { "type": "string", "title": "Name" + }, + "expression": { + "type": "string", + "title": "Expression" + }, + "aggregation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Aggregation" + }, + "merge": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Merge" + }, + "rule": { + "$ref": "#/components/schemas/datajunction_server__models__decompose__AggregationRule" } }, "type": "object", "required": [ - "namespace", - "name" + "name", + "expression", + "aggregation", + "rule" ], - "title": "AttributeTypeName", - "description": "Attribute type name." + "title": "MetricComponent", + "description": "A reusable, named building block of a metric definition.\n\nA MetricComponent represents a SQL expression that can serve as an input\nto building a metric. It supports a two-phase aggregation model:\n\n- Phase 1 (Accumulate): Build from raw data using `aggregation`\n Can be a function name (\"SUM\") or a template (\"SUM(POWER({}, 2))\")\n\n- Phase 2 (Merge): Combine pre-aggregated values using `merge` function\n Examples: SUM, SUM (for COUNT), hll_union_agg\n\nFor most aggregations, accumulate and merge use the same function (SUM \u2192 SUM).\nFor COUNT, merge is SUM (sum up the counts).\nFor HLL sketches, they differ: hll_sketch_estimate vs hll_union_agg.\n\nThe final expression combining merged components is specified in\nDecomposedMetric.combiner.\n\nAttributes:\n name: A unique name for the component, derived from its expression.\n expression: The raw SQL expression (column/value) being aggregated.\n aggregation: Function name or template for Phase 1. Simple cases use\n just the name (\"SUM\"), complex cases use templates with\n {} placeholder (\"SUM(POWER({}, 2))\").\n merge: The function name for combining pre-aggregated values (Phase 2).\n rule: Aggregation rules defining how/when the component can be aggregated." }, - "AvailabilityStateBase": { + "MetricDirection": { + "type": "string", + "enum": [ + "higher_is_better", + "lower_is_better", + "neutral" + ], + "title": "MetricDirection", + "description": "The direction of the metric that's considered good, i.e., higher is better" + }, + "MetricFormulaResponse": { "properties": { - "min_temporal_partition": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Min Temporal Partition", - "default": [] - }, - "max_temporal_partition": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Max Temporal Partition", - "default": [] - }, - "catalog": { + "name": { "type": "string", - "title": "Catalog" + "title": "Name" }, - "schema_": { + "short_name": { "type": "string", - "title": "Schema " + "title": "Short Name" }, - "table": { + "query": { "type": "string", - "title": "Table" - }, - "valid_through_ts": { - "type": "integer", - "title": "Valid Through Ts" + "title": "Query" }, - "url": { + "combiner": { "type": "string", - "title": "Url" + "title": "Combiner" }, - "categorical_partitions": { + "components": { "items": { "type": "string" }, "type": "array", - "title": "Categorical Partitions", - "default": [] + "title": "Components" }, - "temporal_partitions": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Temporal Partitions", - "default": [] + "is_derived": { + "type": "boolean", + "title": "Is Derived" }, - "partitions": { - "items": { - "$ref": "#/components/schemas/PartitionAvailability" - }, - "type": "array", - "title": "Partitions", - "default": [] + "parent_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Parent Name" } }, "type": "object", "required": [ - "catalog", - "table", - "valid_through_ts" + "name", + "short_name", + "query", + "combiner", + "components", + "is_derived" ], - "title": "AvailabilityStateBase", - "description": "An availability state base" + "title": "MetricFormulaResponse", + "description": "Response model for a metric's combiner formula." }, - "BackfillOutput": { + "MetricMeasures-Input": { "properties": { - "spec": { - "$ref": "#/components/schemas/PartitionBackfill" + "metric": { + "type": "string", + "title": "Metric" }, - "urls": { + "measures": { "items": { - "type": "string" + "$ref": "#/components/schemas/Measure" }, "type": "array", - "title": "Urls" + "title": "Measures" + }, + "combiner": { + "type": "string", + "title": "Combiner" } }, "type": "object", - "title": "BackfillOutput", - "description": "Output model for backfills" + "required": [ + "metric", + "measures", + "combiner" + ], + "title": "MetricMeasures", + "description": "Represent a metric as a set of measures, along with the expression for\ncombining the measures to make the metric." }, - "Body_create_a_user_basic_user__post": { + "MetricMeasures-Output": { "properties": { - "email": { - "type": "string", - "title": "Email" - }, - "username": { - "type": "string", - "title": "Username" + "metric": { + "$ref": "#/components/schemas/NodeRevisionNameVersion" }, - "password": { - "type": "string", - "title": "Password" + "frozen_measures": { + "items": { + "$ref": "#/components/schemas/FrozenMeasureKey" + }, + "type": "array", + "title": "Frozen Measures" } }, "type": "object", "required": [ - "email", - "username", - "password" + "metric", + "frozen_measures" ], - "title": "Body_create_a_user_basic_user__post" + "title": "MetricMeasures" }, - "Body_login_basic_login__post": { + "MetricMetadataInput": { "properties": { - "grant_type": { - "type": "string", - "pattern": "password", - "title": "Grant Type" - }, - "username": { - "type": "string", - "title": "Username" + "direction": { + "anyOf": [ + { + "$ref": "#/components/schemas/MetricDirection" + }, + { + "type": "null" + } + ] }, - "password": { - "type": "string", - "title": "Password" + "unit": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Unit" }, - "scope": { - "type": "string", - "title": "Scope", - "default": "" + "significant_digits": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Significant Digits" }, - "client_id": { - "type": "string", - "title": "Client Id" + "min_decimal_exponent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Min Decimal Exponent" }, - "client_secret": { - "type": "string", - "title": "Client Secret" + "max_decimal_exponent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Max Decimal Exponent" } }, "type": "object", - "required": [ - "username", - "password" - ], - "title": "Body_login_basic_login__post" + "title": "MetricMetadataInput", + "description": "Metric metadata output" }, - "CatalogInfo": { + "MetricMetadataOptions": { "properties": { - "name": { - "type": "string", - "title": "Name" + "directions": { + "items": { + "$ref": "#/components/schemas/MetricDirection" + }, + "type": "array", + "title": "Directions" }, - "engines": { + "units": { "items": { - "$ref": "#/components/schemas/EngineInfo" + "$ref": "#/components/schemas/Unit" }, "type": "array", - "title": "Engines", - "default": [] + "title": "Units" } }, "type": "object", "required": [ - "name" + "directions", + "units" ], - "title": "CatalogInfo", - "description": "Class for catalog creation" + "title": "MetricMetadataOptions", + "description": "Metric metadata options list" }, - "ColumnMetadata": { + "MetricMetadataOutput": { "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "type": { - "type": "string", - "title": "Type" + "direction": { + "anyOf": [ + { + "$ref": "#/components/schemas/MetricDirection" + }, + { + "type": "null" + } + ] }, - "column": { - "type": "string", - "title": "Column" + "unit": { + "anyOf": [ + { + "$ref": "#/components/schemas/Unit" + }, + { + "type": "null" + } + ] }, - "node": { - "type": "string", - "title": "Node" + "significant_digits": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Significant Digits" }, - "semantic_entity": { - "type": "string", - "title": "Semantic Entity" + "min_decimal_exponent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Min Decimal Exponent" }, - "semantic_type": { - "type": "string", - "title": "Semantic Type" + "max_decimal_exponent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Max Decimal Exponent" } }, "type": "object", - "required": [ - "name", - "type" - ], - "title": "ColumnMetadata", - "description": "A simple model for column metadata." - }, - "ColumnType": { - "properties": {}, - "type": "object", - "title": "ColumnType", - "description": "Base type for all Column Types" + "title": "MetricMetadataOutput", + "description": "Metric metadata output" }, - "CreateCubeNode": { + "MetricRef": { "properties": { - "metrics": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Metrics" - }, - "dimensions": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Dimensions" - }, - "filters": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Filters" - }, - "orderby": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Orderby" - }, - "limit": { - "type": "integer", - "title": "Limit" - }, - "description": { - "type": "string", - "title": "Description" - }, - "mode": { - "$ref": "#/components/schemas/NodeMode" - }, - "display_name": { - "type": "string", - "title": "Display Name" - }, - "primary_key": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Primary Key" - }, "name": { "type": "string", "title": "Name" }, - "namespace": { - "type": "string", - "title": "Namespace", - "default": "default" + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" } }, "type": "object", "required": [ - "metrics", - "dimensions", - "description", - "mode", "name" ], - "title": "CreateCubeNode", - "description": "A create object for cube nodes" + "title": "MetricRef", + "description": "Reference to a metric with name and display name." }, - "CreateMeasure": { + "MetricSpec-Input": { "properties": { "name": { "type": "string", "title": "Name" }, - "display_name": { - "type": "string", - "title": "Display Name" + "namespace": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Namespace" }, - "description": { + "node_type": { "type": "string", - "title": "Description" + "const": "metric", + "title": "Node Type", + "default": "metric" }, - "columns": { + "owners": { "items": { - "$ref": "#/components/schemas/NodeColumn" + "type": "string" }, "type": "array", - "title": "Columns" + "title": "Owners" }, - "additive": { - "allOf": [ + "display_name": { + "anyOf": [ + { + "type": "string" + }, { - "$ref": "#/components/schemas/AggregationRule" + "type": "null" } ], - "default": "non-additive" - } - }, - "type": "object", - "required": [ - "name", - "columns" - ], - "title": "CreateMeasure", - "description": "Input for creating a measure" - }, - "CreateNode": { - "properties": { - "required_dimensions": { + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "tags": { "items": { "type": "string" }, "type": "array", - "title": "Required Dimensions" + "title": "Tags" }, - "metric_metadata": { - "$ref": "#/components/schemas/MetricMetadataInput" + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" }, "query": { "type": "string", "title": "Query" }, - "display_name": { - "type": "string", - "title": "Display Name" + "required_dimensions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Required Dimensions" }, - "description": { - "type": "string", - "title": "Description" + "direction": { + "anyOf": [ + { + "$ref": "#/components/schemas/MetricDirection" + }, + { + "type": "null" + } + ] }, - "mode": { - "$ref": "#/components/schemas/NodeMode" + "unit_enum": { + "anyOf": [ + { + "$ref": "#/components/schemas/MetricUnit" + }, + { + "type": "null" + } + ] }, - "primary_key": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Primary Key" + "significant_digits": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Significant Digits" }, - "name": { - "type": "string", - "title": "Name" + "min_decimal_exponent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Min Decimal Exponent" }, - "namespace": { - "type": "string", - "title": "Namespace", - "default": "default" + "max_decimal_exponent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Max Decimal Exponent" } }, "type": "object", "required": [ - "query", - "description", - "mode", - "name" + "name", + "query" ], - "title": "CreateNode", - "description": "Create non-source node object." + "title": "MetricSpec", + "description": "Specification for a metric node" }, - "CreateSourceNode": { + "MetricSpec-Output": { "properties": { - "catalog": { - "type": "string", - "title": "Catalog" - }, - "schema_": { + "name": { "type": "string", - "title": "Schema " + "title": "Name" }, - "table": { + "node_type": { "type": "string", - "title": "Table" + "const": "metric", + "title": "Node Type", + "default": "metric" }, - "columns": { + "owners": { "items": { - "$ref": "#/components/schemas/SourceColumnOutput" + "type": "string" }, "type": "array", - "title": "Columns" - }, - "missing_table": { - "type": "boolean", - "title": "Missing Table", - "default": false + "title": "Owners" }, "display_name": { - "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], "title": "Display Name" }, "description": { - "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], "title": "Description" }, - "mode": { - "$ref": "#/components/schemas/NodeMode" - }, - "primary_key": { + "tags": { "items": { "type": "string" }, "type": "array", - "title": "Primary Key" - }, - "name": { - "type": "string", - "title": "Name" - }, - "namespace": { - "type": "string", - "title": "Namespace", - "default": "default" - } - }, - "type": "object", - "required": [ - "catalog", - "schema_", - "table", - "columns", - "description", - "mode", - "name" - ], - "title": "CreateSourceNode", - "description": "A create object for source nodes" - }, - "CreateTag": { - "properties": { - "description": { - "type": "string", - "title": "Description" + "title": "Tags" }, - "display_name": { - "type": "string", - "title": "Display Name" + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" }, - "tag_metadata": { - "type": "object", - "title": "Tag Metadata", - "default": {} + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" }, - "name": { + "query": { "type": "string", - "title": "Name" + "title": "Query" }, - "tag_type": { - "type": "string", - "title": "Tag Type" - } - }, - "type": "object", - "required": [ - "name", - "tag_type" - ], - "title": "CreateTag", - "description": "Create tag model." - }, - "CubeElementMetadata": { - "properties": { - "name": { - "type": "string", - "title": "Name" + "required_dimensions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Required Dimensions" }, - "display_name": { - "type": "string", - "title": "Display Name" + "direction": { + "anyOf": [ + { + "$ref": "#/components/schemas/MetricDirection" + }, + { + "type": "null" + } + ] }, - "node_name": { - "type": "string", - "title": "Node Name" + "significant_digits": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Significant Digits" }, - "type": { - "type": "string", - "title": "Type" + "min_decimal_exponent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Min Decimal Exponent" }, - "partition": { - "$ref": "#/components/schemas/PartitionOutput" + "max_decimal_exponent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Max Decimal Exponent" } }, "type": "object", "required": [ "name", - "display_name", - "node_name", - "type" + "query" ], - "title": "CubeElementMetadata", - "description": "Metadata for an element in a cube" + "title": "MetricSpec", + "description": "Specification for a metric node" }, - "CubeRevisionMetadata": { - "properties": { - "node_revision_id": { - "type": "integer", - "title": "Node Revision Id" - }, - "node_id": { - "type": "integer", - "title": "Node Id" - }, - "type": { - "$ref": "#/components/schemas/NodeType" - }, - "name": { - "type": "string", - "title": "Name" - }, - "display_name": { - "type": "string", - "title": "Display Name" + "MetricUnit": { + "enum": [ + { + "category": "", + "label": "Unknown", + "name": "unknown" }, - "version": { - "type": "string", - "title": "Version" + { + "category": "", + "label": "Unitless", + "name": "unitless" }, - "status": { - "$ref": "#/components/schemas/NodeStatus" + { + "abbreviation": "%", + "category": "", + "description": "A ratio expressed as a number out of 100. Values range from 0 to 100.", + "label": "Percentage", + "name": "percentage" }, - "mode": { - "$ref": "#/components/schemas/NodeMode" + { + "abbreviation": "", + "category": "", + "description": "A ratio that compares a part to a whole. Values range from 0 to 1.", + "label": "Proportion", + "name": "proportion" }, - "description": { - "type": "string", - "title": "Description", - "default": "" + { + "abbreviation": "$", + "category": "currency", + "label": "Dollar", + "name": "dollar" }, - "availability": { - "$ref": "#/components/schemas/AvailabilityStateBase" + { + "abbreviation": "s", + "category": "time", + "label": "Second", + "name": "second" }, - "cube_elements": { - "items": { - "$ref": "#/components/schemas/CubeElementMetadata" - }, - "type": "array", - "title": "Cube Elements" + { + "abbreviation": "m", + "category": "time", + "label": "Minute", + "name": "minute" }, - "cube_node_metrics": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Cube Node Metrics" + { + "abbreviation": "h", + "category": "time", + "label": "Hour", + "name": "hour" }, - "cube_node_dimensions": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Cube Node Dimensions" + { + "abbreviation": "d", + "category": "time", + "label": "Day", + "name": "day" }, - "query": { + { + "abbreviation": "w", + "category": "time", + "label": "Week", + "name": "week" + }, + { + "abbreviation": "mo", + "category": "time", + "label": "Month", + "name": "month" + }, + { + "abbreviation": "y", + "category": "time", + "label": "Year", + "name": "year" + } + ], + "title": "MetricUnit", + "description": "Available units of measure for metrics\nTODO: Eventually this can be recorded in a database,\nsince measurement units can be customized depending on the metric\n(i.e., clicks/hour). For the time being, this enum provides some basic units." + }, + "MutableAttributeTypeFields": { + "properties": { + "namespace": { "type": "string", - "title": "Query" + "title": "Namespace", + "default": "system" }, - "columns": { - "items": { - "$ref": "#/components/schemas/datajunction_server__models__node__ColumnOutput" - }, - "type": "array", - "title": "Columns" + "name": { + "type": "string", + "title": "Name" }, - "updated_at": { + "description": { "type": "string", - "format": "date-time", - "title": "Updated At" + "title": "Description" }, - "materializations": { + "allowed_node_types": { "items": { - "$ref": "#/components/schemas/MaterializationConfigOutput" + "$ref": "#/components/schemas/NodeType" }, "type": "array", - "title": "Materializations" + "title": "Allowed Node Types" }, - "tags": { - "items": { - "$ref": "#/components/schemas/TagOutput" - }, - "type": "array", - "title": "Tags" + "uniqueness_scope": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/UniquenessScope" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Uniqueness Scope" } }, "type": "object", "required": [ - "node_revision_id", - "node_id", - "type", "name", - "display_name", - "version", - "status", - "mode", - "cube_elements", - "cube_node_metrics", - "cube_node_dimensions", - "columns", - "updated_at", - "materializations" + "description", + "allowed_node_types" ], - "title": "CubeRevisionMetadata", - "description": "Metadata for a cube node" + "title": "MutableAttributeTypeFields", + "description": "Fields on attribute types that users can set." }, - "DAGNodeOutput": { + "NamespaceOutput": { "properties": { "namespace": { "type": "string", "title": "Namespace" }, - "node_revision_id": { - "type": "integer", - "title": "Node Revision Id" - }, - "node_id": { + "num_nodes": { "type": "integer", - "title": "Node Id" - }, - "type": { - "$ref": "#/components/schemas/NodeType" - }, - "name": { + "title": "Num Nodes" + } + }, + "type": "object", + "required": [ + "namespace", + "num_nodes" + ], + "title": "NamespaceOutput", + "description": "Output for a namespace that includes the number of nodes" + }, + "NamespaceSourcesResponse": { + "properties": { + "namespace": { "type": "string", - "title": "Name" + "title": "Namespace" }, - "display_name": { + "primary_source": { + "anyOf": [ + { + "$ref": "#/components/schemas/GitDeploymentSource" + }, + { + "$ref": "#/components/schemas/LocalDeploymentSource" + }, + { + "type": "null" + } + ], + "title": "Primary Source" + }, + "total_deployments": { + "type": "integer", + "title": "Total Deployments", + "default": 0 + } + }, + "type": "object", + "required": [ + "namespace" + ], + "title": "NamespaceSourcesResponse", + "description": "Response for the /namespaces/{namespace}/sources endpoint.\nShows the primary deployment source for a namespace." + }, + "NavigationTarget": { + "properties": { + "level_name": { "type": "string", - "title": "Display Name" + "title": "Level Name" }, - "version": { + "dimension_node": { "type": "string", - "title": "Version" + "title": "Dimension Node" }, - "status": { - "$ref": "#/components/schemas/NodeStatus" + "level_order": { + "type": "integer", + "title": "Level Order" }, - "mode": { - "$ref": "#/components/schemas/NodeMode" + "steps": { + "type": "integer", + "title": "Steps" + } + }, + "type": "object", + "required": [ + "level_name", + "dimension_node", + "level_order", + "steps" + ], + "title": "NavigationTarget", + "description": "A level that can be navigated to in a hierarchy." + }, + "NodeChange": { + "properties": { + "name": { + "type": "string", + "title": "Name" }, - "catalog": { - "$ref": "#/components/schemas/CatalogInfo" + "operation": { + "$ref": "#/components/schemas/NodeChangeOperation" }, - "schema_": { - "type": "string", - "title": "Schema " + "node_type": { + "$ref": "#/components/schemas/NodeType" }, - "table": { - "type": "string", - "title": "Table" + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" }, "description": { - "type": "string", - "title": "Description", - "default": "" - }, - "columns": { - "items": { - "$ref": "#/components/schemas/datajunction_server__models__node__ColumnOutput" - }, - "type": "array", - "title": "Columns" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Updated At" + "current_status": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeStatus" + }, + { + "type": "null" + } + ] }, - "parents": { + "changed_fields": { "items": { - "$ref": "#/components/schemas/NodeNameOutput" + "type": "string" }, "type": "array", - "title": "Parents" + "title": "Changed Fields" }, - "dimension_links": { + "column_changes": { "items": { - "$ref": "#/components/schemas/LinkDimensionOutput" + "$ref": "#/components/schemas/ColumnChange" }, "type": "array", - "title": "Dimension Links" - }, - "created_at": { + "title": "Column Changes" + } + }, + "type": "object", + "required": [ + "name", + "operation", + "node_type" + ], + "title": "NodeChange", + "description": "Represents a direct change to a node in the deployment" + }, + "NodeChangeOperation": { + "type": "string", + "enum": [ + "create", + "update", + "delete", + "noop" + ], + "title": "NodeChangeOperation", + "description": "Operation being performed on a node" + }, + "NodeColumn": { + "properties": { + "node": { "type": "string", - "format": "date-time", - "title": "Created At" - }, - "tags": { - "items": { - "$ref": "#/components/schemas/TagOutput" - }, - "type": "array", - "title": "Tags", - "default": [] + "title": "Node" }, - "current_version": { + "column": { "type": "string", - "title": "Current Version" + "title": "Column" + } + }, + "type": "object", + "required": [ + "node", + "column" + ], + "title": "NodeColumn", + "description": "Defines a column on a node" + }, + "NodeIndegreeOutput": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "indegree": { + "type": "integer", + "title": "Indegree" } }, "type": "object", "required": [ - "namespace", - "node_revision_id", - "node_id", - "type", "name", - "display_name", - "version", - "status", - "mode", - "columns", - "updated_at", - "parents", - "dimension_links", - "created_at", - "current_version" + "indegree" ], - "title": "DAGNodeOutput", - "description": "Output for a node in another node's DAG" + "title": "NodeIndegreeOutput", + "description": "Node indegree output" }, - "DJError": { + "NodeIndexItem": { "properties": { - "code": { - "$ref": "#/components/schemas/ErrorCode" - }, - "message": { + "name": { "type": "string", - "title": "Message" + "title": "Name" }, - "debug": { - "type": "object", - "title": "Debug" + "display_name": { + "type": "string", + "title": "Display Name" }, - "context": { + "description": { "type": "string", - "title": "Context", - "default": "" + "title": "Description" + }, + "type": { + "$ref": "#/components/schemas/NodeType" } }, "type": "object", "required": [ - "code", - "message" - ], - "title": "DJError", - "description": "An error." - }, - "Dialect": { - "type": "string", - "enum": [ - "spark", - "trino", - "druid" + "name", + "display_name", + "description", + "type" ], - "title": "Dialect", - "description": "SQL dialect" + "title": "NodeIndexItem", + "description": "Node details used for indexing purposes" }, - "DimensionAttributeOutput": { + "NodeMinimumDetail": { "properties": { "name": { "type": "string", "title": "Name" }, - "node_name": { + "display_name": { "type": "string", - "title": "Node Name" + "title": "Display Name" }, - "node_display_name": { + "description": { "type": "string", - "title": "Node Display Name" + "title": "Description" }, - "is_primary_key": { - "type": "boolean", - "title": "Is Primary Key" + "version": { + "type": "string", + "title": "Version" }, "type": { + "$ref": "#/components/schemas/NodeType" + }, + "status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode" + }, + "updated_at": { "type": "string", - "title": "Type" + "format": "date-time", + "title": "Updated At" }, - "path": { + "tags": { "items": { - "type": "string" + "$ref": "#/components/schemas/TagMinimum" }, "type": "array", - "title": "Path" + "title": "Tags" + }, + "edited_by": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Edited By" } }, "type": "object", "required": [ "name", - "is_primary_key", + "display_name", + "description", + "version", "type", - "path" + "status", + "mode", + "updated_at" ], - "title": "DimensionAttributeOutput", - "description": "Dimension attribute output should include the name and type" + "title": "NodeMinimumDetail", + "description": "List of high level node details" }, - "DimensionValue": { + "NodeMode": { + "type": "string", + "enum": [ + "published", + "draft" + ], + "title": "NodeMode", + "description": "Node mode.\n\nA node can be in one of the following modes:\n\n1. PUBLISHED - Must be valid and not cause any child nodes to be invalid\n2. DRAFT - Can be invalid, have invalid parents, and include dangling references" + }, + "NodeNameOutput": { "properties": { - "value": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Value" - }, - "count": { - "type": "integer", - "title": "Count" + "name": { + "type": "string", + "title": "Name" } }, "type": "object", "required": [ - "value" + "name" ], - "title": "DimensionValue", - "description": "Dimension value and count" + "title": "NodeNameOutput", + "description": "Node name only" }, - "DimensionValues": { + "NodeNameVersion": { "properties": { - "dimensions": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Dimensions" + "name": { + "type": "string", + "title": "Name" }, - "values": { - "items": { - "$ref": "#/components/schemas/DimensionValue" - }, - "type": "array", - "title": "Values" + "version": { + "type": "string", + "title": "Version" }, - "cardinality": { - "type": "integer", - "title": "Cardinality" + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" } }, "type": "object", "required": [ - "dimensions", - "values", - "cardinality" + "name", + "version" ], - "title": "DimensionValues", - "description": "Dimension values" + "title": "NodeNameVersion", + "description": "Node name and version" }, - "DruidConf": { + "NodeOutput": { "properties": { - "granularity": { + "namespace": { "type": "string", - "title": "Granularity" + "title": "Namespace" }, - "intervals": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Intervals" + "node_revision_id": { + "type": "integer", + "title": "Node Revision Id" }, - "timestamp_column": { + "node_id": { + "type": "integer", + "title": "Node Id" + }, + "type": { + "$ref": "#/components/schemas/NodeType" + }, + "name": { "type": "string", - "title": "Timestamp Column" + "title": "Name" }, - "timestamp_format": { + "display_name": { "type": "string", - "title": "Timestamp Format" + "title": "Display Name" }, - "parse_spec_format": { + "version": { "type": "string", - "title": "Parse Spec Format" - } - }, - "type": "object", - "title": "DruidConf", - "description": "Druid configuration" - }, - "DruidCubeConfigInput": { - "properties": { - "spark": { - "$ref": "#/components/schemas/SparkConf" + "title": "Version" }, - "lookback_window": { + "status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode" + }, + "catalog": { + "anyOf": [ + { + "$ref": "#/components/schemas/CatalogInfo-Output" + }, + { + "type": "null" + } + ] + }, + "schema_": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schema" + }, + "table": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Table" + }, + "description": { "type": "string", - "title": "Lookback Window" + "title": "Description", + "default": "" + }, + "query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Query" + }, + "availability": { + "anyOf": [ + { + "$ref": "#/components/schemas/AvailabilityStateBase" + }, + { + "type": "null" + } + ] }, - "dimensions": { + "columns": { "items": { - "type": "string" + "$ref": "#/components/schemas/ColumnOutput" }, "type": "array", - "title": "Dimensions" + "title": "Columns" }, - "measures": { - "additionalProperties": { - "$ref": "#/components/schemas/MetricMeasures" + "updated_at": { + "type": "string", + "format": "date-time", + "title": "Updated At" + }, + "materializations": { + "items": { + "$ref": "#/components/schemas/MaterializationConfigOutput" }, - "type": "object", - "title": "Measures" + "type": "array", + "title": "Materializations" }, - "metrics": { + "parents": { "items": { - "$ref": "#/components/schemas/ColumnMetadata" + "$ref": "#/components/schemas/NodeNameOutput" }, "type": "array", - "title": "Metrics" + "title": "Parents" }, - "prefix": { - "type": "string", - "title": "Prefix", - "default": "" + "metric_metadata": { + "anyOf": [ + { + "$ref": "#/components/schemas/MetricMetadataOutput" + }, + { + "type": "null" + } + ] }, - "suffix": { - "type": "string", - "title": "Suffix", - "default": "" + "dimension_links": { + "items": { + "$ref": "#/components/schemas/LinkDimensionOutput" + }, + "type": "array", + "title": "Dimension Links" }, - "druid": { - "$ref": "#/components/schemas/DruidConf" - } - }, - "type": "object", - "title": "DruidCubeConfigInput", - "description": "Specific Druid cube materialization fields that require user input" - }, - "EditMeasure": { - "properties": { - "display_name": { + "created_at": { "type": "string", - "title": "Display Name" + "format": "date-time", + "title": "Created At" }, - "description": { - "type": "string", - "title": "Description" + "created_by": { + "$ref": "#/components/schemas/UserNameOnly" }, - "columns": { + "tags": { "items": { - "$ref": "#/components/schemas/NodeColumn" + "$ref": "#/components/schemas/TagOutput" }, "type": "array", - "title": "Columns" + "title": "Tags" }, - "additive": { - "$ref": "#/components/schemas/AggregationRule" - } - }, - "type": "object", - "title": "EditMeasure", - "description": "Editable fields on a measure" - }, - "EngineInfo": { - "properties": { - "name": { + "current_version": { "type": "string", - "title": "Name" + "title": "Current Version" }, - "version": { - "type": "string", - "title": "Version" + "missing_table": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Missing Table", + "default": false }, - "uri": { - "type": "string", - "title": "Uri" + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" }, - "dialect": { - "$ref": "#/components/schemas/Dialect" + "owners": { + "items": { + "$ref": "#/components/schemas/UserNameOnly" + }, + "type": "array", + "title": "Owners" } }, "type": "object", "required": [ - "name", - "version" - ], - "title": "EngineInfo", - "description": "Class for engine creation" - }, - "EntityType": { - "type": "string", - "enum": [ - "attribute", - "availability", - "backfill", - "catalog", - "column_attribute", - "dependency", - "engine", - "link", - "materialization", "namespace", - "node", - "partition", - "query", - "tag" - ], - "title": "EntityType", - "description": "An entity type for which activity can occur" - }, - "ErrorCode": { - "type": "integer", - "enum": [ - 0, - 1, - 2, - 100, - 101, - 102, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 300, - 301, - 302, - 400, - 401, - 402, - 403, - 500, - 501 + "node_revision_id", + "node_id", + "type", + "name", + "display_name", + "version", + "status", + "mode", + "columns", + "updated_at", + "materializations", + "parents", + "created_at", + "created_by", + "current_version" ], - "title": "ErrorCode", - "description": "Error codes." + "title": "NodeOutput", + "description": "Output for a node that shows the current revision." }, - "GenericCubeConfigInput": { + "NodeRevisionBase": { "properties": { - "spark": { - "$ref": "#/components/schemas/SparkConf" - }, - "lookback_window": { + "name": { "type": "string", - "title": "Lookback Window" - }, - "dimensions": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Dimensions" - }, - "measures": { - "additionalProperties": { - "$ref": "#/components/schemas/MetricMeasures" - }, - "type": "object", - "title": "Measures" + "title": "Name" }, - "metrics": { - "items": { - "$ref": "#/components/schemas/ColumnMetadata" - }, - "type": "array", - "title": "Metrics" - } - }, - "type": "object", - "title": "GenericCubeConfigInput", - "description": "Generic cube materialization config fields that require user input" - }, - "GenericMaterializationConfigInput": { - "properties": { - "spark": { - "$ref": "#/components/schemas/SparkConf" + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" }, - "lookback_window": { - "type": "string", - "title": "Lookback Window" - } - }, - "type": "object", - "title": "GenericMaterializationConfigInput", - "description": "User-input portions of the materialization config" - }, - "Granularity": { - "type": "string", - "enum": [ - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year" - ], - "title": "Granularity", - "description": "Time dimension granularity." - }, - "HTTPValidationError": { - "properties": { - "detail": { - "items": { - "$ref": "#/components/schemas/ValidationError" - }, - "type": "array", - "title": "Detail" + "type": { + "$ref": "#/components/schemas/NodeType" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Query" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" } }, "type": "object", - "title": "HTTPValidationError" + "required": [ + "name", + "type" + ], + "title": "NodeRevisionBase", + "description": "A base node revision." }, - "HealthCheck": { + "NodeRevisionNameVersion": { "properties": { "name": { "type": "string", "title": "Name" }, - "status": { - "$ref": "#/components/schemas/HealthcheckStatus" + "version": { + "type": "string", + "title": "Version" } }, "type": "object", "required": [ "name", - "status" - ], - "title": "HealthCheck", - "description": "A healthcheck response." - }, - "HealthcheckStatus": { - "type": "string", - "enum": [ - "ok", - "failed" + "version" ], - "title": "HealthcheckStatus", - "description": "Possible health statuses." + "title": "NodeRevisionNameVersion", + "description": "Node name and version" }, - "HistoryOutput": { + "NodeRevisionOutput": { "properties": { "id": { "type": "integer", "title": "Id" }, - "entity_type": { - "$ref": "#/components/schemas/EntityType" + "node_id": { + "type": "integer", + "title": "Node Id" }, - "entity_name": { + "type": { + "$ref": "#/components/schemas/NodeType" + }, + "name": { "type": "string", - "title": "Entity Name" + "title": "Name" }, - "node": { + "display_name": { "type": "string", - "title": "Node" + "title": "Display Name" }, - "activity_type": { - "$ref": "#/components/schemas/ActivityType" + "version": { + "type": "string", + "title": "Version" }, - "user": { + "status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode" + }, + "catalog": { + "anyOf": [ + { + "$ref": "#/components/schemas/CatalogInfo-Output" + }, + { + "type": "null" + } + ] + }, + "schema_": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schema" + }, + "table": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Table" + }, + "description": { "type": "string", - "title": "User" + "title": "Description", + "default": "" }, - "pre": { - "type": "object", - "title": "Pre" + "query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Query" }, - "post": { - "type": "object", - "title": "Post" + "availability": { + "anyOf": [ + { + "$ref": "#/components/schemas/AvailabilityStateBase" + }, + { + "type": "null" + } + ] }, - "details": { - "type": "object", - "title": "Details" + "columns": { + "items": { + "$ref": "#/components/schemas/ColumnOutput" + }, + "type": "array", + "title": "Columns" }, - "created_at": { + "updated_at": { "type": "string", "format": "date-time", - "title": "Created At" + "title": "Updated At" + }, + "materializations": { + "items": { + "$ref": "#/components/schemas/MaterializationConfigOutput" + }, + "type": "array", + "title": "Materializations" + }, + "parents": { + "items": { + "$ref": "#/components/schemas/NodeNameOutput" + }, + "type": "array", + "title": "Parents" + }, + "metric_metadata": { + "anyOf": [ + { + "$ref": "#/components/schemas/MetricMetadataOutput" + }, + { + "type": "null" + } + ] + }, + "dimension_links": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/LinkDimensionOutput" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Dimension Links" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" } }, "type": "object", "required": [ "id", - "pre", - "post", - "details", - "created_at" + "node_id", + "type", + "name", + "display_name", + "version", + "status", + "mode", + "columns", + "updated_at", + "materializations", + "parents" ], - "title": "HistoryOutput", - "description": "Output history event" + "title": "NodeRevisionOutput", + "description": "Output for a node revision with information about columns and if it is a metric." }, - "JoinCardinality": { + "NodeStatus": { "type": "string", "enum": [ - "one_to_one", - "one_to_many", - "many_to_one", - "many_to_many" + "valid", + "invalid" ], - "title": "JoinCardinality", - "description": "The version upgrade type" + "title": "NodeStatus", + "description": "Node status.\n\nA node can have one of the following statuses:\n\n1. VALID - All references to other nodes and node columns are valid\n2. INVALID - One or more parent nodes are incompatible or do not exist" }, - "JoinType": { + "NodeStatusDetails": { + "properties": { + "status": { + "$ref": "#/components/schemas/NodeStatus" + }, + "errors": { + "items": { + "$ref": "#/components/schemas/NodeValidationError" + }, + "type": "array", + "title": "Errors" + } + }, + "type": "object", + "required": [ + "status", + "errors" + ], + "title": "NodeStatusDetails", + "description": "Node status details. Contains a list of node errors or an empty list of the node status is valid" + }, + "NodeType": { "type": "string", "enum": [ - "left", - "right", - "inner", - "full", - "cross" + "source", + "transform", + "metric", + "dimension", + "cube" ], - "title": "JoinType", - "description": "Join type" + "title": "NodeType", + "description": "Node type.\n\nA node can have 4 types, currently:\n\n1. SOURCE nodes are root nodes in the DAG, and point to tables or views in a DB.\n2. TRANSFORM nodes are SQL transformations, reading from SOURCE/TRANSFORM nodes.\n3. METRIC nodes are leaves in the DAG, and have a single aggregation query.\n4. DIMENSION nodes are special SOURCE nodes that can be auto-joined with METRICS.\n5. CUBE nodes contain a reference to a set of METRICS and a set of DIMENSIONS." }, - "LineageColumn": { + "NodeValidation": { "properties": { - "column_name": { + "message": { "type": "string", - "title": "Column Name" + "title": "Message" + }, + "status": { + "$ref": "#/components/schemas/NodeStatus" }, - "node_name": { - "type": "string", - "title": "Node Name" + "dependencies": { + "items": { + "$ref": "#/components/schemas/NodeRevisionOutput" + }, + "type": "array", + "title": "Dependencies" }, - "node_type": { - "type": "string", - "title": "Node Type" + "columns": { + "items": { + "$ref": "#/components/schemas/ColumnOutput" + }, + "type": "array", + "title": "Columns" }, - "display_name": { - "type": "string", - "title": "Display Name" + "errors": { + "items": { + "$ref": "#/components/schemas/DJError" + }, + "type": "array", + "title": "Errors" }, - "lineage": { + "missing_parents": { "items": { - "$ref": "#/components/schemas/LineageColumn" + "type": "string" }, "type": "array", - "title": "Lineage" + "title": "Missing Parents" } }, "type": "object", "required": [ - "column_name" + "message", + "status", + "dependencies", + "columns", + "errors", + "missing_parents" ], - "title": "LineageColumn", - "description": "Column in lineage graph" + "title": "NodeValidation", + "description": "A validation of a provided node definition" }, - "LinkDimensionIdentifier": { + "NodeValidationError": { "properties": { - "dimension_node": { + "type": { "type": "string", - "title": "Dimension Node" + "title": "Type" }, - "role": { + "message": { "type": "string", - "title": "Role" + "title": "Message" } }, "type": "object", "required": [ - "dimension_node" + "type", + "message" ], - "title": "LinkDimensionIdentifier", - "description": "Input for linking a dimension to a node" + "title": "NodeValidationError", + "description": "Validation error" }, - "LinkDimensionInput": { + "NotificationPreferenceModel": { "properties": { - "dimension_node": { - "type": "string", - "title": "Dimension Node" + "entity_type": { + "$ref": "#/components/schemas/EntityType" }, - "join_type": { - "allOf": [ + "entity_name": { + "anyOf": [ { - "$ref": "#/components/schemas/JoinType" - } - ], - "default": "left" - }, - "join_on": { - "type": "string", - "title": "Join On" - }, - "join_cardinality": { - "allOf": [ + "type": "string" + }, { - "$ref": "#/components/schemas/JoinCardinality" + "type": "null" } ], - "default": "many_to_one" - }, - "role": { - "type": "string", - "title": "Role" - } - }, - "type": "object", - "required": [ - "dimension_node", - "join_on" - ], - "title": "LinkDimensionInput", - "description": "Input for linking a dimension to a node" - }, - "LinkDimensionOutput": { - "properties": { - "dimension": { - "$ref": "#/components/schemas/NodeNameOutput" - }, - "join_type": { - "$ref": "#/components/schemas/JoinType" + "title": "Entity Name" }, - "join_sql": { - "type": "string", - "title": "Join Sql" + "activity_types": { + "items": { + "$ref": "#/components/schemas/ActivityType" + }, + "type": "array", + "title": "Activity Types" }, - "join_cardinality": { - "$ref": "#/components/schemas/JoinCardinality" + "user_id": { + "type": "integer", + "title": "User Id" }, - "role": { + "username": { "type": "string", - "title": "Role" + "title": "Username" }, - "foreign_keys": { - "additionalProperties": { + "alert_types": { + "items": { "type": "string" }, - "type": "object", - "title": "Foreign Keys" + "type": "array", + "title": "Alert Types" } }, "type": "object", "required": [ - "dimension", - "join_type", - "join_sql", - "foreign_keys" + "entity_type", + "entity_name", + "activity_types", + "user_id", + "username", + "alert_types" ], - "title": "LinkDimensionOutput", - "description": "Input for linking a dimension to a node" + "title": "NotificationPreferenceModel" }, - "MaterializationConfigInfoUnified": { + "OAuthProvider": { + "type": "string", + "enum": [ + "basic", + "github", + "google" + ], + "title": "OAuthProvider", + "description": "Support oauth providers" + }, + "Operation": { + "type": "string", + "enum": [ + "create", + "update", + "delete", + "noop", + "unknown" + ], + "title": "Operation" + }, + "PartitionAvailability": { "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "config": { - "type": "object", - "title": "Config" - }, - "schedule": { - "type": "string", - "title": "Schedule" - }, - "job": { - "type": "string", - "title": "Job" - }, - "backfills": { - "items": { - "$ref": "#/components/schemas/BackfillOutput" - }, - "type": "array", - "title": "Backfills" + "min_temporal_partition": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Min Temporal Partition" }, - "strategy": { - "type": "string", - "title": "Strategy" + "max_temporal_partition": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Max Temporal Partition" }, - "output_tables": { + "value": { "items": { - "type": "string" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] }, "type": "array", - "title": "Output Tables" + "title": "Value" }, - "urls": { - "items": { - "type": "string", - "maxLength": 65536, - "minLength": 1, - "format": "uri" - }, - "type": "array", - "title": "Urls" + "valid_through_ts": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "title": "Valid Through Ts" } }, "type": "object", "required": [ - "config", - "schedule", - "backfills", - "output_tables", - "urls" + "value" ], - "title": "MaterializationConfigInfoUnified", - "description": "Materialization config + info" + "title": "PartitionAvailability", + "description": "Partition-level availability" }, - "MaterializationConfigOutput": { + "PartitionBackfill": { "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "config": { - "type": "object", - "title": "Config" - }, - "schedule": { - "type": "string", - "title": "Schedule" - }, - "job": { + "column_name": { "type": "string", - "title": "Job" + "title": "Column Name" }, - "backfills": { - "items": { - "$ref": "#/components/schemas/BackfillOutput" - }, - "type": "array", - "title": "Backfills" + "values": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Values" }, - "strategy": { - "type": "string", - "title": "Strategy" + "range": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Range" } }, "type": "object", "required": [ - "config", - "schedule", - "backfills" + "column_name" ], - "title": "MaterializationConfigOutput", - "description": "Output for materialization config." + "title": "PartitionBackfill", + "description": "Used for setting backfilled values" }, - "MaterializationInfo": { + "PartitionInput": { "properties": { - "output_tables": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Output Tables" + "type_": { + "$ref": "#/components/schemas/PartitionType" }, - "urls": { - "items": { - "type": "string", - "maxLength": 65536, - "minLength": 1, - "format": "uri" - }, - "type": "array", - "title": "Urls" + "granularity": { + "anyOf": [ + { + "$ref": "#/components/schemas/Granularity" + }, + { + "type": "null" + } + ] + }, + "format": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Format" } }, "type": "object", "required": [ - "output_tables", - "urls" + "type_" ], - "title": "MaterializationInfo", - "description": "The output when calling the query service's materialization\nAPI endpoint for a cube node." + "title": "PartitionInput", + "description": "Expected settings for specifying a partition column" }, - "MaterializationJobTypeEnum": { - "enum": [ - { - "name": "spark_sql", - "label": "Spark SQL", - "description": "Spark SQL materialization job", - "allowed_node_types": [ - "transform", - "dimension", - "cube" + "PartitionOutput": { + "properties": { + "type_": { + "$ref": "#/components/schemas/PartitionType" + }, + "format": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } ], - "job_class": "SparkSqlMaterializationJob" + "title": "Format" }, - { - "name": "druid_measures_cube", - "label": "Druid Measures Cube (Pre-Agg Cube)", - "description": "Used to materialize a cube's measures to Druid for low-latency access to a set of metrics and dimensions. While the logical cube definition is at the level of metrics and dimensions, this materialized Druid cube will contain measures and dimensions, with rollup configured on the measures where appropriate.", - "allowed_node_types": [ - "cube" + "granularity": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } ], - "job_class": "DruidMeasuresCubeMaterializationJob" + "title": "Granularity" }, - { - "name": "druid_metrics_cube", - "label": "Druid Metrics Cube (Post-Agg Cube)", - "description": "Used to materialize a cube of metrics and dimensions to Druid for low-latency access. The materialized cube is at the metric level, meaning that all metrics will be aggregated to the level of the cube's dimensions.", - "allowed_node_types": [ - "cube" + "expression": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } ], - "job_class": "DruidMetricsCubeMaterializationJob" + "title": "Expression" } + }, + "type": "object", + "required": [ + "type_" ], - "title": "MaterializationJobTypeEnum", - "description": "Available materialization job types" - }, - "MaterializationStrategy": { - "type": "string", - "enum": [ - "full", - "snapshot", - "snapshot_partition", - "incremental_time", - "view" - ], - "title": "MaterializationStrategy", - "description": "Materialization strategies" + "title": "PartitionOutput", + "description": "Output for partition" }, - "Measure": { + "PartitionSpec": { "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "field_name": { - "type": "string", - "title": "Field Name" + "type": { + "$ref": "#/components/schemas/PartitionType" }, - "agg": { - "type": "string", - "title": "Agg" + "granularity": { + "anyOf": [ + { + "$ref": "#/components/schemas/Granularity" + }, + { + "type": "null" + } + ] }, - "type": { - "type": "string", - "title": "Type" + "format": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Format" } }, "type": "object", "required": [ - "name", - "field_name", - "agg", "type" ], - "title": "Measure", - "description": "A measure with a simple aggregation" + "title": "PartitionSpec", + "description": "Represents a partition" }, - "MeasureOutput": { + "PartitionType": { + "type": "string", + "enum": [ + "temporal", + "categorical" + ], + "title": "PartitionType", + "description": "Partition type.\n\nA partition can be temporal or categorical" + }, + "PlanPreAggregationsRequest": { "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "display_name": { - "type": "string", - "title": "Display Name" - }, - "description": { - "type": "string", - "title": "Description" - }, - "columns": { + "metrics": { "items": { - "$ref": "#/components/schemas/datajunction_server__models__measure__ColumnOutput" + "type": "string" }, "type": "array", - "title": "Columns" - }, - "additive": { - "$ref": "#/components/schemas/AggregationRule" - } - }, - "type": "object", - "required": [ - "name", - "columns", - "additive" - ], - "title": "MeasureOutput", - "description": "Output model for measures" - }, - "Metric": { - "properties": { - "id": { - "type": "integer", - "title": "Id" - }, - "name": { - "type": "string", - "title": "Name" - }, - "display_name": { - "type": "string", - "title": "Display Name" - }, - "current_version": { - "type": "string", - "title": "Current Version" - }, - "description": { - "type": "string", - "title": "Description", - "default": "" - }, - "created_at": { - "type": "string", - "format": "date-time", - "title": "Created At" - }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Updated At" - }, - "query": { - "type": "string", - "title": "Query" - }, - "upstream_node": { - "type": "string", - "title": "Upstream Node" - }, - "expression": { - "type": "string", - "title": "Expression" + "title": "Metrics", + "description": "List of metric node names (e.g., ['default.revenue', 'default.orders'])" }, "dimensions": { "items": { - "$ref": "#/components/schemas/DimensionAttributeOutput" + "type": "string" }, "type": "array", - "title": "Dimensions" + "title": "Dimensions", + "description": "List of dimension references (e.g., ['default.date_dim.date_id'])" }, - "metric_metadata": { - "$ref": "#/components/schemas/MetricMetadataOutput" + "filters": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Filters", + "description": "Optional SQL filters to apply" + }, + "strategy": { + "anyOf": [ + { + "$ref": "#/components/schemas/MaterializationStrategy" + }, + { + "type": "null" + } + ], + "description": "Materialization strategy (FULL or INCREMENTAL_TIME)" + }, + "schedule": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schedule", + "description": "Cron expression for scheduled materialization" }, - "required_dimensions": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Required Dimensions" + "lookback_window": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Lookback Window", + "description": "Lookback window for incremental materialization (e.g., '3 days')" } }, "type": "object", "required": [ - "id", - "name", - "display_name", - "current_version", - "created_at", - "updated_at", - "query", - "upstream_node", - "expression", - "dimensions", - "required_dimensions" - ], - "title": "Metric", - "description": "Class for a metric." - }, - "MetricDirection": { - "type": "string", - "enum": [ - "higher_is_better", - "lower_is_better", - "neutral" + "metrics", + "dimensions" ], - "title": "MetricDirection", - "description": "The direction of the metric that's considered good, i.e., higher is better" + "title": "PlanPreAggregationsRequest", + "description": "Request model for planning pre-aggregations from metrics + dimensions.\n\nThis is the primary way to create pre-aggregations. DJ computes grain groups\nfrom the metrics/dimensions and creates PreAggregation records with generated SQL." }, - "MetricMeasures": { + "PlanPreAggregationsResponse": { "properties": { - "metric": { - "type": "string", - "title": "Metric" - }, - "measures": { + "preaggs": { "items": { - "$ref": "#/components/schemas/Measure" + "$ref": "#/components/schemas/PreAggregationInfo" }, "type": "array", - "title": "Measures" - }, - "combiner": { - "type": "string", - "title": "Combiner" + "title": "Preaggs" } }, "type": "object", "required": [ - "metric", - "measures", - "combiner" + "preaggs" ], - "title": "MetricMeasures", - "description": "Represent a metric as a set of measures, along with the expression for\ncombining the measures to make the metric." + "title": "PlanPreAggregationsResponse", + "description": "Response model for /preaggs/plan endpoint." }, - "MetricMetadataInput": { + "PreAggMeasure": { "properties": { - "direction": { - "$ref": "#/components/schemas/MetricDirection" + "name": { + "type": "string", + "title": "Name" }, - "unit": { + "expression": { "type": "string", - "title": "Unit" + "title": "Expression" + }, + "aggregation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Aggregation" + }, + "merge": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Merge" + }, + "rule": { + "$ref": "#/components/schemas/datajunction_server__models__decompose__AggregationRule" + }, + "expr_hash": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Expr Hash" + }, + "used_by_metrics": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/MetricRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Used By Metrics" } }, "type": "object", - "title": "MetricMetadataInput", - "description": "Metric metadata output" + "required": [ + "name", + "expression", + "aggregation", + "rule" + ], + "title": "PreAggMeasure", + "description": "A metric component stored in a pre-aggregation.\n\nExtends MetricComponent with an expression hash for identity matching.\nThis allows finding pre-aggs that contain the same measure even if\nthe component name differs." }, - "MetricMetadataOptions": { + "PreAggTableInfo": { "properties": { - "directions": { - "items": { - "$ref": "#/components/schemas/MetricDirection" - }, - "type": "array" + "table_ref": { + "type": "string", + "title": "Table Ref", + "description": "Full table reference (catalog.schema.table)" }, - "units": { + "parent_node": { + "type": "string", + "title": "Parent Node", + "description": "Parent node name this pre-agg is derived from" + }, + "grain": { "items": { - "$ref": "#/components/schemas/Unit" + "type": "string" }, "type": "array", - "title": "Units" + "title": "Grain", + "description": "Grain columns for this pre-agg" } }, "type": "object", "required": [ - "directions", - "units" + "table_ref", + "parent_node", + "grain" ], - "title": "MetricMetadataOptions", - "description": "Metric metadata options list" + "title": "PreAggTableInfo", + "description": "Information about a pre-agg table used by the cube." }, - "MetricMetadataOutput": { + "PreAggregationInfo": { "properties": { - "direction": { - "$ref": "#/components/schemas/MetricDirection" + "id": { + "type": "integer", + "title": "Id" }, - "unit": { - "$ref": "#/components/schemas/Unit" - } - }, - "type": "object", - "title": "MetricMetadataOutput", - "description": "Metric metadata output" - }, - "MutableAttributeTypeFields": { - "properties": { - "namespace": { - "type": "string", - "title": "Namespace", - "default": "system" + "node_revision_id": { + "type": "integer", + "title": "Node Revision Id" }, - "name": { + "node_name": { "type": "string", - "title": "Name" + "title": "Node Name" }, - "description": { + "node_version": { "type": "string", - "title": "Description" + "title": "Node Version" }, - "allowed_node_types": { + "grain_columns": { "items": { - "$ref": "#/components/schemas/NodeType" + "type": "string" + }, + "type": "array", + "title": "Grain Columns" + }, + "measures": { + "items": { + "$ref": "#/components/schemas/PreAggMeasure" }, - "type": "array" + "type": "array", + "title": "Measures" + }, + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/V3ColumnMetadata" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" + }, + "sql": { + "type": "string", + "title": "Sql" + }, + "grain_group_hash": { + "type": "string", + "title": "Grain Group Hash" + }, + "strategy": { + "anyOf": [ + { + "$ref": "#/components/schemas/MaterializationStrategy" + }, + { + "type": "null" + } + ] + }, + "schedule": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schedule" + }, + "lookback_window": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Lookback Window" + }, + "workflow_urls": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/WorkflowUrl" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Workflow Urls" + }, + "workflow_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Workflow Status" + }, + "status": { + "type": "string", + "title": "Status", + "default": "pending" + }, + "materialized_table_ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Materialized Table Ref" + }, + "max_partition": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Max Partition" + }, + "related_metrics": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Related Metrics" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" }, - "uniqueness_scope": { - "items": { - "$ref": "#/components/schemas/UniquenessScope" - }, - "type": "array" + "updated_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Updated At" } }, "type": "object", "required": [ - "name", - "description", - "allowed_node_types" + "id", + "node_revision_id", + "node_name", + "node_version", + "grain_columns", + "measures", + "sql", + "grain_group_hash", + "created_at" ], - "title": "MutableAttributeTypeFields", - "description": "Fields on attribute types that users can set." + "title": "PreAggregationInfo", + "description": "Response model for a pre-aggregation." }, - "NamespaceOutput": { + "PreAggregationListResponse": { "properties": { - "namespace": { - "type": "string", - "title": "Namespace" + "items": { + "items": { + "$ref": "#/components/schemas/PreAggregationInfo" + }, + "type": "array", + "title": "Items" }, - "num_nodes": { + "total": { "type": "integer", - "title": "Num Nodes" + "title": "Total" + }, + "limit": { + "type": "integer", + "title": "Limit" + }, + "offset": { + "type": "integer", + "title": "Offset" } }, "type": "object", "required": [ - "namespace", - "num_nodes" + "items", + "total", + "limit", + "offset" ], - "title": "NamespaceOutput", - "description": "Output for a namespace that includes the number of nodes" + "title": "PreAggregationListResponse", + "description": "Paginated list of pre-aggregations." }, - "NodeColumn": { + "PrincipalOutput": { "properties": { - "node": { + "username": { "type": "string", - "title": "Node" + "title": "Username" }, - "column": { - "type": "string", - "title": "Column" + "email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Email" } }, "type": "object", "required": [ - "node", - "column" + "username" ], - "title": "NodeColumn", - "description": "Defines a column on a node" + "title": "PrincipalOutput", + "description": "Output for a principal (user, service account, or group)." }, - "NodeIndexItem": { - "properties": { - "name": { - "type": "string", - "title": "Name" - }, - "display_name": { - "type": "string", - "title": "Display Name" - }, - "description": { - "type": "string", - "title": "Description" - }, - "type": { - "$ref": "#/components/schemas/NodeType" - } + "QueryResults": { + "items": { + "$ref": "#/components/schemas/StatementResults" }, - "type": "object", - "required": [ - "name", - "display_name", - "description", - "type" + "type": "array", + "title": "QueryResults", + "description": "Results for a given query." + }, + "QueryState": { + "type": "string", + "enum": [ + "UNKNOWN", + "ACCEPTED", + "SCHEDULED", + "RUNNING", + "FINISHED", + "CANCELED", + "FAILED" ], - "title": "NodeIndexItem", - "description": "Node details used for indexing purposes" + "title": "QueryState", + "description": "Different states of a query." }, - "NodeMinimumDetail": { + "QueryWithResults": { "properties": { - "name": { + "id": { "type": "string", - "title": "Name" + "title": "Id" }, - "display_name": { - "type": "string", - "title": "Display Name" + "engine_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Name" }, - "description": { - "type": "string", - "title": "Description" + "engine_version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Engine Version" }, - "version": { + "submitted_query": { "type": "string", - "title": "Version" + "title": "Submitted Query" }, - "type": { - "$ref": "#/components/schemas/NodeType" + "executed_query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Executed Query" }, - "status": { - "$ref": "#/components/schemas/NodeStatus" + "scheduled": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Scheduled" }, - "mode": { - "$ref": "#/components/schemas/NodeMode" + "started": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Started" }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Updated At" + "finished": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Finished" + }, + "state": { + "$ref": "#/components/schemas/QueryState", + "default": "UNKNOWN" + }, + "progress": { + "type": "number", + "title": "Progress", + "default": 0.0 + }, + "output_table": { + "anyOf": [ + { + "$ref": "#/components/schemas/TableRef" + }, + { + "type": "null" + } + ] + }, + "results": { + "$ref": "#/components/schemas/QueryResults" + }, + "next": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next" + }, + "previous": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Previous" + }, + "errors": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Errors", + "default": [] + }, + "links": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Links" } }, "type": "object", "required": [ - "name", - "display_name", - "description", - "version", - "type", - "status", - "mode", - "updated_at" + "id", + "submitted_query", + "results" + ], + "title": "QueryWithResults", + "description": "Model for query with results." + }, + "ResourceAction": { + "type": "string", + "enum": [ + "read", + "write", + "execute", + "delete", + "manage" ], - "title": "NodeMinimumDetail", - "description": "List of high level node details" + "title": "ResourceAction", + "description": "Actions that can be performed on resources" }, - "NodeMode": { + "ResourceType": { "type": "string", "enum": [ - "published", - "draft" + "node", + "namespace" ], - "title": "NodeMode", - "description": "Node mode.\n\nA node can be in one of the following modes:\n\n1. PUBLISHED - Must be valid and not cause any child nodes to be invalid\n2. DRAFT - Can be invalid, have invalid parents, and include dangling references" + "title": "ResourceType", + "description": "Types of resources" }, - "NodeNameOutput": { + "RoleAssignmentCreate": { "properties": { - "name": { + "principal_username": { "type": "string", - "title": "Name" + "title": "Principal Username" + }, + "expires_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Expires At" } }, "type": "object", "required": [ - "name" + "principal_username" ], - "title": "NodeNameOutput", - "description": "Node name only" + "title": "RoleAssignmentCreate", + "description": "Input for assigning a role to a principal." }, - "NodeOutput": { + "RoleAssignmentOutput": { "properties": { - "namespace": { - "type": "string", - "title": "Namespace" - }, - "node_revision_id": { - "type": "integer", - "title": "Node Revision Id" - }, - "node_id": { - "type": "integer", - "title": "Node Id" - }, - "type": { - "$ref": "#/components/schemas/NodeType" - }, - "name": { - "type": "string", - "title": "Name" - }, - "display_name": { - "type": "string", - "title": "Display Name" - }, - "version": { - "type": "string", - "title": "Version" - }, - "status": { - "$ref": "#/components/schemas/NodeStatus" - }, - "mode": { - "$ref": "#/components/schemas/NodeMode" - }, - "catalog": { - "$ref": "#/components/schemas/CatalogInfo" - }, - "schema_": { - "type": "string", - "title": "Schema " - }, - "table": { - "type": "string", - "title": "Table" - }, - "description": { - "type": "string", - "title": "Description", - "default": "" - }, - "query": { - "type": "string", - "title": "Query" - }, - "availability": { - "$ref": "#/components/schemas/AvailabilityStateBase" - }, - "columns": { - "items": { - "$ref": "#/components/schemas/datajunction_server__models__node__ColumnOutput" - }, - "type": "array", - "title": "Columns" - }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Updated At" - }, - "materializations": { - "items": { - "$ref": "#/components/schemas/MaterializationConfigOutput" - }, - "type": "array", - "title": "Materializations" - }, - "parents": { - "items": { - "$ref": "#/components/schemas/NodeNameOutput" - }, - "type": "array", - "title": "Parents" + "principal": { + "$ref": "#/components/schemas/PrincipalOutput" }, - "metric_metadata": { - "$ref": "#/components/schemas/MetricMetadataOutput" + "role": { + "$ref": "#/components/schemas/RoleOutput" }, - "dimension_links": { - "items": { - "$ref": "#/components/schemas/LinkDimensionOutput" - }, - "type": "array", - "title": "Dimension Links" + "granted_by": { + "$ref": "#/components/schemas/PrincipalOutput" }, - "created_at": { + "granted_at": { "type": "string", "format": "date-time", - "title": "Created At" - }, - "tags": { - "items": { - "$ref": "#/components/schemas/TagOutput" - }, - "type": "array", - "title": "Tags", - "default": [] - }, - "current_version": { - "type": "string", - "title": "Current Version" + "title": "Granted At" }, - "missing_table": { - "type": "boolean", - "title": "Missing Table", - "default": false + "expires_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Expires At" } }, "type": "object", "required": [ - "namespace", - "node_revision_id", - "node_id", - "type", - "name", - "display_name", - "version", - "status", - "mode", - "columns", - "updated_at", - "materializations", - "parents", - "created_at", - "current_version" + "principal", + "role", + "granted_by", + "granted_at", + "expires_at" ], - "title": "NodeOutput", - "description": "Output for a node that shows the current revision." + "title": "RoleAssignmentOutput", + "description": "Output for role assignment." }, - "NodeRevisionBase": { + "RoleCreate": { "properties": { "name": { "type": "string", + "maxLength": 255, + "minLength": 1, "title": "Name" }, - "display_name": { - "type": "string", - "title": "Display Name" - }, - "type": { - "$ref": "#/components/schemas/NodeType" - }, "description": { - "type": "string", - "title": "Description", - "default": "" - }, - "query": { - "type": "string", - "title": "Query" - }, - "mode": { - "allOf": [ + "anyOf": [ { - "$ref": "#/components/schemas/NodeMode" + "type": "string" + }, + { + "type": "null" } ], - "default": "published" + "title": "Description" + }, + "scopes": { + "items": { + "$ref": "#/components/schemas/RoleScopeInput" + }, + "type": "array", + "title": "Scopes" } }, "type": "object", "required": [ - "name", - "type" + "name" ], - "title": "NodeRevisionBase", - "description": "A base node revision." + "title": "RoleCreate", + "description": "Input for creating a role." }, - "NodeRevisionOutput": { + "RoleOutput": { "properties": { "id": { "type": "integer", "title": "Id" }, - "node_id": { - "type": "integer", - "title": "Node Id" - }, - "type": { - "$ref": "#/components/schemas/NodeType" - }, "name": { "type": "string", "title": "Name" }, - "display_name": { - "type": "string", - "title": "Display Name" - }, - "version": { - "type": "string", - "title": "Version" - }, - "status": { - "$ref": "#/components/schemas/NodeStatus" - }, - "mode": { - "$ref": "#/components/schemas/NodeMode" - }, - "catalog": { - "$ref": "#/components/schemas/CatalogInfo" - }, - "schema_": { - "type": "string", - "title": "Schema " - }, - "table": { - "type": "string", - "title": "Table" - }, "description": { - "type": "string", - "title": "Description", - "default": "" - }, - "query": { - "type": "string", - "title": "Query" - }, - "availability": { - "$ref": "#/components/schemas/AvailabilityStateBase" - }, - "columns": { - "items": { - "$ref": "#/components/schemas/datajunction_server__models__node__ColumnOutput" - }, - "type": "array", - "title": "Columns" - }, - "updated_at": { - "type": "string", - "format": "date-time", - "title": "Updated At" + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" }, - "materializations": { - "items": { - "$ref": "#/components/schemas/MaterializationConfigOutput" - }, - "type": "array", - "title": "Materializations" + "created_by": { + "$ref": "#/components/schemas/PrincipalOutput" }, - "parents": { - "items": { - "$ref": "#/components/schemas/NodeNameOutput" - }, - "type": "array", - "title": "Parents" + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At" }, - "metric_metadata": { - "$ref": "#/components/schemas/MetricMetadataOutput" + "deleted_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Deleted At" }, - "dimension_links": { + "scopes": { "items": { - "$ref": "#/components/schemas/LinkDimensionOutput" + "$ref": "#/components/schemas/RoleScopeOutput" }, "type": "array", - "title": "Dimension Links" + "title": "Scopes" } }, "type": "object", "required": [ "id", - "node_id", - "type", "name", - "display_name", - "version", - "status", - "mode", - "columns", - "updated_at", - "materializations", - "parents" - ], - "title": "NodeRevisionOutput", - "description": "Output for a node revision with information about columns and if it is a metric." - }, - "NodeStatus": { - "type": "string", - "enum": [ - "valid", - "invalid" - ], - "title": "NodeStatus", - "description": "Node status.\n\nA node can have one of the following statuses:\n\n1. VALID - All references to other nodes and node columns are valid\n2. INVALID - One or more parent nodes are incompatible or do not exist" - }, - "NodeType": { - "type": "string", - "enum": [ - "source", - "transform", - "metric", - "dimension", - "cube" + "description", + "created_by", + "created_at" ], - "title": "NodeType", - "description": "Node type.\n\nA node can have 4 types, currently:\n\n1. SOURCE nodes are root nodes in the DAG, and point to tables or views in a DB.\n2. TRANSFORM nodes are SQL transformations, reading from SOURCE/TRANSFORM nodes.\n3. METRIC nodes are leaves in the DAG, and have a single aggregation query.\n4. DIMENSION nodes are special SOURCE nodes that can be auto-joined with METRICS.\n5. CUBE nodes contain a reference to a set of METRICS and a set of DIMENSIONS." + "title": "RoleOutput", + "description": "Output for role." }, - "NodeValidation": { + "RoleScopeInput": { "properties": { - "message": { - "type": "string", - "title": "Message" - }, - "status": { - "$ref": "#/components/schemas/NodeStatus" - }, - "dependencies": { - "items": { - "$ref": "#/components/schemas/NodeRevisionOutput" - }, - "type": "array", - "title": "Dependencies" - }, - "columns": { - "items": { - "$ref": "#/components/schemas/datajunction_server__models__node__ColumnOutput" - }, - "type": "array", - "title": "Columns" + "action": { + "$ref": "#/components/schemas/ResourceAction" }, - "errors": { - "items": { - "$ref": "#/components/schemas/DJError" - }, - "type": "array", - "title": "Errors" + "scope_type": { + "$ref": "#/components/schemas/ResourceType" }, - "missing_parents": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Missing Parents" + "scope_value": { + "type": "string", + "maxLength": 500, + "title": "Scope Value" } }, "type": "object", "required": [ - "message", - "status", - "dependencies", - "columns", - "errors", - "missing_parents" + "action", + "scope_type", + "scope_value" ], - "title": "NodeValidation", - "description": "A validation of a provided node definition" + "title": "RoleScopeInput", + "description": "Input for creating a role scope." }, - "OAuthProvider": { - "type": "string", - "enum": [ - "basic", - "github", - "google" + "RoleScopeOutput": { + "properties": { + "action": { + "$ref": "#/components/schemas/ResourceAction" + }, + "scope_type": { + "$ref": "#/components/schemas/ResourceType" + }, + "scope_value": { + "type": "string", + "title": "Scope Value" + } + }, + "type": "object", + "required": [ + "action", + "scope_type", + "scope_value" ], - "title": "OAuthProvider", - "description": "Support oauth providers" + "title": "RoleScopeOutput", + "description": "Output for role scope." }, - "PartitionAvailability": { + "RoleUpdate": { "properties": { - "min_temporal_partition": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Min Temporal Partition" - }, - "max_temporal_partition": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Max Temporal Partition" + "name": { + "anyOf": [ + { + "type": "string", + "maxLength": 255, + "minLength": 1 + }, + { + "type": "null" + } + ], + "title": "Name" }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + } + }, + "type": "object", + "title": "RoleUpdate", + "description": "Input for updating a role." + }, + "RowOutput": { + "properties": { "value": { - "items": { - "type": "string" - }, - "type": "array", "title": "Value" }, - "valid_through_ts": { - "type": "integer", - "title": "Valid Through Ts" + "col": { + "type": "string", + "title": "Col" } }, "type": "object", "required": [ - "value" + "value", + "col" ], - "title": "PartitionAvailability", - "description": "Partition-level availability" + "title": "RowOutput", + "description": "Output model for node counts." }, - "PartitionBackfill": { + "ServiceAccountCreate": { "properties": { - "column_name": { + "name": { "type": "string", - "title": "Column Name" - }, - "values": { - "items": {}, - "type": "array", - "title": "Values" - }, - "range": { - "items": {}, - "type": "array", - "title": "Range" + "title": "Name" } }, "type": "object", "required": [ - "column_name" + "name" ], - "title": "PartitionBackfill", - "description": "Used for setting backfilled values" + "title": "ServiceAccountCreate", + "description": "Payload to create a service account" }, - "PartitionInput": { + "ServiceAccountCreateResponse": { "properties": { - "type_": { - "$ref": "#/components/schemas/PartitionType" + "id": { + "type": "integer", + "title": "Id" }, - "granularity": { - "$ref": "#/components/schemas/Granularity" + "name": { + "type": "string", + "title": "Name" }, - "format": { + "client_id": { "type": "string", - "title": "Format" + "title": "Client Id" + }, + "client_secret": { + "type": "string", + "title": "Client Secret" } }, "type": "object", "required": [ - "type_" + "id", + "name", + "client_id", + "client_secret" ], - "title": "PartitionInput", - "description": "Expected settings for specifying a partition column" + "title": "ServiceAccountCreateResponse", + "description": "Response payload for creating a service account" }, - "PartitionOutput": { + "ServiceAccountOutput": { "properties": { - "type_": { - "$ref": "#/components/schemas/PartitionType" + "id": { + "type": "integer", + "title": "Id" }, - "format": { + "name": { "type": "string", - "title": "Format" + "title": "Name" }, - "granularity": { + "client_id": { "type": "string", - "title": "Granularity" + "title": "Client Id" }, - "expression": { + "created_at": { "type": "string", - "title": "Expression" + "format": "date-time", + "title": "Created At" } }, "type": "object", "required": [ - "type_" - ], - "title": "PartitionOutput", - "description": "Output for partition" - }, - "PartitionType": { - "type": "string", - "enum": [ - "temporal", - "categorical" - ], - "title": "PartitionType", - "description": "Partition type.\n\nA partition can be temporal or categorical" - }, - "QueryResults": { - "items": { - "$ref": "#/components/schemas/StatementResults" - }, - "type": "array", - "title": "QueryResults", - "description": "Results for a given query." - }, - "QueryState": { - "type": "string", - "enum": [ - "UNKNOWN", - "ACCEPTED", - "SCHEDULED", - "RUNNING", - "FINISHED", - "CANCELED", - "FAILED" + "id", + "name", + "client_id", + "created_at" ], - "title": "QueryState", - "description": "Different states of a query." + "title": "ServiceAccountOutput", + "description": "Response payload for creating a service account" }, - "QueryWithResults": { + "SourceColumnOutput": { "properties": { - "id": { - "type": "string", - "title": "Id" - }, - "engine_name": { + "name": { "type": "string", - "title": "Engine Name" + "title": "Name" }, - "engine_version": { - "type": "string", - "title": "Engine Version" + "type": { + "$ref": "#/components/schemas/ColumnType" }, - "submitted_query": { - "type": "string", - "title": "Submitted Query" + "attributes": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AttributeOutput" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Attributes" }, - "executed_query": { + "dimension": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Dimension" + } + }, + "type": "object", + "required": [ + "name", + "type" + ], + "title": "SourceColumnOutput", + "description": "A column used in creation of a source node" + }, + "SourceSpec-Input": { + "properties": { + "name": { "type": "string", - "title": "Executed Query" + "title": "Name" }, - "scheduled": { - "type": "string", - "format": "date-time", - "title": "Scheduled" + "namespace": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Namespace" }, - "started": { + "node_type": { "type": "string", - "format": "date-time", - "title": "Started" + "const": "source", + "title": "Node Type", + "default": "source" }, - "finished": { - "type": "string", - "format": "date-time", - "title": "Finished" + "owners": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owners" }, - "state": { - "allOf": [ + "display_name": { + "anyOf": [ { - "$ref": "#/components/schemas/QueryState" + "type": "string" + }, + { + "type": "null" } ], - "default": "UNKNOWN" + "title": "Display Name" }, - "progress": { - "type": "number", - "title": "Progress", - "default": 0.0 + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" }, - "output_table": { - "$ref": "#/components/schemas/TableRef" + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Tags" }, - "results": { - "$ref": "#/components/schemas/QueryResults" + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" }, - "next": { - "type": "string", - "maxLength": 65536, - "minLength": 1, - "format": "uri", - "title": "Next" + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" }, - "previous": { - "type": "string", - "maxLength": 65536, - "minLength": 1, - "format": "uri", - "title": "Previous" + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnSpec-Input" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" }, - "errors": { + "dimension_links": { "items": { - "type": "string" + "oneOf": [ + { + "$ref": "#/components/schemas/DimensionJoinLinkSpec-Input" + }, + { + "$ref": "#/components/schemas/DimensionReferenceLinkSpec-Input" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "join": "#/components/schemas/DimensionJoinLinkSpec-Input", + "reference": "#/components/schemas/DimensionReferenceLinkSpec-Input" + } + } }, "type": "array", - "title": "Errors" + "title": "Dimension Links" }, - "links": { + "primary_key": { "items": { - "type": "string", - "maxLength": 65536, - "minLength": 1, - "format": "uri" + "type": "string" }, "type": "array", - "title": "Links" + "title": "Primary Key" + }, + "catalog": { + "type": "string", + "title": "Catalog" + }, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schema" + }, + "table": { + "type": "string", + "title": "Table" } }, "type": "object", "required": [ - "id", - "submitted_query", - "results", - "errors" + "name", + "catalog", + "schema", + "table" ], - "title": "QueryWithResults", - "description": "Model for query with results." + "title": "SourceSpec", + "description": "Specification for a source node" }, - "SourceColumnOutput": { + "SourceSpec-Output": { "properties": { "name": { "type": "string", "title": "Name" }, - "type": { - "$ref": "#/components/schemas/ColumnType" + "node_type": { + "type": "string", + "const": "source", + "title": "Node Type", + "default": "source" }, - "attributes": { + "owners": { "items": { - "$ref": "#/components/schemas/AttributeOutput" + "type": "string" }, "type": "array", - "title": "Attributes" + "title": "Owners" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Tags" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" + }, + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnSpec-Output" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" + }, + "dimension_links": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/DimensionJoinLinkSpec-Output" + }, + { + "$ref": "#/components/schemas/DimensionReferenceLinkSpec-Output" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "join": "#/components/schemas/DimensionJoinLinkSpec-Output", + "reference": "#/components/schemas/DimensionReferenceLinkSpec-Output" + } + } + }, + "type": "array", + "title": "Dimension Links" + }, + "primary_key": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Primary Key" + }, + "catalog": { + "type": "string", + "title": "Catalog" + }, + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schema" }, - "dimension": { + "table": { "type": "string", - "title": "Dimension" + "title": "Table" } }, "type": "object", "required": [ "name", - "type" + "catalog", + "schema", + "table" ], - "title": "SourceColumnOutput", - "description": "A column used in creation of a source node" + "title": "SourceSpec", + "description": "Specification for a source node" }, "SparkConf": { "additionalProperties": { @@ -8135,6 +20012,15 @@ "title": "StatementResults", "description": "Results for a given statement.\n\nThis contains the SQL, column names and types, and rows" }, + "Status": { + "type": "string", + "enum": [ + "success", + "failed", + "skipped" + ], + "title": "Status" + }, "TableRef": { "properties": { "catalog": { @@ -8159,37 +20045,382 @@ "title": "TableRef", "description": "Table reference" }, + "TagMinimum": { + "properties": { + "name": { + "type": "string", + "title": "Name" + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "TagMinimum", + "description": "Output tag model." + }, "TagOutput": { "properties": { "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "tag_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Tag Metadata" + }, + "name": { + "type": "string", + "title": "Name" + }, + "tag_type": { + "type": "string", + "title": "Tag Type" + } + }, + "type": "object", + "required": [ + "name", + "tag_type" + ], + "title": "TagOutput", + "description": "Output tag model." + }, + "TagSpec": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "display_name": { + "type": "string", + "title": "Display Name" + }, + "description": { + "type": "string", + "title": "Description", + "default": "" + }, + "tag_type": { + "type": "string", + "title": "Tag Type", + "default": "" + }, + "tag_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Tag Metadata" + } + }, + "type": "object", + "required": [ + "name", + "display_name" + ], + "title": "TagSpec", + "description": "Specification for a tag" + }, + "TokenResponse": { + "properties": { + "token": { + "type": "string", + "title": "Token" + }, + "token_type": { + "type": "string", + "title": "Token Type" + }, + "expires_in": { + "type": "integer", + "title": "Expires In" + } + }, + "type": "object", + "required": [ + "token", + "token_type", + "expires_in" + ], + "title": "TokenResponse", + "description": "Response payload for service account login" + }, + "TransformSpec-Input": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "namespace": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Namespace" + }, + "node_type": { + "type": "string", + "const": "transform", + "title": "Node Type", + "default": "transform" + }, + "owners": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owners" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Tags" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" + }, + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnSpec-Input" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" + }, + "dimension_links": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/DimensionJoinLinkSpec-Input" + }, + { + "$ref": "#/components/schemas/DimensionReferenceLinkSpec-Input" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "join": "#/components/schemas/DimensionJoinLinkSpec-Input", + "reference": "#/components/schemas/DimensionReferenceLinkSpec-Input" + } + } + }, + "type": "array", + "title": "Dimension Links" + }, + "primary_key": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Primary Key" + }, + "query": { + "type": "string", + "title": "Query" + } + }, + "type": "object", + "required": [ + "name", + "query" + ], + "title": "TransformSpec", + "description": "Specification for a transform node" + }, + "TransformSpec-Output": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "node_type": { "type": "string", + "const": "transform", + "title": "Node Type", + "default": "transform" + }, + "owners": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Owners" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], "title": "Description" }, - "display_name": { - "type": "string", - "title": "Display Name" + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Tags" + }, + "mode": { + "$ref": "#/components/schemas/NodeMode", + "default": "published" }, - "tag_metadata": { - "type": "object", - "title": "Tag Metadata", - "default": {} + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" }, - "name": { - "type": "string", - "title": "Name" + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnSpec-Output" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" }, - "tag_type": { + "dimension_links": { + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/DimensionJoinLinkSpec-Output" + }, + { + "$ref": "#/components/schemas/DimensionReferenceLinkSpec-Output" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "join": "#/components/schemas/DimensionJoinLinkSpec-Output", + "reference": "#/components/schemas/DimensionReferenceLinkSpec-Output" + } + } + }, + "type": "array", + "title": "Dimension Links" + }, + "primary_key": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Primary Key" + }, + "query": { "type": "string", - "title": "Tag Type" + "title": "Query" } }, "type": "object", "required": [ "name", - "tag_type" + "query" ], - "title": "TagOutput", - "description": "Output tag model." + "title": "TransformSpec", + "description": "Specification for a transform node" }, "TranslatedSQL": { "properties": { @@ -8197,21 +20428,42 @@ "type": "string", "title": "Sql" }, + "dialect": { + "anyOf": [ + { + "$ref": "#/components/schemas/Dialect" + }, + { + "type": "null" + } + ] + }, "columns": { - "items": { - "$ref": "#/components/schemas/ColumnMetadata" - }, - "type": "array", + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ColumnMetadata" + }, + "type": "array" + }, + { + "type": "null" + } + ], "title": "Columns" }, - "dialect": { - "$ref": "#/components/schemas/Dialect" - }, "upstream_tables": { - "items": { - "type": "string" - }, - "type": "array", + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], "title": "Upstream Tables" } }, @@ -8222,6 +20474,16 @@ "title": "TranslatedSQL", "description": "Class for SQL generated from a given metric." }, + "Type": { + "type": "string", + "enum": [ + "node", + "link", + "tag", + "general" + ], + "title": "Type" + }, "UniquenessScope": { "type": "string", "enum": [ @@ -8238,136 +20500,509 @@ "title": "Name" }, "label": { - "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], "title": "Label" }, - "category": { - "type": "string", - "title": "Category" + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Category" + }, + "abbreviation": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Abbreviation" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + } + }, + "type": "object", + "required": [ + "name" + ], + "title": "Unit", + "description": "Metric unit" + }, + "UpdateNode": { + "properties": { + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Description" + }, + "mode": { + "anyOf": [ + { + "$ref": "#/components/schemas/NodeMode" + }, + { + "type": "null" + } + ] + }, + "primary_key": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Primary Key" + }, + "custom_metadata": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Custom Metadata" + }, + "owners": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Owners" + }, + "catalog": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Catalog" + }, + "schema_": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schema" + }, + "table": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Table" + }, + "columns": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SourceColumnOutput" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Columns" + }, + "missing_table": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "title": "Missing Table" + }, + "query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Query" + }, + "required_dimensions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Required Dimensions" }, - "abbreviation": { - "type": "string", - "title": "Abbreviation" + "metric_metadata": { + "anyOf": [ + { + "$ref": "#/components/schemas/MetricMetadataInput" + }, + { + "type": "null" + } + ] }, - "description": { - "type": "string", - "title": "Description" - } - }, - "type": "object", - "required": [ - "name" - ], - "title": "Unit", - "description": "Metric unit" - }, - "UpdateNode": { - "properties": { "metrics": { - "items": { - "type": "string" - }, - "type": "array", + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], "title": "Metrics" }, "dimensions": { - "items": { - "type": "string" - }, - "type": "array", + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], "title": "Dimensions" }, "filters": { - "items": { - "type": "string" - }, - "type": "array", + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], "title": "Filters" }, "orderby": { - "items": { - "type": "string" - }, - "type": "array", + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], "title": "Orderby" }, "limit": { - "type": "integer", + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], "title": "Limit" - }, - "description": { + } + }, + "additionalProperties": false, + "type": "object", + "title": "UpdateNode", + "description": "Update node object where all fields are optional" + }, + "UpdatePreAggregationAvailabilityRequest": { + "properties": { + "catalog": { "type": "string", - "title": "Description" + "title": "Catalog", + "description": "Catalog where materialized table exists" }, - "mode": { - "$ref": "#/components/schemas/NodeMode" + "schema": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schema", + "description": "Schema where materialized table exists" }, - "required_dimensions": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Required Dimensions" + "table": { + "type": "string", + "title": "Table", + "description": "Table name of materialized data" }, - "metric_metadata": { - "$ref": "#/components/schemas/MetricMetadataInput" + "valid_through_ts": { + "type": "integer", + "title": "Valid Through Ts", + "description": "Timestamp (epoch) through which data is valid" }, - "query": { - "type": "string", - "title": "Query" + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Url", + "description": "URL to materialization job or dashboard" }, - "catalog": { - "type": "string", - "title": "Catalog" + "links": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Links", + "description": "Additional links related to the materialization" }, - "schema_": { - "type": "string", - "title": "Schema " + "categorical_partitions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Categorical Partitions", + "description": "Ordered list of categorical partition columns" }, - "table": { - "type": "string", - "title": "Table" + "temporal_partitions": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Temporal Partitions", + "description": "Ordered list of temporal partition columns" }, - "columns": { - "items": { - "$ref": "#/components/schemas/SourceColumnOutput" - }, - "type": "array", - "title": "Columns" + "min_temporal_partition": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Min Temporal Partition", + "description": "Minimum temporal partition value" }, - "missing_table": { - "type": "boolean", - "title": "Missing Table" + "max_temporal_partition": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Max Temporal Partition", + "description": "Maximum temporal partition value (high-water mark)" }, - "display_name": { - "type": "string", - "title": "Display Name" + "partitions": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/PartitionAvailability" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Partitions", + "description": "Detailed partition-level availability" + } + }, + "type": "object", + "required": [ + "catalog", + "table", + "valid_through_ts" + ], + "title": "UpdatePreAggregationAvailabilityRequest", + "description": "Request model for updating pre-aggregation availability." + }, + "UpdatePreAggregationConfigRequest": { + "properties": { + "strategy": { + "anyOf": [ + { + "$ref": "#/components/schemas/MaterializationStrategy" + }, + { + "type": "null" + } + ], + "description": "Materialization strategy (FULL or INCREMENTAL_TIME)" }, - "primary_key": { - "items": { - "type": "string" - }, - "type": "array", - "title": "Primary Key" + "schedule": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Schedule", + "description": "Cron expression for scheduled materialization" + }, + "lookback_window": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Lookback Window", + "description": "Lookback window for incremental materialization (e.g., '3 days')" } }, - "additionalProperties": false, "type": "object", - "title": "UpdateNode", - "description": "Update node object where all fields are optional" + "title": "UpdatePreAggregationConfigRequest", + "description": "Request model for updating a pre-aggregation's materialization config." }, "UpdateTag": { "properties": { "description": { - "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], "title": "Description" }, "display_name": { - "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], "title": "Display Name" }, "tag_metadata": { - "type": "object", + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], "title": "Tag Metadata" } }, @@ -8376,14 +21011,74 @@ "title": "UpdateTag", "description": "Update tag model. Only works on mutable fields." }, + "UpsertCubeMaterialization": { + "properties": { + "job": { + "type": "string", + "const": "druid_cube", + "title": "Job" + }, + "strategy": { + "$ref": "#/components/schemas/MaterializationStrategy", + "default": "incremental_time" + }, + "schedule": { + "type": "string", + "title": "Schedule" + }, + "config": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "null" + } + ], + "title": "Config" + }, + "lookback_window": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Lookback Window", + "default": "1 DAY" + } + }, + "type": "object", + "required": [ + "job", + "schedule" + ], + "title": "UpsertCubeMaterialization", + "description": "An upsert object for cube materializations" + }, "UpsertMaterialization": { "properties": { "name": { - "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], "title": "Name" }, "job": { - "$ref": "#/components/schemas/MaterializationJobTypeEnum" + "type": "string", + "enum": [ + "spark_sql", + "druid_measures_cube", + "druid_metrics_cube" + ], + "title": "Job" }, "config": { "anyOf": [ @@ -8395,6 +21090,9 @@ }, { "$ref": "#/components/schemas/GenericMaterializationConfigInput" + }, + { + "type": "null" } ], "title": "Config" @@ -8410,13 +21108,45 @@ "type": "object", "required": [ "job", - "config", "schedule", "strategy" ], "title": "UpsertMaterialization", "description": "An upsert object for materialization configs" }, + "UserActivity": { + "properties": { + "username": { + "type": "string", + "title": "Username" + }, + "count": { + "type": "integer", + "title": "Count" + } + }, + "type": "object", + "required": [ + "username", + "count" + ], + "title": "UserActivity", + "description": "User activity info" + }, + "UserNameOnly": { + "properties": { + "username": { + "type": "string", + "title": "Username" + } + }, + "type": "object", + "required": [ + "username" + ], + "title": "UserNameOnly", + "description": "Username only" + }, "UserOutput": { "properties": { "id": { @@ -8428,11 +21158,25 @@ "title": "Username" }, "email": { - "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], "title": "Email" }, "name": { - "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], "title": "Name" }, "oauth_provider": { @@ -8442,6 +21186,18 @@ "type": "boolean", "title": "Is Admin", "default": false + }, + "last_viewed_notifications_at": { + "anyOf": [ + { + "type": "string", + "format": "date-time" + }, + { + "type": "null" + } + ], + "title": "Last Viewed Notifications At" } }, "type": "object", @@ -8453,6 +21209,61 @@ "title": "UserOutput", "description": "User information to be included in responses" }, + "V3ColumnMetadata": { + "properties": { + "name": { + "type": "string", + "title": "Name" + }, + "type": { + "type": "string", + "title": "Type" + }, + "semantic_entity": { + "type": "string", + "title": "Semantic Entity" + }, + "semantic_type": { + "type": "string", + "title": "Semantic Type" + } + }, + "type": "object", + "required": [ + "name", + "type", + "semantic_entity", + "semantic_type" + ], + "title": "V3ColumnMetadata", + "description": "Simplified column metadata for V3 SQL endpoints.\n\nThis is a cleaner version without legacy fields (column, node) that\nV3 doesn't use. Provides clear semantic identification of output columns." + }, + "V3TranslatedSQL": { + "properties": { + "sql": { + "type": "string", + "title": "Sql" + }, + "columns": { + "items": { + "$ref": "#/components/schemas/V3ColumnMetadata" + }, + "type": "array", + "title": "Columns" + }, + "dialect": { + "$ref": "#/components/schemas/Dialect" + } + }, + "type": "object", + "required": [ + "sql", + "columns", + "dialect" + ], + "title": "V3TranslatedSQL", + "description": "SQL response model for V3 SQL generation endpoints.\n\nThis is a cleaner response model specifically for V3 that:\n- Uses V3ColumnMetadata (no legacy column/node fields)\n- Has required fields (not optional like legacy TranslatedSQL)" + }, "ValidationError": { "properties": { "loc": { @@ -8486,62 +21297,111 @@ ], "title": "ValidationError" }, - "datajunction_server__models__measure__ColumnOutput": { + "WorkflowResponse": { "properties": { - "name": { + "workflow_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Workflow Url", + "description": "URL to the scheduled workflow definition" + }, + "status": { "type": "string", - "title": "Name" + "title": "Status", + "description": "Workflow status: 'active', 'paused', or 'none'" }, - "type": { + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Message", + "description": "Additional information about the operation" + } + }, + "type": "object", + "required": [ + "status" + ], + "title": "WorkflowResponse", + "description": "Response model for workflow operations." + }, + "WorkflowUrl": { + "properties": { + "label": { "type": "string", - "title": "Type" + "title": "Label", + "description": "Label for the workflow (e.g., 'scheduled', 'backfill')" }, - "node": { + "url": { "type": "string", - "title": "Node" + "title": "Url", + "description": "URL to the workflow" } }, "type": "object", "required": [ - "name", - "type", - "node" + "label", + "url" ], - "title": "ColumnOutput", - "description": "A simplified column schema, without ID or dimensions." + "title": "WorkflowUrl", + "description": "A labeled workflow URL for scheduler-agnostic display." + }, + "datajunction_server__models__decompose__AggregationRule": { + "properties": { + "type": { + "$ref": "#/components/schemas/Aggregability", + "default": "none" + }, + "level": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Level" + } + }, + "type": "object", + "title": "AggregationRule", + "description": "The aggregation rule for the metric component.\n\nIf the Aggregability type is LIMITED, the `level` should be specified to\nhighlight the level at which the metric component needs to be aggregated\nin order to support the specified aggregation function.\n\nExample for COUNT(DISTINCT user_id):\n It can be decomposed into a single metric component with LIMITED\n aggregability, i.e., it is only aggregatable if the component is\n calculated at the `user_id` level:\n\n MetricComponent(\n name=\"num_users\",\n expression=\"DISTINCT user_id\",\n aggregation=\"COUNT\",\n rule=AggregationRule(type=LIMITED, level=[\"user_id\"])\n )" }, - "datajunction_server__models__node__ColumnOutput": { + "datajunction_server__models__measure__ColumnOutput": { "properties": { "name": { "type": "string", "title": "Name" }, - "display_name": { - "type": "string", - "title": "Display Name" - }, "type": { "type": "string", "title": "Type" }, - "attributes": { - "items": { - "$ref": "#/components/schemas/AttributeOutput" - }, - "type": "array", - "title": "Attributes" - }, - "dimension": { - "$ref": "#/components/schemas/NodeNameOutput" - }, - "partition": { - "$ref": "#/components/schemas/PartitionOutput" + "node": { + "type": "string", + "title": "Node" } }, "type": "object", "required": [ "name", - "type" + "type", + "node" ], "title": "ColumnOutput", "description": "A simplified column schema, without ID or dimensions."