@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 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
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "name": "@forge/cli",
3
- "version": "10.0.1-next.10",
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.1-next.10",
9
+ "version": "10.1.0-next.6",
10
10
  "hasInstallScript": true,
11
11
  "license": "UNLICENSED",
12
12
  "dependencies": {
13
- "@forge/bundler": "4.17.0-next.7",
14
- "@forge/cli-shared": "5.0.1-next.3",
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.0-next.4",
17
- "@forge/manifest": "7.4.0-next.3",
18
- "@forge/runtime": "5.8.1-next.0",
19
- "@forge/tunnel": "5.2.2-next.8",
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.0-next.7",
882
- "resolved": "https://registry.npmjs.org/@forge/bundler/-/bundler-4.17.0-next.7.tgz",
883
- "integrity": "sha512-932FBsGwTbjKW7p3Kf2pya0pvRqLD1K3sMdp7kEAAXQFhf5nLqcxtuvOn4MTDvsJ74NMyr8oc7G81POWZf68oQ==",
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.7.1-next.0",
892
+ "@forge/api": "3.8.0-next.0",
893
893
  "@forge/babel-plugin-transform-ui": "1.1.18",
894
- "@forge/cli-shared": "5.0.1-next.3",
895
- "@forge/lint": "5.2.0-next.4",
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.7.1-next.0",
935
- "resolved": "https://registry.npmjs.org/@forge/api/-/api-3.7.1-next.0.tgz",
936
- "integrity": "sha512-0Md1gPfv6s9Bc3eyO4Ftrk0h8CVmG6YGLjsW/nXBV+NCYQG1txIpcjAb/72ZYaVgVK5UoG39sveDnB0q+1apEQ==",
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.1-next.3",
953
- "resolved": "https://registry.npmjs.org/@forge/cli-shared/-/cli-shared-5.0.1-next.3.tgz",
954
- "integrity": "sha512-Wd7HT8ch43C9OUUaSMFXM/HtMaBrtOBtVdMa/+yXohwdJB/X5+LMkh1c5Og7+ZFXGlUWwHQ4tJp8YrYLJPPLFw==",
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.0-next.3",
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.0-next.4",
1008
- "resolved": "https://registry.npmjs.org/@forge/lint/-/lint-5.2.0-next.4.tgz",
1009
- "integrity": "sha512-/aZ4Ye9cd4RsbGVRe9lqy8VwKiV2ylEQOEZ0xJTYC7NtcWQJZbVgX8J3yn47ewzHqPeGZ8s2p6rSWufKjb6eug==",
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.1-next.3",
1011
+ "@forge/cli-shared": "5.1.0-next.4",
1012
1012
  "@forge/egress": "1.2.13",
1013
- "@forge/manifest": "7.4.0-next.3",
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.0-next.3",
1023
- "resolved": "https://registry.npmjs.org/@forge/manifest/-/manifest-7.4.0-next.3.tgz",
1024
- "integrity": "sha512-ZwSJrDRPBSIm2Iu2F9G2j1NXxLpDQQ12PEtMb0H2iE4GOhOMndgg3JN6csbYZ24/yBu+hTY8rp4I0GuA3qoBhw==",
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-next.0",
1041
- "resolved": "https://registry.npmjs.org/@forge/runtime/-/runtime-5.8.1-next.0.tgz",
1042
- "integrity": "sha512-hmHFkJ0aaWVLXoZIVm5Y21pk1mKuSo7bFqj9t+r4vJSArS0x0JVKeTu/OjOMbbo8LGqfXrvSOxPzcdszc7g2+g==",
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.2.2-next.8",
1056
- "resolved": "https://registry.npmjs.org/@forge/tunnel/-/tunnel-5.2.2-next.8.tgz",
1057
- "integrity": "sha512-1Vm2QvlV3je2KSZpR/jaV3fW1Wz7go0xFWex6FEpCac3DmN220GxA27KYF/Szx0PWG2vMgy7BASEQ8f9lpIK+g==",
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.0-next.7",
1060
- "@forge/cli-shared": "5.0.1-next.3",
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-next.0",
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.5.3",
2924
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
2925
- "integrity": "sha1-HPN8hwe5Mr0a8a4iwEMuKs0ZA70= sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
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, LoginCommand, UI } from '@forge/cli-shared';
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 loginCommand;
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, loginCommand: LoginCommand, createEnvironmentCommand: CreateEnvironmentCommand, listEnvironmentCommand: ListEnvironmentCommand, getAppOwnerQuery: GetAppOwnerQuery);
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,EAChB,YAAY,EAEZ,EAAE,EAEH,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,YAAY;IAC7B,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,YAAY,EAAE,YAAY,EAC1B,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"}
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
- loginCommand;
18
+ userRepository;
19
19
  createEnvironmentCommand;
20
20
  listEnvironmentCommand;
21
21
  getAppOwnerQuery;
