diff --git a/Makefile b/Makefile index 9a4fa4e58e..bd4b32625a 100644 --- a/Makefile +++ b/Makefile @@ -171,8 +171,6 @@ build-examples: ## Build all of the example packages @test -s ./build/zarf-package-yolo-$(ARCH).tar.zst || $(ZARF_BIN) package create examples/yolo -o build -a $(ARCH) --confirm - @test -s ./build/zarf-package-component-webhooks-$(ARCH)-0.0.1.tar.zst || $(ZARF_BIN) package create examples/component-webhooks -o build -a $(ARCH) --confirm - build-injector-linux: ## Build the Zarf injector for AMD64 and ARM64 docker run --rm --user "$(id -u)":"$(id -g)" -v $$PWD/src/injector:/usr/src/zarf-injector -w /usr/src/zarf-injector rust:1.71.0-bookworm make build-injector-linux list-sizes diff --git a/examples/component-webhooks/.eslintrc.json b/examples/component-webhooks/.eslintrc.json deleted file mode 100644 index 0a2ea6e8a7..0000000000 --- a/examples/component-webhooks/.eslintrc.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "env": { - "browser": false, - "es2021": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 2022 - }, - "plugins": [ - "@typescript-eslint" - ], - "ignorePatterns": [ - "node_modules", - "dist", - "hack", - "capabilities/zarf-types.ts" - ], - "root": true -} diff --git a/examples/component-webhooks/.gitignore b/examples/component-webhooks/.gitignore deleted file mode 100644 index f06235c460..0000000000 --- a/examples/component-webhooks/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist diff --git a/examples/component-webhooks/.prettierrc b/examples/component-webhooks/.prettierrc deleted file mode 100644 index 7c4c51324c..0000000000 --- a/examples/component-webhooks/.prettierrc +++ /dev/null @@ -1,13 +0,0 @@ -{ - "arrowParens": "avoid", - "bracketSameLine": false, - "bracketSpacing": true, - "embeddedLanguageFormatting": "auto", - "insertPragma": false, - "printWidth": 80, - "quoteProps": "as-needed", - "requirePragma": false, - "semi": true, - "tabWidth": 2, - "useTabs": false -} diff --git a/examples/component-webhooks/capabilities/hook.ts b/examples/component-webhooks/capabilities/hook.ts deleted file mode 100644 index 03ea35856f..0000000000 --- a/examples/component-webhooks/capabilities/hook.ts +++ /dev/null @@ -1,149 +0,0 @@ -import { Capability, a, Log, K8s, kind } from "pepr"; -import { DeployedPackage } from "./zarf-types"; - -/** - * The Webhook Capability is an example capability to demonstrate using webhooks to interact with Zarf package deployments. - * To test this capability you run `pepr dev`and then deploy a zarf package! - */ -export const Webhook = new Capability({ - name: "example-webhook", - description: - "A simple example capability to show how webhooks work with Zarf package deployments.", - namespaces: ["zarf"], -}); - -const webhookName = "test-webhook"; - -const { When } = Webhook; - -When(a.Secret) - .IsCreatedOrUpdated() - .InNamespace("zarf") - .WithLabel("package-deploy-info") - .Mutate(request => { - const secret = request.Raw; - let secretData: DeployedPackage; - let secretString: string; - let manuallyDecoded = false; - - // Pepr does not decode/encode non-ASCII characters in secret data: https://github.com/defenseunicorns/pepr/issues/219 - try { - secretString = atob(secret.data.data); - manuallyDecoded = true; - } catch (err) { - secretString = secret.data.data; - } - - // Parse the secret object - try { - secretData = JSON.parse(secretString); - } catch (err) { - throw new Error(`Failed to parse the secret.data.data: ${err}`); - } - - for (const deployedComponent of secretData?.deployedComponents ?? []) { - if (deployedComponent.status === "Deploying") { - Log.info( - `The component ${deployedComponent.name} is currently deploying`, - ); - - const componentWebhook = - secretData.componentWebhooks?.[deployedComponent?.name]?.[ - webhookName - ]; - - // Check if the component has a webhook running for the current package generation - if (componentWebhook?.observedGeneration === secretData.generation) { - Log.debug( - `The component ${deployedComponent.name} has already had a webhook executed for it. Not executing another.`, - ); - } else { - // Seed the componentWebhooks map/object - if (!secretData.componentWebhooks) { - secretData.componentWebhooks = {}; - } - - // Update the secret noting that the webhook is running for this component - secretData.componentWebhooks[deployedComponent.name] = { - "test-webhook": { - name: webhookName, - status: "Running", - observedGeneration: secretData.generation, - }, - }; - - // Call an async function that simulates background processing and then updates the secret with the new status when it's complete - sleepAndChangeStatus(secret.metadata.name, deployedComponent.name); - } - } - } - - if (manuallyDecoded === true) { - secret.data.data = btoa(JSON.stringify(secretData)); - } else { - secret.data.data = JSON.stringify(secretData); - } - }); - -// sleepAndChangeStatus sleeps for the specified duration and changes the status of the 'test-webhook' to 'Succeeded'. -async function sleepAndChangeStatus(secretName: string, componentName: string) { - await sleep(10); - - const ns = "zarf"; - - let secret: a.Secret; - - // Fetch the package secret - try { - secret = await K8s(kind.Secret).InNamespace(ns).Get(secretName); - } catch (err) { - Log.error( - `Error: Failed to get package secret '${secretName}' in namespace '${ns}': ${JSON.stringify( - err, - )}`, - ); - } - - const secretString = atob(secret.data.data); - const secretData: DeployedPackage = JSON.parse(secretString); - - // Update the webhook status if the observedGeneration matches - const componentWebhook = - secretData.componentWebhooks[componentName]?.[webhookName]; - - if (componentWebhook?.observedGeneration === secretData.generation) { - componentWebhook.status = "Succeeded"; - - secretData.componentWebhooks[componentName][webhookName] = componentWebhook; - } - - secret.data.data = btoa(JSON.stringify(secretData)); - - // Update the status in the package secret - // Use Server-Side force apply to forcefully take ownership of the package secret data.data field - // Doing a Server-Side apply without the force option will result in a FieldManagerConflict error due to Zarf owning the object. - try { - await K8s(kind.Secret).Apply( - { - metadata: { - name: secretName, - namespace: ns, - }, - data: { - data: secret.data.data, - }, - }, - { force: true }, - ); - } catch (err) { - Log.error( - `Error: Failed to update package secret '${secretName}' in namespace '${ns}': ${JSON.stringify( - err, - )}`, - ); - } -} - -function sleep(seconds: number) { - return new Promise(resolve => setTimeout(resolve, seconds * 1000)); -} diff --git a/examples/component-webhooks/capabilities/zarf-types.ts b/examples/component-webhooks/capabilities/zarf-types.ts deleted file mode 100644 index 4ead23ab96..0000000000 --- a/examples/component-webhooks/capabilities/zarf-types.ts +++ /dev/null @@ -1,1490 +0,0 @@ -// To parse this data: -// -// import { Convert, ZarfTypes } from "./file"; -// -// const zarfTypes = Convert.toZarfTypes(json); -// -// These functions will throw an error if the JSON doesn't -// match the expected interface, even if the JSON is valid. - -export interface ZarfTypes { - DeployedPackage: DeployedPackage; - ZarfPackage: Data; - ZarfState: ZarfState; -} - -export interface DeployedPackage { - cliVersion: string; - componentWebhooks?: { [key: string]: { [key: string]: ComponentWebhookValue } }; - connectStrings?: { [key: string]: ConnectStringValue }; - data: Data; - deployedComponents: DeployedComponentElement[]; - generation: number; - name: string; -} - -export interface ComponentWebhookValue { - name: string; - observedGeneration: number; - status: string; - waitDurationSeconds?: number; -} - -export interface ConnectStringValue { - /** - * Descriptive text that explains what the resource you would be connecting to is used for - */ - description: string; - /** - * URL path that gets appended to the k8s port-forward result - */ - url: string; -} - -export interface Data { - /** - * Zarf-generated package build data - */ - build?: Build; - /** - * List of components to deploy in this package - */ - components: ComponentElement[]; - /** - * Constant template values applied on deploy for K8s resources - */ - constants?: ConstantElement[]; - /** - * The kind of Zarf package - */ - kind: Kind; - /** - * Package metadata - */ - metadata?: Metadata; - /** - * Variable template values applied on deploy for K8s resources - */ - variables?: ZarfPackageVariable[]; -} - -/** - * Zarf-generated package build data - */ -export interface Build { - /** - * The architecture this package was created on - */ - architecture: string; - /** - * Whether this package was created with differential components - */ - differential?: boolean; - /** - * List of components that were not included in this package due to differential packaging - */ - differentialMissing?: string[]; - /** - * Version of a previously built package used as the basis for creating this differential - * package - */ - differentialPackageVersion?: string; - /** - * The flavor of Zarf used to build this package - */ - flavor?: string; - /** - * The minimum version of Zarf that does not have breaking package structure changes - */ - lastNonBreakingVersion?: string; - /** - * Any migrations that have been run on this package - */ - migrations?: string[]; - /** - * Any registry domains that were overridden on package create when pulling images - */ - registryOverrides?: { [key: string]: string }; - /** - * The machine name that created this package - */ - terminal: string; - /** - * The timestamp when this package was created - */ - timestamp: string; - /** - * The username who created this package - */ - user: string; - /** - * The version of Zarf used to build this package - */ - version: string; -} - -export interface ComponentElement { - /** - * Custom commands to run at various stages of a package lifecycle - */ - actions?: Actions; - /** - * Helm charts to install during package deploy - */ - charts?: ChartElement[]; - /** - * [Deprecated] Specify a path to a public key to validate signed online resources. This - * will be removed in Zarf v1.0.0. - */ - cosignKeyPath?: string; - /** - * Datasets to inject into a container in the target cluster - */ - dataInjections?: DataInjectionElement[]; - /** - * Determines the default Y/N state for installing this component on package deploy - */ - default?: boolean; - /** - * Message to include during package deploy describing the purpose of this component - */ - description?: string; - /** - * Extend component functionality with additional features - */ - extensions?: Extensions; - /** - * Files or folders to place on disk during package deployment - */ - files?: FileElement[]; - /** - * [Deprecated] Create a user selector field based on all components in the same group. This - * will be removed in Zarf v1.0.0. Consider using 'only.flavor' instead. - */ - group?: string; - /** - * List of OCI images to include in the package - */ - images?: string[]; - /** - * Import a component from another Zarf package - */ - import?: Import; - /** - * Kubernetes manifests to be included in a generated Helm chart on package deploy - */ - manifests?: ManifestElement[]; - /** - * The name of the component - */ - name: string; - /** - * Filter when this component is included in package creation or deployment - */ - only?: Only; - /** - * List of git repos to include in the package - */ - repos?: string[]; - /** - * Do not prompt user to install this component - */ - required?: boolean; - /** - * [Deprecated] (replaced by actions) Custom commands to run before or after package - * deployment. This will be removed in Zarf v1.0.0. - */ - scripts?: Scripts; -} - -/** - * Custom commands to run at various stages of a package lifecycle - */ -export interface Actions { - /** - * Actions to run during package creation - */ - onCreate?: OnCreate; - /** - * Actions to run during package deployment - */ - onDeploy?: OnCreate; - /** - * Actions to run during package removal - */ - onRemove?: OnCreate; -} - -/** - * Actions to run during package creation - * - * Actions to run during package deployment - * - * Actions to run during package removal - */ -export interface OnCreate { - /** - * Actions to run at the end of an operation - */ - after?: AfterElement[]; - /** - * Actions to run at the start of an operation - */ - before?: AfterElement[]; - /** - * Default configuration for all actions in this set - */ - defaults?: Defaults; - /** - * Actions to run if all operations fail - */ - onFailure?: AfterElement[]; - /** - * Actions to run if all operations succeed - */ - onSuccess?: AfterElement[]; -} - -export interface AfterElement { - /** - * The command to run. Must specify either cmd or wait for the action to do anything. - */ - cmd?: string; - /** - * Description of the action to be displayed during package execution instead of the command - */ - description?: string; - /** - * The working directory to run the command in (default is CWD) - */ - dir?: string; - /** - * Additional environment variables to set for the command - */ - env?: string[]; - /** - * Retry the command if it fails up to given number of times (default 0) - */ - maxRetries?: number; - /** - * Timeout in seconds for the command (default to 0 - */ - maxTotalSeconds?: number; - /** - * Hide the output of the command during package deployment (default false) - */ - mute?: boolean; - /** - * [Deprecated] (replaced by setVariables) (onDeploy/cmd only) The name of a variable to - * update with the output of the command. This variable will be available to all remaining - * actions and components in the package. This will be removed in Zarf v1.0.0 - */ - setVariable?: string; - /** - * (onDeploy/cmd only) An array of variables to update with the output of the command. These - * variables will be available to all remaining actions and components in the package. - */ - setVariables?: SetVariableElement[]; - /** - * (cmd only) Indicates a preference for a shell for the provided cmd to be executed in on - * supported operating systems - */ - shell?: Shell; - /** - * Wait for a condition to be met before continuing. Must specify either cmd or wait for the - * action. See the 'zarf tools wait-for' command for more info. - */ - wait?: Wait; -} - -export interface SetVariableElement { - /** - * Whether to automatically indent the variable's value (if multiline) when templating. - * Based on the number of chars before the start of ###ZARF_VAR_. - */ - autoIndent?: boolean; - /** - * The name to be used for the variable - */ - name: string; - /** - * An optional regex pattern that a variable value must match before a package deployment - * can continue. - */ - pattern?: string; - /** - * Whether to mark this variable as sensitive to not print it in the log - */ - sensitive?: boolean; - /** - * Changes the handling of a variable to load contents differently (i.e. from a file rather - * than as a raw variable - templated files should be kept below 1 MiB) - */ - type?: Type; -} - -/** - * Changes the handling of a variable to load contents differently (i.e. from a file rather - * than as a raw variable - templated files should be kept below 1 MiB) - */ -export enum Type { - File = "file", - Raw = "raw", -} - -/** - * (cmd only) Indicates a preference for a shell for the provided cmd to be executed in on - * supported operating systems - */ -export interface Shell { - /** - * (default 'sh') Indicates a preference for the shell to use on macOS systems - */ - darwin?: string; - /** - * (default 'sh') Indicates a preference for the shell to use on Linux systems - */ - linux?: string; - /** - * (default 'powershell') Indicates a preference for the shell to use on Windows systems - * (note that choosing 'cmd' will turn off migrations like touch -> New-Item) - */ - windows?: string; -} - -/** - * Wait for a condition to be met before continuing. Must specify either cmd or wait for the - * action. See the 'zarf tools wait-for' command for more info. - */ -export interface Wait { - /** - * Wait for a condition to be met in the cluster before continuing. Only one of cluster or - * network can be specified. - */ - cluster?: WaitCluster; - /** - * Wait for a condition to be met on the network before continuing. Only one of cluster or - * network can be specified. - */ - network?: Network; -} - -/** - * Wait for a condition to be met in the cluster before continuing. Only one of cluster or - * network can be specified. - */ -export interface WaitCluster { - /** - * The condition or jsonpath state to wait for; defaults to exist - */ - condition?: string; - /** - * The kind of resource to wait for - */ - kind: string; - /** - * The name of the resource or selector to wait for - */ - name: string; - /** - * The namespace of the resource to wait for - */ - namespace?: string; -} - -/** - * Wait for a condition to be met on the network before continuing. Only one of cluster or - * network can be specified. - */ -export interface Network { - /** - * The address to wait for - */ - address: string; - /** - * The HTTP status code to wait for if using http or https - */ - code?: number; - /** - * The protocol to wait for - */ - protocol: Protocol; -} - -/** - * The protocol to wait for - */ -export enum Protocol { - HTTP = "http", - HTTPS = "https", - TCP = "tcp", -} - -/** - * Default configuration for all actions in this set - */ -export interface Defaults { - /** - * Working directory for commands (default CWD) - */ - dir?: string; - /** - * Additional environment variables for commands - */ - env?: string[]; - /** - * Retry commands given number of times if they fail (default 0) - */ - maxRetries?: number; - /** - * Default timeout in seconds for commands (default to 0 - */ - maxTotalSeconds?: number; - /** - * Hide the output of commands during execution (default false) - */ - mute?: boolean; - /** - * (cmd only) Indicates a preference for a shell for the provided cmd to be executed in on - * supported operating systems - */ - shell?: Shell; -} - -export interface ChartElement { - /** - * (git repo only) The sub directory to the chart within a git repo - */ - gitPath?: string; - /** - * The path to a local chart's folder or .tgz archive - */ - localPath?: string; - /** - * The name of the chart within Zarf; note that this must be unique and does not need to be - * the same as the name in the chart repo - */ - name: string; - /** - * The namespace to deploy the chart to - */ - namespace: string; - /** - * Whether to not wait for chart resources to be ready before continuing - */ - noWait?: boolean; - /** - * The name of the Helm release to create (defaults to the Zarf name of the chart) - */ - releaseName?: string; - /** - * The name of a chart within a Helm repository (defaults to the Zarf name of the chart) - */ - repoName?: string; - /** - * The URL of the OCI registry, chart repository, or git repo where the helm chart is stored - */ - url?: string; - /** - * List of local values file paths or remote URLs to include in the package; these will be - * merged together when deployed - */ - valuesFiles?: string[]; - /** - * [alpha] List of variables to set in the Helm chart - */ - variables?: ChartVariable[]; - /** - * The version of the chart to deploy; for git-based charts this is also the tag of the git - * repo by default (when not using the '@' syntax for 'repos') - */ - version?: string; -} - -export interface ChartVariable { - /** - * A brief description of what the variable controls - */ - description: string; - /** - * The name of the variable - */ - name: string; - /** - * The path within the Helm chart values where this variable applies - */ - path: string; -} - -export interface DataInjectionElement { - /** - * Compress the data before transmitting using gzip. Note: this requires support for - * tar/gzip locally and in the target image. - */ - compress?: boolean; - /** - * Either a path to a local folder/file or a remote URL of a file to inject into the given - * target pod + container - */ - source: string; - /** - * The target pod + container to inject the data into - */ - target: Target; -} - -/** - * The target pod + container to inject the data into - */ -export interface Target { - /** - * The container name to target for data injection - */ - container: string; - /** - * The namespace to target for data injection - */ - namespace: string; - /** - * The path within the container to copy the data into - */ - path: string; - /** - * The K8s selector to target for data injection - */ - selector: string; -} - -/** - * Extend component functionality with additional features - */ -export interface Extensions { - /** - * Configurations for installing Big Bang and Flux in the cluster - */ - bigbang?: Bigbang; -} - -/** - * Configurations for installing Big Bang and Flux in the cluster - */ -export interface Bigbang { - /** - * Optional paths to Flux kustomize strategic merge patch files - */ - fluxPatchFiles?: string[]; - /** - * Override repo to pull Big Bang from instead of Repo One - */ - repo?: string; - /** - * Whether to skip deploying flux; Defaults to false - */ - skipFlux?: boolean; - /** - * The list of values files to pass to Big Bang; these will be merged together - */ - valuesFiles?: string[]; - /** - * The version of Big Bang to use - */ - version: string; -} - -export interface FileElement { - /** - * (files only) Determines if the file should be made executable during package deploy - */ - executable?: boolean; - /** - * Local folder or file to be extracted from a 'source' archive - */ - extractPath?: string; - /** - * (files only) Optional SHA256 checksum of the file - */ - shasum?: string; - /** - * Local folder or file path or remote URL to pull into the package - */ - source: string; - /** - * List of symlinks to create during package deploy - */ - symlinks?: string[]; - /** - * The absolute or relative path where the file or folder should be copied to during package - * deploy - */ - target: string; -} - -/** - * Import a component from another Zarf package - */ -export interface Import { - /** - * The name of the component to import from the referenced zarf.yaml - */ - name?: string; - /** - * The relative path to a directory containing a zarf.yaml to import from - */ - path?: string; - /** - * [beta] The URL to a Zarf package to import via OCI - */ - url?: string; -} - -export interface ManifestElement { - /** - * List of local K8s YAML files or remote URLs to deploy (in order) - */ - files?: string[]; - /** - * List of local kustomization paths or remote URLs to include in the package - */ - kustomizations?: string[]; - /** - * Allow traversing directory above the current directory if needed for kustomization - */ - kustomizeAllowAnyDirectory?: boolean; - /** - * A name to give this collection of manifests; this will become the name of the - * dynamically-created helm chart - */ - name: string; - /** - * The namespace to deploy the manifests to - */ - namespace?: string; - /** - * Whether to not wait for manifest resources to be ready before continuing - */ - noWait?: boolean; -} - -/** - * Filter when this component is included in package creation or deployment - */ -export interface Only { - /** - * Only deploy component to specified clusters - */ - cluster?: OnlyCluster; - /** - * Only include this component when a matching '--flavor' is specified on 'zarf package - * create' - */ - flavor?: string; - /** - * Only deploy component to specified OS - */ - localOS?: LocalOS; -} - -/** - * Only deploy component to specified clusters - */ -export interface OnlyCluster { - /** - * Only create and deploy to clusters of the given architecture - */ - architecture?: Architecture; - /** - * A list of kubernetes distros this package works with (Reserved for future use) - */ - distros?: string[]; -} - -/** - * Only create and deploy to clusters of the given architecture - */ -export enum Architecture { - Amd64 = "amd64", - Arm64 = "arm64", -} - -/** - * Only deploy component to specified OS - */ -export enum LocalOS { - Darwin = "darwin", - Linux = "linux", - Windows = "windows", -} - -/** - * [Deprecated] (replaced by actions) Custom commands to run before or after package - * deployment. This will be removed in Zarf v1.0.0. - */ -export interface Scripts { - /** - * Scripts to run after the component successfully deploys - */ - after?: string[]; - /** - * Scripts to run before the component is deployed - */ - before?: string[]; - /** - * Scripts to run before the component is added during package create - */ - prepare?: string[]; - /** - * Retry the script if it fails - */ - retry?: boolean; - /** - * Show the output of the script during package deployment - */ - showOutput?: boolean; - /** - * Timeout in seconds for the script - */ - timeoutSeconds?: number; -} - -export interface ConstantElement { - /** - * Whether to automatically indent the variable's value (if multiline) when templating. - * Based on the number of chars before the start of ###ZARF_CONST_. - */ - autoIndent?: boolean; - /** - * A description of the constant to explain its purpose on package create or deploy - * confirmation prompts - */ - description?: string; - /** - * The name to be used for the constant - */ - name: string; - /** - * An optional regex pattern that a constant value must match before a package can be - * created. - */ - pattern?: string; - /** - * The value to set for the constant during deploy - */ - value: string; -} - -/** - * The kind of Zarf package - */ -export enum Kind { - ZarfInitConfig = "ZarfInitConfig", - ZarfPackageConfig = "ZarfPackageConfig", -} - -/** - * Package metadata - */ -export interface Metadata { - /** - * Checksum of a checksums.txt file that contains checksums all the layers within the - * package. - */ - aggregateChecksum?: string; - /** - * The target cluster architecture for this package - */ - architecture?: string; - /** - * Comma-separated list of package authors (including contact info) - */ - authors?: string; - /** - * Additional information about this package - */ - description?: string; - /** - * Link to package documentation when online - */ - documentation?: string; - /** - * Name to identify this Zarf package - */ - name: string; - /** - * Link to package source code when online - */ - source?: string; - /** - * Disable compression of this package - */ - uncompressed?: boolean; - /** - * Link to package information when online - */ - url?: string; - /** - * Name of the distributing entity, organization or individual. - */ - vendor?: string; - /** - * Generic string set by a package author to track the package version (Note: - * ZarfInitConfigs will always be versioned to the CLIVersion they were created with) - */ - version?: string; - /** - * Yaml OnLy Online (YOLO): True enables deploying a Zarf package without first running zarf - * init against the cluster. This is ideal for connected environments where you want to use - * existing VCS and container registries. - */ - yolo?: boolean; -} - -export interface ZarfPackageVariable { - /** - * Whether to automatically indent the variable's value (if multiline) when templating. - * Based on the number of chars before the start of ###ZARF_VAR_. - */ - autoIndent?: boolean; - /** - * The default value to use for the variable - */ - default?: string; - /** - * A description of the variable to be used when prompting the user a value - */ - description?: string; - /** - * The name to be used for the variable - */ - name: string; - /** - * An optional regex pattern that a variable value must match before a package deployment - * can continue. - */ - pattern?: string; - /** - * Whether to prompt the user for input for this variable - */ - prompt?: boolean; - /** - * Whether to mark this variable as sensitive to not print it in the log - */ - sensitive?: boolean; - /** - * Changes the handling of a variable to load contents differently (i.e. from a file rather - * than as a raw variable - templated files should be kept below 1 MiB) - */ - type?: Type; -} - -export interface DeployedComponentElement { - installedCharts: InstalledChartElement[]; - name: string; - observedGeneration: number; - status: string; -} - -export interface InstalledChartElement { - chartName: string; - namespace: string; -} - -export interface ZarfState { - agentTLS: AgentTLS; - /** - * Machine architecture of the k8s node(s) - */ - architecture: string; - /** - * Information about the artifact registry Zarf is configured to use - */ - artifactServer: ArtifactServer; - /** - * K8s distribution of the cluster Zarf was deployed to - */ - distro: string; - /** - * Information about the repository Zarf is configured to use - */ - gitServer: GitServer; - /** - * Information about the container registry Zarf is configured to use - */ - registryInfo: RegistryInfo; - storageClass: string; - /** - * Indicates if Zarf was initialized while deploying its own k8s cluster - */ - zarfAppliance: boolean; -} - -export interface AgentTLS { - ca: string; - cert: string; - key: string; -} - -/** - * Information about the artifact registry Zarf is configured to use - */ -export interface ArtifactServer { - /** - * URL address of the artifact registry - */ - address: string; - /** - * Indicates if we are using a artifact registry that Zarf is directly managing - */ - internalServer: boolean; - /** - * Password of a user with push access to the artifact registry - */ - pushPassword: string; - /** - * Username of a user with push access to the artifact registry - */ - pushUsername: string; -} - -/** - * Information about the repository Zarf is configured to use - */ -export interface GitServer { - /** - * URL address of the git server - */ - address: string; - /** - * Indicates if we are using a git server that Zarf is directly managing - */ - internalServer: boolean; - /** - * Password of a user with pull-only access to the git repository. If not provided for an - * external repository then the push-user is used - */ - pullPassword: string; - /** - * Username of a user with pull-only access to the git repository. If not provided for an - * external repository then the push-user is used - */ - pullUsername: string; - /** - * Password of a user with push access to the git repository - */ - pushPassword: string; - /** - * Username of a user with push access to the git repository - */ - pushUsername: string; -} - -/** - * Information about the container registry Zarf is configured to use - */ -export interface RegistryInfo { - /** - * URL address of the registry - */ - address: string; - /** - * Indicates if we are using a registry that Zarf is directly managing - */ - internalRegistry: boolean; - /** - * Nodeport of the registry. Only needed if the registry is running inside the kubernetes - * cluster - */ - nodePort: number; - /** - * Password of a user with pull-only access to the registry. If not provided for an external - * registry than the push-user is used - */ - pullPassword: string; - /** - * Username of a user with pull-only access to the registry. If not provided for an external - * registry than the push-user is used - */ - pullUsername: string; - /** - * Password of a user with push access to the registry - */ - pushPassword: string; - /** - * Username of a user with push access to the registry - */ - pushUsername: string; - /** - * Secret value that the registry was seeded with - */ - secret: string; -} - -// Converts JSON strings to/from your types -// and asserts the results of JSON.parse at runtime -export class Convert { - public static toZarfTypes(json: string): ZarfTypes { - return cast(JSON.parse(json), r("ZarfTypes")); - } - - public static zarfTypesToJson(value: ZarfTypes): string { - return JSON.stringify(uncast(value, r("ZarfTypes")), null, 2); - } -} - -function invalidValue(typ: any, val: any, key: any, parent: any = ''): never { - const prettyTyp = prettyTypeName(typ); - const parentText = parent ? ` on ${parent}` : ''; - const keyText = key ? ` for key "${key}"` : ''; - throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`); -} - -function prettyTypeName(typ: any): string { - if (Array.isArray(typ)) { - if (typ.length === 2 && typ[0] === undefined) { - return `an optional ${prettyTypeName(typ[1])}`; - } else { - return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`; - } - } else if (typeof typ === "object" && typ.literal !== undefined) { - return typ.literal; - } else { - return typeof typ; - } -} - -function jsonToJSProps(typ: any): any { - if (typ.jsonToJS === undefined) { - const map: any = {}; - typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ }); - typ.jsonToJS = map; - } - return typ.jsonToJS; -} - -function jsToJSONProps(typ: any): any { - if (typ.jsToJSON === undefined) { - const map: any = {}; - typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ }); - typ.jsToJSON = map; - } - return typ.jsToJSON; -} - -function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any { - function transformPrimitive(typ: string, val: any): any { - if (typeof typ === typeof val) return val; - return invalidValue(typ, val, key, parent); - } - - function transformUnion(typs: any[], val: any): any { - // val must validate against one typ in typs - const l = typs.length; - for (let i = 0; i < l; i++) { - const typ = typs[i]; - try { - return transform(val, typ, getProps); - } catch (_) {} - } - return invalidValue(typs, val, key, parent); - } - - function transformEnum(cases: string[], val: any): any { - if (cases.indexOf(val) !== -1) return val; - return invalidValue(cases.map(a => { return l(a); }), val, key, parent); - } - - function transformArray(typ: any, val: any): any { - // val must be an array with no invalid elements - if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent); - return val.map(el => transform(el, typ, getProps)); - } - - function transformDate(val: any): any { - if (val === null) { - return null; - } - const d = new Date(val); - if (isNaN(d.valueOf())) { - return invalidValue(l("Date"), val, key, parent); - } - return d; - } - - function transformObject(props: { [k: string]: any }, additional: any, val: any): any { - if (val === null || typeof val !== "object" || Array.isArray(val)) { - return invalidValue(l(ref || "object"), val, key, parent); - } - const result: any = {}; - Object.getOwnPropertyNames(props).forEach(key => { - const prop = props[key]; - const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined; - result[prop.key] = transform(v, prop.typ, getProps, key, ref); - }); - Object.getOwnPropertyNames(val).forEach(key => { - if (!Object.prototype.hasOwnProperty.call(props, key)) { - result[key] = transform(val[key], additional, getProps, key, ref); - } - }); - return result; - } - - if (typ === "any") return val; - if (typ === null) { - if (val === null) return val; - return invalidValue(typ, val, key, parent); - } - if (typ === false) return invalidValue(typ, val, key, parent); - let ref: any = undefined; - while (typeof typ === "object" && typ.ref !== undefined) { - ref = typ.ref; - typ = typeMap[typ.ref]; - } - if (Array.isArray(typ)) return transformEnum(typ, val); - if (typeof typ === "object") { - return typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val) - : typ.hasOwnProperty("arrayItems") ? transformArray(typ.arrayItems, val) - : typ.hasOwnProperty("props") ? transformObject(getProps(typ), typ.additional, val) - : invalidValue(typ, val, key, parent); - } - // Numbers can be parsed by Date but shouldn't be. - if (typ === Date && typeof val !== "number") return transformDate(val); - return transformPrimitive(typ, val); -} - -function cast(val: any, typ: any): T { - return transform(val, typ, jsonToJSProps); -} - -function uncast(val: T, typ: any): any { - return transform(val, typ, jsToJSONProps); -} - -function l(typ: any) { - return { literal: typ }; -} - -function a(typ: any) { - return { arrayItems: typ }; -} - -function u(...typs: any[]) { - return { unionMembers: typs }; -} - -function o(props: any[], additional: any) { - return { props, additional }; -} - -function m(additional: any) { - return { props: [], additional }; -} - -function r(name: string) { - return { ref: name }; -} - -const typeMap: any = { - "ZarfTypes": o([ - { json: "DeployedPackage", js: "DeployedPackage", typ: r("DeployedPackage") }, - { json: "ZarfPackage", js: "ZarfPackage", typ: r("Data") }, - { json: "ZarfState", js: "ZarfState", typ: r("ZarfState") }, - ], false), - "DeployedPackage": o([ - { json: "cliVersion", js: "cliVersion", typ: "" }, - { json: "componentWebhooks", js: "componentWebhooks", typ: u(undefined, m(m(r("ComponentWebhookValue")))) }, - { json: "connectStrings", js: "connectStrings", typ: u(undefined, m(r("ConnectStringValue"))) }, - { json: "data", js: "data", typ: r("Data") }, - { json: "deployedComponents", js: "deployedComponents", typ: a(r("DeployedComponentElement")) }, - { json: "generation", js: "generation", typ: 0 }, - { json: "name", js: "name", typ: "" }, - ], false), - "ComponentWebhookValue": o([ - { json: "name", js: "name", typ: "" }, - { json: "observedGeneration", js: "observedGeneration", typ: 0 }, - { json: "status", js: "status", typ: "" }, - { json: "waitDurationSeconds", js: "waitDurationSeconds", typ: u(undefined, 0) }, - ], false), - "ConnectStringValue": o([ - { json: "description", js: "description", typ: "" }, - { json: "url", js: "url", typ: "" }, - ], false), - "Data": o([ - { json: "build", js: "build", typ: u(undefined, r("Build")) }, - { json: "components", js: "components", typ: a(r("ComponentElement")) }, - { json: "constants", js: "constants", typ: u(undefined, a(r("ConstantElement"))) }, - { json: "kind", js: "kind", typ: r("Kind") }, - { json: "metadata", js: "metadata", typ: u(undefined, r("Metadata")) }, - { json: "variables", js: "variables", typ: u(undefined, a(r("ZarfPackageVariable"))) }, - ], false), - "Build": o([ - { json: "architecture", js: "architecture", typ: "" }, - { json: "differential", js: "differential", typ: u(undefined, true) }, - { json: "differentialMissing", js: "differentialMissing", typ: u(undefined, a("")) }, - { json: "differentialPackageVersion", js: "differentialPackageVersion", typ: u(undefined, "") }, - { json: "flavor", js: "flavor", typ: u(undefined, "") }, - { json: "lastNonBreakingVersion", js: "lastNonBreakingVersion", typ: u(undefined, "") }, - { json: "migrations", js: "migrations", typ: u(undefined, a("")) }, - { json: "registryOverrides", js: "registryOverrides", typ: u(undefined, m("")) }, - { json: "terminal", js: "terminal", typ: "" }, - { json: "timestamp", js: "timestamp", typ: "" }, - { json: "user", js: "user", typ: "" }, - { json: "version", js: "version", typ: "" }, - ], false), - "ComponentElement": o([ - { json: "actions", js: "actions", typ: u(undefined, r("Actions")) }, - { json: "charts", js: "charts", typ: u(undefined, a(r("ChartElement"))) }, - { json: "cosignKeyPath", js: "cosignKeyPath", typ: u(undefined, "") }, - { json: "dataInjections", js: "dataInjections", typ: u(undefined, a(r("DataInjectionElement"))) }, - { json: "default", js: "default", typ: u(undefined, true) }, - { json: "description", js: "description", typ: u(undefined, "") }, - { json: "extensions", js: "extensions", typ: u(undefined, r("Extensions")) }, - { json: "files", js: "files", typ: u(undefined, a(r("FileElement"))) }, - { json: "group", js: "group", typ: u(undefined, "") }, - { json: "images", js: "images", typ: u(undefined, a("")) }, - { json: "import", js: "import", typ: u(undefined, r("Import")) }, - { json: "manifests", js: "manifests", typ: u(undefined, a(r("ManifestElement"))) }, - { json: "name", js: "name", typ: "" }, - { json: "only", js: "only", typ: u(undefined, r("Only")) }, - { json: "repos", js: "repos", typ: u(undefined, a("")) }, - { json: "required", js: "required", typ: u(undefined, true) }, - { json: "scripts", js: "scripts", typ: u(undefined, r("Scripts")) }, - ], false), - "Actions": o([ - { json: "onCreate", js: "onCreate", typ: u(undefined, r("OnCreate")) }, - { json: "onDeploy", js: "onDeploy", typ: u(undefined, r("OnCreate")) }, - { json: "onRemove", js: "onRemove", typ: u(undefined, r("OnCreate")) }, - ], false), - "OnCreate": o([ - { json: "after", js: "after", typ: u(undefined, a(r("AfterElement"))) }, - { json: "before", js: "before", typ: u(undefined, a(r("AfterElement"))) }, - { json: "defaults", js: "defaults", typ: u(undefined, r("Defaults")) }, - { json: "onFailure", js: "onFailure", typ: u(undefined, a(r("AfterElement"))) }, - { json: "onSuccess", js: "onSuccess", typ: u(undefined, a(r("AfterElement"))) }, - ], false), - "AfterElement": o([ - { json: "cmd", js: "cmd", typ: u(undefined, "") }, - { json: "description", js: "description", typ: u(undefined, "") }, - { json: "dir", js: "dir", typ: u(undefined, "") }, - { json: "env", js: "env", typ: u(undefined, a("")) }, - { json: "maxRetries", js: "maxRetries", typ: u(undefined, 0) }, - { json: "maxTotalSeconds", js: "maxTotalSeconds", typ: u(undefined, 0) }, - { json: "mute", js: "mute", typ: u(undefined, true) }, - { json: "setVariable", js: "setVariable", typ: u(undefined, "") }, - { json: "setVariables", js: "setVariables", typ: u(undefined, a(r("SetVariableElement"))) }, - { json: "shell", js: "shell", typ: u(undefined, r("Shell")) }, - { json: "wait", js: "wait", typ: u(undefined, r("Wait")) }, - ], false), - "SetVariableElement": o([ - { json: "autoIndent", js: "autoIndent", typ: u(undefined, true) }, - { json: "name", js: "name", typ: "" }, - { json: "pattern", js: "pattern", typ: u(undefined, "") }, - { json: "sensitive", js: "sensitive", typ: u(undefined, true) }, - { json: "type", js: "type", typ: u(undefined, r("Type")) }, - ], false), - "Shell": o([ - { json: "darwin", js: "darwin", typ: u(undefined, "") }, - { json: "linux", js: "linux", typ: u(undefined, "") }, - { json: "windows", js: "windows", typ: u(undefined, "") }, - ], false), - "Wait": o([ - { json: "cluster", js: "cluster", typ: u(undefined, r("WaitCluster")) }, - { json: "network", js: "network", typ: u(undefined, r("Network")) }, - ], false), - "WaitCluster": o([ - { json: "condition", js: "condition", typ: u(undefined, "") }, - { json: "kind", js: "kind", typ: "" }, - { json: "name", js: "name", typ: "" }, - { json: "namespace", js: "namespace", typ: u(undefined, "") }, - ], false), - "Network": o([ - { json: "address", js: "address", typ: "" }, - { json: "code", js: "code", typ: u(undefined, 0) }, - { json: "protocol", js: "protocol", typ: r("Protocol") }, - ], false), - "Defaults": o([ - { json: "dir", js: "dir", typ: u(undefined, "") }, - { json: "env", js: "env", typ: u(undefined, a("")) }, - { json: "maxRetries", js: "maxRetries", typ: u(undefined, 0) }, - { json: "maxTotalSeconds", js: "maxTotalSeconds", typ: u(undefined, 0) }, - { json: "mute", js: "mute", typ: u(undefined, true) }, - { json: "shell", js: "shell", typ: u(undefined, r("Shell")) }, - ], false), - "ChartElement": o([ - { json: "gitPath", js: "gitPath", typ: u(undefined, "") }, - { json: "localPath", js: "localPath", typ: u(undefined, "") }, - { json: "name", js: "name", typ: "" }, - { json: "namespace", js: "namespace", typ: "" }, - { json: "noWait", js: "noWait", typ: u(undefined, true) }, - { json: "releaseName", js: "releaseName", typ: u(undefined, "") }, - { json: "repoName", js: "repoName", typ: u(undefined, "") }, - { json: "url", js: "url", typ: u(undefined, "") }, - { json: "valuesFiles", js: "valuesFiles", typ: u(undefined, a("")) }, - { json: "variables", js: "variables", typ: u(undefined, a(r("ChartVariable"))) }, - { json: "version", js: "version", typ: u(undefined, "") }, - ], false), - "ChartVariable": o([ - { json: "description", js: "description", typ: "" }, - { json: "name", js: "name", typ: "" }, - { json: "path", js: "path", typ: "" }, - ], false), - "DataInjectionElement": o([ - { json: "compress", js: "compress", typ: u(undefined, true) }, - { json: "source", js: "source", typ: "" }, - { json: "target", js: "target", typ: r("Target") }, - ], false), - "Target": o([ - { json: "container", js: "container", typ: "" }, - { json: "namespace", js: "namespace", typ: "" }, - { json: "path", js: "path", typ: "" }, - { json: "selector", js: "selector", typ: "" }, - ], false), - "Extensions": o([ - { json: "bigbang", js: "bigbang", typ: u(undefined, r("Bigbang")) }, - ], false), - "Bigbang": o([ - { json: "fluxPatchFiles", js: "fluxPatchFiles", typ: u(undefined, a("")) }, - { json: "repo", js: "repo", typ: u(undefined, "") }, - { json: "skipFlux", js: "skipFlux", typ: u(undefined, true) }, - { json: "valuesFiles", js: "valuesFiles", typ: u(undefined, a("")) }, - { json: "version", js: "version", typ: "" }, - ], false), - "FileElement": o([ - { json: "executable", js: "executable", typ: u(undefined, true) }, - { json: "extractPath", js: "extractPath", typ: u(undefined, "") }, - { json: "shasum", js: "shasum", typ: u(undefined, "") }, - { json: "source", js: "source", typ: "" }, - { json: "symlinks", js: "symlinks", typ: u(undefined, a("")) }, - { json: "target", js: "target", typ: "" }, - ], false), - "Import": o([ - { json: "name", js: "name", typ: u(undefined, "") }, - { json: "path", js: "path", typ: u(undefined, "") }, - { json: "url", js: "url", typ: u(undefined, "") }, - ], false), - "ManifestElement": o([ - { json: "files", js: "files", typ: u(undefined, a("")) }, - { json: "kustomizations", js: "kustomizations", typ: u(undefined, a("")) }, - { json: "kustomizeAllowAnyDirectory", js: "kustomizeAllowAnyDirectory", typ: u(undefined, true) }, - { json: "name", js: "name", typ: "" }, - { json: "namespace", js: "namespace", typ: u(undefined, "") }, - { json: "noWait", js: "noWait", typ: u(undefined, true) }, - ], false), - "Only": o([ - { json: "cluster", js: "cluster", typ: u(undefined, r("OnlyCluster")) }, - { json: "flavor", js: "flavor", typ: u(undefined, "") }, - { json: "localOS", js: "localOS", typ: u(undefined, r("LocalOS")) }, - ], false), - "OnlyCluster": o([ - { json: "architecture", js: "architecture", typ: u(undefined, r("Architecture")) }, - { json: "distros", js: "distros", typ: u(undefined, a("")) }, - ], false), - "Scripts": o([ - { json: "after", js: "after", typ: u(undefined, a("")) }, - { json: "before", js: "before", typ: u(undefined, a("")) }, - { json: "prepare", js: "prepare", typ: u(undefined, a("")) }, - { json: "retry", js: "retry", typ: u(undefined, true) }, - { json: "showOutput", js: "showOutput", typ: u(undefined, true) }, - { json: "timeoutSeconds", js: "timeoutSeconds", typ: u(undefined, 0) }, - ], false), - "ConstantElement": o([ - { json: "autoIndent", js: "autoIndent", typ: u(undefined, true) }, - { json: "description", js: "description", typ: u(undefined, "") }, - { json: "name", js: "name", typ: "" }, - { json: "pattern", js: "pattern", typ: u(undefined, "") }, - { json: "value", js: "value", typ: "" }, - ], false), - "Metadata": o([ - { json: "aggregateChecksum", js: "aggregateChecksum", typ: u(undefined, "") }, - { json: "architecture", js: "architecture", typ: u(undefined, "") }, - { json: "authors", js: "authors", typ: u(undefined, "") }, - { json: "description", js: "description", typ: u(undefined, "") }, - { json: "documentation", js: "documentation", typ: u(undefined, "") }, - { json: "name", js: "name", typ: "" }, - { json: "source", js: "source", typ: u(undefined, "") }, - { json: "uncompressed", js: "uncompressed", typ: u(undefined, true) }, - { json: "url", js: "url", typ: u(undefined, "") }, - { json: "vendor", js: "vendor", typ: u(undefined, "") }, - { json: "version", js: "version", typ: u(undefined, "") }, - { json: "yolo", js: "yolo", typ: u(undefined, true) }, - ], false), - "ZarfPackageVariable": o([ - { json: "autoIndent", js: "autoIndent", typ: u(undefined, true) }, - { json: "default", js: "default", typ: u(undefined, "") }, - { json: "description", js: "description", typ: u(undefined, "") }, - { json: "name", js: "name", typ: "" }, - { json: "pattern", js: "pattern", typ: u(undefined, "") }, - { json: "prompt", js: "prompt", typ: u(undefined, true) }, - { json: "sensitive", js: "sensitive", typ: u(undefined, true) }, - { json: "type", js: "type", typ: u(undefined, r("Type")) }, - ], false), - "DeployedComponentElement": o([ - { json: "installedCharts", js: "installedCharts", typ: a(r("InstalledChartElement")) }, - { json: "name", js: "name", typ: "" }, - { json: "observedGeneration", js: "observedGeneration", typ: 0 }, - { json: "status", js: "status", typ: "" }, - ], false), - "InstalledChartElement": o([ - { json: "chartName", js: "chartName", typ: "" }, - { json: "namespace", js: "namespace", typ: "" }, - ], false), - "ZarfState": o([ - { json: "agentTLS", js: "agentTLS", typ: r("AgentTLS") }, - { json: "architecture", js: "architecture", typ: "" }, - { json: "artifactServer", js: "artifactServer", typ: r("ArtifactServer") }, - { json: "distro", js: "distro", typ: "" }, - { json: "gitServer", js: "gitServer", typ: r("GitServer") }, - { json: "registryInfo", js: "registryInfo", typ: r("RegistryInfo") }, - { json: "storageClass", js: "storageClass", typ: "" }, - { json: "zarfAppliance", js: "zarfAppliance", typ: true }, - ], false), - "AgentTLS": o([ - { json: "ca", js: "ca", typ: "" }, - { json: "cert", js: "cert", typ: "" }, - { json: "key", js: "key", typ: "" }, - ], false), - "ArtifactServer": o([ - { json: "address", js: "address", typ: "" }, - { json: "internalServer", js: "internalServer", typ: true }, - { json: "pushPassword", js: "pushPassword", typ: "" }, - { json: "pushUsername", js: "pushUsername", typ: "" }, - ], false), - "GitServer": o([ - { json: "address", js: "address", typ: "" }, - { json: "internalServer", js: "internalServer", typ: true }, - { json: "pullPassword", js: "pullPassword", typ: "" }, - { json: "pullUsername", js: "pullUsername", typ: "" }, - { json: "pushPassword", js: "pushPassword", typ: "" }, - { json: "pushUsername", js: "pushUsername", typ: "" }, - ], false), - "RegistryInfo": o([ - { json: "address", js: "address", typ: "" }, - { json: "internalRegistry", js: "internalRegistry", typ: true }, - { json: "nodePort", js: "nodePort", typ: 0 }, - { json: "pullPassword", js: "pullPassword", typ: "" }, - { json: "pullUsername", js: "pullUsername", typ: "" }, - { json: "pushPassword", js: "pushPassword", typ: "" }, - { json: "pushUsername", js: "pushUsername", typ: "" }, - { json: "secret", js: "secret", typ: "" }, - ], false), - "Type": [ - "file", - "raw", - ], - "Protocol": [ - "http", - "https", - "tcp", - ], - "Architecture": [ - "amd64", - "arm64", - ], - "LocalOS": [ - "darwin", - "linux", - "windows", - ], - "Kind": [ - "ZarfInitConfig", - "ZarfPackageConfig", - ], -}; diff --git a/examples/component-webhooks/package-lock.json b/examples/component-webhooks/package-lock.json deleted file mode 100644 index b50ee40013..0000000000 --- a/examples/component-webhooks/package-lock.json +++ /dev/null @@ -1,3374 +0,0 @@ -{ - "name": "example-webhook", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "example-webhook", - "version": "0.0.1", - "dependencies": { - "pepr": "^20.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.4.tgz", - "integrity": "sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "peer": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", - "peer": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", - "peer": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.50.0.tgz", - "integrity": "sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==", - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@glideapps/ts-necessities": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@glideapps/ts-necessities/-/ts-necessities-2.1.3.tgz", - "integrity": "sha512-q9U8v/n9qbkd2zDYjuX3qtlbl+OIyI9zF+zQhZjfYOE9VMDH7tfcUSJ9p0lXoY3lxmGFne09yi4iiNeQUwV7AA==" - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.12", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.12.tgz", - "integrity": "sha512-NlGesA1usRNn6ctHCZ21M4/dKPgW9Nn1FypRdIKKgZOKzkVV4T1FlK5mBiLhHBCDmEbdQG0idrcXlbZfksJ+RA==", - "peer": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.0", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "peer": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.0.tgz", - "integrity": "sha512-9S9QrXY2K0L4AGDcSgTi9vgiCcG8VcBv4Mp7/1hDPYoswIy6Z6KO5blYto82BT8M0MZNRWmCFLpCs3HlpYGGdw==", - "peer": true - }, - "node_modules/@kubernetes/client-node": { - "version": "1.0.0-rc3", - "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-1.0.0-rc3.tgz", - "integrity": "sha512-bTYMBZXVrjfi98N5EZbrmPtcT9NY+TddunSEc25DcsRF1c5c93e5jT+zFwId19hG8e/ue5deKe7YDQiRYFpMlQ==", - "dependencies": { - "@types/js-yaml": "^4.0.1", - "@types/node": "^20.3.1", - "@types/node-fetch": "^2.6.3", - "@types/stream-buffers": "^3.0.3", - "@types/tar": "^6.1.1", - "@types/underscore": "^1.8.9", - "@types/ws": "^8.5.4", - "byline": "^5.0.0", - "form-data": "^4.0.0", - "isomorphic-ws": "^5.0.0", - "js-yaml": "^4.1.0", - "jsonpath-plus": "^7.2.0", - "node-fetch": "^2.6.9", - "openid-client": "^5.4.2", - "rfc4648": "^1.3.0", - "stream-buffers": "^3.0.2", - "tar": "^6.1.11", - "tmp-promise": "^3.0.2", - "tslib": "^2.5.0", - "underscore": "^1.9.1", - "url-parse": "^1.4.3", - "ws": "^8.13.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "peer": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@opentelemetry/api": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.6.0.tgz", - "integrity": "sha512-OWlrQAnWn9577PhVgqjUvMr1pg57Bc4jv0iL4w0PRuOSRvq67rvHW9Ie/dZVMvCzhSCB+UxhcY/PmCmFj33Q+g==", - "engines": { - "node": ">=8.0.0" - } - }, - "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==" - }, - "node_modules/@types/json-schema": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", - "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", - "peer": true - }, - "node_modules/@types/node": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", - "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/ramda": { - "version": "0.29.9", - "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.29.9.tgz", - "integrity": "sha512-X3yEG6tQCWBcUAql+RPC/O1Hm9BSU+MXu2wJnCETuAgUlrEDwTA1kIOdEEE4YXDtf0zfQLHa9CCE7WYp9kqPIQ==", - "dependencies": { - "types-ramda": "^0.29.6" - } - }, - "node_modules/@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", - "peer": true - }, - "node_modules/@types/stream-buffers": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.7.tgz", - "integrity": "sha512-azOCy05sXVXrO+qklf0c/B07H/oHaIuDDAiHPVwlk3A9Ek+ksHyTeMajLZl3r76FxpPpxem//4Te61G1iW3Giw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/tar": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.9.tgz", - "integrity": "sha512-T3+O+OQd9cdGmOXuKQY9+B0ceZHRlGVPQ7M5QZqkaPyP/vWnxPXM2aCegq8GP/n1n9dBfq2EBUqCSKKjQAVOPA==", - "dependencies": { - "@types/node": "*", - "minipass": "^4.0.0" - } - }, - "node_modules/@types/underscore": { - "version": "1.11.14", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.14.tgz", - "integrity": "sha512-13RYuwqoXZgLO3Nu4zsISqYAexCILtKIMGx+7+vY6gEsGFjrcHU57iDxPmaA2E5d4v5NwebNweiXLbaZWHWI9A==" - }, - "node_modules/@types/urijs": { - "version": "1.19.25", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.25.tgz", - "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==" - }, - "node_modules/@types/ws": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz", - "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz", - "integrity": "sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==", - "peer": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.3", - "@typescript-eslint/type-utils": "6.7.3", - "@typescript-eslint/utils": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.3.tgz", - "integrity": "sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.7.3", - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/typescript-estree": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz", - "integrity": "sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz", - "integrity": "sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==", - "peer": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.3", - "@typescript-eslint/utils": "6.7.3", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz", - "integrity": "sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==", - "peer": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz", - "integrity": "sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.3.tgz", - "integrity": "sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.3", - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/typescript-estree": "6.7.3", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz", - "integrity": "sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "6.7.3", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peer": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "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==" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bintrees": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", - "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==" - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "peer": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-or-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/browser-or-node/-/browser-or-node-2.1.1.tgz", - "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==" - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/collection-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collection-utils/-/collection-utils-1.0.1.tgz", - "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", - "peer": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cross-fetch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "peer": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "peer": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "peer": true - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "peer": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/esbuild": { - "version": "0.19.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.4.tgz", - "integrity": "sha512-x7jL0tbRRpv4QUyuDMjONtWFciygUxWaUM1kMX2zWxI0X2YWOt7MSA0g4UdeSiHM8fcYVzpQhKYOycZwxTdZkA==", - "hasInstallScript": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.4", - "@esbuild/android-arm64": "0.19.4", - "@esbuild/android-x64": "0.19.4", - "@esbuild/darwin-arm64": "0.19.4", - "@esbuild/darwin-x64": "0.19.4", - "@esbuild/freebsd-arm64": "0.19.4", - "@esbuild/freebsd-x64": "0.19.4", - "@esbuild/linux-arm": "0.19.4", - "@esbuild/linux-arm64": "0.19.4", - "@esbuild/linux-ia32": "0.19.4", - "@esbuild/linux-loong64": "0.19.4", - "@esbuild/linux-mips64el": "0.19.4", - "@esbuild/linux-ppc64": "0.19.4", - "@esbuild/linux-riscv64": "0.19.4", - "@esbuild/linux-s390x": "0.19.4", - "@esbuild/linux-x64": "0.19.4", - "@esbuild/netbsd-x64": "0.19.4", - "@esbuild/openbsd-x64": "0.19.4", - "@esbuild/sunos-x64": "0.19.4", - "@esbuild/win32-arm64": "0.19.4", - "@esbuild/win32-ia32": "0.19.4", - "@esbuild/win32-x64": "0.19.4" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.50.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.50.0.tgz", - "integrity": "sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.50.0", - "@humanwhocodes/config-array": "^0.11.11", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "peer": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "peer": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "peer": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "peer": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/fast-copy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.1.tgz", - "integrity": "sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==" - }, - "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==", - "peer": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "peer": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-patch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", - "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "peer": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "peer": true - }, - "node_modules/fast-redact": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.3.0.tgz", - "integrity": "sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "peer": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "peer": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "peer": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", - "peer": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "peer": true - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "peer": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", - "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "peer": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "peer": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/help-me": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", - "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-status-codes": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz", - "integrity": "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==" - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "peer": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "peer": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "peer": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "peer": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "peer": true - }, - "node_modules/isomorphic-ws": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", - "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/jose": { - "version": "4.15.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", - "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/joycon": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/js-base64": { - "version": "3.7.5", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.5.tgz", - "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" - }, - "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==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "peer": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "peer": true - }, - "node_modules/jsonpath-plus": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz", - "integrity": "sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "peer": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/kubernetes-fluent-client": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/kubernetes-fluent-client/-/kubernetes-fluent-client-1.9.0.tgz", - "integrity": "sha512-MbR4stfoaj4gB+JcrYk6vBZzWrTWRnD9iX1JfVRo7sXQpoknPcsm/9YvLeRLblXtvuGOzE3vZZ21MOGQ3+creA==", - "dependencies": { - "@kubernetes/client-node": "1.0.0-rc3", - "byline": "5.0.0", - "fast-json-patch": "3.1.1", - "http-status-codes": "2.3.0", - "node-fetch": "2.7.0", - "quicktype-core": "23.0.80", - "type-fest": "4.8.2", - "yargs": "17.7.2" - }, - "bin": { - "kubernetes-fluent-client": "dist/cli.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/kubernetes-fluent-client/node_modules/type-fest": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.8.2.tgz", - "integrity": "sha512-mcvrCjixA5166hSrUoJgGb9gBQN4loMYyj9zxuMs/66ibHNEFd5JXMw37YVDx58L4/QID9jIzdTBB4mDwDJ6KQ==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "peer": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "peer": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "peer": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "peer": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "peer": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/oidc-token-hash": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", - "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", - "engines": { - "node": "^10.13.0 || >=12.0.0" - } - }, - "node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/openid-client": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.1.tgz", - "integrity": "sha512-PtrWsY+dXg6y8mtMPyL/namZSYVz8pjXz3yJiBNZsEdCnu9miHLB4ELVC85WvneMKo2Rg62Ay7NkuCpM0bgiLQ==", - "dependencies": { - "jose": "^4.15.1", - "lru-cache": "^6.0.0", - "object-hash": "^2.2.0", - "oidc-token-hash": "^5.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "peer": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "peer": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "peer": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pepr": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/pepr/-/pepr-20.0.0.tgz", - "integrity": "sha512-Pb84L0VkK5xtqBzZKjjD6xBJiMnypmvuqPpomL46hANeI0ks81rcWziFupQS4UiLnHcN2H32Il/bCYyzj5vFbQ==", - "dependencies": { - "@types/ramda": "0.29.9", - "express": "4.18.2", - "fast-json-patch": "3.1.1", - "kubernetes-fluent-client": "1.9.0", - "pino": "8.17.1", - "pino-pretty": "10.3.0", - "prom-client": "15.0.0", - "ramda": "0.29.1" - }, - "bin": { - "pepr": "dist/cli.js" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "6.7.3", - "@typescript-eslint/parser": "6.7.3", - "commander": "11.0.0", - "esbuild": "0.19.4", - "eslint": "8.50.0", - "node-forge": "1.3.1", - "prettier": "3.0.3", - "prompts": "2.4.2", - "typescript": "5.2.2", - "uuid": "9.0.1" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "peer": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pino": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.17.1.tgz", - "integrity": "sha512-YoN7/NJgnsJ+fkADZqjhRt96iepWBndQHeClmSBH0sQWCb8zGD74t00SK4eOtKFi/f8TUmQnfmgglEhd2kI1RQ==", - "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "v1.1.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^2.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.7.0", - "thread-stream": "^2.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-abstract-transport": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", - "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", - "dependencies": { - "readable-stream": "^4.0.0", - "split2": "^4.0.0" - } - }, - "node_modules/pino-pretty": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-10.3.0.tgz", - "integrity": "sha512-JthvQW289q3454mhM3/38wFYGWPiBMR28T3CpDNABzoTQOje9UKS7XCJQSnjWF9LQGQkGd8D7h0oq+qwiM3jFA==", - "dependencies": { - "colorette": "^2.0.7", - "dateformat": "^4.6.3", - "fast-copy": "^3.0.0", - "fast-safe-stringify": "^2.1.1", - "help-me": "^5.0.0", - "joycon": "^3.1.1", - "minimist": "^1.2.6", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^1.0.0", - "pump": "^3.0.0", - "readable-stream": "^4.0.0", - "secure-json-parse": "^2.4.0", - "sonic-boom": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "pino-pretty": "bin.js" - } - }, - "node_modules/pino-std-serializers": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "peer": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-warning": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.0.tgz", - "integrity": "sha512-N6mp1+2jpQr3oCFMz6SeHRGbv6Slb20bRhj4v3xR99HqNToAcOe1MFOp4tytyzOfJn+QtN8Rf7U/h2KAn4kC6g==" - }, - "node_modules/prom-client": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.0.0.tgz", - "integrity": "sha512-UocpgIrKyA2TKLVZDSfm8rGkL13C19YrQBAiG3xo3aDFWcHedxRxI3z+cIcucoxpSO0h5lff5iv/SXoxyeopeA==", - "dependencies": { - "@opentelemetry/api": "^1.4.0", - "tdigest": "^0.1.1" - }, - "engines": { - "node": "^16 || ^18 || >=20" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "peer": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" - }, - "node_modules/quicktype-core": { - "version": "23.0.80", - "resolved": "https://registry.npmjs.org/quicktype-core/-/quicktype-core-23.0.80.tgz", - "integrity": "sha512-dd+aJRzAl3MzkaXJMjUu0j60y82gwX/RRr3EvW/aScQKycvkgwliNDN2tIiLB06EKBzjgC9mtlMqKyRg2rYKhQ==", - "dependencies": { - "@glideapps/ts-necessities": "2.1.3", - "@types/urijs": "^1.19.19", - "browser-or-node": "^2.1.1", - "collection-utils": "^1.0.1", - "cross-fetch": "^4.0.0", - "is-url": "^1.2.4", - "js-base64": "^3.7.5", - "lodash": "^4.17.21", - "pako": "^1.0.6", - "pluralize": "^8.0.0", - "readable-stream": "4.4.2", - "unicode-properties": "^1.4.1", - "urijs": "^1.19.1", - "wordwrap": "^1.0.0", - "yaml": "^2.3.1" - } - }, - "node_modules/ramda": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz", - "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.4.2.tgz", - "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "peer": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfc4648": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.3.tgz", - "integrity": "sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ==" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/secure-json-parse": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/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==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "peer": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "peer": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sonic-boom": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.7.0.tgz", - "integrity": "sha512-IudtNvSqA/ObjN97tfgNmOKyDOs4dNcg4cUUsHDebqsgb8wGBBwb31LIgShNO8fye0dFI52X1+tFoKKI6Rq1Gg==", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-buffers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", - "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/tdigest": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", - "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", - "dependencies": { - "bintrees": "1.0.2" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "peer": true - }, - "node_modules/thread-stream": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", - "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", - "dependencies": { - "real-require": "^0.2.0" - } - }, - "node_modules/tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "peer": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", - "peer": true, - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-toolbelt": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==" - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "peer": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/types-ramda": { - "version": "0.29.6", - "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.29.6.tgz", - "integrity": "sha512-VJoOk1uYNh9ZguGd3eZvqkdhD4hTGtnjRBUx5Zc0U9ftmnCgiWcSj/lsahzKunbiwRje1MxxNkEy1UdcXRCpYw==", - "dependencies": { - "ts-toolbelt": "^9.6.0" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unicode-properties": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", - "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", - "dependencies": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - } - }, - "node_modules/unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "dependencies": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - }, - "node_modules/unicode-trie/node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "peer": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "peer": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/examples/component-webhooks/package.json b/examples/component-webhooks/package.json deleted file mode 100644 index 8d91530a8b..0000000000 --- a/examples/component-webhooks/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "example-webhook", - "version": "0.0.1", - "description": "", - "keywords": [ - "pepr", - "k8s", - "policy-engine", - "pepr-module", - "security" - ], - "engines": { - "node": ">=18.0.0" - }, - "pepr": { - "name": "example-webhook", - "uuid": "cb5693ef-d13c-5fe1-b5ad-c870fd911b3b", - "onError": "ignore", - "alwaysIgnore": { - "namespaces": [], - "labels": [] - } - }, - "scripts": { - "k3d-setup": "k3d cluster delete pepr-dev && k3d cluster create pepr-dev --k3s-arg '--debug@server:0'" - }, - "dependencies": { - "pepr": "^20.0.0" - } -} diff --git a/examples/component-webhooks/pepr-module-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b.yaml b/examples/component-webhooks/pepr-module-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b.yaml deleted file mode 100644 index a08428e469..0000000000 --- a/examples/component-webhooks/pepr-module-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b.yaml +++ /dev/null @@ -1,279 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: pepr-system ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b -rules: - - apiGroups: - - '*' - resources: - - '*' - verbs: - - create - - delete - - get - - list - - patch - - update - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b -subjects: - - kind: ServiceAccount - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b - namespace: pepr-system ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b - namespace: pepr-system ---- -apiVersion: v1 -kind: Secret -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-api-token - namespace: pepr-system -type: Opaque -data: - value: >- - NTkwMzFlMGU3MzJmYTg0ZjE5OTlmZGMzMWExZjY0MWUwZDAyYWMzZjE0NzU2MTUyMmFmYTAzMmI1YzRjM2M2Yg== ---- -apiVersion: v1 -kind: Secret -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-tls - namespace: pepr-system -type: kubernetes.io/tls -data: - tls.crt: >- - LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlDd3pDQ0FhdWdBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBQU1CNFhEVEl6TVRFeE16RTNOREEwDQpObG9YRFRJME1URXhNekUzTkRBME5sb3dBRENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DDQpnZ0VCQUtHbWEyVHZNUmdMc01kL2FneFJua0hEeGgxL1YvNFN0Z2VHUkJLK1ZkV01TZlNIdE5UTXFTT2NUeW5vDQo4Z2ZFbnJNQ1ZPWXFqek03YkdEMU9pcGorRktGSkxJcGpaak1HRnhnR2VBSTBwVThTak1HcWMyazRKZ1N5ZDNPDQo5dmZxUk1adjNqd2pJeGMvekxiYzFBZjNKS3NlQTlYc2FzN3R6VmhjSFc0RFVPQnhpNTNLVHBDQzhWbFJoZmI2DQo2THBPVUFueW9pRGU2ZGZ1KzRIeXUzNlZuLzJKNFlMeXdwTXF6RCtzWUxCWXdrcTRiaTZzVk9XeWlsWXFnd2V4DQpmVG9Lbk1xZlExbm4wTVZrb0FkLy9FUXBFKzE1NTVFcTlrUmt4cW5wYzllUlNjT2JOWGxjdng4eDdOaG1GR2xRDQpZQ0hYQVlJZ2xKT01LMzUrZXNnOHNPeEkvUXNDQXdFQUFhTklNRVl3UkFZRFZSMFJCRDB3TzRJNWNHVndjaTFqDQpZalUyT1RObFppMWtNVE5qTFRWbVpURXRZalZoWkMxak9EY3dabVE1TVRGaU0ySXVjR1Z3Y2kxemVYTjBaVzB1DQpjM1pqTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCQVFCVDZsYnRQalpnSU9vTHE1SnRMYkphODB6L293QTNoTFZLDQpSMFN4S2xxSjAvdElmb3FKMmZTNTdtT0NFZFJhR2dlK2l3am0zL2xWWnY4QzNRWnB0Yy9sV3FqdU1hTkxUWmQ4DQoveG1vckFiVE5RdElkVXMrRGpPeTlBbDRiU080eG0zUG9VUk0yK1JSdUF5eEZhME9hZjJoTlBMQ1RjOU1qWTBQDQp5VTZNdWFTZ1FpZGlRSExKYzRrT1N5T3Q4ODRxWlZYeHFCRWRidVN0dVRWeDZnY1NjWlNCNXlvaFY0K0JJaEtPDQpNc1E1alEzTlRpQjgrSU1FSHh4KzhZSWhaQjVzYnFPRnl6TTBuaFFMVWVnc01GLzFqYU5LaDNQMDY1OUMxK0Y1DQoyRjRDeVJRN1hlcmJPVEZPbElXY215aU1VUVdpcGNvS0hIYldkNWNNbUg0VWd4QjJqeGtWDQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tDQo= - tls.key: >- - LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQ0KTUlJRXBBSUJBQUtDQVFFQW9hWnJaTzh4R0F1d3gzOXFERkdlUWNQR0hYOVgvaEsyQjRaRUVyNVYxWXhKOUllMA0KMU15cEk1eFBLZWp5QjhTZXN3SlU1aXFQTXp0c1lQVTZLbVA0VW9Va3NpbU5tTXdZWEdBWjRBalNsVHhLTXdhcA0KemFUZ21CTEozYzcyOStwRXhtL2VQQ01qRnovTXR0elVCL2NrcXg0RDFleHF6dTNOV0Z3ZGJnTlE0SEdMbmNwTw0Ka0lMeFdWR0Y5dnJvdWs1UUNmS2lJTjdwMSs3N2dmSzdmcFdmL1luaGd2TENreXJNUDZ4Z3NGakNTcmh1THF4VQ0KNWJLS1ZpcURCN0Y5T2dxY3lwOURXZWZReFdTZ0IzLzhSQ2tUN1hubmtTcjJSR1RHcWVsejE1Rkp3NXMxZVZ5Lw0KSHpIczJHWVVhVkJnSWRjQmdpQ1VrNHdyZm41NnlEeXc3RWo5Q3dJREFRQUJBb0lCQURLeDUxSkROVWxPT1VXSA0KYnZHb0V4S2EzQ0hhRXZWcVZzM3JUS1A0THlFR214Ym1ERThFVkRNSHpVZmVkekQ2ZDY2NkYzZ0xkdGRoVm03ZA0KMlR6OEZ4K0NBKzBmM1BsRFlJeHYwdzJRbHNJWW8waDNXWDlWcXQzbVhvcUNZcStETjhobnd2Rm5MNVVWL0JTSg0KRXJIZ3p3NGZIcUxUUHZmZ1doclE0S1hrd2xOd3FOQWRLS2grR29JK0h5NkZHNFhORWhoNXdLc052VGQ1YXVnVg0KUDVRbXptRUhIajdhQTU4WmE4cFdrZUU3VVBxTnRjYnBrR3dLOVJZdFlBSzd2bDEyTHdwT1M4Vm4zKzZHMGRKWA0KcXhhQ080QmZ0UEpHYTFsbENUa2RtSlJMcm5BZE8zZVhuRS94OEhpUlR3d25vMDlTNi9iL3krZXgrQ0twcC8vaA0KdGZ1cThCa0NnWUVBd1hxc29mOTlJUjhHL05ZS2lEWkNKWmMxSnJkQ011bzdNYUtINENUT09ReG1XZEo4dHM5OQ0Ka1VwZVE1NU5oWXJSRXZFNVpCcEkvR29YUmxWNFFHbjdlRWdJdUNmcGRsVXp0a2xkbWp2cGd1UXZ4RnhGSXlpUg0KRUpGb1IxbmVPWkd0YjNScFp3ekF2VXdQY05XdTlHN2ZvUUF0MG01VEhxcm02eDl4OTNFRW9aVUNnWUVBMWVLNA0KaG1UNFg2L2dhOHpZL0IveWFLNmFpdFhDVTczdFdvYWVsdFBUbWh5VDVxMFZHUjJINXZrY3I5L3JqREZ0ajdoZQ0KZS8yblM1SEtpem8zaDZmb2JLSm9icUEzdFFYWkpZUGZsQU9zVVBnMTJ4YkRXaXJJQ0dBamxoRG9zMDIvQzVrNA0KbVM3WnFIeGNVdEk4ZitjTmdjbzdLZnRNZ2dOdnhRekFjQm5RdkI4Q2dZRUFzcUhzbVhVbHRsckxQTXp4MUdraw0KRVVqV0RmVE03ZTFNMGJyWjhKeUt1aWswcG1Hc082eStwbElmVGhidVJBbXlsdWFZc2srQ2Eyb1lLeHZtZHJKag0KTnQ1ckRudnJGUkg5T0tQc0ErYWs1ZkNBR2ErSE5iclNsSlZyemRTdlZEK24vV3RobFg4MHhKRmhBRENKNDZ3cQ0KVkoreHJzT2xnbjhQeksydnIyRnRnVEVDZ1lFQWx2UXk0N2R6aktVbXNTNmNuaVUyQXlmb0xzQjdMSHRKZjdDdg0KVVNnam1nczlYM3NjL3VMV3ZlOW5qY0Z1RHozN1k0bnVOWGhxa0cxUEZFQjhYS1BtNkhVZlc2UjhiS2k1L3o0NQ0KbDgrWDJIVzJIUERONDE5NldsN3Yvc1BrV0ZndzA5REtIMkx2ZjNoMStJWWs2T2g3b2ZUSEdQUWhwVWtqbzJGQw0KbUZ1LzlHVUNnWUJIellZdXZRd011c1ArSndBbWJ1d3NXMWthbllmTTY4OVcvcUpOYXBEQTc2UEJPbWljQ05tdw0KSWdMMTh4bjZCcStWQkFETWQzb1ZzNFFuNWM2TXg2SkVERHAwT09pazVrNjhpQTZHK084L2pRaVR1STZLNWNUSw0KQzgxalhsSWo0QzgxWUlCRWxPS3d4LzUyeGxhM0lRbDJ5QWVKWlhUVWx4WUdxMjc0KzdCT1F3PT0NCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tDQo= ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b - namespace: pepr-system - labels: - app: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b -spec: - replicas: 2 - selector: - matchLabels: - app: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b - template: - metadata: - labels: - app: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b - spec: - priorityClassName: system-node-critical - serviceAccountName: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b - containers: - - name: server - image: ghcr.io/defenseunicorns/pepr/controller:v0.15.0 - imagePullPolicy: IfNotPresent - command: - - node - - /app/node_modules/pepr/dist/controller.js - - b947b4974c9919a3983673269d19f548e2d8a99db04d9401a53eb9f0bcc71ff0 - readinessProbe: - httpGet: - path: /healthz - port: 3000 - scheme: HTTPS - livenessProbe: - httpGet: - path: /healthz - port: 3000 - scheme: HTTPS - ports: - - containerPort: 3000 - resources: - requests: - memory: 64Mi - cpu: 100m - limits: - memory: 256Mi - cpu: 500m - env: - - name: PEPR_PRETTY_LOG - value: 'false' - - name: LOG_LEVEL - value: debug - volumeMounts: - - name: tls-certs - mountPath: /etc/certs - readOnly: true - - name: api-token - mountPath: /app/api-token - readOnly: true - - name: module - mountPath: /app/load - readOnly: true - volumes: - - name: tls-certs - secret: - secretName: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-tls - - name: api-token - secret: - secretName: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-api-token - - name: module - secret: - secretName: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-module ---- -apiVersion: v1 -kind: Service -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b - namespace: pepr-system -spec: - selector: - app: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b - ports: - - port: 443 - targetPort: 3000 ---- -apiVersion: v1 -kind: Service -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-watcher - namespace: pepr-system -spec: - selector: - app: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-watcher - ports: - - port: 443 - targetPort: 3000 ---- -apiVersion: v1 -kind: Secret -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-module - namespace: pepr-system -type: Opaque -data: - module-b947b4974c9919a3983673269d19f548e2d8a99db04d9401a53eb9f0bcc71ff0.js.gz: >- - H4sIAAAAAAAAE61WXW/bNhR9769guSKRBkq1EWRLZShekW1Ft34haRFggYdQ4pXNWiY1kornqfrvu6TsxF2TrQ97sEyRl/fjnHNJ3XBDFvnb4iOULhVQSQXvjG7AuM3kBtdEHimm4/x0gf9U8RVQ1t3wuoVMs1KrSs5bw4sassejPg5bitzAH600ENEGGkOH2Trv/O6Mwp981dSQrKFYaL2k7AaMlVpldJSO0jFlAmxpZOPCHGVL2Ky1ETa7Gtwxujyx+Gx0LctNAmqOOft3XExWWrS1f7NQtka6DZ2xwcJmndIC45/m4xMMNKI981uyh9JqWykyWhbH3z07gioR46MyOa5gnBTHXCTlyfejSjwbj4ujgjKtfjJGm4zKudIG4/N6zTf2ZXgbItiGl5jE1YzVvIDaj/qeDZVibnR5JBILrm1o5sekrFvrAAmAGhyQUJ2AG3JwQPaXSwN8fzlJlkc24WZODhOcKNr5DxYMQpyNDrFiAQ0oAaqUHpBQP/0dUT/2ePSBKHcvfatcwZq49Iw3vJA1Ihs9BNxn/D0nVvplsjUj5a0D4jSxC70m/rfdbQlyvSRr6RbkN24qgqgt+RwQhqbWmxUoZ1PK9gGlf6EdnfUxa3LqwLq7TLrLBahs2eeryTJyKU8vAPFycfrSngXcxFvzoRF+EOGkerNzGw1O4/QSE3nl+UIwhkySIZNEqkqjwevW4fZI5acd8kR0rtJzvmbADLP54/HEmU1ncu50EekUI/HwiP3iqC+5Kxe4vLfS+w2Q/3Lx9k3acGMhMvFgF/G4cwuDWHkmgt6i65+5rEF4JIMxcQsgNhR55zIjTzreX8d9hTt8kpzoisA0HSoBcaZXjVYe2un0ahbz1GJNrc3znP4YTKSa04MDRPCVnqe+8Oj6PQYqd/t8gNRz0hNpCTaewcl6syUNd1/HDNJb88st19P0ik/DvhkOG3zoIohVvAAFhnsFYRKQzm9fp0MOQdgPJ7HglvAaGRYbHAsseCsJVCGeC0g3QSyIdCl5o912EtMkXGlE0KTXcRbdk/CnT/fN5l1/b3lXQzqzvPtcltsTp2EDzBk9b5XyELMvy8/2i8fzokIVrcDxQK53w4a/OI4nnrDHo+memPLCaR4FLVlnMISsNhHaZvs2XyzjMc7tRpWkalXp45Iq3AEdX3PpSBuNR/HE6wjyoU2Y2cncG0Qj5tJfT2yMellKJe6abq+/IE5fgIvUTtsStR2YhUHXw3FK7uQ9x3i7s2AQODl80qn+kEhFbo8DPwf9oVf8P8qSse8An7UdutHsdyPfbzgbszLn9/CpB5lOygeEyve4wnYpd31EL9qyBBAg8GK41y96zcuYmf+gjiPLHul/x/l509R4Ou9kspWbujs0M8CLIKyE515UVFiHnVEOt/nXctOGI/R/oKcXUYVXdw3QPFfibMHVHC4ChngL3aqxRdl0GKE1KhyF+L2yksibzk/xAn0vV6BbF2mmvh3DURyj03brFL34DUX6Di+21+FTIarZ1WoWTx49ffoNsbrF2l/zpsG0Ppy/ysO1+jWfAOlHm6548+hvWNCUW08JAAA= ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - name: peprstores.pepr.dev -spec: - group: pepr.dev - versions: - - name: v1 - served: true - storage: true - schema: - openAPIV3Schema: - type: object - properties: - data: - type: object - additionalProperties: - type: string - scope: Namespaced - names: - plural: peprstores - singular: peprstore - kind: PeprStore ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-store - namespace: pepr-system -rules: - - apiGroups: - - pepr.dev - resources: - - peprstores - resourceNames: - - '' - verbs: - - create - - get - - patch - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-store - namespace: pepr-system -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-store -subjects: - - kind: ServiceAccount - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b-store - namespace: pepr-system ---- -apiVersion: admissionregistration.k8s.io/v1 -kind: MutatingWebhookConfiguration -metadata: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b -webhooks: - - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b.pepr.dev - admissionReviewVersions: - - v1 - - v1beta1 - clientConfig: - caBundle: >- - LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlDdERDQ0FaeWdBd0lCQWdJQkFUQU5CZ2txaGtpRzl3MEJBUXNGQURBY01Sb3dHQVlEVlFRREV4RlFaWEJ5DQpJRVZ3YUdWdFpYSmhiQ0JEUVRBZUZ3MHlNekV4TVRNeE56UXdORFZhRncweU5ERXhNVE14TnpRd05EVmFNQUF3DQpnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEUWIvRkh4TzVlWmUxenZOYTVKUTM5DQp0ZXR2RENXS0duWXRpZlVwTElXR1RKUkhnUnlVY1ArMUdXa3BjK1kzUUhpaGZJOFJLK0w1OVhiTjdTUDR2bFBkDQp1d001M05nYi93b3RkTWd6bG04a243eFR1Y1pTTGs4dUtRZi8wMTUzSVE1OTNhVThRbW9LZ09oMWNNTFNHM29DDQpYZDJmdGk5YTc5dFNwSW5XeVdkaE1hVVIxTGJvSTlMOGR0M2l5bVpMR2pxdlNEOVIvWlRiUVJXMTNENVd0ZnZYDQpVY0hqaVZPZmg3Si9Ga2U4ZzJxZjEvTml2NDZ1M0tacnN4Z1lMQ3pRSDcwdnhjMWZndmx6YnY5SG0xOFQ0bVZjDQpKK2t5cXptNHpjdkV2ZlIzUzJVQmlZZUQxZVZKcTVDdnZ2STlIT25YY3RXTWdpdVRFSE8xb3kzSEQwLytUK1p4DQpBZ01CQUFHakhUQWJNQXdHQTFVZEV3UUZNQU1CQWY4d0N3WURWUjBQQkFRREFnTDBNQTBHQ1NxR1NJYjNEUUVCDQpDd1VBQTRJQkFRQjRmekRLc3hvU3VBcVMrZWhlSUNzek1EdHlrSUp4OTB3RE5lVUQ5NkJSSFN3OHdkZ0NuOThnDQozdEwyeHZ3eloyY0xDUW5mUjhBMHdEU0Q4cWEyTDh2cXVnczZBQ0JSQm9DRFAyOWEySklOQ2RITzdBSnkvVHpvDQp4dTFxeWQ3K2xKUFB4enFHYk9GSGJ5NGhLTi9PSm13NWdrNENENWtPVXJWNzMwbXpxLzNub21SUlJON3JNVUI1DQpaZzl0YzVwNStWNGE0UFpTWDdTZ0J1WDdVTHdOUDFVVWhlTzB1N2pIeDZGdVdUczlhYkdBemM1dUVjYzd3bndlDQp0WWJRYU04YnlzdmM0L2tqL2YrMjFaMld2Z0RqWGJxSDRTcEF3WUQzY2JpQUtWVDU1SkhrUFQ1a0tsVXFVQUZpDQp4c2QzbE9jeE5ndEpueEI1WUVFYXBzWXFqYnBGTWtmNA0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0K - service: - name: pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b - namespace: pepr-system - path: >- - /mutate/59031e0e732fa84f1999fdc31a1f641e0d02ac3f147561522afa032b5c4c3c6b - failurePolicy: Ignore - matchPolicy: Equivalent - timeoutSeconds: 10 - namespaceSelector: - matchExpressions: - - key: pepr.dev - operator: NotIn - values: - - ignore - - key: kubernetes.io/metadata.name - operator: NotIn - values: - - kube-system - - pepr-system - objectSelector: - matchExpressions: - - key: pepr.dev - operator: NotIn - values: - - ignore - - key: kubernetes.io/metadata.name - operator: NotIn - values: - - kube-system - - pepr-system - rules: - - apiGroups: - - '' - apiVersions: - - v1 - operations: - - CREATE - - UPDATE - resources: - - secrets - sideEffects: None diff --git a/examples/component-webhooks/pepr.ts b/examples/component-webhooks/pepr.ts deleted file mode 100644 index 572e4814c1..0000000000 --- a/examples/component-webhooks/pepr.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { PeprModule } from "pepr"; -// cfg loads your pepr configuration from package.json -import cfg from "./package.json"; - -// HelloPepr is a demo capability that is included with Pepr. Comment or delete the line below to remove it. -import { Webhook } from "./capabilities/hook"; - -/** - * This is the main entrypoint for this Pepr module. It is run when the module is started. - * This is where you register your Pepr configurations and capabilities. - */ -new PeprModule(cfg, [ - // Your additional capabilities go here - Webhook, -]); diff --git a/examples/component-webhooks/tsconfig.json b/examples/component-webhooks/tsconfig.json deleted file mode 100644 index 27f5485413..0000000000 --- a/examples/component-webhooks/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "declaration": true, - "declarationMap": true, - "emitDeclarationOnly": true, - "esModuleInterop": true, - "lib": [ - "ES2022" - ], - "module": "CommonJS", - "moduleResolution": "node", - "outDir": "dist", - "resolveJsonModule": true, - "rootDir": ".", - "strict": false, - "target": "ES2022", - "useUnknownInCatchVariables": false - }, - "include": [ - "**/*.ts" - ] -} diff --git a/examples/component-webhooks/zarf.yaml b/examples/component-webhooks/zarf.yaml deleted file mode 100644 index 302453fedf..0000000000 --- a/examples/component-webhooks/zarf.yaml +++ /dev/null @@ -1,46 +0,0 @@ -kind: ZarfPackageConfig -metadata: - name: component-webhooks - description: Example Pepr Module for Component Webhooks - url: https://github.com/defenseunicorns/pepr - version: 0.0.1 - -components: - - name: module - required: true - manifests: - - name: module - namespace: pepr-system - files: - - pepr-module-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b.yaml - images: - - ghcr.io/defenseunicorns/pepr/controller:v0.15.0 - -# YAML keys starting with `x-` are custom keys that are ignored by the Zarf CLI -# The `x-mdx` key is used to render the markdown content for https://docs.zarf.dev/ref/examples -x-mdx: | - :::caution - - Component Webhooks is currently an [Alpha Feature](/roadmap#alpha). This feature is not extensively tested and may be affected by breaking changes in the future. We encourage you to experiment with this feature and provide feedback to the Zarf team as we begin to stabilize this feature. - - ::: - - This example demonstrates how to use webhooks to perform actions during the lifecycle of package deployments. Webhooks are similar to [Component Actions](/ref/actions/) such that they both enable complex functionality to be executed during the lifecycle of a package deployment. The key difference between webhooks and actions is that actions are defined within the package's `zarf.yaml` while webhooks are defined within the cluster that you are deploying your package onto. - - This example uses Pepr as a mutating webhook that watches for any updates to a zarf package secret. As `zarf` deploys components, it updates a secret in the `zarf` namespace that 'declares' what components are being deployed. Pepr watches for these updates and runs an example operation for each component that gets deployed to the cluster. Since Pepr is a mutating webhook, as `zarf` updates the package secret for each component that is being deployed, Pepr will modify the secret to denote that a webhook operation is executing for that component. To account for this, every time `zarf` updates the package secret, it will check to see if a webhook has modified the secret and will wait if there are any webhooks in a `Running` state. The webhook itself is responsible for updating the secrets when it's operations complete. `zarf` will poll the secret every second to check if the webhook is complete allowing it to continue deploying the rest of the package. - - Webhooks have the potential to be extremely powerful. Since they are written in Javascript, they have the capability to do almost anything that you can do with JavaScript. This includes interacting with the Kubernetes API, interacting with other APIs, or even interacting with other systems. Caution should be exercised when deploying webhooks to clusters as they have the potential to run any time a new package is deployed to the cluster, and future package deployers might not be aware that the cluster has webhooks configured. - - :::note - - If you want to update the capability yourself, you will need to rebuild the Pepr module before creating the package. - - This can be completed by running the following commands: - - ```bash - npm ci - npx pepr build - zarf package create ./dist - ``` - - ::: diff --git a/site/src/content/docs/commands/zarf_dev_deploy.md b/site/src/content/docs/commands/zarf_dev_deploy.md index 29293c1d9a..988eb45c27 100644 --- a/site/src/content/docs/commands/zarf_dev_deploy.md +++ b/site/src/content/docs/commands/zarf_dev_deploy.md @@ -30,7 +30,6 @@ zarf dev deploy [flags] --no-yolo Disable the YOLO mode default override and create / deploy the package as-defined --registry-override stringToString Specify a map of domains to override on package create when pulling images (e.g. --registry-override docker.io=dockerio-reg.enterprise.intranet) (default []) --retries int Number of retries to perform for Zarf deploy operations like git/image pushes or Helm installs (default 3) - --skip-webhooks [alpha] Skip waiting for external webhooks to execute as each package component is deployed --timeout duration Timeout for Helm operations such as installs and rollbacks (default 15m0s) ``` diff --git a/site/src/content/docs/commands/zarf_init.md b/site/src/content/docs/commands/zarf_init.md index 8fc88244c3..f7d7f865af 100644 --- a/site/src/content/docs/commands/zarf_init.md +++ b/site/src/content/docs/commands/zarf_init.md @@ -76,7 +76,6 @@ $ zarf init --artifact-push-password={PASSWORD} --artifact-push-username={USERNA --registry-url string External registry url address to use for this Zarf cluster --retries int Number of retries to perform for Zarf deploy operations like git/image pushes or Helm installs (default 3) --set stringToString Specify deployment variables to set on the command line (KEY=value) (default []) - --skip-webhooks [alpha] Skip waiting for external webhooks to execute as each package component is deployed --storage-class string Specify the storage class to use for the registry and git server. E.g. --storage-class=standard --timeout duration Timeout for Helm operations such as installs and rollbacks (default 15m0s) ``` diff --git a/site/src/content/docs/commands/zarf_package_deploy.md b/site/src/content/docs/commands/zarf_package_deploy.md index 07f2fa46de..c7b09f2ac1 100644 --- a/site/src/content/docs/commands/zarf_package_deploy.md +++ b/site/src/content/docs/commands/zarf_package_deploy.md @@ -29,7 +29,6 @@ zarf package deploy [ PACKAGE_SOURCE ] [flags] --retries int Number of retries to perform for Zarf deploy operations like git/image pushes or Helm installs (default 3) --set stringToString Specify deployment variables to set on the command line (KEY=value) (default []) --shasum string Shasum of the package to deploy. Required if deploying a remote package and "--insecure" is not provided - --skip-webhooks [alpha] Skip waiting for external webhooks to execute as each package component is deployed --timeout duration Timeout for Helm operations such as installs and rollbacks (default 15m0s) ``` diff --git a/src/cmd/common/viper.go b/src/cmd/common/viper.go index b852800611..3cd30d1583 100644 --- a/src/cmd/common/viper.go +++ b/src/cmd/common/viper.go @@ -78,13 +78,12 @@ const ( // Package deploy config keys - VPkgDeploySet = "package.deploy.set" - VPkgDeployComponents = "package.deploy.components" - VPkgDeployShasum = "package.deploy.shasum" - VPkgDeploySget = "package.deploy.sget" - VPkgDeploySkipWebhooks = "package.deploy.skip_webhooks" - VPkgDeployTimeout = "package.deploy.timeout" - VPkgRetries = "package.deploy.retries" + VPkgDeploySet = "package.deploy.set" + VPkgDeployComponents = "package.deploy.components" + VPkgDeployShasum = "package.deploy.shasum" + VPkgDeploySget = "package.deploy.sget" + VPkgDeployTimeout = "package.deploy.timeout" + VPkgRetries = "package.deploy.retries" // Package publish config keys diff --git a/src/cmd/dev.go b/src/cmd/dev.go index e304ca2edf..696df58f46 100644 --- a/src/cmd/dev.go +++ b/src/cmd/dev.go @@ -336,7 +336,6 @@ func bindDevDeployFlags(v *viper.Viper) { // Always require adopt-existing-resources flag (no viper) devDeployFlags.BoolVar(&pkgConfig.DeployOpts.AdoptExistingResources, "adopt-existing-resources", false, lang.CmdPackageDeployFlagAdoptExistingResources) - devDeployFlags.BoolVar(&pkgConfig.DeployOpts.SkipWebhooks, "skip-webhooks", v.GetBool(common.VPkgDeploySkipWebhooks), lang.CmdPackageDeployFlagSkipWebhooks) devDeployFlags.DurationVar(&pkgConfig.DeployOpts.Timeout, "timeout", v.GetDuration(common.VPkgDeployTimeout), lang.CmdPackageDeployFlagTimeout) devDeployFlags.IntVar(&pkgConfig.PkgOpts.Retries, "retries", v.GetInt(common.VPkgRetries), lang.CmdPackageFlagRetries) diff --git a/src/cmd/initialize.go b/src/cmd/initialize.go index 2262454866..7b242901fc 100644 --- a/src/cmd/initialize.go +++ b/src/cmd/initialize.go @@ -218,7 +218,6 @@ func init() { // Flags that control how a deployment proceeds // Always require adopt-existing-resources flag (no viper) initCmd.Flags().BoolVar(&pkgConfig.DeployOpts.AdoptExistingResources, "adopt-existing-resources", false, lang.CmdPackageDeployFlagAdoptExistingResources) - initCmd.Flags().BoolVar(&pkgConfig.DeployOpts.SkipWebhooks, "skip-webhooks", v.GetBool(common.VPkgDeploySkipWebhooks), lang.CmdPackageDeployFlagSkipWebhooks) initCmd.Flags().DurationVar(&pkgConfig.DeployOpts.Timeout, "timeout", v.GetDuration(common.VPkgDeployTimeout), lang.CmdPackageDeployFlagTimeout) initCmd.Flags().IntVar(&pkgConfig.PkgOpts.Retries, "retries", v.GetInt(common.VPkgRetries), lang.CmdPackageFlagRetries) diff --git a/src/cmd/package.go b/src/cmd/package.go index fa939e10bb..70c7c5e511 100644 --- a/src/cmd/package.go +++ b/src/cmd/package.go @@ -416,7 +416,6 @@ func bindDeployFlags(v *viper.Viper) { // Always require adopt-existing-resources flag (no viper) deployFlags.BoolVar(&pkgConfig.DeployOpts.AdoptExistingResources, "adopt-existing-resources", false, lang.CmdPackageDeployFlagAdoptExistingResources) - deployFlags.BoolVar(&pkgConfig.DeployOpts.SkipWebhooks, "skip-webhooks", v.GetBool(common.VPkgDeploySkipWebhooks), lang.CmdPackageDeployFlagSkipWebhooks) deployFlags.DurationVar(&pkgConfig.DeployOpts.Timeout, "timeout", v.GetDuration(common.VPkgDeployTimeout), lang.CmdPackageDeployFlagTimeout) deployFlags.IntVar(&pkgConfig.PkgOpts.Retries, "retries", v.GetInt(common.VPkgRetries), lang.CmdPackageFlagRetries) diff --git a/src/config/lang/english.go b/src/config/lang/english.go index df39428f48..eec9502873 100644 --- a/src/config/lang/english.go +++ b/src/config/lang/english.go @@ -279,7 +279,6 @@ $ zarf package mirror-resources \ CmdPackageDeployFlagComponents = "Comma-separated list of components to deploy. Adding this flag will skip the prompts for selected components. Globbing component names with '*' and deselecting 'default' components with a leading '-' are also supported." CmdPackageDeployFlagShasum = "Shasum of the package to deploy. Required if deploying a remote package and \"--insecure\" is not provided" CmdPackageDeployFlagSget = "[Deprecated] Path to public sget key file for remote packages signed via cosign. This flag will be removed in v1.0.0 please use the --key flag instead." - CmdPackageDeployFlagSkipWebhooks = "[alpha] Skip waiting for external webhooks to execute as each package component is deployed" CmdPackageDeployFlagTimeout = "Timeout for Helm operations such as installs and rollbacks" CmdPackageDeployValidateArchitectureErr = "this package architecture is %s, but the target cluster only has the %s architecture(s). These architectures must be compatible when \"images\" are present" CmdPackageDeployValidateLastNonBreakingVersionWarn = "The version of this Zarf binary '%s' is less than the LastNonBreakingVersion of '%s'. You may need to upgrade your Zarf version to at least '%s' to deploy this package" diff --git a/src/pkg/cluster/zarf.go b/src/pkg/cluster/zarf.go index 93d8406ced..cccfdd1e07 100644 --- a/src/pkg/cluster/zarf.go +++ b/src/pkg/cluster/zarf.go @@ -10,7 +10,6 @@ import ( "errors" "fmt" "strings" - "time" autoscalingV2 "k8s.io/api/autoscaling/v2" corev1 "k8s.io/api/core/v1" @@ -103,101 +102,16 @@ func (c *Cluster) StripZarfLabelsAndSecretsFromNamespaces(ctx context.Context) { spinner.Success() } -// PackageSecretNeedsWait checks if a package component has a running webhook that needs to be waited on. -func (c *Cluster) PackageSecretNeedsWait(deployedPackage *types.DeployedPackage, component types.ZarfComponent, skipWebhooks bool) (needsWait bool, waitSeconds int, hookName string) { - - // Skip checking webhook status when '--skip-webhooks' flag is provided and for YOLO packages - if skipWebhooks || deployedPackage == nil || deployedPackage.Data.Metadata.YOLO { - return false, 0, "" - } - - // Look for the specified component - hookMap, componentExists := deployedPackage.ComponentWebhooks[component.Name] - if !componentExists { - return false, 0, "" // Component not found, no need to wait - } - - // Check if there are any "Running" webhooks for the component that we need to wait for - for hookName, webhook := range hookMap { - if webhook.Status == types.WebhookStatusRunning { - return true, webhook.WaitDurationSeconds, hookName - } - } - - // If we get here, the component doesn't need to wait for a webhook to run - return false, 0, "" -} - -// RecordPackageDeploymentAndWait records the deployment of a package to the cluster and waits for any webhooks to complete. -func (c *Cluster) RecordPackageDeploymentAndWait(ctx context.Context, pkg types.ZarfPackage, components []types.DeployedComponent, connectStrings types.ConnectStrings, generation int, component types.ZarfComponent, skipWebhooks bool) (deployedPackage *types.DeployedPackage, err error) { - deployedPackage, err = c.RecordPackageDeployment(ctx, pkg, components, connectStrings, generation) - if err != nil { - return nil, err - } - - packageNeedsWait, waitSeconds, hookName := c.PackageSecretNeedsWait(deployedPackage, component, skipWebhooks) - // If no webhooks need to complete, we can return immediately. - if !packageNeedsWait { - return deployedPackage, nil - } - - waitDuration := types.DefaultWebhookWaitDuration - if waitSeconds > 0 { - waitDuration = time.Duration(waitSeconds) * time.Second - } - - waitCtx, cancel := context.WithTimeout(ctx, waitDuration) - defer cancel() - - spinner := message.NewProgressSpinner("Waiting for webhook %q to complete for component %q", hookName, component.Name) - defer spinner.Stop() - - timer := time.NewTimer(0) - defer timer.Stop() - - for { - select { - case <-waitCtx.Done(): - return nil, fmt.Errorf("error waiting for webhook %q to complete for component %q: %w", hookName, component.Name, waitCtx.Err()) - case <-timer.C: - deployedPackage, err = c.GetDeployedPackage(ctx, deployedPackage.Name) - if err != nil { - return nil, err - } - - packageNeedsWait, _, _ = c.PackageSecretNeedsWait(deployedPackage, component, skipWebhooks) - if !packageNeedsWait { - spinner.Success() - return deployedPackage, nil - } - - timer.Reset(1 * time.Second) - } - } -} - // RecordPackageDeployment saves metadata about a package that has been deployed to the cluster. -func (c *Cluster) RecordPackageDeployment(ctx context.Context, pkg types.ZarfPackage, components []types.DeployedComponent, connectStrings types.ConnectStrings, generation int) (deployedPackage *types.DeployedPackage, err error) { +func (c *Cluster) RecordPackageDeployment(ctx context.Context, pkg types.ZarfPackage, components []types.DeployedComponent, connectStrings types.ConnectStrings) (deployedPackage *types.DeployedPackage, err error) { packageName := pkg.Metadata.Name - // Attempt to load information about webhooks for the package - var componentWebhooks map[string]map[string]types.Webhook - existingPackageSecret, err := c.GetDeployedPackage(ctx, packageName) - if err != nil { - message.Debugf("Unable to fetch existing secret for package '%s': %s", packageName, err.Error()) - } - if existingPackageSecret != nil { - componentWebhooks = existingPackageSecret.ComponentWebhooks - } - deployedPackage = &types.DeployedPackage{ Name: packageName, CLIVersion: config.CLIVersion, Data: pkg, DeployedComponents: components, ConnectStrings: connectStrings, - Generation: generation, - ComponentWebhooks: componentWebhooks, } packageData, err := json.Marshal(deployedPackage) @@ -276,19 +190,3 @@ func (c *Cluster) DisableRegHPAScaleDown(ctx context.Context) error { } return nil } - -// GetInstalledChartsForComponent returns any installed Helm Charts for the provided package component. -func (c *Cluster) GetInstalledChartsForComponent(ctx context.Context, packageName string, component types.ZarfComponent) (installedCharts []types.InstalledChart, err error) { - deployedPackage, err := c.GetDeployedPackage(ctx, packageName) - if err != nil { - return installedCharts, err - } - - for _, deployedComponent := range deployedPackage.DeployedComponents { - if deployedComponent.Name == component.Name { - installedCharts = append(installedCharts, deployedComponent.InstalledCharts...) - } - } - - return installedCharts, nil -} diff --git a/src/pkg/cluster/zarf_test.go b/src/pkg/cluster/zarf_test.go index 4abfb81e8f..ca7bacb793 100644 --- a/src/pkg/cluster/zarf_test.go +++ b/src/pkg/cluster/zarf_test.go @@ -20,187 +20,6 @@ import ( "github.com/defenseunicorns/zarf/src/types" ) -// TestPackageSecretNeedsWait verifies that Zarf waits for webhooks to complete correctly. -func TestPackageSecretNeedsWait(t *testing.T) { - t.Parallel() - - type testCase struct { - name string - deployedPackage *types.DeployedPackage - component types.ZarfComponent - skipWebhooks bool - needsWait bool - waitSeconds int - hookName string - } - - var ( - componentName = "test-component" - packageName = "test-package" - webhookName = "test-webhook" - ) - - testCases := []testCase{ - { - name: "NoWebhooks", - component: types.ZarfComponent{Name: componentName}, - deployedPackage: &types.DeployedPackage{ - Name: packageName, - ComponentWebhooks: map[string]map[string]types.Webhook{}, - }, - needsWait: false, - waitSeconds: 0, - hookName: "", - }, - { - name: "WebhookRunning", - component: types.ZarfComponent{Name: componentName}, - deployedPackage: &types.DeployedPackage{ - Name: packageName, - ComponentWebhooks: map[string]map[string]types.Webhook{ - componentName: { - webhookName: types.Webhook{ - Status: types.WebhookStatusRunning, - WaitDurationSeconds: 10, - }, - }, - }, - }, - needsWait: true, - waitSeconds: 10, - hookName: webhookName, - }, - // Ensure we only wait on running webhooks for the provided component - { - name: "WebhookRunningOnDifferentComponent", - component: types.ZarfComponent{Name: componentName}, - deployedPackage: &types.DeployedPackage{ - Name: packageName, - ComponentWebhooks: map[string]map[string]types.Webhook{ - "different-component": { - webhookName: types.Webhook{ - Status: types.WebhookStatusRunning, - WaitDurationSeconds: 10, - }, - }, - }, - }, - needsWait: false, - waitSeconds: 0, - hookName: "", - }, - { - name: "WebhookSucceeded", - component: types.ZarfComponent{Name: componentName}, - deployedPackage: &types.DeployedPackage{ - Name: packageName, - ComponentWebhooks: map[string]map[string]types.Webhook{ - componentName: { - webhookName: types.Webhook{ - Status: types.WebhookStatusSucceeded, - }, - }, - }, - }, - needsWait: false, - waitSeconds: 0, - hookName: "", - }, - { - name: "WebhookFailed", - component: types.ZarfComponent{Name: componentName}, - deployedPackage: &types.DeployedPackage{ - Name: packageName, - ComponentWebhooks: map[string]map[string]types.Webhook{ - componentName: { - webhookName: types.Webhook{ - Status: types.WebhookStatusFailed, - }, - }, - }, - }, - needsWait: false, - waitSeconds: 0, - hookName: "", - }, - { - name: "WebhookRemoving", - component: types.ZarfComponent{Name: componentName}, - deployedPackage: &types.DeployedPackage{ - Name: packageName, - ComponentWebhooks: map[string]map[string]types.Webhook{ - componentName: { - webhookName: types.Webhook{ - Status: types.WebhookStatusRemoving, - }, - }, - }, - }, - needsWait: false, - waitSeconds: 0, - hookName: "", - }, - { - name: "SkipWaitForYOLO", - component: types.ZarfComponent{Name: componentName}, - deployedPackage: &types.DeployedPackage{ - Name: packageName, - Data: types.ZarfPackage{ - Metadata: types.ZarfMetadata{ - YOLO: true, - }, - }, - ComponentWebhooks: map[string]map[string]types.Webhook{ - componentName: { - webhookName: types.Webhook{ - Status: types.WebhookStatusRunning, - WaitDurationSeconds: 10, - }, - }, - }, - }, - needsWait: false, - waitSeconds: 0, - hookName: "", - }, - { - name: "SkipWebhooksFlagUsed", - component: types.ZarfComponent{Name: componentName}, - skipWebhooks: true, - deployedPackage: &types.DeployedPackage{ - Name: packageName, - ComponentWebhooks: map[string]map[string]types.Webhook{ - componentName: { - webhookName: types.Webhook{ - Status: types.WebhookStatusRunning, - WaitDurationSeconds: 10, - }, - }, - }, - }, - needsWait: false, - waitSeconds: 0, - hookName: "", - }, - } - - for _, testCase := range testCases { - testCase := testCase - - t.Run(testCase.name, func(t *testing.T) { - t.Parallel() - - c := &Cluster{} - - needsWait, waitSeconds, hookName := c.PackageSecretNeedsWait(testCase.deployedPackage, testCase.component, testCase.skipWebhooks) - - require.Equal(t, testCase.needsWait, needsWait) - require.Equal(t, testCase.waitSeconds, waitSeconds) - require.Equal(t, testCase.hookName, hookName) - }) - } -} - func TestGetDeployedPackage(t *testing.T) { t.Parallel() ctx := context.Background() diff --git a/src/pkg/packager/common.go b/src/pkg/packager/common.go index 0f59319ae6..3414f2d926 100644 --- a/src/pkg/packager/common.go +++ b/src/pkg/packager/common.go @@ -38,7 +38,6 @@ type Packager struct { hpaModified bool connectStrings types.ConnectStrings source sources.PackageSource - generation int } // Modifier is a function that modifies the packager. @@ -174,12 +173,6 @@ func (p *Packager) attemptClusterChecks(ctx context.Context) (err error) { spinner := message.NewProgressSpinner("Gathering additional cluster information (if available)") defer spinner.Stop() - // Check if the package has already been deployed and get its generation - if existingDeployedPackage, _ := p.cluster.GetDeployedPackage(ctx, p.cfg.Pkg.Metadata.Name); existingDeployedPackage != nil { - // If this package has been deployed before, increment the package generation within the secret - p.generation = existingDeployedPackage.Generation + 1 - } - // Check the clusters architecture matches the package spec if err := p.validatePackageArchitecture(ctx); err != nil { if errors.Is(err, lang.ErrUnableToCheckArch) { diff --git a/src/pkg/packager/deploy.go b/src/pkg/packager/deploy.go index 8c0eb6b7a4..0272c87954 100644 --- a/src/pkg/packager/deploy.go +++ b/src/pkg/packager/deploy.go @@ -129,20 +129,7 @@ func (p *Packager) Deploy(ctx context.Context) error { // deployComponents loops through a list of ZarfComponents and deploys them. func (p *Packager) deployComponents(ctx context.Context) (deployedComponents []types.DeployedComponent, err error) { - // Check if this package has been deployed before and grab relevant information about already deployed components - if p.generation == 0 { - p.generation = 1 // If this is the first deployment, set the generation to 1 - } - - // Process all the components we are deploying for _, component := range p.cfg.Pkg.Components { - - deployedComponent := types.DeployedComponent{ - Name: component.Name, - Status: types.ComponentStatusDeploying, - ObservedGeneration: p.generation, - } - // If this component requires a cluster, connect to one if component.RequiresCluster() { timeout := cluster.DefaultTimeout @@ -152,26 +139,17 @@ func (p *Packager) deployComponents(ctx context.Context) (deployedComponents []t connectCtx, cancel := context.WithTimeout(ctx, timeout) defer cancel() if err := p.connectToCluster(connectCtx); err != nil { - return deployedComponents, fmt.Errorf("unable to connect to the Kubernetes cluster: %w", err) + return nil, fmt.Errorf("unable to connect to the Kubernetes cluster: %w", err) } } - // Ensure we don't overwrite any installedCharts data when updating the package secret - if p.isConnectedToCluster() { - deployedComponent.InstalledCharts, err = p.cluster.GetInstalledChartsForComponent(ctx, p.cfg.Pkg.Metadata.Name, component) + onDeploy := component.Actions.OnDeploy + onFailure := func() error { + err := actions.Run(onDeploy.Defaults, onDeploy.OnFailure, p.variableConfig) if err != nil { - message.Debugf("Unable to fetch installed Helm charts for component '%s': %s", component.Name, err.Error()) - } - } - - deployedComponents = append(deployedComponents, deployedComponent) - idx := len(deployedComponents) - 1 - - // Update the package secret to indicate that we are attempting to deploy this component - if p.isConnectedToCluster() { - if _, err := p.cluster.RecordPackageDeploymentAndWait(ctx, p.cfg.Pkg, deployedComponents, p.connectStrings, p.generation, component, p.cfg.DeployOpts.SkipWebhooks); err != nil { - message.Debugf("Unable to record package deployment for component %s: this will affect features like `zarf package remove`: %s", component.Name, err.Error()) + return fmt.Errorf("unable to run component failure action: %w", err) } + return nil } // Deploy the component @@ -179,47 +157,41 @@ func (p *Packager) deployComponents(ctx context.Context) (deployedComponents []t var deployErr error if p.cfg.Pkg.IsInitConfig() { charts, deployErr = p.deployInitComponent(ctx, component) + if deployErr != nil { + err := onFailure() + if err != nil { + return nil, err + } + return nil, fmt.Errorf("unable to deploy component %q: %w", component.Name, deployErr) + } } else { charts, deployErr = p.deployComponent(ctx, component, false /* keep img checksum */, false /* always push images */) - } - - onDeploy := component.Actions.OnDeploy - - onFailure := func() { - if err := actions.Run(onDeploy.Defaults, onDeploy.OnFailure, p.variableConfig); err != nil { - message.Debugf("unable to run component failure action: %s", err.Error()) - } - } - - if deployErr != nil { - onFailure() - - // Update the package secret to indicate that we failed to deploy this component - deployedComponents[idx].Status = types.ComponentStatusFailed - if p.isConnectedToCluster() { - if _, err := p.cluster.RecordPackageDeploymentAndWait(ctx, p.cfg.Pkg, deployedComponents, p.connectStrings, p.generation, component, p.cfg.DeployOpts.SkipWebhooks); err != nil { - message.Debugf("Unable to record package deployment for component %q: this will affect features like `zarf package remove`: %s", component.Name, err.Error()) + if deployErr != nil { + err := onFailure() + if err != nil { + return nil, err } + return nil, fmt.Errorf("unable to deploy component %q: %w", component.Name, deployErr) } - - return deployedComponents, fmt.Errorf("unable to deploy component %q: %w", component.Name, deployErr) } - // Update the package secret to indicate that we successfully deployed this component - deployedComponents[idx].InstalledCharts = charts - deployedComponents[idx].Status = types.ComponentStatusSucceeded + deployedComponents = append(deployedComponents, types.DeployedComponent{ + Name: component.Name, + InstalledCharts: charts, + }) + // Record the successful component deployment to the package secret in the cluster. if p.isConnectedToCluster() { - if _, err := p.cluster.RecordPackageDeploymentAndWait(ctx, p.cfg.Pkg, deployedComponents, p.connectStrings, p.generation, component, p.cfg.DeployOpts.SkipWebhooks); err != nil { - message.Debugf("Unable to record package deployment for component %q: this will affect features like `zarf package remove`: %s", component.Name, err.Error()) + _, err := p.cluster.RecordPackageDeployment(ctx, p.cfg.Pkg, deployedComponents, p.connectStrings) + if err != nil { + return nil, fmt.Errorf("unable to record deployment for component %q: %w", component.Name, err) } } - if err := actions.Run(onDeploy.Defaults, onDeploy.OnSuccess, p.variableConfig); err != nil { - onFailure() - return deployedComponents, fmt.Errorf("unable to run component success action: %w", err) + err = actions.Run(onDeploy.Defaults, onDeploy.OnSuccess, p.variableConfig) + if err != nil { + return nil, fmt.Errorf("unable to run component success action: %w", err) } } - return deployedComponents, nil } diff --git a/src/test/e2e/22_git_and_gitops_test.go b/src/test/e2e/22_git_and_gitops_test.go index 956ded5ed9..1ee3dd0324 100644 --- a/src/test/e2e/22_git_and_gitops_test.go +++ b/src/test/e2e/22_git_and_gitops_test.go @@ -43,6 +43,9 @@ func TestGit(t *testing.T) { testGitServerConnect(t, tunnelGit.HTTPEndpoint()) testGitServerReadOnly(ctx, t, tunnelGit.HTTPEndpoint()) testGitServerTagAndHash(ctx, t, tunnelGit.HTTPEndpoint()) + + _, _, err = e2e.Zarf("package", "remove", path, "--confirm") + require.NoError(t, err) } func TestGitOpsFlux(t *testing.T) { diff --git a/src/test/e2e/26_simple_packages_test.go b/src/test/e2e/26_simple_packages_test.go index 97a67423e3..438e4d8d6b 100644 --- a/src/test/e2e/26_simple_packages_test.go +++ b/src/test/e2e/26_simple_packages_test.go @@ -48,6 +48,9 @@ func TestDosGames(t *testing.T) { // Deploy the game image test package stdOut, stdErr, err = e2e.Zarf("package", "deploy", testDeploy, "--confirm") require.NoError(t, err, stdOut, stdErr) + + _, _, err = e2e.Zarf("package", "remove", testDeploy, "--confirm") + require.NoError(t, err) } func TestManifests(t *testing.T) { @@ -77,4 +80,7 @@ func TestAgentIgnore(t *testing.T) { // Deploy the agent ignore test package stdOut, stdErr, err = e2e.Zarf("package", "deploy", testDeploy, "--confirm") require.NoError(t, err, stdOut, stdErr) + + _, _, err = e2e.Zarf("package", "remove", testDeploy, "--confirm") + require.NoError(t, err) } diff --git a/src/test/e2e/32_component_webhooks_test.go b/src/test/e2e/32_component_webhooks_test.go deleted file mode 100644 index d409e62521..0000000000 --- a/src/test/e2e/32_component_webhooks_test.go +++ /dev/null @@ -1,47 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// SPDX-FileCopyrightText: 2021-Present The Zarf Authors - -// Package test provides e2e tests for Zarf. -package test - -import ( - "fmt" - "testing" - - "github.com/stretchr/testify/require" -) - -func TestComponentWebhooks(t *testing.T) { - t.Log("E2E: Component Webhooks") - - // Deploy example Pepr webhook. - webhookPath := fmt.Sprintf("build/zarf-package-component-webhooks-%s-0.0.1.tar.zst", e2e.Arch) - stdOut, stdErr, err := e2e.Zarf("package", "deploy", webhookPath, "--confirm") - require.NoError(t, err, stdOut, stdErr) - stdOut, stdErr, err = e2e.Zarf("tools", "wait-for", "deployment", "pepr-cb5693ef-d13c-5fe1-b5ad-c870fd911b3b", "available", "-n=pepr-system") - require.NoError(t, err, stdOut, stdErr) - defer e2e.CleanFiles(webhookPath) - - // Ensure package deployments wait for webhooks to complete. - gamesPath := fmt.Sprintf("build/zarf-package-dos-games-%s-1.0.0.tar.zst", e2e.Arch) - stdOut, stdErr, err = e2e.Zarf("package", "deploy", gamesPath, "--confirm") - require.NoError(t, err, stdOut, stdErr) - require.Contains(t, stdErr, "Waiting for webhook \"test-webhook\" to complete for component \"baseline\"") - - // Ensure package deployments with the '--skip-webhooks' flag do not wait on webhooks to complete. - stdOut, stdErr, err = e2e.Zarf("package", "deploy", gamesPath, "--skip-webhooks", "--confirm") - require.NoError(t, err, stdOut, stdErr) - require.NotContains(t, stdErr, "Waiting for webhook \"test-webhook\" to complete for component \"baseline\"") - - // Remove the Pepr webhook package. - stdOut, stdErr, err = e2e.Zarf("package", "remove", "component-webhooks", "--confirm") - require.NoError(t, err, stdOut, stdErr) - stdOut, stdErr, err = e2e.Kubectl("delete", "namespace", "pepr-system") - require.NoError(t, err, stdOut, stdErr) - - // Remove the dos-games package. - stdOut, stdErr, err = e2e.Zarf("package", "remove", "dos-games", "--confirm") - require.NoError(t, err, stdOut, stdErr) - stdOut, stdErr, err = e2e.Kubectl("delete", "namespace", "dos-games") - require.NoError(t, err, stdOut, stdErr) -} diff --git a/src/test/e2e/33_manifest_with_symlink_test.go b/src/test/e2e/32_manifest_with_symlink_test.go similarity index 100% rename from src/test/e2e/33_manifest_with_symlink_test.go rename to src/test/e2e/32_manifest_with_symlink_test.go diff --git a/src/test/e2e/34_custom_init_package_test.go b/src/test/e2e/33_custom_init_package_test.go similarity index 100% rename from src/test/e2e/34_custom_init_package_test.go rename to src/test/e2e/33_custom_init_package_test.go diff --git a/src/test/e2e/35_custom_retries_test.go b/src/test/e2e/34_custom_retries_test.go similarity index 91% rename from src/test/e2e/35_custom_retries_test.go rename to src/test/e2e/34_custom_retries_test.go index 92d7e2fffe..c7eebdc88d 100644 --- a/src/test/e2e/35_custom_retries_test.go +++ b/src/test/e2e/34_custom_retries_test.go @@ -28,7 +28,4 @@ func TestRetries(t *testing.T) { require.Error(t, err, stdOut, stdErr) require.Contains(t, stdErr, "Retrying in 5s") require.Contains(t, e2e.StripMessageFormatting(stdErr), "unable to install chart after 2 attempts") - - _, _, err = e2e.Zarf("package", "remove", "dos-games", "--confirm") - require.NoError(t, err) } diff --git a/src/test/e2e/50_oci_publish_deploy_test.go b/src/test/e2e/50_oci_publish_deploy_test.go index f3d5d89428..0d27886a0c 100644 --- a/src/test/e2e/50_oci_publish_deploy_test.go +++ b/src/test/e2e/50_oci_publish_deploy_test.go @@ -164,6 +164,5 @@ func (suite *PublishDeploySuiteTestSuite) Test_3_Copy() { } func TestPublishDeploySuite(t *testing.T) { - suite.Run(t, new(PublishDeploySuiteTestSuite)) } diff --git a/src/test/e2e/51_oci_compose_test.go b/src/test/e2e/51_oci_compose_test.go index 124dbb953a..ed08f92407 100644 --- a/src/test/e2e/51_oci_compose_test.go +++ b/src/test/e2e/51_oci_compose_test.go @@ -284,6 +284,5 @@ func (suite *SkeletonSuite) verifyComponentPaths(unpackedPath string, components } func TestSkeletonSuite(t *testing.T) { - suite.Run(t, new(SkeletonSuite)) } diff --git a/src/test/packages/22-git-data/zarf.yaml b/src/test/packages/22-git-data/zarf.yaml index 2e3b56d75c..3ebe431ea3 100644 --- a/src/test/packages/22-git-data/zarf.yaml +++ b/src/test/packages/22-git-data/zarf.yaml @@ -28,7 +28,7 @@ components: onDeploy: before: # Check to verify the package secret has been saved for the already deployed component - - cmd: test $(./zarf tools kubectl get secret -n zarf zarf-package-git-data-test -o jsonpath='{.data.*}' | base64 --decode | jq -r .deployedComponents | jq '. | length') -eq 2 + - cmd: test $(./zarf tools kubectl get secret -n zarf zarf-package-git-data-test -o jsonpath='{.data.*}' | base64 --decode | jq -r .deployedComponents | jq '. | length') -eq 1 description: Check that the package secret has been updated with the deployed component maxRetries: 3 @@ -43,7 +43,7 @@ components: onDeploy: before: # Check to verify the package secret has been saved for the already deployed component - - cmd: test $(./zarf tools kubectl get secret -n zarf zarf-package-git-data-test -o jsonpath='{.data.*}' | base64 --decode | jq -r .deployedComponents | jq '. | length') -eq 3 + - cmd: test $(./zarf tools kubectl get secret -n zarf zarf-package-git-data-test -o jsonpath='{.data.*}' | base64 --decode | jq -r .deployedComponents | jq '. | length') -eq 2 description: Check that the package secret has been updated with the deployed component maxRetries: 3 @@ -58,7 +58,7 @@ components: onDeploy: before: # Check to verify the package secret has been saved for the already deployed component - - cmd: test $(./zarf tools kubectl get secret -n zarf zarf-package-git-data-test -o jsonpath='{.data.*}' | base64 --decode | jq -r .deployedComponents | jq '. | length') -eq 4 + - cmd: test $(./zarf tools kubectl get secret -n zarf zarf-package-git-data-test -o jsonpath='{.data.*}' | base64 --decode | jq -r .deployedComponents | jq '. | length') -eq 3 description: Check that the package secret has been updated with the deployed component maxRetries: 3 onSuccess: diff --git a/src/types/k8s.go b/src/types/k8s.go index 2c2c6b3527..a3944d8d75 100644 --- a/src/types/k8s.go +++ b/src/types/k8s.go @@ -6,34 +6,11 @@ package types import ( "fmt" - "time" "github.com/defenseunicorns/pkg/helpers/v2" "github.com/defenseunicorns/zarf/src/config/lang" ) -// WebhookStatus defines the status of a Component Webhook operating on a Zarf package secret. -type WebhookStatus string - -// ComponentStatus defines the deployment status of a Zarf component within a package. -type ComponentStatus string - -// DefaultWebhookWaitDuration is the default amount of time Zarf will wait for a webhook to complete. -const DefaultWebhookWaitDuration = time.Minute * 5 - -// All the different status options for a Zarf Component or a webhook that is running for a Zarf Component deployment. -const ( - WebhookStatusSucceeded WebhookStatus = "Succeeded" - WebhookStatusFailed WebhookStatus = "Failed" - WebhookStatusRunning WebhookStatus = "Running" - WebhookStatusRemoving WebhookStatus = "Removing" - - ComponentStatusSucceeded ComponentStatus = "Succeeded" - ComponentStatusFailed ComponentStatus = "Failed" - ComponentStatusDeploying ComponentStatus = "Deploying" - ComponentStatusRemoving ComponentStatus = "Removing" -) - // Values during setup of the initial zarf state const ( ZarfGeneratedPasswordLen = 24 @@ -72,29 +49,17 @@ type ZarfState struct { // DeployedPackage contains information about a Zarf Package that has been deployed to a cluster // This object is saved as the data of a k8s secret within the 'Zarf' namespace (not as part of the ZarfState secret). type DeployedPackage struct { - Name string `json:"name"` - Data ZarfPackage `json:"data"` - CLIVersion string `json:"cliVersion"` - Generation int `json:"generation"` - DeployedComponents []DeployedComponent `json:"deployedComponents"` - ComponentWebhooks map[string]map[string]Webhook `json:"componentWebhooks,omitempty"` - ConnectStrings ConnectStrings `json:"connectStrings,omitempty"` + Name string `json:"name"` + Data ZarfPackage `json:"data"` + CLIVersion string `json:"cliVersion"` + DeployedComponents []DeployedComponent `json:"deployedComponents"` + ConnectStrings ConnectStrings `json:"connectStrings,omitempty"` } // DeployedComponent contains information about a Zarf Package Component that has been deployed to a cluster. type DeployedComponent struct { - Name string `json:"name"` - InstalledCharts []InstalledChart `json:"installedCharts"` - Status ComponentStatus `json:"status"` - ObservedGeneration int `json:"observedGeneration"` -} - -// Webhook contains information about a Component Webhook operating on a Zarf package secret. -type Webhook struct { - Name string `json:"name"` - WaitDurationSeconds int `json:"waitDurationSeconds,omitempty"` - Status WebhookStatus `json:"status"` - ObservedGeneration int `json:"observedGeneration"` + Name string `json:"name"` + InstalledCharts []InstalledChart `json:"installedCharts"` } // InstalledChart contains information about a Helm Chart that has been deployed to a cluster. diff --git a/src/types/runtime.go b/src/types/runtime.go index b4a7d44ad2..6c70f904be 100644 --- a/src/types/runtime.go +++ b/src/types/runtime.go @@ -58,7 +58,6 @@ type ZarfFindImagesOptions struct { // ZarfDeployOptions tracks the user-defined preferences during a package deploy. type ZarfDeployOptions struct { AdoptExistingResources bool `json:"adoptExistingResources" jsonschema:"description=Whether to adopt any pre-existing K8s resources into the Helm charts managed by Zarf"` - SkipWebhooks bool `json:"componentWebhooks" jsonschema:"description=Skip waiting for external webhooks to execute as each package component is deployed"` Timeout time.Duration `json:"timeout" jsonschema:"description=Timeout for performing Helm operations"` // TODO (@WSTARR): This is a library only addition to Zarf and should be refactored in the future (potentially to utilize component composability). As is it should NOT be exposed directly on the CLI