@forge/cli 10.0.1-next.10 → 10.1.0-next.6
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 +103 -0
- package/npm-shrinkwrap.json +42 -41
- package/out/command-line/controller/default-environment-controller.d.ts +3 -3
- package/out/command-line/controller/default-environment-controller.d.ts.map +1 -1
- package/out/command-line/controller/default-environment-controller.js +4 -4
- package/out/command-line/controller/tunnel-controller.d.ts +4 -2
- package/out/command-line/controller/tunnel-controller.d.ts.map +1 -1
- package/out/command-line/controller/tunnel-controller.js +8 -3
- package/out/command-line/dependency-injection.d.ts +2 -1
- package/out/command-line/dependency-injection.d.ts.map +1 -1
- package/out/command-line/dependency-injection.js +16 -14
- package/out/command-line/register-authentication-command.d.ts +3 -3
- package/out/command-line/register-authentication-command.d.ts.map +1 -1
- package/out/command-line/register-authentication-command.js +38 -37
- package/out/command-line/view/tunnel-view.d.ts +1 -1
- package/out/command-line/view/tunnel-view.d.ts.map +1 -1
- package/out/command-line/view/tunnel-view.js +2 -1
- package/out/service/tunnel-service.d.ts +7 -4
- package/out/service/tunnel-service.d.ts.map +1 -1
- package/out/service/tunnel-service.js +27 -10
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,108 @@
|
|
|
1
1
|
# @forge/cli
|
|
2
2
|
|
|
3
|
+
## 10.1.0-next.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [4f8329f]
|
|
8
|
+
- @forge/tunnel@5.3.0-next.6
|
|
9
|
+
|
|
10
|
+
## 10.1.0-next.5
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 0c9271c: When the manifest changes whilst running forge tunnel, warn the user that they need to redeploy for changes to take effect.
|
|
15
|
+
- Updated dependencies [0c9271c]
|
|
16
|
+
- @forge/cli-shared@5.1.0-next.4
|
|
17
|
+
- @forge/tunnel@5.3.0-next.5
|
|
18
|
+
- @forge/bundler@4.17.1-next.5
|
|
19
|
+
- @forge/lint@5.2.1-next.5
|
|
20
|
+
|
|
21
|
+
## 10.1.0-next.4
|
|
22
|
+
|
|
23
|
+
### Minor Changes
|
|
24
|
+
|
|
25
|
+
- abc3742: Fix cloudflared run inside docker container
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- Updated dependencies [8944e0c]
|
|
30
|
+
- @forge/manifest@7.4.1-next.1
|
|
31
|
+
- @forge/cli-shared@5.1.0-next.3
|
|
32
|
+
- @forge/lint@5.2.1-next.4
|
|
33
|
+
- @forge/tunnel@5.3.0-next.4
|
|
34
|
+
- @forge/bundler@4.17.1-next.4
|
|
35
|
+
|
|
36
|
+
## 10.1.0-next.3
|
|
37
|
+
|
|
38
|
+
### Patch Changes
|
|
39
|
+
|
|
40
|
+
- 7bf2dda: Get AAID from AGG when credentials are supplied via environment
|
|
41
|
+
- Updated dependencies [7bf2dda]
|
|
42
|
+
- @forge/cli-shared@5.1.0-next.2
|
|
43
|
+
- @forge/bundler@4.17.1-next.3
|
|
44
|
+
- @forge/lint@5.2.1-next.3
|
|
45
|
+
- @forge/tunnel@5.3.0-next.3
|
|
46
|
+
|
|
47
|
+
## 10.1.0-next.2
|
|
48
|
+
|
|
49
|
+
### Patch Changes
|
|
50
|
+
|
|
51
|
+
- Updated dependencies [a3a5255]
|
|
52
|
+
- @forge/lint@5.2.1-next.2
|
|
53
|
+
- @forge/bundler@4.17.1-next.2
|
|
54
|
+
- @forge/tunnel@5.3.0-next.2
|
|
55
|
+
|
|
56
|
+
## 10.1.0-next.1
|
|
57
|
+
|
|
58
|
+
### Minor Changes
|
|
59
|
+
|
|
60
|
+
- 7977ba4: Fix Ngrok config setting requirement for Cloudflare flow
|
|
61
|
+
|
|
62
|
+
### Patch Changes
|
|
63
|
+
|
|
64
|
+
- Updated dependencies [9b6b9b1]
|
|
65
|
+
- Updated dependencies [fbc037b]
|
|
66
|
+
- @forge/tunnel@5.3.0-next.1
|
|
67
|
+
- @forge/cli-shared@5.1.0-next.1
|
|
68
|
+
- @forge/bundler@4.17.1-next.1
|
|
69
|
+
- @forge/lint@5.2.1-next.1
|
|
70
|
+
|
|
71
|
+
## 10.0.2-next.0
|
|
72
|
+
|
|
73
|
+
### Patch Changes
|
|
74
|
+
|
|
75
|
+
- Updated dependencies [19b82e5]
|
|
76
|
+
- @forge/manifest@7.4.1-next.0
|
|
77
|
+
- @forge/cli-shared@5.0.2-next.0
|
|
78
|
+
- @forge/lint@5.2.1-next.0
|
|
79
|
+
- @forge/tunnel@5.2.3-next.0
|
|
80
|
+
- @forge/bundler@4.17.1-next.0
|
|
81
|
+
|
|
82
|
+
## 10.0.1
|
|
83
|
+
|
|
84
|
+
### Patch Changes
|
|
85
|
+
|
|
86
|
+
- 7dae3d7: Fix sandbox tunnel compatibility with Node 14
|
|
87
|
+
- 381042f: tracking command option on Sentry and analytic events
|
|
88
|
+
- f08bd2c: Add Cloudflare tunnel analytics
|
|
89
|
+
- Updated dependencies [7dae3d7]
|
|
90
|
+
- Updated dependencies [8e5e3cc]
|
|
91
|
+
- Updated dependencies [4e2b1a9]
|
|
92
|
+
- Updated dependencies [b3d7850]
|
|
93
|
+
- Updated dependencies [ba1a1c3]
|
|
94
|
+
- Updated dependencies [d2eeda0]
|
|
95
|
+
- Updated dependencies [a8cdbca]
|
|
96
|
+
- Updated dependencies [4913321]
|
|
97
|
+
- Updated dependencies [289edb1]
|
|
98
|
+
- Updated dependencies [07e4505]
|
|
99
|
+
- @forge/cli-shared@5.0.1
|
|
100
|
+
- @forge/manifest@7.4.0
|
|
101
|
+
- @forge/bundler@4.17.0
|
|
102
|
+
- @forge/runtime@5.8.1
|
|
103
|
+
- @forge/tunnel@5.2.2
|
|
104
|
+
- @forge/lint@5.2.0
|
|
105
|
+
|
|
3
106
|
## 10.0.1-next.10
|
|
4
107
|
|
|
5
108
|
### Patch Changes
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge/cli",
|
|
3
|
-
"version": "10.0
|
|
3
|
+
"version": "10.1.0-next.6",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@forge/cli",
|
|
9
|
-
"version": "10.0
|
|
9
|
+
"version": "10.1.0-next.6",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "UNLICENSED",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@forge/bundler": "4.17.
|
|
14
|
-
"@forge/cli-shared": "5.0
|
|
13
|
+
"@forge/bundler": "4.17.1-next.5",
|
|
14
|
+
"@forge/cli-shared": "5.1.0-next.4",
|
|
15
15
|
"@forge/egress": "1.2.13",
|
|
16
|
-
"@forge/lint": "5.2.
|
|
17
|
-
"@forge/manifest": "7.4.
|
|
18
|
-
"@forge/runtime": "5.8.1
|
|
19
|
-
"@forge/tunnel": "5.
|
|
16
|
+
"@forge/lint": "5.2.1-next.5",
|
|
17
|
+
"@forge/manifest": "7.4.1-next.1",
|
|
18
|
+
"@forge/runtime": "5.8.1",
|
|
19
|
+
"@forge/tunnel": "5.3.0-next.6",
|
|
20
20
|
"@forge/util": "1.4.3",
|
|
21
21
|
"@sentry/node": "7.100.1",
|
|
22
22
|
"ajv": "^8.12.0",
|
|
@@ -878,9 +878,9 @@
|
|
|
878
878
|
"integrity": "sha512-zG50ZRzbKyWHVb/XjI6iCIyyDNmSHdlclvehMjFZ/A3qpHExjSCjaszeY6gBDJKD2GORKKjQ3LS1UyRpiVVvkA=="
|
|
879
879
|
},
|
|
880
880
|
"node_modules/@forge/bundler": {
|
|
881
|
-
"version": "4.17.
|
|
882
|
-
"resolved": "https://registry.npmjs.org/@forge/bundler/-/bundler-4.17.
|
|
883
|
-
"integrity": "sha512-
|
|
881
|
+
"version": "4.17.1-next.5",
|
|
882
|
+
"resolved": "https://registry.npmjs.org/@forge/bundler/-/bundler-4.17.1-next.5.tgz",
|
|
883
|
+
"integrity": "sha512-DE/bZnDVRwAQfSyoAHuqjkZ+R2fgtBXgcAJWyLlOU/7sqOw5HshgPIHOvK1IEQujMS1hzIcvgoRdzii4HD3iKQ==",
|
|
884
884
|
"dependencies": {
|
|
885
885
|
"@babel/core": "^7.24.0",
|
|
886
886
|
"@babel/plugin-transform-class-properties": "^7.23.3",
|
|
@@ -889,10 +889,10 @@
|
|
|
889
889
|
"@babel/plugin-transform-optional-chaining": "^7.23.4",
|
|
890
890
|
"@babel/plugin-transform-react-jsx": "^7.23.4",
|
|
891
891
|
"@babel/preset-typescript": "^7.23.3",
|
|
892
|
-
"@forge/api": "3.
|
|
892
|
+
"@forge/api": "3.8.0-next.0",
|
|
893
893
|
"@forge/babel-plugin-transform-ui": "1.1.18",
|
|
894
|
-
"@forge/cli-shared": "5.0
|
|
895
|
-
"@forge/lint": "5.2.
|
|
894
|
+
"@forge/cli-shared": "5.1.0-next.4",
|
|
895
|
+
"@forge/lint": "5.2.1-next.5",
|
|
896
896
|
"@forge/util": "1.4.3",
|
|
897
897
|
"assert": "^2.1.0",
|
|
898
898
|
"babel-loader": "^8.3.0",
|
|
@@ -931,9 +931,9 @@
|
|
|
931
931
|
}
|
|
932
932
|
},
|
|
933
933
|
"node_modules/@forge/bundler/node_modules/@forge/api": {
|
|
934
|
-
"version": "3.
|
|
935
|
-
"resolved": "https://registry.npmjs.org/@forge/api/-/api-3.
|
|
936
|
-
"integrity": "sha512-
|
|
934
|
+
"version": "3.8.0-next.0",
|
|
935
|
+
"resolved": "https://registry.npmjs.org/@forge/api/-/api-3.8.0-next.0.tgz",
|
|
936
|
+
"integrity": "sha512-y//Qn6J+0Qwb5KGXZ+z8Jwn8jSO4F871XXhunG/Gtf44kHTrueCJJ0z7EvPLdnknCveMSMsbchTwHCYXTFto/w==",
|
|
937
937
|
"dependencies": {
|
|
938
938
|
"@forge/auth": "0.0.5",
|
|
939
939
|
"@forge/egress": "1.2.13",
|
|
@@ -949,11 +949,11 @@
|
|
|
949
949
|
"integrity": "sha512-n4AWXkzMA4Pv4nam+dTu7PHgDQtMwaAF2MalOWF323zGvYKS/gZJY+7efJq0DLP783iTfjvYT879EHhCrfvEXA=="
|
|
950
950
|
},
|
|
951
951
|
"node_modules/@forge/cli-shared": {
|
|
952
|
-
"version": "5.0
|
|
953
|
-
"resolved": "https://registry.npmjs.org/@forge/cli-shared/-/cli-shared-5.0
|
|
954
|
-
"integrity": "sha512-
|
|
952
|
+
"version": "5.1.0-next.4",
|
|
953
|
+
"resolved": "https://registry.npmjs.org/@forge/cli-shared/-/cli-shared-5.1.0-next.4.tgz",
|
|
954
|
+
"integrity": "sha512-eLXguUImk/RrxjsMCpBqoPHapeP5ZN5uPW7+sxdSO0FqvEoOdjE8sggOVaYpG3sa8cEWLnb+RD+KC3DfD604Zw==",
|
|
955
955
|
"dependencies": {
|
|
956
|
-
"@forge/manifest": "7.4.
|
|
956
|
+
"@forge/manifest": "7.4.1-next.1",
|
|
957
957
|
"@forge/util": "1.4.3",
|
|
958
958
|
"@sentry/node": "7.100.1",
|
|
959
959
|
"adm-zip": "^0.5.10",
|
|
@@ -1004,13 +1004,13 @@
|
|
|
1004
1004
|
}
|
|
1005
1005
|
},
|
|
1006
1006
|
"node_modules/@forge/lint": {
|
|
1007
|
-
"version": "5.2.
|
|
1008
|
-
"resolved": "https://registry.npmjs.org/@forge/lint/-/lint-5.2.
|
|
1009
|
-
"integrity": "sha512
|
|
1007
|
+
"version": "5.2.1-next.5",
|
|
1008
|
+
"resolved": "https://registry.npmjs.org/@forge/lint/-/lint-5.2.1-next.5.tgz",
|
|
1009
|
+
"integrity": "sha512-i/N3HgwY5CSGiUy8WFOXTut4JqZtI6KEyzSTXE2KXEO1ubCbVqxFYp+3fFQyl6pYMaIp0AIVgJx9zQ52JiOIXQ==",
|
|
1010
1010
|
"dependencies": {
|
|
1011
|
-
"@forge/cli-shared": "5.0
|
|
1011
|
+
"@forge/cli-shared": "5.1.0-next.4",
|
|
1012
1012
|
"@forge/egress": "1.2.13",
|
|
1013
|
-
"@forge/manifest": "7.4.
|
|
1013
|
+
"@forge/manifest": "7.4.1-next.1",
|
|
1014
1014
|
"@typescript-eslint/typescript-estree": "^5.62.0",
|
|
1015
1015
|
"array.prototype.flatmap": "^1.3.2",
|
|
1016
1016
|
"atlassian-openapi": "^1.0.18",
|
|
@@ -1019,9 +1019,9 @@
|
|
|
1019
1019
|
}
|
|
1020
1020
|
},
|
|
1021
1021
|
"node_modules/@forge/manifest": {
|
|
1022
|
-
"version": "7.4.
|
|
1023
|
-
"resolved": "https://registry.npmjs.org/@forge/manifest/-/manifest-7.4.
|
|
1024
|
-
"integrity": "sha512-
|
|
1022
|
+
"version": "7.4.1-next.1",
|
|
1023
|
+
"resolved": "https://registry.npmjs.org/@forge/manifest/-/manifest-7.4.1-next.1.tgz",
|
|
1024
|
+
"integrity": "sha512-eEjwZq/V3MbD1eLEg51v2HLgcLoJPMQa0CjhWHkY+tu/FHzI7/U9h0TMeVfGvT7tzaWB72esth5EwYwbsP79yw==",
|
|
1025
1025
|
"dependencies": {
|
|
1026
1026
|
"@forge/util": "1.4.3",
|
|
1027
1027
|
"@sentry/node": "7.100.1",
|
|
@@ -1037,9 +1037,9 @@
|
|
|
1037
1037
|
}
|
|
1038
1038
|
},
|
|
1039
1039
|
"node_modules/@forge/runtime": {
|
|
1040
|
-
"version": "5.8.1
|
|
1041
|
-
"resolved": "https://registry.npmjs.org/@forge/runtime/-/runtime-5.8.1
|
|
1042
|
-
"integrity": "sha512-
|
|
1040
|
+
"version": "5.8.1",
|
|
1041
|
+
"resolved": "https://registry.npmjs.org/@forge/runtime/-/runtime-5.8.1.tgz",
|
|
1042
|
+
"integrity": "sha512-dNhDcrPEVrjhMIIaW683BJfHnZZl7ESjtELFLOIpmAYZV/Wr9qKv+uI/qxnL85pZ78oGAz9BBQCwea6zx7sJAQ==",
|
|
1043
1043
|
"dependencies": {
|
|
1044
1044
|
"@forge/util": "1.4.3",
|
|
1045
1045
|
"fp-ts": "^2.16.2",
|
|
@@ -1052,14 +1052,15 @@
|
|
|
1052
1052
|
}
|
|
1053
1053
|
},
|
|
1054
1054
|
"node_modules/@forge/tunnel": {
|
|
1055
|
-
"version": "5.
|
|
1056
|
-
"resolved": "https://registry.npmjs.org/@forge/tunnel/-/tunnel-5.
|
|
1057
|
-
"integrity": "sha512-
|
|
1055
|
+
"version": "5.3.0-next.6",
|
|
1056
|
+
"resolved": "https://registry.npmjs.org/@forge/tunnel/-/tunnel-5.3.0-next.6.tgz",
|
|
1057
|
+
"integrity": "sha512-sqTolx/iqhU02AXKQFnFsYmQX4T3QcW0HHG/aYTPSGKbgy9H1XlWynngdLdq714R5V3ttfRoiyvKYy31wDNuVQ==",
|
|
1058
1058
|
"dependencies": {
|
|
1059
|
-
"@forge/bundler": "4.17.
|
|
1060
|
-
"@forge/cli-shared": "5.0
|
|
1059
|
+
"@forge/bundler": "4.17.1-next.5",
|
|
1060
|
+
"@forge/cli-shared": "5.1.0-next.4",
|
|
1061
1061
|
"@forge/csp": "3.2.1",
|
|
1062
|
-
"@forge/runtime": "5.8.1
|
|
1062
|
+
"@forge/runtime": "5.8.1",
|
|
1063
|
+
"chokidar": "^3.6.0",
|
|
1063
1064
|
"cloudflared": "^0.5.2",
|
|
1064
1065
|
"express": "^4.18.3",
|
|
1065
1066
|
"express-intercept": "^1.1.0",
|
|
@@ -2920,9 +2921,9 @@
|
|
|
2920
2921
|
"integrity": "sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU= sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
|
|
2921
2922
|
},
|
|
2922
2923
|
"node_modules/chokidar": {
|
|
2923
|
-
"version": "3.
|
|
2924
|
-
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.
|
|
2925
|
-
"integrity": "sha1-
|
|
2924
|
+
"version": "3.6.0",
|
|
2925
|
+
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
|
2926
|
+
"integrity": "sha1-GXxsxmnvKo3F57TZfuTgksPrDVs= sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
|
2926
2927
|
"dependencies": {
|
|
2927
2928
|
"anymatch": "~3.1.2",
|
|
2928
2929
|
"braces": "~3.0.2",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AppConfigProvider, CredentialStore, GetAppOwnerQuery,
|
|
1
|
+
import { AppConfigProvider, CredentialStore, GetAppOwnerQuery, UI, UserRepository } from '@forge/cli-shared';
|
|
2
2
|
import { CreateEnvironmentCommand } from '../../environment/create-environment';
|
|
3
3
|
import { ListEnvironmentCommand } from '../../environment/list-environment';
|
|
4
4
|
import { CachedConfigService } from '../../service/cached-config-service';
|
|
@@ -10,11 +10,11 @@ export declare class DefaultEnvironmentController {
|
|
|
10
10
|
private readonly credentialStore;
|
|
11
11
|
private readonly cachedConfigService;
|
|
12
12
|
private readonly getAppConfig;
|
|
13
|
-
private readonly
|
|
13
|
+
private readonly userRepository;
|
|
14
14
|
private readonly createEnvironmentCommand;
|
|
15
15
|
private readonly listEnvironmentCommand;
|
|
16
16
|
private readonly getAppOwnerQuery;
|
|
17
|
-
constructor(ui: UI, credentialStore: CredentialStore, cachedConfigService: CachedConfigService, getAppConfig: AppConfigProvider,
|
|
17
|
+
constructor(ui: UI, credentialStore: CredentialStore, cachedConfigService: CachedConfigService, getAppConfig: AppConfigProvider, userRepository: UserRepository, createEnvironmentCommand: CreateEnvironmentCommand, listEnvironmentCommand: ListEnvironmentCommand, getAppOwnerQuery: GetAppOwnerQuery);
|
|
18
18
|
run(nonInteractive?: boolean): Promise<string>;
|
|
19
19
|
getDefaultEnvironment(): Promise<string | undefined>;
|
|
20
20
|
private promptAndSetDefaultEnvironmentForContributor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-environment-controller.d.ts","sourceRoot":"","sources":["../../../src/command-line/controller/default-environment-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,eAAe,EAEf,gBAAgB,
|
|
1
|
+
{"version":3,"file":"default-environment-controller.d.ts","sourceRoot":"","sources":["../../../src/command-line/controller/default-environment-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,eAAe,EAEf,gBAAgB,EAEhB,EAAE,EAEF,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAG1E,qBAAa,6BAA8B,SAAQ,KAAK;;CAIvD;AAED,qBAAa,4BAA4B;IAErC,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAPzB,EAAE,EAAE,EAAE,EACG,eAAe,EAAE,eAAe,EAChC,mBAAmB,EAAE,mBAAmB,EACxC,YAAY,EAAE,iBAAiB,EAC/B,cAAc,EAAE,cAAc,EAC9B,wBAAwB,EAAE,wBAAwB,EAClD,sBAAsB,EAAE,sBAAsB,EAC9C,gBAAgB,EAAE,gBAAgB;IAGxC,GAAG,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB9C,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAYnD,4CAA4C;YAO5C,8BAA8B;YAgB9B,iBAAiB;YAKjB,+BAA+B;YAoB/B,8BAA8B;YAU9B,qBAAqB;CAKpC"}
|
|
@@ -15,16 +15,16 @@ class DefaultEnvironmentController {
|
|
|
15
15
|
credentialStore;
|
|
16
16
|
cachedConfigService;
|
|
17
17
|
getAppConfig;
|
|
18
|
-
|
|
18
|
+
userRepository;
|
|
19
19
|
createEnvironmentCommand;
|
|
20
20
|
listEnvironmentCommand;
|
|
21
21
|
getAppOwnerQuery;
|
|
22
|
-
constructor(ui, credentialStore, cachedConfigService, getAppConfig,
|
|
22
|
+
constructor(ui, credentialStore, cachedConfigService, getAppConfig, userRepository, createEnvironmentCommand, listEnvironmentCommand, getAppOwnerQuery) {
|
|
23
23
|
this.ui = ui;
|
|
24
24
|
this.credentialStore = credentialStore;
|
|
25
25
|
this.cachedConfigService = cachedConfigService;
|
|
26
26
|
this.getAppConfig = getAppConfig;
|
|
27
|
-
this.
|
|
27
|
+
this.userRepository = userRepository;
|
|
28
28
|
this.createEnvironmentCommand = createEnvironmentCommand;
|
|
29
29
|
this.listEnvironmentCommand = listEnvironmentCommand;
|
|
30
30
|
this.getAppOwnerQuery = getAppOwnerQuery;
|
|
@@ -36,7 +36,7 @@ class DefaultEnvironmentController {
|
|
|
36
36
|
}
|
|
37
37
|
const credentials = await this.credentialStore.getCredentials();
|
|
38
38
|
const [currentUser, owner] = await Promise.all([
|
|
39
|
-
this.
|
|
39
|
+
this.userRepository.getUser(credentials),
|
|
40
40
|
this.getAppOwnerQuery.execute()
|
|
41
41
|
]);
|
|
42
42
|
if (owner.accountId === currentUser.accountId) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CommandLineUI, ConfigFile, PersonalApiCredentialsValidated, TunnelCommandOptions, TunnelOptions } from '@forge/cli-shared';
|
|
1
|
+
import { CommandLineUI, ConfigFile, CredentialGetter, PersonalApiCredentialsValidated, TunnelCommandOptions, TunnelOptions, FeatureFlagService } from '@forge/cli-shared';
|
|
2
2
|
import { TunnelAnalyticsService } from '../../service/tunnel-analytics-service';
|
|
3
3
|
import { DockerTunnelService, TunnelService } from '../../service/tunnel-service';
|
|
4
4
|
import { TunnelView } from '../view/tunnel-view';
|
|
@@ -9,7 +9,9 @@ export declare class TunnelController {
|
|
|
9
9
|
private readonly dockerTunnelService;
|
|
10
10
|
private readonly tunnelView;
|
|
11
11
|
private readonly configFile;
|
|
12
|
-
|
|
12
|
+
private readonly credentialStore;
|
|
13
|
+
private readonly featureFlagService;
|
|
14
|
+
constructor(analyticsService: TunnelAnalyticsService, nodeTunnelService: TunnelService, localTunnelService: TunnelService, dockerTunnelService: DockerTunnelService, tunnelView: TunnelView, configFile: ConfigFile, credentialStore: CredentialGetter, featureFlagService: FeatureFlagService);
|
|
13
15
|
run(tunnelOptions: TunnelCommandOptions, ui: CommandLineUI): Promise<void>;
|
|
14
16
|
private validateTunnelCommandOptions;
|
|
15
17
|
runDockerTunnel(tunnelOptions: TunnelOptions, creds: PersonalApiCredentialsValidated, debugEnabled: boolean): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-controller.d.ts","sourceRoot":"","sources":["../../../src/command-line/controller/tunnel-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,UAAU,
|
|
1
|
+
{"version":3,"file":"tunnel-controller.d.ts","sourceRoot":"","sources":["../../../src/command-line/controller/tunnel-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,UAAU,EAEV,gBAAgB,EAChB,+BAA+B,EAC/B,oBAAoB,EAEpB,aAAa,EAEb,kBAAkB,EACnB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,EACL,mBAAmB,EAGnB,aAAa,EACd,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAPlB,gBAAgB,EAAE,sBAAsB,EACxC,iBAAiB,EAAE,aAAa,EAChC,kBAAkB,EAAE,aAAa,EACjC,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,gBAAgB,EACjC,kBAAkB,EAAE,kBAAkB;IAG5C,GAAG,CAAC,aAAa,EAAE,oBAAoB,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBvF,OAAO,CAAC,4BAA4B;IAgBvB,eAAe,CAC1B,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,+BAA+B,EACtC,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,IAAI,CAAC;CAmBjB"}
|
|
@@ -11,20 +11,25 @@ class TunnelController {
|
|
|
11
11
|
dockerTunnelService;
|
|
12
12
|
tunnelView;
|
|
13
13
|
configFile;
|
|
14
|
-
|
|
14
|
+
credentialStore;
|
|
15
|
+
featureFlagService;
|
|
16
|
+
constructor(analyticsService, nodeTunnelService, localTunnelService, dockerTunnelService, tunnelView, configFile, credentialStore, featureFlagService) {
|
|
15
17
|
this.analyticsService = analyticsService;
|
|
16
18
|
this.nodeTunnelService = nodeTunnelService;
|
|
17
19
|
this.localTunnelService = localTunnelService;
|
|
18
20
|
this.dockerTunnelService = dockerTunnelService;
|
|
19
21
|
this.tunnelView = tunnelView;
|
|
20
22
|
this.configFile = configFile;
|
|
23
|
+
this.credentialStore = credentialStore;
|
|
24
|
+
this.featureFlagService = featureFlagService;
|
|
21
25
|
}
|
|
22
26
|
async run(tunnelOptions, ui) {
|
|
23
27
|
const isNodeJsRuntime = (await this.configFile.runtimeType()) === cli_shared_1.RuntimeType.nodejs;
|
|
24
28
|
const options = this.validateTunnelCommandOptions(isNodeJsRuntime, tunnelOptions);
|
|
25
|
-
const creds = await
|
|
29
|
+
const creds = await this.credentialStore.getCredentials();
|
|
26
30
|
const localTunnelErrorCallback = this.tunnelView.getTunnelErrorHandler(cli_shared_1.exitOnError);
|
|
27
|
-
this.
|
|
31
|
+
const isCloudflareTunnel = await this.featureFlagService.isCloudflareTunnelEnabled();
|
|
32
|
+
this.tunnelView.dockerPreamble(isCloudflareTunnel, tunnelOptions.environment);
|
|
28
33
|
if (isNodeJsRuntime) {
|
|
29
34
|
return await this.nodeTunnelService.run(options, creds, ui.debugEnabled);
|
|
30
35
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CLIDetails, CommandLineUI, ConfigFile, CreateAppCommand, FeatureFlagService, GetAppOwnerQuery, LoginCommand, LogoutCommand, RegisterAppCommand, ViewAppLogsCommand } from '@forge/cli-shared';
|
|
1
|
+
import { CLIDetails, CommandLineUI, ConfigFile, CreateAppCommand, FeatureFlagService, GetAppOwnerQuery, LoginCommand, LogoutCommand, RegisterAppCommand, ViewAppLogsCommand, UserRepositoryImpl } from '@forge/cli-shared';
|
|
2
2
|
import { AnalyticsClientReporter } from '../analytics-client/analytics-client';
|
|
3
3
|
import { PackageUploadDeployCommand } from '../deploy';
|
|
4
4
|
import { DeleteEnvironmentVariableCommand } from '../environment-variables/delete-environment-variable';
|
|
@@ -63,6 +63,7 @@ export declare const getDependencies: (cliDetails: CLIDetails | undefined) => Pr
|
|
|
63
63
|
migrationKeysService: MigrationKeysService;
|
|
64
64
|
customEntitiesService: CustomEntitiesService;
|
|
65
65
|
credentialStore: import("@forge/cli-shared").CredentialStore;
|
|
66
|
+
userRepository: UserRepositoryImpl;
|
|
66
67
|
};
|
|
67
68
|
controllers: {
|
|
68
69
|
autocompleteController: AutocompleteController;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-injection.d.ts","sourceRoot":"","sources":["../../src/command-line/dependency-injection.ts"],"names":[],"mappings":"AAIA,OAAO,EASL,UAAU,EACV,aAAa,EAEb,UAAU,EAGV,gBAAgB,EAGhB,kBAAkB,EAGlB,gBAAgB,EAQhB,YAAY,EACZ,aAAa,EAOb,kBAAkB,EAIlB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"dependency-injection.d.ts","sourceRoot":"","sources":["../../src/command-line/dependency-injection.ts"],"names":[],"mappings":"AAIA,OAAO,EASL,UAAU,EACV,aAAa,EAEb,UAAU,EAGV,gBAAgB,EAGhB,kBAAkB,EAGlB,gBAAgB,EAQhB,YAAY,EACZ,aAAa,EAOb,kBAAkB,EAIlB,kBAAkB,EAElB,kBAAkB,EAGnB,MAAM,mBAAmB,CAAC;AAc3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAE/E,OAAO,EAML,0BAA0B,EAG3B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,gCAAgC,EAAE,MAAM,sDAAsD,CAAC;AAExG,OAAO,EAAE,+BAA+B,EAAE,MAAM,qDAAqD,CAAC;AACtG,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAC;AAIlG,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAG3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAM7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAIrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAQtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAI3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAG3E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAUlE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAIhF,OAAO,EAAE,4BAA4B,EAAE,MAAM,6CAA6C,CAAC;AAE3F,eAAO,MAAM,eAAe,eAAsB,UAAU,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuWvE,CAAC;AAGF,aAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC7D,oBAAY,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC"}
|
|
@@ -72,6 +72,12 @@ const getDependencies = async (cliDetails) => {
|
|
|
72
72
|
const cachedConf = cli_shared_1.CachedConf.getCache(cli_shared_1.CONFIG_PROJECT_NAME);
|
|
73
73
|
const cachedConfigService = new cached_config_service_1.CachedConfigService(cachedConf);
|
|
74
74
|
const analyticsClientReporter = new analytics_client_1.AnalyticsClientReporter(new local_file_storage_1.LocalFileStorage(), ui, cachedConfigService);
|
|
75
|
+
const graphqlGateway = (0, cli_shared_1.getGraphqlGateway)();
|
|
76
|
+
const createGraphQLClient = (auth) => {
|
|
77
|
+
const minimalGraphQLRunner = new cli_shared_1.MinimalGraphQLRunner(auth, graphqlGateway, cliDetails);
|
|
78
|
+
const graphQLRunner = new cli_shared_1.DebuggingGraphqlRunner(minimalGraphQLRunner, graphqlGateway, ui);
|
|
79
|
+
return new cli_shared_1.MutationAwareGraphQLClient(graphQLRunner);
|
|
80
|
+
};
|
|
75
81
|
const workerInfo = (0, worker_info_1.getWorkerInfo)(cliDetails);
|
|
76
82
|
const workersStarter = new workers_starter_1.WorkersStarter(workerInfo);
|
|
77
83
|
const fileReader = new cli_shared_1.FileSystemReader();
|
|
@@ -80,7 +86,8 @@ const getDependencies = async (cliDetails) => {
|
|
|
80
86
|
const appConfigReader = (0, cli_shared_1.configFileReaderForSection)(cli_shared_1.appConfigKey, cli_shared_1.appConfigShape, configFile);
|
|
81
87
|
const assertiveAppConfigReader = (0, cli_shared_1.assertiveAppConfigProvider)(appConfigReader);
|
|
82
88
|
const appConfigWriter = (0, cli_shared_1.configFileWriterForSection)(cli_shared_1.appConfigKey, cli_shared_1.appConfigShape, configFile);
|
|
83
|
-
const
|
|
89
|
+
const userRepository = new cli_shared_1.UserRepositoryImpl(createGraphQLClient, ui);
|
|
90
|
+
const credentialStore = (0, cli_shared_1.getCredentialStore)(ui, userRepository);
|
|
84
91
|
const featureFlagService = new cli_shared_1.FeatureFlagService(ui, cliDetails, credentialStore, appConfigReader);
|
|
85
92
|
const settingsView = new settings_view_1.SettingsView(ui);
|
|
86
93
|
const settingsController = new settings_controller_1.SettingsController(settingsView, cachedConfigService, assertiveAppConfigReader);
|
|
@@ -88,19 +95,13 @@ const getDependencies = async (cliDetails) => {
|
|
|
88
95
|
const liteLintService = new lite_lint_service_1.LiteLintService();
|
|
89
96
|
const analyticsSettingsView = new analytics_settings_view_1.AnalyticsSettingsView(ui);
|
|
90
97
|
const preCommandController = new pre_command_controller_1.PreCommandController(liteLintService, liteLintView, configFile, cachedConfigService, analyticsSettingsView, settingsView);
|
|
91
|
-
const graphqlGateway = (0, cli_shared_1.getGraphqlGateway)();
|
|
92
98
|
const authenticator = new cli_shared_1.PersonalTokenAuthenticator(credentialStore);
|
|
93
99
|
(0, sentry_1.initialiseSentry)({ cliDetails, cachedConfigService });
|
|
94
|
-
const createGraphQLClient = (auth) => {
|
|
95
|
-
const minimalGraphQLRunner = new cli_shared_1.MinimalGraphQLRunner(auth, graphqlGateway, cliDetails);
|
|
96
|
-
const graphQLRunner = new cli_shared_1.DebuggingGraphqlRunner(minimalGraphQLRunner, graphqlGateway, ui);
|
|
97
|
-
return new cli_shared_1.MutationAwareGraphQLClient(graphQLRunner);
|
|
98
|
-
};
|
|
99
100
|
const graphQLClient = createGraphQLClient(authenticator);
|
|
100
101
|
const fileUploader = new cli_shared_1.HttpFileUploader(fileReader);
|
|
101
102
|
const feedbackPostClient = new cli_shared_1.HttpsFeedbackPostClient();
|
|
102
103
|
const zipAccessor = new cli_shared_1.AdmZipAccessor();
|
|
103
|
-
const loginCommand = new cli_shared_1.LoginCommand(
|
|
104
|
+
const loginCommand = new cli_shared_1.LoginCommand(userRepository, credentialStore);
|
|
104
105
|
const logoutCommand = new cli_shared_1.LogoutCommand(credentialStore);
|
|
105
106
|
const downloader = new cli_shared_1.TemplateServiceDownloader();
|
|
106
107
|
const extractor = new cli_shared_1.ZipTemplateExtractor(zipAccessor);
|
|
@@ -175,15 +176,15 @@ const getDependencies = async (cliDetails) => {
|
|
|
175
176
|
const tunnelInteractor = new tunnel_1.TunnelInteractor(ui);
|
|
176
177
|
const configFilePortFindingService = new port_finding_service_1.ConfigFilePortFindingService(configFile);
|
|
177
178
|
const tunnelAnalyticsService = new tunnel_analytics_service_1.TunnelAnalyticsService(analyticsClientReporter, cliDetails, featureFlagService);
|
|
178
|
-
const nodeTunnelService = new tunnel_service_1.InProcessTunnelService(ui, startTunnelCommand, tunnelInteractor, configFilePortFindingService, cachedConfigService, tunnelAnalyticsService);
|
|
179
|
+
const nodeTunnelService = new tunnel_service_1.InProcessTunnelService(ui, startTunnelCommand, tunnelInteractor, configFilePortFindingService, cachedConfigService, tunnelAnalyticsService, featureFlagService);
|
|
179
180
|
const tunnelView = new tunnel_view_1.TunnelView(ui);
|
|
180
|
-
const localTunnelService = new tunnel_service_1.LocalTunnelService(configFilePortFindingService, cachedConfigService);
|
|
181
|
+
const localTunnelService = new tunnel_service_1.LocalTunnelService(configFilePortFindingService, cachedConfigService, featureFlagService);
|
|
181
182
|
const dockerService = new docker_service_1.DockerService();
|
|
182
|
-
const dockerTunnelService = new tunnel_service_1.DockerTunnelService(configFilePortFindingService, cachedConfigService, dockerService, tunnelAnalyticsService);
|
|
183
|
-
const tunnelController = new tunnel_controller_1.TunnelController(tunnelAnalyticsService, nodeTunnelService, localTunnelService, dockerTunnelService, tunnelView, configFile);
|
|
183
|
+
const dockerTunnelService = new tunnel_service_1.DockerTunnelService(configFilePortFindingService, cachedConfigService, dockerService, tunnelAnalyticsService, featureFlagService);
|
|
184
|
+
const tunnelController = new tunnel_controller_1.TunnelController(tunnelAnalyticsService, nodeTunnelService, localTunnelService, dockerTunnelService, tunnelView, configFile, credentialStore, featureFlagService);
|
|
184
185
|
const stubController = new stubController_1.StubController();
|
|
185
186
|
const prerequisitesController = new prerequisites_controller_1.PrerequisitesController(ui, featureFlagService, cliDetails);
|
|
186
|
-
const defaultEnvironmentController = new default_environment_controller_1.DefaultEnvironmentController(ui, credentialStore, cachedConfigService, assertiveAppConfigReader,
|
|
187
|
+
const defaultEnvironmentController = new default_environment_controller_1.DefaultEnvironmentController(ui, credentialStore, cachedConfigService, assertiveAppConfigReader, userRepository, createEnvironmentCommand, listEnvironmentCommand, getAppOwnerQuery);
|
|
187
188
|
cmd = command_1.Command.program(ui, analyticsClientReporter, preCommandController, cliDetails, credentialStore, defaultEnvironmentController, featureFlagService);
|
|
188
189
|
return {
|
|
189
190
|
ui,
|
|
@@ -219,7 +220,8 @@ const getDependencies = async (cliDetails) => {
|
|
|
219
220
|
installationsService,
|
|
220
221
|
migrationKeysService,
|
|
221
222
|
customEntitiesService,
|
|
222
|
-
credentialStore
|
|
223
|
+
credentialStore,
|
|
224
|
+
userRepository
|
|
223
225
|
},
|
|
224
226
|
controllers: {
|
|
225
227
|
autocompleteController,
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { PersonalApiCredentialsValidated } from '@forge/cli-shared';
|
|
2
|
-
import { CommandLineUI, LoginCommand } from '@forge/cli-shared';
|
|
1
|
+
import { CredentialGetter, Logger, LoginCommand, PersonalApiCredentialsValidated, UI, UserRepository } from '@forge/cli-shared';
|
|
3
2
|
import { Dependencies } from './dependency-injection';
|
|
4
3
|
export interface LoginCommandOptions {
|
|
5
4
|
email?: string;
|
|
6
5
|
token?: string;
|
|
7
6
|
}
|
|
8
|
-
export declare function loginCommandHandler(ui:
|
|
7
|
+
export declare function loginCommandHandler(ui: UI, instructionsUrl: string, loginCommand: LoginCommand, { email, token }: LoginCommandOptions): Promise<{
|
|
9
8
|
creds: PersonalApiCredentialsValidated;
|
|
10
9
|
analytics: {
|
|
11
10
|
userId: string;
|
|
12
11
|
anonymousId: string | undefined;
|
|
13
12
|
};
|
|
14
13
|
}>;
|
|
14
|
+
export declare function whoamiCommandHandler(logger: Logger, credentialGetter: CredentialGetter, userRepository: UserRepository): Promise<void>;
|
|
15
15
|
export declare function registerCommands(deps: Dependencies): void;
|
|
16
16
|
//# sourceMappingURL=register-authentication-command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-authentication-command.d.ts","sourceRoot":"","sources":["../../src/command-line/register-authentication-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL
|
|
1
|
+
{"version":3,"file":"register-authentication-command.d.ts","sourceRoot":"","sources":["../../src/command-line/register-authentication-command.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,gBAAgB,EAEhB,MAAM,EACN,YAAY,EACZ,+BAA+B,EAE/B,EAAE,EAEF,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAYtD,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,EAAE,EACN,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,YAAY,EAC1B,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,mBAAmB,GACpC,OAAO,CAAC;IAAE,KAAK,EAAE,+BAA+B,CAAC;IAAC,SAAS,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;CAAE,CAAC,CAqCrH;AA0BD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,EAClC,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC,CAgBf;AASD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,QAIlD"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerCommands = exports.loginCommandHandler = void 0;
|
|
3
|
+
exports.registerCommands = exports.whoamiCommandHandler = exports.loginCommandHandler = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const child_process_1 = tslib_1.__importDefault(require("child_process"));
|
|
6
6
|
const cli_shared_1 = require("@forge/cli-shared");
|
|
7
|
-
const cli_shared_2 = require("@forge/cli-shared");
|
|
8
7
|
const anon_user_id_1 = require("./anon-user-id");
|
|
9
8
|
function guessEmail() {
|
|
10
9
|
const child = child_process_1.default.spawnSync('git', ['config', '--global', 'user.email'], { encoding: 'utf8', shell: true });
|
|
@@ -15,31 +14,31 @@ function guessEmail() {
|
|
|
15
14
|
}
|
|
16
15
|
async function loginCommandHandler(ui, instructionsUrl, loginCommand, { email, token }) {
|
|
17
16
|
try {
|
|
18
|
-
ui.info(
|
|
19
|
-
ui.info(
|
|
17
|
+
ui.info(cli_shared_1.Text.login.introText);
|
|
18
|
+
ui.info(cli_shared_1.Text.ctrlC);
|
|
20
19
|
ui.emptyLine();
|
|
21
20
|
if (!email) {
|
|
22
21
|
const maybeEmail = guessEmail();
|
|
23
|
-
email = await ui.promptForText(
|
|
22
|
+
email = await ui.promptForText(cli_shared_1.Text.login.promptEmail, maybeEmail);
|
|
24
23
|
ui.emptyLine();
|
|
25
24
|
}
|
|
26
25
|
if (!token) {
|
|
27
|
-
ui.info(
|
|
26
|
+
ui.info(cli_shared_1.Text.login.url(instructionsUrl));
|
|
28
27
|
ui.emptyLine();
|
|
29
|
-
token = await ui.promptForSecret(
|
|
28
|
+
token = await ui.promptForSecret(cli_shared_1.Text.login.promptToken);
|
|
30
29
|
ui.emptyLine();
|
|
31
30
|
}
|
|
32
31
|
const args = { email, token };
|
|
33
|
-
const
|
|
32
|
+
const user = await ui.displayProgress(() => loginCommand.execute(args), cli_shared_1.Text.login.checking, (user) => cli_shared_1.Text.login.success(user.name));
|
|
34
33
|
ui.emptyLine();
|
|
35
|
-
ui.info(
|
|
34
|
+
ui.info(cli_shared_1.Text.login.nextStep);
|
|
36
35
|
return {
|
|
37
|
-
creds,
|
|
38
|
-
analytics: {
|
|
36
|
+
creds: { email, token, accountId: user.accountId },
|
|
37
|
+
analytics: { userId: user.accountId, anonymousId: (0, anon_user_id_1.getAnonId)(true) }
|
|
39
38
|
};
|
|
40
39
|
}
|
|
41
40
|
catch (error) {
|
|
42
|
-
throw error instanceof cli_shared_1.UserNotFoundError ? new cli_shared_1.UserNotFoundError(
|
|
41
|
+
throw error instanceof cli_shared_1.UserNotFoundError ? new cli_shared_1.UserNotFoundError(cli_shared_1.Text.login.error) : error;
|
|
43
42
|
}
|
|
44
43
|
}
|
|
45
44
|
exports.loginCommandHandler = loginCommandHandler;
|
|
@@ -47,9 +46,9 @@ function registerLoginCommand({ cmd, ui, commands: { loginCommand } }) {
|
|
|
47
46
|
const instructionsUrl = (0, cli_shared_1.getInstructionsUrl)();
|
|
48
47
|
cmd
|
|
49
48
|
.command('login')
|
|
50
|
-
.description(
|
|
51
|
-
.option('-u, --email <user email>',
|
|
52
|
-
.option('-t, --token <api token>',
|
|
49
|
+
.description(cli_shared_1.Text.login.cmd)
|
|
50
|
+
.option('-u, --email <user email>', cli_shared_1.Text.login.optionEmail)
|
|
51
|
+
.option('-t, --token <api token>', cli_shared_1.Text.login.optionToken)
|
|
53
52
|
.requireNoAuthentication()
|
|
54
53
|
.nonInteractiveOption('--email', '--token')
|
|
55
54
|
.action((options) => loginCommandHandler(ui, instructionsUrl, loginCommand, options));
|
|
@@ -57,35 +56,37 @@ function registerLoginCommand({ cmd, ui, commands: { loginCommand } }) {
|
|
|
57
56
|
function registerLogoutCommand({ cmd, ui, commands: { logoutCommand } }) {
|
|
58
57
|
cmd
|
|
59
58
|
.command('logout')
|
|
60
|
-
.description(
|
|
59
|
+
.description(cli_shared_1.Text.logout.cmd)
|
|
61
60
|
.requireNoAuthentication()
|
|
62
61
|
.action(async () => {
|
|
63
62
|
await logoutCommand.execute();
|
|
64
|
-
ui.info(
|
|
63
|
+
ui.info(cli_shared_1.Text.logout.loggedOut);
|
|
65
64
|
});
|
|
66
65
|
}
|
|
67
|
-
function
|
|
68
|
-
|
|
69
|
-
.
|
|
70
|
-
.
|
|
71
|
-
.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
throw new cli_shared_1.UserNotFoundError(cli_shared_2.Text.whoami.error.personalCredentialsEnv(cli_shared_1.EMAIL_KEY, cli_shared_1.API_TOKEN_KEY));
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
throw new cli_shared_1.UserNotFoundError(cli_shared_2.Text.whoami.error.personalCredentialsKeytar);
|
|
84
|
-
}
|
|
66
|
+
async function whoamiCommandHandler(logger, credentialGetter, userRepository) {
|
|
67
|
+
try {
|
|
68
|
+
const credentials = await credentialGetter.getCredentials();
|
|
69
|
+
const { name, accountId } = await userRepository.getUser(credentials);
|
|
70
|
+
logger.info(cli_shared_1.Text.whoami.success.personalCredentials(credentials.email, name, accountId));
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
if (error instanceof cli_shared_1.UserNotFoundError) {
|
|
74
|
+
if (process.env[cli_shared_1.EMAIL_KEY] && process.env[cli_shared_1.API_TOKEN_KEY]) {
|
|
75
|
+
throw new cli_shared_1.UserNotFoundError(cli_shared_1.Text.whoami.error.personalCredentialsEnv(cli_shared_1.EMAIL_KEY, cli_shared_1.API_TOKEN_KEY));
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
throw new cli_shared_1.UserNotFoundError(cli_shared_1.Text.whoami.error.personalCredentialsKeytar);
|
|
85
79
|
}
|
|
86
|
-
throw error;
|
|
87
80
|
}
|
|
88
|
-
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.whoamiCommandHandler = whoamiCommandHandler;
|
|
85
|
+
function registerWhoAmICommand({ cmd, ui, services: { credentialStore, userRepository } }) {
|
|
86
|
+
cmd
|
|
87
|
+
.command('whoami')
|
|
88
|
+
.description(cli_shared_1.Text.whoami.cmd)
|
|
89
|
+
.action(async () => whoamiCommandHandler(ui, credentialStore, userRepository));
|
|
89
90
|
}
|
|
90
91
|
function registerCommands(deps) {
|
|
91
92
|
registerLoginCommand(deps);
|
|
@@ -12,7 +12,7 @@ export declare class TunnelView {
|
|
|
12
12
|
private readonly ui;
|
|
13
13
|
private readonly FAILED_DOCKER_CONNECTION_MESSAGE;
|
|
14
14
|
constructor(ui: UI);
|
|
15
|
-
dockerPreamble(environmentKey?: string): void;
|
|
15
|
+
dockerPreamble(isCloudflareTunnel: boolean, environmentKey?: string): void;
|
|
16
16
|
getTunnelErrorHandler(exitFn: typeof exitOnError): (err: Error) => Promise<void>;
|
|
17
17
|
updatePullPercent(dataBuffer: Buffer, dockerPullPercent: number): number;
|
|
18
18
|
calculateProgress(progress: string, regex: RegExp, dockerPullPercent: number, clamp: number): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-view.d.ts","sourceRoot":"","sources":["../../../src/command-line/view/tunnel-view.ts"],"names":[],"mappings":";AAAA,OAAO,EAEL,WAAW,EAIX,EAAE,EACF,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,UAAU;IAET,OAAO,CAAC,QAAQ,CAAC,EAAE;IAD/B,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAyC;gBAC7D,EAAE,EAAE,EAAE;IAE5B,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"tunnel-view.d.ts","sourceRoot":"","sources":["../../../src/command-line/view/tunnel-view.ts"],"names":[],"mappings":";AAAA,OAAO,EAEL,WAAW,EAIX,EAAE,EACF,SAAS,EACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,qBAAa,eAAgB,SAAQ,SAAS;CAAG;AAEjD,qBAAa,UAAU;IAET,OAAO,CAAC,QAAQ,CAAC,EAAE;IAD/B,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAyC;gBAC7D,EAAE,EAAE,EAAE;IAE5B,cAAc,CAAC,kBAAkB,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAY1E,qBAAqB,CAAC,MAAM,EAAE,OAAO,WAAW,GAAG,CAAC,GAAG,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC;IAQhF,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM;IA+BxE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAQpG,sBAAsB,CAC3B,yBAAyB,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,EACnD,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,yBAAyB,GAC3D,OAAO,CAAC,IAAI,CAAC;CAoDjB"}
|
|
@@ -13,8 +13,9 @@ class TunnelView {
|
|
|
13
13
|
constructor(ui) {
|
|
14
14
|
this.ui = ui;
|
|
15
15
|
}
|
|
16
|
-
dockerPreamble(environmentKey) {
|
|
16
|
+
dockerPreamble(isCloudflareTunnel, environmentKey) {
|
|
17
17
|
this.ui.info(cli_shared_1.Text.tunnel.preamble);
|
|
18
|
+
this.ui.debug(cli_shared_1.Text.tunnel.tunnelType(isCloudflareTunnel));
|
|
18
19
|
if (environmentKey && environmentKey !== cli_shared_1.DEFAULT_ENVIRONMENT_KEY) {
|
|
19
20
|
this.ui.emptyLine();
|
|
20
21
|
this.ui.info(cli_shared_1.Text.tunnel.startingTunnel(environmentKey, (0, cli_shared_1.guessEnvironmentType)(environmentKey)));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawn } from 'cross-spawn';
|
|
2
|
-
import { PersonalApiCredentials, PersonalApiCredentialsValidated, TunnelOptions, UI, UserError } from '@forge/cli-shared';
|
|
2
|
+
import { FeatureFlagService, PersonalApiCredentials, PersonalApiCredentialsValidated, TunnelOptions, UI, UserError } from '@forge/cli-shared';
|
|
3
3
|
import { StartTunnelCommand, TunnelInteractor } from '@forge/tunnel';
|
|
4
4
|
import { CachedConfigService } from './cached-config-service';
|
|
5
5
|
import { DockerService } from './docker-service';
|
|
@@ -28,7 +28,8 @@ export declare class InProcessTunnelService extends TunnelServiceBase {
|
|
|
28
28
|
private readonly tunnelInteractor;
|
|
29
29
|
private readonly configFilePortFindingService;
|
|
30
30
|
private readonly analyticsService;
|
|
31
|
-
|
|
31
|
+
private featureFlagService;
|
|
32
|
+
constructor(ui: UI, startTunnelCommand: StartTunnelCommand, tunnelInteractor: TunnelInteractor, configFilePortFindingService: ConfigFilePortFindingService, cachedConfigService: CachedConfigService, analyticsService: TunnelAnalyticsService, featureFlagService: FeatureFlagService);
|
|
32
33
|
run(tunnelOptions: TunnelOptions, creds: PersonalApiCredentialsValidated, debugEnabled: boolean, onError?: (err: Error) => Promise<void>): Promise<void>;
|
|
33
34
|
}
|
|
34
35
|
interface EnvironmentVariable {
|
|
@@ -38,7 +39,8 @@ interface EnvironmentVariable {
|
|
|
38
39
|
declare abstract class SandboxTunnelServiceBase extends TunnelServiceBase {
|
|
39
40
|
protected readonly configFilePortFindingService: ConfigFilePortFindingService;
|
|
40
41
|
protected readonly cachedConfigService: CachedConfigService;
|
|
41
|
-
|
|
42
|
+
protected readonly featureFlagService: FeatureFlagService;
|
|
43
|
+
constructor(configFilePortFindingService: ConfigFilePortFindingService, cachedConfigService: CachedConfigService, featureFlagService: FeatureFlagService);
|
|
42
44
|
getTunnelProcessEnvironment(tunnelOptions: TunnelOptions, debugEnabled: boolean, { email, token }: PersonalApiCredentials, port: number, cspReporterPort: number | undefined, resourcePorts: Record<string, number>): Promise<EnvironmentVariable[]>;
|
|
43
45
|
private getInspectorPortEnvironment;
|
|
44
46
|
protected getNgrokConfigEnvironment(): EnvironmentVariable[];
|
|
@@ -53,7 +55,8 @@ export declare class LocalTunnelService extends SandboxTunnelServiceBase {
|
|
|
53
55
|
export declare class DockerTunnelService extends SandboxTunnelServiceBase {
|
|
54
56
|
private readonly dockerService;
|
|
55
57
|
private readonly analyticsService;
|
|
56
|
-
|
|
58
|
+
protected readonly featureFlagService: FeatureFlagService;
|
|
59
|
+
constructor(configFilePortFindingService: ConfigFilePortFindingService, cachedConfigService: CachedConfigService, dockerService: DockerService, analyticsService: TunnelAnalyticsService, featureFlagService: FeatureFlagService);
|
|
57
60
|
run(tunnelOptions: TunnelOptions, creds: PersonalApiCredentialsValidated, debugEnabled: boolean): Promise<void>;
|
|
58
61
|
bootstrapDocker(): Promise<ReturnType<typeof spawn> | undefined>;
|
|
59
62
|
private validateDockerVersion;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel-service.d.ts","sourceRoot":"","sources":["../../src/service/tunnel-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tunnel-service.d.ts","sourceRoot":"","sources":["../../src/service/tunnel-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ const os_1 = tslib_1.__importDefault(require("os"));
|
|
|
7
7
|
const path_1 = require("path");
|
|
8
8
|
const portfinder_1 = require("portfinder");
|
|
9
9
|
const semver_1 = require("semver");
|
|
10
|
+
const manifest_1 = require("@forge/manifest");
|
|
10
11
|
const cli_shared_1 = require("@forge/cli-shared");
|
|
11
12
|
const version_info_1 = require("../command-line/version-info");
|
|
12
13
|
const DISABLE_TTY = process.env.DISABLE_TTY === 'true';
|
|
@@ -59,25 +60,31 @@ class InProcessTunnelService extends TunnelServiceBase {
|
|
|
59
60
|
tunnelInteractor;
|
|
60
61
|
configFilePortFindingService;
|
|
61
62
|
analyticsService;
|
|
62
|
-
|
|
63
|
+
featureFlagService;
|
|
64
|
+
constructor(ui, startTunnelCommand, tunnelInteractor, configFilePortFindingService, cachedConfigService, analyticsService, featureFlagService) {
|
|
63
65
|
super(cachedConfigService);
|
|
64
66
|
this.ui = ui;
|
|
65
67
|
this.startTunnelCommand = startTunnelCommand;
|
|
66
68
|
this.tunnelInteractor = tunnelInteractor;
|
|
67
69
|
this.configFilePortFindingService = configFilePortFindingService;
|
|
68
70
|
this.analyticsService = analyticsService;
|
|
71
|
+
this.featureFlagService = featureFlagService;
|
|
69
72
|
}
|
|
70
73
|
async run(tunnelOptions, creds, debugEnabled, onError) {
|
|
71
74
|
try {
|
|
72
75
|
const resourcePortMap = await this.configFilePortFindingService.findPorts();
|
|
76
|
+
const ngrokConfig = (await this.featureFlagService.isCloudflareTunnelEnabled())
|
|
77
|
+
? undefined
|
|
78
|
+
: this.ngrokConfigPath();
|
|
73
79
|
const tunnel = await this.startTunnelCommand.execute({
|
|
74
80
|
environmentKey: tunnelOptions.environment || process.env.ENVIRONMENT_KEY || 'default',
|
|
75
81
|
resourcePortMap,
|
|
76
82
|
host: 'localhost',
|
|
77
|
-
ngrokConfig
|
|
83
|
+
ngrokConfig
|
|
78
84
|
});
|
|
79
85
|
const monitor = await this.tunnelInteractor.watchApp(tunnel, tunnelOptions);
|
|
80
|
-
|
|
86
|
+
const manifestFileWatcher = this.tunnelInteractor.watchAndWarnOnManifestChanges(manifest_1.MANIFEST_FILE);
|
|
87
|
+
await this.tunnelInteractor.handleUserExitEvent(tunnel.stopFunction, monitor, manifestFileWatcher);
|
|
81
88
|
}
|
|
82
89
|
catch (e) {
|
|
83
90
|
await this.analyticsService.reportTunnelFailure(creds, e.constructor.name, (0, cli_shared_1.getErrorAttributes)(e));
|
|
@@ -94,13 +101,18 @@ exports.InProcessTunnelService = InProcessTunnelService;
|
|
|
94
101
|
class SandboxTunnelServiceBase extends TunnelServiceBase {
|
|
95
102
|
configFilePortFindingService;
|
|
96
103
|
cachedConfigService;
|
|
97
|
-
|
|
104
|
+
featureFlagService;
|
|
105
|
+
constructor(configFilePortFindingService, cachedConfigService, featureFlagService) {
|
|
98
106
|
super(cachedConfigService);
|
|
99
107
|
this.configFilePortFindingService = configFilePortFindingService;
|
|
100
108
|
this.cachedConfigService = cachedConfigService;
|
|
109
|
+
this.featureFlagService = featureFlagService;
|
|
101
110
|
}
|
|
102
111
|
async getTunnelProcessEnvironment(tunnelOptions, debugEnabled, { email, token }, port, cspReporterPort, resourcePorts) {
|
|
103
112
|
const graphqlGateway = (0, cli_shared_1.getGraphqlGateway)();
|
|
113
|
+
const ngrokConfig = (await this.featureFlagService.isCloudflareTunnelEnabled())
|
|
114
|
+
? []
|
|
115
|
+
: this.getNgrokConfigEnvironment();
|
|
104
116
|
return [
|
|
105
117
|
{ key: 'APP_FOLDER', value: '/app' },
|
|
106
118
|
{ key: 'FORGE_EMAIL', value: email },
|
|
@@ -114,7 +126,7 @@ class SandboxTunnelServiceBase extends TunnelServiceBase {
|
|
|
114
126
|
...this.getCspReporterPortEnvironment(cspReporterPort),
|
|
115
127
|
...this.getResourcePortEnvironment(resourcePorts),
|
|
116
128
|
...this.getUserEnvironmentVariables(),
|
|
117
|
-
...
|
|
129
|
+
...ngrokConfig
|
|
118
130
|
];
|
|
119
131
|
}
|
|
120
132
|
getInspectorPortEnvironment(port) {
|
|
@@ -171,10 +183,12 @@ exports.LocalTunnelService = LocalTunnelService;
|
|
|
171
183
|
class DockerTunnelService extends SandboxTunnelServiceBase {
|
|
172
184
|
dockerService;
|
|
173
185
|
analyticsService;
|
|
174
|
-
|
|
175
|
-
|
|
186
|
+
featureFlagService;
|
|
187
|
+
constructor(configFilePortFindingService, cachedConfigService, dockerService, analyticsService, featureFlagService) {
|
|
188
|
+
super(configFilePortFindingService, cachedConfigService, featureFlagService);
|
|
176
189
|
this.dockerService = dockerService;
|
|
177
190
|
this.analyticsService = analyticsService;
|
|
191
|
+
this.featureFlagService = featureFlagService;
|
|
178
192
|
}
|
|
179
193
|
async run(tunnelOptions, creds, debugEnabled) {
|
|
180
194
|
await this.validateDockerVersion(creds, debugEnabled);
|
|
@@ -186,7 +200,7 @@ class DockerTunnelService extends SandboxTunnelServiceBase {
|
|
|
186
200
|
const environment = await this.getTunnelProcessEnvironment(tunnelOptions, debugEnabled, creds, port, cspReporterPort, resourcePorts);
|
|
187
201
|
const portOptions = this.getDockerPortOptions(port, resourcePorts, cspReporterPort);
|
|
188
202
|
const interactiveOptions = this.getInteractiveOptions();
|
|
189
|
-
const volumeOptions = this.getVolumeOptions();
|
|
203
|
+
const volumeOptions = await this.getVolumeOptions();
|
|
190
204
|
const env = this.formatEnvForDocker(environment);
|
|
191
205
|
const docker = this.dockerService.runContainer([
|
|
192
206
|
...interactiveOptions,
|
|
@@ -246,12 +260,13 @@ class DockerTunnelService extends SandboxTunnelServiceBase {
|
|
|
246
260
|
}
|
|
247
261
|
return [`-it`];
|
|
248
262
|
}
|
|
249
|
-
getVolumeOptions() {
|
|
263
|
+
async getVolumeOptions() {
|
|
250
264
|
const options = [`-v=${process.cwd()}:/app:cached`];
|
|
251
265
|
if (process.env.FORGE_DEV_DOCKER_TUNNEL) {
|
|
252
266
|
const monorepoRoot = (0, path_1.join)(__dirname, '../../../..');
|
|
253
267
|
options.push(`-v=${monorepoRoot}:/monorepo:cached`);
|
|
254
268
|
options.push(`-v=${monorepoRoot}/node_modules/ngrok/docker-bin:/monorepo/node_modules/ngrok/bin`);
|
|
269
|
+
options.push(`-v=${monorepoRoot}/node_modules/cloudflared/docker-bin:/monorepo/node_modules/cloudflared/bin`);
|
|
255
270
|
}
|
|
256
271
|
if (process.env.FORGE_TUNNEL_MOUNT_DIRECTORIES) {
|
|
257
272
|
const mounts = process.env.FORGE_TUNNEL_MOUNT_DIRECTORIES.split(',');
|
|
@@ -259,7 +274,9 @@ class DockerTunnelService extends SandboxTunnelServiceBase {
|
|
|
259
274
|
options.push(`-v=${mount}:cached`);
|
|
260
275
|
});
|
|
261
276
|
}
|
|
262
|
-
|
|
277
|
+
if (!(await this.featureFlagService.isCloudflareTunnelEnabled())) {
|
|
278
|
+
options.push('--mount', `type=bind,source=${this.ngrokConfigPath()},target=${PATH_DOCKER_NGROK_CONFIG}`);
|
|
279
|
+
}
|
|
263
280
|
return options;
|
|
264
281
|
}
|
|
265
282
|
getNgrokConfigEnvironment() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forge/cli",
|
|
3
|
-
"version": "10.0
|
|
3
|
+
"version": "10.1.0-next.6",
|
|
4
4
|
"description": "A command line interface for managing Atlassian-hosted apps",
|
|
5
5
|
"author": "Atlassian",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
"postinstall": "node -e \"fs.existsSync('./out/bin/postinstall.js') && require('./out/bin/postinstall.js')\""
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@forge/bundler": "4.17.
|
|
22
|
-
"@forge/cli-shared": "5.0
|
|
21
|
+
"@forge/bundler": "4.17.1-next.5",
|
|
22
|
+
"@forge/cli-shared": "5.1.0-next.4",
|
|
23
23
|
"@forge/egress": "1.2.13",
|
|
24
|
-
"@forge/lint": "5.2.
|
|
25
|
-
"@forge/manifest": "7.4.
|
|
26
|
-
"@forge/runtime": "5.8.1
|
|
27
|
-
"@forge/tunnel": "5.
|
|
24
|
+
"@forge/lint": "5.2.1-next.5",
|
|
25
|
+
"@forge/manifest": "7.4.1-next.1",
|
|
26
|
+
"@forge/runtime": "5.8.1",
|
|
27
|
+
"@forge/tunnel": "5.3.0-next.6",
|
|
28
28
|
"@forge/util": "1.4.3",
|
|
29
29
|
"@sentry/node": "7.100.1",
|
|
30
30
|
"ajv": "^8.12.0",
|