dedalus-cli 0.0.0-stage → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +306 -2
- package/SKILL.md +73 -0
- package/api.md +340 -0
- package/dist/cjs/bin.d.ts +3 -0
- package/dist/cjs/bin.d.ts.map +1 -0
- package/dist/cjs/bin.js +7 -0
- package/dist/cjs/bin.js.map +1 -0
- package/dist/cjs/cli/completions.d.ts +6 -0
- package/dist/cjs/cli/completions.d.ts.map +1 -0
- package/dist/cjs/cli/completions.js +11 -0
- package/dist/cjs/cli/completions.js.map +1 -0
- package/dist/cjs/cli/credentials.d.ts +169 -0
- package/dist/cjs/cli/credentials.d.ts.map +1 -0
- package/dist/cjs/cli/credentials.js +630 -0
- package/dist/cjs/cli/credentials.js.map +1 -0
- package/dist/cjs/cli/keychain.d.ts +34 -0
- package/dist/cjs/cli/keychain.d.ts.map +1 -0
- package/dist/cjs/cli/keychain.js +246 -0
- package/dist/cjs/cli/keychain.js.map +1 -0
- package/dist/cjs/cli/list.d.ts +23 -0
- package/dist/cjs/cli/list.d.ts.map +1 -0
- package/dist/cjs/cli/list.js +32 -0
- package/dist/cjs/cli/list.js.map +1 -0
- package/dist/cjs/cli/login.d.ts +137 -0
- package/dist/cjs/cli/login.d.ts.map +1 -0
- package/dist/cjs/cli/login.js +2060 -0
- package/dist/cjs/cli/login.js.map +1 -0
- package/dist/cjs/cli/runtime.d.ts +98 -0
- package/dist/cjs/cli/runtime.d.ts.map +1 -0
- package/dist/cjs/cli/runtime.js +1356 -0
- package/dist/cjs/cli/runtime.js.map +1 -0
- package/dist/cjs/cli/toon.d.ts +6 -0
- package/dist/cjs/cli/toon.d.ts.map +1 -0
- package/dist/cjs/cli/toon.js +165 -0
- package/dist/cjs/cli/toon.js.map +1 -0
- package/dist/cjs/cli/upgrade.d.ts +28 -0
- package/dist/cjs/cli/upgrade.d.ts.map +1 -0
- package/dist/cjs/cli/upgrade.js +1191 -0
- package/dist/cjs/cli/upgrade.js.map +1 -0
- package/dist/cjs/commands/index.d.ts +47 -0
- package/dist/cjs/commands/index.d.ts.map +1 -0
- package/dist/cjs/commands/index.js +1202 -0
- package/dist/cjs/commands/index.js.map +1 -0
- package/dist/cjs/custom/browser-routing.d.ts +4 -0
- package/dist/cjs/custom/browser-routing.d.ts.map +1 -0
- package/dist/cjs/custom/browser-routing.js +51 -0
- package/dist/cjs/custom/browser-routing.js.map +1 -0
- package/dist/cjs/custom/images.d.ts +6 -0
- package/dist/cjs/custom/images.d.ts.map +1 -0
- package/dist/cjs/custom/images.js +74 -0
- package/dist/cjs/custom/images.js.map +1 -0
- package/dist/cjs/custom/machines.d.ts +20 -0
- package/dist/cjs/custom/machines.d.ts.map +1 -0
- package/dist/cjs/custom/machines.js +84 -0
- package/dist/cjs/custom/machines.js.map +1 -0
- package/dist/cjs/custom/ssh-picker.d.ts +19 -0
- package/dist/cjs/custom/ssh-picker.d.ts.map +1 -0
- package/dist/cjs/custom/ssh-picker.js +157 -0
- package/dist/cjs/custom/ssh-picker.js.map +1 -0
- package/dist/cjs/custom/ssh.d.ts +18 -0
- package/dist/cjs/custom/ssh.d.ts.map +1 -0
- package/dist/cjs/custom/ssh.js +152 -0
- package/dist/cjs/custom/ssh.js.map +1 -0
- package/dist/cjs/feedback/bundle.d.ts +41 -0
- package/dist/cjs/feedback/bundle.d.ts.map +1 -0
- package/dist/cjs/feedback/bundle.js +88 -0
- package/dist/cjs/feedback/bundle.js.map +1 -0
- package/dist/cjs/feedback/command.d.ts +6 -0
- package/dist/cjs/feedback/command.d.ts.map +1 -0
- package/dist/cjs/feedback/command.js +100 -0
- package/dist/cjs/feedback/command.js.map +1 -0
- package/dist/cjs/feedback/diagnostics.d.ts +30 -0
- package/dist/cjs/feedback/diagnostics.d.ts.map +1 -0
- package/dist/cjs/feedback/diagnostics.js +278 -0
- package/dist/cjs/feedback/diagnostics.js.map +1 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +11 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/sdk/api-promise.d.ts +31 -0
- package/dist/cjs/sdk/api-promise.d.ts.map +1 -0
- package/dist/cjs/sdk/api-promise.js +73 -0
- package/dist/cjs/sdk/api-promise.js.map +1 -0
- package/dist/cjs/sdk/client.d.ts +267 -0
- package/dist/cjs/sdk/client.d.ts.map +1 -0
- package/dist/cjs/sdk/client.js +962 -0
- package/dist/cjs/sdk/client.js.map +1 -0
- package/dist/cjs/sdk/core/api-promise.d.ts +3 -0
- package/dist/cjs/sdk/core/api-promise.d.ts.map +1 -0
- package/dist/cjs/sdk/core/api-promise.js +8 -0
- package/dist/cjs/sdk/core/api-promise.js.map +1 -0
- package/dist/cjs/sdk/core/error.d.ts +46 -0
- package/dist/cjs/sdk/core/error.d.ts.map +1 -0
- package/dist/cjs/sdk/core/error.js +135 -0
- package/dist/cjs/sdk/core/error.js.map +1 -0
- package/dist/cjs/sdk/core/pagination.d.ts +38 -0
- package/dist/cjs/sdk/core/pagination.d.ts.map +1 -0
- package/dist/cjs/sdk/core/pagination.js +98 -0
- package/dist/cjs/sdk/core/pagination.js.map +1 -0
- package/dist/cjs/sdk/core/resource.d.ts +2 -0
- package/dist/cjs/sdk/core/resource.d.ts.map +1 -0
- package/dist/cjs/sdk/core/resource.js +7 -0
- package/dist/cjs/sdk/core/resource.js.map +1 -0
- package/dist/cjs/sdk/core/uploads.d.ts +3 -0
- package/dist/cjs/sdk/core/uploads.d.ts.map +1 -0
- package/dist/cjs/sdk/core/uploads.js +7 -0
- package/dist/cjs/sdk/core/uploads.js.map +1 -0
- package/dist/cjs/sdk/error.d.ts +3 -0
- package/dist/cjs/sdk/error.d.ts.map +1 -0
- package/dist/cjs/sdk/error.js +20 -0
- package/dist/cjs/sdk/error.js.map +1 -0
- package/dist/cjs/sdk/helpers/images.d.ts +31 -0
- package/dist/cjs/sdk/helpers/images.d.ts.map +1 -0
- package/dist/cjs/sdk/helpers/images.js +195 -0
- package/dist/cjs/sdk/helpers/images.js.map +1 -0
- package/dist/cjs/sdk/index.d.ts +7 -0
- package/dist/cjs/sdk/index.d.ts.map +1 -0
- package/dist/cjs/sdk/index.js +29 -0
- package/dist/cjs/sdk/index.js.map +1 -0
- package/dist/cjs/sdk/internal/builtin-types.d.ts +73 -0
- package/dist/cjs/sdk/internal/builtin-types.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/builtin-types.js +4 -0
- package/dist/cjs/sdk/internal/builtin-types.js.map +1 -0
- package/dist/cjs/sdk/internal/detect-platform.d.ts +15 -0
- package/dist/cjs/sdk/internal/detect-platform.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/detect-platform.js +185 -0
- package/dist/cjs/sdk/internal/detect-platform.js.map +1 -0
- package/dist/cjs/sdk/internal/errors.d.ts +3 -0
- package/dist/cjs/sdk/internal/errors.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/errors.js +41 -0
- package/dist/cjs/sdk/internal/errors.js.map +1 -0
- package/dist/cjs/sdk/internal/headers.d.ts +43 -0
- package/dist/cjs/sdk/internal/headers.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/headers.js +142 -0
- package/dist/cjs/sdk/internal/headers.js.map +1 -0
- package/dist/cjs/sdk/internal/parse.d.ts +3 -0
- package/dist/cjs/sdk/internal/parse.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/parse.js +7 -0
- package/dist/cjs/sdk/internal/parse.js.map +1 -0
- package/dist/cjs/sdk/internal/qs/formats.d.ts +7 -0
- package/dist/cjs/sdk/internal/qs/formats.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/qs/formats.js +13 -0
- package/dist/cjs/sdk/internal/qs/formats.js.map +1 -0
- package/dist/cjs/sdk/internal/qs/index.d.ts +10 -0
- package/dist/cjs/sdk/internal/qs/index.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/qs/index.js +14 -0
- package/dist/cjs/sdk/internal/qs/index.js.map +1 -0
- package/dist/cjs/sdk/internal/qs/stringify.d.ts +3 -0
- package/dist/cjs/sdk/internal/qs/stringify.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/qs/stringify.js +278 -0
- package/dist/cjs/sdk/internal/qs/stringify.js.map +1 -0
- package/dist/cjs/sdk/internal/qs/types.d.ts +57 -0
- package/dist/cjs/sdk/internal/qs/types.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/qs/types.js +3 -0
- package/dist/cjs/sdk/internal/qs/types.js.map +1 -0
- package/dist/cjs/sdk/internal/qs/utils.d.ts +15 -0
- package/dist/cjs/sdk/internal/qs/utils.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/qs/utils.js +230 -0
- package/dist/cjs/sdk/internal/qs/utils.js.map +1 -0
- package/dist/cjs/sdk/internal/request-options.d.ts +33 -0
- package/dist/cjs/sdk/internal/request-options.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/request-options.js +15 -0
- package/dist/cjs/sdk/internal/request-options.js.map +1 -0
- package/dist/cjs/sdk/internal/shim-types.d.ts +17 -0
- package/dist/cjs/sdk/internal/shim-types.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/shim-types.js +4 -0
- package/dist/cjs/sdk/internal/shim-types.js.map +1 -0
- package/dist/cjs/sdk/internal/shims.d.ts +26 -0
- package/dist/cjs/sdk/internal/shims.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/shims.js +92 -0
- package/dist/cjs/sdk/internal/shims.js.map +1 -0
- package/dist/cjs/sdk/internal/to-file.d.ts +45 -0
- package/dist/cjs/sdk/internal/to-file.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/to-file.js +91 -0
- package/dist/cjs/sdk/internal/to-file.js.map +1 -0
- package/dist/cjs/sdk/internal/types.d.ts +63 -0
- package/dist/cjs/sdk/internal/types.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/types.js +4 -0
- package/dist/cjs/sdk/internal/types.js.map +1 -0
- package/dist/cjs/sdk/internal/uploads.d.ts +42 -0
- package/dist/cjs/sdk/internal/uploads.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/uploads.js +158 -0
- package/dist/cjs/sdk/internal/uploads.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/base64.d.ts +3 -0
- package/dist/cjs/sdk/internal/utils/base64.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/base64.js +38 -0
- package/dist/cjs/sdk/internal/utils/base64.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/body.d.ts +40 -0
- package/dist/cjs/sdk/internal/utils/body.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/body.js +148 -0
- package/dist/cjs/sdk/internal/utils/body.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/bytes.d.ts +4 -0
- package/dist/cjs/sdk/internal/utils/bytes.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/bytes.js +31 -0
- package/dist/cjs/sdk/internal/utils/bytes.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/env.d.ts +9 -0
- package/dist/cjs/sdk/internal/utils/env.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/env.js +22 -0
- package/dist/cjs/sdk/internal/utils/env.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/log.d.ts +52 -0
- package/dist/cjs/sdk/internal/utils/log.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/log.js +413 -0
- package/dist/cjs/sdk/internal/utils/log.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/path.d.ts +41 -0
- package/dist/cjs/sdk/internal/utils/path.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/path.js +115 -0
- package/dist/cjs/sdk/internal/utils/path.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/query-string.d.ts +21 -0
- package/dist/cjs/sdk/internal/utils/query-string.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/query-string.js +128 -0
- package/dist/cjs/sdk/internal/utils/query-string.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/query.d.ts +2 -0
- package/dist/cjs/sdk/internal/utils/query.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/query.js +12 -0
- package/dist/cjs/sdk/internal/utils/query.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/sleep.d.ts +2 -0
- package/dist/cjs/sdk/internal/utils/sleep.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/sleep.js +7 -0
- package/dist/cjs/sdk/internal/utils/sleep.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/uuid.d.ts +5 -0
- package/dist/cjs/sdk/internal/utils/uuid.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/uuid.js +19 -0
- package/dist/cjs/sdk/internal/utils/uuid.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/uuid7.d.ts +6 -0
- package/dist/cjs/sdk/internal/utils/uuid7.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/uuid7.js +35 -0
- package/dist/cjs/sdk/internal/utils/uuid7.js.map +1 -0
- package/dist/cjs/sdk/internal/utils/values.d.ts +18 -0
- package/dist/cjs/sdk/internal/utils/values.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils/values.js +112 -0
- package/dist/cjs/sdk/internal/utils/values.js.map +1 -0
- package/dist/cjs/sdk/internal/utils.d.ts +8 -0
- package/dist/cjs/sdk/internal/utils.d.ts.map +1 -0
- package/dist/cjs/sdk/internal/utils.js +25 -0
- package/dist/cjs/sdk/internal/utils.js.map +1 -0
- package/dist/cjs/sdk/pagination.d.ts +3 -0
- package/dist/cjs/sdk/pagination.d.ts.map +1 -0
- package/dist/cjs/sdk/pagination.js +20 -0
- package/dist/cjs/sdk/pagination.js.map +1 -0
- package/dist/cjs/sdk/resource.d.ts +6 -0
- package/dist/cjs/sdk/resource.d.ts.map +1 -0
- package/dist/cjs/sdk/resource.js +12 -0
- package/dist/cjs/sdk/resource.js.map +1 -0
- package/dist/cjs/sdk/resources/images/images.d.ts +202 -0
- package/dist/cjs/sdk/resources/images/images.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/images/images.js +139 -0
- package/dist/cjs/sdk/resources/images/images.js.map +1 -0
- package/dist/cjs/sdk/resources/images/index.d.ts +5 -0
- package/dist/cjs/sdk/resources/images/index.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/images/index.js +9 -0
- package/dist/cjs/sdk/resources/images/index.js.map +1 -0
- package/dist/cjs/sdk/resources/images/uploads.d.ts +50 -0
- package/dist/cjs/sdk/resources/images/uploads.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/images/uploads.js +28 -0
- package/dist/cjs/sdk/resources/images/uploads.js.map +1 -0
- package/dist/cjs/sdk/resources/images.d.ts +2 -0
- package/dist/cjs/sdk/resources/images.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/images.js +19 -0
- package/dist/cjs/sdk/resources/images.js.map +1 -0
- package/dist/cjs/sdk/resources/index.d.ts +6 -0
- package/dist/cjs/sdk/resources/index.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/index.js +11 -0
- package/dist/cjs/sdk/resources/index.js.map +1 -0
- package/dist/cjs/sdk/resources/machines/autoresizing.d.ts +116 -0
- package/dist/cjs/sdk/resources/machines/autoresizing.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/machines/autoresizing.js +46 -0
- package/dist/cjs/sdk/resources/machines/autoresizing.js.map +1 -0
- package/dist/cjs/sdk/resources/machines/executions/executions.d.ts +341 -0
- package/dist/cjs/sdk/resources/machines/executions/executions.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/machines/executions/executions.js +161 -0
- package/dist/cjs/sdk/resources/machines/executions/executions.js.map +1 -0
- package/dist/cjs/sdk/resources/machines/executions/index.d.ts +5 -0
- package/dist/cjs/sdk/resources/machines/executions/index.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/machines/executions/index.js +9 -0
- package/dist/cjs/sdk/resources/machines/executions/index.js.map +1 -0
- package/dist/cjs/sdk/resources/machines/executions/logs.d.ts +103 -0
- package/dist/cjs/sdk/resources/machines/executions/logs.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/machines/executions/logs.js +48 -0
- package/dist/cjs/sdk/resources/machines/executions/logs.js.map +1 -0
- package/dist/cjs/sdk/resources/machines/executions.d.ts +2 -0
- package/dist/cjs/sdk/resources/machines/executions.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/machines/executions.js +19 -0
- package/dist/cjs/sdk/resources/machines/executions.js.map +1 -0
- package/dist/cjs/sdk/resources/machines/index.d.ts +9 -0
- package/dist/cjs/sdk/resources/machines/index.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/machines/index.js +13 -0
- package/dist/cjs/sdk/resources/machines/index.js.map +1 -0
- package/dist/cjs/sdk/resources/machines/machines.d.ts +497 -0
- package/dist/cjs/sdk/resources/machines/machines.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/machines/machines.js +220 -0
- package/dist/cjs/sdk/resources/machines/machines.js.map +1 -0
- package/dist/cjs/sdk/resources/machines/ssh.d.ts +175 -0
- package/dist/cjs/sdk/resources/machines/ssh.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/machines/ssh.js +89 -0
- package/dist/cjs/sdk/resources/machines/ssh.js.map +1 -0
- package/dist/cjs/sdk/resources/machines.d.ts +2 -0
- package/dist/cjs/sdk/resources/machines.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/machines.js +19 -0
- package/dist/cjs/sdk/resources/machines.js.map +1 -0
- package/dist/cjs/sdk/resources/organization/autoresizing.d.ts +87 -0
- package/dist/cjs/sdk/resources/organization/autoresizing.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/organization/autoresizing.js +38 -0
- package/dist/cjs/sdk/resources/organization/autoresizing.js.map +1 -0
- package/dist/cjs/sdk/resources/organization/index.d.ts +4 -0
- package/dist/cjs/sdk/resources/organization/index.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/organization/index.js +9 -0
- package/dist/cjs/sdk/resources/organization/index.js.map +1 -0
- package/dist/cjs/sdk/resources/organization/organization.d.ts +10 -0
- package/dist/cjs/sdk/resources/organization/organization.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/organization/organization.js +46 -0
- package/dist/cjs/sdk/resources/organization/organization.js.map +1 -0
- package/dist/cjs/sdk/resources/organization.d.ts +2 -0
- package/dist/cjs/sdk/resources/organization.d.ts.map +1 -0
- package/dist/cjs/sdk/resources/organization.js +19 -0
- package/dist/cjs/sdk/resources/organization.js.map +1 -0
- package/dist/cjs/sdk/resources.d.ts +3 -0
- package/dist/cjs/sdk/resources.d.ts.map +1 -0
- package/dist/cjs/sdk/resources.js +9 -0
- package/dist/cjs/sdk/resources.js.map +1 -0
- package/dist/cjs/sdk/uploads.d.ts +2 -0
- package/dist/cjs/sdk/uploads.d.ts.map +1 -0
- package/dist/cjs/sdk/uploads.js +7 -0
- package/dist/cjs/sdk/uploads.js.map +1 -0
- package/dist/cjs/sdk/version.d.ts +2 -0
- package/dist/cjs/sdk/version.d.ts.map +1 -0
- package/dist/cjs/sdk/version.js +6 -0
- package/dist/cjs/sdk/version.js.map +1 -0
- package/dist/esm/bin.d.ts +3 -0
- package/dist/esm/bin.d.ts.map +1 -0
- package/dist/esm/bin.js +5 -0
- package/dist/esm/bin.js.map +1 -0
- package/dist/esm/cli/completions.d.ts +6 -0
- package/dist/esm/cli/completions.d.ts.map +1 -0
- package/dist/esm/cli/completions.js +8 -0
- package/dist/esm/cli/completions.js.map +1 -0
- package/dist/esm/cli/credentials.d.ts +169 -0
- package/dist/esm/cli/credentials.d.ts.map +1 -0
- package/dist/esm/cli/credentials.js +614 -0
- package/dist/esm/cli/credentials.js.map +1 -0
- package/dist/esm/cli/keychain.d.ts +34 -0
- package/dist/esm/cli/keychain.d.ts.map +1 -0
- package/dist/esm/cli/keychain.js +237 -0
- package/dist/esm/cli/keychain.js.map +1 -0
- package/dist/esm/cli/list.d.ts +23 -0
- package/dist/esm/cli/list.d.ts.map +1 -0
- package/dist/esm/cli/list.js +27 -0
- package/dist/esm/cli/list.js.map +1 -0
- package/dist/esm/cli/login.d.ts +137 -0
- package/dist/esm/cli/login.d.ts.map +1 -0
- package/dist/esm/cli/login.js +2053 -0
- package/dist/esm/cli/login.js.map +1 -0
- package/dist/esm/cli/runtime.d.ts +98 -0
- package/dist/esm/cli/runtime.d.ts.map +1 -0
- package/dist/esm/cli/runtime.js +1345 -0
- package/dist/esm/cli/runtime.js.map +1 -0
- package/dist/esm/cli/toon.d.ts +6 -0
- package/dist/esm/cli/toon.d.ts.map +1 -0
- package/dist/esm/cli/toon.js +161 -0
- package/dist/esm/cli/toon.js.map +1 -0
- package/dist/esm/cli/upgrade.d.ts +28 -0
- package/dist/esm/cli/upgrade.d.ts.map +1 -0
- package/dist/esm/cli/upgrade.js +1186 -0
- package/dist/esm/cli/upgrade.js.map +1 -0
- package/dist/esm/commands/index.d.ts +47 -0
- package/dist/esm/commands/index.d.ts.map +1 -0
- package/dist/esm/commands/index.js +1195 -0
- package/dist/esm/commands/index.js.map +1 -0
- package/dist/esm/custom/browser-routing.d.ts +4 -0
- package/dist/esm/custom/browser-routing.d.ts.map +1 -0
- package/dist/esm/custom/browser-routing.js +47 -0
- package/dist/esm/custom/browser-routing.js.map +1 -0
- package/dist/esm/custom/images.d.ts +6 -0
- package/dist/esm/custom/images.d.ts.map +1 -0
- package/dist/esm/custom/images.js +68 -0
- package/dist/esm/custom/images.js.map +1 -0
- package/dist/esm/custom/machines.d.ts +20 -0
- package/dist/esm/custom/machines.d.ts.map +1 -0
- package/dist/esm/custom/machines.js +76 -0
- package/dist/esm/custom/machines.js.map +1 -0
- package/dist/esm/custom/ssh-picker.d.ts +19 -0
- package/dist/esm/custom/ssh-picker.d.ts.map +1 -0
- package/dist/esm/custom/ssh-picker.js +149 -0
- package/dist/esm/custom/ssh-picker.js.map +1 -0
- package/dist/esm/custom/ssh.d.ts +18 -0
- package/dist/esm/custom/ssh.d.ts.map +1 -0
- package/dist/esm/custom/ssh.js +147 -0
- package/dist/esm/custom/ssh.js.map +1 -0
- package/dist/esm/feedback/bundle.d.ts +41 -0
- package/dist/esm/feedback/bundle.d.ts.map +1 -0
- package/dist/esm/feedback/bundle.js +83 -0
- package/dist/esm/feedback/bundle.js.map +1 -0
- package/dist/esm/feedback/command.d.ts +6 -0
- package/dist/esm/feedback/command.d.ts.map +1 -0
- package/dist/esm/feedback/command.js +92 -0
- package/dist/esm/feedback/command.js.map +1 -0
- package/dist/esm/feedback/diagnostics.d.ts +30 -0
- package/dist/esm/feedback/diagnostics.d.ts.map +1 -0
- package/dist/esm/feedback/diagnostics.js +270 -0
- package/dist/esm/feedback/diagnostics.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/sdk/api-promise.d.ts +31 -0
- package/dist/esm/sdk/api-promise.d.ts.map +1 -0
- package/dist/esm/sdk/api-promise.js +68 -0
- package/dist/esm/sdk/api-promise.js.map +1 -0
- package/dist/esm/sdk/client.d.ts +267 -0
- package/dist/esm/sdk/client.d.ts.map +1 -0
- package/dist/esm/sdk/client.js +925 -0
- package/dist/esm/sdk/client.js.map +1 -0
- package/dist/esm/sdk/core/api-promise.d.ts +3 -0
- package/dist/esm/sdk/core/api-promise.d.ts.map +1 -0
- package/dist/esm/sdk/core/api-promise.js +3 -0
- package/dist/esm/sdk/core/api-promise.js.map +1 -0
- package/dist/esm/sdk/core/error.d.ts +46 -0
- package/dist/esm/sdk/core/error.d.ts.map +1 -0
- package/dist/esm/sdk/core/error.js +119 -0
- package/dist/esm/sdk/core/error.js.map +1 -0
- package/dist/esm/sdk/core/pagination.d.ts +38 -0
- package/dist/esm/sdk/core/pagination.d.ts.map +1 -0
- package/dist/esm/sdk/core/pagination.js +92 -0
- package/dist/esm/sdk/core/pagination.js.map +1 -0
- package/dist/esm/sdk/core/resource.d.ts +2 -0
- package/dist/esm/sdk/core/resource.d.ts.map +1 -0
- package/dist/esm/sdk/core/resource.js +3 -0
- package/dist/esm/sdk/core/resource.js.map +1 -0
- package/dist/esm/sdk/core/uploads.d.ts +3 -0
- package/dist/esm/sdk/core/uploads.d.ts.map +1 -0
- package/dist/esm/sdk/core/uploads.js +3 -0
- package/dist/esm/sdk/core/uploads.js.map +1 -0
- package/dist/esm/sdk/error.d.ts +3 -0
- package/dist/esm/sdk/error.d.ts.map +1 -0
- package/dist/esm/sdk/error.js +4 -0
- package/dist/esm/sdk/error.js.map +1 -0
- package/dist/esm/sdk/helpers/images.d.ts +31 -0
- package/dist/esm/sdk/helpers/images.d.ts.map +1 -0
- package/dist/esm/sdk/helpers/images.js +189 -0
- package/dist/esm/sdk/helpers/images.js.map +1 -0
- package/dist/esm/sdk/index.d.ts +7 -0
- package/dist/esm/sdk/index.d.ts.map +1 -0
- package/dist/esm/sdk/index.js +8 -0
- package/dist/esm/sdk/index.js.map +1 -0
- package/dist/esm/sdk/internal/builtin-types.d.ts +73 -0
- package/dist/esm/sdk/internal/builtin-types.d.ts.map +1 -0
- package/dist/esm/sdk/internal/builtin-types.js +3 -0
- package/dist/esm/sdk/internal/builtin-types.js.map +1 -0
- package/dist/esm/sdk/internal/detect-platform.d.ts +15 -0
- package/dist/esm/sdk/internal/detect-platform.d.ts.map +1 -0
- package/dist/esm/sdk/internal/detect-platform.js +180 -0
- package/dist/esm/sdk/internal/detect-platform.js.map +1 -0
- package/dist/esm/sdk/internal/errors.d.ts +3 -0
- package/dist/esm/sdk/internal/errors.d.ts.map +1 -0
- package/dist/esm/sdk/internal/errors.js +36 -0
- package/dist/esm/sdk/internal/errors.js.map +1 -0
- package/dist/esm/sdk/internal/headers.d.ts +43 -0
- package/dist/esm/sdk/internal/headers.d.ts.map +1 -0
- package/dist/esm/sdk/internal/headers.js +133 -0
- package/dist/esm/sdk/internal/headers.js.map +1 -0
- package/dist/esm/sdk/internal/parse.d.ts +3 -0
- package/dist/esm/sdk/internal/parse.d.ts.map +1 -0
- package/dist/esm/sdk/internal/parse.js +3 -0
- package/dist/esm/sdk/internal/parse.js.map +1 -0
- package/dist/esm/sdk/internal/qs/formats.d.ts +7 -0
- package/dist/esm/sdk/internal/qs/formats.d.ts.map +1 -0
- package/dist/esm/sdk/internal/qs/formats.js +9 -0
- package/dist/esm/sdk/internal/qs/formats.js.map +1 -0
- package/dist/esm/sdk/internal/qs/index.d.ts +10 -0
- package/dist/esm/sdk/internal/qs/index.d.ts.map +1 -0
- package/dist/esm/sdk/internal/qs/index.js +10 -0
- package/dist/esm/sdk/internal/qs/index.js.map +1 -0
- package/dist/esm/sdk/internal/qs/stringify.d.ts +3 -0
- package/dist/esm/sdk/internal/qs/stringify.d.ts.map +1 -0
- package/dist/esm/sdk/internal/qs/stringify.js +275 -0
- package/dist/esm/sdk/internal/qs/stringify.js.map +1 -0
- package/dist/esm/sdk/internal/qs/types.d.ts +57 -0
- package/dist/esm/sdk/internal/qs/types.d.ts.map +1 -0
- package/dist/esm/sdk/internal/qs/types.js +2 -0
- package/dist/esm/sdk/internal/qs/types.js.map +1 -0
- package/dist/esm/sdk/internal/qs/utils.d.ts +15 -0
- package/dist/esm/sdk/internal/qs/utils.d.ts.map +1 -0
- package/dist/esm/sdk/internal/qs/utils.js +217 -0
- package/dist/esm/sdk/internal/qs/utils.js.map +1 -0
- package/dist/esm/sdk/internal/request-options.d.ts +33 -0
- package/dist/esm/sdk/internal/request-options.d.ts.map +1 -0
- package/dist/esm/sdk/internal/request-options.js +11 -0
- package/dist/esm/sdk/internal/request-options.js.map +1 -0
- package/dist/esm/sdk/internal/shim-types.d.ts +17 -0
- package/dist/esm/sdk/internal/shim-types.d.ts.map +1 -0
- package/dist/esm/sdk/internal/shim-types.js +3 -0
- package/dist/esm/sdk/internal/shim-types.js.map +1 -0
- package/dist/esm/sdk/internal/shims.d.ts +26 -0
- package/dist/esm/sdk/internal/shims.d.ts.map +1 -0
- package/dist/esm/sdk/internal/shims.js +85 -0
- package/dist/esm/sdk/internal/shims.js.map +1 -0
- package/dist/esm/sdk/internal/to-file.d.ts +45 -0
- package/dist/esm/sdk/internal/to-file.d.ts.map +1 -0
- package/dist/esm/sdk/internal/to-file.js +88 -0
- package/dist/esm/sdk/internal/to-file.js.map +1 -0
- package/dist/esm/sdk/internal/types.d.ts +63 -0
- package/dist/esm/sdk/internal/types.d.ts.map +1 -0
- package/dist/esm/sdk/internal/types.js +3 -0
- package/dist/esm/sdk/internal/types.js.map +1 -0
- package/dist/esm/sdk/internal/uploads.d.ts +42 -0
- package/dist/esm/sdk/internal/uploads.d.ts.map +1 -0
- package/dist/esm/sdk/internal/uploads.js +148 -0
- package/dist/esm/sdk/internal/uploads.js.map +1 -0
- package/dist/esm/sdk/internal/utils/base64.d.ts +3 -0
- package/dist/esm/sdk/internal/utils/base64.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/base64.js +33 -0
- package/dist/esm/sdk/internal/utils/base64.js.map +1 -0
- package/dist/esm/sdk/internal/utils/body.d.ts +40 -0
- package/dist/esm/sdk/internal/utils/body.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/body.js +140 -0
- package/dist/esm/sdk/internal/utils/body.js.map +1 -0
- package/dist/esm/sdk/internal/utils/bytes.d.ts +4 -0
- package/dist/esm/sdk/internal/utils/bytes.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/bytes.js +26 -0
- package/dist/esm/sdk/internal/utils/bytes.js.map +1 -0
- package/dist/esm/sdk/internal/utils/env.d.ts +9 -0
- package/dist/esm/sdk/internal/utils/env.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/env.js +18 -0
- package/dist/esm/sdk/internal/utils/env.js.map +1 -0
- package/dist/esm/sdk/internal/utils/log.d.ts +52 -0
- package/dist/esm/sdk/internal/utils/log.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/log.js +405 -0
- package/dist/esm/sdk/internal/utils/log.js.map +1 -0
- package/dist/esm/sdk/internal/utils/path.d.ts +41 -0
- package/dist/esm/sdk/internal/utils/path.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/path.js +108 -0
- package/dist/esm/sdk/internal/utils/path.js.map +1 -0
- package/dist/esm/sdk/internal/utils/query-string.d.ts +21 -0
- package/dist/esm/sdk/internal/utils/query-string.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/query-string.js +125 -0
- package/dist/esm/sdk/internal/utils/query-string.js.map +1 -0
- package/dist/esm/sdk/internal/utils/query.d.ts +2 -0
- package/dist/esm/sdk/internal/utils/query.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/query.js +9 -0
- package/dist/esm/sdk/internal/utils/query.js.map +1 -0
- package/dist/esm/sdk/internal/utils/sleep.d.ts +2 -0
- package/dist/esm/sdk/internal/utils/sleep.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/sleep.js +3 -0
- package/dist/esm/sdk/internal/utils/sleep.js.map +1 -0
- package/dist/esm/sdk/internal/utils/uuid.d.ts +5 -0
- package/dist/esm/sdk/internal/utils/uuid.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/uuid.js +15 -0
- package/dist/esm/sdk/internal/utils/uuid.js.map +1 -0
- package/dist/esm/sdk/internal/utils/uuid7.d.ts +6 -0
- package/dist/esm/sdk/internal/utils/uuid7.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/uuid7.js +31 -0
- package/dist/esm/sdk/internal/utils/uuid7.js.map +1 -0
- package/dist/esm/sdk/internal/utils/values.d.ts +18 -0
- package/dist/esm/sdk/internal/utils/values.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils/values.js +94 -0
- package/dist/esm/sdk/internal/utils/values.js.map +1 -0
- package/dist/esm/sdk/internal/utils.d.ts +8 -0
- package/dist/esm/sdk/internal/utils.d.ts.map +1 -0
- package/dist/esm/sdk/internal/utils.js +9 -0
- package/dist/esm/sdk/internal/utils.js.map +1 -0
- package/dist/esm/sdk/pagination.d.ts +3 -0
- package/dist/esm/sdk/pagination.d.ts.map +1 -0
- package/dist/esm/sdk/pagination.js +4 -0
- package/dist/esm/sdk/pagination.js.map +1 -0
- package/dist/esm/sdk/resource.d.ts +6 -0
- package/dist/esm/sdk/resource.d.ts.map +1 -0
- package/dist/esm/sdk/resource.js +8 -0
- package/dist/esm/sdk/resource.js.map +1 -0
- package/dist/esm/sdk/resources/images/images.d.ts +202 -0
- package/dist/esm/sdk/resources/images/images.d.ts.map +1 -0
- package/dist/esm/sdk/resources/images/images.js +102 -0
- package/dist/esm/sdk/resources/images/images.js.map +1 -0
- package/dist/esm/sdk/resources/images/index.d.ts +5 -0
- package/dist/esm/sdk/resources/images/index.d.ts.map +1 -0
- package/dist/esm/sdk/resources/images/index.js +4 -0
- package/dist/esm/sdk/resources/images/index.js.map +1 -0
- package/dist/esm/sdk/resources/images/uploads.d.ts +50 -0
- package/dist/esm/sdk/resources/images/uploads.d.ts.map +1 -0
- package/dist/esm/sdk/resources/images/uploads.js +24 -0
- package/dist/esm/sdk/resources/images/uploads.js.map +1 -0
- package/dist/esm/sdk/resources/images.d.ts +2 -0
- package/dist/esm/sdk/resources/images.d.ts.map +1 -0
- package/dist/esm/sdk/resources/images.js +3 -0
- package/dist/esm/sdk/resources/images.js.map +1 -0
- package/dist/esm/sdk/resources/index.d.ts +6 -0
- package/dist/esm/sdk/resources/index.d.ts.map +1 -0
- package/dist/esm/sdk/resources/index.js +5 -0
- package/dist/esm/sdk/resources/index.js.map +1 -0
- package/dist/esm/sdk/resources/machines/autoresizing.d.ts +116 -0
- package/dist/esm/sdk/resources/machines/autoresizing.d.ts.map +1 -0
- package/dist/esm/sdk/resources/machines/autoresizing.js +42 -0
- package/dist/esm/sdk/resources/machines/autoresizing.js.map +1 -0
- package/dist/esm/sdk/resources/machines/executions/executions.d.ts +341 -0
- package/dist/esm/sdk/resources/machines/executions/executions.d.ts.map +1 -0
- package/dist/esm/sdk/resources/machines/executions/executions.js +124 -0
- package/dist/esm/sdk/resources/machines/executions/executions.js.map +1 -0
- package/dist/esm/sdk/resources/machines/executions/index.d.ts +5 -0
- package/dist/esm/sdk/resources/machines/executions/index.d.ts.map +1 -0
- package/dist/esm/sdk/resources/machines/executions/index.js +4 -0
- package/dist/esm/sdk/resources/machines/executions/index.js.map +1 -0
- package/dist/esm/sdk/resources/machines/executions/logs.d.ts +103 -0
- package/dist/esm/sdk/resources/machines/executions/logs.d.ts.map +1 -0
- package/dist/esm/sdk/resources/machines/executions/logs.js +44 -0
- package/dist/esm/sdk/resources/machines/executions/logs.js.map +1 -0
- package/dist/esm/sdk/resources/machines/executions.d.ts +2 -0
- package/dist/esm/sdk/resources/machines/executions.d.ts.map +1 -0
- package/dist/esm/sdk/resources/machines/executions.js +3 -0
- package/dist/esm/sdk/resources/machines/executions.js.map +1 -0
- package/dist/esm/sdk/resources/machines/index.d.ts +9 -0
- package/dist/esm/sdk/resources/machines/index.d.ts.map +1 -0
- package/dist/esm/sdk/resources/machines/index.js +6 -0
- package/dist/esm/sdk/resources/machines/index.js.map +1 -0
- package/dist/esm/sdk/resources/machines/machines.d.ts +497 -0
- package/dist/esm/sdk/resources/machines/machines.d.ts.map +1 -0
- package/dist/esm/sdk/resources/machines/machines.js +183 -0
- package/dist/esm/sdk/resources/machines/machines.js.map +1 -0
- package/dist/esm/sdk/resources/machines/ssh.d.ts +175 -0
- package/dist/esm/sdk/resources/machines/ssh.d.ts.map +1 -0
- package/dist/esm/sdk/resources/machines/ssh.js +85 -0
- package/dist/esm/sdk/resources/machines/ssh.js.map +1 -0
- package/dist/esm/sdk/resources/machines.d.ts +2 -0
- package/dist/esm/sdk/resources/machines.d.ts.map +1 -0
- package/dist/esm/sdk/resources/machines.js +3 -0
- package/dist/esm/sdk/resources/machines.js.map +1 -0
- package/dist/esm/sdk/resources/organization/autoresizing.d.ts +87 -0
- package/dist/esm/sdk/resources/organization/autoresizing.d.ts.map +1 -0
- package/dist/esm/sdk/resources/organization/autoresizing.js +34 -0
- package/dist/esm/sdk/resources/organization/autoresizing.js.map +1 -0
- package/dist/esm/sdk/resources/organization/index.d.ts +4 -0
- package/dist/esm/sdk/resources/organization/index.d.ts.map +1 -0
- package/dist/esm/sdk/resources/organization/index.js +4 -0
- package/dist/esm/sdk/resources/organization/index.js.map +1 -0
- package/dist/esm/sdk/resources/organization/organization.d.ts +10 -0
- package/dist/esm/sdk/resources/organization/organization.d.ts.map +1 -0
- package/dist/esm/sdk/resources/organization/organization.js +9 -0
- package/dist/esm/sdk/resources/organization/organization.js.map +1 -0
- package/dist/esm/sdk/resources/organization.d.ts +2 -0
- package/dist/esm/sdk/resources/organization.d.ts.map +1 -0
- package/dist/esm/sdk/resources/organization.js +3 -0
- package/dist/esm/sdk/resources/organization.js.map +1 -0
- package/dist/esm/sdk/resources.d.ts +3 -0
- package/dist/esm/sdk/resources.d.ts.map +1 -0
- package/dist/esm/sdk/resources.js +3 -0
- package/dist/esm/sdk/resources.js.map +1 -0
- package/dist/esm/sdk/uploads.d.ts +2 -0
- package/dist/esm/sdk/uploads.d.ts.map +1 -0
- package/dist/esm/sdk/uploads.js +3 -0
- package/dist/esm/sdk/uploads.js.map +1 -0
- package/dist/esm/sdk/version.d.ts +2 -0
- package/dist/esm/sdk/version.d.ts.map +1 -0
- package/dist/esm/sdk/version.js +3 -0
- package/dist/esm/sdk/version.js.map +1 -0
- package/man/dedalus-completion.1 +35 -0
- package/man/dedalus-images-create.1 +126 -0
- package/man/dedalus-images-delete.1 +102 -0
- package/man/dedalus-images-import.1 +34 -0
- package/man/dedalus-images-list.1 +105 -0
- package/man/dedalus-images-retrieve.1 +102 -0
- package/man/dedalus-images-update.1 +108 -0
- package/man/dedalus-images-uploads-create.1 +112 -0
- package/man/dedalus-login.1 +47 -0
- package/man/dedalus-logout.1 +28 -0
- package/man/dedalus-machines-autoresizing-retrieve.1 +104 -0
- package/man/dedalus-machines-autoresizing-update.1 +116 -0
- package/man/dedalus-machines-create.1 +119 -0
- package/man/dedalus-machines-delete.1 +107 -0
- package/man/dedalus-machines-executions-create.1 +120 -0
- package/man/dedalus-machines-executions-delete.1 +108 -0
- package/man/dedalus-machines-executions-events.1 +118 -0
- package/man/dedalus-machines-executions-list.1 +114 -0
- package/man/dedalus-machines-executions-logs-create-token.1 +108 -0
- package/man/dedalus-machines-executions-logs-retrieve.1 +108 -0
- package/man/dedalus-machines-executions-output.1 +108 -0
- package/man/dedalus-machines-executions-retrieve.1 +108 -0
- package/man/dedalus-machines-list.1 +108 -0
- package/man/dedalus-machines-reboot.1 +107 -0
- package/man/dedalus-machines-resize.1 +110 -0
- package/man/dedalus-machines-retrieve.1 +104 -0
- package/man/dedalus-machines-sleep.1 +104 -0
- package/man/dedalus-machines-ssh-create.1 +108 -0
- package/man/dedalus-machines-ssh-delete.1 +108 -0
- package/man/dedalus-machines-ssh-list.1 +114 -0
- package/man/dedalus-machines-ssh-retrieve.1 +108 -0
- package/man/dedalus-machines-update.1 +110 -0
- package/man/dedalus-machines-wake.1 +104 -0
- package/man/dedalus-organization-autoresizing-retrieve.1 +99 -0
- package/man/dedalus-organization-autoresizing-update.1 +111 -0
- package/man/dedalus-uninstall.1 +23 -0
- package/man/dedalus-upgrade.1 +32 -0
- package/man/dedalus.1 +222 -0
- package/package.json +88 -4
|
@@ -0,0 +1,630 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File generated from our OpenAPI spec by Scalar. See README.md for details.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.clearAll = exports.deleteProfile = exports.takeWarnings = exports.warn = exports.refreshProfile = exports.writeProfile = exports.readProfile = exports.storeDescription = exports.profileKey = exports.deleteStore = exports.writeStore = exports.readStore = exports.storePath = void 0;
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
const node_fs_1 = require("node:fs");
|
|
7
|
+
const node_os_1 = require("node:os");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const keychain_1 = require("./keychain");
|
|
10
|
+
const STORE_VERSION = 1;
|
|
11
|
+
const EMPTY_STORE = { version: STORE_VERSION, profiles: {} };
|
|
12
|
+
// A generated CLI can be invoked by two shells at once. The short synchronous critical sections
|
|
13
|
+
// below need a cross-process lock, not an in-memory mutex that only coordinates one invocation.
|
|
14
|
+
const lockPause = new Int32Array(new SharedArrayBuffer(4));
|
|
15
|
+
const STORE_LOCK_STALE_MS = 30_000;
|
|
16
|
+
// Consecutive filesystem errors while taking the lock before the attempt is abandoned. A lost race
|
|
17
|
+
// produces one; a path the filesystem will not answer for produces them without end.
|
|
18
|
+
const STORE_LOCK_MAX_ERRORS = 100;
|
|
19
|
+
/**
|
|
20
|
+
* The store file path.
|
|
21
|
+
*
|
|
22
|
+
* The environment override wins outright so a credential can be pointed at a scratch file (a test
|
|
23
|
+
* harness, a container with no writable home) without touching the real one.
|
|
24
|
+
*/
|
|
25
|
+
const storePath = (location) => {
|
|
26
|
+
const override = process.env[location.storeEnv];
|
|
27
|
+
if (override)
|
|
28
|
+
return override;
|
|
29
|
+
return (0, node_path_1.join)(stateDirectory(), location.storeName, 'credentials.json');
|
|
30
|
+
};
|
|
31
|
+
exports.storePath = storePath;
|
|
32
|
+
// Per-user state, not config: the file holds tokens the CLI rewrites on its own (a refreshed access
|
|
33
|
+
// token) rather than settings a user edits, which is exactly what XDG_STATE_HOME is for.
|
|
34
|
+
const stateDirectory = () => {
|
|
35
|
+
if (process.platform === 'win32')
|
|
36
|
+
return process.env['APPDATA'] || (0, node_path_1.join)((0, node_os_1.homedir)(), 'AppData', 'Roaming');
|
|
37
|
+
return process.env['XDG_STATE_HOME'] || (0, node_path_1.join)((0, node_os_1.homedir)(), '.local', 'state');
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Reads the whole store, treating anything unreadable as empty.
|
|
41
|
+
*
|
|
42
|
+
* A missing file is the normal first-run case, and a corrupt one must not wedge every command in
|
|
43
|
+
* the CLI: the worst outcome of ignoring it is one `login` the user has to run again, whereas
|
|
44
|
+
* throwing would take out commands that were never going to need a stored credential at all.
|
|
45
|
+
*/
|
|
46
|
+
const readStore = (location) => {
|
|
47
|
+
let text;
|
|
48
|
+
try {
|
|
49
|
+
text = (0, node_fs_1.readFileSync)((0, exports.storePath)(location), 'utf8');
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return EMPTY_STORE;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const parsed = JSON.parse(text);
|
|
56
|
+
if (!parsed || typeof parsed !== 'object')
|
|
57
|
+
return EMPTY_STORE;
|
|
58
|
+
const profiles = parsed.profiles;
|
|
59
|
+
if (!profiles || typeof profiles !== 'object')
|
|
60
|
+
return EMPTY_STORE;
|
|
61
|
+
return { version: STORE_VERSION, profiles: profiles };
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return EMPTY_STORE;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
exports.readStore = readStore;
|
|
68
|
+
/**
|
|
69
|
+
* Replaces the store file.
|
|
70
|
+
*
|
|
71
|
+
* Written to a sibling temp file and renamed so an interrupted write cannot leave a truncated store
|
|
72
|
+
* behind; the rename carries the temp file's narrow permissions onto the final path.
|
|
73
|
+
*/
|
|
74
|
+
const writeStore = (location, store) => {
|
|
75
|
+
assertLockHeld(location);
|
|
76
|
+
const path = (0, exports.storePath)(location);
|
|
77
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(path), { recursive: true, mode: 0o700 });
|
|
78
|
+
// `wx` and a random suffix together, not `writeFileSync` with a mode. That call applies the mode
|
|
79
|
+
// only when it creates the file and follows a symlink when it does not, so a predictable temp name
|
|
80
|
+
// — the pid was the only variable — let anyone who could write this directory pre-create the path
|
|
81
|
+
// and be handed the credentials, or leave it `0644` and read them in the window before a chmod.
|
|
82
|
+
// Creating it exclusively fails instead, and the descriptor is what is written, so there is no
|
|
83
|
+
// second lookup of the name between the check and the write.
|
|
84
|
+
const temp = path + '.' + (0, node_crypto_1.randomBytes)(8).toString('hex') + '.tmp';
|
|
85
|
+
const descriptor = (0, node_fs_1.openSync)(temp, 'wx', 0o600);
|
|
86
|
+
try {
|
|
87
|
+
(0, node_fs_1.writeFileSync)(descriptor, JSON.stringify(store, null, 2) + '\n');
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
(0, node_fs_1.closeSync)(descriptor);
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
(0, node_fs_1.renameSync)(temp, path);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
// The rename is what publishes the store; a temp file left behind after it failed is a copy of
|
|
97
|
+
// the credentials under a name nothing will ever read again.
|
|
98
|
+
(0, node_fs_1.rmSync)(temp, { force: true });
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
exports.writeStore = writeStore;
|
|
103
|
+
/** Deletes the store file entirely. */
|
|
104
|
+
const deleteStore = (location) => {
|
|
105
|
+
assertLockHeld(location);
|
|
106
|
+
(0, node_fs_1.rmSync)((0, exports.storePath)(location), { force: true });
|
|
107
|
+
};
|
|
108
|
+
exports.deleteStore = deleteStore;
|
|
109
|
+
/**
|
|
110
|
+
* Serializes index rewrites across CLI processes.
|
|
111
|
+
*
|
|
112
|
+
* Token acquisition happens before the lock. The lock spans the keychain operation and its index
|
|
113
|
+
* update together, so a concurrent logout cannot clear a newly written secret while it still sees
|
|
114
|
+
* the old index entry. Long-running keychain helpers renew the lock lease before each command.
|
|
115
|
+
*/
|
|
116
|
+
const withStoreLock = (location, operation) => {
|
|
117
|
+
const path = (0, exports.storePath)(location);
|
|
118
|
+
const lockPath = path + '.lock';
|
|
119
|
+
(0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(path), { recursive: true, mode: 0o700 });
|
|
120
|
+
// Written into the lock file and checked back on release. A lock this process was too slow to
|
|
121
|
+
// renew can be reclaimed as stale by another one, and after that it is no longer this process's
|
|
122
|
+
// to delete: unlinking it on the way out would drop the new holder's lock and leave two processes
|
|
123
|
+
// rewriting the store at once, where `writeStore` replaces the file wholesale and one of the two
|
|
124
|
+
// profiles is simply lost.
|
|
125
|
+
const token = (0, node_crypto_1.randomBytes)(16).toString('hex');
|
|
126
|
+
let descriptor;
|
|
127
|
+
let consecutiveErrors = 0;
|
|
128
|
+
while (descriptor === undefined) {
|
|
129
|
+
try {
|
|
130
|
+
descriptor = (0, node_fs_1.openSync)(lockPath, 'wx', 0o600);
|
|
131
|
+
try {
|
|
132
|
+
(0, node_fs_1.writeFileSync)(descriptor, token);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
// An unstamped lock is worse than none: this process is about to throw, its release will
|
|
136
|
+
// never run, and every other CLI would wait out the full stale window on a file nobody
|
|
137
|
+
// holds. Take it back out first.
|
|
138
|
+
(0, node_fs_1.closeSync)(descriptor);
|
|
139
|
+
// And give the handle back, so the loop guard still reads "not acquired". Leaving it set
|
|
140
|
+
// would let an error the outer catch decided to swallow fall out of the loop and run the
|
|
141
|
+
// operation with no lock at all, then close this handle a second time on the way out.
|
|
142
|
+
descriptor = undefined;
|
|
143
|
+
(0, node_fs_1.rmSync)(lockPath, { force: true });
|
|
144
|
+
throw error;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
if (!(error && typeof error === 'object' && 'code' in error && error.code === 'EEXIST'))
|
|
149
|
+
throw error;
|
|
150
|
+
try {
|
|
151
|
+
const stale = (0, node_fs_1.statSync)(lockPath);
|
|
152
|
+
if (Date.now() - stale.mtimeMs > STORE_LOCK_STALE_MS) {
|
|
153
|
+
// Moved aside rather than unlinked outright, and only then removed. An unconditional
|
|
154
|
+
// `rmSync` deletes whatever is at the path *now*, which after a pause between the stat
|
|
155
|
+
// and the call is a fresh lock a waiter has just taken — two processes in the critical
|
|
156
|
+
// section. `renameSync` moves one specific directory entry, so re-checking the inode and
|
|
157
|
+
// mtime afterwards establishes that what moved is the file that was found stale; anything
|
|
158
|
+
// else is put straight back.
|
|
159
|
+
const salvage = lockPath + '.' + token;
|
|
160
|
+
(0, node_fs_1.renameSync)(lockPath, salvage);
|
|
161
|
+
const moved = (0, node_fs_1.statSync)(salvage);
|
|
162
|
+
if (moved.ino === stale.ino && moved.mtimeMs === stale.mtimeMs)
|
|
163
|
+
(0, node_fs_1.rmSync)(salvage, { force: true });
|
|
164
|
+
else
|
|
165
|
+
(0, node_fs_1.renameSync)(salvage, lockPath);
|
|
166
|
+
}
|
|
167
|
+
consecutiveErrors = 0;
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// Either the lock was released or reclaimed between the open and the stat — the benign race,
|
|
171
|
+
// which the next attempt wins — or the filesystem will not answer for this path at all, which
|
|
172
|
+
// retrying never fixes. Only a run of them means the second, so only a run gives up.
|
|
173
|
+
consecutiveErrors += 1;
|
|
174
|
+
if (consecutiveErrors > STORE_LOCK_MAX_ERRORS) {
|
|
175
|
+
throw new Error('Could not take the credential store lock at ' + lockPath + '.');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Every path waits, including the two that used to loop straight back to `openSync`. Without
|
|
179
|
+
// this a lock that cannot be stat'd or unlinked spins open+stat at full tilt with nothing on
|
|
180
|
+
// screen — usually for a token refresh the user never asked to watch.
|
|
181
|
+
Atomics.wait(lockPause, 0, 0, 10);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const previous = heldLock;
|
|
185
|
+
heldLock = { path: lockPath, token };
|
|
186
|
+
try {
|
|
187
|
+
return operation();
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
heldLock = previous;
|
|
191
|
+
(0, node_fs_1.closeSync)(descriptor);
|
|
192
|
+
try {
|
|
193
|
+
// Only this acquisition's own lock comes off; see `token` above.
|
|
194
|
+
if ((0, node_fs_1.readFileSync)(lockPath, 'utf8') === token)
|
|
195
|
+
(0, node_fs_1.rmSync)(lockPath, { force: true });
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// Already gone, which is the outcome this wanted anyway.
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
/** The lock this process currently holds, for {@link assertLockHeld} to check a write against. */
|
|
203
|
+
let heldLock;
|
|
204
|
+
/**
|
|
205
|
+
* Refuses a store rewrite this process no longer holds the lock for.
|
|
206
|
+
*
|
|
207
|
+
* Taking the lock is not the same as still having it. A holder stopped long enough to pass
|
|
208
|
+
* `STORE_LOCK_STALE_MS` — a suspended laptop, a SIGSTOP, a filesystem that blocked — has its lock
|
|
209
|
+
* reclaimed and another process completes a whole read-modify-write; if the first then resumes and
|
|
210
|
+
* writes the snapshot it read beforehand, the second's profile is gone, and under the keychain
|
|
211
|
+
* backend its index entry was the only record of a live keyring item. `writeStore` replaces the
|
|
212
|
+
* file wholesale, so there is no merge to save it. Checking the stamp again here is what makes the
|
|
213
|
+
* window survivable: the late writer fails loudly instead of quietly winning.
|
|
214
|
+
*/
|
|
215
|
+
const assertLockHeld = (location) => {
|
|
216
|
+
const lock = heldLock;
|
|
217
|
+
if (!lock || lock.path !== (0, exports.storePath)(location) + '.lock')
|
|
218
|
+
return;
|
|
219
|
+
let stamp;
|
|
220
|
+
try {
|
|
221
|
+
stamp = (0, node_fs_1.readFileSync)(lock.path, 'utf8');
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
stamp = '';
|
|
225
|
+
}
|
|
226
|
+
if (stamp !== lock.token) {
|
|
227
|
+
throw new Error('The credential store changed underneath this command. Nothing was written; run it again.');
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
/** Renews a held lock before a keychain helper can spend up to ten seconds waiting for the OS. */
|
|
231
|
+
const refreshStoreLock = (location) => {
|
|
232
|
+
const now = new Date();
|
|
233
|
+
try {
|
|
234
|
+
(0, node_fs_1.utimesSync)((0, exports.storePath)(location) + '.lock', now, now);
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
// The lock holder may already be unwinding after an interrupted filesystem operation.
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
241
|
+
* The key one base URL's credentials are filed under.
|
|
242
|
+
*
|
|
243
|
+
* Keying on the URL is what keeps a sandbox token from being sent to production: a request with a
|
|
244
|
+
* different `--base-url` looks up a different profile and simply finds nothing.
|
|
245
|
+
*/
|
|
246
|
+
const profileKey = (baseUrl) => {
|
|
247
|
+
const trimmed = baseUrl.replace(/\/+$/u, '');
|
|
248
|
+
if (!trimmed)
|
|
249
|
+
return 'default';
|
|
250
|
+
let url;
|
|
251
|
+
try {
|
|
252
|
+
url = new URL(trimmed);
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
// Not a URL this can take apart — an unusual `--base-url`, or the `default` case above. Keyed
|
|
256
|
+
// verbatim, which still files it consistently; it simply gets none of the normalization below.
|
|
257
|
+
return trimmed;
|
|
258
|
+
}
|
|
259
|
+
// Credentials never belong in the key. A `--base-url https://user:pass@host` would otherwise put
|
|
260
|
+
// them in the keychain account, which the Linux helper passes on its command line for any other
|
|
261
|
+
// process to read — the one thing this whole module is arranged to prevent.
|
|
262
|
+
url.username = '';
|
|
263
|
+
url.password = '';
|
|
264
|
+
// `URL` lower-cases the host and drops a port that is the scheme's default, so two spellings of
|
|
265
|
+
// one host cannot end up as two profiles — a `login` under one and a request under the other
|
|
266
|
+
// would look, to the user, like the sign-in simply had not taken.
|
|
267
|
+
url.hash = '';
|
|
268
|
+
url.search = '';
|
|
269
|
+
return url.toString().replace(/\/+$/u, '');
|
|
270
|
+
};
|
|
271
|
+
exports.profileKey = profileKey;
|
|
272
|
+
/**
|
|
273
|
+
* Whether this run may use the operating system's store at all.
|
|
274
|
+
*
|
|
275
|
+
* Nothing is probed here. Under `auto` the real operation decides: a keychain write that fails
|
|
276
|
+
* falls back to the file, and a keychain read that finds nothing falls through to it. That is both
|
|
277
|
+
* cheaper than a probe — which costs three subprocess spawns on every command — and more honest,
|
|
278
|
+
* since the thing that has to work is the operation itself, not a proxy for it.
|
|
279
|
+
*/
|
|
280
|
+
const mayUseKeychain = (location) => location.backend !== 'file';
|
|
281
|
+
/** Human-readable name for where a credential landed, for `login` and `logout` to print. */
|
|
282
|
+
const storeDescription = (location, backend) => backend === 'keychain'
|
|
283
|
+
? 'your ' + osStoreName() + ' (the index of signed-in hosts is at ' + (0, exports.storePath)(location) + ')'
|
|
284
|
+
: (0, exports.storePath)(location);
|
|
285
|
+
exports.storeDescription = storeDescription;
|
|
286
|
+
const osStoreName = () => {
|
|
287
|
+
if (process.platform === 'win32')
|
|
288
|
+
return 'Windows Credential Manager';
|
|
289
|
+
if (process.platform === 'darwin')
|
|
290
|
+
return 'macOS Keychain';
|
|
291
|
+
return 'system keyring';
|
|
292
|
+
};
|
|
293
|
+
/**
|
|
294
|
+
* One stored profile.
|
|
295
|
+
*
|
|
296
|
+
* When the secret is in the OS store the file holds only the *index* — which base URLs are signed
|
|
297
|
+
* in, and for each one which store has it. That split is what makes `logout --all` possible: a
|
|
298
|
+
* keychain offers no portable way to list what is in it, so the set of profiles has to be recorded
|
|
299
|
+
* somewhere, and a list of hostnames is not a secret.
|
|
300
|
+
*
|
|
301
|
+
* The index also decides where to look, rather than the OS store being tried first and the file
|
|
302
|
+
* second. Trying in turn cannot tell an unreachable helper from an empty one, so it would answer
|
|
303
|
+
* with a file copy while a different, live secret sat in the OS store.
|
|
304
|
+
*/
|
|
305
|
+
const readProfile = (location, key) => readProfileResult(location, key).profile;
|
|
306
|
+
exports.readProfile = readProfile;
|
|
307
|
+
/**
|
|
308
|
+
* A profile read, and whether the store actually answered.
|
|
309
|
+
*
|
|
310
|
+
* `unreadable` says the marker points at the OS store and the helper never answered, so the empty
|
|
311
|
+
* profile beside it is the absence of an answer rather than the answer "nothing is stored". A read
|
|
312
|
+
* can treat the two alike — both send the user to `login` — but a write cannot: merging an update
|
|
313
|
+
* into an empty profile and storing the result replaces whatever was really under that key, so a
|
|
314
|
+
* keyring that is momentarily unreachable would cost the user every *other* credential filed there.
|
|
315
|
+
*/
|
|
316
|
+
const readProfileResult = (location, key) => {
|
|
317
|
+
const entry = indexEntry(location, key);
|
|
318
|
+
if (entry.backend !== 'keychain') {
|
|
319
|
+
// `keychain` exists to keep secrets out of a file, so one an earlier build left there is not a
|
|
320
|
+
// credential this may send — an organisation that chose the setting to forbid secrets at rest
|
|
321
|
+
// would otherwise keep authenticating from exactly the file it banned. It is left where it is
|
|
322
|
+
// rather than deleted, because a read is not the place to destroy anything; the next `login`
|
|
323
|
+
// replaces it.
|
|
324
|
+
return { profile: location.backend === 'keychain' ? {} : entry, unreadable: false };
|
|
325
|
+
}
|
|
326
|
+
// Nothing falls through to the file: the index says the secret is not there. A helper that cannot
|
|
327
|
+
// run reads as "no credential", which sends the user to `login` rather than to a stale one — but
|
|
328
|
+
// it is reported alongside, so a *write* can refuse rather than overwrite what it could not see.
|
|
329
|
+
if (!mayUseKeychain(location)) {
|
|
330
|
+
// The configured backend is the file while the marker still says keychain. Replacing the entry
|
|
331
|
+
// is the intended migration here, not a loss, so this is not unreadable.
|
|
332
|
+
return { profile: {}, unreadable: false };
|
|
333
|
+
}
|
|
334
|
+
const read = (0, keychain_1.keychainRead)(location.storeName, key);
|
|
335
|
+
if (read.secret === undefined)
|
|
336
|
+
return { profile: {}, unreadable: read.unavailable };
|
|
337
|
+
return { profile: parseSecret(read.secret), unreadable: false };
|
|
338
|
+
};
|
|
339
|
+
/**
|
|
340
|
+
* A keychain item's JSON, as a profile.
|
|
341
|
+
*
|
|
342
|
+
* An item this cannot parse is treated as absent, for the same reason a corrupt file is: one
|
|
343
|
+
* `login` again beats taking out every command that needed no credential.
|
|
344
|
+
*/
|
|
345
|
+
const parseSecret = (secret) => {
|
|
346
|
+
try {
|
|
347
|
+
const parsed = JSON.parse(secret);
|
|
348
|
+
if (parsed && typeof parsed === 'object')
|
|
349
|
+
return parsed;
|
|
350
|
+
}
|
|
351
|
+
catch {
|
|
352
|
+
// Absent; see above.
|
|
353
|
+
}
|
|
354
|
+
return {};
|
|
355
|
+
};
|
|
356
|
+
/** The file entry for one profile: the credential itself, or the marker saying where it really is. */
|
|
357
|
+
const indexEntry = (location, key) => {
|
|
358
|
+
const { profiles } = (0, exports.readStore)(location);
|
|
359
|
+
// Own-property lookup only: a store carrying a key like `constructor` would otherwise resolve to
|
|
360
|
+
// something off `Object.prototype` that is not a profile at all.
|
|
361
|
+
if (!Object.prototype.hasOwnProperty.call(profiles, key))
|
|
362
|
+
return {};
|
|
363
|
+
const profile = profiles[key];
|
|
364
|
+
return profile && typeof profile === 'object' ? profile : {};
|
|
365
|
+
};
|
|
366
|
+
/** Merges an update into one stored profile under the transaction lock, reporting where it landed. */
|
|
367
|
+
const writeProfile = (location, key, update) =>
|
|
368
|
+
// The keychain write and the index write are one transaction. Locking only the file rewrite leaves
|
|
369
|
+
// a logout able to clear a newly stored secret while still reading the index entry that predates
|
|
370
|
+
// it, so both go inside the same lock.
|
|
371
|
+
withStoreLock(location, () => writeProfileLocked(location, key, update));
|
|
372
|
+
exports.writeProfile = writeProfile;
|
|
373
|
+
/**
|
|
374
|
+
* Merges a refreshed token into a profile that is still signed in, and does nothing when it is not.
|
|
375
|
+
*
|
|
376
|
+
* The silent refresh runs on the request path of an ordinary command: it reads the profile, spends a
|
|
377
|
+
* network round trip on the exchange, and only then writes the result back. A `logout` in another
|
|
378
|
+
* shell fits comfortably inside that window. Writing unconditionally there would file a freshly
|
|
379
|
+
* issued credential under a host the user has just signed out of — and under the keychain backend
|
|
380
|
+
* that means planting a new secret in their keyring *after* a sign-out that reported success, with
|
|
381
|
+
* an index entry to match. The lock serializes the two writes; this is what makes the later one
|
|
382
|
+
* conditional on what the earlier one left behind.
|
|
383
|
+
*/
|
|
384
|
+
const refreshProfile = (location, key, update) => {
|
|
385
|
+
withStoreLock(location, () => {
|
|
386
|
+
if (!Object.prototype.hasOwnProperty.call((0, exports.readStore)(location).profiles, key))
|
|
387
|
+
return;
|
|
388
|
+
// A refresh is preparation for a command, not the command, so a store that cannot be read is a
|
|
389
|
+
// reason to leave the credential where it is rather than to fail what the user asked for. The
|
|
390
|
+
// write below would refuse anyway; catching it here keeps that refusal off the request path.
|
|
391
|
+
if (readProfileResult(location, key).unreadable)
|
|
392
|
+
return;
|
|
393
|
+
writeProfileLocked(location, key, update);
|
|
394
|
+
});
|
|
395
|
+
};
|
|
396
|
+
exports.refreshProfile = refreshProfile;
|
|
397
|
+
/** The body of a profile write, for the callers above that have already taken the store lock. */
|
|
398
|
+
const writeProfileLocked = (location, key, update) => {
|
|
399
|
+
const marker = indexEntry(location, key);
|
|
400
|
+
// Merging only after acquiring the lock preserves credentials captured by another flow while
|
|
401
|
+
// this flow was waiting to save its own result.
|
|
402
|
+
if (marker.backend === 'keychain')
|
|
403
|
+
refreshStoreLock(location);
|
|
404
|
+
const existing = readProfileResult(location, key);
|
|
405
|
+
// Refused rather than merged into nothing. The write below replaces the whole profile, so going
|
|
406
|
+
// ahead on a read that never answered would file this one credential over however many were
|
|
407
|
+
// already there — silently, on a keyring hiccup no louder than a daemon restart.
|
|
408
|
+
if (existing.unreadable) {
|
|
409
|
+
throw new Error('Could not read the credentials already saved for this host from your ' +
|
|
410
|
+
osStoreName() +
|
|
411
|
+
'. Nothing was written. Try again, or run logout for this host first.');
|
|
412
|
+
}
|
|
413
|
+
const profile = mergeProfile(existing.profile, update);
|
|
414
|
+
if (mayUseKeychain(location)) {
|
|
415
|
+
refreshStoreLock(location);
|
|
416
|
+
if ((0, keychain_1.keychainStore)(location.storeName, key, JSON.stringify(withoutMarker(profile)))) {
|
|
417
|
+
try {
|
|
418
|
+
// The file records only that this base URL is signed in and which store has it — no secret
|
|
419
|
+
// — so `logout --all` can find it without one ever reaching disk.
|
|
420
|
+
writeIndex(location, key, { backend: 'keychain' });
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
// The secret reached the OS store but nothing on disk points at it, and the index is the
|
|
424
|
+
// only thing `logout --all` can enumerate. Take it back out rather than leaving a
|
|
425
|
+
// credential in the user's keyring that this CLI can neither find nor remove — but only
|
|
426
|
+
// when this write is what put it there. `keychainStore` overwrites, so if the store was
|
|
427
|
+
// already holding this key the item here is the user's working credential, and clearing it
|
|
428
|
+
// would destroy the very thing the failed sign-in was meant to replace.
|
|
429
|
+
if (marker.backend !== 'keychain') {
|
|
430
|
+
refreshStoreLock(location);
|
|
431
|
+
(0, keychain_1.keychainClear)(location.storeName, key);
|
|
432
|
+
}
|
|
433
|
+
throw error;
|
|
434
|
+
}
|
|
435
|
+
return 'keychain';
|
|
436
|
+
}
|
|
437
|
+
if (location.backend === 'keychain') {
|
|
438
|
+
throw new Error((0, keychain_1.keychainSupported)()
|
|
439
|
+
? 'Could not save the credential to your ' + osStoreName() + '.'
|
|
440
|
+
: 'This system has no credential store ' + location.storeName + ' can use.');
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
// Whatever this key already had in the OS store comes out before the file takes over, so the two
|
|
444
|
+
// cannot disagree. Only the marker decides what a later read uses, so an item left behind can no
|
|
445
|
+
// longer shadow this one — which is why a helper that will not answer is not worth failing the
|
|
446
|
+
// sign-in over. It is reported instead: wedging `login` would leave the user no way forward at
|
|
447
|
+
// all, since `logout` would be refusing for exactly the same reason.
|
|
448
|
+
if (marker.backend === 'keychain' && removeSecret(location, key) !== 'removed') {
|
|
449
|
+
(0, exports.warn)('Your ' + osStoreName() + ' may still hold an older credential for this host; remove it there if so.');
|
|
450
|
+
}
|
|
451
|
+
writeIndex(location, key, { ...withoutMarker(profile), backend: 'file' });
|
|
452
|
+
return 'file';
|
|
453
|
+
};
|
|
454
|
+
const warnings = [];
|
|
455
|
+
/**
|
|
456
|
+
* Notes something the user should know without failing what they asked for.
|
|
457
|
+
*
|
|
458
|
+
* Collected rather than printed. The same store code runs under `login` and under the silent token
|
|
459
|
+
* refresh that precedes an ordinary command, and writing to standard error there would interleave
|
|
460
|
+
* prose with the JSON document `--format-error json` puts on that same stream. Only `login` and
|
|
461
|
+
* `logout` drain this, so a warning reaches the one place a user is already reading sentences.
|
|
462
|
+
*/
|
|
463
|
+
const warn = (message) => {
|
|
464
|
+
if (!warnings.includes(message))
|
|
465
|
+
warnings.push(message);
|
|
466
|
+
};
|
|
467
|
+
exports.warn = warn;
|
|
468
|
+
/** Takes the warnings collected so far, leaving none behind. */
|
|
469
|
+
const takeWarnings = () => warnings.splice(0, warnings.length);
|
|
470
|
+
exports.takeWarnings = takeWarnings;
|
|
471
|
+
/**
|
|
472
|
+
* Takes one secret out of the OS store, reporting what could be established.
|
|
473
|
+
*
|
|
474
|
+
* `keychainClear` answers `false` both for an item that is not there and for a helper that cannot
|
|
475
|
+
* run, so its word alone is never enough. A lookup afterwards settles the only question that
|
|
476
|
+
* matters: `kept` means the secret is still retrievable, and so removing the index entry would be a
|
|
477
|
+
* lie. Anything else means this CLI can no longer get at it, which is what being signed out is —
|
|
478
|
+
* `unconfirmed` says so while admitting the store may still hold something, because a helper that
|
|
479
|
+
* could not run cannot prove otherwise.
|
|
480
|
+
*
|
|
481
|
+
* Nothing here throws. Earlier versions failed the command when a clear did not succeed, which
|
|
482
|
+
* wedged `login` and `logout` together for anyone whose item had simply been removed by hand or
|
|
483
|
+
* whose helper had gone: both refused, and nothing the CLI offered could ever clear the entry.
|
|
484
|
+
*/
|
|
485
|
+
const removeSecret = (location, key) => {
|
|
486
|
+
refreshStoreLock(location);
|
|
487
|
+
if ((0, keychain_1.keychainClear)(location.storeName, key))
|
|
488
|
+
return 'removed';
|
|
489
|
+
refreshStoreLock(location);
|
|
490
|
+
return (0, keychain_1.keychainLookup)(location.storeName, key) === undefined ? 'unconfirmed' : 'kept';
|
|
491
|
+
};
|
|
492
|
+
/** The profile without the index's own bookkeeping, which is not part of the secret. */
|
|
493
|
+
const withoutMarker = (profile) => ({
|
|
494
|
+
...(profile.credentials ? { credentials: profile.credentials } : {}),
|
|
495
|
+
...(profile.oauth ? { oauth: profile.oauth } : {}),
|
|
496
|
+
});
|
|
497
|
+
/**
|
|
498
|
+
* Removes one stored profile, reporting what became of it and what it held.
|
|
499
|
+
*
|
|
500
|
+
* A secret the OS store will not give up fails the whole removal rather than being written off.
|
|
501
|
+
* `readProfile` looks the OS store up by key and never through the index, so dropping the index
|
|
502
|
+
* entry while the secret stays behind would leave a credential that still authenticates every
|
|
503
|
+
* command — and that `logout --all`, which enumerates the index, could no longer even find.
|
|
504
|
+
*
|
|
505
|
+
* `held` is the removed profile's content, read before its secret goes so `logout` can revoke its
|
|
506
|
+
* tokens afterwards; it is empty when nothing was removed or `readHeld` is false (see
|
|
507
|
+
* {@link heldProfile}).
|
|
508
|
+
*/
|
|
509
|
+
const deleteProfile = (location, key, readHeld) => withStoreLock(location, () => {
|
|
510
|
+
const entry = indexEntry(location, key);
|
|
511
|
+
const held = heldProfile(location, key, readHeld);
|
|
512
|
+
if (entry.backend === 'keychain') {
|
|
513
|
+
const outcome = removeSecret(location, key);
|
|
514
|
+
if (outcome === 'kept') {
|
|
515
|
+
// The one case worth refusing: the secret answered a lookup after the clear, so it is still
|
|
516
|
+
// there and still usable. Dropping the entry would report a sign-out over a live credential
|
|
517
|
+
// and lose the only record of where it is.
|
|
518
|
+
throw new Error('Could not remove the credential from your ' + osStoreName() + '.');
|
|
519
|
+
}
|
|
520
|
+
if (outcome === 'unconfirmed') {
|
|
521
|
+
(0, exports.warn)('Your ' + osStoreName() + ' may still hold a credential for this host; remove it there if so.');
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
const store = (0, exports.readStore)(location);
|
|
525
|
+
if (!Object.prototype.hasOwnProperty.call(store.profiles, key)) {
|
|
526
|
+
return { outcome: 'absent', held: { profile: {}, unreadable: false } };
|
|
527
|
+
}
|
|
528
|
+
const profiles = { ...store.profiles };
|
|
529
|
+
delete profiles[key];
|
|
530
|
+
(0, exports.writeStore)(location, { version: STORE_VERSION, profiles });
|
|
531
|
+
return { outcome: 'removed', held };
|
|
532
|
+
});
|
|
533
|
+
exports.deleteProfile = deleteProfile;
|
|
534
|
+
/**
|
|
535
|
+
* What a profile holds, read for `logout` inside the lock that is about to remove it.
|
|
536
|
+
*
|
|
537
|
+
* `logout` revokes what it removes, and once the secret is gone there is nothing left to read it
|
|
538
|
+
* from. Reading under the removal's own lock, rather than before taking it, means a sign-in that
|
|
539
|
+
* landed in between is the credential revoked — not the one it had already replaced.
|
|
540
|
+
*
|
|
541
|
+
* It reads wherever the index says the secret is, whatever the configured backend — unlike
|
|
542
|
+
* `readProfileResult`, which will not *send* a file-held secret under `keychain` or look in the
|
|
543
|
+
* OS store under `file`. Revoking is the opposite of using a credential: a token left in the file
|
|
544
|
+
* by an earlier build is still live at its provider, and this removal is the last chance to end it.
|
|
545
|
+
*
|
|
546
|
+
* `readHeld` is false for a CLI with no OAuth sign-in: nothing it stores can be revoked, so it
|
|
547
|
+
* skips the read, which under the keychain backend is one more helper spawn per profile.
|
|
548
|
+
*/
|
|
549
|
+
const heldProfile = (location, key, readHeld) => {
|
|
550
|
+
if (!readHeld)
|
|
551
|
+
return { profile: {}, unreadable: false };
|
|
552
|
+
const entry = indexEntry(location, key);
|
|
553
|
+
if (entry.backend !== 'keychain')
|
|
554
|
+
return { profile: withoutMarker(entry), unreadable: false };
|
|
555
|
+
refreshStoreLock(location);
|
|
556
|
+
const read = (0, keychain_1.keychainRead)(location.storeName, key);
|
|
557
|
+
const profile = read.secret === undefined ? {} : withoutMarker(parseSecret(read.secret));
|
|
558
|
+
// The index says the OS store holds a secret here, so an empty answer is not "nothing to revoke":
|
|
559
|
+
// the helper would not answer (a helper that fails looks the same as one with no such item) or
|
|
560
|
+
// the item went by hand. Either way a token may still be live, and `logout` has to say so.
|
|
561
|
+
return { profile, unreadable: Object.keys(profile).length === 0 };
|
|
562
|
+
};
|
|
563
|
+
/**
|
|
564
|
+
* Forgets everything, in both places, returning what was removed so `logout --all` can revoke it.
|
|
565
|
+
*
|
|
566
|
+
* The keychain items go one by one, taken from the index, before the index itself does: deleting the
|
|
567
|
+
* file first would strand the secrets in the OS store with nothing left pointing at them — invisible
|
|
568
|
+
* to this CLI and never cleaned up.
|
|
569
|
+
*
|
|
570
|
+
* A secret the OS store would not give up is reported through `failure` rather than thrown, so the
|
|
571
|
+
* profiles that *were* removed still reach revocation before the command fails.
|
|
572
|
+
*/
|
|
573
|
+
const clearAll = (location, readHeld) => {
|
|
574
|
+
const { kept, removed } = withStoreLock(location, () => {
|
|
575
|
+
// The keychain clears and the index rewrite share one lock with login. It can hold the lock for
|
|
576
|
+
// several helper calls, but that is preferable to acknowledging a logout that strands a secret.
|
|
577
|
+
const entries = Object.entries((0, exports.readStore)(location).profiles);
|
|
578
|
+
const outcomes = entries.map(([key, profile]) => [
|
|
579
|
+
key,
|
|
580
|
+
heldProfile(location, key, readHeld),
|
|
581
|
+
profile?.backend === 'keychain' ? removeSecret(location, key) : 'removed',
|
|
582
|
+
]);
|
|
583
|
+
const kept = outcomes.filter(([, , outcome]) => outcome === 'kept').map(([key]) => key);
|
|
584
|
+
if (outcomes.some(([, , outcome]) => outcome === 'unconfirmed')) {
|
|
585
|
+
(0, exports.warn)('Your ' + osStoreName() + ' may still hold credentials this could not remove.');
|
|
586
|
+
}
|
|
587
|
+
const remaining = entries.filter(([key]) => kept.includes(key));
|
|
588
|
+
if (remaining.length === 0)
|
|
589
|
+
(0, exports.deleteStore)(location);
|
|
590
|
+
else
|
|
591
|
+
(0, exports.writeStore)(location, { version: STORE_VERSION, profiles: Object.fromEntries(remaining) });
|
|
592
|
+
const removed = outcomes
|
|
593
|
+
.filter(([, , outcome]) => outcome !== 'kept')
|
|
594
|
+
.map(([key, held]) => ({ key, held }));
|
|
595
|
+
return { kept, removed };
|
|
596
|
+
});
|
|
597
|
+
if (kept.length === 0)
|
|
598
|
+
return { removed };
|
|
599
|
+
// The index entry is the only record of which base URLs have a secret in the OS store, so one
|
|
600
|
+
// still holding a retrievable secret keeps its entry: dropping it would strand the credential
|
|
601
|
+
// there — still live, and invisible to this CLI for good.
|
|
602
|
+
return {
|
|
603
|
+
removed,
|
|
604
|
+
failure: 'Could not remove every credential from your ' +
|
|
605
|
+
osStoreName() +
|
|
606
|
+
'; ' +
|
|
607
|
+
String(kept.length) +
|
|
608
|
+
' still there.',
|
|
609
|
+
};
|
|
610
|
+
};
|
|
611
|
+
exports.clearAll = clearAll;
|
|
612
|
+
/** Writes one profile into the on-disk store while the caller holds the credential-store lock. */
|
|
613
|
+
const writeIndex = (location, key, profile) => {
|
|
614
|
+
const store = (0, exports.readStore)(location);
|
|
615
|
+
(0, exports.writeStore)(location, {
|
|
616
|
+
version: STORE_VERSION,
|
|
617
|
+
profiles: { ...store.profiles, [key]: profile },
|
|
618
|
+
});
|
|
619
|
+
};
|
|
620
|
+
// Empty maps are dropped rather than written as `{}`: a store a user opens should show what is
|
|
621
|
+
// actually saved, and a token-only sign-in has no OAuth metadata to speak of.
|
|
622
|
+
const mergeProfile = (existing, update) => {
|
|
623
|
+
const credentials = { ...(existing.credentials ?? {}), ...(update.credentials ?? {}) };
|
|
624
|
+
const oauth = { ...(existing.oauth ?? {}), ...(update.oauth ?? {}) };
|
|
625
|
+
return {
|
|
626
|
+
...(Object.keys(credentials).length > 0 ? { credentials } : {}),
|
|
627
|
+
...(Object.keys(oauth).length > 0 ? { oauth } : {}),
|
|
628
|
+
};
|
|
629
|
+
};
|
|
630
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/cli/credentials.ts"],"names":[],"mappings":";AAAA,6EAA6E;;;AAE7E,6CAA0C;AAC1C,qCAUiB;AACjB,qCAAkC;AAClC,yCAA0C;AAE1C,yCAA2G;AAyD3G,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,MAAM,WAAW,GAAwB,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAElF,gGAAgG;AAChG,gGAAgG;AAChG,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,mGAAmG;AACnG,qFAAqF;AACrF,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC;;;;;GAKG;AACI,MAAM,SAAS,GAAG,CAAC,QAAiC,EAAU,EAAE;IACrE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,IAAA,gBAAI,EAAC,cAAc,EAAE,EAAE,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AACxE,CAAC,CAAC;AAJW,QAAA,SAAS,aAIpB;AAEF,oGAAoG;AACpG,yFAAyF;AACzF,MAAM,cAAc,GAAG,GAAW,EAAE;IAClC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IACzG,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF;;;;;;GAMG;AACI,MAAM,SAAS,GAAG,CAAC,QAAiC,EAAuB,EAAE;IAClF,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,IAAA,sBAAY,EAAC,IAAA,iBAAS,EAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,WAAW,CAAC;QAC9D,MAAM,QAAQ,GAAI,MAAiC,CAAC,QAAQ,CAAC;QAC7D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,OAAO,WAAW,CAAC;QAClE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAyC,EAAE,CAAC;IACzF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC,CAAC;AAhBW,QAAA,SAAS,aAgBpB;AAEF;;;;;GAKG;AACI,MAAM,UAAU,GAAG,CAAC,QAAiC,EAAE,KAA0B,EAAQ,EAAE;IAChG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAC;IACjC,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,iGAAiG;IACjG,mGAAmG;IACnG,kGAAkG;IAClG,gGAAgG;IAChG,+FAA+F;IAC/F,6DAA6D;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,IAAA,yBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IAClE,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,IAAA,uBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnE,CAAC;YAAS,CAAC;QACT,IAAA,mBAAS,EAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IACD,IAAI,CAAC;QACH,IAAA,oBAAU,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+FAA+F;QAC/F,6DAA6D;QAC7D,IAAA,gBAAM,EAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAzBW,QAAA,UAAU,cAyBrB;AAEF,uCAAuC;AAChC,MAAM,WAAW,GAAG,CAAC,QAAiC,EAAQ,EAAE;IACrE,cAAc,CAAC,QAAQ,CAAC,CAAC;IACzB,IAAA,gBAAM,EAAC,IAAA,iBAAS,EAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC;AAHW,QAAA,WAAW,eAGtB;AAEF;;;;;;GAMG;AACH,MAAM,aAAa,GAAG,CAAI,QAAiC,EAAE,SAAkB,EAAK,EAAE;IACpF,MAAM,IAAI,GAAG,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC;IAChC,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,8FAA8F;IAC9F,gGAAgG;IAChG,kGAAkG;IAClG,iGAAiG;IACjG,2BAA2B;IAC3B,MAAM,KAAK,GAAG,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,UAA8B,CAAC;IACnC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,OAAO,UAAU,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,UAAU,GAAG,IAAA,kBAAQ,EAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC;gBACH,IAAA,uBAAa,EAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,yFAAyF;gBACzF,uFAAuF;gBACvF,iCAAiC;gBACjC,IAAA,mBAAS,EAAC,UAAU,CAAC,CAAC;gBACtB,yFAAyF;gBACzF,yFAAyF;gBACzF,sFAAsF;gBACtF,UAAU,GAAG,SAAS,CAAC;gBACvB,IAAA,gBAAM,EAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClC,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;gBAAE,MAAM,KAAK,CAAC;YACrG,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,QAAQ,CAAC,CAAC;gBACjC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,mBAAmB,EAAE,CAAC;oBACrD,qFAAqF;oBACrF,uFAAuF;oBACvF,uFAAuF;oBACvF,yFAAyF;oBACzF,0FAA0F;oBAC1F,6BAA6B;oBAC7B,MAAM,OAAO,GAAG,QAAQ,GAAG,GAAG,GAAG,KAAK,CAAC;oBACvC,IAAA,oBAAU,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAC9B,MAAM,KAAK,GAAG,IAAA,kBAAQ,EAAC,OAAO,CAAC,CAAC;oBAChC,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;wBAAE,IAAA,gBAAM,EAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;;wBAC5F,IAAA,oBAAU,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACrC,CAAC;gBACD,iBAAiB,GAAG,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,6FAA6F;gBAC7F,8FAA8F;gBAC9F,qFAAqF;gBACrF,iBAAiB,IAAI,CAAC,CAAC;gBACvB,IAAI,iBAAiB,GAAG,qBAAqB,EAAE,CAAC;oBAC9C,MAAM,IAAI,KAAK,CAAC,8CAA8C,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;YACD,6FAA6F;YAC7F,6FAA6F;YAC7F,sEAAsE;YACtE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,QAAQ,CAAC;IAC1B,QAAQ,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,SAAS,EAAE,CAAC;IACrB,CAAC;YAAS,CAAC;QACT,QAAQ,GAAG,QAAQ,CAAC;QACpB,IAAA,mBAAS,EAAC,UAAU,CAAC,CAAC;QACtB,IAAI,CAAC;YACH,iEAAiE;YACjE,IAAI,IAAA,sBAAY,EAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,KAAK;gBAAE,IAAA,gBAAM,EAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,kGAAkG;AAClG,IAAI,QAAuE,CAAC;AAE5E;;;;;;;;;;GAUG;AACH,MAAM,cAAc,GAAG,CAAC,QAAiC,EAAQ,EAAE;IACjE,MAAM,IAAI,GAAG,QAAQ,CAAC;IACtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAA,iBAAS,EAAC,QAAQ,CAAC,GAAG,OAAO;QAAE,OAAO;IACjE,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,IAAA,sBAAY,EAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,EAAE,CAAC;IACb,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,kGAAkG;AAClG,MAAM,gBAAgB,GAAG,CAAC,QAAiC,EAAQ,EAAE;IACnE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC;QACH,IAAA,oBAAU,EAAC,IAAA,iBAAS,EAAC,QAAQ,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,sFAAsF;IACxF,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACI,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAC;IAC/B,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,8FAA8F;QAC9F,+FAA+F;QAC/F,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,iGAAiG;IACjG,gGAAgG;IAChG,4EAA4E;IAC5E,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;IAClB,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;IAClB,gGAAgG;IAChG,6FAA6F;IAC7F,kEAAkE;IAClE,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACd,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;IAChB,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC;AAtBW,QAAA,UAAU,cAsBrB;AAKF;;;;;;;GAOG;AACH,MAAM,cAAc,GAAG,CAAC,QAAiC,EAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,KAAK,MAAM,CAAC;AAEnG,4FAA4F;AACrF,MAAM,gBAAgB,GAAG,CAAC,QAAiC,EAAE,OAAqB,EAAU,EAAE,CACnG,OAAO,KAAK,UAAU;IACpB,CAAC,CAAC,OAAO,GAAG,WAAW,EAAE,GAAG,uCAAuC,GAAG,IAAA,iBAAS,EAAC,QAAQ,CAAC,GAAG,GAAG;IAC/F,CAAC,CAAC,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAC;AAHb,QAAA,gBAAgB,oBAGH;AAE1B,MAAM,WAAW,GAAG,GAAW,EAAE;IAC/B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,4BAA4B,CAAC;IACtE,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,gBAAgB,CAAC;IAC3D,OAAO,gBAAgB,CAAC;AAC1B,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACI,MAAM,WAAW,GAAG,CAAC,QAAiC,EAAE,GAAW,EAAiB,EAAE,CAC3F,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;AAD9B,QAAA,WAAW,eACmB;AAE3C;;;;;;;;GAQG;AACH,MAAM,iBAAiB,GAAG,CACxB,QAAiC,EACjC,GAAW,EACwD,EAAE;IACrE,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACjC,+FAA+F;QAC/F,8FAA8F;QAC9F,8FAA8F;QAC9F,6FAA6F;QAC7F,eAAe;QACf,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACtF,CAAC;IACD,kGAAkG;IAClG,iGAAiG;IACjG,iGAAiG;IACjG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,+FAA+F;QAC/F,yEAAyE;QACzE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,uBAAY,EAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACnD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;IACpF,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAClE,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,WAAW,GAAG,CAAC,MAAc,EAAiB,EAAE;IACpD,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,MAAuB,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,sGAAsG;AACtG,MAAM,UAAU,GAAG,CAAC,QAAiC,EAAE,GAAW,EAAiB,EAAE;IACnF,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAC;IACzC,iGAAiG;IACjG,iEAAiE;IACjE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,CAAC,CAAC;AAEF,sGAAsG;AAC/F,MAAM,YAAY,GAAG,CAC1B,QAAiC,EACjC,GAAW,EACX,MAAqB,EACP,EAAE;AAChB,mGAAmG;AACnG,iGAAiG;AACjG,uCAAuC;AACvC,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;AAR9D,QAAA,YAAY,gBAQkD;AAE3E;;;;;;;;;;GAUG;AACI,MAAM,cAAc,GAAG,CAC5B,QAAiC,EACjC,GAAW,EACX,MAAqB,EACf,EAAE;IACR,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE;QAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC;YAAE,OAAO;QACrF,+FAA+F;QAC/F,8FAA8F;QAC9F,6FAA6F;QAC7F,IAAI,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,UAAU;YAAE,OAAO;QACxD,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAbW,QAAA,cAAc,kBAazB;AAEF,iGAAiG;AACjG,MAAM,kBAAkB,GAAG,CACzB,QAAiC,EACjC,GAAW,EACX,MAAqB,EACP,EAAE;IAChB,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACzC,6FAA6F;IAC7F,gDAAgD;IAChD,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU;QAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAClD,gGAAgG;IAChG,4FAA4F;IAC5F,iFAAiF;IACjF,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,uEAAuE;YACrE,WAAW,EAAE;YACb,sEAAsE,CACzE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvD,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,IAAA,wBAAa,EAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,IAAI,CAAC;gBACH,2FAA2F;gBAC3F,kEAAkE;gBAClE,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,yFAAyF;gBACzF,kFAAkF;gBAClF,wFAAwF;gBACxF,wFAAwF;gBACxF,2FAA2F;gBAC3F,wEAAwE;gBACxE,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;oBAClC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;oBAC3B,IAAA,wBAAa,EAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBACzC,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,IAAI,QAAQ,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,IAAA,4BAAiB,GAAE;gBACjB,CAAC,CAAC,wCAAwC,GAAG,WAAW,EAAE,GAAG,GAAG;gBAChE,CAAC,CAAC,sCAAsC,GAAG,QAAQ,CAAC,SAAS,GAAG,WAAW,CAC9E,CAAC;QACJ,CAAC;IACH,CAAC;IACD,iGAAiG;IACjG,iGAAiG;IACjG,+FAA+F;IAC/F,+FAA+F;IAC/F,qEAAqE;IACrE,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,IAAI,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;QAC/E,IAAA,YAAI,EACF,OAAO,GAAG,WAAW,EAAE,GAAG,2EAA2E,CACtG,CAAC;IACJ,CAAC;IACD,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAa,EAAE,CAAC;AAE9B;;;;;;;GAOG;AACI,MAAM,IAAI,GAAG,CAAC,OAAe,EAAQ,EAAE;IAC5C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC1D,CAAC,CAAC;AAFW,QAAA,IAAI,QAEf;AAEF,gEAAgE;AACzD,MAAM,YAAY,GAAG,GAAsB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAA5E,QAAA,YAAY,gBAAgE;AAEzF;;;;;;;;;;;;;GAaG;AACH,MAAM,YAAY,GAAG,CAAC,QAAiC,EAAE,GAAW,EAAsC,EAAE;IAC1G,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3B,IAAI,IAAA,wBAAa,EAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3B,OAAO,IAAA,yBAAc,EAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;AACxF,CAAC,CAAC;AAEF,wFAAwF;AACxF,MAAM,aAAa,GAAG,CAAC,OAAsB,EAAiB,EAAE,CAAC,CAAC;IAChE,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;CACnD,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AACI,MAAM,aAAa,GAAG,CAC3B,QAAiC,EACjC,GAAW,EACX,QAAiB,EACuD,EAAE,CAC1E,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,4FAA4F;YAC5F,4FAA4F;YAC5F,2CAA2C;YAC3C,MAAM,IAAI,KAAK,CAAC,4CAA4C,GAAG,WAAW,EAAE,GAAG,GAAG,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;YAC9B,IAAA,YAAI,EAAC,OAAO,GAAG,WAAW,EAAE,GAAG,oEAAoE,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC;IACzE,CAAC;IACD,MAAM,QAAQ,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrB,IAAA,kBAAU,EAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtC,CAAC,CAAC,CAAC;AA5BQ,QAAA,aAAa,iBA4BrB;AAeL;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,GAAG,CAAC,QAAiC,EAAE,GAAW,EAAE,QAAiB,EAAe,EAAE;IACrG,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACzD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU;QAAE,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC9F,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAA,uBAAY,EAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACzF,kGAAkG;IAClG,+FAA+F;IAC/F,2FAA2F;IAC3F,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;AACpE,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACI,MAAM,QAAQ,GAAG,CACtB,QAAiC,EACjC,QAAiB,EAC2D,EAAE;IAC9E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE;QACrD,gGAAgG;QAChG,gGAAgG;QAChG,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAC1B,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,CACjB;YACE,GAAG;YACH,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC;YACpC,OAAO,EAAE,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;SACjE,CACb,CAAC;QACF,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,AAAD,EAAG,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACxF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,AAAD,EAAG,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,aAAa,CAAC,EAAE,CAAC;YAChE,IAAA,YAAI,EAAC,OAAO,GAAG,WAAW,EAAE,GAAG,oDAAoD,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,IAAA,mBAAW,EAAC,QAAQ,CAAC,CAAC;;YAC7C,IAAA,kBAAU,EAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,QAAQ;aACrB,MAAM,CAAC,CAAC,CAAC,EAAE,AAAD,EAAG,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,MAAM,CAAC;aAC7C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAkB,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC1C,8FAA8F;IAC9F,8FAA8F;IAC9F,0DAA0D;IAC1D,OAAO;QACL,OAAO;QACP,OAAO,EACL,8CAA8C;YAC9C,WAAW,EAAE;YACb,IAAI;YACJ,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YACnB,eAAe;KAClB,CAAC;AACJ,CAAC,CAAC;AAzCW,QAAA,QAAQ,YAyCnB;AAEF,kGAAkG;AAClG,MAAM,UAAU,GAAG,CAAC,QAAiC,EAAE,GAAW,EAAE,OAAsB,EAAQ,EAAE;IAClG,MAAM,KAAK,GAAG,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAC;IAClC,IAAA,kBAAU,EAAC,QAAQ,EAAE;QACnB,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE;KAChD,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,+FAA+F;AAC/F,8EAA8E;AAC9E,MAAM,YAAY,GAAG,CAAC,QAAuB,EAAE,MAAqB,EAAiB,EAAE;IACrF,MAAM,WAAW,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;IACvF,MAAM,KAAK,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;IACrE,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC,CAAC"}
|