@forge/cli-shared 9.10.0-next.1-experimental-1e95696 → 9.10.0-next.11
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/CHANGELOG.md +62 -8
- package/out/apps/get-app-owner.d.ts.map +1 -1
- package/out/auth/personal/credential-store.d.ts +23 -17
- package/out/auth/personal/credential-store.d.ts.map +1 -1
- package/out/auth/personal/credential-store.js +120 -196
- package/out/auth/personal/token-authenticator.js +1 -1
- package/out/graphql/gql/gql.d.ts +2 -0
- package/out/graphql/gql/gql.d.ts.map +1 -1
- package/out/graphql/gql/gql.js +2 -0
- package/out/graphql/gql/graphql.d.ts +377 -32
- package/out/graphql/gql/graphql.d.ts.map +1 -1
- package/out/graphql/gql/graphql.js +46 -2
- package/out/graphql/graphql-runtime-enums.d.ts +22 -0
- package/out/graphql/graphql-runtime-enums.d.ts.map +1 -1
- package/out/graphql/graphql-runtime-enums.js +20 -1
- package/out/shared/error-handling.d.ts +6 -0
- package/out/shared/error-handling.d.ts.map +1 -1
- package/out/shared/error-handling.js +12 -1
- package/out/ui/command-line-ui.d.ts +3 -1
- package/out/ui/command-line-ui.d.ts.map +1 -1
- package/out/ui/command-line-ui.js +11 -1
- package/out/ui/text.d.ts +73 -4
- package/out/ui/text.d.ts.map +1 -1
- package/out/ui/text.js +113 -8
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,21 +1,75 @@
|
|
|
1
1
|
# @forge/cli-shared
|
|
2
2
|
|
|
3
|
-
## 9.10.0-next.
|
|
3
|
+
## 9.10.0-next.11
|
|
4
4
|
|
|
5
|
-
###
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- c47e5e2: `forge create` non-interactive mode performs input validation with improved error messaging.
|
|
8
|
+
|
|
9
|
+
## 9.10.0-next.10
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- fdd24a6: Hidden preset command to forge create
|
|
6
14
|
|
|
7
|
-
|
|
15
|
+
## 9.10.0-next.9
|
|
8
16
|
|
|
9
17
|
### Minor Changes
|
|
10
18
|
|
|
11
|
-
-
|
|
19
|
+
- 400465b: Add `--non-interactive` to every command and a `non-interactive` setting (`auto`, `on`, `off`; `FORGE_NON_INTERACTIVE` overrides it). `auto`, the default, turns the mode on when an agent runs the command (no terminal on stdin or stdout). CI (`CI=true`) is left out: pipelines keep today's behaviour unless they pass `--non-interactive` or set `on`. The flag, `on` and `auto` with an agent all give the same mode: commands skip their confirms (including destructive ones such as `forge environments delete`), required options are checked as `--non-interactive` always did (for example `forge install` needs `--site`, `--product` and `--environment`), and a missing one, a missing default environment, or any remaining prompt fails at once with a `MISSING_INPUT` error instead of waiting. A missing analytics choice fails, as `--non-interactive` always has (set it with `forge settings set usage-analytics <value>`). Set `forge settings set non-interactive off` (or `FORGE_NON_INTERACTIVE=off`) to keep prompts for an agent.
|
|
20
|
+
|
|
21
|
+
## 9.10.0-next.8
|
|
22
|
+
|
|
23
|
+
### Minor Changes
|
|
24
|
+
|
|
25
|
+
- aabae59: Preparation for the new `forge deploy status` command, which shows the placement deployment status of an app version in an environment
|
|
12
26
|
|
|
13
27
|
### Patch Changes
|
|
14
28
|
|
|
15
|
-
- Updated dependencies [
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
29
|
+
- Updated dependencies [aabae59]
|
|
30
|
+
- @forge/util@4.0.0-next.2
|
|
31
|
+
|
|
32
|
+
## 9.10.0-next.7
|
|
33
|
+
|
|
34
|
+
### Patch Changes
|
|
35
|
+
|
|
36
|
+
- Updated dependencies [1c49944]
|
|
37
|
+
- @forge/manifest@13.9.0-next.5
|
|
38
|
+
|
|
39
|
+
## 9.10.0-next.6
|
|
40
|
+
|
|
41
|
+
### Patch Changes
|
|
42
|
+
|
|
43
|
+
- Updated dependencies [da02a8b]
|
|
44
|
+
- @forge/manifest@13.9.0-next.4
|
|
45
|
+
|
|
46
|
+
## 9.10.0-next.5
|
|
47
|
+
|
|
48
|
+
### Patch Changes
|
|
49
|
+
|
|
50
|
+
- Updated dependencies [6193c2d]
|
|
51
|
+
- @forge/manifest@13.9.0-next.3
|
|
52
|
+
|
|
53
|
+
## 9.10.0-next.4
|
|
54
|
+
|
|
55
|
+
### Patch Changes
|
|
56
|
+
|
|
57
|
+
- Updated dependencies [3b8f390]
|
|
58
|
+
- @forge/util@4.0.0-next.1
|
|
59
|
+
|
|
60
|
+
## 9.10.0-next.3
|
|
61
|
+
|
|
62
|
+
### Patch Changes
|
|
63
|
+
|
|
64
|
+
- Updated dependencies [9fba45e]
|
|
65
|
+
- @forge/manifest@13.9.0-next.2
|
|
66
|
+
|
|
67
|
+
## 9.10.0-next.2
|
|
68
|
+
|
|
69
|
+
### Patch Changes
|
|
70
|
+
|
|
71
|
+
- Updated dependencies [7a4f919]
|
|
72
|
+
- @forge/manifest@13.8.1-next.1
|
|
19
73
|
|
|
20
74
|
## 9.10.0-next.1
|
|
21
75
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-app-owner.d.ts","sourceRoot":"","sources":["../../src/apps/get-app-owner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4B,MAAM,YAAY,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,qBAAa,oBAAqB,SAAQ,KAAK;;CAI9C;AAED,eAAO,MAAM,aAAa;
|
|
1
|
+
{"version":3,"file":"get-app-owner.d.ts","sourceRoot":"","sources":["../../src/apps/get-app-owner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA4B,MAAM,YAAY,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,qBAAa,oBAAqB,SAAQ,KAAK;;CAI9C;AAED,eAAO,MAAM,aAAa;QAuC0+o9G,8CAAc;GA9Bhhp9G,CAAC;AAEH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,iBAAiB;IAGrC,OAAO;;;;;;;;;;;;;YAMN,WAAW;CAe1B"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import * as t from 'io-ts';
|
|
2
|
+
import { CachedConf } from '../../cache';
|
|
2
3
|
import { UserError } from '../../shared';
|
|
4
|
+
import { Logger } from '../../ui';
|
|
3
5
|
import { UserRepository } from './user-repository';
|
|
4
6
|
export declare const EMAIL_KEY = "FORGE_EMAIL";
|
|
5
7
|
export declare const API_TOKEN_KEY = "FORGE_API_TOKEN";
|
|
8
|
+
export interface Keytar {
|
|
9
|
+
getPassword(service: string, account: string): Promise<string | null>;
|
|
10
|
+
setPassword(service: string, account: string, password: string): Promise<void>;
|
|
11
|
+
deletePassword(service: string, account: string): Promise<void>;
|
|
12
|
+
}
|
|
6
13
|
export declare const personalApiCredentialsShape: t.TypeC<{
|
|
7
14
|
email: t.StringC;
|
|
8
15
|
token: t.StringC;
|
|
@@ -17,9 +24,11 @@ export type PersonalApiCredentialsValidated = t.TypeOf<typeof personalApiCredent
|
|
|
17
24
|
export declare class NoTokenInStoreError extends UserError {
|
|
18
25
|
constructor();
|
|
19
26
|
}
|
|
20
|
-
export declare class
|
|
27
|
+
export declare class NoKeytarError extends UserError {
|
|
21
28
|
constructor();
|
|
22
29
|
}
|
|
30
|
+
export declare class KeytarAccessError extends UserError {
|
|
31
|
+
}
|
|
23
32
|
export interface CredentialGetter {
|
|
24
33
|
getCredentials(): Promise<PersonalApiCredentialsValidated>;
|
|
25
34
|
}
|
|
@@ -27,25 +36,22 @@ export interface CredentialStore extends CredentialGetter {
|
|
|
27
36
|
setCredentials(credentials: PersonalApiCredentialsValidated): Promise<void>;
|
|
28
37
|
deleteCredentials(): Promise<void>;
|
|
29
38
|
}
|
|
30
|
-
export
|
|
31
|
-
|
|
32
|
-
|
|
39
|
+
export declare class CredentialStoreImpl implements CredentialStore {
|
|
40
|
+
private readonly logger;
|
|
41
|
+
private readonly instructionsURL;
|
|
42
|
+
private readonly keytar;
|
|
43
|
+
private readonly cachedConfig;
|
|
33
44
|
private readonly userRepository;
|
|
34
|
-
private
|
|
35
|
-
|
|
36
|
-
private
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
private applyWindowsAcl;
|
|
42
|
-
private secureWindowsStorage;
|
|
43
|
-
private securePosixStorage;
|
|
44
|
-
private secureStorage;
|
|
45
|
-
private readCredentialsFile;
|
|
45
|
+
private keytarAccount;
|
|
46
|
+
constructor(logger: Logger, instructionsURL: string, keytar: Keytar | null, cachedConfig: CachedConf, userRepository: UserRepository);
|
|
47
|
+
private wrapKeytarError;
|
|
48
|
+
decodeCredentials(credentialsString: string | null): PersonalApiCredentialsValidated;
|
|
49
|
+
getCredentialsKeytar(keytar: Keytar): Promise<PersonalApiCredentialsValidated | undefined>;
|
|
50
|
+
popInsecurePlaintextCredentials(): PersonalApiCredentialsValidated | undefined;
|
|
51
|
+
deleteInsecurePlaintextCredentials(): void;
|
|
46
52
|
getCredentials(): Promise<PersonalApiCredentialsValidated>;
|
|
47
53
|
setCredentials(credentials: PersonalApiCredentialsValidated): Promise<void>;
|
|
48
54
|
deleteCredentials(): Promise<void>;
|
|
49
55
|
}
|
|
50
|
-
export declare function getCredentialStore(userRepository: UserRepository): CredentialStore;
|
|
56
|
+
export declare function getCredentialStore(logger: Logger, userRepository: UserRepository): CredentialStore;
|
|
51
57
|
//# sourceMappingURL=credential-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-store.d.ts","sourceRoot":"","sources":["../../../src/auth/personal/credential-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credential-store.d.ts","sourceRoot":"","sources":["../../../src/auth/personal/credential-store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAC3B,OAAO,EAAuB,UAAU,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAa,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,MAAM,EAAQ,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,eAAO,MAAM,SAAS,gBAAgB,CAAC;AACvC,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAa/C,MAAM,WAAW,MAAM;IACrB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEtE,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/E,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAUD,eAAO,MAAM,2BAA2B;;;EAGtC,CAAC;AAEH,eAAO,MAAM,oCAAoC;;;;EAI/C,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAClF,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oCAAoC,CAAC,CAAC;AAEpG,qBAAa,mBAAoB,SAAQ,SAAS;;CAIjD;AAED,qBAAa,aAAc,SAAQ,SAAS;;CAI3C;AAED,qBAAa,iBAAkB,SAAQ,SAAS;CAAG;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,cAAc,IAAI,OAAO,CAAC,+BAA+B,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,cAAc,CAAC,WAAW,EAAE,+BAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5E,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAED,qBAAa,mBAAoB,YAAW,eAAe;IAIvD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAPjC,OAAO,CAAC,aAAa,CAAS;gBAGX,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,YAAY,EAAE,UAAU,EACxB,cAAc,EAAE,cAAc;IAKjD,OAAO,CAAC,eAAe;IAoBvB,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAAG,+BAA+B;IAoB9E,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,+BAA+B,GAAG,SAAS,CAAC;IAehG,+BAA+B,IAAI,+BAA+B,GAAG,SAAS;IAS9E,kCAAkC,IAAI,IAAI;IAIpC,cAAc,IAAI,OAAO,CAAC,+BAA+B,CAAC;IAgC1D,cAAc,CAAC,WAAW,EAAE,+BAA+B,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3E,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;CAWzC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,eAAe,CAKlG"}
|
|
@@ -1,35 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.getCredentialsFilePath = getCredentialsFilePath;
|
|
3
|
+
exports.CredentialStoreImpl = exports.KeytarAccessError = exports.NoKeytarError = exports.NoTokenInStoreError = exports.personalApiCredentialsValidatedShape = exports.personalApiCredentialsShape = exports.API_TOKEN_KEY = exports.EMAIL_KEY = void 0;
|
|
5
4
|
exports.getCredentialStore = getCredentialStore;
|
|
6
5
|
const tslib_1 = require("tslib");
|
|
7
|
-
const child_process_1 = require("child_process");
|
|
8
|
-
const fs_1 = require("fs");
|
|
9
6
|
const os_1 = require("os");
|
|
10
|
-
const path_1 = tslib_1.__importDefault(require("path"));
|
|
11
|
-
const util_1 = require("util");
|
|
12
7
|
const Either_1 = require("fp-ts/lib/Either");
|
|
13
8
|
const t = tslib_1.__importStar(require("io-ts"));
|
|
9
|
+
const cache_1 = require("../../cache");
|
|
10
|
+
const instruction_1 = require("../instruction");
|
|
14
11
|
const graphql_1 = require("../../graphql");
|
|
15
12
|
const shared_1 = require("../../shared");
|
|
16
13
|
const ui_1 = require("../../ui");
|
|
17
14
|
exports.EMAIL_KEY = 'FORGE_EMAIL';
|
|
18
15
|
exports.API_TOKEN_KEY = 'FORGE_API_TOKEN';
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
16
|
+
const KEYTAR_SERVICE = 'Atlassian';
|
|
17
|
+
const CACHE_CREDENTIALS_KEY = 'forge-credentials';
|
|
18
|
+
var KeytarAccount;
|
|
19
|
+
(function (KeytarAccount) {
|
|
20
|
+
KeytarAccount["DEV"] = "Ecosystem-staging";
|
|
21
|
+
KeytarAccount["STG"] = "Ecosystem-staging";
|
|
22
|
+
KeytarAccount["PROD"] = "Ecosystem";
|
|
23
|
+
KeytarAccount["FEDRAMP_MODERATE_STAGING"] = "Ecosystem-fedm-staging";
|
|
24
|
+
KeytarAccount["FEDRAMP_MODERATE_PROD"] = "Ecosystem-fedm-prod";
|
|
25
|
+
})(KeytarAccount || (KeytarAccount = {}));
|
|
26
|
+
function getKeytar() {
|
|
27
|
+
try {
|
|
28
|
+
return require('keytar');
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
33
34
|
exports.personalApiCredentialsShape = t.type({
|
|
34
35
|
email: t.string,
|
|
35
36
|
token: t.string
|
|
@@ -45,223 +46,146 @@ class NoTokenInStoreError extends shared_1.UserError {
|
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
exports.NoTokenInStoreError = NoTokenInStoreError;
|
|
48
|
-
class
|
|
49
|
+
class NoKeytarError extends shared_1.UserError {
|
|
49
50
|
constructor() {
|
|
50
|
-
super(ui_1.Text.error.
|
|
51
|
+
super(ui_1.Text.error.noKeytar);
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
|
-
exports.
|
|
54
|
-
|
|
55
|
-
const runCredentialStoreCommand = async (command, args) => {
|
|
56
|
-
const { stdout } = await execFileAsync(command, [...args], { encoding: 'utf8', windowsHide: true });
|
|
57
|
-
return stdout;
|
|
58
|
-
};
|
|
59
|
-
const credentialsByAccountShape = t.record(t.string, exports.personalApiCredentialsValidatedShape);
|
|
60
|
-
function isFileNotFoundError(error) {
|
|
61
|
-
return typeof error === 'object' && error !== null && 'code' in error && error.code === 'ENOENT';
|
|
54
|
+
exports.NoKeytarError = NoKeytarError;
|
|
55
|
+
class KeytarAccessError extends shared_1.UserError {
|
|
62
56
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
break;
|
|
70
|
-
case 'win32':
|
|
71
|
-
credentialsDirectory = platformPath.join(environment.LOCALAPPDATA || platformPath.join(userHome, 'AppData', 'Local'), 'Atlassian', 'Forge');
|
|
72
|
-
break;
|
|
73
|
-
default:
|
|
74
|
-
credentialsDirectory = platformPath.join(environment.XDG_DATA_HOME || platformPath.join(userHome, '.local', 'share'), 'Atlassian', 'Forge');
|
|
75
|
-
}
|
|
76
|
-
return platformPath.join(credentialsDirectory, CREDENTIALS_FILE_NAME);
|
|
77
|
-
}
|
|
78
|
-
class FileCredentialStore {
|
|
57
|
+
exports.KeytarAccessError = KeytarAccessError;
|
|
58
|
+
class CredentialStoreImpl {
|
|
59
|
+
logger;
|
|
60
|
+
instructionsURL;
|
|
61
|
+
keytar;
|
|
62
|
+
cachedConfig;
|
|
79
63
|
userRepository;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
64
|
+
keytarAccount;
|
|
65
|
+
constructor(logger, instructionsURL, keytar, cachedConfig, userRepository) {
|
|
66
|
+
this.logger = logger;
|
|
67
|
+
this.instructionsURL = instructionsURL;
|
|
68
|
+
this.keytar = keytar;
|
|
69
|
+
this.cachedConfig = cachedConfig;
|
|
86
70
|
this.userRepository = userRepository;
|
|
87
|
-
this.
|
|
88
|
-
this.credentialsFilePath = credentialsFilePath;
|
|
89
|
-
this.currentPlatform = currentPlatform;
|
|
90
|
-
this.commandRunner = commandRunner;
|
|
91
|
-
}
|
|
92
|
-
async getWindowsUserSid() {
|
|
93
|
-
this.windowsUserSid ??= this.commandRunner('whoami.exe', ['/user', '/fo', 'csv', '/nh']).then((output) => {
|
|
94
|
-
const sid = output.trim().match(/"?(S-\d(?:-\d+)+)"?$/)?.[1];
|
|
95
|
-
if (!sid) {
|
|
96
|
-
throw new Error('Could not determine the current Windows user SID');
|
|
97
|
-
}
|
|
98
|
-
return sid;
|
|
99
|
-
});
|
|
100
|
-
return this.windowsUserSid;
|
|
71
|
+
this.keytarAccount = (0, graphql_1.getEnvironmentConfig)(KeytarAccount);
|
|
101
72
|
}
|
|
102
|
-
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
'
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
73
|
+
wrapKeytarError(e) {
|
|
74
|
+
const message = (0, shared_1.wrapError)(e).message;
|
|
75
|
+
let error;
|
|
76
|
+
const currentPlatform = (0, os_1.platform)();
|
|
77
|
+
switch (currentPlatform) {
|
|
78
|
+
case 'darwin':
|
|
79
|
+
error = ui_1.Text.error.keytarAccessError.mac(message);
|
|
80
|
+
break;
|
|
81
|
+
case 'linux':
|
|
82
|
+
error = ui_1.Text.error.keytarAccessError.linux(message);
|
|
83
|
+
break;
|
|
84
|
+
case 'win32':
|
|
85
|
+
error = ui_1.Text.error.keytarAccessError.windows(message);
|
|
86
|
+
break;
|
|
87
|
+
default:
|
|
88
|
+
error = ui_1.Text.error.keytarAccessError.other(message);
|
|
89
|
+
}
|
|
90
|
+
throw new KeytarAccessError(error);
|
|
113
91
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
await fs_1.promises.access(this.credentialsFilePath);
|
|
92
|
+
decodeCredentials(credentialsString) {
|
|
93
|
+
if (!credentialsString) {
|
|
94
|
+
throw new NoTokenInStoreError();
|
|
118
95
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
fileExists = false;
|
|
96
|
+
let credentials;
|
|
97
|
+
try {
|
|
98
|
+
credentials = JSON.parse(credentialsString);
|
|
124
99
|
}
|
|
125
|
-
|
|
126
|
-
|
|
100
|
+
catch {
|
|
101
|
+
throw new NoTokenInStoreError();
|
|
127
102
|
}
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (!fileExists) {
|
|
132
|
-
await fs_1.promises.writeFile(this.credentialsFilePath, '', { flag: 'wx' });
|
|
103
|
+
const decodeResult = exports.personalApiCredentialsValidatedShape.decode(credentials);
|
|
104
|
+
if ((0, Either_1.isLeft)(decodeResult)) {
|
|
105
|
+
throw new NoTokenInStoreError();
|
|
133
106
|
}
|
|
134
|
-
|
|
107
|
+
return decodeResult.right;
|
|
135
108
|
}
|
|
136
|
-
async
|
|
137
|
-
let
|
|
109
|
+
async getCredentialsKeytar(keytar) {
|
|
110
|
+
let stringifiedPersonalApiCredentials;
|
|
138
111
|
try {
|
|
139
|
-
await
|
|
140
|
-
}
|
|
141
|
-
catch (error) {
|
|
142
|
-
if (!isFileNotFoundError(error)) {
|
|
143
|
-
throw error;
|
|
144
|
-
}
|
|
145
|
-
fileExists = false;
|
|
112
|
+
stringifiedPersonalApiCredentials = await keytar.getPassword(KEYTAR_SERVICE, this.keytarAccount);
|
|
146
113
|
}
|
|
147
|
-
|
|
148
|
-
|
|
114
|
+
catch (e) {
|
|
115
|
+
this.wrapKeytarError(e);
|
|
149
116
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
recursive: true,
|
|
153
|
-
mode: CREDENTIALS_DIRECTORY_MODE
|
|
154
|
-
});
|
|
155
|
-
await fs_1.promises.chmod(credentialsDirectory, CREDENTIALS_DIRECTORY_MODE);
|
|
156
|
-
const directoryStat = await fs_1.promises.stat(credentialsDirectory);
|
|
157
|
-
const currentUserId = process.getuid?.();
|
|
158
|
-
if (currentUserId === undefined ||
|
|
159
|
-
!directoryStat.isDirectory() ||
|
|
160
|
-
directoryStat.uid !== currentUserId ||
|
|
161
|
-
(directoryStat.mode & PERMISSION_BITS_MASK) !== CREDENTIALS_DIRECTORY_MODE) {
|
|
162
|
-
throw new Error('The credentials directory is not owned exclusively by the current user');
|
|
117
|
+
if (!stringifiedPersonalApiCredentials) {
|
|
118
|
+
return undefined;
|
|
163
119
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
fileStat.uid !== currentUserId ||
|
|
172
|
-
(fileStat.mode & PERMISSION_BITS_MASK) !== CREDENTIALS_FILE_MODE) {
|
|
173
|
-
throw new Error('Could not restrict access to the credentials file');
|
|
120
|
+
return this.decodeCredentials(stringifiedPersonalApiCredentials);
|
|
121
|
+
}
|
|
122
|
+
popInsecurePlaintextCredentials() {
|
|
123
|
+
const result = this.cachedConfig.get(CACHE_CREDENTIALS_KEY);
|
|
124
|
+
if (result) {
|
|
125
|
+
this.logger.warn(ui_1.Text.warning.plaintextCredentialsFound(this.instructionsURL));
|
|
126
|
+
this.deleteInsecurePlaintextCredentials();
|
|
174
127
|
}
|
|
128
|
+
return result;
|
|
175
129
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
130
|
+
deleteInsecurePlaintextCredentials() {
|
|
131
|
+
this.cachedConfig.delete(CACHE_CREDENTIALS_KEY);
|
|
132
|
+
}
|
|
133
|
+
async getCredentials() {
|
|
134
|
+
let result;
|
|
135
|
+
const plaintextCredentials = this.popInsecurePlaintextCredentials();
|
|
136
|
+
if (plaintextCredentials) {
|
|
137
|
+
if (this.keytar) {
|
|
138
|
+
await this.setCredentials(plaintextCredentials);
|
|
139
|
+
this.logger.warn(ui_1.Text.warning.plaintextCredentialsMigrated);
|
|
180
140
|
}
|
|
181
141
|
else {
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
catch {
|
|
186
|
-
await fs_1.promises.rm(this.credentialsFilePath, { force: true }).catch(() => undefined);
|
|
187
|
-
throw new CredentialStoreSecurityError();
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
async readCredentialsFile() {
|
|
191
|
-
let contents;
|
|
192
|
-
try {
|
|
193
|
-
await this.secureStorage(false);
|
|
194
|
-
contents = await fs_1.promises.readFile(this.credentialsFilePath, 'utf8');
|
|
195
|
-
}
|
|
196
|
-
catch (error) {
|
|
197
|
-
if (isFileNotFoundError(error)) {
|
|
198
|
-
return {};
|
|
142
|
+
this.logger.warn(ui_1.Text.warning.plaintextCredentialsNotMigrated);
|
|
199
143
|
}
|
|
200
|
-
throw error;
|
|
201
|
-
}
|
|
202
|
-
let parsed;
|
|
203
|
-
try {
|
|
204
|
-
parsed = JSON.parse(contents);
|
|
205
|
-
}
|
|
206
|
-
catch {
|
|
207
|
-
throw new NoTokenInStoreError();
|
|
208
|
-
}
|
|
209
|
-
const decodeResult = credentialsByAccountShape.decode(parsed);
|
|
210
|
-
if ((0, Either_1.isLeft)(decodeResult)) {
|
|
211
|
-
throw new NoTokenInStoreError();
|
|
212
144
|
}
|
|
213
|
-
return decodeResult.right;
|
|
214
|
-
}
|
|
215
|
-
async getCredentials() {
|
|
216
145
|
if (process.env[exports.API_TOKEN_KEY] && process.env[exports.EMAIL_KEY]) {
|
|
217
146
|
const credentials = {
|
|
218
147
|
email: process.env[exports.EMAIL_KEY],
|
|
219
148
|
token: process.env[exports.API_TOKEN_KEY]
|
|
220
149
|
};
|
|
221
150
|
const { accountId } = await this.userRepository.getUser(credentials);
|
|
222
|
-
|
|
151
|
+
result = { ...credentials, accountId };
|
|
223
152
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
throw new NoTokenInStoreError();
|
|
153
|
+
else if (this.keytar) {
|
|
154
|
+
result = await this.getCredentialsKeytar(this.keytar);
|
|
227
155
|
}
|
|
228
|
-
|
|
156
|
+
if (result) {
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
throw new NoTokenInStoreError();
|
|
229
160
|
}
|
|
230
161
|
async setCredentials(credentials) {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
throw error;
|
|
162
|
+
if (this.keytar) {
|
|
163
|
+
try {
|
|
164
|
+
await this.keytar.setPassword(KEYTAR_SERVICE, this.keytarAccount, JSON.stringify(credentials));
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
throw new NoKeytarError();
|
|
238
168
|
}
|
|
239
|
-
credentialsByAccount = {};
|
|
240
169
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
await this.secureStorage(false);
|
|
170
|
+
else {
|
|
171
|
+
throw new NoKeytarError();
|
|
172
|
+
}
|
|
245
173
|
}
|
|
246
174
|
async deleteCredentials() {
|
|
247
|
-
|
|
248
|
-
delete credentialsByAccount[this.account];
|
|
249
|
-
if (Object.keys(credentialsByAccount).length === 0) {
|
|
175
|
+
if (this.keytar) {
|
|
250
176
|
try {
|
|
251
|
-
await
|
|
177
|
+
await this.keytar.deletePassword(KEYTAR_SERVICE, this.keytarAccount);
|
|
252
178
|
}
|
|
253
|
-
catch (
|
|
254
|
-
if (!isFileNotFoundError(error)) {
|
|
255
|
-
throw error;
|
|
256
|
-
}
|
|
179
|
+
catch (e) {
|
|
257
180
|
}
|
|
258
|
-
return;
|
|
259
181
|
}
|
|
260
|
-
|
|
261
|
-
await this.secureStorage(false);
|
|
182
|
+
this.deleteInsecurePlaintextCredentials();
|
|
262
183
|
}
|
|
263
184
|
}
|
|
264
|
-
exports.
|
|
265
|
-
function getCredentialStore(userRepository) {
|
|
266
|
-
|
|
185
|
+
exports.CredentialStoreImpl = CredentialStoreImpl;
|
|
186
|
+
function getCredentialStore(logger, userRepository) {
|
|
187
|
+
const keytar = getKeytar();
|
|
188
|
+
const cachedConfig = cache_1.CachedConf.getCache(cache_1.CONFIG_PROJECT_NAME);
|
|
189
|
+
const instructionsUrl = (0, instruction_1.getInstructionsUrl)();
|
|
190
|
+
return new CredentialStoreImpl(logger, instructionsUrl, keytar, cachedConfig, userRepository);
|
|
267
191
|
}
|
|
@@ -19,7 +19,7 @@ class PersonalTokenAuthenticator {
|
|
|
19
19
|
if (process.env[credential_store_1.API_TOKEN_KEY] && process.env[credential_store_1.EMAIL_KEY]) {
|
|
20
20
|
return ui_1.Text.error.invalidTokenInEnv(instructionsUrl, credential_store_1.EMAIL_KEY, credential_store_1.API_TOKEN_KEY);
|
|
21
21
|
}
|
|
22
|
-
return ui_1.Text.error.
|
|
22
|
+
return ui_1.Text.error.invalidTokenInKeytar;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
exports.PersonalTokenAuthenticator = PersonalTokenAuthenticator;
|
package/out/graphql/gql/gql.d.ts
CHANGED
|
@@ -22,6 +22,8 @@ export declare function graphql(source: "\n mutation forge_cli_getDeploymen
|
|
|
22
22
|
export declare function graphql(source: "\n mutation forge_cli_processCombinedAppBuild($input: ProcessCombinedAppBuildInput!) {\n processCombinedAppBuild(input: $input) {\n success\n errors {\n message\n extensions {\n errorType\n statusCode\n }\n }\n buildTag\n }\n }\n "): typeof import('./graphql').Forge_Cli_ProcessCombinedAppBuildDocument;
|
|
23
23
|
export declare function graphql(source: "\n mutation forge_cli_getHostedResourcesUploadUrls($input: CreateHostedResourceUploadUrlInput!) {\n createHostedResourceUploadUrl(input: $input) {\n success\n errors {\n message\n extensions {\n errorType\n statusCode\n }\n }\n preSignedUrls {\n uploadUrl\n uploadFormData\n }\n uploadId\n }\n }\n "): typeof import('./graphql').Forge_Cli_GetHostedResourcesUploadUrlsDocument;
|
|
24
24
|
export declare function graphql(source: "\n query getAppDeployments($appId: ID!, $interval: IntervalInput!, $first: Int, $after: String) {\n app(id: $appId) {\n deployments(interval: $interval, first: $first, after: $after)\n @optIn(to: [\"xls-deployments-by-interval\", \"xls-deployments-major-version\"]) {\n nodes {\n status\n environmentKey\n buildTag\n majorVersion {\n version\n }\n createdBy {\n accountId\n accountStatus\n name\n }\n createdAt\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n"): typeof import('./graphql').GetAppDeploymentsDocument;
|
|
25
|
+
export declare function graphql(source: "\n query forge_cli_getAppEnvironmentVersionForDeployStatus($appId: ID!, $environmentKey: String!, $majorVersion: Int) {\n app(id: $appId) {\n environmentByKey(key: $environmentKey) {\n id\n type\n versions(first: 1, majorVersion: $majorVersion) {\n nodes {\n id\n version\n }\n }\n }\n }\n }\n"): typeof import('./graphql').Forge_Cli_GetAppEnvironmentVersionForDeployStatusDocument;
|
|
26
|
+
export declare function graphql(source: "\n query forge_cli_getAppVersionPlacements($input: AppVersionPlacementsInput!) {\n appVersionPlacements(input: $input) {\n deploymentArtifact {\n id\n createdAt\n buildTag\n }\n overallStatus\n placementGroups {\n placementType\n status\n total\n succeeded\n inProgress\n failed\n placements {\n placementId\n status\n lastUpdated\n errors {\n step\n }\n }\n }\n }\n }\n"): typeof import('./graphql').Forge_Cli_GetAppVersionPlacementsDocument;
|
|
25
27
|
export declare function graphql(source: "\n query GetDevSpaceWithLinkingAccess {\n ecosystem {\n devConsole {\n getDeveloperSpaceWithLinkingAccess\n }\n }\n }\n "): typeof import('./graphql').GetDevSpaceWithLinkingAccessDocument;
|
|
26
28
|
export declare function graphql(source: "\n query GetDevSpaceDetails($devSpaceIds: [String!]!) {\n ecosystem {\n devConsole {\n getDeveloperSpaceDetails(developerSpaceIds: $devSpaceIds) {\n results {\n developerSpaceId\n error {\n message\n }\n details {\n name\n }\n }\n }\n }\n }\n }\n "): typeof import('./graphql').GetDevSpaceDetailsDocument;
|
|
27
29
|
export declare function graphql(source: "\n mutation CreateDeveloperSpace($input: DevConsoleCreateDeveloperSpaceInput!) {\n ecosystem {\n devConsole {\n createDeveloperSpace(input: $input) {\n devSpace {\n id\n name\n }\n success\n errors {\n message\n extensions {\n statusCode\n errorType\n }\n }\n }\n }\n }\n }\n "): typeof import('./graphql').CreateDeveloperSpaceDocument;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gql.d.ts","sourceRoot":"","sources":["../../../src/graphql/gql/gql.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gql.d.ts","sourceRoot":"","sources":["../../../src/graphql/gql/gql.ts"],"names":[],"mappings":"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"}
|
package/out/graphql/gql/gql.js
CHANGED
|
@@ -28,6 +28,8 @@ const documents = {
|
|
|
28
28
|
"\n mutation forge_cli_processCombinedAppBuild($input: ProcessCombinedAppBuildInput!) {\n processCombinedAppBuild(input: $input) {\n success\n errors {\n message\n extensions {\n errorType\n statusCode\n }\n }\n buildTag\n }\n }\n ": types.Forge_Cli_ProcessCombinedAppBuildDocument,
|
|
29
29
|
"\n mutation forge_cli_getHostedResourcesUploadUrls($input: CreateHostedResourceUploadUrlInput!) {\n createHostedResourceUploadUrl(input: $input) {\n success\n errors {\n message\n extensions {\n errorType\n statusCode\n }\n }\n preSignedUrls {\n uploadUrl\n uploadFormData\n }\n uploadId\n }\n }\n ": types.Forge_Cli_GetHostedResourcesUploadUrlsDocument,
|
|
30
30
|
"\n query getAppDeployments($appId: ID!, $interval: IntervalInput!, $first: Int, $after: String) {\n app(id: $appId) {\n deployments(interval: $interval, first: $first, after: $after)\n @optIn(to: [\"xls-deployments-by-interval\", \"xls-deployments-major-version\"]) {\n nodes {\n status\n environmentKey\n buildTag\n majorVersion {\n version\n }\n createdBy {\n accountId\n accountStatus\n name\n }\n createdAt\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n": types.GetAppDeploymentsDocument,
|
|
31
|
+
"\n query forge_cli_getAppEnvironmentVersionForDeployStatus($appId: ID!, $environmentKey: String!, $majorVersion: Int) {\n app(id: $appId) {\n environmentByKey(key: $environmentKey) {\n id\n type\n versions(first: 1, majorVersion: $majorVersion) {\n nodes {\n id\n version\n }\n }\n }\n }\n }\n": types.Forge_Cli_GetAppEnvironmentVersionForDeployStatusDocument,
|
|
32
|
+
"\n query forge_cli_getAppVersionPlacements($input: AppVersionPlacementsInput!) {\n appVersionPlacements(input: $input) {\n deploymentArtifact {\n id\n createdAt\n buildTag\n }\n overallStatus\n placementGroups {\n placementType\n status\n total\n succeeded\n inProgress\n failed\n placements {\n placementId\n status\n lastUpdated\n errors {\n step\n }\n }\n }\n }\n }\n": types.Forge_Cli_GetAppVersionPlacementsDocument,
|
|
31
33
|
"\n query GetDevSpaceWithLinkingAccess {\n ecosystem {\n devConsole {\n getDeveloperSpaceWithLinkingAccess\n }\n }\n }\n ": types.GetDevSpaceWithLinkingAccessDocument,
|
|
32
34
|
"\n query GetDevSpaceDetails($devSpaceIds: [String!]!) {\n ecosystem {\n devConsole {\n getDeveloperSpaceDetails(developerSpaceIds: $devSpaceIds) {\n results {\n developerSpaceId\n error {\n message\n }\n details {\n name\n }\n }\n }\n }\n }\n }\n ": types.GetDevSpaceDetailsDocument,
|
|
33
35
|
"\n mutation CreateDeveloperSpace($input: DevConsoleCreateDeveloperSpaceInput!) {\n ecosystem {\n devConsole {\n createDeveloperSpace(input: $input) {\n devSpace {\n id\n name\n }\n success\n errors {\n message\n extensions {\n statusCode\n errorType\n }\n }\n }\n }\n }\n }\n ": types.CreateDeveloperSpaceDocument,
|