From 39ea23cc1d3ab250fb5662f0866f93e97199c2de Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Thu, 31 Jul 2025 15:04:00 -0400 Subject: [PATCH 01/16] starting point for checking API state --- .../gateway-rulesets/gateway-ruleset.yaml | 11 +- .../gateway-rulesets/src/check-api-state.ts | 353 ++++++++++++++++++ 2 files changed, 363 insertions(+), 1 deletion(-) create mode 100644 packages/gateway-rulesets/src/check-api-state.ts diff --git a/packages/gateway-rulesets/gateway-ruleset.yaml b/packages/gateway-rulesets/gateway-ruleset.yaml index 8c5e65d..1e2f84c 100644 --- a/packages/gateway-rulesets/gateway-ruleset.yaml +++ b/packages/gateway-rulesets/gateway-ruleset.yaml @@ -1,6 +1,15 @@ functions: [gateway-test, - check-version-start,check-unique-id,check-version-start-order,check-path-order,check-path-documentation] + check-version-start,check-unique-id,check-version-start-order,check-path-order,check-path-documentation, check-api-state] rules: + gateway-route-api-state-documented: + message: "Invalid apiState found in documentation. Api state must match in the api spec documentation." + severity: error + given: $.sp-gateway.routes.* + then: + - function: check-api-state + functionOptions: + apiStateData: + $ref: "./src/api-state-data.json" gateway-route-must-have-required-properties: message: "Mandatory properties id, path and service must be specified" given: $.sp-gateway.routes.* diff --git a/packages/gateway-rulesets/src/check-api-state.ts b/packages/gateway-rulesets/src/check-api-state.ts new file mode 100644 index 0000000..0eb1a57 --- /dev/null +++ b/packages/gateway-rulesets/src/check-api-state.ts @@ -0,0 +1,353 @@ +import { IFunctionResult } from "@stoplight/spectral-core"; +import { createOptionalContextRulesetFunction } from "./createOptionalContextRulesetFunction.js"; + +type Route = { + path: string; + apiState?: string; + versionStart?: number; +}; + +interface ApiStateData { + [version: string]: { + [path: string]: { + [method: string]: string; // "public" | "public-preview" | etc. + }; + }; +} + +function resolveRefSync(refData: any): ApiStateData | null { + // Check if this is a $ref object + if (refData && typeof refData === "object" && refData["$ref"]) { + const refPath = refData["$ref"]; + + try { + // Try to load the referenced file synchronously + if (typeof require !== "undefined") { + const fs = require("fs"); + const path = require("path"); + + // In ES modules, __dirname is not available, so we'll use different strategies + let resolvedPath: string | undefined; + + // Try different resolution strategies + const possiblePaths = [ + // Relative to current working directory + path.resolve(process.cwd(), refPath), + // Relative to packages/gateway-rulesets (common structure) + path.resolve(process.cwd(), "packages", "gateway-rulesets", refPath), + // Assuming we're running from the gateway-rulesets directory + path.resolve(refPath), + // Assuming we're running from the parent directory + path.resolve("packages", "gateway-rulesets", refPath), + // Try without leading ./ + path.resolve(process.cwd(), refPath.replace(/^\.\//, "")), + path.resolve( + process.cwd(), + "packages", + "gateway-rulesets", + refPath.replace(/^\.\//, "") + ), + ]; + + for (const tryPath of possiblePaths) { + if (fs.existsSync(tryPath)) { + resolvedPath = tryPath; + break; + } + } + + if (!resolvedPath) { + console.error(`❌ Could not find file for $ref: ${refPath}`); + return null; + } + + const fileContent = fs.readFileSync(resolvedPath, "utf-8"); + const data = JSON.parse(fileContent); + return data; + } + } catch (error) { + console.error(`❌ Failed to resolve $ref:`, error); + } + } + + return null; +} + +function getApiStateData(contextData?: ApiStateData | any): ApiStateData { + // First check if data was passed through Spectral functionOptions + if (contextData && Object.keys(contextData).length > 0) { + // Check if this is a $ref that needs resolution + const resolvedData = resolveRefSync(contextData); + if (resolvedData) { + return resolvedData; + } + + // Check if it's already resolved data (has version keys like "2024", "2025", etc.) + const keys = Object.keys(contextData); + const hasVersionKeys = keys.some((key) => /^(beta|v3|v?\d{4})$/.test(key)); + + if (hasVersionKeys) { + return contextData as ApiStateData; + } + } + + // Fallback: Check for JSON environment variable + const apiStateMap = process?.env?.API_STATE_MAP; + + if (apiStateMap) { + try { + // Parse JSON directly (no base64 decoding) + const parsedData = JSON.parse(apiStateMap); + + return parsedData as ApiStateData; + } catch (error) { + console.error( + "❌ Failed to parse API state data from environment variable:", + error + ); + } + } else { + console.warn( + "⚠️ No API state data found — using empty fallback (all validations will be missing)" + ); + } + + // Fallback to empty data structure + return {}; +} + +// This will be initialized per function call with context data + +// Track all routes for summary +const mismatches: Array<{ path: string; issue: string; version: string }> = []; +const limitedPreviewRoutes: Array<{ path: string; version: string }> = []; +let summaryPrinted = false; + +/** + * Normalizes a path by replacing all path parameters with {param} + */ +function normalizePath(path: string): string { + return path.replace(/\{[^}]+\}/g, "{param}"); +} + +/** + * Validates a route against the API state data + */ +function validateRouteWithData( + route: Route, + apiStates: ApiStateData +): string | null { + if (!route.versionStart) { + return "Missing version information"; + } + + const versionKey = String(route.versionStart); + const versionData = apiStates[versionKey]; + + if (!versionData) { + return `No API state data for version ${versionKey}`; + } + + const normalizedRoutePath = normalizePath(route.path); + + // First check exact match + let pathData = versionData[normalizedRoutePath]; + let isPrefix = false; + + // If no exact match, check for prefix matches + if (!pathData) { + // Check if any paths in the data start with our route path (prefix matching) + for (const [dataPath, methods] of Object.entries(versionData)) { + const normalizedDataPath = normalizePath(dataPath); + if (normalizedDataPath.startsWith(normalizedRoutePath + "/")) { + pathData = methods; + isPrefix = true; + break; + } + } + } + + if (!pathData) { + return `Path not found in ${versionKey} API state data (checked both exact and prefix matches)`; + } + + // Check if any method has experimental state + const methodStates = Object.values(pathData); + const hasPublicPreview = methodStates.includes("public-preview"); + const hasPublic = methodStates.includes("public"); + const allPublic = methodStates.every((state) => state === "public"); + const allPublicPreview = methodStates.every( + (state) => state === "public-preview" + ); + + // Validate based on route's declared state + if (route.apiState === "public-preview") { + if (!hasPublicPreview && hasPublic) { + return `Path ${route.path} is marked as 'public-preview' in gateway routes but all methods are 'public' in API state data`; + } + } else if (route.apiState === "public") { + if (hasPublicPreview) { + const previewMethods = Object.entries(pathData) + .filter(([_, state]) => state === "public-preview") + .map(([method, _]) => method) + .join(", "); + return `Path ${route.path} is marked as 'public' in gateway routes but has 'public-preview' methods (${previewMethods}) in API state data`; + } + } + + return null; +} + +// Print summary on process exit (only works in Node.js environments) +if (typeof process !== "undefined" && process.on) { + process.on("beforeExit", () => { + if ( + !summaryPrinted && + (mismatches.length > 0 || limitedPreviewRoutes.length > 0) + ) { + summaryPrinted = true; + console.log("\n\n========================================"); + console.log("API STATE VALIDATION SUMMARY"); + console.log("========================================"); + console.log(`Total mismatches found: ${mismatches.length}`); + if (limitedPreviewRoutes.length > 0) { + console.log( + `Limited-preview routes found: ${limitedPreviewRoutes.length}` + ); + } + + // Count by version (including limited-preview routes) + const versionCounts = new Map(); + mismatches.forEach(({ version }) => { + versionCounts.set(version, (versionCounts.get(version) || 0) + 1); + }); + limitedPreviewRoutes.forEach(({ version }) => { + versionCounts.set(version, (versionCounts.get(version) || 0) + 1); + }); + + console.log("\nIssues by version:"); + Array.from(versionCounts.entries()) + .sort(([a], [b]) => a.localeCompare(b)) + .forEach(([version, count]) => { + console.log(` - Version ${version}: ${count} issues`); + }); + + // Group by version and issue type + const versionGroups = new Map>(); + + // Add mismatches to version groups + mismatches.forEach(({ path, issue, version }) => { + let issueType = "Other"; + if (issue.includes("not found in")) { + issueType = "Path not found in API state data"; + } else if (issue.includes("all methods are 'public'")) { + issueType = "Marked as public-preview but all methods are public"; + } else if (issue.includes("has 'public-preview' methods")) { + issueType = "Marked as public but has public-preview methods"; + } + + if (!versionGroups.has(version)) { + versionGroups.set(version, new Map()); + } + + const versionGroup = versionGroups.get(version)!; + if (!versionGroup.has(issueType)) { + versionGroup.set(issueType, []); + } + versionGroup.get(issueType)!.push(path); + }); + + // Add limited-preview routes to version groups + limitedPreviewRoutes.forEach(({ path, version }) => { + const issueType = "Limited-preview routes (should not be documented)"; + + if (!versionGroups.has(version)) { + versionGroups.set(version, new Map()); + } + + const versionGroup = versionGroups.get(version)!; + if (!versionGroup.has(issueType)) { + versionGroup.set(issueType, []); + } + versionGroup.get(issueType)!.push(path); + }); + + // Print grouped issues by version + const versions = Array.from(versionGroups.keys()).sort(); + versions.forEach((version) => { + console.log(`\n📌 Version ${version}:`); + console.log("=".repeat(20)); + + const issueGroups = versionGroups.get(version)!; + issueGroups.forEach((paths, issueType) => { + console.log(`\n ${issueType} (${paths.length} issues):`); + console.log(" " + "-".repeat(issueType.length + 15)); + + paths.forEach((path) => { + console.log(` - ${path}`); + }); + }); + }); + + console.log("\n========================================\n"); + } + }); +} + +export default createOptionalContextRulesetFunction( + { input: null, options: {} }, + ( + targetVal: Route, + options?: { specBasePath?: string; apiStateData?: ApiStateData } + ) => { + let results: IFunctionResult[] = []; + + // Priority order: functionOptions > context > environment > empty + const apiStates = getApiStateData(options?.apiStateData); + + // Handle limited-preview routes separately + if ( + targetVal.apiState === "limited-preview" && + targetVal.versionStart !== 0 + ) { + // Track limited-preview routes + limitedPreviewRoutes.push({ + path: targetVal.path, + version: String(targetVal.versionStart), + }); + + return results; + } + + if ( + targetVal.apiState !== "private" && + targetVal.apiState !== undefined && + targetVal.versionStart !== 0 + ) { + // Validate the route using the loaded API state data + const validationIssue = validateRouteWithData(targetVal, apiStates); + + if (validationIssue) { + // Extract just the key issue from the message + let shortMessage = validationIssue; + if (validationIssue.includes("not found in")) { + shortMessage = `Path not found in ${targetVal.versionStart} API state data`; + } else if (validationIssue.includes("all methods are 'public'")) { + shortMessage = `Marked as 'public-preview' but all methods are 'public'`; + } else if (validationIssue.includes("has 'public-preview' methods")) { + const match = validationIssue.match(/\(([^)]+)\)/); + const methods = match ? match[1] : "some methods"; + shortMessage = `Marked as 'public' but ${methods} are 'public-preview'`; + } + + mismatches.push({ + path: targetVal.path, + issue: validationIssue, + version: String(targetVal.versionStart), + }); + } + } + + return results; + } +); From bec39c1b15f85fd0646edc8dae56e5b2e18e798b Mon Sep 17 00:00:00 2001 From: Tyler Mairose Date: Thu, 31 Jul 2025 17:00:44 -0400 Subject: [PATCH 02/16] Return results via spectral --- .gitignore | 5 +- generateApiStateMap.js | 196 + .../gateway-rulesets/gateway-ruleset.yaml | 2 +- .../gateway-rulesets/src/api-state-data.json | 3364 +++++++++++++++++ .../gateway-rulesets/src/check-api-state.ts | 6 + packages/test-files/sp-gateway-routes.yaml | 23 +- 6 files changed, 3591 insertions(+), 5 deletions(-) create mode 100644 generateApiStateMap.js create mode 100644 packages/gateway-rulesets/src/api-state-data.json diff --git a/.gitignore b/.gitignore index c366363..ff2ba92 100644 --- a/.gitignore +++ b/.gitignore @@ -120,4 +120,7 @@ yarn.lock github-spectral-comment/node_modules github-spectral-comment/sample -api-specs/ \ No newline at end of file +api-specs/ + +packages/sailpoint-rulesets/functions/* +packages/gateway-rulesets/functions/* \ No newline at end of file diff --git a/generateApiStateMap.js b/generateApiStateMap.js new file mode 100644 index 0000000..c8c3c1c --- /dev/null +++ b/generateApiStateMap.js @@ -0,0 +1,196 @@ +import fs from "fs/promises"; +import yaml from "js-yaml"; +import path from "path"; + +/** + * Parses OpenAPI specification files and generates a structured object + * with API endpoints categorized by file name, path, method, and status + */ +class OpenAPIParser { + + /** + * Main function to process multiple OpenAPI spec files + * @param {string[]} filePaths - Array of file paths to OpenAPI spec files + * @returns {Object} Structured object with the format described + */ + async parseSpecFiles(filePaths) { + const result = {}; + + for (const filePath of filePaths) { + try { + // Extract filename without extension as the top-level key + const fileName = path.basename(filePath, path.extname(filePath)); + + // Read and parse the spec file + const specData = await this.readSpecFile(filePath); + + // Process the spec and add to result + result[fileName] = this.processSpec(specData); + + } catch (error) { + console.error(`Error processing file ${filePath}:`, error.message); + } + } + + return result; + } + + /** + * Reads and parses a spec file (supports JSON and YAML) + * @param {string} filePath - Path to the spec file + * @returns {Object} Parsed specification object + */ + async readSpecFile(filePath) { + const fileContent = await fs.readFile(filePath, 'utf8'); + const extension = path.extname(filePath).toLowerCase(); + + if (extension === '.json') { + return JSON.parse(fileContent); + } else if (extension === '.yaml' || extension === '.yml') { + return yaml.load(fileContent); + } else { + throw new Error(`Unsupported file format: ${extension}`); + } + } + + /** + * Processes a single OpenAPI specification + * @param {Object} spec - The parsed OpenAPI specification + * @returns {Object} Processed paths with methods and their status + */ + processSpec(spec) { + const result = {}; + + if (!spec.paths) { + console.warn('No paths found in specification'); + return result; + } + + // Iterate through each path in the spec + for (const [pathName, pathObj] of Object.entries(spec.paths)) { + result[pathName] = {}; + + // Iterate through each HTTP method for this path + for (const [method, methodObj] of Object.entries(pathObj)) { + // Skip non-HTTP method properties (like parameters, summary, etc.) + if (!this.isHttpMethod(method)) { + continue; + } + + // Determine if this endpoint is experimental + const status = this.determineEndpointStatus(methodObj, spec); + result[pathName][method.toUpperCase()] = status; + } + } + + return result; + } + + /** + * Determines if an endpoint is public or public-preview based on headers + * @param {Object} methodObj - The method object from the OpenAPI spec + * @param {Object} spec - The full specification (for global parameters) + * @returns {string} Either "public" or "public-preview" + */ + determineEndpointStatus(methodObj, spec) { + // Check parameters in the method itself + if (methodObj.parameters) { + for (const param of methodObj.parameters) { + if (param.name === 'X-SailPoint-Experimental' && param.in === 'header') { + return 'public-preview'; + } + } + } + + // Check global parameters if they exist + if (spec.components && spec.components.parameters) { + for (const [paramName, paramObj] of Object.entries(spec.components.parameters)) { + if (paramObj.name === 'X-SailPoint-Experimental' && paramObj.in === 'header') { + // Check if this parameter is referenced in the method + if (methodObj.parameters) { + const hasRef = methodObj.parameters.some(param => + param.$ref === `#/components/parameters/${paramName}` + ); + if (hasRef) { + return 'public-preview'; + } + } + } + } + } + + // Check if the header is defined in the operation's responses or other locations + if (this.hasExperimentalHeader(methodObj)) { + return 'public-preview'; + } + + return 'public'; + } + + /** + * Checks if an operation has the experimental header defined anywhere + * @param {Object} methodObj - The method object to check + * @returns {boolean} True if experimental header is found + */ + hasExperimentalHeader(methodObj) { + // Check in responses + if (methodObj.responses) { + for (const response of Object.values(methodObj.responses)) { + if (response.headers && response.headers['X-SailPoint-Experimental']) { + return true; + } + } + } + + // Check in request body headers (if any) + if (methodObj.requestBody && methodObj.requestBody.content) { + for (const content of Object.values(methodObj.requestBody.content)) { + if (content.schema && content.schema.properties) { + for (const prop of Object.values(content.schema.properties)) { + if (prop['X-SailPoint-Experimental'] || prop.name === 'X-SailPoint-Experimental') { + return true; + } + } + } + } + } + + return false; + } + + /** + * Checks if a string represents an HTTP method + * @param {string} method - The method string to check + * @returns {boolean} True if it's an HTTP method + */ + isHttpMethod(method) { + const httpMethods = ['get', 'post', 'put', 'delete', 'patch', 'head', 'options', 'trace']; + return httpMethods.includes(method.toLowerCase()); + } +} + +/** + * Usage example and main execution function + */ +(async () => { + try { + const parser = new OpenAPIParser(); + + // Example usage - replace with your actual file paths + const filePaths = [ + './2025.yaml', + './2024.yaml', + // Add more file paths as needed + ]; + + const result = await parser.parseSpecFiles(filePaths); + + // Output the result + // console.log(JSON.stringify(result)); + + // Optionally save to file + await fs.writeFile('api-state-data.json', JSON.stringify(result)); + } catch (error) { + console.error('Error in main execution:', error); + } +})(); \ No newline at end of file diff --git a/packages/gateway-rulesets/gateway-ruleset.yaml b/packages/gateway-rulesets/gateway-ruleset.yaml index 1e2f84c..517acee 100644 --- a/packages/gateway-rulesets/gateway-ruleset.yaml +++ b/packages/gateway-rulesets/gateway-ruleset.yaml @@ -2,7 +2,7 @@ functions: [gateway-test, check-version-start,check-unique-id,check-version-start-order,check-path-order,check-path-documentation, check-api-state] rules: gateway-route-api-state-documented: - message: "Invalid apiState found in documentation. Api state must match in the api spec documentation." + message: "{{error}}" severity: error given: $.sp-gateway.routes.* then: diff --git a/packages/gateway-rulesets/src/api-state-data.json b/packages/gateway-rulesets/src/api-state-data.json new file mode 100644 index 0000000..619f60f --- /dev/null +++ b/packages/gateway-rulesets/src/api-state-data.json @@ -0,0 +1,3364 @@ +{ + "2024": { + "/access-profiles": { + "GET": "public", + "POST": "public" + }, + "/access-profiles/{id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/access-profiles/bulk-delete": { + "POST": "public" + }, + "/access-profiles/{id}/entitlements": { + "GET": "public" + }, + "/access-requests": { + "POST": "public" + }, + "/access-requests/cancel": { + "POST": "public" + }, + "/access-requests/close": { + "POST": "public" + }, + "/access-requests/bulk-cancel": { + "POST": "public" + }, + "/access-requests/accounts-selection": { + "POST": "public" + }, + "/access-request-config": { + "GET": "public", + "PUT": "public" + }, + "/access-request-status": { + "GET": "public" + }, + "/access-request-administration": { + "GET": "public" + }, + "/access-request-approvals/pending": { + "GET": "public" + }, + "/access-request-approvals/completed": { + "GET": "public" + }, + "/access-request-approvals/{approvalId}/approve": { + "POST": "public" + }, + "/access-request-approvals/{approvalId}/reject": { + "POST": "public" + }, + "/access-request-approvals/{approvalId}/forward": { + "POST": "public" + }, + "/access-request-approvals/approval-summary": { + "GET": "public" + }, + "/access-request-approvals/bulk-approve": { + "POST": "public" + }, + "/access-request-approvals/{accessRequestId}/approvers": { + "GET": "public" + }, + "/accounts": { + "GET": "public", + "POST": "public" + }, + "/accounts/{id}": { + "GET": "public", + "PATCH": "public", + "PUT": "public", + "DELETE": "public" + }, + "/accounts/{id}/entitlements": { + "GET": "public" + }, + "/accounts/{id}/reload": { + "POST": "public" + }, + "/accounts/{id}/enable": { + "POST": "public" + }, + "/accounts/{id}/disable": { + "POST": "public" + }, + "/accounts/{id}/unlock": { + "POST": "public" + }, + "/accounts/{id}/remove": { + "POST": "public" + }, + "/account-activities": { + "GET": "public" + }, + "/account-activities/{id}": { + "GET": "public" + }, + "/account-aggregations/{id}/status": { + "GET": "public" + }, + "/auth-org/network-config": { + "GET": "public", + "POST": "public", + "PATCH": "public" + }, + "/auth-org/lockout-config": { + "GET": "public", + "PATCH": "public" + }, + "/auth-org/service-provider-config": { + "GET": "public", + "PATCH": "public" + }, + "/auth-org/session-config": { + "GET": "public", + "PATCH": "public" + }, + "/auth-users/{id}": { + "GET": "public", + "PATCH": "public" + }, + "/brandings": { + "GET": "public", + "POST": "public" + }, + "/brandings/{name}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/campaigns": { + "GET": "public", + "POST": "public" + }, + "/campaigns/{id}": { + "GET": "public", + "PATCH": "public" + }, + "/campaigns/{id}/reassign": { + "POST": "public" + }, + "/campaigns/{id}/activate": { + "POST": "public" + }, + "/campaigns/{id}/complete": { + "POST": "public" + }, + "/campaigns/delete": { + "POST": "public" + }, + "/campaigns/{id}/run-remediation-scan": { + "POST": "public" + }, + "/campaigns/{id}/reports": { + "GET": "public" + }, + "/campaigns/{id}/run-report/{type}": { + "POST": "public" + }, + "/campaigns/reports-configuration": { + "GET": "public", + "PUT": "public" + }, + "/campaign-filters": { + "POST": "public", + "GET": "public" + }, + "/campaign-filters/{id}": { + "GET": "public", + "POST": "public" + }, + "/campaign-filters/delete": { + "POST": "public" + }, + "/campaign-templates": { + "POST": "public", + "GET": "public" + }, + "/campaign-templates/{id}": { + "PATCH": "public", + "GET": "public", + "DELETE": "public" + }, + "/campaign-templates/{id}/schedule": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/campaign-templates/{id}/generate": { + "POST": "public" + }, + "/certifications": { + "GET": "public" + }, + "/certifications/{id}": { + "GET": "public" + }, + "/certifications/{id}/access-review-items": { + "GET": "public" + }, + "/certifications/{id}/decide": { + "POST": "public" + }, + "/certifications/{id}/reassign": { + "POST": "public" + }, + "/certifications/{id}/sign-off": { + "POST": "public" + }, + "/certifications/{id}/decision-summary": { + "GET": "public" + }, + "/certifications/{id}/identity-summaries": { + "GET": "public" + }, + "/certifications/{id}/access-summaries/{type}": { + "GET": "public" + }, + "/certifications/{id}/identity-summaries/{identitySummaryId}": { + "GET": "public" + }, + "/certifications/{certificationId}/access-review-items/{itemId}/permissions": { + "GET": "public" + }, + "/certifications/{id}/reviewers": { + "GET": "public" + }, + "/certifications/{id}/reassign-async": { + "POST": "public" + }, + "/certification-tasks/{id}": { + "GET": "public" + }, + "/certification-tasks": { + "GET": "public" + }, + "/connector-customizers": { + "GET": "public", + "POST": "public" + }, + "/connector-customizers/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/connector-customizers/{id}/versions": { + "POST": "public" + }, + "/configuration-hub/object-mappings/{sourceOrg}": { + "GET": "public", + "POST": "public" + }, + "/configuration-hub/object-mappings/{sourceOrg}/{objectMappingId}": { + "DELETE": "public" + }, + "/configuration-hub/object-mappings/{sourceOrg}/bulk-create": { + "POST": "public" + }, + "/configuration-hub/object-mappings/{sourceOrg}/bulk-patch": { + "POST": "public" + }, + "/configuration-hub/scheduled-actions": { + "GET": "public", + "POST": "public" + }, + "/configuration-hub/scheduled-actions/{id}": { + "PATCH": "public", + "DELETE": "public" + }, + "/configuration-hub/backups/uploads": { + "GET": "public", + "POST": "public" + }, + "/configuration-hub/backups/uploads/{id}": { + "GET": "public", + "DELETE": "public" + }, + "/configuration-hub/backups": { + "GET": "public" + }, + "/configuration-hub/backups/{id}": { + "DELETE": "public" + }, + "/configuration-hub/drafts": { + "GET": "public" + }, + "/configuration-hub/drafts/{id}": { + "DELETE": "public" + }, + "/configuration-hub/deploys": { + "GET": "public", + "POST": "public" + }, + "/configuration-hub/deploys/{id}": { + "GET": "public" + }, + "/connectors/{scriptName}": { + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/connectors": { + "GET": "public", + "POST": "public" + }, + "/connectors/{scriptName}/source-config": { + "GET": "public", + "PUT": "public" + }, + "/connectors/{scriptName}/translations/{locale}": { + "GET": "public", + "PUT": "public" + }, + "/connectors/{scriptName}/source-template": { + "GET": "public", + "PUT": "public" + }, + "/connectors/{scriptName}/correlation-config": { + "GET": "public", + "PUT": "public" + }, + "/connector-rules": { + "GET": "public", + "POST": "public" + }, + "/connector-rules/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/connector-rules/validate": { + "POST": "public" + }, + "/data-segments/membership/{identityId}": { + "GET": "public-preview" + }, + "/data-segments/user-enabled/{identityId}": { + "GET": "public-preview" + }, + "/data-segments/{segmentId}": { + "GET": "public-preview", + "POST": "public-preview", + "PATCH": "public-preview", + "DELETE": "public-preview" + }, + "/data-segments": { + "GET": "public-preview", + "POST": "public" + }, + "/identities": { + "GET": "public", + "POST": "public-preview" + }, + "/identities/{id}": { + "GET": "public", + "DELETE": "public" + }, + "/identities-accounts/{id}/enable": { + "POST": "public" + }, + "/identities-accounts/{id}/disable": { + "POST": "public" + }, + "/identities-accounts/enable": { + "POST": "public" + }, + "/identities-accounts/disable": { + "POST": "public" + }, + "/identities/{identityId}/ownership": { + "GET": "public" + }, + "/identities/{id}/reset": { + "POST": "public" + }, + "/identities/{identityId}/role-assignments": { + "GET": "public" + }, + "/identities/{identityId}/role-assignments/{assignmentId}": { + "GET": "public" + }, + "/identities/{identity-id}/set-lifecycle-state": { + "POST": "public" + }, + "/identity-profiles/{identity-profile-id}/lifecycle-states": { + "GET": "public", + "POST": "public" + }, + "/identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/identity-profiles": { + "GET": "public", + "POST": "public" + }, + "/identity-profiles/bulk-delete": { + "POST": "public" + }, + "/identity-profiles/export": { + "GET": "public" + }, + "/identity-profiles/import": { + "POST": "public" + }, + "/identity-profiles/{identity-profile-id}": { + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/identity-profiles/{identity-profile-id}/default-identity-attribute-config": { + "GET": "public" + }, + "/identity-profiles/{identity-profile-id}/process-identities": { + "POST": "public" + }, + "/managed-clients": { + "GET": "public", + "POST": "public" + }, + "/managed-clients/{id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/managed-clients/{id}/status": { + "GET": "public" + }, + "/managed-clusters": { + "GET": "public", + "POST": "public" + }, + "/managed-clusters/{id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/managed-clusters/{id}/log-config": { + "GET": "public", + "PUT": "public" + }, + "/managed-clusters/{id}/manualUpgrade": { + "POST": "public" + }, + "/managed-cluster-types": { + "GET": "public", + "POST": "public" + }, + "/managed-cluster-types/{id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/mfa/okta-verify/config": { + "GET": "public", + "PUT": "public" + }, + "/mfa/duo-web/config": { + "GET": "public", + "PUT": "public" + }, + "/mfa/kba/config": { + "GET": "public" + }, + "/mfa/kba/config/answers": { + "POST": "public" + }, + "/mfa/{method}/test": { + "GET": "public" + }, + "/multihosts": { + "POST": "public", + "GET": "public" + }, + "/multihosts/types": { + "GET": "public" + }, + "/multihosts/{multihostId}": { + "POST": "public", + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/multihosts/{multihostId}/sources/testConnection": { + "POST": "public" + }, + "/multihosts/{multihostId}/sources/{sourceId}/testConnection": { + "GET": "public" + }, + "/multihosts/{multihostId}/sources": { + "GET": "public" + }, + "/multihosts/{multiHostId}/sources/errors": { + "GET": "public" + }, + "/multihosts/{multihostId}/acctAggregationGroups": { + "GET": "public" + }, + "/multihosts/{multiHostId}/entitlementAggregationGroups": { + "GET": "public" + }, + "/non-employee-records": { + "POST": "public", + "GET": "public" + }, + "/non-employee-records/{id}": { + "GET": "public", + "PUT": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/non-employee-records/bulk-delete": { + "POST": "public" + }, + "/non-employee-requests": { + "POST": "public", + "GET": "public" + }, + "/non-employee-requests/{id}": { + "GET": "public", + "DELETE": "public" + }, + "/non-employee-requests/summary/{requested-for}": { + "GET": "public" + }, + "/non-employee-sources": { + "POST": "public", + "GET": "public" + }, + "/non-employee-sources/{sourceId}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/non-employee-sources/{id}/non-employees/download": { + "GET": "public" + }, + "/non-employee-sources/{id}/non-employee-bulk-upload": { + "POST": "public" + }, + "/non-employee-sources/{id}/non-employee-bulk-upload/status": { + "GET": "public" + }, + "/non-employee-sources/{id}/schema-attributes-template/download": { + "GET": "public" + }, + "/non-employee-approvals": { + "GET": "public" + }, + "/non-employee-approvals/{id}": { + "GET": "public" + }, + "/non-employee-approvals/{id}/approve": { + "POST": "public" + }, + "/non-employee-approvals/{id}/reject": { + "POST": "public" + }, + "/non-employee-approvals/summary/{requested-for}": { + "GET": "public" + }, + "/non-employee-sources/{sourceId}/schema-attributes": { + "GET": "public", + "POST": "public", + "DELETE": "public" + }, + "/non-employee-sources/{sourceId}/schema-attributes/{attributeId}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/oauth-clients": { + "GET": "public", + "POST": "public" + }, + "/oauth-clients/{id}": { + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/password-sync-groups": { + "GET": "public", + "POST": "public" + }, + "/password-sync-groups/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/password-policies/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/password-policies": { + "POST": "public", + "GET": "public" + }, + "/personal-access-tokens": { + "GET": "public", + "POST": "public" + }, + "/personal-access-tokens/{id}": { + "PATCH": "public", + "DELETE": "public" + }, + "/public-identities": { + "GET": "public" + }, + "/public-identities-config": { + "GET": "public", + "PUT": "public" + }, + "/requestable-objects": { + "GET": "public" + }, + "/roles": { + "GET": "public", + "POST": "public" + }, + "/roles/{id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/roles/bulk-delete": { + "POST": "public" + }, + "/roles/{id}/assigned-identities": { + "GET": "public" + }, + "/roles/{roleId}/dimensions": { + "GET": "public", + "POST": "public" + }, + "/roles/{roleId}/dimensions/{dimensionId}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/roles/{roleId}/dimensions/bulk-delete": { + "POST": "public" + }, + "/roles/{roleId}/dimensions/{dimensionId}/access-profiles": { + "GET": "public" + }, + "/roles/{roleId}/dimensions/{dimensionId}/entitlements": { + "GET": "public" + }, + "/saved-searches": { + "POST": "public", + "GET": "public" + }, + "/saved-searches/{id}": { + "PUT": "public", + "GET": "public", + "DELETE": "public" + }, + "/saved-searches/{id}/execute": { + "POST": "public" + }, + "/scheduled-searches": { + "POST": "public", + "GET": "public" + }, + "/scheduled-searches/{id}": { + "PUT": "public", + "GET": "public", + "DELETE": "public" + }, + "/scheduled-searches/{id}/unsubscribe": { + "POST": "public" + }, + "/search": { + "POST": "public" + }, + "/search/count": { + "POST": "public" + }, + "/search/aggregate": { + "POST": "public" + }, + "/search/{index}/{id}": { + "GET": "public" + }, + "/segments": { + "POST": "public", + "GET": "public" + }, + "/segments/{id}": { + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/service-desk-integrations": { + "GET": "public", + "POST": "public" + }, + "/service-desk-integrations/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/service-desk-integrations/types": { + "GET": "public" + }, + "/service-desk-integrations/templates/{scriptName}": { + "GET": "public" + }, + "/service-desk-integrations/status-check-configuration": { + "GET": "public", + "PUT": "public" + }, + "/query-password-info": { + "POST": "public" + }, + "/set-password": { + "POST": "public" + }, + "/password-change-status/{id}": { + "GET": "public" + }, + "/password-dictionary": { + "GET": "public", + "PUT": "public" + }, + "/password-org-config": { + "GET": "public", + "PUT": "public", + "POST": "public" + }, + "/reports/{taskResultId}/result": { + "GET": "public" + }, + "/reports/run": { + "POST": "public" + }, + "/reports/{id}/cancel": { + "POST": "public" + }, + "/reports/{taskResultId}": { + "GET": "public" + }, + "/sod-policies": { + "POST": "public", + "GET": "public" + }, + "/sod-policies/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/sod-policies/{id}/evaluate": { + "POST": "public" + }, + "/sod-policies/{id}/schedule": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/sod-policies/{id}/violation-report/run": { + "POST": "public" + }, + "/sod-policies/{id}/violation-report": { + "GET": "public" + }, + "/sod-policies/sod-violation-report-status/{reportResultId}": { + "GET": "public" + }, + "/sod-violations/predict": { + "POST": "public" + }, + "/sod-violations/check": { + "POST": "public" + }, + "/sod-violation-report/run": { + "POST": "public" + }, + "/sod-violation-report": { + "GET": "public" + }, + "/sod-violation-report/{reportResultId}/download": { + "GET": "public" + }, + "/sod-violation-report/{reportResultId}/download/{fileName}": { + "GET": "public" + }, + "/sources": { + "GET": "public", + "POST": "public" + }, + "/sources/{id}": { + "GET": "public", + "PUT": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/provisioning-policies": { + "GET": "public", + "POST": "public" + }, + "/sources/{sourceId}/provisioning-policies/{usageType}": { + "GET": "public", + "PUT": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/provisioning-policies/bulk-update": { + "POST": "public" + }, + "/sources/{sourceId}/schemas": { + "GET": "public", + "POST": "public" + }, + "/sources/{sourceId}/schedules": { + "GET": "public", + "POST": "public" + }, + "/sources/{sourceId}/schedules/{scheduleType}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/schemas/{schemaId}": { + "GET": "public", + "PUT": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/source-health": { + "GET": "public" + }, + "/sources/{id}/schemas/accounts": { + "GET": "public", + "POST": "public" + }, + "/sources/{id}/schemas/entitlements": { + "GET": "public", + "POST": "public" + }, + "/sources/{sourceId}/upload-connector-file": { + "POST": "public" + }, + "/sources/{sourceId}/connections": { + "GET": "public" + }, + "/sources/{id}/correlation-config": { + "GET": "public", + "PUT": "public" + }, + "/sources/{sourceId}/password-policies": { + "PATCH": "public" + }, + "/sources/{sourceId}/connector/check-connection": { + "POST": "public" + }, + "/sources/{sourceId}/connector/peek-resource-objects": { + "POST": "public" + }, + "/sources/{sourceId}/connector/ping-cluster": { + "POST": "public" + }, + "/sources/{sourceId}/connector/test-configuration": { + "POST": "public" + }, + "/sources/{id}/connectors/source-config": { + "GET": "public" + }, + "/sources/{sourceId}/native-change-detection-config": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/sources/{id}/remove-accounts": { + "POST": "public" + }, + "/sources/{id}/load-accounts": { + "POST": "public" + }, + "/sources/{id}/load-uncorrelated-accounts": { + "POST": "public" + }, + "/tagged-objects": { + "GET": "public", + "POST": "public" + }, + "/tagged-objects/{type}": { + "GET": "public" + }, + "/tagged-objects/{type}/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/tagged-objects/bulk-add": { + "POST": "public" + }, + "/tagged-objects/bulk-remove": { + "POST": "public" + }, + "/transforms": { + "GET": "public", + "POST": "public" + }, + "/transforms/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/work-items": { + "GET": "public" + }, + "/work-items/completed": { + "GET": "public" + }, + "/work-items/count": { + "GET": "public" + }, + "/work-items/completed/count": { + "GET": "public-preview" + }, + "/work-items/summary": { + "GET": "public" + }, + "/work-items/{id}": { + "GET": "public", + "POST": "public" + }, + "/work-items/{id}/approve/{approvalItemId}": { + "POST": "public" + }, + "/work-items/{id}/reject/{approvalItemId}": { + "POST": "public" + }, + "/work-items/bulk-approve/{id}": { + "POST": "public" + }, + "/work-items/bulk-reject/{id}": { + "POST": "public" + }, + "/work-items/{id}/submit-account-selection": { + "POST": "public" + }, + "/workflows": { + "GET": "public", + "POST": "public" + }, + "/workflows/{id}": { + "GET": "public", + "PUT": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/workflows/{id}/test": { + "POST": "public" + }, + "/workflows/{id}/executions": { + "GET": "public" + }, + "/workflow-executions/{id}": { + "GET": "public" + }, + "/workflow-executions/{id}/history": { + "GET": "public" + }, + "/workflow-executions/{id}/cancel": { + "POST": "public" + }, + "/workflow-library": { + "GET": "public" + }, + "/workflow-library/actions": { + "GET": "public" + }, + "/workflow-library/triggers": { + "GET": "public" + }, + "/workflow-library/operators": { + "GET": "public" + }, + "/workflows/{id}/external/oauth-clients": { + "POST": "public" + }, + "/workflows/execute/external/{id}": { + "POST": "public" + }, + "/workflows/execute/external/{id}/test": { + "POST": "public" + }, + "/source-usages/{sourceId}/status": { + "GET": "public" + }, + "/source-usages/{sourceId}/summaries": { + "GET": "public" + }, + "/account-usages/{accountId}/summaries": { + "GET": "public" + }, + "/identity-profiles/identity-preview": { + "POST": "public-preview" + }, + "/work-items/{id}/forward": { + "POST": "public-preview" + }, + "/accounts/search-attribute-config": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/accounts/search-attribute-config/{name}": { + "GET": "public-preview", + "DELETE": "public-preview", + "PATCH": "public-preview" + }, + "/access-model-metadata/attributes": { + "GET": "public" + }, + "/access-model-metadata/attributes/{key}": { + "GET": "public" + }, + "/access-model-metadata/attributes/{key}/values": { + "GET": "public" + }, + "/access-model-metadata/attributes/{key}/values/{value}": { + "GET": "public" + }, + "/access-profiles/bulk-update-requestable": { + "POST": "public-preview" + }, + "/ai-access-request-recommendations": { + "GET": "public-preview" + }, + "/ai-access-request-recommendations/config": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/ai-access-request-recommendations/ignored-items": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/ai-access-request-recommendations/requested-items": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/ai-access-request-recommendations/viewed-items": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/ai-access-request-recommendations/viewed-items/bulk-create": { + "POST": "public-preview" + }, + "/auth-profiles": { + "GET": "public-preview" + }, + "/auth-profiles/{id}": { + "GET": "public-preview", + "PATCH": "public-preview" + }, + "/custom-password-instructions": { + "POST": "public-preview" + }, + "/custom-password-instructions/{pageId}": { + "GET": "public-preview", + "DELETE": "public-preview" + }, + "/entitlements": { + "GET": "public" + }, + "/entitlements/{id}": { + "GET": "public", + "PATCH": "public" + }, + "/entitlements/{id}/parents": { + "GET": "public" + }, + "/entitlements/{id}/children": { + "GET": "public" + }, + "/entitlements/bulk-update": { + "POST": "public" + }, + "/entitlements/{id}/entitlement-request-config": { + "GET": "public", + "PUT": "public" + }, + "/entitlements/reset/sources/{id}": { + "POST": "public" + }, + "/entitlements/{id}/access-model-metadata/{attributeKey}/values/{attributeValue}": { + "POST": "public", + "DELETE": "public" + }, + "/entitlements/aggregate/sources/{id}": { + "POST": "public" + }, + "/generate-password-reset-token/digit": { + "POST": "public-preview" + }, + "/historical-identities": { + "GET": "public-preview" + }, + "/historical-identities/{id}": { + "GET": "public-preview" + }, + "/historical-identities/{id}/access-items": { + "GET": "public-preview" + }, + "/historical-identities/{id}/snapshots": { + "GET": "public-preview" + }, + "/historical-identities/{id}/snapshot-summary": { + "GET": "public-preview" + }, + "/historical-identities/{id}/snapshots/{date}": { + "GET": "public-preview" + }, + "/historical-identities/{id}/snapshots/{date}/access-items": { + "GET": "public-preview" + }, + "/common-access": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/common-access/update-status": { + "POST": "public-preview" + }, + "/historical-identities/{id}/events": { + "GET": "public-preview" + }, + "/historical-identities/{id}/start-date": { + "GET": "public-preview" + }, + "/historical-identities/{id}/compare": { + "GET": "public-preview" + }, + "/historical-identities/{id}/compare/{access-type}": { + "GET": "public-preview" + }, + "/identities/{identityId}/synchronize-attributes": { + "POST": "public-preview" + }, + "/identities/invite": { + "POST": "public" + }, + "/identities/{id}/verification/account/send": { + "POST": "public-preview" + }, + "/identities/process": { + "POST": "public-preview" + }, + "/identity-attributes": { + "GET": "public", + "POST": "public" + }, + "/identity-attributes/{name}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/identity-attributes/bulk-delete": { + "DELETE": "public" + }, + "/mail-from-attributes": { + "PUT": "public-preview" + }, + "/mail-from-attributes/{identity}": { + "GET": "public-preview" + }, + "/generic-approvals": { + "GET": "public-preview" + }, + "/generic-approvals/{id}": { + "GET": "public-preview" + }, + "/machine-accounts": { + "GET": "public-preview" + }, + "/machine-accounts/{id}": { + "GET": "public-preview", + "PATCH": "public-preview" + }, + "/sources/{sourceId}/machine-classification-config": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/machine-account-mappings": { + "GET": "public", + "POST": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/machine-mappings": { + "PUT": "public" + }, + "/accounts/{id}/classify": { + "POST": "public" + }, + "/machine-identities": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/machine-identities/{id}": { + "GET": "public-preview", + "PATCH": "public-preview", + "DELETE": "public-preview" + }, + "/notification-template-defaults": { + "GET": "public-preview" + }, + "/notification-templates": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/notification-templates/{id}": { + "GET": "public-preview" + }, + "/notification-templates/bulk-delete": { + "POST": "public-preview" + }, + "/org-config": { + "GET": "public-preview", + "PATCH": "public-preview" + }, + "/org-config/valid-time-zones": { + "GET": "public-preview" + }, + "/outlier-summaries": { + "GET": "public-preview" + }, + "/outlier-summaries/latest": { + "GET": "public-preview" + }, + "/outliers": { + "GET": "public-preview" + }, + "/outliers/{outlierId}/contributing-features": { + "GET": "public-preview" + }, + "/outliers/{outlierId}/feature-details/{contributingFeatureName}/access-items": { + "GET": "public-preview" + }, + "/outliers/ignore": { + "POST": "public-preview" + }, + "/outliers/unignore": { + "POST": "public-preview" + }, + "/outliers/export": { + "GET": "public-preview" + }, + "/outlier-feature-summaries/{outlierFeatureId}": { + "GET": "public-preview" + }, + "/peer-group-strategies/{strategy}/identity-outliers": { + "GET": "public-preview" + }, + "/notification-template-context": { + "GET": "public-preview" + }, + "/notification-preferences/{key}": { + "GET": "public-preview" + }, + "/reassignment-configurations/types": { + "GET": "public-preview" + }, + "/reassignment-configurations": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/reassignment-configurations/{identityId}": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/reassignment-configurations/{identityId}/{configType}": { + "DELETE": "public-preview" + }, + "/reassignment-configurations/{identityId}/evaluate/{configType}": { + "GET": "public-preview" + }, + "/reassignment-configurations/tenant-config": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/recommendations/request": { + "POST": "public-preview" + }, + "/recommendations/config": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/role-insights/requests": { + "POST": "public-preview" + }, + "/role-insights/requests/{id}": { + "GET": "public-preview" + }, + "/role-insights/summary": { + "GET": "public-preview" + }, + "/role-insights": { + "GET": "public-preview" + }, + "/role-insights/{insightId}": { + "GET": "public-preview" + }, + "/role-insights/{insightId}/entitlement-changes": { + "GET": "public-preview" + }, + "/role-insights/{insightId}/entitlement-changes/download": { + "GET": "public-preview" + }, + "/role-insights/{insightId}/current-entitlements": { + "GET": "public-preview" + }, + "/role-insights/{insightId}/entitlement-changes/{entitlementId}/identities": { + "GET": "public-preview" + }, + "/role-mining-sessions": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}": { + "PATCH": "public-preview", + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/status": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-role-summaries": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}": { + "GET": "public-preview", + "PATCH": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}/applications": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}/entitlements": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularities": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularity-distribution": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/edit-entitlements": { + "POST": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/identities": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async": { + "POST": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}/download": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/provision": { + "POST": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/excluded-entitlements": { + "GET": "public-preview" + }, + "/role-mining-potential-roles": { + "GET": "public-preview" + }, + "/role-mining-potential-roles/{potentialRoleId}": { + "GET": "public-preview", + "PATCH": "public-preview" + }, + "/role-mining-potential-roles/saved": { + "GET": "public-preview" + }, + "/role-mining-potential-roles/{potentialRoleId}/sources/{sourceId}/identityUsage": { + "GET": "public-preview" + }, + "/roles/{id}/entitlements": { + "GET": "public-preview" + }, + "/send-test-notification": { + "POST": "public-preview" + }, + "/sim-integrations/{id}": { + "PUT": "public-preview", + "GET": "public-preview", + "DELETE": "public-preview", + "PATCH": "public-preview" + }, + "/sim-integrations/{id}/beforeProvisioningRule": { + "PATCH": "public-preview" + }, + "/sim-integrations": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/sp-config/export": { + "POST": "public" + }, + "/sp-config/export/{id}": { + "GET": "public" + }, + "/sp-config/export/{id}/download": { + "GET": "public" + }, + "/sp-config/import": { + "POST": "public" + }, + "/sp-config/import/{id}": { + "GET": "public" + }, + "/sp-config/import/{id}/download": { + "GET": "public" + }, + "/sp-config/config-objects": { + "GET": "public" + }, + "/sources/{id}/attribute-sync-config": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/sources/{id}/synchronize-attributes": { + "POST": "public-preview" + }, + "/sources/{id}/entitlement-request-config": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/sources/{sourceId}/load-entitlements": { + "POST": "public" + }, + "/task-status/{id}": { + "GET": "public", + "PATCH": "public" + }, + "/task-status": { + "GET": "public" + }, + "/task-status/pending-tasks": { + "GET": "public", + "HEAD": "public" + }, + "/tenant": { + "GET": "public" + }, + "/tenant-context": { + "GET": "public-preview", + "PATCH": "public-preview" + }, + "/triggers": { + "GET": "public-preview" + }, + "/trigger-subscriptions": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/trigger-subscriptions/{id}": { + "PUT": "public-preview", + "PATCH": "public-preview", + "DELETE": "public-preview" + }, + "/trigger-subscriptions/validate-filter": { + "POST": "public-preview" + }, + "/trigger-invocations/status": { + "GET": "public-preview" + }, + "/trigger-invocations/{id}/complete": { + "POST": "public-preview" + }, + "/trigger-invocations/test": { + "POST": "public-preview" + }, + "/ui-metadata/tenant": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/verified-from-addresses": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/verified-from-addresses/{id}": { + "DELETE": "public-preview" + }, + "/verified-domains": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/workgroups": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/workgroups/{id}": { + "GET": "public-preview", + "DELETE": "public-preview", + "PATCH": "public-preview" + }, + "/workgroups/bulk-delete": { + "POST": "public-preview" + }, + "/workgroups/{workgroupId}/connections": { + "GET": "public-preview" + }, + "/workgroups/{workgroupId}/members": { + "GET": "public-preview" + }, + "/workgroups/{workgroupId}/members/bulk-add": { + "POST": "public-preview" + }, + "/workgroups/{workgroupId}/members/bulk-delete": { + "POST": "public-preview" + }, + "/form-definitions": { + "GET": "public", + "POST": "public" + }, + "/form-definitions/{formDefinitionID}": { + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/form-definitions/{formDefinitionID}/data-source": { + "POST": "public" + }, + "/form-definitions/export": { + "GET": "public" + }, + "/form-definitions/forms-action-dynamic-schema": { + "POST": "public" + }, + "/form-definitions/import": { + "POST": "public" + }, + "/form-definitions/{formDefinitionID}/upload": { + "POST": "public" + }, + "/form-definitions/{formDefinitionID}/file/{fileID}": { + "GET": "public" + }, + "/form-instances": { + "GET": "public", + "POST": "public" + }, + "/form-instances/{formInstanceID}": { + "GET": "public", + "PATCH": "public" + }, + "/form-instances/{formInstanceID}/data-source/{formElementID}": { + "GET": "public" + }, + "/form-instances/{formInstanceID}/file/{fileID}": { + "GET": "public" + }, + "/form-definitions/predefined-select-options": { + "GET": "public" + }, + "/access-request-identity-metrics/{identityId}/requested-objects/{requestedObjectId}/type/{type}": { + "GET": "public" + }, + "/icons/{objectType}/{objectId}": { + "PUT": "public-preview", + "DELETE": "public-preview" + }, + "/suggested-entitlement-description-batches/{batchId}/stats": { + "GET": "public" + }, + "/suggested-entitlement-description-batches": { + "GET": "public", + "POST": "public" + }, + "/suggested-entitlement-description-approvals": { + "POST": "public" + }, + "/suggested-entitlement-description-assignments": { + "POST": "public" + }, + "/suggested-entitlement-descriptions": { + "GET": "public", + "PATCH": "public" + }, + "/discovered-applications": { + "GET": "public" + }, + "/manual-discover-applications-template": { + "GET": "public" + }, + "/manual-discover-applications": { + "POST": "public" + }, + "/vendor-connector-mappings": { + "GET": "public", + "POST": "public", + "DELETE": "public" + }, + "/source-apps/{id}": { + "GET": "public-preview", + "PATCH": "public-preview", + "DELETE": "public-preview" + }, + "/source-apps/bulk-update": { + "POST": "public-preview" + }, + "/source-apps/assigned": { + "GET": "public-preview" + }, + "/source-apps": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/source-apps/all": { + "GET": "public-preview" + }, + "/source-apps/{id}/access-profiles": { + "GET": "public-preview" + }, + "/source-apps/{id}/access-profiles/bulk-remove": { + "POST": "public-preview" + }, + "/user-apps/{id}": { + "PATCH": "public-preview" + }, + "/user-apps/{id}/available-accounts": { + "GET": "public-preview" + }, + "/user-apps": { + "GET": "public-preview" + }, + "/user-apps/all": { + "GET": "public-preview" + }, + "/roles/{id}/access-model-metadata/{attributeKey}/values/{attributeValue}": { + "POST": "public", + "DELETE": "public" + }, + "/roles/access-model-metadata/bulk-update/ids": { + "POST": "public" + }, + "/roles/access-model-metadata/bulk-update/filter": { + "POST": "public" + }, + "/roles/access-model-metadata/bulk-update/query": { + "POST": "public" + }, + "/roles/access-model-metadata/bulk-update/id": { + "GET": "public" + }, + "/roles/access-model-metadata/bulk-update": { + "GET": "public" + }, + "/roles/filter": { + "POST": "public" + } + }, + "2025": { + "/access-profiles": { + "GET": "public", + "POST": "public" + }, + "/access-profiles/{id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/access-profiles/bulk-delete": { + "POST": "public" + }, + "/access-profiles/{id}/entitlements": { + "GET": "public" + }, + "/access-requests": { + "POST": "public" + }, + "/access-requests/cancel": { + "POST": "public" + }, + "/access-requests/close": { + "POST": "public" + }, + "/access-requests/bulk-cancel": { + "POST": "public" + }, + "/access-requests/accounts-selection": { + "POST": "public" + }, + "/access-request-config": { + "GET": "public", + "PUT": "public" + }, + "/access-request-status": { + "GET": "public" + }, + "/access-request-administration": { + "GET": "public" + }, + "/access-request-approvals/pending": { + "GET": "public" + }, + "/access-request-approvals/completed": { + "GET": "public" + }, + "/access-request-approvals/{approvalId}/approve": { + "POST": "public" + }, + "/access-request-approvals/{approvalId}/reject": { + "POST": "public" + }, + "/access-request-approvals/{approvalId}/forward": { + "POST": "public" + }, + "/access-request-approvals/approval-summary": { + "GET": "public" + }, + "/access-request-approvals/bulk-approve": { + "POST": "public" + }, + "/access-request-approvals/{accessRequestId}/approvers": { + "GET": "public" + }, + "/accounts": { + "GET": "public", + "POST": "public" + }, + "/accounts/{id}": { + "GET": "public", + "PATCH": "public", + "PUT": "public", + "DELETE": "public" + }, + "/accounts/{id}/entitlements": { + "GET": "public" + }, + "/accounts/{id}/reload": { + "POST": "public" + }, + "/accounts/{id}/enable": { + "POST": "public" + }, + "/accounts/{id}/disable": { + "POST": "public" + }, + "/accounts/{id}/unlock": { + "POST": "public" + }, + "/accounts/{id}/remove": { + "POST": "public" + }, + "/account-activities": { + "GET": "public" + }, + "/account-activities/{id}": { + "GET": "public" + }, + "/account-aggregations/{id}/status": { + "GET": "public" + }, + "/auth-org/network-config": { + "GET": "public", + "POST": "public", + "PATCH": "public" + }, + "/auth-org/lockout-config": { + "GET": "public", + "PATCH": "public" + }, + "/auth-org/service-provider-config": { + "GET": "public", + "PATCH": "public" + }, + "/auth-org/session-config": { + "GET": "public", + "PATCH": "public" + }, + "/auth-users/{id}": { + "GET": "public", + "PATCH": "public" + }, + "/brandings": { + "GET": "public", + "POST": "public" + }, + "/brandings/{name}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/campaigns": { + "GET": "public", + "POST": "public" + }, + "/campaigns/{id}": { + "GET": "public", + "PATCH": "public" + }, + "/campaigns/{id}/reassign": { + "POST": "public" + }, + "/campaigns/{id}/activate": { + "POST": "public" + }, + "/campaigns/{id}/complete": { + "POST": "public" + }, + "/campaigns/delete": { + "POST": "public" + }, + "/campaigns/{id}/run-remediation-scan": { + "POST": "public" + }, + "/campaigns/{id}/reports": { + "GET": "public" + }, + "/campaigns/{id}/run-report/{type}": { + "POST": "public" + }, + "/campaigns/reports-configuration": { + "GET": "public", + "PUT": "public" + }, + "/campaign-filters": { + "POST": "public", + "GET": "public" + }, + "/campaign-filters/{id}": { + "GET": "public", + "POST": "public" + }, + "/campaign-filters/delete": { + "POST": "public" + }, + "/campaign-templates": { + "POST": "public", + "GET": "public" + }, + "/campaign-templates/{id}": { + "PATCH": "public", + "GET": "public", + "DELETE": "public" + }, + "/campaign-templates/{id}/schedule": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/campaign-templates/{id}/generate": { + "POST": "public" + }, + "/certifications": { + "GET": "public" + }, + "/certifications/{id}": { + "GET": "public" + }, + "/certifications/{id}/access-review-items": { + "GET": "public" + }, + "/certifications/{id}/decide": { + "POST": "public" + }, + "/certifications/{id}/reassign": { + "POST": "public" + }, + "/certifications/{id}/sign-off": { + "POST": "public" + }, + "/certifications/{id}/decision-summary": { + "GET": "public" + }, + "/certifications/{id}/identity-summaries": { + "GET": "public" + }, + "/certifications/{id}/access-summaries/{type}": { + "GET": "public" + }, + "/certifications/{id}/identity-summaries/{identitySummaryId}": { + "GET": "public" + }, + "/certifications/{certificationId}/access-review-items/{itemId}/permissions": { + "GET": "public" + }, + "/certifications/{id}/reviewers": { + "GET": "public" + }, + "/certifications/{id}/reassign-async": { + "POST": "public" + }, + "/certification-tasks/{id}": { + "GET": "public" + }, + "/certification-tasks": { + "GET": "public" + }, + "/connector-customizers": { + "GET": "public", + "POST": "public" + }, + "/connector-customizers/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/connector-customizers/{id}/versions": { + "POST": "public" + }, + "/configuration-hub/object-mappings/{sourceOrg}": { + "GET": "public", + "POST": "public" + }, + "/configuration-hub/object-mappings/{sourceOrg}/{objectMappingId}": { + "DELETE": "public" + }, + "/configuration-hub/object-mappings/{sourceOrg}/bulk-create": { + "POST": "public" + }, + "/configuration-hub/object-mappings/{sourceOrg}/bulk-patch": { + "POST": "public" + }, + "/configuration-hub/scheduled-actions": { + "GET": "public", + "POST": "public" + }, + "/configuration-hub/scheduled-actions/{id}": { + "PATCH": "public", + "DELETE": "public" + }, + "/configuration-hub/backups/uploads": { + "GET": "public", + "POST": "public" + }, + "/configuration-hub/backups/uploads/{id}": { + "GET": "public", + "DELETE": "public" + }, + "/configuration-hub/backups": { + "GET": "public" + }, + "/configuration-hub/backups/{id}": { + "DELETE": "public" + }, + "/configuration-hub/drafts": { + "GET": "public" + }, + "/configuration-hub/drafts/{id}": { + "DELETE": "public" + }, + "/configuration-hub/deploys": { + "GET": "public", + "POST": "public" + }, + "/configuration-hub/deploys/{id}": { + "GET": "public" + }, + "/connectors/{scriptName}": { + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/connectors": { + "GET": "public", + "POST": "public" + }, + "/connectors/{scriptName}/source-config": { + "GET": "public", + "PUT": "public" + }, + "/connectors/{scriptName}/translations/{locale}": { + "GET": "public", + "PUT": "public" + }, + "/connectors/{scriptName}/source-template": { + "GET": "public", + "PUT": "public" + }, + "/connectors/{scriptName}/correlation-config": { + "GET": "public", + "PUT": "public" + }, + "/connector-rules": { + "GET": "public", + "POST": "public" + }, + "/connector-rules/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/connector-rules/validate": { + "POST": "public" + }, + "/data-segments/membership/{identityId}": { + "GET": "public-preview" + }, + "/data-segments/user-enabled/{identityId}": { + "GET": "public-preview" + }, + "/data-segments/{segmentId}": { + "GET": "public-preview", + "POST": "public-preview", + "PATCH": "public-preview", + "DELETE": "public-preview" + }, + "/data-segments": { + "GET": "public-preview", + "POST": "public" + }, + "/identities": { + "GET": "public" + }, + "/identities/{id}": { + "GET": "public", + "DELETE": "public-preview" + }, + "/identities-accounts/{id}/enable": { + "POST": "public" + }, + "/identities-accounts/{id}/disable": { + "POST": "public" + }, + "/identities-accounts/enable": { + "POST": "public" + }, + "/identities-accounts/disable": { + "POST": "public" + }, + "/identities/{identityId}/ownership": { + "GET": "public" + }, + "/identities/{id}/reset": { + "POST": "public" + }, + "/identities/{identityId}/role-assignments": { + "GET": "public" + }, + "/identities/{identityId}/role-assignments/{assignmentId}": { + "GET": "public" + }, + "/identities/{identity-id}/set-lifecycle-state": { + "POST": "public" + }, + "/identity-profiles/{identity-profile-id}/lifecycle-states": { + "GET": "public", + "POST": "public" + }, + "/identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/identity-profiles": { + "GET": "public", + "POST": "public" + }, + "/identity-profiles/bulk-delete": { + "POST": "public" + }, + "/identity-profiles/export": { + "GET": "public" + }, + "/identity-profiles/import": { + "POST": "public" + }, + "/identity-profiles/{identity-profile-id}": { + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/identity-profiles/{identity-profile-id}/default-identity-attribute-config": { + "GET": "public" + }, + "/identity-profiles/{identity-profile-id}/process-identities": { + "POST": "public" + }, + "/managed-clients": { + "GET": "public", + "POST": "public" + }, + "/managed-clients/{id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/managed-clients/{id}/status": { + "GET": "public" + }, + "/managed-clusters": { + "GET": "public", + "POST": "public" + }, + "/managed-clusters/{id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/managed-clusters/{id}/log-config": { + "GET": "public", + "PUT": "public" + }, + "/managed-clusters/{id}/manualUpgrade": { + "POST": "public" + }, + "/managed-cluster-types": { + "GET": "public", + "POST": "public" + }, + "/managed-cluster-types/{id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/mfa/okta-verify/config": { + "GET": "public", + "PUT": "public" + }, + "/mfa/duo-web/config": { + "GET": "public", + "PUT": "public" + }, + "/mfa/kba/config": { + "GET": "public" + }, + "/mfa/kba/config/answers": { + "POST": "public" + }, + "/mfa/{method}/test": { + "GET": "public" + }, + "/multihosts": { + "POST": "public", + "GET": "public" + }, + "/multihosts/types": { + "GET": "public" + }, + "/multihosts/{multihostId}": { + "POST": "public", + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/multihosts/{multihostId}/sources/testConnection": { + "POST": "public" + }, + "/multihosts/{multihostId}/sources/{sourceId}/testConnection": { + "GET": "public" + }, + "/multihosts/{multihostId}/sources": { + "GET": "public" + }, + "/multihosts/{multiHostId}/sources/errors": { + "GET": "public" + }, + "/multihosts/{multihostId}/acctAggregationGroups": { + "GET": "public" + }, + "/multihosts/{multiHostId}/entitlementAggregationGroups": { + "GET": "public" + }, + "/non-employee-records": { + "POST": "public", + "GET": "public" + }, + "/non-employee-records/{id}": { + "GET": "public", + "PUT": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/non-employee-records/bulk-delete": { + "POST": "public" + }, + "/non-employee-requests": { + "POST": "public", + "GET": "public" + }, + "/non-employee-requests/{id}": { + "GET": "public", + "DELETE": "public" + }, + "/non-employee-requests/summary/{requested-for}": { + "GET": "public" + }, + "/non-employee-sources": { + "POST": "public", + "GET": "public" + }, + "/non-employee-sources/{sourceId}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/non-employee-sources/{id}/non-employees/download": { + "GET": "public" + }, + "/non-employee-sources/{id}/non-employee-bulk-upload": { + "POST": "public" + }, + "/non-employee-sources/{id}/non-employee-bulk-upload/status": { + "GET": "public" + }, + "/non-employee-sources/{id}/schema-attributes-template/download": { + "GET": "public" + }, + "/non-employee-approvals": { + "GET": "public" + }, + "/non-employee-approvals/{id}": { + "GET": "public" + }, + "/non-employee-approvals/{id}/approve": { + "POST": "public" + }, + "/non-employee-approvals/{id}/reject": { + "POST": "public" + }, + "/non-employee-approvals/summary/{requested-for}": { + "GET": "public" + }, + "/non-employee-sources/{sourceId}/schema-attributes": { + "GET": "public", + "POST": "public", + "DELETE": "public" + }, + "/non-employee-sources/{sourceId}/schema-attributes/{attributeId}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/oauth-clients": { + "GET": "public", + "POST": "public" + }, + "/oauth-clients/{id}": { + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/password-sync-groups": { + "GET": "public", + "POST": "public" + }, + "/password-sync-groups/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/password-policies/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/password-policies": { + "POST": "public", + "GET": "public" + }, + "/personal-access-tokens": { + "GET": "public", + "POST": "public" + }, + "/personal-access-tokens/{id}": { + "PATCH": "public", + "DELETE": "public" + }, + "/public-identities": { + "GET": "public" + }, + "/public-identities-config": { + "GET": "public", + "PUT": "public" + }, + "/requestable-objects": { + "GET": "public" + }, + "/revocable-objects": { + "GET": "public-preview" + }, + "/roles": { + "GET": "public", + "POST": "public" + }, + "/roles/{id}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/roles/bulk-delete": { + "POST": "public" + }, + "/roles/{id}/assigned-identities": { + "GET": "public" + }, + "/roles/{roleId}/dimensions": { + "GET": "public", + "POST": "public" + }, + "/roles/{roleId}/dimensions/{dimensionId}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/roles/{roleId}/dimensions/bulk-delete": { + "POST": "public" + }, + "/roles/{roleId}/dimensions/{dimensionId}/access-profiles": { + "GET": "public" + }, + "/roles/{roleId}/dimensions/{dimensionId}/entitlements": { + "GET": "public" + }, + "/saved-searches": { + "POST": "public", + "GET": "public" + }, + "/saved-searches/{id}": { + "PUT": "public", + "GET": "public", + "DELETE": "public" + }, + "/saved-searches/{id}/execute": { + "POST": "public" + }, + "/scheduled-searches": { + "POST": "public", + "GET": "public" + }, + "/scheduled-searches/{id}": { + "PUT": "public", + "GET": "public", + "DELETE": "public" + }, + "/scheduled-searches/{id}/unsubscribe": { + "POST": "public" + }, + "/search": { + "POST": "public" + }, + "/search/count": { + "POST": "public" + }, + "/search/aggregate": { + "POST": "public" + }, + "/search/{index}/{id}": { + "GET": "public" + }, + "/segments": { + "POST": "public", + "GET": "public" + }, + "/segments/{id}": { + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/service-desk-integrations": { + "GET": "public", + "POST": "public" + }, + "/service-desk-integrations/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/service-desk-integrations/types": { + "GET": "public" + }, + "/service-desk-integrations/templates/{scriptName}": { + "GET": "public" + }, + "/service-desk-integrations/status-check-configuration": { + "GET": "public", + "PUT": "public" + }, + "/query-password-info": { + "POST": "public" + }, + "/set-password": { + "POST": "public" + }, + "/password-change-status/{id}": { + "GET": "public" + }, + "/password-dictionary": { + "GET": "public", + "PUT": "public" + }, + "/password-org-config": { + "GET": "public", + "PUT": "public", + "POST": "public" + }, + "/reports/{taskResultId}/result": { + "GET": "public" + }, + "/reports/run": { + "POST": "public" + }, + "/reports/{id}/cancel": { + "POST": "public" + }, + "/reports/{taskResultId}": { + "GET": "public" + }, + "/sod-policies": { + "POST": "public", + "GET": "public" + }, + "/sod-policies/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/sod-policies/{id}/evaluate": { + "POST": "public" + }, + "/sod-policies/{id}/schedule": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/sod-policies/{id}/violation-report/run": { + "POST": "public" + }, + "/sod-policies/{id}/violation-report": { + "GET": "public" + }, + "/sod-policies/sod-violation-report-status/{reportResultId}": { + "GET": "public" + }, + "/sod-violations/predict": { + "POST": "public" + }, + "/sod-violations/check": { + "POST": "public" + }, + "/sod-violation-report/run": { + "POST": "public" + }, + "/sod-violation-report": { + "GET": "public" + }, + "/sod-violation-report/{reportResultId}/download": { + "GET": "public" + }, + "/sod-violation-report/{reportResultId}/download/{fileName}": { + "GET": "public" + }, + "/sources": { + "GET": "public", + "POST": "public" + }, + "/sources/{id}": { + "GET": "public", + "PUT": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/provisioning-policies": { + "GET": "public", + "POST": "public" + }, + "/sources/{sourceId}/provisioning-policies/{usageType}": { + "GET": "public", + "PUT": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/provisioning-policies/bulk-update": { + "POST": "public" + }, + "/sources/{sourceId}/schemas": { + "GET": "public", + "POST": "public" + }, + "/sources/{sourceId}/schedules": { + "GET": "public", + "POST": "public" + }, + "/sources/{sourceId}/schedules/{scheduleType}": { + "GET": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/schemas/{schemaId}": { + "GET": "public", + "PUT": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/source-health": { + "GET": "public" + }, + "/sources/{id}/schemas/accounts": { + "GET": "public", + "POST": "public" + }, + "/sources/{id}/schemas/entitlements": { + "GET": "public", + "POST": "public" + }, + "/sources/{sourceId}/upload-connector-file": { + "POST": "public" + }, + "/sources/{sourceId}/connections": { + "GET": "public" + }, + "/sources/{id}/correlation-config": { + "GET": "public", + "PUT": "public" + }, + "/sources/{sourceId}/password-policies": { + "PATCH": "public" + }, + "/sources/{sourceId}/connector/check-connection": { + "POST": "public" + }, + "/sources/{sourceId}/connector/peek-resource-objects": { + "POST": "public" + }, + "/sources/{sourceId}/connector/ping-cluster": { + "POST": "public" + }, + "/sources/{sourceId}/connector/test-configuration": { + "POST": "public" + }, + "/sources/{id}/connectors/source-config": { + "GET": "public" + }, + "/sources/{sourceId}/native-change-detection-config": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/sources/{id}/remove-accounts": { + "POST": "public" + }, + "/sources/{id}/load-accounts": { + "POST": "public" + }, + "/sources/{id}/load-uncorrelated-accounts": { + "POST": "public" + }, + "/tagged-objects": { + "GET": "public", + "POST": "public" + }, + "/tagged-objects/{type}": { + "GET": "public" + }, + "/tagged-objects/{type}/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/tagged-objects/bulk-add": { + "POST": "public" + }, + "/tagged-objects/bulk-remove": { + "POST": "public" + }, + "/transforms": { + "GET": "public", + "POST": "public" + }, + "/transforms/{id}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/work-items": { + "GET": "public" + }, + "/work-items/completed": { + "GET": "public" + }, + "/work-items/count": { + "GET": "public" + }, + "/work-items/completed/count": { + "GET": "public-preview" + }, + "/work-items/summary": { + "GET": "public" + }, + "/work-items/{id}": { + "GET": "public", + "POST": "public" + }, + "/work-items/{id}/approve/{approvalItemId}": { + "POST": "public" + }, + "/work-items/{id}/reject/{approvalItemId}": { + "POST": "public" + }, + "/work-items/bulk-approve/{id}": { + "POST": "public" + }, + "/work-items/bulk-reject/{id}": { + "POST": "public" + }, + "/work-items/{id}/submit-account-selection": { + "POST": "public" + }, + "/workflows": { + "GET": "public", + "POST": "public" + }, + "/workflows/{id}": { + "GET": "public", + "PUT": "public", + "PATCH": "public", + "DELETE": "public" + }, + "/workflows/{id}/test": { + "POST": "public" + }, + "/workflows/{id}/executions": { + "GET": "public" + }, + "/workflow-executions/{id}": { + "GET": "public" + }, + "/workflow-executions/{id}/history": { + "GET": "public" + }, + "/workflow-executions/{id}/cancel": { + "POST": "public" + }, + "/workflow-library": { + "GET": "public" + }, + "/workflow-library/actions": { + "GET": "public" + }, + "/workflow-library/triggers": { + "GET": "public" + }, + "/workflow-library/operators": { + "GET": "public" + }, + "/workflows/{id}/external/oauth-clients": { + "POST": "public" + }, + "/workflows/execute/external/{id}": { + "POST": "public" + }, + "/workflows/execute/external/{id}/test": { + "POST": "public" + }, + "/source-usages/{sourceId}/status": { + "GET": "public" + }, + "/source-usages/{sourceId}/summaries": { + "GET": "public" + }, + "/account-usages/{accountId}/summaries": { + "GET": "public" + }, + "/identity-profiles/identity-preview": { + "POST": "public-preview" + }, + "/work-items/{id}/forward": { + "POST": "public-preview" + }, + "/accounts/search-attribute-config": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/accounts/search-attribute-config/{name}": { + "GET": "public-preview", + "DELETE": "public-preview", + "PATCH": "public-preview" + }, + "/access-model-metadata/attributes": { + "GET": "public" + }, + "/access-model-metadata/attributes/{key}": { + "GET": "public" + }, + "/access-model-metadata/attributes/{key}/values": { + "GET": "public" + }, + "/access-model-metadata/attributes/{key}/values/{value}": { + "GET": "public" + }, + "/access-model-metadata/bulk-update/filter": { + "POST": "public" + }, + "/access-model-metadata/bulk-update/query": { + "POST": "public" + }, + "/access-model-metadata/bulk-update/ids": { + "POST": "public" + }, + "/access-profiles/bulk-update-requestable": { + "POST": "public-preview" + }, + "/ai-access-request-recommendations": { + "GET": "public-preview" + }, + "/ai-access-request-recommendations/config": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/ai-access-request-recommendations/ignored-items": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/ai-access-request-recommendations/requested-items": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/ai-access-request-recommendations/viewed-items": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/ai-access-request-recommendations/viewed-items/bulk-create": { + "POST": "public-preview" + }, + "/authorization/custom-user-levels": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/authorization/custom-user-levels/{id}/publish": { + "POST": "public-preview" + }, + "/authorization/custom-user-levels/{id}": { + "GET": "public-preview", + "DELETE": "public-preview", + "PATCH": "public-preview" + }, + "/authorization/authorization-assignable-right-sets": { + "GET": "public-preview" + }, + "/auth-profiles": { + "GET": "public-preview" + }, + "/auth-profiles/{id}": { + "GET": "public-preview", + "PATCH": "public-preview" + }, + "/custom-password-instructions": { + "POST": "public-preview" + }, + "/custom-password-instructions/{pageId}": { + "GET": "public-preview", + "DELETE": "public-preview" + }, + "/entitlements": { + "GET": "public" + }, + "/entitlements/{id}": { + "GET": "public", + "PATCH": "public" + }, + "/entitlements/{id}/parents": { + "GET": "public" + }, + "/entitlements/{id}/children": { + "GET": "public" + }, + "/entitlements/bulk-update": { + "POST": "public" + }, + "/entitlements/{id}/entitlement-request-config": { + "GET": "public", + "PUT": "public" + }, + "/entitlements/reset/sources/{id}": { + "POST": "public" + }, + "/entitlements/{id}/access-model-metadata/{attributeKey}/values/{attributeValue}": { + "POST": "public", + "DELETE": "public" + }, + "/entitlements/aggregate/sources/{id}": { + "POST": "public" + }, + "/entitlements/identities/{id}/entitlements": { + "GET": "public" + }, + "/generate-password-reset-token/digit": { + "POST": "public-preview" + }, + "/historical-identities": { + "GET": "public-preview" + }, + "/historical-identities/{id}": { + "GET": "public-preview" + }, + "/historical-identities/{id}/access-items": { + "GET": "public-preview" + }, + "/historical-identities/{id}/snapshots": { + "GET": "public-preview" + }, + "/historical-identities/{id}/snapshot-summary": { + "GET": "public-preview" + }, + "/historical-identities/{id}/snapshots/{date}": { + "GET": "public-preview" + }, + "/historical-identities/{id}/snapshots/{date}/access-items": { + "GET": "public-preview" + }, + "/common-access": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/common-access/update-status": { + "POST": "public-preview" + }, + "/historical-identities/{id}/events": { + "GET": "public-preview" + }, + "/historical-identities/{id}/start-date": { + "GET": "public-preview" + }, + "/historical-identities/{id}/compare": { + "GET": "public-preview" + }, + "/historical-identities/{id}/compare/{access-type}": { + "GET": "public-preview" + }, + "/identities/{identityId}/synchronize-attributes": { + "POST": "public-preview" + }, + "/identities/invite": { + "POST": "public" + }, + "/identities/{id}/verification/account/send": { + "POST": "public-preview" + }, + "/identities/process": { + "POST": "public-preview" + }, + "/identity-attributes": { + "GET": "public", + "POST": "public" + }, + "/identity-attributes/{name}": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/identity-attributes/bulk-delete": { + "DELETE": "public" + }, + "/mail-from-attributes": { + "PUT": "public-preview" + }, + "/mail-from-attributes/{identity}": { + "GET": "public-preview" + }, + "/generic-approvals": { + "GET": "public-preview" + }, + "/generic-approvals/{id}": { + "GET": "public-preview" + }, + "/machine-accounts": { + "GET": "public-preview" + }, + "/machine-accounts/{id}": { + "GET": "public-preview", + "PATCH": "public-preview" + }, + "/sources/{sourceId}/machine-classification-config": { + "GET": "public", + "PUT": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/machine-account-mappings": { + "GET": "public", + "POST": "public", + "DELETE": "public" + }, + "/sources/{sourceId}/machine-mappings": { + "PUT": "public" + }, + "/sources/{sourceId}/classify": { + "POST": "public", + "DELETE": "public", + "GET": "public" + }, + "/accounts/{id}/classify": { + "POST": "public" + }, + "/machine-identities": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/machine-identities/{id}": { + "GET": "public-preview", + "PATCH": "public-preview", + "DELETE": "public-preview" + }, + "/notification-template-defaults": { + "GET": "public-preview" + }, + "/notification-templates": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/notification-templates/{id}": { + "GET": "public-preview" + }, + "/notification-templates/bulk-delete": { + "POST": "public-preview" + }, + "/org-config": { + "GET": "public", + "PATCH": "public" + }, + "/org-config/valid-time-zones": { + "GET": "public-preview" + }, + "/outlier-summaries": { + "GET": "public-preview" + }, + "/outlier-summaries/latest": { + "GET": "public-preview" + }, + "/outliers": { + "GET": "public-preview" + }, + "/outliers/{outlierId}/contributing-features": { + "GET": "public-preview" + }, + "/outliers/{outlierId}/feature-details/{contributingFeatureName}/access-items": { + "GET": "public-preview" + }, + "/outliers/ignore": { + "POST": "public-preview" + }, + "/outliers/unignore": { + "POST": "public-preview" + }, + "/outliers/export": { + "GET": "public-preview" + }, + "/outlier-feature-summaries/{outlierFeatureId}": { + "GET": "public-preview" + }, + "/peer-group-strategies/{strategy}/identity-outliers": { + "GET": "public-preview" + }, + "/notification-template-context": { + "GET": "public-preview" + }, + "/notification-preferences/{key}": { + "GET": "public-preview" + }, + "/reassignment-configurations/types": { + "GET": "public-preview" + }, + "/reassignment-configurations": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/reassignment-configurations/{identityId}": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/reassignment-configurations/{identityId}/{configType}": { + "DELETE": "public-preview" + }, + "/reassignment-configurations/{identityId}/evaluate/{configType}": { + "GET": "public-preview" + }, + "/reassignment-configurations/tenant-config": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/recommendations/request": { + "POST": "public-preview" + }, + "/recommendations/config": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/role-insights/requests": { + "POST": "public-preview" + }, + "/role-insights/requests/{id}": { + "GET": "public-preview" + }, + "/role-insights/summary": { + "GET": "public-preview" + }, + "/role-insights": { + "GET": "public-preview" + }, + "/role-insights/{insightId}": { + "GET": "public-preview" + }, + "/role-insights/{insightId}/entitlement-changes": { + "GET": "public-preview" + }, + "/role-insights/{insightId}/entitlement-changes/download": { + "GET": "public-preview" + }, + "/role-insights/{insightId}/current-entitlements": { + "GET": "public-preview" + }, + "/role-insights/{insightId}/entitlement-changes/{entitlementId}/identities": { + "GET": "public-preview" + }, + "/role-mining-sessions": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}": { + "PATCH": "public-preview", + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/status": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-role-summaries": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}": { + "GET": "public-preview", + "PATCH": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}/applications": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}/entitlements": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularities": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularity-distribution": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/edit-entitlements": { + "POST": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/identities": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async": { + "POST": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}/download": { + "GET": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/provision": { + "POST": "public-preview" + }, + "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/excluded-entitlements": { + "GET": "public-preview" + }, + "/role-mining-potential-roles": { + "GET": "public-preview" + }, + "/role-mining-potential-roles/{potentialRoleId}": { + "GET": "public-preview", + "PATCH": "public-preview" + }, + "/role-mining-potential-roles/saved": { + "GET": "public-preview" + }, + "/role-mining-potential-roles/{potentialRoleId}/sources/{sourceId}/identityUsage": { + "GET": "public-preview" + }, + "/roles/{id}/entitlements": { + "GET": "public-preview" + }, + "/send-test-notification": { + "POST": "public-preview" + }, + "/sim-integrations/{id}": { + "PUT": "public-preview", + "GET": "public-preview", + "DELETE": "public-preview", + "PATCH": "public-preview" + }, + "/sim-integrations/{id}/beforeProvisioningRule": { + "PATCH": "public-preview" + }, + "/sim-integrations": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/sp-config/export": { + "POST": "public" + }, + "/sp-config/export/{id}": { + "GET": "public" + }, + "/sp-config/export/{id}/download": { + "GET": "public" + }, + "/sp-config/import": { + "POST": "public" + }, + "/sp-config/import/{id}": { + "GET": "public" + }, + "/sp-config/import/{id}/download": { + "GET": "public" + }, + "/sp-config/config-objects": { + "GET": "public" + }, + "/sources/{id}/attribute-sync-config": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/sources/{id}/synchronize-attributes": { + "POST": "public-preview" + }, + "/sources/{id}/entitlement-request-config": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/sources/{sourceId}/load-entitlements": { + "POST": "public" + }, + "/task-status/{id}": { + "GET": "public", + "PATCH": "public" + }, + "/task-status": { + "GET": "public" + }, + "/task-status/pending-tasks": { + "GET": "public", + "HEAD": "public" + }, + "/tenant": { + "GET": "public" + }, + "/tenant-context": { + "GET": "public-preview", + "PATCH": "public-preview" + }, + "/triggers": { + "GET": "public-preview" + }, + "/trigger-subscriptions": { + "POST": "public-preview", + "GET": "public-preview" + }, + "/trigger-subscriptions/{id}": { + "PUT": "public-preview", + "PATCH": "public-preview", + "DELETE": "public-preview" + }, + "/trigger-subscriptions/validate-filter": { + "POST": "public-preview" + }, + "/trigger-invocations/status": { + "GET": "public-preview" + }, + "/trigger-invocations/{id}/complete": { + "POST": "public-preview" + }, + "/trigger-invocations/test": { + "POST": "public-preview" + }, + "/ui-metadata/tenant": { + "GET": "public-preview", + "PUT": "public-preview" + }, + "/verified-from-addresses": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/verified-from-addresses/{id}": { + "DELETE": "public-preview" + }, + "/verified-domains": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/workgroups": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/workgroups/{id}": { + "GET": "public-preview", + "DELETE": "public-preview", + "PATCH": "public-preview" + }, + "/workgroups/bulk-delete": { + "POST": "public-preview" + }, + "/workgroups/{workgroupId}/connections": { + "GET": "public-preview" + }, + "/workgroups/{workgroupId}/members": { + "GET": "public-preview" + }, + "/workgroups/{workgroupId}/members/bulk-add": { + "POST": "public-preview" + }, + "/workgroups/{workgroupId}/members/bulk-delete": { + "POST": "public-preview" + }, + "/form-definitions": { + "GET": "public", + "POST": "public" + }, + "/form-definitions/{formDefinitionID}": { + "GET": "public", + "DELETE": "public", + "PATCH": "public" + }, + "/form-definitions/{formDefinitionID}/data-source": { + "POST": "public" + }, + "/form-definitions/export": { + "GET": "public" + }, + "/form-definitions/forms-action-dynamic-schema": { + "POST": "public" + }, + "/form-definitions/import": { + "POST": "public" + }, + "/form-definitions/{formDefinitionID}/upload": { + "POST": "public" + }, + "/form-definitions/{formDefinitionID}/file/{fileID}": { + "GET": "public" + }, + "/form-instances": { + "GET": "public", + "POST": "public" + }, + "/form-instances/{formInstanceID}": { + "GET": "public", + "PATCH": "public" + }, + "/form-instances/{formInstanceID}/data-source/{formElementID}": { + "GET": "public" + }, + "/form-instances/{formInstanceID}/file/{fileID}": { + "GET": "public" + }, + "/form-definitions/predefined-select-options": { + "GET": "public" + }, + "/access-request-identity-metrics/{identityId}/requested-objects/{requestedObjectId}/type/{type}": { + "GET": "public" + }, + "/icons/{objectType}/{objectId}": { + "PUT": "public-preview", + "DELETE": "public-preview" + }, + "/suggested-entitlement-description-batches/{batchId}/stats": { + "GET": "public" + }, + "/suggested-entitlement-description-batches": { + "GET": "public", + "POST": "public" + }, + "/suggested-entitlement-description-approvals": { + "POST": "public" + }, + "/suggested-entitlement-description-assignments": { + "POST": "public" + }, + "/suggested-entitlement-descriptions": { + "GET": "public", + "PATCH": "public" + }, + "/discovered-applications": { + "GET": "public" + }, + "/manual-discover-applications-template": { + "GET": "public" + }, + "/manual-discover-applications": { + "POST": "public" + }, + "/vendor-connector-mappings": { + "GET": "public", + "POST": "public", + "DELETE": "public" + }, + "/source-apps/{id}": { + "GET": "public-preview", + "PATCH": "public-preview", + "DELETE": "public-preview" + }, + "/source-apps/bulk-update": { + "POST": "public-preview" + }, + "/source-apps/assigned": { + "GET": "public-preview" + }, + "/source-apps": { + "GET": "public-preview", + "POST": "public-preview" + }, + "/source-apps/all": { + "GET": "public-preview" + }, + "/source-apps/{id}/access-profiles": { + "GET": "public-preview" + }, + "/source-apps/{id}/access-profiles/bulk-remove": { + "POST": "public-preview" + }, + "/user-apps/{id}": { + "PATCH": "public-preview" + }, + "/user-apps/{id}/available-accounts": { + "GET": "public-preview" + }, + "/user-apps": { + "GET": "public-preview" + }, + "/user-apps/all": { + "GET": "public-preview" + }, + "/roles/{id}/access-model-metadata/{attributeKey}/values/{attributeValue}": { + "POST": "public", + "DELETE": "public" + }, + "/roles/access-model-metadata/bulk-update/ids": { + "POST": "public" + }, + "/roles/access-model-metadata/bulk-update/filter": { + "POST": "public" + }, + "/roles/access-model-metadata/bulk-update/query": { + "POST": "public" + }, + "/roles/access-model-metadata/bulk-update/id": { + "GET": "public" + }, + "/roles/access-model-metadata/bulk-update": { + "GET": "public" + }, + "/roles/filter": { + "POST": "public" + } + } +} \ No newline at end of file diff --git a/packages/gateway-rulesets/src/check-api-state.ts b/packages/gateway-rulesets/src/check-api-state.ts index 0eb1a57..792f4c2 100644 --- a/packages/gateway-rulesets/src/check-api-state.ts +++ b/packages/gateway-rulesets/src/check-api-state.ts @@ -300,6 +300,9 @@ export default createOptionalContextRulesetFunction( targetVal: Route, options?: { specBasePath?: string; apiStateData?: ApiStateData } ) => { + + console.log("\nRunning API state validation for:", targetVal.path); + let results: IFunctionResult[] = []; // Priority order: functionOptions > context > environment > empty @@ -328,6 +331,9 @@ export default createOptionalContextRulesetFunction( const validationIssue = validateRouteWithData(targetVal, apiStates); if (validationIssue) { + results.push({ + message: `API state validation failed: ${validationIssue}`, + }); // Extract just the key issue from the message let shortMessage = validationIssue; if (validationIssue.includes("not found in")) { diff --git a/packages/test-files/sp-gateway-routes.yaml b/packages/test-files/sp-gateway-routes.yaml index 3116648..b71c5c4 100644 --- a/packages/test-files/sp-gateway-routes.yaml +++ b/packages/test-files/sp-gateway-routes.yaml @@ -1,6 +1,6 @@ sp-gateway: routes: - access-request-test: + - id: "access-request-test" path: "/access-request-test" servicePath: "/test/access-request-administration" additionalVersions: @@ -9,9 +9,26 @@ sp-gateway: routeType: "prefix" stripPrefix: true apiState: "limited-preview" - test-route: + - id: "test-route" + path: "/test-route" service: "identity" versionStart: 0 routeType: "prefix" stripPrefix: true - apiState: "public" \ No newline at end of file + apiState: "public" + - id: "identities" + path: "/identities" + versionStart: 2024 + additionalVersions: + - "beta" + routeType: "prefix" + stripPrefix: true + apiState: "public" + - id: "accounts" + path: "/accounts" + versionStart: 2024 + additionalVersions: + - "beta" + routeType: "prefix" + stripPrefix: true + apiState: "public-preview" \ No newline at end of file From a5f247f8aa17b197787b4674708221d652a666f3 Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Thu, 31 Jul 2025 21:16:21 -0400 Subject: [PATCH 03/16] clean up messages for api state --- .../gateway-rulesets/src/check-api-state.ts | 104 +----------------- 1 file changed, 5 insertions(+), 99 deletions(-) diff --git a/packages/gateway-rulesets/src/check-api-state.ts b/packages/gateway-rulesets/src/check-api-state.ts index 792f4c2..ee2ae18 100644 --- a/packages/gateway-rulesets/src/check-api-state.ts +++ b/packages/gateway-rulesets/src/check-api-state.ts @@ -198,102 +198,6 @@ function validateRouteWithData( return null; } -// Print summary on process exit (only works in Node.js environments) -if (typeof process !== "undefined" && process.on) { - process.on("beforeExit", () => { - if ( - !summaryPrinted && - (mismatches.length > 0 || limitedPreviewRoutes.length > 0) - ) { - summaryPrinted = true; - console.log("\n\n========================================"); - console.log("API STATE VALIDATION SUMMARY"); - console.log("========================================"); - console.log(`Total mismatches found: ${mismatches.length}`); - if (limitedPreviewRoutes.length > 0) { - console.log( - `Limited-preview routes found: ${limitedPreviewRoutes.length}` - ); - } - - // Count by version (including limited-preview routes) - const versionCounts = new Map(); - mismatches.forEach(({ version }) => { - versionCounts.set(version, (versionCounts.get(version) || 0) + 1); - }); - limitedPreviewRoutes.forEach(({ version }) => { - versionCounts.set(version, (versionCounts.get(version) || 0) + 1); - }); - - console.log("\nIssues by version:"); - Array.from(versionCounts.entries()) - .sort(([a], [b]) => a.localeCompare(b)) - .forEach(([version, count]) => { - console.log(` - Version ${version}: ${count} issues`); - }); - - // Group by version and issue type - const versionGroups = new Map>(); - - // Add mismatches to version groups - mismatches.forEach(({ path, issue, version }) => { - let issueType = "Other"; - if (issue.includes("not found in")) { - issueType = "Path not found in API state data"; - } else if (issue.includes("all methods are 'public'")) { - issueType = "Marked as public-preview but all methods are public"; - } else if (issue.includes("has 'public-preview' methods")) { - issueType = "Marked as public but has public-preview methods"; - } - - if (!versionGroups.has(version)) { - versionGroups.set(version, new Map()); - } - - const versionGroup = versionGroups.get(version)!; - if (!versionGroup.has(issueType)) { - versionGroup.set(issueType, []); - } - versionGroup.get(issueType)!.push(path); - }); - - // Add limited-preview routes to version groups - limitedPreviewRoutes.forEach(({ path, version }) => { - const issueType = "Limited-preview routes (should not be documented)"; - - if (!versionGroups.has(version)) { - versionGroups.set(version, new Map()); - } - - const versionGroup = versionGroups.get(version)!; - if (!versionGroup.has(issueType)) { - versionGroup.set(issueType, []); - } - versionGroup.get(issueType)!.push(path); - }); - - // Print grouped issues by version - const versions = Array.from(versionGroups.keys()).sort(); - versions.forEach((version) => { - console.log(`\n📌 Version ${version}:`); - console.log("=".repeat(20)); - - const issueGroups = versionGroups.get(version)!; - issueGroups.forEach((paths, issueType) => { - console.log(`\n ${issueType} (${paths.length} issues):`); - console.log(" " + "-".repeat(issueType.length + 15)); - - paths.forEach((path) => { - console.log(` - ${path}`); - }); - }); - }); - - console.log("\n========================================\n"); - } - }); -} - export default createOptionalContextRulesetFunction( { input: null, options: {} }, ( @@ -331,9 +235,7 @@ export default createOptionalContextRulesetFunction( const validationIssue = validateRouteWithData(targetVal, apiStates); if (validationIssue) { - results.push({ - message: `API state validation failed: ${validationIssue}`, - }); + // Extract just the key issue from the message let shortMessage = validationIssue; if (validationIssue.includes("not found in")) { @@ -346,6 +248,10 @@ export default createOptionalContextRulesetFunction( shortMessage = `Marked as 'public' but ${methods} are 'public-preview'`; } + results.push({ + message: ` ${targetVal.path}: ${shortMessage}`, + }); + mismatches.push({ path: targetVal.path, issue: validationIssue, From 78e266e7b6199b703be4f40fce9d3810ea1c8d06 Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Fri, 1 Aug 2025 14:18:40 -0400 Subject: [PATCH 04/16] test workflow run --- .../gateway-rulesets/src/api-state-data.json | 3364 ----------------- 1 file changed, 3364 deletions(-) delete mode 100644 packages/gateway-rulesets/src/api-state-data.json diff --git a/packages/gateway-rulesets/src/api-state-data.json b/packages/gateway-rulesets/src/api-state-data.json deleted file mode 100644 index 619f60f..0000000 --- a/packages/gateway-rulesets/src/api-state-data.json +++ /dev/null @@ -1,3364 +0,0 @@ -{ - "2024": { - "/access-profiles": { - "GET": "public", - "POST": "public" - }, - "/access-profiles/{id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/access-profiles/bulk-delete": { - "POST": "public" - }, - "/access-profiles/{id}/entitlements": { - "GET": "public" - }, - "/access-requests": { - "POST": "public" - }, - "/access-requests/cancel": { - "POST": "public" - }, - "/access-requests/close": { - "POST": "public" - }, - "/access-requests/bulk-cancel": { - "POST": "public" - }, - "/access-requests/accounts-selection": { - "POST": "public" - }, - "/access-request-config": { - "GET": "public", - "PUT": "public" - }, - "/access-request-status": { - "GET": "public" - }, - "/access-request-administration": { - "GET": "public" - }, - "/access-request-approvals/pending": { - "GET": "public" - }, - "/access-request-approvals/completed": { - "GET": "public" - }, - "/access-request-approvals/{approvalId}/approve": { - "POST": "public" - }, - "/access-request-approvals/{approvalId}/reject": { - "POST": "public" - }, - "/access-request-approvals/{approvalId}/forward": { - "POST": "public" - }, - "/access-request-approvals/approval-summary": { - "GET": "public" - }, - "/access-request-approvals/bulk-approve": { - "POST": "public" - }, - "/access-request-approvals/{accessRequestId}/approvers": { - "GET": "public" - }, - "/accounts": { - "GET": "public", - "POST": "public" - }, - "/accounts/{id}": { - "GET": "public", - "PATCH": "public", - "PUT": "public", - "DELETE": "public" - }, - "/accounts/{id}/entitlements": { - "GET": "public" - }, - "/accounts/{id}/reload": { - "POST": "public" - }, - "/accounts/{id}/enable": { - "POST": "public" - }, - "/accounts/{id}/disable": { - "POST": "public" - }, - "/accounts/{id}/unlock": { - "POST": "public" - }, - "/accounts/{id}/remove": { - "POST": "public" - }, - "/account-activities": { - "GET": "public" - }, - "/account-activities/{id}": { - "GET": "public" - }, - "/account-aggregations/{id}/status": { - "GET": "public" - }, - "/auth-org/network-config": { - "GET": "public", - "POST": "public", - "PATCH": "public" - }, - "/auth-org/lockout-config": { - "GET": "public", - "PATCH": "public" - }, - "/auth-org/service-provider-config": { - "GET": "public", - "PATCH": "public" - }, - "/auth-org/session-config": { - "GET": "public", - "PATCH": "public" - }, - "/auth-users/{id}": { - "GET": "public", - "PATCH": "public" - }, - "/brandings": { - "GET": "public", - "POST": "public" - }, - "/brandings/{name}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/campaigns": { - "GET": "public", - "POST": "public" - }, - "/campaigns/{id}": { - "GET": "public", - "PATCH": "public" - }, - "/campaigns/{id}/reassign": { - "POST": "public" - }, - "/campaigns/{id}/activate": { - "POST": "public" - }, - "/campaigns/{id}/complete": { - "POST": "public" - }, - "/campaigns/delete": { - "POST": "public" - }, - "/campaigns/{id}/run-remediation-scan": { - "POST": "public" - }, - "/campaigns/{id}/reports": { - "GET": "public" - }, - "/campaigns/{id}/run-report/{type}": { - "POST": "public" - }, - "/campaigns/reports-configuration": { - "GET": "public", - "PUT": "public" - }, - "/campaign-filters": { - "POST": "public", - "GET": "public" - }, - "/campaign-filters/{id}": { - "GET": "public", - "POST": "public" - }, - "/campaign-filters/delete": { - "POST": "public" - }, - "/campaign-templates": { - "POST": "public", - "GET": "public" - }, - "/campaign-templates/{id}": { - "PATCH": "public", - "GET": "public", - "DELETE": "public" - }, - "/campaign-templates/{id}/schedule": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/campaign-templates/{id}/generate": { - "POST": "public" - }, - "/certifications": { - "GET": "public" - }, - "/certifications/{id}": { - "GET": "public" - }, - "/certifications/{id}/access-review-items": { - "GET": "public" - }, - "/certifications/{id}/decide": { - "POST": "public" - }, - "/certifications/{id}/reassign": { - "POST": "public" - }, - "/certifications/{id}/sign-off": { - "POST": "public" - }, - "/certifications/{id}/decision-summary": { - "GET": "public" - }, - "/certifications/{id}/identity-summaries": { - "GET": "public" - }, - "/certifications/{id}/access-summaries/{type}": { - "GET": "public" - }, - "/certifications/{id}/identity-summaries/{identitySummaryId}": { - "GET": "public" - }, - "/certifications/{certificationId}/access-review-items/{itemId}/permissions": { - "GET": "public" - }, - "/certifications/{id}/reviewers": { - "GET": "public" - }, - "/certifications/{id}/reassign-async": { - "POST": "public" - }, - "/certification-tasks/{id}": { - "GET": "public" - }, - "/certification-tasks": { - "GET": "public" - }, - "/connector-customizers": { - "GET": "public", - "POST": "public" - }, - "/connector-customizers/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/connector-customizers/{id}/versions": { - "POST": "public" - }, - "/configuration-hub/object-mappings/{sourceOrg}": { - "GET": "public", - "POST": "public" - }, - "/configuration-hub/object-mappings/{sourceOrg}/{objectMappingId}": { - "DELETE": "public" - }, - "/configuration-hub/object-mappings/{sourceOrg}/bulk-create": { - "POST": "public" - }, - "/configuration-hub/object-mappings/{sourceOrg}/bulk-patch": { - "POST": "public" - }, - "/configuration-hub/scheduled-actions": { - "GET": "public", - "POST": "public" - }, - "/configuration-hub/scheduled-actions/{id}": { - "PATCH": "public", - "DELETE": "public" - }, - "/configuration-hub/backups/uploads": { - "GET": "public", - "POST": "public" - }, - "/configuration-hub/backups/uploads/{id}": { - "GET": "public", - "DELETE": "public" - }, - "/configuration-hub/backups": { - "GET": "public" - }, - "/configuration-hub/backups/{id}": { - "DELETE": "public" - }, - "/configuration-hub/drafts": { - "GET": "public" - }, - "/configuration-hub/drafts/{id}": { - "DELETE": "public" - }, - "/configuration-hub/deploys": { - "GET": "public", - "POST": "public" - }, - "/configuration-hub/deploys/{id}": { - "GET": "public" - }, - "/connectors/{scriptName}": { - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/connectors": { - "GET": "public", - "POST": "public" - }, - "/connectors/{scriptName}/source-config": { - "GET": "public", - "PUT": "public" - }, - "/connectors/{scriptName}/translations/{locale}": { - "GET": "public", - "PUT": "public" - }, - "/connectors/{scriptName}/source-template": { - "GET": "public", - "PUT": "public" - }, - "/connectors/{scriptName}/correlation-config": { - "GET": "public", - "PUT": "public" - }, - "/connector-rules": { - "GET": "public", - "POST": "public" - }, - "/connector-rules/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/connector-rules/validate": { - "POST": "public" - }, - "/data-segments/membership/{identityId}": { - "GET": "public-preview" - }, - "/data-segments/user-enabled/{identityId}": { - "GET": "public-preview" - }, - "/data-segments/{segmentId}": { - "GET": "public-preview", - "POST": "public-preview", - "PATCH": "public-preview", - "DELETE": "public-preview" - }, - "/data-segments": { - "GET": "public-preview", - "POST": "public" - }, - "/identities": { - "GET": "public", - "POST": "public-preview" - }, - "/identities/{id}": { - "GET": "public", - "DELETE": "public" - }, - "/identities-accounts/{id}/enable": { - "POST": "public" - }, - "/identities-accounts/{id}/disable": { - "POST": "public" - }, - "/identities-accounts/enable": { - "POST": "public" - }, - "/identities-accounts/disable": { - "POST": "public" - }, - "/identities/{identityId}/ownership": { - "GET": "public" - }, - "/identities/{id}/reset": { - "POST": "public" - }, - "/identities/{identityId}/role-assignments": { - "GET": "public" - }, - "/identities/{identityId}/role-assignments/{assignmentId}": { - "GET": "public" - }, - "/identities/{identity-id}/set-lifecycle-state": { - "POST": "public" - }, - "/identity-profiles/{identity-profile-id}/lifecycle-states": { - "GET": "public", - "POST": "public" - }, - "/identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/identity-profiles": { - "GET": "public", - "POST": "public" - }, - "/identity-profiles/bulk-delete": { - "POST": "public" - }, - "/identity-profiles/export": { - "GET": "public" - }, - "/identity-profiles/import": { - "POST": "public" - }, - "/identity-profiles/{identity-profile-id}": { - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/identity-profiles/{identity-profile-id}/default-identity-attribute-config": { - "GET": "public" - }, - "/identity-profiles/{identity-profile-id}/process-identities": { - "POST": "public" - }, - "/managed-clients": { - "GET": "public", - "POST": "public" - }, - "/managed-clients/{id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/managed-clients/{id}/status": { - "GET": "public" - }, - "/managed-clusters": { - "GET": "public", - "POST": "public" - }, - "/managed-clusters/{id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/managed-clusters/{id}/log-config": { - "GET": "public", - "PUT": "public" - }, - "/managed-clusters/{id}/manualUpgrade": { - "POST": "public" - }, - "/managed-cluster-types": { - "GET": "public", - "POST": "public" - }, - "/managed-cluster-types/{id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/mfa/okta-verify/config": { - "GET": "public", - "PUT": "public" - }, - "/mfa/duo-web/config": { - "GET": "public", - "PUT": "public" - }, - "/mfa/kba/config": { - "GET": "public" - }, - "/mfa/kba/config/answers": { - "POST": "public" - }, - "/mfa/{method}/test": { - "GET": "public" - }, - "/multihosts": { - "POST": "public", - "GET": "public" - }, - "/multihosts/types": { - "GET": "public" - }, - "/multihosts/{multihostId}": { - "POST": "public", - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/multihosts/{multihostId}/sources/testConnection": { - "POST": "public" - }, - "/multihosts/{multihostId}/sources/{sourceId}/testConnection": { - "GET": "public" - }, - "/multihosts/{multihostId}/sources": { - "GET": "public" - }, - "/multihosts/{multiHostId}/sources/errors": { - "GET": "public" - }, - "/multihosts/{multihostId}/acctAggregationGroups": { - "GET": "public" - }, - "/multihosts/{multiHostId}/entitlementAggregationGroups": { - "GET": "public" - }, - "/non-employee-records": { - "POST": "public", - "GET": "public" - }, - "/non-employee-records/{id}": { - "GET": "public", - "PUT": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/non-employee-records/bulk-delete": { - "POST": "public" - }, - "/non-employee-requests": { - "POST": "public", - "GET": "public" - }, - "/non-employee-requests/{id}": { - "GET": "public", - "DELETE": "public" - }, - "/non-employee-requests/summary/{requested-for}": { - "GET": "public" - }, - "/non-employee-sources": { - "POST": "public", - "GET": "public" - }, - "/non-employee-sources/{sourceId}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/non-employee-sources/{id}/non-employees/download": { - "GET": "public" - }, - "/non-employee-sources/{id}/non-employee-bulk-upload": { - "POST": "public" - }, - "/non-employee-sources/{id}/non-employee-bulk-upload/status": { - "GET": "public" - }, - "/non-employee-sources/{id}/schema-attributes-template/download": { - "GET": "public" - }, - "/non-employee-approvals": { - "GET": "public" - }, - "/non-employee-approvals/{id}": { - "GET": "public" - }, - "/non-employee-approvals/{id}/approve": { - "POST": "public" - }, - "/non-employee-approvals/{id}/reject": { - "POST": "public" - }, - "/non-employee-approvals/summary/{requested-for}": { - "GET": "public" - }, - "/non-employee-sources/{sourceId}/schema-attributes": { - "GET": "public", - "POST": "public", - "DELETE": "public" - }, - "/non-employee-sources/{sourceId}/schema-attributes/{attributeId}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/oauth-clients": { - "GET": "public", - "POST": "public" - }, - "/oauth-clients/{id}": { - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/password-sync-groups": { - "GET": "public", - "POST": "public" - }, - "/password-sync-groups/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/password-policies/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/password-policies": { - "POST": "public", - "GET": "public" - }, - "/personal-access-tokens": { - "GET": "public", - "POST": "public" - }, - "/personal-access-tokens/{id}": { - "PATCH": "public", - "DELETE": "public" - }, - "/public-identities": { - "GET": "public" - }, - "/public-identities-config": { - "GET": "public", - "PUT": "public" - }, - "/requestable-objects": { - "GET": "public" - }, - "/roles": { - "GET": "public", - "POST": "public" - }, - "/roles/{id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/roles/bulk-delete": { - "POST": "public" - }, - "/roles/{id}/assigned-identities": { - "GET": "public" - }, - "/roles/{roleId}/dimensions": { - "GET": "public", - "POST": "public" - }, - "/roles/{roleId}/dimensions/{dimensionId}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/roles/{roleId}/dimensions/bulk-delete": { - "POST": "public" - }, - "/roles/{roleId}/dimensions/{dimensionId}/access-profiles": { - "GET": "public" - }, - "/roles/{roleId}/dimensions/{dimensionId}/entitlements": { - "GET": "public" - }, - "/saved-searches": { - "POST": "public", - "GET": "public" - }, - "/saved-searches/{id}": { - "PUT": "public", - "GET": "public", - "DELETE": "public" - }, - "/saved-searches/{id}/execute": { - "POST": "public" - }, - "/scheduled-searches": { - "POST": "public", - "GET": "public" - }, - "/scheduled-searches/{id}": { - "PUT": "public", - "GET": "public", - "DELETE": "public" - }, - "/scheduled-searches/{id}/unsubscribe": { - "POST": "public" - }, - "/search": { - "POST": "public" - }, - "/search/count": { - "POST": "public" - }, - "/search/aggregate": { - "POST": "public" - }, - "/search/{index}/{id}": { - "GET": "public" - }, - "/segments": { - "POST": "public", - "GET": "public" - }, - "/segments/{id}": { - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/service-desk-integrations": { - "GET": "public", - "POST": "public" - }, - "/service-desk-integrations/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/service-desk-integrations/types": { - "GET": "public" - }, - "/service-desk-integrations/templates/{scriptName}": { - "GET": "public" - }, - "/service-desk-integrations/status-check-configuration": { - "GET": "public", - "PUT": "public" - }, - "/query-password-info": { - "POST": "public" - }, - "/set-password": { - "POST": "public" - }, - "/password-change-status/{id}": { - "GET": "public" - }, - "/password-dictionary": { - "GET": "public", - "PUT": "public" - }, - "/password-org-config": { - "GET": "public", - "PUT": "public", - "POST": "public" - }, - "/reports/{taskResultId}/result": { - "GET": "public" - }, - "/reports/run": { - "POST": "public" - }, - "/reports/{id}/cancel": { - "POST": "public" - }, - "/reports/{taskResultId}": { - "GET": "public" - }, - "/sod-policies": { - "POST": "public", - "GET": "public" - }, - "/sod-policies/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/sod-policies/{id}/evaluate": { - "POST": "public" - }, - "/sod-policies/{id}/schedule": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/sod-policies/{id}/violation-report/run": { - "POST": "public" - }, - "/sod-policies/{id}/violation-report": { - "GET": "public" - }, - "/sod-policies/sod-violation-report-status/{reportResultId}": { - "GET": "public" - }, - "/sod-violations/predict": { - "POST": "public" - }, - "/sod-violations/check": { - "POST": "public" - }, - "/sod-violation-report/run": { - "POST": "public" - }, - "/sod-violation-report": { - "GET": "public" - }, - "/sod-violation-report/{reportResultId}/download": { - "GET": "public" - }, - "/sod-violation-report/{reportResultId}/download/{fileName}": { - "GET": "public" - }, - "/sources": { - "GET": "public", - "POST": "public" - }, - "/sources/{id}": { - "GET": "public", - "PUT": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/provisioning-policies": { - "GET": "public", - "POST": "public" - }, - "/sources/{sourceId}/provisioning-policies/{usageType}": { - "GET": "public", - "PUT": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/provisioning-policies/bulk-update": { - "POST": "public" - }, - "/sources/{sourceId}/schemas": { - "GET": "public", - "POST": "public" - }, - "/sources/{sourceId}/schedules": { - "GET": "public", - "POST": "public" - }, - "/sources/{sourceId}/schedules/{scheduleType}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/schemas/{schemaId}": { - "GET": "public", - "PUT": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/source-health": { - "GET": "public" - }, - "/sources/{id}/schemas/accounts": { - "GET": "public", - "POST": "public" - }, - "/sources/{id}/schemas/entitlements": { - "GET": "public", - "POST": "public" - }, - "/sources/{sourceId}/upload-connector-file": { - "POST": "public" - }, - "/sources/{sourceId}/connections": { - "GET": "public" - }, - "/sources/{id}/correlation-config": { - "GET": "public", - "PUT": "public" - }, - "/sources/{sourceId}/password-policies": { - "PATCH": "public" - }, - "/sources/{sourceId}/connector/check-connection": { - "POST": "public" - }, - "/sources/{sourceId}/connector/peek-resource-objects": { - "POST": "public" - }, - "/sources/{sourceId}/connector/ping-cluster": { - "POST": "public" - }, - "/sources/{sourceId}/connector/test-configuration": { - "POST": "public" - }, - "/sources/{id}/connectors/source-config": { - "GET": "public" - }, - "/sources/{sourceId}/native-change-detection-config": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/sources/{id}/remove-accounts": { - "POST": "public" - }, - "/sources/{id}/load-accounts": { - "POST": "public" - }, - "/sources/{id}/load-uncorrelated-accounts": { - "POST": "public" - }, - "/tagged-objects": { - "GET": "public", - "POST": "public" - }, - "/tagged-objects/{type}": { - "GET": "public" - }, - "/tagged-objects/{type}/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/tagged-objects/bulk-add": { - "POST": "public" - }, - "/tagged-objects/bulk-remove": { - "POST": "public" - }, - "/transforms": { - "GET": "public", - "POST": "public" - }, - "/transforms/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/work-items": { - "GET": "public" - }, - "/work-items/completed": { - "GET": "public" - }, - "/work-items/count": { - "GET": "public" - }, - "/work-items/completed/count": { - "GET": "public-preview" - }, - "/work-items/summary": { - "GET": "public" - }, - "/work-items/{id}": { - "GET": "public", - "POST": "public" - }, - "/work-items/{id}/approve/{approvalItemId}": { - "POST": "public" - }, - "/work-items/{id}/reject/{approvalItemId}": { - "POST": "public" - }, - "/work-items/bulk-approve/{id}": { - "POST": "public" - }, - "/work-items/bulk-reject/{id}": { - "POST": "public" - }, - "/work-items/{id}/submit-account-selection": { - "POST": "public" - }, - "/workflows": { - "GET": "public", - "POST": "public" - }, - "/workflows/{id}": { - "GET": "public", - "PUT": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/workflows/{id}/test": { - "POST": "public" - }, - "/workflows/{id}/executions": { - "GET": "public" - }, - "/workflow-executions/{id}": { - "GET": "public" - }, - "/workflow-executions/{id}/history": { - "GET": "public" - }, - "/workflow-executions/{id}/cancel": { - "POST": "public" - }, - "/workflow-library": { - "GET": "public" - }, - "/workflow-library/actions": { - "GET": "public" - }, - "/workflow-library/triggers": { - "GET": "public" - }, - "/workflow-library/operators": { - "GET": "public" - }, - "/workflows/{id}/external/oauth-clients": { - "POST": "public" - }, - "/workflows/execute/external/{id}": { - "POST": "public" - }, - "/workflows/execute/external/{id}/test": { - "POST": "public" - }, - "/source-usages/{sourceId}/status": { - "GET": "public" - }, - "/source-usages/{sourceId}/summaries": { - "GET": "public" - }, - "/account-usages/{accountId}/summaries": { - "GET": "public" - }, - "/identity-profiles/identity-preview": { - "POST": "public-preview" - }, - "/work-items/{id}/forward": { - "POST": "public-preview" - }, - "/accounts/search-attribute-config": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/accounts/search-attribute-config/{name}": { - "GET": "public-preview", - "DELETE": "public-preview", - "PATCH": "public-preview" - }, - "/access-model-metadata/attributes": { - "GET": "public" - }, - "/access-model-metadata/attributes/{key}": { - "GET": "public" - }, - "/access-model-metadata/attributes/{key}/values": { - "GET": "public" - }, - "/access-model-metadata/attributes/{key}/values/{value}": { - "GET": "public" - }, - "/access-profiles/bulk-update-requestable": { - "POST": "public-preview" - }, - "/ai-access-request-recommendations": { - "GET": "public-preview" - }, - "/ai-access-request-recommendations/config": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/ai-access-request-recommendations/ignored-items": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/ai-access-request-recommendations/requested-items": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/ai-access-request-recommendations/viewed-items": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/ai-access-request-recommendations/viewed-items/bulk-create": { - "POST": "public-preview" - }, - "/auth-profiles": { - "GET": "public-preview" - }, - "/auth-profiles/{id}": { - "GET": "public-preview", - "PATCH": "public-preview" - }, - "/custom-password-instructions": { - "POST": "public-preview" - }, - "/custom-password-instructions/{pageId}": { - "GET": "public-preview", - "DELETE": "public-preview" - }, - "/entitlements": { - "GET": "public" - }, - "/entitlements/{id}": { - "GET": "public", - "PATCH": "public" - }, - "/entitlements/{id}/parents": { - "GET": "public" - }, - "/entitlements/{id}/children": { - "GET": "public" - }, - "/entitlements/bulk-update": { - "POST": "public" - }, - "/entitlements/{id}/entitlement-request-config": { - "GET": "public", - "PUT": "public" - }, - "/entitlements/reset/sources/{id}": { - "POST": "public" - }, - "/entitlements/{id}/access-model-metadata/{attributeKey}/values/{attributeValue}": { - "POST": "public", - "DELETE": "public" - }, - "/entitlements/aggregate/sources/{id}": { - "POST": "public" - }, - "/generate-password-reset-token/digit": { - "POST": "public-preview" - }, - "/historical-identities": { - "GET": "public-preview" - }, - "/historical-identities/{id}": { - "GET": "public-preview" - }, - "/historical-identities/{id}/access-items": { - "GET": "public-preview" - }, - "/historical-identities/{id}/snapshots": { - "GET": "public-preview" - }, - "/historical-identities/{id}/snapshot-summary": { - "GET": "public-preview" - }, - "/historical-identities/{id}/snapshots/{date}": { - "GET": "public-preview" - }, - "/historical-identities/{id}/snapshots/{date}/access-items": { - "GET": "public-preview" - }, - "/common-access": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/common-access/update-status": { - "POST": "public-preview" - }, - "/historical-identities/{id}/events": { - "GET": "public-preview" - }, - "/historical-identities/{id}/start-date": { - "GET": "public-preview" - }, - "/historical-identities/{id}/compare": { - "GET": "public-preview" - }, - "/historical-identities/{id}/compare/{access-type}": { - "GET": "public-preview" - }, - "/identities/{identityId}/synchronize-attributes": { - "POST": "public-preview" - }, - "/identities/invite": { - "POST": "public" - }, - "/identities/{id}/verification/account/send": { - "POST": "public-preview" - }, - "/identities/process": { - "POST": "public-preview" - }, - "/identity-attributes": { - "GET": "public", - "POST": "public" - }, - "/identity-attributes/{name}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/identity-attributes/bulk-delete": { - "DELETE": "public" - }, - "/mail-from-attributes": { - "PUT": "public-preview" - }, - "/mail-from-attributes/{identity}": { - "GET": "public-preview" - }, - "/generic-approvals": { - "GET": "public-preview" - }, - "/generic-approvals/{id}": { - "GET": "public-preview" - }, - "/machine-accounts": { - "GET": "public-preview" - }, - "/machine-accounts/{id}": { - "GET": "public-preview", - "PATCH": "public-preview" - }, - "/sources/{sourceId}/machine-classification-config": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/machine-account-mappings": { - "GET": "public", - "POST": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/machine-mappings": { - "PUT": "public" - }, - "/accounts/{id}/classify": { - "POST": "public" - }, - "/machine-identities": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/machine-identities/{id}": { - "GET": "public-preview", - "PATCH": "public-preview", - "DELETE": "public-preview" - }, - "/notification-template-defaults": { - "GET": "public-preview" - }, - "/notification-templates": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/notification-templates/{id}": { - "GET": "public-preview" - }, - "/notification-templates/bulk-delete": { - "POST": "public-preview" - }, - "/org-config": { - "GET": "public-preview", - "PATCH": "public-preview" - }, - "/org-config/valid-time-zones": { - "GET": "public-preview" - }, - "/outlier-summaries": { - "GET": "public-preview" - }, - "/outlier-summaries/latest": { - "GET": "public-preview" - }, - "/outliers": { - "GET": "public-preview" - }, - "/outliers/{outlierId}/contributing-features": { - "GET": "public-preview" - }, - "/outliers/{outlierId}/feature-details/{contributingFeatureName}/access-items": { - "GET": "public-preview" - }, - "/outliers/ignore": { - "POST": "public-preview" - }, - "/outliers/unignore": { - "POST": "public-preview" - }, - "/outliers/export": { - "GET": "public-preview" - }, - "/outlier-feature-summaries/{outlierFeatureId}": { - "GET": "public-preview" - }, - "/peer-group-strategies/{strategy}/identity-outliers": { - "GET": "public-preview" - }, - "/notification-template-context": { - "GET": "public-preview" - }, - "/notification-preferences/{key}": { - "GET": "public-preview" - }, - "/reassignment-configurations/types": { - "GET": "public-preview" - }, - "/reassignment-configurations": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/reassignment-configurations/{identityId}": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/reassignment-configurations/{identityId}/{configType}": { - "DELETE": "public-preview" - }, - "/reassignment-configurations/{identityId}/evaluate/{configType}": { - "GET": "public-preview" - }, - "/reassignment-configurations/tenant-config": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/recommendations/request": { - "POST": "public-preview" - }, - "/recommendations/config": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/role-insights/requests": { - "POST": "public-preview" - }, - "/role-insights/requests/{id}": { - "GET": "public-preview" - }, - "/role-insights/summary": { - "GET": "public-preview" - }, - "/role-insights": { - "GET": "public-preview" - }, - "/role-insights/{insightId}": { - "GET": "public-preview" - }, - "/role-insights/{insightId}/entitlement-changes": { - "GET": "public-preview" - }, - "/role-insights/{insightId}/entitlement-changes/download": { - "GET": "public-preview" - }, - "/role-insights/{insightId}/current-entitlements": { - "GET": "public-preview" - }, - "/role-insights/{insightId}/entitlement-changes/{entitlementId}/identities": { - "GET": "public-preview" - }, - "/role-mining-sessions": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}": { - "PATCH": "public-preview", - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/status": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-role-summaries": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}": { - "GET": "public-preview", - "PATCH": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}/applications": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}/entitlements": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularities": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularity-distribution": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/edit-entitlements": { - "POST": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/identities": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async": { - "POST": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}/download": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/provision": { - "POST": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/excluded-entitlements": { - "GET": "public-preview" - }, - "/role-mining-potential-roles": { - "GET": "public-preview" - }, - "/role-mining-potential-roles/{potentialRoleId}": { - "GET": "public-preview", - "PATCH": "public-preview" - }, - "/role-mining-potential-roles/saved": { - "GET": "public-preview" - }, - "/role-mining-potential-roles/{potentialRoleId}/sources/{sourceId}/identityUsage": { - "GET": "public-preview" - }, - "/roles/{id}/entitlements": { - "GET": "public-preview" - }, - "/send-test-notification": { - "POST": "public-preview" - }, - "/sim-integrations/{id}": { - "PUT": "public-preview", - "GET": "public-preview", - "DELETE": "public-preview", - "PATCH": "public-preview" - }, - "/sim-integrations/{id}/beforeProvisioningRule": { - "PATCH": "public-preview" - }, - "/sim-integrations": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/sp-config/export": { - "POST": "public" - }, - "/sp-config/export/{id}": { - "GET": "public" - }, - "/sp-config/export/{id}/download": { - "GET": "public" - }, - "/sp-config/import": { - "POST": "public" - }, - "/sp-config/import/{id}": { - "GET": "public" - }, - "/sp-config/import/{id}/download": { - "GET": "public" - }, - "/sp-config/config-objects": { - "GET": "public" - }, - "/sources/{id}/attribute-sync-config": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/sources/{id}/synchronize-attributes": { - "POST": "public-preview" - }, - "/sources/{id}/entitlement-request-config": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/sources/{sourceId}/load-entitlements": { - "POST": "public" - }, - "/task-status/{id}": { - "GET": "public", - "PATCH": "public" - }, - "/task-status": { - "GET": "public" - }, - "/task-status/pending-tasks": { - "GET": "public", - "HEAD": "public" - }, - "/tenant": { - "GET": "public" - }, - "/tenant-context": { - "GET": "public-preview", - "PATCH": "public-preview" - }, - "/triggers": { - "GET": "public-preview" - }, - "/trigger-subscriptions": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/trigger-subscriptions/{id}": { - "PUT": "public-preview", - "PATCH": "public-preview", - "DELETE": "public-preview" - }, - "/trigger-subscriptions/validate-filter": { - "POST": "public-preview" - }, - "/trigger-invocations/status": { - "GET": "public-preview" - }, - "/trigger-invocations/{id}/complete": { - "POST": "public-preview" - }, - "/trigger-invocations/test": { - "POST": "public-preview" - }, - "/ui-metadata/tenant": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/verified-from-addresses": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/verified-from-addresses/{id}": { - "DELETE": "public-preview" - }, - "/verified-domains": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/workgroups": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/workgroups/{id}": { - "GET": "public-preview", - "DELETE": "public-preview", - "PATCH": "public-preview" - }, - "/workgroups/bulk-delete": { - "POST": "public-preview" - }, - "/workgroups/{workgroupId}/connections": { - "GET": "public-preview" - }, - "/workgroups/{workgroupId}/members": { - "GET": "public-preview" - }, - "/workgroups/{workgroupId}/members/bulk-add": { - "POST": "public-preview" - }, - "/workgroups/{workgroupId}/members/bulk-delete": { - "POST": "public-preview" - }, - "/form-definitions": { - "GET": "public", - "POST": "public" - }, - "/form-definitions/{formDefinitionID}": { - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/form-definitions/{formDefinitionID}/data-source": { - "POST": "public" - }, - "/form-definitions/export": { - "GET": "public" - }, - "/form-definitions/forms-action-dynamic-schema": { - "POST": "public" - }, - "/form-definitions/import": { - "POST": "public" - }, - "/form-definitions/{formDefinitionID}/upload": { - "POST": "public" - }, - "/form-definitions/{formDefinitionID}/file/{fileID}": { - "GET": "public" - }, - "/form-instances": { - "GET": "public", - "POST": "public" - }, - "/form-instances/{formInstanceID}": { - "GET": "public", - "PATCH": "public" - }, - "/form-instances/{formInstanceID}/data-source/{formElementID}": { - "GET": "public" - }, - "/form-instances/{formInstanceID}/file/{fileID}": { - "GET": "public" - }, - "/form-definitions/predefined-select-options": { - "GET": "public" - }, - "/access-request-identity-metrics/{identityId}/requested-objects/{requestedObjectId}/type/{type}": { - "GET": "public" - }, - "/icons/{objectType}/{objectId}": { - "PUT": "public-preview", - "DELETE": "public-preview" - }, - "/suggested-entitlement-description-batches/{batchId}/stats": { - "GET": "public" - }, - "/suggested-entitlement-description-batches": { - "GET": "public", - "POST": "public" - }, - "/suggested-entitlement-description-approvals": { - "POST": "public" - }, - "/suggested-entitlement-description-assignments": { - "POST": "public" - }, - "/suggested-entitlement-descriptions": { - "GET": "public", - "PATCH": "public" - }, - "/discovered-applications": { - "GET": "public" - }, - "/manual-discover-applications-template": { - "GET": "public" - }, - "/manual-discover-applications": { - "POST": "public" - }, - "/vendor-connector-mappings": { - "GET": "public", - "POST": "public", - "DELETE": "public" - }, - "/source-apps/{id}": { - "GET": "public-preview", - "PATCH": "public-preview", - "DELETE": "public-preview" - }, - "/source-apps/bulk-update": { - "POST": "public-preview" - }, - "/source-apps/assigned": { - "GET": "public-preview" - }, - "/source-apps": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/source-apps/all": { - "GET": "public-preview" - }, - "/source-apps/{id}/access-profiles": { - "GET": "public-preview" - }, - "/source-apps/{id}/access-profiles/bulk-remove": { - "POST": "public-preview" - }, - "/user-apps/{id}": { - "PATCH": "public-preview" - }, - "/user-apps/{id}/available-accounts": { - "GET": "public-preview" - }, - "/user-apps": { - "GET": "public-preview" - }, - "/user-apps/all": { - "GET": "public-preview" - }, - "/roles/{id}/access-model-metadata/{attributeKey}/values/{attributeValue}": { - "POST": "public", - "DELETE": "public" - }, - "/roles/access-model-metadata/bulk-update/ids": { - "POST": "public" - }, - "/roles/access-model-metadata/bulk-update/filter": { - "POST": "public" - }, - "/roles/access-model-metadata/bulk-update/query": { - "POST": "public" - }, - "/roles/access-model-metadata/bulk-update/id": { - "GET": "public" - }, - "/roles/access-model-metadata/bulk-update": { - "GET": "public" - }, - "/roles/filter": { - "POST": "public" - } - }, - "2025": { - "/access-profiles": { - "GET": "public", - "POST": "public" - }, - "/access-profiles/{id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/access-profiles/bulk-delete": { - "POST": "public" - }, - "/access-profiles/{id}/entitlements": { - "GET": "public" - }, - "/access-requests": { - "POST": "public" - }, - "/access-requests/cancel": { - "POST": "public" - }, - "/access-requests/close": { - "POST": "public" - }, - "/access-requests/bulk-cancel": { - "POST": "public" - }, - "/access-requests/accounts-selection": { - "POST": "public" - }, - "/access-request-config": { - "GET": "public", - "PUT": "public" - }, - "/access-request-status": { - "GET": "public" - }, - "/access-request-administration": { - "GET": "public" - }, - "/access-request-approvals/pending": { - "GET": "public" - }, - "/access-request-approvals/completed": { - "GET": "public" - }, - "/access-request-approvals/{approvalId}/approve": { - "POST": "public" - }, - "/access-request-approvals/{approvalId}/reject": { - "POST": "public" - }, - "/access-request-approvals/{approvalId}/forward": { - "POST": "public" - }, - "/access-request-approvals/approval-summary": { - "GET": "public" - }, - "/access-request-approvals/bulk-approve": { - "POST": "public" - }, - "/access-request-approvals/{accessRequestId}/approvers": { - "GET": "public" - }, - "/accounts": { - "GET": "public", - "POST": "public" - }, - "/accounts/{id}": { - "GET": "public", - "PATCH": "public", - "PUT": "public", - "DELETE": "public" - }, - "/accounts/{id}/entitlements": { - "GET": "public" - }, - "/accounts/{id}/reload": { - "POST": "public" - }, - "/accounts/{id}/enable": { - "POST": "public" - }, - "/accounts/{id}/disable": { - "POST": "public" - }, - "/accounts/{id}/unlock": { - "POST": "public" - }, - "/accounts/{id}/remove": { - "POST": "public" - }, - "/account-activities": { - "GET": "public" - }, - "/account-activities/{id}": { - "GET": "public" - }, - "/account-aggregations/{id}/status": { - "GET": "public" - }, - "/auth-org/network-config": { - "GET": "public", - "POST": "public", - "PATCH": "public" - }, - "/auth-org/lockout-config": { - "GET": "public", - "PATCH": "public" - }, - "/auth-org/service-provider-config": { - "GET": "public", - "PATCH": "public" - }, - "/auth-org/session-config": { - "GET": "public", - "PATCH": "public" - }, - "/auth-users/{id}": { - "GET": "public", - "PATCH": "public" - }, - "/brandings": { - "GET": "public", - "POST": "public" - }, - "/brandings/{name}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/campaigns": { - "GET": "public", - "POST": "public" - }, - "/campaigns/{id}": { - "GET": "public", - "PATCH": "public" - }, - "/campaigns/{id}/reassign": { - "POST": "public" - }, - "/campaigns/{id}/activate": { - "POST": "public" - }, - "/campaigns/{id}/complete": { - "POST": "public" - }, - "/campaigns/delete": { - "POST": "public" - }, - "/campaigns/{id}/run-remediation-scan": { - "POST": "public" - }, - "/campaigns/{id}/reports": { - "GET": "public" - }, - "/campaigns/{id}/run-report/{type}": { - "POST": "public" - }, - "/campaigns/reports-configuration": { - "GET": "public", - "PUT": "public" - }, - "/campaign-filters": { - "POST": "public", - "GET": "public" - }, - "/campaign-filters/{id}": { - "GET": "public", - "POST": "public" - }, - "/campaign-filters/delete": { - "POST": "public" - }, - "/campaign-templates": { - "POST": "public", - "GET": "public" - }, - "/campaign-templates/{id}": { - "PATCH": "public", - "GET": "public", - "DELETE": "public" - }, - "/campaign-templates/{id}/schedule": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/campaign-templates/{id}/generate": { - "POST": "public" - }, - "/certifications": { - "GET": "public" - }, - "/certifications/{id}": { - "GET": "public" - }, - "/certifications/{id}/access-review-items": { - "GET": "public" - }, - "/certifications/{id}/decide": { - "POST": "public" - }, - "/certifications/{id}/reassign": { - "POST": "public" - }, - "/certifications/{id}/sign-off": { - "POST": "public" - }, - "/certifications/{id}/decision-summary": { - "GET": "public" - }, - "/certifications/{id}/identity-summaries": { - "GET": "public" - }, - "/certifications/{id}/access-summaries/{type}": { - "GET": "public" - }, - "/certifications/{id}/identity-summaries/{identitySummaryId}": { - "GET": "public" - }, - "/certifications/{certificationId}/access-review-items/{itemId}/permissions": { - "GET": "public" - }, - "/certifications/{id}/reviewers": { - "GET": "public" - }, - "/certifications/{id}/reassign-async": { - "POST": "public" - }, - "/certification-tasks/{id}": { - "GET": "public" - }, - "/certification-tasks": { - "GET": "public" - }, - "/connector-customizers": { - "GET": "public", - "POST": "public" - }, - "/connector-customizers/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/connector-customizers/{id}/versions": { - "POST": "public" - }, - "/configuration-hub/object-mappings/{sourceOrg}": { - "GET": "public", - "POST": "public" - }, - "/configuration-hub/object-mappings/{sourceOrg}/{objectMappingId}": { - "DELETE": "public" - }, - "/configuration-hub/object-mappings/{sourceOrg}/bulk-create": { - "POST": "public" - }, - "/configuration-hub/object-mappings/{sourceOrg}/bulk-patch": { - "POST": "public" - }, - "/configuration-hub/scheduled-actions": { - "GET": "public", - "POST": "public" - }, - "/configuration-hub/scheduled-actions/{id}": { - "PATCH": "public", - "DELETE": "public" - }, - "/configuration-hub/backups/uploads": { - "GET": "public", - "POST": "public" - }, - "/configuration-hub/backups/uploads/{id}": { - "GET": "public", - "DELETE": "public" - }, - "/configuration-hub/backups": { - "GET": "public" - }, - "/configuration-hub/backups/{id}": { - "DELETE": "public" - }, - "/configuration-hub/drafts": { - "GET": "public" - }, - "/configuration-hub/drafts/{id}": { - "DELETE": "public" - }, - "/configuration-hub/deploys": { - "GET": "public", - "POST": "public" - }, - "/configuration-hub/deploys/{id}": { - "GET": "public" - }, - "/connectors/{scriptName}": { - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/connectors": { - "GET": "public", - "POST": "public" - }, - "/connectors/{scriptName}/source-config": { - "GET": "public", - "PUT": "public" - }, - "/connectors/{scriptName}/translations/{locale}": { - "GET": "public", - "PUT": "public" - }, - "/connectors/{scriptName}/source-template": { - "GET": "public", - "PUT": "public" - }, - "/connectors/{scriptName}/correlation-config": { - "GET": "public", - "PUT": "public" - }, - "/connector-rules": { - "GET": "public", - "POST": "public" - }, - "/connector-rules/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/connector-rules/validate": { - "POST": "public" - }, - "/data-segments/membership/{identityId}": { - "GET": "public-preview" - }, - "/data-segments/user-enabled/{identityId}": { - "GET": "public-preview" - }, - "/data-segments/{segmentId}": { - "GET": "public-preview", - "POST": "public-preview", - "PATCH": "public-preview", - "DELETE": "public-preview" - }, - "/data-segments": { - "GET": "public-preview", - "POST": "public" - }, - "/identities": { - "GET": "public" - }, - "/identities/{id}": { - "GET": "public", - "DELETE": "public-preview" - }, - "/identities-accounts/{id}/enable": { - "POST": "public" - }, - "/identities-accounts/{id}/disable": { - "POST": "public" - }, - "/identities-accounts/enable": { - "POST": "public" - }, - "/identities-accounts/disable": { - "POST": "public" - }, - "/identities/{identityId}/ownership": { - "GET": "public" - }, - "/identities/{id}/reset": { - "POST": "public" - }, - "/identities/{identityId}/role-assignments": { - "GET": "public" - }, - "/identities/{identityId}/role-assignments/{assignmentId}": { - "GET": "public" - }, - "/identities/{identity-id}/set-lifecycle-state": { - "POST": "public" - }, - "/identity-profiles/{identity-profile-id}/lifecycle-states": { - "GET": "public", - "POST": "public" - }, - "/identity-profiles/{identity-profile-id}/lifecycle-states/{lifecycle-state-id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/identity-profiles": { - "GET": "public", - "POST": "public" - }, - "/identity-profiles/bulk-delete": { - "POST": "public" - }, - "/identity-profiles/export": { - "GET": "public" - }, - "/identity-profiles/import": { - "POST": "public" - }, - "/identity-profiles/{identity-profile-id}": { - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/identity-profiles/{identity-profile-id}/default-identity-attribute-config": { - "GET": "public" - }, - "/identity-profiles/{identity-profile-id}/process-identities": { - "POST": "public" - }, - "/managed-clients": { - "GET": "public", - "POST": "public" - }, - "/managed-clients/{id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/managed-clients/{id}/status": { - "GET": "public" - }, - "/managed-clusters": { - "GET": "public", - "POST": "public" - }, - "/managed-clusters/{id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/managed-clusters/{id}/log-config": { - "GET": "public", - "PUT": "public" - }, - "/managed-clusters/{id}/manualUpgrade": { - "POST": "public" - }, - "/managed-cluster-types": { - "GET": "public", - "POST": "public" - }, - "/managed-cluster-types/{id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/mfa/okta-verify/config": { - "GET": "public", - "PUT": "public" - }, - "/mfa/duo-web/config": { - "GET": "public", - "PUT": "public" - }, - "/mfa/kba/config": { - "GET": "public" - }, - "/mfa/kba/config/answers": { - "POST": "public" - }, - "/mfa/{method}/test": { - "GET": "public" - }, - "/multihosts": { - "POST": "public", - "GET": "public" - }, - "/multihosts/types": { - "GET": "public" - }, - "/multihosts/{multihostId}": { - "POST": "public", - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/multihosts/{multihostId}/sources/testConnection": { - "POST": "public" - }, - "/multihosts/{multihostId}/sources/{sourceId}/testConnection": { - "GET": "public" - }, - "/multihosts/{multihostId}/sources": { - "GET": "public" - }, - "/multihosts/{multiHostId}/sources/errors": { - "GET": "public" - }, - "/multihosts/{multihostId}/acctAggregationGroups": { - "GET": "public" - }, - "/multihosts/{multiHostId}/entitlementAggregationGroups": { - "GET": "public" - }, - "/non-employee-records": { - "POST": "public", - "GET": "public" - }, - "/non-employee-records/{id}": { - "GET": "public", - "PUT": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/non-employee-records/bulk-delete": { - "POST": "public" - }, - "/non-employee-requests": { - "POST": "public", - "GET": "public" - }, - "/non-employee-requests/{id}": { - "GET": "public", - "DELETE": "public" - }, - "/non-employee-requests/summary/{requested-for}": { - "GET": "public" - }, - "/non-employee-sources": { - "POST": "public", - "GET": "public" - }, - "/non-employee-sources/{sourceId}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/non-employee-sources/{id}/non-employees/download": { - "GET": "public" - }, - "/non-employee-sources/{id}/non-employee-bulk-upload": { - "POST": "public" - }, - "/non-employee-sources/{id}/non-employee-bulk-upload/status": { - "GET": "public" - }, - "/non-employee-sources/{id}/schema-attributes-template/download": { - "GET": "public" - }, - "/non-employee-approvals": { - "GET": "public" - }, - "/non-employee-approvals/{id}": { - "GET": "public" - }, - "/non-employee-approvals/{id}/approve": { - "POST": "public" - }, - "/non-employee-approvals/{id}/reject": { - "POST": "public" - }, - "/non-employee-approvals/summary/{requested-for}": { - "GET": "public" - }, - "/non-employee-sources/{sourceId}/schema-attributes": { - "GET": "public", - "POST": "public", - "DELETE": "public" - }, - "/non-employee-sources/{sourceId}/schema-attributes/{attributeId}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/oauth-clients": { - "GET": "public", - "POST": "public" - }, - "/oauth-clients/{id}": { - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/password-sync-groups": { - "GET": "public", - "POST": "public" - }, - "/password-sync-groups/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/password-policies/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/password-policies": { - "POST": "public", - "GET": "public" - }, - "/personal-access-tokens": { - "GET": "public", - "POST": "public" - }, - "/personal-access-tokens/{id}": { - "PATCH": "public", - "DELETE": "public" - }, - "/public-identities": { - "GET": "public" - }, - "/public-identities-config": { - "GET": "public", - "PUT": "public" - }, - "/requestable-objects": { - "GET": "public" - }, - "/revocable-objects": { - "GET": "public-preview" - }, - "/roles": { - "GET": "public", - "POST": "public" - }, - "/roles/{id}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/roles/bulk-delete": { - "POST": "public" - }, - "/roles/{id}/assigned-identities": { - "GET": "public" - }, - "/roles/{roleId}/dimensions": { - "GET": "public", - "POST": "public" - }, - "/roles/{roleId}/dimensions/{dimensionId}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/roles/{roleId}/dimensions/bulk-delete": { - "POST": "public" - }, - "/roles/{roleId}/dimensions/{dimensionId}/access-profiles": { - "GET": "public" - }, - "/roles/{roleId}/dimensions/{dimensionId}/entitlements": { - "GET": "public" - }, - "/saved-searches": { - "POST": "public", - "GET": "public" - }, - "/saved-searches/{id}": { - "PUT": "public", - "GET": "public", - "DELETE": "public" - }, - "/saved-searches/{id}/execute": { - "POST": "public" - }, - "/scheduled-searches": { - "POST": "public", - "GET": "public" - }, - "/scheduled-searches/{id}": { - "PUT": "public", - "GET": "public", - "DELETE": "public" - }, - "/scheduled-searches/{id}/unsubscribe": { - "POST": "public" - }, - "/search": { - "POST": "public" - }, - "/search/count": { - "POST": "public" - }, - "/search/aggregate": { - "POST": "public" - }, - "/search/{index}/{id}": { - "GET": "public" - }, - "/segments": { - "POST": "public", - "GET": "public" - }, - "/segments/{id}": { - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/service-desk-integrations": { - "GET": "public", - "POST": "public" - }, - "/service-desk-integrations/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/service-desk-integrations/types": { - "GET": "public" - }, - "/service-desk-integrations/templates/{scriptName}": { - "GET": "public" - }, - "/service-desk-integrations/status-check-configuration": { - "GET": "public", - "PUT": "public" - }, - "/query-password-info": { - "POST": "public" - }, - "/set-password": { - "POST": "public" - }, - "/password-change-status/{id}": { - "GET": "public" - }, - "/password-dictionary": { - "GET": "public", - "PUT": "public" - }, - "/password-org-config": { - "GET": "public", - "PUT": "public", - "POST": "public" - }, - "/reports/{taskResultId}/result": { - "GET": "public" - }, - "/reports/run": { - "POST": "public" - }, - "/reports/{id}/cancel": { - "POST": "public" - }, - "/reports/{taskResultId}": { - "GET": "public" - }, - "/sod-policies": { - "POST": "public", - "GET": "public" - }, - "/sod-policies/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/sod-policies/{id}/evaluate": { - "POST": "public" - }, - "/sod-policies/{id}/schedule": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/sod-policies/{id}/violation-report/run": { - "POST": "public" - }, - "/sod-policies/{id}/violation-report": { - "GET": "public" - }, - "/sod-policies/sod-violation-report-status/{reportResultId}": { - "GET": "public" - }, - "/sod-violations/predict": { - "POST": "public" - }, - "/sod-violations/check": { - "POST": "public" - }, - "/sod-violation-report/run": { - "POST": "public" - }, - "/sod-violation-report": { - "GET": "public" - }, - "/sod-violation-report/{reportResultId}/download": { - "GET": "public" - }, - "/sod-violation-report/{reportResultId}/download/{fileName}": { - "GET": "public" - }, - "/sources": { - "GET": "public", - "POST": "public" - }, - "/sources/{id}": { - "GET": "public", - "PUT": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/provisioning-policies": { - "GET": "public", - "POST": "public" - }, - "/sources/{sourceId}/provisioning-policies/{usageType}": { - "GET": "public", - "PUT": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/provisioning-policies/bulk-update": { - "POST": "public" - }, - "/sources/{sourceId}/schemas": { - "GET": "public", - "POST": "public" - }, - "/sources/{sourceId}/schedules": { - "GET": "public", - "POST": "public" - }, - "/sources/{sourceId}/schedules/{scheduleType}": { - "GET": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/schemas/{schemaId}": { - "GET": "public", - "PUT": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/source-health": { - "GET": "public" - }, - "/sources/{id}/schemas/accounts": { - "GET": "public", - "POST": "public" - }, - "/sources/{id}/schemas/entitlements": { - "GET": "public", - "POST": "public" - }, - "/sources/{sourceId}/upload-connector-file": { - "POST": "public" - }, - "/sources/{sourceId}/connections": { - "GET": "public" - }, - "/sources/{id}/correlation-config": { - "GET": "public", - "PUT": "public" - }, - "/sources/{sourceId}/password-policies": { - "PATCH": "public" - }, - "/sources/{sourceId}/connector/check-connection": { - "POST": "public" - }, - "/sources/{sourceId}/connector/peek-resource-objects": { - "POST": "public" - }, - "/sources/{sourceId}/connector/ping-cluster": { - "POST": "public" - }, - "/sources/{sourceId}/connector/test-configuration": { - "POST": "public" - }, - "/sources/{id}/connectors/source-config": { - "GET": "public" - }, - "/sources/{sourceId}/native-change-detection-config": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/sources/{id}/remove-accounts": { - "POST": "public" - }, - "/sources/{id}/load-accounts": { - "POST": "public" - }, - "/sources/{id}/load-uncorrelated-accounts": { - "POST": "public" - }, - "/tagged-objects": { - "GET": "public", - "POST": "public" - }, - "/tagged-objects/{type}": { - "GET": "public" - }, - "/tagged-objects/{type}/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/tagged-objects/bulk-add": { - "POST": "public" - }, - "/tagged-objects/bulk-remove": { - "POST": "public" - }, - "/transforms": { - "GET": "public", - "POST": "public" - }, - "/transforms/{id}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/work-items": { - "GET": "public" - }, - "/work-items/completed": { - "GET": "public" - }, - "/work-items/count": { - "GET": "public" - }, - "/work-items/completed/count": { - "GET": "public-preview" - }, - "/work-items/summary": { - "GET": "public" - }, - "/work-items/{id}": { - "GET": "public", - "POST": "public" - }, - "/work-items/{id}/approve/{approvalItemId}": { - "POST": "public" - }, - "/work-items/{id}/reject/{approvalItemId}": { - "POST": "public" - }, - "/work-items/bulk-approve/{id}": { - "POST": "public" - }, - "/work-items/bulk-reject/{id}": { - "POST": "public" - }, - "/work-items/{id}/submit-account-selection": { - "POST": "public" - }, - "/workflows": { - "GET": "public", - "POST": "public" - }, - "/workflows/{id}": { - "GET": "public", - "PUT": "public", - "PATCH": "public", - "DELETE": "public" - }, - "/workflows/{id}/test": { - "POST": "public" - }, - "/workflows/{id}/executions": { - "GET": "public" - }, - "/workflow-executions/{id}": { - "GET": "public" - }, - "/workflow-executions/{id}/history": { - "GET": "public" - }, - "/workflow-executions/{id}/cancel": { - "POST": "public" - }, - "/workflow-library": { - "GET": "public" - }, - "/workflow-library/actions": { - "GET": "public" - }, - "/workflow-library/triggers": { - "GET": "public" - }, - "/workflow-library/operators": { - "GET": "public" - }, - "/workflows/{id}/external/oauth-clients": { - "POST": "public" - }, - "/workflows/execute/external/{id}": { - "POST": "public" - }, - "/workflows/execute/external/{id}/test": { - "POST": "public" - }, - "/source-usages/{sourceId}/status": { - "GET": "public" - }, - "/source-usages/{sourceId}/summaries": { - "GET": "public" - }, - "/account-usages/{accountId}/summaries": { - "GET": "public" - }, - "/identity-profiles/identity-preview": { - "POST": "public-preview" - }, - "/work-items/{id}/forward": { - "POST": "public-preview" - }, - "/accounts/search-attribute-config": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/accounts/search-attribute-config/{name}": { - "GET": "public-preview", - "DELETE": "public-preview", - "PATCH": "public-preview" - }, - "/access-model-metadata/attributes": { - "GET": "public" - }, - "/access-model-metadata/attributes/{key}": { - "GET": "public" - }, - "/access-model-metadata/attributes/{key}/values": { - "GET": "public" - }, - "/access-model-metadata/attributes/{key}/values/{value}": { - "GET": "public" - }, - "/access-model-metadata/bulk-update/filter": { - "POST": "public" - }, - "/access-model-metadata/bulk-update/query": { - "POST": "public" - }, - "/access-model-metadata/bulk-update/ids": { - "POST": "public" - }, - "/access-profiles/bulk-update-requestable": { - "POST": "public-preview" - }, - "/ai-access-request-recommendations": { - "GET": "public-preview" - }, - "/ai-access-request-recommendations/config": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/ai-access-request-recommendations/ignored-items": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/ai-access-request-recommendations/requested-items": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/ai-access-request-recommendations/viewed-items": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/ai-access-request-recommendations/viewed-items/bulk-create": { - "POST": "public-preview" - }, - "/authorization/custom-user-levels": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/authorization/custom-user-levels/{id}/publish": { - "POST": "public-preview" - }, - "/authorization/custom-user-levels/{id}": { - "GET": "public-preview", - "DELETE": "public-preview", - "PATCH": "public-preview" - }, - "/authorization/authorization-assignable-right-sets": { - "GET": "public-preview" - }, - "/auth-profiles": { - "GET": "public-preview" - }, - "/auth-profiles/{id}": { - "GET": "public-preview", - "PATCH": "public-preview" - }, - "/custom-password-instructions": { - "POST": "public-preview" - }, - "/custom-password-instructions/{pageId}": { - "GET": "public-preview", - "DELETE": "public-preview" - }, - "/entitlements": { - "GET": "public" - }, - "/entitlements/{id}": { - "GET": "public", - "PATCH": "public" - }, - "/entitlements/{id}/parents": { - "GET": "public" - }, - "/entitlements/{id}/children": { - "GET": "public" - }, - "/entitlements/bulk-update": { - "POST": "public" - }, - "/entitlements/{id}/entitlement-request-config": { - "GET": "public", - "PUT": "public" - }, - "/entitlements/reset/sources/{id}": { - "POST": "public" - }, - "/entitlements/{id}/access-model-metadata/{attributeKey}/values/{attributeValue}": { - "POST": "public", - "DELETE": "public" - }, - "/entitlements/aggregate/sources/{id}": { - "POST": "public" - }, - "/entitlements/identities/{id}/entitlements": { - "GET": "public" - }, - "/generate-password-reset-token/digit": { - "POST": "public-preview" - }, - "/historical-identities": { - "GET": "public-preview" - }, - "/historical-identities/{id}": { - "GET": "public-preview" - }, - "/historical-identities/{id}/access-items": { - "GET": "public-preview" - }, - "/historical-identities/{id}/snapshots": { - "GET": "public-preview" - }, - "/historical-identities/{id}/snapshot-summary": { - "GET": "public-preview" - }, - "/historical-identities/{id}/snapshots/{date}": { - "GET": "public-preview" - }, - "/historical-identities/{id}/snapshots/{date}/access-items": { - "GET": "public-preview" - }, - "/common-access": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/common-access/update-status": { - "POST": "public-preview" - }, - "/historical-identities/{id}/events": { - "GET": "public-preview" - }, - "/historical-identities/{id}/start-date": { - "GET": "public-preview" - }, - "/historical-identities/{id}/compare": { - "GET": "public-preview" - }, - "/historical-identities/{id}/compare/{access-type}": { - "GET": "public-preview" - }, - "/identities/{identityId}/synchronize-attributes": { - "POST": "public-preview" - }, - "/identities/invite": { - "POST": "public" - }, - "/identities/{id}/verification/account/send": { - "POST": "public-preview" - }, - "/identities/process": { - "POST": "public-preview" - }, - "/identity-attributes": { - "GET": "public", - "POST": "public" - }, - "/identity-attributes/{name}": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/identity-attributes/bulk-delete": { - "DELETE": "public" - }, - "/mail-from-attributes": { - "PUT": "public-preview" - }, - "/mail-from-attributes/{identity}": { - "GET": "public-preview" - }, - "/generic-approvals": { - "GET": "public-preview" - }, - "/generic-approvals/{id}": { - "GET": "public-preview" - }, - "/machine-accounts": { - "GET": "public-preview" - }, - "/machine-accounts/{id}": { - "GET": "public-preview", - "PATCH": "public-preview" - }, - "/sources/{sourceId}/machine-classification-config": { - "GET": "public", - "PUT": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/machine-account-mappings": { - "GET": "public", - "POST": "public", - "DELETE": "public" - }, - "/sources/{sourceId}/machine-mappings": { - "PUT": "public" - }, - "/sources/{sourceId}/classify": { - "POST": "public", - "DELETE": "public", - "GET": "public" - }, - "/accounts/{id}/classify": { - "POST": "public" - }, - "/machine-identities": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/machine-identities/{id}": { - "GET": "public-preview", - "PATCH": "public-preview", - "DELETE": "public-preview" - }, - "/notification-template-defaults": { - "GET": "public-preview" - }, - "/notification-templates": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/notification-templates/{id}": { - "GET": "public-preview" - }, - "/notification-templates/bulk-delete": { - "POST": "public-preview" - }, - "/org-config": { - "GET": "public", - "PATCH": "public" - }, - "/org-config/valid-time-zones": { - "GET": "public-preview" - }, - "/outlier-summaries": { - "GET": "public-preview" - }, - "/outlier-summaries/latest": { - "GET": "public-preview" - }, - "/outliers": { - "GET": "public-preview" - }, - "/outliers/{outlierId}/contributing-features": { - "GET": "public-preview" - }, - "/outliers/{outlierId}/feature-details/{contributingFeatureName}/access-items": { - "GET": "public-preview" - }, - "/outliers/ignore": { - "POST": "public-preview" - }, - "/outliers/unignore": { - "POST": "public-preview" - }, - "/outliers/export": { - "GET": "public-preview" - }, - "/outlier-feature-summaries/{outlierFeatureId}": { - "GET": "public-preview" - }, - "/peer-group-strategies/{strategy}/identity-outliers": { - "GET": "public-preview" - }, - "/notification-template-context": { - "GET": "public-preview" - }, - "/notification-preferences/{key}": { - "GET": "public-preview" - }, - "/reassignment-configurations/types": { - "GET": "public-preview" - }, - "/reassignment-configurations": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/reassignment-configurations/{identityId}": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/reassignment-configurations/{identityId}/{configType}": { - "DELETE": "public-preview" - }, - "/reassignment-configurations/{identityId}/evaluate/{configType}": { - "GET": "public-preview" - }, - "/reassignment-configurations/tenant-config": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/recommendations/request": { - "POST": "public-preview" - }, - "/recommendations/config": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/role-insights/requests": { - "POST": "public-preview" - }, - "/role-insights/requests/{id}": { - "GET": "public-preview" - }, - "/role-insights/summary": { - "GET": "public-preview" - }, - "/role-insights": { - "GET": "public-preview" - }, - "/role-insights/{insightId}": { - "GET": "public-preview" - }, - "/role-insights/{insightId}/entitlement-changes": { - "GET": "public-preview" - }, - "/role-insights/{insightId}/entitlement-changes/download": { - "GET": "public-preview" - }, - "/role-insights/{insightId}/current-entitlements": { - "GET": "public-preview" - }, - "/role-insights/{insightId}/entitlement-changes/{entitlementId}/identities": { - "GET": "public-preview" - }, - "/role-mining-sessions": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}": { - "PATCH": "public-preview", - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/status": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-role-summaries": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}": { - "GET": "public-preview", - "PATCH": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}/applications": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-role-summaries/{potentialRoleId}/entitlements": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularities": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/entitlement-popularity-distribution": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/edit-entitlements": { - "POST": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/identities": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async": { - "POST": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/export-async/{exportId}/download": { - "GET": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/provision": { - "POST": "public-preview" - }, - "/role-mining-sessions/{sessionId}/potential-roles/{potentialRoleId}/excluded-entitlements": { - "GET": "public-preview" - }, - "/role-mining-potential-roles": { - "GET": "public-preview" - }, - "/role-mining-potential-roles/{potentialRoleId}": { - "GET": "public-preview", - "PATCH": "public-preview" - }, - "/role-mining-potential-roles/saved": { - "GET": "public-preview" - }, - "/role-mining-potential-roles/{potentialRoleId}/sources/{sourceId}/identityUsage": { - "GET": "public-preview" - }, - "/roles/{id}/entitlements": { - "GET": "public-preview" - }, - "/send-test-notification": { - "POST": "public-preview" - }, - "/sim-integrations/{id}": { - "PUT": "public-preview", - "GET": "public-preview", - "DELETE": "public-preview", - "PATCH": "public-preview" - }, - "/sim-integrations/{id}/beforeProvisioningRule": { - "PATCH": "public-preview" - }, - "/sim-integrations": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/sp-config/export": { - "POST": "public" - }, - "/sp-config/export/{id}": { - "GET": "public" - }, - "/sp-config/export/{id}/download": { - "GET": "public" - }, - "/sp-config/import": { - "POST": "public" - }, - "/sp-config/import/{id}": { - "GET": "public" - }, - "/sp-config/import/{id}/download": { - "GET": "public" - }, - "/sp-config/config-objects": { - "GET": "public" - }, - "/sources/{id}/attribute-sync-config": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/sources/{id}/synchronize-attributes": { - "POST": "public-preview" - }, - "/sources/{id}/entitlement-request-config": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/sources/{sourceId}/load-entitlements": { - "POST": "public" - }, - "/task-status/{id}": { - "GET": "public", - "PATCH": "public" - }, - "/task-status": { - "GET": "public" - }, - "/task-status/pending-tasks": { - "GET": "public", - "HEAD": "public" - }, - "/tenant": { - "GET": "public" - }, - "/tenant-context": { - "GET": "public-preview", - "PATCH": "public-preview" - }, - "/triggers": { - "GET": "public-preview" - }, - "/trigger-subscriptions": { - "POST": "public-preview", - "GET": "public-preview" - }, - "/trigger-subscriptions/{id}": { - "PUT": "public-preview", - "PATCH": "public-preview", - "DELETE": "public-preview" - }, - "/trigger-subscriptions/validate-filter": { - "POST": "public-preview" - }, - "/trigger-invocations/status": { - "GET": "public-preview" - }, - "/trigger-invocations/{id}/complete": { - "POST": "public-preview" - }, - "/trigger-invocations/test": { - "POST": "public-preview" - }, - "/ui-metadata/tenant": { - "GET": "public-preview", - "PUT": "public-preview" - }, - "/verified-from-addresses": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/verified-from-addresses/{id}": { - "DELETE": "public-preview" - }, - "/verified-domains": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/workgroups": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/workgroups/{id}": { - "GET": "public-preview", - "DELETE": "public-preview", - "PATCH": "public-preview" - }, - "/workgroups/bulk-delete": { - "POST": "public-preview" - }, - "/workgroups/{workgroupId}/connections": { - "GET": "public-preview" - }, - "/workgroups/{workgroupId}/members": { - "GET": "public-preview" - }, - "/workgroups/{workgroupId}/members/bulk-add": { - "POST": "public-preview" - }, - "/workgroups/{workgroupId}/members/bulk-delete": { - "POST": "public-preview" - }, - "/form-definitions": { - "GET": "public", - "POST": "public" - }, - "/form-definitions/{formDefinitionID}": { - "GET": "public", - "DELETE": "public", - "PATCH": "public" - }, - "/form-definitions/{formDefinitionID}/data-source": { - "POST": "public" - }, - "/form-definitions/export": { - "GET": "public" - }, - "/form-definitions/forms-action-dynamic-schema": { - "POST": "public" - }, - "/form-definitions/import": { - "POST": "public" - }, - "/form-definitions/{formDefinitionID}/upload": { - "POST": "public" - }, - "/form-definitions/{formDefinitionID}/file/{fileID}": { - "GET": "public" - }, - "/form-instances": { - "GET": "public", - "POST": "public" - }, - "/form-instances/{formInstanceID}": { - "GET": "public", - "PATCH": "public" - }, - "/form-instances/{formInstanceID}/data-source/{formElementID}": { - "GET": "public" - }, - "/form-instances/{formInstanceID}/file/{fileID}": { - "GET": "public" - }, - "/form-definitions/predefined-select-options": { - "GET": "public" - }, - "/access-request-identity-metrics/{identityId}/requested-objects/{requestedObjectId}/type/{type}": { - "GET": "public" - }, - "/icons/{objectType}/{objectId}": { - "PUT": "public-preview", - "DELETE": "public-preview" - }, - "/suggested-entitlement-description-batches/{batchId}/stats": { - "GET": "public" - }, - "/suggested-entitlement-description-batches": { - "GET": "public", - "POST": "public" - }, - "/suggested-entitlement-description-approvals": { - "POST": "public" - }, - "/suggested-entitlement-description-assignments": { - "POST": "public" - }, - "/suggested-entitlement-descriptions": { - "GET": "public", - "PATCH": "public" - }, - "/discovered-applications": { - "GET": "public" - }, - "/manual-discover-applications-template": { - "GET": "public" - }, - "/manual-discover-applications": { - "POST": "public" - }, - "/vendor-connector-mappings": { - "GET": "public", - "POST": "public", - "DELETE": "public" - }, - "/source-apps/{id}": { - "GET": "public-preview", - "PATCH": "public-preview", - "DELETE": "public-preview" - }, - "/source-apps/bulk-update": { - "POST": "public-preview" - }, - "/source-apps/assigned": { - "GET": "public-preview" - }, - "/source-apps": { - "GET": "public-preview", - "POST": "public-preview" - }, - "/source-apps/all": { - "GET": "public-preview" - }, - "/source-apps/{id}/access-profiles": { - "GET": "public-preview" - }, - "/source-apps/{id}/access-profiles/bulk-remove": { - "POST": "public-preview" - }, - "/user-apps/{id}": { - "PATCH": "public-preview" - }, - "/user-apps/{id}/available-accounts": { - "GET": "public-preview" - }, - "/user-apps": { - "GET": "public-preview" - }, - "/user-apps/all": { - "GET": "public-preview" - }, - "/roles/{id}/access-model-metadata/{attributeKey}/values/{attributeValue}": { - "POST": "public", - "DELETE": "public" - }, - "/roles/access-model-metadata/bulk-update/ids": { - "POST": "public" - }, - "/roles/access-model-metadata/bulk-update/filter": { - "POST": "public" - }, - "/roles/access-model-metadata/bulk-update/query": { - "POST": "public" - }, - "/roles/access-model-metadata/bulk-update/id": { - "GET": "public" - }, - "/roles/access-model-metadata/bulk-update": { - "GET": "public" - }, - "/roles/filter": { - "POST": "public" - } - } -} \ No newline at end of file From 0a26f5bcdfa0d2eeb9fb58c5c4d8afe83d4a8720 Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Fri, 1 Aug 2025 14:21:06 -0400 Subject: [PATCH 05/16] test workflow run --- .github/workflows/Preview.yaml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/Preview.yaml b/.github/workflows/Preview.yaml index bf0116c..7cd34bc 100644 --- a/.github/workflows/Preview.yaml +++ b/.github/workflows/Preview.yaml @@ -34,6 +34,23 @@ jobs: - name: Run Tests run: pnpm test + - name: Checkout Spectral Action + uses: actions/checkout@v4 + with: + repository: sailpoint-oss/api-specs + path: api-specs + ref: main + + - name: Set Operation ID Environment Variables + run: | + npm install -g speccy@0.8.7 + speccy resolve --quiet ../idn/sailpoint-api.v2024.yaml -o packages/gateway-rulesets/src/v2024.yaml + speccy resolve --quiet ../idn/sailpoint-api.v2025.yaml -o packages/gateway-rulesets/src/v2025.yaml + + - name: generate API State Map + working-directory: packages/gateway-rulesets/src + run: node ../../../generateApiStateMap.js + - name: Preview Action uses: ./packages/github-spectral-comment continue-on-error: true From f1b92f8b79947fcc04631c7482be9d5607682244 Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Fri, 1 Aug 2025 14:26:37 -0400 Subject: [PATCH 06/16] update file path and name for speccy resolve step --- .github/workflows/Preview.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/Preview.yaml b/.github/workflows/Preview.yaml index 7cd34bc..9436b6f 100644 --- a/.github/workflows/Preview.yaml +++ b/.github/workflows/Preview.yaml @@ -34,18 +34,18 @@ jobs: - name: Run Tests run: pnpm test - - name: Checkout Spectral Action + - name: Checkout API Specs uses: actions/checkout@v4 with: repository: sailpoint-oss/api-specs path: api-specs ref: main - - name: Set Operation ID Environment Variables + - name: Speccy Resolve run: | npm install -g speccy@0.8.7 - speccy resolve --quiet ../idn/sailpoint-api.v2024.yaml -o packages/gateway-rulesets/src/v2024.yaml - speccy resolve --quiet ../idn/sailpoint-api.v2025.yaml -o packages/gateway-rulesets/src/v2025.yaml + speccy resolve --quiet ../../api-specs/idn/sailpoint-api.v2024.yaml -o packages/gateway-rulesets/src/v2024.yaml + speccy resolve --quiet ../../api-specs/idn/sailpoint-api.v2025.yaml -o packages/gateway-rulesets/src/v2025.yaml - name: generate API State Map working-directory: packages/gateway-rulesets/src From 46cd5eb103644bff09735be61daa47e3f5b1a228 Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Fri, 1 Aug 2025 14:40:11 -0400 Subject: [PATCH 07/16] path change --- .github/workflows/Preview.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Preview.yaml b/.github/workflows/Preview.yaml index 9436b6f..a02d380 100644 --- a/.github/workflows/Preview.yaml +++ b/.github/workflows/Preview.yaml @@ -44,8 +44,8 @@ jobs: - name: Speccy Resolve run: | npm install -g speccy@0.8.7 - speccy resolve --quiet ../../api-specs/idn/sailpoint-api.v2024.yaml -o packages/gateway-rulesets/src/v2024.yaml - speccy resolve --quiet ../../api-specs/idn/sailpoint-api.v2025.yaml -o packages/gateway-rulesets/src/v2025.yaml + speccy resolve --quiet api-specs/idn/sailpoint-api.v2024.yaml -o packages/gateway-rulesets/src/v2024.yaml + speccy resolve --quiet api-specs/idn/sailpoint-api.v2025.yaml -o packages/gateway-rulesets/src/v2025.yaml - name: generate API State Map working-directory: packages/gateway-rulesets/src From f325a3885ac9617a3ae780ba8e0606ccb332cdd6 Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Fri, 1 Aug 2025 14:47:05 -0400 Subject: [PATCH 08/16] path change --- .github/workflows/Preview.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Preview.yaml b/.github/workflows/Preview.yaml index a02d380..92c53dc 100644 --- a/.github/workflows/Preview.yaml +++ b/.github/workflows/Preview.yaml @@ -44,8 +44,8 @@ jobs: - name: Speccy Resolve run: | npm install -g speccy@0.8.7 - speccy resolve --quiet api-specs/idn/sailpoint-api.v2024.yaml -o packages/gateway-rulesets/src/v2024.yaml - speccy resolve --quiet api-specs/idn/sailpoint-api.v2025.yaml -o packages/gateway-rulesets/src/v2025.yaml + speccy resolve --quiet api-specs/idn/sailpoint-api.v2024.yaml -o ../packages/gateway-rulesets/src/v2024.yaml + speccy resolve --quiet api-specs/idn/sailpoint-api.v2025.yaml -o ../packages/gateway-rulesets/src/v2025.yaml - name: generate API State Map working-directory: packages/gateway-rulesets/src From d182e0e6433f7539d3fccc4cd4027372c108aeb7 Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Fri, 1 Aug 2025 14:50:05 -0400 Subject: [PATCH 09/16] path change --- generateApiStateMap.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/generateApiStateMap.js b/generateApiStateMap.js index c8c3c1c..6574983 100644 --- a/generateApiStateMap.js +++ b/generateApiStateMap.js @@ -178,8 +178,8 @@ class OpenAPIParser { // Example usage - replace with your actual file paths const filePaths = [ - './2025.yaml', - './2024.yaml', + '2025.yaml', + '2024.yaml', // Add more file paths as needed ]; From df8f0f254e704c9fff69cba1fd92d931fc6cdd0e Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Fri, 1 Aug 2025 15:14:18 -0400 Subject: [PATCH 10/16] path change --- .github/workflows/Preview.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Preview.yaml b/.github/workflows/Preview.yaml index 92c53dc..a02d380 100644 --- a/.github/workflows/Preview.yaml +++ b/.github/workflows/Preview.yaml @@ -44,8 +44,8 @@ jobs: - name: Speccy Resolve run: | npm install -g speccy@0.8.7 - speccy resolve --quiet api-specs/idn/sailpoint-api.v2024.yaml -o ../packages/gateway-rulesets/src/v2024.yaml - speccy resolve --quiet api-specs/idn/sailpoint-api.v2025.yaml -o ../packages/gateway-rulesets/src/v2025.yaml + speccy resolve --quiet api-specs/idn/sailpoint-api.v2024.yaml -o packages/gateway-rulesets/src/v2024.yaml + speccy resolve --quiet api-specs/idn/sailpoint-api.v2025.yaml -o packages/gateway-rulesets/src/v2025.yaml - name: generate API State Map working-directory: packages/gateway-rulesets/src From 43b577b28053c8186d2455616fedc641407ba0d5 Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Fri, 1 Aug 2025 15:18:03 -0400 Subject: [PATCH 11/16] logging to test path --- .github/workflows/Preview.yaml | 2 ++ generateApiStateMap.js | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Preview.yaml b/.github/workflows/Preview.yaml index a02d380..fbca3b3 100644 --- a/.github/workflows/Preview.yaml +++ b/.github/workflows/Preview.yaml @@ -45,6 +45,8 @@ jobs: run: | npm install -g speccy@0.8.7 speccy resolve --quiet api-specs/idn/sailpoint-api.v2024.yaml -o packages/gateway-rulesets/src/v2024.yaml + echo "✅ Output path for v2024.yaml: $(pwd)/packages/gateway-rulesets/src/v2024.yaml" + ls -l packages/gateway-rulesets/src/v2024.yaml || echo "❌ v2024.yaml not found" speccy resolve --quiet api-specs/idn/sailpoint-api.v2025.yaml -o packages/gateway-rulesets/src/v2025.yaml - name: generate API State Map diff --git a/generateApiStateMap.js b/generateApiStateMap.js index 6574983..d650994 100644 --- a/generateApiStateMap.js +++ b/generateApiStateMap.js @@ -178,8 +178,8 @@ class OpenAPIParser { // Example usage - replace with your actual file paths const filePaths = [ - '2025.yaml', - '2024.yaml', + '/2025.yaml', + './2024.yaml', // Add more file paths as needed ]; From a187a1b6d37f09476c806c45e74e0ff4cf84661a Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Fri, 1 Aug 2025 15:23:25 -0400 Subject: [PATCH 12/16] logging to test path --- .github/workflows/Preview.yaml | 4 ++-- generateApiStateMap.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/Preview.yaml b/.github/workflows/Preview.yaml index fbca3b3..d9f720a 100644 --- a/.github/workflows/Preview.yaml +++ b/.github/workflows/Preview.yaml @@ -44,10 +44,10 @@ jobs: - name: Speccy Resolve run: | npm install -g speccy@0.8.7 - speccy resolve --quiet api-specs/idn/sailpoint-api.v2024.yaml -o packages/gateway-rulesets/src/v2024.yaml + speccy resolve --quiet api-specs/idn/sailpoint-api.v2024.yaml -o packages/gateway-rulesets/src/2024.yaml echo "✅ Output path for v2024.yaml: $(pwd)/packages/gateway-rulesets/src/v2024.yaml" ls -l packages/gateway-rulesets/src/v2024.yaml || echo "❌ v2024.yaml not found" - speccy resolve --quiet api-specs/idn/sailpoint-api.v2025.yaml -o packages/gateway-rulesets/src/v2025.yaml + speccy resolve --quiet api-specs/idn/sailpoint-api.v2025.yaml -o packages/gateway-rulesets/src/2025.yaml - name: generate API State Map working-directory: packages/gateway-rulesets/src diff --git a/generateApiStateMap.js b/generateApiStateMap.js index d650994..c8c3c1c 100644 --- a/generateApiStateMap.js +++ b/generateApiStateMap.js @@ -178,7 +178,7 @@ class OpenAPIParser { // Example usage - replace with your actual file paths const filePaths = [ - '/2025.yaml', + './2025.yaml', './2024.yaml', // Add more file paths as needed ]; From a58573d45fd234b069ec23ac24fc4b466eacfc5d Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Fri, 1 Aug 2025 15:26:39 -0400 Subject: [PATCH 13/16] remove logging from speccy resolve step --- .github/workflows/Preview.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/Preview.yaml b/.github/workflows/Preview.yaml index d9f720a..75d563e 100644 --- a/.github/workflows/Preview.yaml +++ b/.github/workflows/Preview.yaml @@ -45,8 +45,6 @@ jobs: run: | npm install -g speccy@0.8.7 speccy resolve --quiet api-specs/idn/sailpoint-api.v2024.yaml -o packages/gateway-rulesets/src/2024.yaml - echo "✅ Output path for v2024.yaml: $(pwd)/packages/gateway-rulesets/src/v2024.yaml" - ls -l packages/gateway-rulesets/src/v2024.yaml || echo "❌ v2024.yaml not found" speccy resolve --quiet api-specs/idn/sailpoint-api.v2025.yaml -o packages/gateway-rulesets/src/2025.yaml - name: generate API State Map From 8d036f2195936fd71da95d279c1e9297231b2cb5 Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Fri, 8 Aug 2025 14:39:11 -0400 Subject: [PATCH 14/16] udpate to check v2025 versions and fix issue with false positives --- .../gateway-rulesets/src/check-api-state.ts | 99 ++++++++++++++----- 1 file changed, 75 insertions(+), 24 deletions(-) diff --git a/packages/gateway-rulesets/src/check-api-state.ts b/packages/gateway-rulesets/src/check-api-state.ts index ee2ae18..4490366 100644 --- a/packages/gateway-rulesets/src/check-api-state.ts +++ b/packages/gateway-rulesets/src/check-api-state.ts @@ -143,32 +143,71 @@ function validateRouteWithData( const versionKey = String(route.versionStart); const versionData = apiStates[versionKey]; + + // If version is 2024, also check 2025 + const shouldCheckV2025 = versionKey === "2024"; + const v2025Data = shouldCheckV2025 ? apiStates["2025"] : null; - if (!versionData) { - return `No API state data for version ${versionKey}`; + if (!versionData && !v2025Data) { + return `No API state data for version ${versionKey}${shouldCheckV2025 ? ' or 2025' : ''}`; } const normalizedRoutePath = normalizePath(route.path); - // First check exact match - let pathData = versionData[normalizedRoutePath]; - let isPrefix = false; - - // If no exact match, check for prefix matches - if (!pathData) { - // Check if any paths in the data start with our route path (prefix matching) - for (const [dataPath, methods] of Object.entries(versionData)) { - const normalizedDataPath = normalizePath(dataPath); - if (normalizedDataPath.startsWith(normalizedRoutePath + "/")) { - pathData = methods; - isPrefix = true; - break; + // Helper function to find path in version data + function findPathInVersion(vData: any) { + if (!vData) return null; + + // First check exact match with the original path + let pathData = vData[route.path]; + + // If not found, try with normalized path + if (!pathData) { + pathData = vData[normalizedRoutePath]; + } + + // Handle typo in API state data: "identites" vs "identities" + // The route has the correct spelling "identities" but API data might have "identites" + if (!pathData && route.path.includes('/identities/')) { + const typoPath = route.path.replace('/identities/', '/identites/'); + pathData = vData[typoPath]; + } + + // If no exact match, check for prefix matches + if (!pathData) { + for (const [dataPath, methods] of Object.entries(vData)) { + const normalizedDataPath = normalizePath(dataPath); + if (normalizedDataPath.startsWith(normalizedRoutePath + "/")) { + pathData = methods; + break; + } } } + + return pathData; } - if (!pathData) { - return `Path not found in ${versionKey} API state data (checked both exact and prefix matches)`; + // Check in 2024 + let pathDataIn2024 = findPathInVersion(versionData); + + // Check in 2025 if applicable + let pathDataIn2025 = null; + if (shouldCheckV2025 && v2025Data) { + pathDataIn2025 = findPathInVersion(v2025Data); + } + + // Determine which version to use for validation and what to report + let pathData = pathDataIn2024 || pathDataIn2025; + let foundInVersion = pathDataIn2024 ? "2024" : "2025"; + + // Report based on where the path was found + if (!pathDataIn2024 && !pathDataIn2025) { + // Not found in either version + const versionsChecked = shouldCheckV2025 ? "2024 or 2025" : versionKey; + return `Path not found in ${versionsChecked} API state data (checked both exact and prefix matches)`; + } else if (!pathDataIn2024 && pathDataIn2025 && shouldCheckV2025) { + // Found in 2025 but not in 2024 - report it's missing from 2024 only + return `Path not found in 2024 API state data (but exists in 2025)`; } // Check if any method has experimental state @@ -183,7 +222,7 @@ function validateRouteWithData( // Validate based on route's declared state if (route.apiState === "public-preview") { if (!hasPublicPreview && hasPublic) { - return `Path ${route.path} is marked as 'public-preview' in gateway routes but all methods are 'public' in API state data`; + return `Path ${route.path} is marked as 'public-preview' in gateway routes but all methods are 'public' in ${foundInVersion} API state data`; } } else if (route.apiState === "public") { if (hasPublicPreview) { @@ -191,7 +230,7 @@ function validateRouteWithData( .filter(([_, state]) => state === "public-preview") .map(([method, _]) => method) .join(", "); - return `Path ${route.path} is marked as 'public' in gateway routes but has 'public-preview' methods (${previewMethods}) in API state data`; + return `Path ${route.path} is marked as 'public' in gateway routes but has 'public-preview' methods (${previewMethods}) in ${foundInVersion} API state data`; } } @@ -239,13 +278,25 @@ export default createOptionalContextRulesetFunction( // Extract just the key issue from the message let shortMessage = validationIssue; if (validationIssue.includes("not found in")) { - shortMessage = `Path not found in ${targetVal.versionStart} API state data`; + // Check if we looked in both 2024 and 2025 + if (validationIssue.includes("2024 or 2025")) { + shortMessage = `Path not found in 2024 or 2025 API state data`; + } else if (validationIssue.includes("but exists in 2025")) { + shortMessage = `Path not found in 2024 API state data (but exists in 2025)`; + } else { + shortMessage = `Path not found in ${targetVal.versionStart} API state data`; + } } else if (validationIssue.includes("all methods are 'public'")) { - shortMessage = `Marked as 'public-preview' but all methods are 'public'`; + // Extract version from the message if present + const versionMatch = validationIssue.match(/in (\d{4}) API state data/); + const version = versionMatch ? versionMatch[1] : ""; + shortMessage = `Marked as 'public-preview' but all methods are 'public'${version ? ` in ${version}` : ''}`; } else if (validationIssue.includes("has 'public-preview' methods")) { - const match = validationIssue.match(/\(([^)]+)\)/); - const methods = match ? match[1] : "some methods"; - shortMessage = `Marked as 'public' but ${methods} are 'public-preview'`; + const methodMatch = validationIssue.match(/\(([^)]+)\)/); + const methods = methodMatch ? methodMatch[1] : "some methods"; + const versionMatch = validationIssue.match(/in (\d{4}) API state data/); + const version = versionMatch ? versionMatch[1] : ""; + shortMessage = `Marked as 'public' but ${methods} are 'public-preview'${version ? ` in ${version}` : ''}`; } results.push({ From cfbdb286b037e780bc9b116f8f7ea79fd90c9ebf Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Wed, 20 Aug 2025 09:29:17 -0400 Subject: [PATCH 15/16] update generateApiStateMap.js to include a local flag to run locally --- generateApiStateMap.js | 72 +- package-lock.json | 1736 ++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 1798 insertions(+), 11 deletions(-) create mode 100644 package-lock.json diff --git a/generateApiStateMap.js b/generateApiStateMap.js index c8c3c1c..6abbfbd 100644 --- a/generateApiStateMap.js +++ b/generateApiStateMap.js @@ -1,6 +1,7 @@ import fs from "fs/promises"; import yaml from "js-yaml"; import path from "path"; +import SwaggerParser from "@apidevtools/swagger-parser"; /** * Parses OpenAPI specification files and generates a structured object @@ -18,14 +19,22 @@ class OpenAPIParser { for (const filePath of filePaths) { try { - // Extract filename without extension as the top-level key + // Extract version year from filename (e.g., "2024" from "sailpoint-api.v2024.yaml" or "2024.yaml") const fileName = path.basename(filePath, path.extname(filePath)); + let versionKey = fileName; - // Read and parse the spec file - const specData = await this.readSpecFile(filePath); + // Extract year from various filename patterns + if (fileName.includes('2024')) { + versionKey = '2024'; + } else if (fileName.includes('2025')) { + versionKey = '2025'; + } + + // Use SwaggerParser to resolve all $ref references + const specData = await SwaggerParser.dereference(filePath); // Process the spec and add to result - result[fileName] = this.processSpec(specData); + result[versionKey] = this.processSpec(specData); } catch (error) { console.error(`Error processing file ${filePath}:`, error.message); @@ -176,21 +185,62 @@ class OpenAPIParser { try { const parser = new OpenAPIParser(); - // Example usage - replace with your actual file paths - const filePaths = [ - './2025.yaml', - './2024.yaml', - // Add more file paths as needed - ]; + // Check if running in local mode (passed as command line argument) + const isLocal = process.argv.includes('--local'); + + let filePaths; + + if (isLocal) { + // Local mode: use api-specs directory + console.log('Running in local mode - using api-specs directory'); + filePaths = [ + './api-specs/idn/sailpoint-api.v2025.yaml', + './api-specs/idn/sailpoint-api.v2024.yaml', + ]; + } else { + // GitHub Actions mode: use root directory files + console.log('Running in GitHub Actions mode - using root directory'); + filePaths = [ + './2025.yaml', + './2024.yaml', + ]; + + // Check if files exist in GitHub Actions mode + const missingFiles = []; + for (const filePath of filePaths) { + try { + await fs.access(filePath); + } catch { + missingFiles.push(filePath); + } + } + + if (missingFiles.length > 0) { + console.warn('\nWarning: The following files are not present locally:'); + missingFiles.forEach(file => console.warn(` - ${file}`)); + console.warn('\nThese files are expected to exist in the GitHub Actions environment.'); + console.warn('Use --local flag to run with local api-specs directory:\n node generateApiStateMap.js --local\n'); + } + } const result = await parser.parseSpecFiles(filePaths); + // Check if result is empty + if (Object.keys(result).length === 0) { + console.warn('Warning: No API specifications were successfully processed.'); + if (!isLocal) { + console.warn('Consider using --local flag for local development.'); + } + } + // Output the result // console.log(JSON.stringify(result)); // Optionally save to file - await fs.writeFile('api-state-data.json', JSON.stringify(result)); + await fs.writeFile('api-state-data.json', JSON.stringify(result)); + console.log('API state map generated successfully: api-state-data.json'); } catch (error) { console.error('Error in main execution:', error); + process.exit(1); } })(); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..630e13b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1736 @@ +{ + "name": "api-linter", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "api-linter", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@apidevtools/swagger-parser": "^12.0.0", + "js-yaml": "^4.1.0" + }, + "devDependencies": { + "@types/js-yaml": "^4.0.9", + "prettier": "^3.5.2", + "typescript": "^4.9.5", + "vitest": "^0.34.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-14.0.1.tgz", + "integrity": "sha512-Oc96zvmxx1fqoSEdUmfmvvb59/KDOnUoJ7s2t7bISyAn0XEz57LCCw8k2Y4Pf3mwKaZLMciESALORLgfe2frCw==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.15", + "js-yaml": "^4.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/philsturgeon" + } + }, + "node_modules/@apidevtools/openapi-schemas": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", + "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@apidevtools/swagger-methods": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", + "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==", + "license": "MIT" + }, + "node_modules/@apidevtools/swagger-parser": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-12.0.0.tgz", + "integrity": "sha512-WLJIWcfOXrSKlZEM+yhA2Xzatgl488qr1FoOxixYmtWapBzwSC0gVGq4WObr4hHClMIiFFdOBdixNkvWqkWIWA==", + "license": "MIT", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "14.0.1", + "@apidevtools/openapi-schemas": "^2.1.0", + "@apidevtools/swagger-methods": "^3.0.2", + "ajv": "^8.17.1", + "ajv-draft-04": "^1.0.0", + "call-me-maybe": "^1.0.2" + }, + "peerDependencies": { + "openapi-types": ">=7" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.4.tgz", + "integrity": "sha512-B2wfzCJ+ps/OBzRjeds7DlJumCU3rXMxJJS1vzURyj7+KBHGONm7c9q1TfdBl4vCuNMkDvARn3PBl2wZzuR5mw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.4.tgz", + "integrity": "sha512-FGJYXvYdn8Bs6lAlBZYT5n+4x0ciEp4cmttsvKAZc/c8/JiPaQK8u0c/86vKX8lA7OY/+37lIQSe0YoAImvBAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.4.tgz", + "integrity": "sha512-/9qwE/BM7ATw/W/OFEMTm3dmywbJyLQb4f4v5nmOjgYxPIGpw7HaxRi6LnD4Pjn/q7k55FGeHe1/OD02w63apA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.4.tgz", + "integrity": "sha512-QkWfNbeRuzFnv2d0aPlrzcA3Ebq2mE8kX/5Pl7VdRShbPBjSnom7dbT8E3Jmhxo2RL784hyqGvR5KHavCJQciw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.4.tgz", + "integrity": "sha512-+ToyOMYnSfV8D+ckxO6NthPln/PDNp1P6INcNypfZ7muLmEvPKXqduUiD8DlJpMMT8LxHcE5W0dK9kXfJke9Zw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.4.tgz", + "integrity": "sha512-cGT6ey/W+sje6zywbLiqmkfkO210FgRz7tepWAzzEVgQU8Hn91JJmQWNqs55IuglG8sJdzk7XfNgmGRtcYlo1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.4.tgz", + "integrity": "sha512-9fhTJyOb275w5RofPSl8lpr4jFowd+H4oQKJ9XTYzD1JWgxdZKE8bA6d4npuiMemkecQOcigX01FNZNCYnQBdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.4.tgz", + "integrity": "sha512-+6kCIM5Zjvz2HwPl/udgVs07tPMIp1VU2Y0c72ezjOvSvEfAIWsUgpcSDvnC7g9NrjYR6X9bZT92mZZ90TfvXw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.4.tgz", + "integrity": "sha512-SWuXdnsayCZL4lXoo6jn0yyAj7TTjWE4NwDVt9s7cmu6poMhtiras5c8h6Ih6Y0Zk6Z+8t/mLumvpdSPTWub2Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.4.tgz", + "integrity": "sha512-vDknMDqtMhrrroa5kyX6tuC0aRZZlQ+ipDfbXd2YGz5HeV2t8HOl/FDAd2ynhs7Ki5VooWiiZcCtxiZ4IjqZwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.4.tgz", + "integrity": "sha512-mCBkjRZWhvjtl/x+Bd4fQkWZT8canStKDxGrHlBiTnZmJnWygGcvBylzLVCZXka4dco5ymkWhZlLwKCGFF4ivw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.4.tgz", + "integrity": "sha512-YMdz2phOTFF+Z66dQfGf0gmeDSi5DJzY5bpZyeg9CPBkV9QDzJ1yFRlmi/j7WWRf3hYIWrOaJj5jsfwgc8GTHQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.4.tgz", + "integrity": "sha512-r0WKLSfFAK8ucG024v2yiLSJMedoWvk8yWqfNICX28NHDGeu3F/wBf8KG6mclghx4FsLePxJr/9N8rIj1PtCnw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.4.tgz", + "integrity": "sha512-IaizpPP2UQU3MNyPH1u0Xxbm73D+4OupL0bjo4Hm0496e2wg3zuvoAIhubkD1NGy9fXILEExPQy87mweujEatA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.4.tgz", + "integrity": "sha512-aCM29orANR0a8wk896p6UEgIfupReupnmISz6SUwMIwTGaTI8MuKdE0OD2LvEg8ondDyZdMvnaN3bW4nFbATPA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.4.tgz", + "integrity": "sha512-0Xj1vZE3cbr/wda8d/m+UeuSL+TDpuozzdD4QaSzu/xSOMK0Su5RhIkF7KVHFQsobemUNHPLEcYllL7ZTCP/Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.4.tgz", + "integrity": "sha512-kM/orjpolfA5yxsx84kI6bnK47AAZuWxglGKcNmokw2yy9i5eHY5UAjcX45jemTJnfHAWo3/hOoRqEeeTdL5hw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.4.tgz", + "integrity": "sha512-cNLH4psMEsWKILW0isbpQA2OvjXLbKvnkcJFmqAptPQbtLrobiapBJVj6RoIvg6UXVp5w0wnIfd/Q56cNpF+Ew==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.4.tgz", + "integrity": "sha512-OiEa5lRhiANpv4SfwYVgQ3opYWi/QmPDC5ve21m8G9pf6ZO+aX1g2EEF1/IFaM1xPSP7mK0msTRXlPs6mIagkg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.4.tgz", + "integrity": "sha512-IKL9mewGZ5UuuX4NQlwOmxPyqielvkAPUS2s1cl6yWjjQvyN3h5JTdVFGD5Jr5xMjRC8setOfGQDVgX8V+dkjg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai-subset": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.6.tgz", + "integrity": "sha512-m8lERkkQj+uek18hXOZuec3W/fCRTrU4hrnXjH3qhHy96ytuPaPiWGgu7sJb7tZxZonO75vYAjCvpe/e4VUwRw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/chai": "<5.2.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, + "node_modules/@vitest/expect": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "0.34.6", + "p-limit": "^4.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^2.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-draft-04": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", + "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", + "license": "MIT", + "peerDependencies": { + "ajv": "^8.5.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "license": "MIT" + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/mlly/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/openapi-types": { + "version": "12.1.3", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz", + "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==", + "license": "MIT", + "peer": true + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.46.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.4.tgz", + "integrity": "sha512-YbxoxvoqNg9zAmw4+vzh1FkGAiZRK+LhnSrbSrSXMdZYsRPDWoshcSd/pldKRO6lWzv/e9TiJAVQyirYIeSIPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.46.4", + "@rollup/rollup-android-arm64": "4.46.4", + "@rollup/rollup-darwin-arm64": "4.46.4", + "@rollup/rollup-darwin-x64": "4.46.4", + "@rollup/rollup-freebsd-arm64": "4.46.4", + "@rollup/rollup-freebsd-x64": "4.46.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.46.4", + "@rollup/rollup-linux-arm-musleabihf": "4.46.4", + "@rollup/rollup-linux-arm64-gnu": "4.46.4", + "@rollup/rollup-linux-arm64-musl": "4.46.4", + "@rollup/rollup-linux-loongarch64-gnu": "4.46.4", + "@rollup/rollup-linux-ppc64-gnu": "4.46.4", + "@rollup/rollup-linux-riscv64-gnu": "4.46.4", + "@rollup/rollup-linux-riscv64-musl": "4.46.4", + "@rollup/rollup-linux-s390x-gnu": "4.46.4", + "@rollup/rollup-linux-x64-gnu": "4.46.4", + "@rollup/rollup-linux-x64-musl": "4.46.4", + "@rollup/rollup-win32-arm64-msvc": "4.46.4", + "@rollup/rollup-win32-ia32-msvc": "4.46.4", + "@rollup/rollup-win32-x64-msvc": "4.46.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", + "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.7.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", + "vite-node": "0.34.6", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json index 4f4d4e3..cce346b 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "vitest": "^0.34.0" }, "dependencies": { + "@apidevtools/swagger-parser": "^12.0.0", "js-yaml": "^4.1.0" }, "packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39" From aa707a7a77c07061969b4aa9c9043142fd69fe32 Mon Sep 17 00:00:00 2001 From: darrell-thobe-sp Date: Wed, 20 Aug 2025 09:32:10 -0400 Subject: [PATCH 16/16] fix deps issue --- pnpm-lock.yaml | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 40c4167..da8064c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@apidevtools/swagger-parser': + specifier: ^12.0.0 + version: 12.0.0(openapi-types@12.1.3) js-yaml: specifier: ^4.1.0 version: 4.1.0 @@ -126,6 +129,22 @@ packages: '@actions/io@1.1.3': resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} + '@apidevtools/json-schema-ref-parser@14.0.1': + resolution: {integrity: sha512-Oc96zvmxx1fqoSEdUmfmvvb59/KDOnUoJ7s2t7bISyAn0XEz57LCCw8k2Y4Pf3mwKaZLMciESALORLgfe2frCw==} + engines: {node: '>= 16'} + + '@apidevtools/openapi-schemas@2.1.0': + resolution: {integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==} + engines: {node: '>=10'} + + '@apidevtools/swagger-methods@3.0.2': + resolution: {integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==} + + '@apidevtools/swagger-parser@12.0.0': + resolution: {integrity: sha512-WLJIWcfOXrSKlZEM+yhA2Xzatgl488qr1FoOxixYmtWapBzwSC0gVGq4WObr4hHClMIiFFdOBdixNkvWqkWIWA==} + peerDependencies: + openapi-types: '>=7' + '@asyncapi/specs@6.8.1': resolution: {integrity: sha512-czHoAk3PeXTLR+X8IUaD+IpT+g+zUvkcgMDJVothBsan+oHN3jfcFcFUNdOPAAFoUCQN1hXF1dWuphWy05THlA==} @@ -866,6 +885,9 @@ packages: resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} engines: {node: '>= 0.4'} + call-me-maybe@1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + chai@4.5.0: resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} engines: {node: '>=4'} @@ -1754,6 +1776,25 @@ snapshots: '@actions/io@1.1.3': {} + '@apidevtools/json-schema-ref-parser@14.0.1': + dependencies: + '@types/json-schema': 7.0.15 + js-yaml: 4.1.0 + + '@apidevtools/openapi-schemas@2.1.0': {} + + '@apidevtools/swagger-methods@3.0.2': {} + + '@apidevtools/swagger-parser@12.0.0(openapi-types@12.1.3)': + dependencies: + '@apidevtools/json-schema-ref-parser': 14.0.1 + '@apidevtools/openapi-schemas': 2.1.0 + '@apidevtools/swagger-methods': 3.0.2 + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + call-me-maybe: 1.0.2 + openapi-types: 12.1.3 + '@asyncapi/specs@6.8.1': dependencies: '@types/json-schema': 7.0.15 @@ -2455,6 +2496,8 @@ snapshots: call-bind-apply-helpers: 1.0.1 get-intrinsic: 1.2.7 + call-me-maybe@1.0.2: {} + chai@4.5.0: dependencies: assertion-error: 1.1.0