github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/examples/component-webhooks/capabilities/jackal-types.ts (about) 1 // To parse this data: 2 // 3 // import { Convert, JackalTypes } from "./file"; 4 // 5 // const jackalTypes = Convert.toJackalTypes(json); 6 // 7 // These functions will throw an error if the JSON doesn't 8 // match the expected interface, even if the JSON is valid. 9 10 export interface JackalTypes { 11 DeployedPackage: DeployedPackage; 12 JackalPackage: JackalPackage; 13 JackalState: JackalState; 14 } 15 16 export interface DeployedPackage { 17 cliVersion: string; 18 componentWebhooks?: { [key: string]: { [key: string]: Webhook } }; 19 connectStrings?: { [key: string]: ConnectString }; 20 data: JackalPackage; 21 deployedComponents: DeployedComponent[]; 22 generation: number; 23 name: string; 24 } 25 26 export interface Webhook { 27 name: string; 28 observedGeneration: number; 29 status: string; 30 waitDurationSeconds?: number; 31 } 32 33 export interface ConnectString { 34 /** 35 * Descriptive text that explains what the resource you would be connecting to is used for 36 */ 37 description: string; 38 /** 39 * URL path that gets appended to the k8s port-forward result 40 */ 41 url: string; 42 } 43 44 export interface JackalPackage { 45 /** 46 * Jackal-generated package build data 47 */ 48 build?: JackalBuildData; 49 /** 50 * List of components to deploy in this package 51 */ 52 components: JackalComponent[]; 53 /** 54 * Constant template values applied on deploy for K8s resources 55 */ 56 constants?: JackalPackageConstant[]; 57 /** 58 * The kind of Jackal package 59 */ 60 kind: Kind; 61 /** 62 * Package metadata 63 */ 64 metadata?: JackalMetadata; 65 /** 66 * Variable template values applied on deploy for K8s resources 67 */ 68 variables?: JackalPackageVariable[]; 69 } 70 71 /** 72 * Jackal-generated package build data 73 */ 74 export interface JackalBuildData { 75 /** 76 * The architecture this package was created on 77 */ 78 architecture: string; 79 /** 80 * Whether this package was created with differential components 81 */ 82 differential?: boolean; 83 /** 84 * List of components that were not included in this package due to differential packaging 85 */ 86 differentialMissing?: string[]; 87 /** 88 * The minimum version of Jackal that does not have breaking package structure changes 89 */ 90 lastNonBreakingVersion?: string; 91 /** 92 * Any migrations that have been run on this package 93 */ 94 migrations?: string[]; 95 /** 96 * Any registry domains that were overridden on package create when pulling images 97 */ 98 registryOverrides?: { [key: string]: string }; 99 /** 100 * The machine name that created this package 101 */ 102 terminal: string; 103 /** 104 * The timestamp when this package was created 105 */ 106 timestamp: string; 107 /** 108 * The username who created this package 109 */ 110 user: string; 111 /** 112 * The version of Jackal used to build this package 113 */ 114 version: string; 115 } 116 117 export interface JackalComponent { 118 /** 119 * Custom commands to run at various stages of a package lifecycle 120 */ 121 actions?: JackalComponentActions; 122 /** 123 * Helm charts to install during package deploy 124 */ 125 charts?: JackalChart[]; 126 /** 127 * [Deprecated] Specify a path to a public key to validate signed online resources. This 128 * will be removed in Jackal v1.0.0. 129 */ 130 cosignKeyPath?: string; 131 /** 132 * Datasets to inject into a container in the target cluster 133 */ 134 dataInjections?: JackalDataInjection[]; 135 /** 136 * Determines the default Y/N state for installing this component on package deploy 137 */ 138 default?: boolean; 139 /** 140 * Message to include during package deploy describing the purpose of this component 141 */ 142 description?: string; 143 /** 144 * Extend component functionality with additional features 145 */ 146 extensions?: JackalComponentExtensions; 147 /** 148 * Files or folders to place on disk during package deployment 149 */ 150 files?: JackalFile[]; 151 /** 152 * [Deprecated] Create a user selector field based on all components in the same group. This 153 * will be removed in Jackal v1.0.0. Consider using 'only.flavor' instead. 154 */ 155 group?: string; 156 /** 157 * List of OCI images to include in the package 158 */ 159 images?: string[]; 160 /** 161 * Import a component from another Jackal package 162 */ 163 import?: JackalComponentImport; 164 /** 165 * Kubernetes manifests to be included in a generated Helm chart on package deploy 166 */ 167 manifests?: JackalManifest[]; 168 /** 169 * The name of the component 170 */ 171 name: string; 172 /** 173 * Filter when this component is included in package creation or deployment 174 */ 175 only?: JackalComponentOnlyTarget; 176 /** 177 * List of git repos to include in the package 178 */ 179 repos?: string[]; 180 /** 181 * Do not prompt user to install this component 182 */ 183 required?: boolean; 184 /** 185 * [Deprecated] (replaced by actions) Custom commands to run before or after package 186 * deployment. This will be removed in Jackal v1.0.0. 187 */ 188 scripts?: DeprecatedJackalComponentScripts; 189 } 190 191 /** 192 * Custom commands to run at various stages of a package lifecycle 193 */ 194 export interface JackalComponentActions { 195 /** 196 * Actions to run during package creation 197 */ 198 onCreate?: JackalComponentActionSet; 199 /** 200 * Actions to run during package deployment 201 */ 202 onDeploy?: JackalComponentActionSet; 203 /** 204 * Actions to run during package removal 205 */ 206 onRemove?: JackalComponentActionSet; 207 } 208 209 /** 210 * Actions to run during package creation 211 * 212 * Actions to run during package deployment 213 * 214 * Actions to run during package removal 215 */ 216 export interface JackalComponentActionSet { 217 /** 218 * Actions to run at the end of an operation 219 */ 220 after?: JackalComponentAction[]; 221 /** 222 * Actions to run at the start of an operation 223 */ 224 before?: JackalComponentAction[]; 225 /** 226 * Default configuration for all actions in this set 227 */ 228 defaults?: JackalComponentActionDefaults; 229 /** 230 * Actions to run if all operations fail 231 */ 232 onFailure?: JackalComponentAction[]; 233 /** 234 * Actions to run if all operations succeed 235 */ 236 onSuccess?: JackalComponentAction[]; 237 } 238 239 export interface JackalComponentAction { 240 /** 241 * The command to run. Must specify either cmd or wait for the action to do anything. 242 */ 243 cmd?: string; 244 /** 245 * Description of the action to be displayed during package execution instead of the command 246 */ 247 description?: string; 248 /** 249 * The working directory to run the command in (default is CWD) 250 */ 251 dir?: string; 252 /** 253 * Additional environment variables to set for the command 254 */ 255 env?: string[]; 256 /** 257 * Retry the command if it fails up to given number of times (default 0) 258 */ 259 maxRetries?: number; 260 /** 261 * Timeout in seconds for the command (default to 0 262 */ 263 maxTotalSeconds?: number; 264 /** 265 * Hide the output of the command during package deployment (default false) 266 */ 267 mute?: boolean; 268 /** 269 * [Deprecated] (replaced by setVariables) (onDeploy/cmd only) The name of a variable to 270 * update with the output of the command. This variable will be available to all remaining 271 * actions and components in the package. This will be removed in Jackal v1.0.0 272 */ 273 setVariable?: string; 274 /** 275 * (onDeploy/cmd only) An array of variables to update with the output of the command. These 276 * variables will be available to all remaining actions and components in the package. 277 */ 278 setVariables?: JackalComponentActionSetVariable[]; 279 /** 280 * (cmd only) Indicates a preference for a shell for the provided cmd to be executed in on 281 * supported operating systems 282 */ 283 shell?: JackalComponentActionShell; 284 /** 285 * Wait for a condition to be met before continuing. Must specify either cmd or wait for the 286 * action. See the 'jackal tools wait-for' command for more info. 287 */ 288 wait?: JackalComponentActionWait; 289 } 290 291 export interface JackalComponentActionSetVariable { 292 /** 293 * Whether to automatically indent the variable's value (if multiline) when templating. 294 * Based on the number of chars before the start of ###JACKAL_VAR_. 295 */ 296 autoIndent?: boolean; 297 /** 298 * The name to be used for the variable 299 */ 300 name: string; 301 /** 302 * An optional regex pattern that a variable value must match before a package deployment 303 * can continue. 304 */ 305 pattern?: string; 306 /** 307 * Whether to mark this variable as sensitive to not print it in the Jackal log 308 */ 309 sensitive?: boolean; 310 /** 311 * Changes the handling of a variable to load contents differently (i.e. from a file rather 312 * than as a raw variable - templated files should be kept below 1 MiB) 313 */ 314 type?: Type; 315 } 316 317 /** 318 * Changes the handling of a variable to load contents differently (i.e. from a file rather 319 * than as a raw variable - templated files should be kept below 1 MiB) 320 */ 321 export enum Type { 322 File = "file", 323 Raw = "raw", 324 } 325 326 /** 327 * (cmd only) Indicates a preference for a shell for the provided cmd to be executed in on 328 * supported operating systems 329 */ 330 export interface JackalComponentActionShell { 331 /** 332 * (default 'sh') Indicates a preference for the shell to use on macOS systems 333 */ 334 darwin?: string; 335 /** 336 * (default 'sh') Indicates a preference for the shell to use on Linux systems 337 */ 338 linux?: string; 339 /** 340 * (default 'powershell') Indicates a preference for the shell to use on Windows systems 341 * (note that choosing 'cmd' will turn off migrations like touch -> New-Item) 342 */ 343 windows?: string; 344 } 345 346 /** 347 * Wait for a condition to be met before continuing. Must specify either cmd or wait for the 348 * action. See the 'jackal tools wait-for' command for more info. 349 */ 350 export interface JackalComponentActionWait { 351 /** 352 * Wait for a condition to be met in the cluster before continuing. Only one of cluster or 353 * network can be specified. 354 */ 355 cluster?: JackalComponentActionWaitCluster; 356 /** 357 * Wait for a condition to be met on the network before continuing. Only one of cluster or 358 * network can be specified. 359 */ 360 network?: JackalComponentActionWaitNetwork; 361 } 362 363 /** 364 * Wait for a condition to be met in the cluster before continuing. Only one of cluster or 365 * network can be specified. 366 */ 367 export interface JackalComponentActionWaitCluster { 368 /** 369 * The condition or jsonpath state to wait for; defaults to exist 370 */ 371 condition?: string; 372 /** 373 * The kind of resource to wait for 374 */ 375 kind: string; 376 /** 377 * The name of the resource or selector to wait for 378 */ 379 name: string; 380 /** 381 * The namespace of the resource to wait for 382 */ 383 namespace?: string; 384 } 385 386 /** 387 * Wait for a condition to be met on the network before continuing. Only one of cluster or 388 * network can be specified. 389 */ 390 export interface JackalComponentActionWaitNetwork { 391 /** 392 * The address to wait for 393 */ 394 address: string; 395 /** 396 * The HTTP status code to wait for if using http or https 397 */ 398 code?: number; 399 /** 400 * The protocol to wait for 401 */ 402 protocol: Protocol; 403 } 404 405 /** 406 * The protocol to wait for 407 */ 408 export enum Protocol { 409 HTTP = "http", 410 HTTPS = "https", 411 TCP = "tcp", 412 } 413 414 /** 415 * Default configuration for all actions in this set 416 */ 417 export interface JackalComponentActionDefaults { 418 /** 419 * Working directory for commands (default CWD) 420 */ 421 dir?: string; 422 /** 423 * Additional environment variables for commands 424 */ 425 env?: string[]; 426 /** 427 * Retry commands given number of times if they fail (default 0) 428 */ 429 maxRetries?: number; 430 /** 431 * Default timeout in seconds for commands (default to 0 432 */ 433 maxTotalSeconds?: number; 434 /** 435 * Hide the output of commands during execution (default false) 436 */ 437 mute?: boolean; 438 /** 439 * (cmd only) Indicates a preference for a shell for the provided cmd to be executed in on 440 * supported operating systems 441 */ 442 shell?: JackalComponentActionShell; 443 } 444 445 export interface JackalChart { 446 /** 447 * The path to the chart in the repo if using a git repo instead of a helm repo 448 */ 449 gitPath?: string; 450 /** 451 * The path to the chart folder 452 */ 453 localPath?: string; 454 /** 455 * The name of the chart to deploy; this should be the name of the chart as it is installed 456 * in the helm repo 457 */ 458 name: string; 459 /** 460 * The namespace to deploy the chart to 461 */ 462 namespace: string; 463 /** 464 * Whether to not wait for chart resources to be ready before continuing 465 */ 466 noWait?: boolean; 467 /** 468 * The name of the release to create; defaults to the name of the chart 469 */ 470 releaseName?: string; 471 /** 472 * The URL of the OCI registry, chart repository, or git repo where the helm chart is stored 473 */ 474 url?: string; 475 /** 476 * List of local values file paths or remote URLs to include in the package; these will be 477 * merged together 478 */ 479 valuesFiles?: string[]; 480 /** 481 * The version of the chart to deploy; for git-based charts this is also the tag of the git 482 * repo 483 */ 484 version?: string; 485 } 486 487 export interface JackalDataInjection { 488 /** 489 * Compress the data before transmitting using gzip. Note: this requires support for 490 * tar/gzip locally and in the target image. 491 */ 492 compress?: boolean; 493 /** 494 * Either a path to a local folder/file or a remote URL of a file to inject into the given 495 * target pod + container 496 */ 497 source: string; 498 /** 499 * The target pod + container to inject the data into 500 */ 501 target: JackalContainerTarget; 502 } 503 504 /** 505 * The target pod + container to inject the data into 506 */ 507 export interface JackalContainerTarget { 508 /** 509 * The container name to target for data injection 510 */ 511 container: string; 512 /** 513 * The namespace to target for data injection 514 */ 515 namespace: string; 516 /** 517 * The path within the container to copy the data into 518 */ 519 path: string; 520 /** 521 * The K8s selector to target for data injection 522 */ 523 selector: string; 524 } 525 526 /** 527 * Extend component functionality with additional features 528 */ 529 export interface JackalComponentExtensions { 530 /** 531 * Configurations for installing Big Bang and Flux in the cluster 532 */ 533 bigbang?: BigBang; 534 } 535 536 /** 537 * Configurations for installing Big Bang and Flux in the cluster 538 */ 539 export interface BigBang { 540 /** 541 * Optional paths to Flux kustomize strategic merge patch files 542 */ 543 fluxPatchFiles?: string[]; 544 /** 545 * Override repo to pull Big Bang from instead of Repo One 546 */ 547 repo?: string; 548 /** 549 * Whether to skip deploying flux; Defaults to false 550 */ 551 skipFlux?: boolean; 552 /** 553 * The list of values files to pass to Big Bang; these will be merged together 554 */ 555 valuesFiles?: string[]; 556 /** 557 * The version of Big Bang to use 558 */ 559 version: string; 560 } 561 562 export interface JackalFile { 563 /** 564 * (files only) Determines if the file should be made executable during package deploy 565 */ 566 executable?: boolean; 567 /** 568 * Local folder or file to be extracted from a 'source' archive 569 */ 570 extractPath?: string; 571 /** 572 * (files only) Optional SHA256 checksum of the file 573 */ 574 shasum?: string; 575 /** 576 * Local folder or file path or remote URL to pull into the package 577 */ 578 source: string; 579 /** 580 * List of symlinks to create during package deploy 581 */ 582 symlinks?: string[]; 583 /** 584 * The absolute or relative path where the file or folder should be copied to during package 585 * deploy 586 */ 587 target: string; 588 } 589 590 /** 591 * Import a component from another Jackal package 592 */ 593 export interface JackalComponentImport { 594 /** 595 * The name of the component to import from the referenced jackal.yaml 596 */ 597 name?: string; 598 /** 599 * The relative path to a directory containing a jackal.yaml to import from 600 */ 601 path?: string; 602 /** 603 * [beta] The URL to a Jackal package to import via OCI 604 */ 605 url?: string; 606 } 607 608 export interface JackalManifest { 609 /** 610 * List of local K8s YAML files or remote URLs to deploy (in order) 611 */ 612 files?: string[]; 613 /** 614 * List of local kustomization paths or remote URLs to include in the package 615 */ 616 kustomizations?: string[]; 617 /** 618 * Allow traversing directory above the current directory if needed for kustomization 619 */ 620 kustomizeAllowAnyDirectory?: boolean; 621 /** 622 * A name to give this collection of manifests; this will become the name of the 623 * dynamically-created helm chart 624 */ 625 name: string; 626 /** 627 * The namespace to deploy the manifests to 628 */ 629 namespace?: string; 630 /** 631 * Whether to not wait for manifest resources to be ready before continuing 632 */ 633 noWait?: boolean; 634 } 635 636 /** 637 * Filter when this component is included in package creation or deployment 638 */ 639 export interface JackalComponentOnlyTarget { 640 /** 641 * Only deploy component to specified clusters 642 */ 643 cluster?: JackalComponentOnlyCluster; 644 /** 645 * Only include this component when a matching '--flavor' is specified on 'jackal package 646 * create' 647 */ 648 flavor?: string; 649 /** 650 * Only deploy component to specified OS 651 */ 652 localOS?: LocalOS; 653 } 654 655 /** 656 * Only deploy component to specified clusters 657 */ 658 export interface JackalComponentOnlyCluster { 659 /** 660 * Only create and deploy to clusters of the given architecture 661 */ 662 architecture?: Architecture; 663 /** 664 * A list of kubernetes distros this package works with (Reserved for future use) 665 */ 666 distros?: string[]; 667 } 668 669 /** 670 * Only create and deploy to clusters of the given architecture 671 */ 672 export enum Architecture { 673 Amd64 = "amd64", 674 Arm64 = "arm64", 675 } 676 677 /** 678 * Only deploy component to specified OS 679 */ 680 export enum LocalOS { 681 Darwin = "darwin", 682 Linux = "linux", 683 Windows = "windows", 684 } 685 686 /** 687 * [Deprecated] (replaced by actions) Custom commands to run before or after package 688 * deployment. This will be removed in Jackal v1.0.0. 689 */ 690 export interface DeprecatedJackalComponentScripts { 691 /** 692 * Scripts to run after the component successfully deploys 693 */ 694 after?: string[]; 695 /** 696 * Scripts to run before the component is deployed 697 */ 698 before?: string[]; 699 /** 700 * Scripts to run before the component is added during package create 701 */ 702 prepare?: string[]; 703 /** 704 * Retry the script if it fails 705 */ 706 retry?: boolean; 707 /** 708 * Show the output of the script during package deployment 709 */ 710 showOutput?: boolean; 711 /** 712 * Timeout in seconds for the script 713 */ 714 timeoutSeconds?: number; 715 } 716 717 export interface JackalPackageConstant { 718 /** 719 * Whether to automatically indent the variable's value (if multiline) when templating. 720 * Based on the number of chars before the start of ###JACKAL_CONST_. 721 */ 722 autoIndent?: boolean; 723 /** 724 * A description of the constant to explain its purpose on package create or deploy 725 * confirmation prompts 726 */ 727 description?: string; 728 /** 729 * The name to be used for the constant 730 */ 731 name: string; 732 /** 733 * An optional regex pattern that a constant value must match before a package can be 734 * created. 735 */ 736 pattern?: string; 737 /** 738 * The value to set for the constant during deploy 739 */ 740 value: string; 741 } 742 743 /** 744 * The kind of Jackal package 745 */ 746 export enum Kind { 747 JackalInitConfig = "JackalInitConfig", 748 JackalPackageConfig = "JackalPackageConfig", 749 } 750 751 /** 752 * Package metadata 753 */ 754 export interface JackalMetadata { 755 /** 756 * Checksum of a checksums.txt file that contains checksums all the layers within the 757 * package. 758 */ 759 aggregateChecksum?: string; 760 /** 761 * The target cluster architecture for this package 762 */ 763 architecture?: string; 764 /** 765 * Comma-separated list of package authors (including contact info) 766 */ 767 authors?: string; 768 /** 769 * Additional information about this package 770 */ 771 description?: string; 772 /** 773 * Link to package documentation when online 774 */ 775 documentation?: string; 776 /** 777 * An image URL to embed in this package (Reserved for future use in Jackal UI) 778 */ 779 image?: string; 780 /** 781 * Name to identify this Jackal package 782 */ 783 name: string; 784 /** 785 * Link to package source code when online 786 */ 787 source?: string; 788 /** 789 * Disable compression of this package 790 */ 791 uncompressed?: boolean; 792 /** 793 * Link to package information when online 794 */ 795 url?: string; 796 /** 797 * Name of the distributing entity, organization or individual. 798 */ 799 vendor?: string; 800 /** 801 * Generic string set by a package author to track the package version (Note: 802 * JackalInitConfigs will always be versioned to the CLIVersion they were created with) 803 */ 804 version?: string; 805 /** 806 * Yaml OnLy Online (YOLO): True enables deploying a Jackal package without first running jackal 807 * init against the cluster. This is ideal for connected environments where you want to use 808 * existing VCS and container registries. 809 */ 810 yolo?: boolean; 811 } 812 813 export interface JackalPackageVariable { 814 /** 815 * Whether to automatically indent the variable's value (if multiline) when templating. 816 * Based on the number of chars before the start of ###JACKAL_VAR_. 817 */ 818 autoIndent?: boolean; 819 /** 820 * The default value to use for the variable 821 */ 822 default?: string; 823 /** 824 * A description of the variable to be used when prompting the user a value 825 */ 826 description?: string; 827 /** 828 * The name to be used for the variable 829 */ 830 name: string; 831 /** 832 * An optional regex pattern that a variable value must match before a package can be 833 * deployed. 834 */ 835 pattern?: string; 836 /** 837 * Whether to prompt the user for input for this variable 838 */ 839 prompt?: boolean; 840 /** 841 * Whether to mark this variable as sensitive to not print it in the Jackal log 842 */ 843 sensitive?: boolean; 844 /** 845 * Changes the handling of a variable to load contents differently (i.e. from a file rather 846 * than as a raw variable - templated files should be kept below 1 MiB) 847 */ 848 type?: Type; 849 } 850 851 export interface DeployedComponent { 852 installedCharts: InstalledChart[]; 853 name: string; 854 observedGeneration: number; 855 status: string; 856 } 857 858 export interface InstalledChart { 859 chartName: string; 860 namespace: string; 861 } 862 863 export interface JackalState { 864 agentTLS: GeneratedPKI; 865 /** 866 * Machine architecture of the k8s node(s) 867 */ 868 architecture: string; 869 /** 870 * Information about the artifact registry Jackal is configured to use 871 */ 872 artifactServer: ArtifactServerInfo; 873 /** 874 * K8s distribution of the cluster Jackal was deployed to 875 */ 876 distro: string; 877 /** 878 * Information about the repository Jackal is configured to use 879 */ 880 gitServer: GitServerInfo; 881 /** 882 * Secret value that the internal Grafana server was seeded with 883 */ 884 loggingSecret: string; 885 /** 886 * Information about the container registry Jackal is configured to use 887 */ 888 registryInfo: RegistryInfo; 889 storageClass: string; 890 /** 891 * Indicates if Jackal was initialized while deploying its own k8s cluster 892 */ 893 jackalAppliance: boolean; 894 } 895 896 export interface GeneratedPKI { 897 ca: string; 898 cert: string; 899 key: string; 900 } 901 902 /** 903 * Information about the artifact registry Jackal is configured to use 904 */ 905 export interface ArtifactServerInfo { 906 /** 907 * URL address of the artifact registry 908 */ 909 address: string; 910 /** 911 * Indicates if we are using a artifact registry that Jackal is directly managing 912 */ 913 internalServer: boolean; 914 /** 915 * Password of a user with push access to the artifact registry 916 */ 917 pushPassword: string; 918 /** 919 * Username of a user with push access to the artifact registry 920 */ 921 pushUsername: string; 922 } 923 924 /** 925 * Information about the repository Jackal is configured to use 926 */ 927 export interface GitServerInfo { 928 /** 929 * URL address of the git server 930 */ 931 address: string; 932 /** 933 * Indicates if we are using a git server that Jackal is directly managing 934 */ 935 internalServer: boolean; 936 /** 937 * Password of a user with pull-only access to the git repository. If not provided for an 938 * external repository then the push-user is used 939 */ 940 pullPassword: string; 941 /** 942 * Username of a user with pull-only access to the git repository. If not provided for an 943 * external repository then the push-user is used 944 */ 945 pullUsername: string; 946 /** 947 * Password of a user with push access to the git repository 948 */ 949 pushPassword: string; 950 /** 951 * Username of a user with push access to the git repository 952 */ 953 pushUsername: string; 954 } 955 956 /** 957 * Information about the container registry Jackal is configured to use 958 */ 959 export interface RegistryInfo { 960 /** 961 * URL address of the registry 962 */ 963 address: string; 964 /** 965 * Indicates if we are using a registry that Jackal is directly managing 966 */ 967 internalRegistry: boolean; 968 /** 969 * Nodeport of the registry. Only needed if the registry is running inside the kubernetes 970 * cluster 971 */ 972 nodePort: number; 973 /** 974 * Password of a user with pull-only access to the registry. If not provided for an external 975 * registry than the push-user is used 976 */ 977 pullPassword: string; 978 /** 979 * Username of a user with pull-only access to the registry. If not provided for an external 980 * registry than the push-user is used 981 */ 982 pullUsername: string; 983 /** 984 * Password of a user with push access to the registry 985 */ 986 pushPassword: string; 987 /** 988 * Username of a user with push access to the registry 989 */ 990 pushUsername: string; 991 /** 992 * Secret value that the registry was seeded with 993 */ 994 secret: string; 995 } 996 997 // Converts JSON strings to/from your types 998 // and asserts the results of JSON.parse at runtime 999 export class Convert { 1000 public static toJackalTypes(json: string): JackalTypes { 1001 return cast(JSON.parse(json), r("JackalTypes")); 1002 } 1003 1004 public static jackalTypesToJson(value: JackalTypes): string { 1005 return JSON.stringify(uncast(value, r("JackalTypes")), null, 2); 1006 } 1007 } 1008 1009 function invalidValue(typ: any, val: any, key: any, parent: any = ''): never { 1010 const prettyTyp = prettyTypeName(typ); 1011 const parentText = parent ? ` on ${parent}` : ''; 1012 const keyText = key ? ` for key "${key}"` : ''; 1013 throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`); 1014 } 1015 1016 function prettyTypeName(typ: any): string { 1017 if (Array.isArray(typ)) { 1018 if (typ.length === 2 && typ[0] === undefined) { 1019 return `an optional ${prettyTypeName(typ[1])}`; 1020 } else { 1021 return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`; 1022 } 1023 } else if (typeof typ === "object" && typ.literal !== undefined) { 1024 return typ.literal; 1025 } else { 1026 return typeof typ; 1027 } 1028 } 1029 1030 function jsonToJSProps(typ: any): any { 1031 if (typ.jsonToJS === undefined) { 1032 const map: any = {}; 1033 typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ }); 1034 typ.jsonToJS = map; 1035 } 1036 return typ.jsonToJS; 1037 } 1038 1039 function jsToJSONProps(typ: any): any { 1040 if (typ.jsToJSON === undefined) { 1041 const map: any = {}; 1042 typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ }); 1043 typ.jsToJSON = map; 1044 } 1045 return typ.jsToJSON; 1046 } 1047 1048 function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any { 1049 function transformPrimitive(typ: string, val: any): any { 1050 if (typeof typ === typeof val) return val; 1051 return invalidValue(typ, val, key, parent); 1052 } 1053 1054 function transformUnion(typs: any[], val: any): any { 1055 // val must validate against one typ in typs 1056 const l = typs.length; 1057 for (let i = 0; i < l; i++) { 1058 const typ = typs[i]; 1059 try { 1060 return transform(val, typ, getProps); 1061 } catch (_) {} 1062 } 1063 return invalidValue(typs, val, key, parent); 1064 } 1065 1066 function transformEnum(cases: string[], val: any): any { 1067 if (cases.indexOf(val) !== -1) return val; 1068 return invalidValue(cases.map(a => { return l(a); }), val, key, parent); 1069 } 1070 1071 function transformArray(typ: any, val: any): any { 1072 // val must be an array with no invalid elements 1073 if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent); 1074 return val.map(el => transform(el, typ, getProps)); 1075 } 1076 1077 function transformDate(val: any): any { 1078 if (val === null) { 1079 return null; 1080 } 1081 const d = new Date(val); 1082 if (isNaN(d.valueOf())) { 1083 return invalidValue(l("Date"), val, key, parent); 1084 } 1085 return d; 1086 } 1087 1088 function transformObject(props: { [k: string]: any }, additional: any, val: any): any { 1089 if (val === null || typeof val !== "object" || Array.isArray(val)) { 1090 return invalidValue(l(ref || "object"), val, key, parent); 1091 } 1092 const result: any = {}; 1093 Object.getOwnPropertyNames(props).forEach(key => { 1094 const prop = props[key]; 1095 const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined; 1096 result[prop.key] = transform(v, prop.typ, getProps, key, ref); 1097 }); 1098 Object.getOwnPropertyNames(val).forEach(key => { 1099 if (!Object.prototype.hasOwnProperty.call(props, key)) { 1100 result[key] = transform(val[key], additional, getProps, key, ref); 1101 } 1102 }); 1103 return result; 1104 } 1105 1106 if (typ === "any") return val; 1107 if (typ === null) { 1108 if (val === null) return val; 1109 return invalidValue(typ, val, key, parent); 1110 } 1111 if (typ === false) return invalidValue(typ, val, key, parent); 1112 let ref: any = undefined; 1113 while (typeof typ === "object" && typ.ref !== undefined) { 1114 ref = typ.ref; 1115 typ = typeMap[typ.ref]; 1116 } 1117 if (Array.isArray(typ)) return transformEnum(typ, val); 1118 if (typeof typ === "object") { 1119 return typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val) 1120 : typ.hasOwnProperty("arrayItems") ? transformArray(typ.arrayItems, val) 1121 : typ.hasOwnProperty("props") ? transformObject(getProps(typ), typ.additional, val) 1122 : invalidValue(typ, val, key, parent); 1123 } 1124 // Numbers can be parsed by Date but shouldn't be. 1125 if (typ === Date && typeof val !== "number") return transformDate(val); 1126 return transformPrimitive(typ, val); 1127 } 1128 1129 function cast<T>(val: any, typ: any): T { 1130 return transform(val, typ, jsonToJSProps); 1131 } 1132 1133 function uncast<T>(val: T, typ: any): any { 1134 return transform(val, typ, jsToJSONProps); 1135 } 1136 1137 function l(typ: any) { 1138 return { literal: typ }; 1139 } 1140 1141 function a(typ: any) { 1142 return { arrayItems: typ }; 1143 } 1144 1145 function u(...typs: any[]) { 1146 return { unionMembers: typs }; 1147 } 1148 1149 function o(props: any[], additional: any) { 1150 return { props, additional }; 1151 } 1152 1153 function m(additional: any) { 1154 return { props: [], additional }; 1155 } 1156 1157 function r(name: string) { 1158 return { ref: name }; 1159 } 1160 1161 const typeMap: any = { 1162 "JackalTypes": o([ 1163 { json: "DeployedPackage", js: "DeployedPackage", typ: r("DeployedPackage") }, 1164 { json: "JackalPackage", js: "JackalPackage", typ: r("JackalPackage") }, 1165 { json: "JackalState", js: "JackalState", typ: r("JackalState") }, 1166 ], false), 1167 "DeployedPackage": o([ 1168 { json: "cliVersion", js: "cliVersion", typ: "" }, 1169 { json: "componentWebhooks", js: "componentWebhooks", typ: u(undefined, m(m(r("Webhook")))) }, 1170 { json: "connectStrings", js: "connectStrings", typ: u(undefined, m(r("ConnectString"))) }, 1171 { json: "data", js: "data", typ: r("JackalPackage") }, 1172 { json: "deployedComponents", js: "deployedComponents", typ: a(r("DeployedComponent")) }, 1173 { json: "generation", js: "generation", typ: 0 }, 1174 { json: "name", js: "name", typ: "" }, 1175 ], false), 1176 "Webhook": o([ 1177 { json: "name", js: "name", typ: "" }, 1178 { json: "observedGeneration", js: "observedGeneration", typ: 0 }, 1179 { json: "status", js: "status", typ: "" }, 1180 { json: "waitDurationSeconds", js: "waitDurationSeconds", typ: u(undefined, 0) }, 1181 ], false), 1182 "ConnectString": o([ 1183 { json: "description", js: "description", typ: "" }, 1184 { json: "url", js: "url", typ: "" }, 1185 ], false), 1186 "JackalPackage": o([ 1187 { json: "build", js: "build", typ: u(undefined, r("JackalBuildData")) }, 1188 { json: "components", js: "components", typ: a(r("JackalComponent")) }, 1189 { json: "constants", js: "constants", typ: u(undefined, a(r("JackalPackageConstant"))) }, 1190 { json: "kind", js: "kind", typ: r("Kind") }, 1191 { json: "metadata", js: "metadata", typ: u(undefined, r("JackalMetadata")) }, 1192 { json: "variables", js: "variables", typ: u(undefined, a(r("JackalPackageVariable"))) }, 1193 ], false), 1194 "JackalBuildData": o([ 1195 { json: "architecture", js: "architecture", typ: "" }, 1196 { json: "differential", js: "differential", typ: u(undefined, true) }, 1197 { json: "differentialMissing", js: "differentialMissing", typ: u(undefined, a("")) }, 1198 { json: "lastNonBreakingVersion", js: "lastNonBreakingVersion", typ: u(undefined, "") }, 1199 { json: "migrations", js: "migrations", typ: u(undefined, a("")) }, 1200 { json: "registryOverrides", js: "registryOverrides", typ: u(undefined, m("")) }, 1201 { json: "terminal", js: "terminal", typ: "" }, 1202 { json: "timestamp", js: "timestamp", typ: "" }, 1203 { json: "user", js: "user", typ: "" }, 1204 { json: "version", js: "version", typ: "" }, 1205 ], false), 1206 "JackalComponent": o([ 1207 { json: "actions", js: "actions", typ: u(undefined, r("JackalComponentActions")) }, 1208 { json: "charts", js: "charts", typ: u(undefined, a(r("JackalChart"))) }, 1209 { json: "cosignKeyPath", js: "cosignKeyPath", typ: u(undefined, "") }, 1210 { json: "dataInjections", js: "dataInjections", typ: u(undefined, a(r("JackalDataInjection"))) }, 1211 { json: "default", js: "default", typ: u(undefined, true) }, 1212 { json: "description", js: "description", typ: u(undefined, "") }, 1213 { json: "extensions", js: "extensions", typ: u(undefined, r("JackalComponentExtensions")) }, 1214 { json: "files", js: "files", typ: u(undefined, a(r("JackalFile"))) }, 1215 { json: "group", js: "group", typ: u(undefined, "") }, 1216 { json: "images", js: "images", typ: u(undefined, a("")) }, 1217 { json: "import", js: "import", typ: u(undefined, r("JackalComponentImport")) }, 1218 { json: "manifests", js: "manifests", typ: u(undefined, a(r("JackalManifest"))) }, 1219 { json: "name", js: "name", typ: "" }, 1220 { json: "only", js: "only", typ: u(undefined, r("JackalComponentOnlyTarget")) }, 1221 { json: "repos", js: "repos", typ: u(undefined, a("")) }, 1222 { json: "required", js: "required", typ: u(undefined, true) }, 1223 { json: "scripts", js: "scripts", typ: u(undefined, r("DeprecatedJackalComponentScripts")) }, 1224 ], false), 1225 "JackalComponentActions": o([ 1226 { json: "onCreate", js: "onCreate", typ: u(undefined, r("JackalComponentActionSet")) }, 1227 { json: "onDeploy", js: "onDeploy", typ: u(undefined, r("JackalComponentActionSet")) }, 1228 { json: "onRemove", js: "onRemove", typ: u(undefined, r("JackalComponentActionSet")) }, 1229 ], false), 1230 "JackalComponentActionSet": o([ 1231 { json: "after", js: "after", typ: u(undefined, a(r("JackalComponentAction"))) }, 1232 { json: "before", js: "before", typ: u(undefined, a(r("JackalComponentAction"))) }, 1233 { json: "defaults", js: "defaults", typ: u(undefined, r("JackalComponentActionDefaults")) }, 1234 { json: "onFailure", js: "onFailure", typ: u(undefined, a(r("JackalComponentAction"))) }, 1235 { json: "onSuccess", js: "onSuccess", typ: u(undefined, a(r("JackalComponentAction"))) }, 1236 ], false), 1237 "JackalComponentAction": o([ 1238 { json: "cmd", js: "cmd", typ: u(undefined, "") }, 1239 { json: "description", js: "description", typ: u(undefined, "") }, 1240 { json: "dir", js: "dir", typ: u(undefined, "") }, 1241 { json: "env", js: "env", typ: u(undefined, a("")) }, 1242 { json: "maxRetries", js: "maxRetries", typ: u(undefined, 0) }, 1243 { json: "maxTotalSeconds", js: "maxTotalSeconds", typ: u(undefined, 0) }, 1244 { json: "mute", js: "mute", typ: u(undefined, true) }, 1245 { json: "setVariable", js: "setVariable", typ: u(undefined, "") }, 1246 { json: "setVariables", js: "setVariables", typ: u(undefined, a(r("JackalComponentActionSetVariable"))) }, 1247 { json: "shell", js: "shell", typ: u(undefined, r("JackalComponentActionShell")) }, 1248 { json: "wait", js: "wait", typ: u(undefined, r("JackalComponentActionWait")) }, 1249 ], false), 1250 "JackalComponentActionSetVariable": o([ 1251 { json: "autoIndent", js: "autoIndent", typ: u(undefined, true) }, 1252 { json: "name", js: "name", typ: "" }, 1253 { json: "pattern", js: "pattern", typ: u(undefined, "") }, 1254 { json: "sensitive", js: "sensitive", typ: u(undefined, true) }, 1255 { json: "type", js: "type", typ: u(undefined, r("Type")) }, 1256 ], false), 1257 "JackalComponentActionShell": o([ 1258 { json: "darwin", js: "darwin", typ: u(undefined, "") }, 1259 { json: "linux", js: "linux", typ: u(undefined, "") }, 1260 { json: "windows", js: "windows", typ: u(undefined, "") }, 1261 ], false), 1262 "JackalComponentActionWait": o([ 1263 { json: "cluster", js: "cluster", typ: u(undefined, r("JackalComponentActionWaitCluster")) }, 1264 { json: "network", js: "network", typ: u(undefined, r("JackalComponentActionWaitNetwork")) }, 1265 ], false), 1266 "JackalComponentActionWaitCluster": o([ 1267 { json: "condition", js: "condition", typ: u(undefined, "") }, 1268 { json: "kind", js: "kind", typ: "" }, 1269 { json: "name", js: "name", typ: "" }, 1270 { json: "namespace", js: "namespace", typ: u(undefined, "") }, 1271 ], false), 1272 "JackalComponentActionWaitNetwork": o([ 1273 { json: "address", js: "address", typ: "" }, 1274 { json: "code", js: "code", typ: u(undefined, 0) }, 1275 { json: "protocol", js: "protocol", typ: r("Protocol") }, 1276 ], false), 1277 "JackalComponentActionDefaults": o([ 1278 { json: "dir", js: "dir", typ: u(undefined, "") }, 1279 { json: "env", js: "env", typ: u(undefined, a("")) }, 1280 { json: "maxRetries", js: "maxRetries", typ: u(undefined, 0) }, 1281 { json: "maxTotalSeconds", js: "maxTotalSeconds", typ: u(undefined, 0) }, 1282 { json: "mute", js: "mute", typ: u(undefined, true) }, 1283 { json: "shell", js: "shell", typ: u(undefined, r("JackalComponentActionShell")) }, 1284 ], false), 1285 "JackalChart": o([ 1286 { json: "gitPath", js: "gitPath", typ: u(undefined, "") }, 1287 { json: "localPath", js: "localPath", typ: u(undefined, "") }, 1288 { json: "name", js: "name", typ: "" }, 1289 { json: "namespace", js: "namespace", typ: "" }, 1290 { json: "noWait", js: "noWait", typ: u(undefined, true) }, 1291 { json: "releaseName", js: "releaseName", typ: u(undefined, "") }, 1292 { json: "url", js: "url", typ: u(undefined, "") }, 1293 { json: "valuesFiles", js: "valuesFiles", typ: u(undefined, a("")) }, 1294 { json: "version", js: "version", typ: u(undefined, "") }, 1295 ], false), 1296 "JackalDataInjection": o([ 1297 { json: "compress", js: "compress", typ: u(undefined, true) }, 1298 { json: "source", js: "source", typ: "" }, 1299 { json: "target", js: "target", typ: r("JackalContainerTarget") }, 1300 ], false), 1301 "JackalContainerTarget": o([ 1302 { json: "container", js: "container", typ: "" }, 1303 { json: "namespace", js: "namespace", typ: "" }, 1304 { json: "path", js: "path", typ: "" }, 1305 { json: "selector", js: "selector", typ: "" }, 1306 ], false), 1307 "JackalComponentExtensions": o([ 1308 { json: "bigbang", js: "bigbang", typ: u(undefined, r("BigBang")) }, 1309 ], false), 1310 "BigBang": o([ 1311 { json: "fluxPatchFiles", js: "fluxPatchFiles", typ: u(undefined, a("")) }, 1312 { json: "repo", js: "repo", typ: u(undefined, "") }, 1313 { json: "skipFlux", js: "skipFlux", typ: u(undefined, true) }, 1314 { json: "valuesFiles", js: "valuesFiles", typ: u(undefined, a("")) }, 1315 { json: "version", js: "version", typ: "" }, 1316 ], false), 1317 "JackalFile": o([ 1318 { json: "executable", js: "executable", typ: u(undefined, true) }, 1319 { json: "extractPath", js: "extractPath", typ: u(undefined, "") }, 1320 { json: "shasum", js: "shasum", typ: u(undefined, "") }, 1321 { json: "source", js: "source", typ: "" }, 1322 { json: "symlinks", js: "symlinks", typ: u(undefined, a("")) }, 1323 { json: "target", js: "target", typ: "" }, 1324 ], false), 1325 "JackalComponentImport": o([ 1326 { json: "name", js: "name", typ: u(undefined, "") }, 1327 { json: "path", js: "path", typ: u(undefined, "") }, 1328 { json: "url", js: "url", typ: u(undefined, "") }, 1329 ], false), 1330 "JackalManifest": o([ 1331 { json: "files", js: "files", typ: u(undefined, a("")) }, 1332 { json: "kustomizations", js: "kustomizations", typ: u(undefined, a("")) }, 1333 { json: "kustomizeAllowAnyDirectory", js: "kustomizeAllowAnyDirectory", typ: u(undefined, true) }, 1334 { json: "name", js: "name", typ: "" }, 1335 { json: "namespace", js: "namespace", typ: u(undefined, "") }, 1336 { json: "noWait", js: "noWait", typ: u(undefined, true) }, 1337 ], false), 1338 "JackalComponentOnlyTarget": o([ 1339 { json: "cluster", js: "cluster", typ: u(undefined, r("JackalComponentOnlyCluster")) }, 1340 { json: "flavor", js: "flavor", typ: u(undefined, "") }, 1341 { json: "localOS", js: "localOS", typ: u(undefined, r("LocalOS")) }, 1342 ], false), 1343 "JackalComponentOnlyCluster": o([ 1344 { json: "architecture", js: "architecture", typ: u(undefined, r("Architecture")) }, 1345 { json: "distros", js: "distros", typ: u(undefined, a("")) }, 1346 ], false), 1347 "DeprecatedJackalComponentScripts": o([ 1348 { json: "after", js: "after", typ: u(undefined, a("")) }, 1349 { json: "before", js: "before", typ: u(undefined, a("")) }, 1350 { json: "prepare", js: "prepare", typ: u(undefined, a("")) }, 1351 { json: "retry", js: "retry", typ: u(undefined, true) }, 1352 { json: "showOutput", js: "showOutput", typ: u(undefined, true) }, 1353 { json: "timeoutSeconds", js: "timeoutSeconds", typ: u(undefined, 0) }, 1354 ], false), 1355 "JackalPackageConstant": o([ 1356 { json: "autoIndent", js: "autoIndent", typ: u(undefined, true) }, 1357 { json: "description", js: "description", typ: u(undefined, "") }, 1358 { json: "name", js: "name", typ: "" }, 1359 { json: "pattern", js: "pattern", typ: u(undefined, "") }, 1360 { json: "value", js: "value", typ: "" }, 1361 ], false), 1362 "JackalMetadata": o([ 1363 { json: "aggregateChecksum", js: "aggregateChecksum", typ: u(undefined, "") }, 1364 { json: "architecture", js: "architecture", typ: u(undefined, "") }, 1365 { json: "authors", js: "authors", typ: u(undefined, "") }, 1366 { json: "description", js: "description", typ: u(undefined, "") }, 1367 { json: "documentation", js: "documentation", typ: u(undefined, "") }, 1368 { json: "image", js: "image", typ: u(undefined, "") }, 1369 { json: "name", js: "name", typ: "" }, 1370 { json: "source", js: "source", typ: u(undefined, "") }, 1371 { json: "uncompressed", js: "uncompressed", typ: u(undefined, true) }, 1372 { json: "url", js: "url", typ: u(undefined, "") }, 1373 { json: "vendor", js: "vendor", typ: u(undefined, "") }, 1374 { json: "version", js: "version", typ: u(undefined, "") }, 1375 { json: "yolo", js: "yolo", typ: u(undefined, true) }, 1376 ], false), 1377 "JackalPackageVariable": o([ 1378 { json: "autoIndent", js: "autoIndent", typ: u(undefined, true) }, 1379 { json: "default", js: "default", typ: u(undefined, "") }, 1380 { json: "description", js: "description", typ: u(undefined, "") }, 1381 { json: "name", js: "name", typ: "" }, 1382 { json: "pattern", js: "pattern", typ: u(undefined, "") }, 1383 { json: "prompt", js: "prompt", typ: u(undefined, true) }, 1384 { json: "sensitive", js: "sensitive", typ: u(undefined, true) }, 1385 { json: "type", js: "type", typ: u(undefined, r("Type")) }, 1386 ], false), 1387 "DeployedComponent": o([ 1388 { json: "installedCharts", js: "installedCharts", typ: a(r("InstalledChart")) }, 1389 { json: "name", js: "name", typ: "" }, 1390 { json: "observedGeneration", js: "observedGeneration", typ: 0 }, 1391 { json: "status", js: "status", typ: "" }, 1392 ], false), 1393 "InstalledChart": o([ 1394 { json: "chartName", js: "chartName", typ: "" }, 1395 { json: "namespace", js: "namespace", typ: "" }, 1396 ], false), 1397 "JackalState": o([ 1398 { json: "agentTLS", js: "agentTLS", typ: r("GeneratedPKI") }, 1399 { json: "architecture", js: "architecture", typ: "" }, 1400 { json: "artifactServer", js: "artifactServer", typ: r("ArtifactServerInfo") }, 1401 { json: "distro", js: "distro", typ: "" }, 1402 { json: "gitServer", js: "gitServer", typ: r("GitServerInfo") }, 1403 { json: "loggingSecret", js: "loggingSecret", typ: "" }, 1404 { json: "registryInfo", js: "registryInfo", typ: r("RegistryInfo") }, 1405 { json: "storageClass", js: "storageClass", typ: "" }, 1406 { json: "jackalAppliance", js: "jackalAppliance", typ: true }, 1407 ], false), 1408 "GeneratedPKI": o([ 1409 { json: "ca", js: "ca", typ: "" }, 1410 { json: "cert", js: "cert", typ: "" }, 1411 { json: "key", js: "key", typ: "" }, 1412 ], false), 1413 "ArtifactServerInfo": o([ 1414 { json: "address", js: "address", typ: "" }, 1415 { json: "internalServer", js: "internalServer", typ: true }, 1416 { json: "pushPassword", js: "pushPassword", typ: "" }, 1417 { json: "pushUsername", js: "pushUsername", typ: "" }, 1418 ], false), 1419 "GitServerInfo": o([ 1420 { json: "address", js: "address", typ: "" }, 1421 { json: "internalServer", js: "internalServer", typ: true }, 1422 { json: "pullPassword", js: "pullPassword", typ: "" }, 1423 { json: "pullUsername", js: "pullUsername", typ: "" }, 1424 { json: "pushPassword", js: "pushPassword", typ: "" }, 1425 { json: "pushUsername", js: "pushUsername", typ: "" }, 1426 ], false), 1427 "RegistryInfo": o([ 1428 { json: "address", js: "address", typ: "" }, 1429 { json: "internalRegistry", js: "internalRegistry", typ: true }, 1430 { json: "nodePort", js: "nodePort", typ: 0 }, 1431 { json: "pullPassword", js: "pullPassword", typ: "" }, 1432 { json: "pullUsername", js: "pullUsername", typ: "" }, 1433 { json: "pushPassword", js: "pushPassword", typ: "" }, 1434 { json: "pushUsername", js: "pushUsername", typ: "" }, 1435 { json: "secret", js: "secret", typ: "" }, 1436 ], false), 1437 "Type": [ 1438 "file", 1439 "raw", 1440 ], 1441 "Protocol": [ 1442 "http", 1443 "https", 1444 "tcp", 1445 ], 1446 "Architecture": [ 1447 "amd64", 1448 "arm64", 1449 ], 1450 "LocalOS": [ 1451 "darwin", 1452 "linux", 1453 "windows", 1454 ], 1455 "Kind": [ 1456 "JackalInitConfig", 1457 "JackalPackageConfig", 1458 ], 1459 };