22
- constructor(ui, credentialStore, cachedConfigService, getAppConfig, loginCommand, createEnvironmentCommand, listEnvironmentCommand, getAppOwnerQuery) {
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.loginCommand = loginCommand;
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.loginCommand.getUser(credentials),
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
- constructor(analyticsService: TunnelAnalyticsService, nodeTunnelService: TunnelService, localTunnelService: TunnelService, dockerTunnelService: DockerTunnelService, tunnelView: TunnelView, configFile: ConfigFile);
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,EAGV,+BAA+B,EAC/B,oBAAoB,EAEpB,aAAa,EAEd,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;gBALV,gBAAgB,EAAE,sBAAsB,EACxC,iBAAiB,EAAE,aAAa,EAChC,kBAAkB,EAAE,aAAa,EACjC,mBAAmB,EAAE,mBAAmB,EACxC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU;IAG5B,GAAG,CAAC,aAAa,EAAE,oBAAoB,EAAE,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvF,OAAO,CAAC,4BAA4B;IAgBvB,eAAe,CAC1B,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,+BAA+B,EACtC,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,IAAI,CAAC;CAmBjB"}
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
- constructor(analyticsService, nodeTunnelService, localTunnelService, dockerTunnelService, tunnelView, configFile) {
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 (0, cli_shared_1.getCredentialStore)(ui).getCredentials();
29
+ const creds = await this.credentialStore.getCredentials();
26
30
  const localTunnelErrorCallback = this.tunnelView.getTunnelErrorHandler(cli_shared_1.exitOnError);
27
- this.tunnelView.dockerPreamble(tunnelOptions.environment);
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,EAInB,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4VvE,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"}
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 credentialStore = (0, cli_shared_1.getCredentialStore)(ui);
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(createGraphQLClient, credentialStore, ui);
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, loginCommand, createEnvironmentCommand, listEnvironmentCommand, getAppOwnerQuery);
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: CommandLineUI, instructionsUrl: string, loginCommand: LoginCommand, { email, token }: LoginCommandOptions): Promise<{
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,+BAA+B,EAIhC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAQ,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtE,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,aAAa,EACjB,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;AAiDD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,QAIlD"}
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(cli_shared_2.Text.login.introText);
19
- ui.info(cli_shared_2.Text.ctrlC);
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(cli_shared_2.Text.login.promptEmail, maybeEmail);
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(cli_shared_2.Text.login.url(instructionsUrl));
26
+ ui.info(cli_shared_1.Text.login.url(instructionsUrl));
28
27
  ui.emptyLine();
29
- token = await ui.promptForSecret(cli_shared_2.Text.login.promptToken);
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 { creds, analytics } = await ui.displayProgress(() => loginCommand.execute(args), cli_shared_2.Text.login.checking, (data) => cli_shared_2.Text.login.success(data.user.name));
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(cli_shared_2.Text.login.nextStep);
34
+ ui.info(cli_shared_1.Text.login.nextStep);
36
35
  return {
37
- creds,
38
- analytics: { ...analytics, anonymousId: (0, anon_user_id_1.getAnonId)(true) }
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(cli_shared_2.Text.login.error) : error;
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(cli_shared_2.Text.login.cmd)
51
- .option('-u, --email <user email>', cli_shared_2.Text.login.optionEmail)
52
- .option('-t, --token <api token>', cli_shared_2.Text.login.optionToken)
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(cli_shared_2.Text.logout.cmd)
59
+ .description(cli_shared_1.Text.logout.cmd)
61
60
  .requireNoAuthentication()
62
61
  .action(async () => {
63
62
  await logoutCommand.execute();
64
- ui.info(cli_shared_2.Text.logout.loggedOut);
63
+ ui.info(cli_shared_1.Text.logout.loggedOut);
65
64
  });
66
65
  }
67
- function registerWhoAmICommand({ cmd, ui, services: { credentialStore }, commands: { loginCommand } }) {
68
- cmd
69
- .command('whoami')
70
- .description(cli_shared_2.Text.whoami.cmd)
71
- .action(async () => {
72
- try {
73
- const credentials = await credentialStore.getCredentials();
74
- const { name, accountId } = await loginCommand.getUser(credentials);
75
- ui.info(cli_shared_2.Text.whoami.success.personalCredentials(credentials.email, name, accountId));
76
- }
77
- catch (error) {
78
- if (error instanceof cli_shared_1.UserNotFoundError) {
79
- if (process.env[cli_shared_1.EMAIL_KEY] && process.env[cli_shared_1.API_TOKEN_KEY]) {
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;IAW7C,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"}
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
- constructor(ui: UI, startTunnelCommand: StartTunnelCommand, tunnelInteractor: TunnelInteractor, configFilePortFindingService: ConfigFilePortFindingService, cachedConfigService: CachedConfigService, analyticsService: TunnelAnalyticsService);
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
- constructor(configFilePortFindingService: ConfigFilePortFindingService, cachedConfigService: CachedConfigService);
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
- constructor(configFilePortFindingService: ConfigFilePortFindingService, cachedConfigService: CachedConfigService, dockerService: DockerService, analyticsService: TunnelAnalyticsService);
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":"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"}
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
- constructor(ui, startTunnelCommand, tunnelInteractor, configFilePortFindingService, cachedConfigService, analyticsService) {
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: this.ngrokConfigPath()
83
+ ngrokConfig
78
84
  });
79
85
  const monitor = await this.tunnelInteractor.watchApp(tunnel, tunnelOptions);
80
- await this.tunnelInteractor.handleUserExitEvent(tunnel.stopFunction, monitor);
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
- constructor(configFilePortFindingService, cachedConfigService) {
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
- ...this.getNgrokConfigEnvironment()
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
- constructor(configFilePortFindingService, cachedConfigService, dockerService, analyticsService) {
175
- super(configFilePortFindingService, cachedConfigService);
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
- options.push('--mount', `type=bind,source=${this.ngrokConfigPath()},target=${PATH_DOCKER_NGROK_CONFIG}`);
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.1-next.10",
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.0-next.7",
22
- "@forge/cli-shared": "5.0.1-next.3",
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.0-next.4",
25
- "@forge/manifest": "7.4.0-next.3",
26
- "@forge/runtime": "5.8.1-next.0",
27
- "@forge/tunnel": "5.2.2-next.8",
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",