@credibledata/cred-cli 0.0.100 → 0.0.103
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/README-DEV.md +2 -2
- package/README.md +1 -1
- package/coverage/coverage-summary.json +40 -0
- package/coverage/tmp/coverage-2152-1789496974457-0.json +1 -0
- package/coverage/tmp/coverage-2153-1789496954404-0.json +1 -0
- package/dist/client/api.js +6151 -2254
- package/dist/client/api.js.map +1 -1
- package/dist/client/base.js +1 -1
- package/dist/client/common.js +1 -1
- package/dist/client/configuration.js +1 -1
- package/dist/client/index.js +1 -1
- package/dist/clientconfiguration.js +114 -26
- package/dist/clientconfiguration.js.map +1 -1
- package/dist/clientconfiguration.spec.js +159 -37
- package/dist/clientconfiguration.spec.js.map +1 -1
- package/dist/commands/add.js +36 -5
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/connection/createconnections.js +4 -4
- package/dist/commands/connection/createconnections.js.map +1 -1
- package/dist/commands/connection/createconnections.spec.js +11 -1
- package/dist/commands/connection/createconnections.spec.js.map +1 -1
- package/dist/commands/connection/deleteconnection.js +4 -4
- package/dist/commands/connection/deleteconnection.js.map +1 -1
- package/dist/commands/connection/deleteconnection.spec.js +1 -1
- package/dist/commands/connection/deleteconnection.spec.js.map +1 -1
- package/dist/commands/connection/listconnections.js +4 -4
- package/dist/commands/connection/listconnections.js.map +1 -1
- package/dist/commands/connection/listconnections.spec.js +1 -1
- package/dist/commands/connection/listconnections.spec.js.map +1 -1
- package/dist/commands/{project/createproject.js → environment/createenvironment.js} +17 -14
- package/dist/commands/environment/createenvironment.js.map +1 -0
- package/dist/commands/{project/createproject.spec.js → environment/createenvironment.spec.js} +46 -46
- package/dist/commands/environment/createenvironment.spec.js.map +1 -0
- package/dist/commands/{project/deleteproject.js → environment/deleteenvironment.js} +9 -9
- package/dist/commands/environment/deleteenvironment.js.map +1 -0
- package/dist/commands/{project/deleteproject.spec.js → environment/deleteenvironment.spec.js} +29 -29
- package/dist/commands/environment/deleteenvironment.spec.js.map +1 -0
- package/dist/commands/{project/getproject.js → environment/getenvironment.js} +8 -8
- package/dist/commands/environment/getenvironment.js.map +1 -0
- package/dist/commands/{project/getproject.spec.js → environment/getenvironment.spec.js} +32 -33
- package/dist/commands/environment/getenvironment.spec.js.map +1 -0
- package/dist/commands/{project/listprojects.js → environment/listenvironments.js} +10 -10
- package/dist/commands/environment/listenvironments.js.map +1 -0
- package/dist/commands/{project/listprojects.spec.js → environment/listenvironments.spec.js} +35 -35
- package/dist/commands/environment/listenvironments.spec.js.map +1 -0
- package/dist/commands/{project/setproject.js → environment/setenvironment.js} +6 -5
- package/dist/commands/environment/setenvironment.js.map +1 -0
- package/dist/commands/{project/setproject.spec.js → environment/setenvironment.spec.js} +9 -9
- package/dist/commands/environment/setenvironment.spec.js.map +1 -0
- package/dist/commands/environment/updateenvironment.js +130 -0
- package/dist/commands/environment/updateenvironment.js.map +1 -0
- package/dist/commands/environment/updateenvironment.spec.js +213 -0
- package/dist/commands/environment/updateenvironment.spec.js.map +1 -0
- package/dist/commands/get.js +66 -5
- package/dist/commands/get.js.map +1 -1
- package/dist/commands/legacy.js +9 -0
- package/dist/commands/legacy.js.map +1 -0
- package/dist/commands/list.js +95 -4
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/materialization/cancelrun.js +62 -0
- package/dist/commands/materialization/cancelrun.js.map +1 -0
- package/dist/commands/materialization/getindex.js +52 -0
- package/dist/commands/materialization/getindex.js.map +1 -0
- package/dist/commands/materialization/getmaterialization.js +54 -0
- package/dist/commands/materialization/getmaterialization.js.map +1 -0
- package/dist/commands/materialization/getpreaggregate.js +55 -0
- package/dist/commands/materialization/getpreaggregate.js.map +1 -0
- package/dist/commands/materialization/getrun.js +54 -0
- package/dist/commands/materialization/getrun.js.map +1 -0
- package/dist/commands/materialization/listindexes.js +58 -0
- package/dist/commands/materialization/listindexes.js.map +1 -0
- package/dist/commands/materialization/listmaterializations.js +52 -0
- package/dist/commands/materialization/listmaterializations.js.map +1 -0
- package/dist/commands/materialization/listpreaggregates.js +61 -0
- package/dist/commands/materialization/listpreaggregates.js.map +1 -0
- package/dist/commands/materialization/listruns.js +60 -0
- package/dist/commands/materialization/listruns.js.map +1 -0
- package/dist/commands/materialization/rerun.js +111 -0
- package/dist/commands/materialization/rerun.js.map +1 -0
- package/dist/commands/misc/login.js +16 -2
- package/dist/commands/misc/login.js.map +1 -1
- package/dist/commands/misc/login.spec.js +133 -5
- package/dist/commands/misc/login.spec.js.map +1 -1
- package/dist/commands/package/deletepackage.js +4 -4
- package/dist/commands/package/deletepackage.js.map +1 -1
- package/dist/commands/package/deletepackage.spec.js +1 -1
- package/dist/commands/package/deletepackage.spec.js.map +1 -1
- package/dist/commands/package/listpackages.js +11 -4
- package/dist/commands/package/listpackages.js.map +1 -1
- package/dist/commands/package/listpackages.spec.js +13 -1
- package/dist/commands/package/listpackages.spec.js.map +1 -1
- package/dist/commands/package/publish.js +36 -13
- package/dist/commands/package/publish.js.map +1 -1
- package/dist/commands/package/publish.spec.js +27 -1
- package/dist/commands/package/publish.spec.js.map +1 -1
- package/dist/commands/package/updatepackage.js +4 -4
- package/dist/commands/package/updatepackage.js.map +1 -1
- package/dist/commands/package/updatepackage.spec.js +1 -1
- package/dist/commands/package/updatepackage.spec.js.map +1 -1
- package/dist/commands/permission/createpermission.js +123 -0
- package/dist/commands/permission/createpermission.js.map +1 -0
- package/dist/commands/permission/createpermission.spec.js +360 -0
- package/dist/commands/permission/createpermission.spec.js.map +1 -0
- package/dist/commands/permission/deletepermission.js +86 -0
- package/dist/commands/permission/deletepermission.js.map +1 -0
- package/dist/commands/permission/getpermission.js +85 -0
- package/dist/commands/permission/getpermission.js.map +1 -0
- package/dist/commands/permission/listpermissions.js +75 -0
- package/dist/commands/permission/listpermissions.js.map +1 -0
- package/dist/commands/permission/scope.js +140 -0
- package/dist/commands/permission/scope.js.map +1 -0
- package/dist/commands/rm.js +26 -4
- package/dist/commands/rm.js.map +1 -1
- package/dist/commands/set.js +12 -4
- package/dist/commands/set.js.map +1 -1
- package/dist/commands/update.js +29 -10
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/version/archive-unarchive-version.js +4 -5
- package/dist/commands/version/archive-unarchive-version.js.map +1 -1
- package/dist/commands/version/archive-unarchive-version.spec.js +4 -4
- package/dist/commands/version/archive-unarchive-version.spec.js.map +1 -1
- package/dist/commands/version/listversions.js +4 -4
- package/dist/commands/version/listversions.js.map +1 -1
- package/dist/commands/version/listversions.spec.js +1 -1
- package/dist/commands/version/listversions.spec.js.map +1 -1
- package/dist/common/UserGroupId.js +1 -1
- package/dist/common/UserGroupId.js.map +1 -1
- package/dist/common/UserGroupId.spec.js +2 -4
- package/dist/common/UserGroupId.spec.js.map +1 -1
- package/dist/constants.js +95 -19
- package/dist/constants.js.map +1 -1
- package/dist/constants.spec.js +90 -0
- package/dist/constants.spec.js.map +1 -0
- package/dist/index.js +128 -15
- package/dist/index.js.map +1 -1
- package/dist/logger.js +5 -1
- package/dist/logger.js.map +1 -1
- package/openapitools.json +4 -1
- package/package.json +10 -9
- package/src/client/api.ts +9363 -3093
- package/src/client/base.ts +1 -1
- package/src/client/common.ts +1 -1
- package/src/client/configuration.ts +1 -1
- package/src/client/index.ts +1 -1
- package/src/clientconfiguration.spec.ts +238 -113
- package/src/clientconfiguration.ts +131 -30
- package/src/commands/add.ts +78 -12
- package/src/commands/connection/createconnections.spec.ts +11 -1
- package/src/commands/connection/createconnections.ts +4 -4
- package/src/commands/connection/deleteconnection.spec.ts +1 -1
- package/src/commands/connection/deleteconnection.ts +4 -4
- package/src/commands/connection/listconnections.spec.ts +1 -1
- package/src/commands/connection/listconnections.ts +4 -4
- package/src/commands/{project/createproject.spec.ts → environment/createenvironment.spec.ts} +56 -54
- package/src/commands/{project/createproject.ts → environment/createenvironment.ts} +17 -14
- package/src/commands/{project/deleteproject.spec.ts → environment/deleteenvironment.spec.ts} +59 -30
- package/src/commands/{project/deleteproject.ts → environment/deleteenvironment.ts} +10 -10
- package/src/commands/environment/getenvironment.spec.ts +110 -0
- package/src/commands/{project/getproject.ts → environment/getenvironment.ts} +9 -9
- package/src/commands/{project/listprojects.spec.ts → environment/listenvironments.spec.ts} +37 -35
- package/src/commands/{project/listprojects.ts → environment/listenvironments.ts} +13 -8
- package/src/commands/{project/setproject.spec.ts → environment/setenvironment.spec.ts} +8 -8
- package/src/commands/{project/setproject.ts → environment/setenvironment.ts} +4 -4
- package/src/commands/environment/updateenvironment.spec.ts +386 -0
- package/src/commands/environment/updateenvironment.ts +168 -0
- package/src/commands/get.ts +131 -9
- package/src/commands/legacy.ts +5 -0
- package/src/commands/list.ts +204 -9
- package/src/commands/materialization/cancelrun.ts +70 -0
- package/src/commands/materialization/getindex.ts +55 -0
- package/src/commands/materialization/getmaterialization.ts +57 -0
- package/src/commands/materialization/getpreaggregate.ts +58 -0
- package/src/commands/materialization/getrun.ts +55 -0
- package/src/commands/materialization/listindexes.ts +69 -0
- package/src/commands/materialization/listmaterializations.ts +53 -0
- package/src/commands/materialization/listpreaggregates.ts +74 -0
- package/src/commands/materialization/listruns.ts +77 -0
- package/src/commands/materialization/rerun.ts +123 -0
- package/src/commands/misc/login.spec.ts +165 -7
- package/src/commands/misc/login.ts +20 -2
- package/src/commands/package/deletepackage.spec.ts +1 -1
- package/src/commands/package/deletepackage.ts +4 -4
- package/src/commands/package/listpackages.spec.ts +17 -1
- package/src/commands/package/listpackages.ts +11 -4
- package/src/commands/package/publish.spec.ts +46 -1
- package/src/commands/package/publish.ts +38 -13
- package/src/commands/package/updatepackage.spec.ts +1 -1
- package/src/commands/package/updatepackage.ts +4 -4
- package/src/commands/permission/createpermission.spec.ts +507 -0
- package/src/commands/permission/createpermission.ts +181 -0
- package/src/commands/permission/deletepermission.ts +117 -0
- package/src/commands/permission/getpermission.ts +115 -0
- package/src/commands/permission/listpermissions.ts +101 -0
- package/src/commands/permission/scope.ts +180 -0
- package/src/commands/rm.ts +54 -9
- package/src/commands/set.ts +13 -4
- package/src/commands/update.ts +66 -23
- package/src/commands/version/archive-unarchive-version.spec.ts +4 -4
- package/src/commands/version/archive-unarchive-version.ts +4 -7
- package/src/commands/version/listversions.spec.ts +1 -1
- package/src/commands/version/listversions.ts +4 -4
- package/src/common/UserGroupId.spec.ts +2 -4
- package/src/common/UserGroupId.ts +1 -1
- package/src/constants.spec.ts +111 -0
- package/src/constants.ts +131 -19
- package/src/index.ts +187 -18
- package/src/logger.ts +5 -1
- package/bun.lock +0 -1158
- package/dist/commands/project/createproject.js.map +0 -1
- package/dist/commands/project/createproject.spec.js.map +0 -1
- package/dist/commands/project/deleteproject.js.map +0 -1
- package/dist/commands/project/deleteproject.spec.js.map +0 -1
- package/dist/commands/project/getproject.js.map +0 -1
- package/dist/commands/project/getproject.spec.js.map +0 -1
- package/dist/commands/project/listprojects.js.map +0 -1
- package/dist/commands/project/listprojects.spec.js.map +0 -1
- package/dist/commands/project/setproject.js.map +0 -1
- package/dist/commands/project/setproject.spec.js.map +0 -1
- package/dist/commands/project/updateproject.js +0 -68
- package/dist/commands/project/updateproject.js.map +0 -1
- package/dist/commands/project/updateproject.spec.js +0 -129
- package/dist/commands/project/updateproject.spec.js.map +0 -1
- package/src/commands/project/getproject.spec.ts +0 -109
- package/src/commands/project/updateproject.spec.ts +0 -217
- package/src/commands/project/updateproject.ts +0 -82
package/dist/client/base.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/* eslint-disable */
|
|
4
4
|
/**
|
|
5
5
|
* Credible Admin API
|
|
6
|
-
* The Credible Admin API is a comprehensive REST API that empowers organizations to manage their Malloy data modeling ecosystem with enterprise-grade security and governance. This API provides programmatic access to all administrative functions, enabling seamless integration with existing workflows and automation systems. ## Key Features - **Organization Management**: Create and manage organizations with fine-grained access controls - **
|
|
6
|
+
* The Credible Admin API is a comprehensive REST API that empowers organizations to manage their Malloy data modeling ecosystem with enterprise-grade security and governance. This API provides programmatic access to all administrative functions, enabling seamless integration with existing workflows and automation systems. ## Key Features - **Organization Management**: Create and manage organizations with fine-grained access controls - **Environment & Package Lifecycle**: Full CRUD operations for environments, packages, and versions - **Connection Management**: Secure database connection configuration and management - **Permission Management**: Granular role-based access control (RBAC) at organization, environment, package, workspace, and document levels - **Workspace Management**: Collaborative workspaces for data modeling and analysis - **User & Group Management**: Comprehensive user administration with group-based permissions ## Resource Hierarchy The API follows a hierarchical resource structure with fine-grained permission management at each level: ``` Organizations ├── Permissions ├── Environments │ ├── Permissions │ ├── Packages │ │ ├── Permissions │ │ └── Versions │ └── Connections ├── Workspaces │ ├── Permissions │ └── Documents │ └── Permissions └── Groups ├── Permissions └── Members System-Level Resources: ├── Users ├── System Permissions └── Demo Operations ``` ## Authentication & Authorization All API endpoints require proper authentication. The API implements fine-grained authorization using role-based permissions: - **Admin**: Full access to all resources within scope - **Modeler**: Can create and modify data models and packages - **Viewer**: Read-only access to resources - **Manager**: Workspace management capabilities - **Editor**: Document editing permissions ## Rate Limiting & Best Practices - API requests are rate-limited to ensure system stability - Implement proper error handling and retry logic - Cache responses when appropriate to reduce API calls ## Support & Documentation For additional support, examples, and integration guides, visit our developer documentation or contact our support team.
|
|
7
7
|
*
|
|
8
8
|
* The version of the OpenAPI document: v0
|
|
9
9
|
* Contact: support@credibledata.com
|
package/dist/client/common.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/* eslint-disable */
|
|
4
4
|
/**
|
|
5
5
|
* Credible Admin API
|
|
6
|
-
* The Credible Admin API is a comprehensive REST API that empowers organizations to manage their Malloy data modeling ecosystem with enterprise-grade security and governance. This API provides programmatic access to all administrative functions, enabling seamless integration with existing workflows and automation systems. ## Key Features - **Organization Management**: Create and manage organizations with fine-grained access controls - **
|
|
6
|
+
* The Credible Admin API is a comprehensive REST API that empowers organizations to manage their Malloy data modeling ecosystem with enterprise-grade security and governance. This API provides programmatic access to all administrative functions, enabling seamless integration with existing workflows and automation systems. ## Key Features - **Organization Management**: Create and manage organizations with fine-grained access controls - **Environment & Package Lifecycle**: Full CRUD operations for environments, packages, and versions - **Connection Management**: Secure database connection configuration and management - **Permission Management**: Granular role-based access control (RBAC) at organization, environment, package, workspace, and document levels - **Workspace Management**: Collaborative workspaces for data modeling and analysis - **User & Group Management**: Comprehensive user administration with group-based permissions ## Resource Hierarchy The API follows a hierarchical resource structure with fine-grained permission management at each level: ``` Organizations ├── Permissions ├── Environments │ ├── Permissions │ ├── Packages │ │ ├── Permissions │ │ └── Versions │ └── Connections ├── Workspaces │ ├── Permissions │ └── Documents │ └── Permissions └── Groups ├── Permissions └── Members System-Level Resources: ├── Users ├── System Permissions └── Demo Operations ``` ## Authentication & Authorization All API endpoints require proper authentication. The API implements fine-grained authorization using role-based permissions: - **Admin**: Full access to all resources within scope - **Modeler**: Can create and modify data models and packages - **Viewer**: Read-only access to resources - **Manager**: Workspace management capabilities - **Editor**: Document editing permissions ## Rate Limiting & Best Practices - API requests are rate-limited to ensure system stability - Implement proper error handling and retry logic - Cache responses when appropriate to reduce API calls ## Support & Documentation For additional support, examples, and integration guides, visit our developer documentation or contact our support team.
|
|
7
7
|
*
|
|
8
8
|
* The version of the OpenAPI document: v0
|
|
9
9
|
* Contact: support@credibledata.com
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/* eslint-disable */
|
|
4
4
|
/**
|
|
5
5
|
* Credible Admin API
|
|
6
|
-
* The Credible Admin API is a comprehensive REST API that empowers organizations to manage their Malloy data modeling ecosystem with enterprise-grade security and governance. This API provides programmatic access to all administrative functions, enabling seamless integration with existing workflows and automation systems. ## Key Features - **Organization Management**: Create and manage organizations with fine-grained access controls - **
|
|
6
|
+
* The Credible Admin API is a comprehensive REST API that empowers organizations to manage their Malloy data modeling ecosystem with enterprise-grade security and governance. This API provides programmatic access to all administrative functions, enabling seamless integration with existing workflows and automation systems. ## Key Features - **Organization Management**: Create and manage organizations with fine-grained access controls - **Environment & Package Lifecycle**: Full CRUD operations for environments, packages, and versions - **Connection Management**: Secure database connection configuration and management - **Permission Management**: Granular role-based access control (RBAC) at organization, environment, package, workspace, and document levels - **Workspace Management**: Collaborative workspaces for data modeling and analysis - **User & Group Management**: Comprehensive user administration with group-based permissions ## Resource Hierarchy The API follows a hierarchical resource structure with fine-grained permission management at each level: ``` Organizations ├── Permissions ├── Environments │ ├── Permissions │ ├── Packages │ │ ├── Permissions │ │ └── Versions │ └── Connections ├── Workspaces │ ├── Permissions │ └── Documents │ └── Permissions └── Groups ├── Permissions └── Members System-Level Resources: ├── Users ├── System Permissions └── Demo Operations ``` ## Authentication & Authorization All API endpoints require proper authentication. The API implements fine-grained authorization using role-based permissions: - **Admin**: Full access to all resources within scope - **Modeler**: Can create and modify data models and packages - **Viewer**: Read-only access to resources - **Manager**: Workspace management capabilities - **Editor**: Document editing permissions ## Rate Limiting & Best Practices - API requests are rate-limited to ensure system stability - Implement proper error handling and retry logic - Cache responses when appropriate to reduce API calls ## Support & Documentation For additional support, examples, and integration guides, visit our developer documentation or contact our support team.
|
|
7
7
|
*
|
|
8
8
|
* The version of the OpenAPI document: v0
|
|
9
9
|
* Contact: support@credibledata.com
|
package/dist/client/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
/* eslint-disable */
|
|
4
4
|
/**
|
|
5
5
|
* Credible Admin API
|
|
6
|
-
* The Credible Admin API is a comprehensive REST API that empowers organizations to manage their Malloy data modeling ecosystem with enterprise-grade security and governance. This API provides programmatic access to all administrative functions, enabling seamless integration with existing workflows and automation systems. ## Key Features - **Organization Management**: Create and manage organizations with fine-grained access controls - **
|
|
6
|
+
* The Credible Admin API is a comprehensive REST API that empowers organizations to manage their Malloy data modeling ecosystem with enterprise-grade security and governance. This API provides programmatic access to all administrative functions, enabling seamless integration with existing workflows and automation systems. ## Key Features - **Organization Management**: Create and manage organizations with fine-grained access controls - **Environment & Package Lifecycle**: Full CRUD operations for environments, packages, and versions - **Connection Management**: Secure database connection configuration and management - **Permission Management**: Granular role-based access control (RBAC) at organization, environment, package, workspace, and document levels - **Workspace Management**: Collaborative workspaces for data modeling and analysis - **User & Group Management**: Comprehensive user administration with group-based permissions ## Resource Hierarchy The API follows a hierarchical resource structure with fine-grained permission management at each level: ``` Organizations ├── Permissions ├── Environments │ ├── Permissions │ ├── Packages │ │ ├── Permissions │ │ └── Versions │ └── Connections ├── Workspaces │ ├── Permissions │ └── Documents │ └── Permissions └── Groups ├── Permissions └── Members System-Level Resources: ├── Users ├── System Permissions └── Demo Operations ``` ## Authentication & Authorization All API endpoints require proper authentication. The API implements fine-grained authorization using role-based permissions: - **Admin**: Full access to all resources within scope - **Modeler**: Can create and modify data models and packages - **Viewer**: Read-only access to resources - **Manager**: Workspace management capabilities - **Editor**: Document editing permissions ## Rate Limiting & Best Practices - API requests are rate-limited to ensure system stability - Implement proper error handling and retry logic - Cache responses when appropriate to reduce API calls ## Support & Documentation For additional support, examples, and integration guides, visit our developer documentation or contact our support team.
|
|
7
7
|
*
|
|
8
8
|
* The version of the OpenAPI document: v0
|
|
9
9
|
* Contact: support@credibledata.com
|
|
@@ -3,13 +3,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ClientConfiguration = void 0;
|
|
6
|
+
exports.ClientConfiguration = exports.InvalidConfigError = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
7
8
|
const fs_1 = __importDefault(require("fs"));
|
|
8
9
|
const jwt_decode_1 = require("jwt-decode");
|
|
9
10
|
const kleur_1 = __importDefault(require("kleur"));
|
|
10
11
|
const os_1 = __importDefault(require("os"));
|
|
11
12
|
const constants_1 = require("./constants");
|
|
12
13
|
const logger_1 = require("./logger");
|
|
14
|
+
/**
|
|
15
|
+
* Thrown when `.cred` exists but cannot be used: either it does not parse as
|
|
16
|
+
* JSON or it parses but lacks the required top-level shape. Distinct from fs
|
|
17
|
+
* errors (ENOENT, EACCES) so callers that want to recover — `cred login` —
|
|
18
|
+
* can target *only* a corrupt-content failure and leave permission/IO errors
|
|
19
|
+
* to surface loudly.
|
|
20
|
+
*/
|
|
21
|
+
class InvalidConfigError extends Error {
|
|
22
|
+
}
|
|
23
|
+
exports.InvalidConfigError = InvalidConfigError;
|
|
13
24
|
class ClientConfiguration {
|
|
14
25
|
constructor(customConfigPath) {
|
|
15
26
|
this.configPath = `${os_1.default.homedir()}/.cred`;
|
|
@@ -18,25 +29,31 @@ class ClientConfiguration {
|
|
|
18
29
|
}
|
|
19
30
|
}
|
|
20
31
|
loadConfig() {
|
|
32
|
+
let fileContents;
|
|
21
33
|
try {
|
|
22
|
-
|
|
23
|
-
this.config = JSON.parse(fileContents.toString());
|
|
24
|
-
if (!this.config.activeEnvironment ||
|
|
25
|
-
!this.config.configPerEnvironment) {
|
|
26
|
-
throw new Error("Corrupted config file found, restoring to default settings.");
|
|
27
|
-
}
|
|
34
|
+
fileContents = fs_1.default.readFileSync(this.configPath);
|
|
28
35
|
}
|
|
29
36
|
catch (error) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
if ((error === null || error === void 0 ? void 0 : error.code) === "ENOENT") {
|
|
38
|
+
// First-time setup: create a default config on disk.
|
|
39
|
+
this.config = this.defaultConfig();
|
|
40
|
+
this.writeConfig();
|
|
41
|
+
return this.config;
|
|
34
42
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
this.config = JSON.parse(fileContents.toString());
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
// Non-atomic writes from older binaries, or a manually corrupted file,
|
|
50
|
+
// can leave `.cred` unparseable. Fail loud rather than silently
|
|
51
|
+
// overwriting — a silent reset erases the access token for every
|
|
52
|
+
// subsequent caller on the same machine.
|
|
53
|
+
throw new InvalidConfigError(`Failed to parse ${this.configPath}: ${error}. The file may be corrupt; re-run \`cred login\` to reset.`);
|
|
54
|
+
}
|
|
55
|
+
if (!this.config.activeEnvironment || !this.config.configPerEnvironment) {
|
|
56
|
+
throw new InvalidConfigError(`Invalid config structure in ${this.configPath}; re-run \`cred login\` to reset.`);
|
|
40
57
|
}
|
|
41
58
|
for (const env of constants_1.ALL_ENVIRONMENTS) {
|
|
42
59
|
if (!this.config.configPerEnvironment[env]) {
|
|
@@ -45,20 +62,86 @@ class ClientConfiguration {
|
|
|
45
62
|
}
|
|
46
63
|
return this.config;
|
|
47
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Ensure `.cred` is usable, recovering from a corrupt file if needed.
|
|
67
|
+
*
|
|
68
|
+
* `loadConfig` deliberately fails loud on a corrupt/invalid file so a read
|
|
69
|
+
* path never silently erases tokens. But `cred login` exists precisely to
|
|
70
|
+
* (re)establish config, so it must be able to get past a bad file — that is
|
|
71
|
+
* what the "re-run `cred login` to reset" message promises. We make the
|
|
72
|
+
* message true here: the bad file is renamed aside (never deleted, so a
|
|
73
|
+
* support engineer can still inspect it) and a fresh default is written.
|
|
74
|
+
*
|
|
75
|
+
* Only an {@link InvalidConfigError} triggers recovery. fs errors such as
|
|
76
|
+
* EACCES are real environment problems and are rethrown — resetting would
|
|
77
|
+
* just fail to write anyway, and we must not mask a permissions issue as a
|
|
78
|
+
* successful reset.
|
|
79
|
+
*
|
|
80
|
+
* @returns the path the corrupt file was backed up to, or null if the
|
|
81
|
+
* existing config was already valid.
|
|
82
|
+
*/
|
|
83
|
+
recoverIfCorrupt() {
|
|
84
|
+
try {
|
|
85
|
+
this.loadConfig();
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (!(error instanceof InvalidConfigError)) {
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
const backupPath = `${this.configPath}.corrupt-${crypto_1.default
|
|
93
|
+
.randomBytes(8)
|
|
94
|
+
.toString("hex")}`;
|
|
95
|
+
fs_1.default.renameSync(this.configPath, backupPath);
|
|
96
|
+
logger_1.logger.warn(`Existing config at ${this.configPath} was invalid and could not be read. ` +
|
|
97
|
+
`Backed it up to ${backupPath} and reset to defaults.`);
|
|
98
|
+
this.config = this.defaultConfig();
|
|
99
|
+
this.writeConfig();
|
|
100
|
+
return backupPath;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
defaultConfig() {
|
|
104
|
+
const configPerEnvironment = {};
|
|
105
|
+
for (const env of constants_1.ALL_ENVIRONMENTS) {
|
|
106
|
+
configPerEnvironment[env] = {};
|
|
107
|
+
}
|
|
108
|
+
return { configPerEnvironment, activeEnvironment: "production" };
|
|
109
|
+
}
|
|
110
|
+
// Atomic: write to a sibling temp file, then rename into place.
|
|
111
|
+
// Readers either see the old file or the new file, never a truncated
|
|
112
|
+
// zero-byte snapshot (the window that `writeFileSync` exposes between
|
|
113
|
+
// open(O_TRUNC) and write).
|
|
114
|
+
//
|
|
115
|
+
// The temp suffix uses 16 bytes of crypto-random hex so the temp
|
|
116
|
+
// path is unguessable — a predictable name (pid + Date.now()) lets a
|
|
117
|
+
// co-located attacker pre-create a symlink at that path and trick
|
|
118
|
+
// us into clobbering an arbitrary file (CodeQL js/insecure-temporary-file).
|
|
119
|
+
// O_EXCL on open further refuses to follow a pre-existing entry.
|
|
120
|
+
writeConfig() {
|
|
121
|
+
const tmp = `${this.configPath}.${crypto_1.default.randomBytes(16).toString("hex")}.tmp`;
|
|
122
|
+
const fd = fs_1.default.openSync(tmp, fs_1.default.constants.O_WRONLY | fs_1.default.constants.O_CREAT | fs_1.default.constants.O_EXCL, 0o600);
|
|
123
|
+
try {
|
|
124
|
+
fs_1.default.writeFileSync(fd, JSON.stringify(this.config));
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
fs_1.default.closeSync(fd);
|
|
128
|
+
}
|
|
129
|
+
fs_1.default.renameSync(tmp, this.configPath);
|
|
130
|
+
}
|
|
48
131
|
setOrganization(organizationName) {
|
|
49
132
|
this.loadConfig();
|
|
50
133
|
// TODO: Validate organization exists and user has access.
|
|
51
134
|
const environment = this.getEnvironment();
|
|
52
135
|
this.config.configPerEnvironment[environment].organization =
|
|
53
136
|
organizationName;
|
|
54
|
-
|
|
137
|
+
this.writeConfig();
|
|
55
138
|
}
|
|
56
139
|
setProject(projectName) {
|
|
57
140
|
this.loadConfig();
|
|
58
141
|
// TODO: Validate project exists and user has access.
|
|
59
142
|
const environment = this.getEnvironment();
|
|
60
143
|
this.config.configPerEnvironment[environment].project = projectName;
|
|
61
|
-
|
|
144
|
+
this.writeConfig();
|
|
62
145
|
}
|
|
63
146
|
getOrganization() {
|
|
64
147
|
this.loadConfig();
|
|
@@ -76,7 +159,7 @@ class ClientConfiguration {
|
|
|
76
159
|
this.config.configPerEnvironment[environment].isServiceAccountToken =
|
|
77
160
|
!userToken;
|
|
78
161
|
this.config.configPerEnvironment[environment].accessToken = accessToken;
|
|
79
|
-
|
|
162
|
+
this.writeConfig();
|
|
80
163
|
}
|
|
81
164
|
getAuthenticationHeader() {
|
|
82
165
|
const environment = this.getEnvironment();
|
|
@@ -95,7 +178,7 @@ class ClientConfiguration {
|
|
|
95
178
|
const environment = this.getEnvironment();
|
|
96
179
|
this.config.configPerEnvironment[environment].jwtAccessToken =
|
|
97
180
|
jwtAccessToken;
|
|
98
|
-
|
|
181
|
+
this.writeConfig();
|
|
99
182
|
}
|
|
100
183
|
getJwtAccessToken() {
|
|
101
184
|
this.loadConfig();
|
|
@@ -112,7 +195,7 @@ class ClientConfiguration {
|
|
|
112
195
|
username,
|
|
113
196
|
email,
|
|
114
197
|
};
|
|
115
|
-
|
|
198
|
+
this.writeConfig();
|
|
116
199
|
}
|
|
117
200
|
getVSCodeUser() {
|
|
118
201
|
this.loadConfig();
|
|
@@ -123,7 +206,7 @@ class ClientConfiguration {
|
|
|
123
206
|
this.loadConfig();
|
|
124
207
|
const environment = this.getEnvironment();
|
|
125
208
|
this.config.configPerEnvironment[environment].refreshToken = refreshToken;
|
|
126
|
-
|
|
209
|
+
this.writeConfig();
|
|
127
210
|
}
|
|
128
211
|
getRefreshToken() {
|
|
129
212
|
this.loadConfig();
|
|
@@ -144,12 +227,12 @@ class ClientConfiguration {
|
|
|
144
227
|
this.loadConfig();
|
|
145
228
|
const environment = this.getEnvironment();
|
|
146
229
|
this.config.configPerEnvironment[environment] = {};
|
|
147
|
-
|
|
230
|
+
this.writeConfig();
|
|
148
231
|
}
|
|
149
232
|
setEnvironment(environment) {
|
|
150
233
|
this.loadConfig();
|
|
151
234
|
this.config.activeEnvironment = environment;
|
|
152
|
-
|
|
235
|
+
this.writeConfig();
|
|
153
236
|
}
|
|
154
237
|
getEnvironment() {
|
|
155
238
|
this.loadConfig();
|
|
@@ -188,12 +271,17 @@ class ClientConfiguration {
|
|
|
188
271
|
printStatus() {
|
|
189
272
|
this.loadConfig();
|
|
190
273
|
const tokenStatus = this.isTokenValid();
|
|
274
|
+
const cell = this.getEnvironment();
|
|
275
|
+
// The cell prints on both branches, and before anything else: an org and an
|
|
276
|
+
// environment name alone do not identify a cell (two cells can both hold a
|
|
277
|
+
// `demo`), and a stale token is most often a token for the wrong one.
|
|
278
|
+
console.log(kleur_1.default.green(constants_1.ASCII_TITLE));
|
|
279
|
+
logger_1.logger.info(`Cell: ${kleur_1.default.green(cell)} (${constants_1.controlPlanesByEnv[cell]})`);
|
|
191
280
|
if (tokenStatus.valid) {
|
|
192
281
|
const organization = this.getOrganization();
|
|
193
282
|
const project = this.getProject();
|
|
194
|
-
console.log(kleur_1.default.green(constants_1.ASCII_TITLE));
|
|
195
283
|
logger_1.logger.info(`Organization: ${kleur_1.default.green(organization || "Not set")}`);
|
|
196
|
-
logger_1.logger.info(`
|
|
284
|
+
logger_1.logger.info(`Environment: ${kleur_1.default.green(project || "Not set")}`);
|
|
197
285
|
}
|
|
198
286
|
else {
|
|
199
287
|
logger_1.logger.error("Failed to get status");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientconfiguration.js","sourceRoot":"","sources":["../src/clientconfiguration.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,2CAAuC;AACvC,kDAA0B;AAC1B,4CAAoB;AACpB,
|
|
1
|
+
{"version":3,"file":"clientconfiguration.js","sourceRoot":"","sources":["../src/clientconfiguration.ts"],"names":[],"mappings":"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"}
|