@forge/lint 5.16.2 → 5.16.3-next.1

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,21 @@
1
1
  # @forge/lint
2
2
 
3
+ ## 5.16.3-next.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 2120a35: When customer-managed egress is enabled, lint errors that refer to `permissions.external` have been updated to warnings and have an updated message
8
+ - Updated dependencies [296a58d]
9
+ - @forge/manifest@12.4.1-next.0
10
+ - @forge/cli-shared@8.18.1-next.1
11
+
12
+ ## 5.16.3-next.0
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies [5adff35]
17
+ - @forge/cli-shared@8.18.1-next.0
18
+
3
19
  ## 5.16.2
4
20
 
5
21
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"external-fetch-verifier.d.ts","sourceRoot":"","sources":["../../../../../src/lint/linters/permission-linter/verifiers/external-fetch-verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxD,qBAAa,qBAAsB,SAAQ,qBAAsB,YAAW,iBAAiB,CAAC,eAAe,EAAE,CAAC;IAC9G,OAAO,CAAC,sBAAsB,CAAyB;gBAE3C,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAuBnD,SAAS,CAAC,YAAY,IAAI,SAAS;IAItB,OAAO,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAc/E"}
1
+ {"version":3,"file":"external-fetch-verifier.d.ts","sourceRoot":"","sources":["../../../../../src/lint/linters/permission-linter/verifiers/external-fetch-verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxD,qBAAa,qBAAsB,SAAQ,qBAAsB,YAAW,iBAAiB,CAAC,eAAe,EAAE,CAAC;IAC9G,OAAO,CAAC,sBAAsB,CAAyB;gBAE3C,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAuBnD,SAAS,CAAC,YAAY,IAAI,SAAS;IAItB,OAAO,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAiB/E"}
@@ -26,14 +26,17 @@ class ExternalFetchVerifier extends verifier_interface_1.BaseLintIssueVerifier {
26
26
  this.egressFilteringService = new egress_1.EgressFilteringService(collectedUrls.concat(collectedRemotes));
27
27
  }
28
28
  getLintClass() {
29
- return linter_interface_1.LintClass.Error;
29
+ return this.isConfigurableEgressEnabled() ? linter_interface_1.LintClass.Warning : linter_interface_1.LintClass.Error;
30
30
  }
31
31
  async process(fetchCalls) {
32
+ const isConfigurable = this.isConfigurableEgressEnabled();
32
33
  return fetchCalls
33
34
  .filter(({ url }) => !this.egressFilteringService.isValidUrl(url))
34
35
  .map((fetchCall) => ({
35
36
  class: this.getLintClass(),
36
- message: text_1.messages.verifiers.externalFetch.message(fetchCall.url),
37
+ message: isConfigurable
38
+ ? text_1.messages.verifiers.externalFetch.warning(fetchCall.url)
39
+ : text_1.messages.verifiers.externalFetch.message(fetchCall.url),
37
40
  reference: text_1.messages.verifiers.externalFetch.reference,
38
41
  column: fetchCall.column,
39
42
  line: fetchCall.line,
@@ -1 +1 @@
1
- {"version":3,"file":"image-url-verifier.d.ts","sourceRoot":"","sources":["../../../../../src/lint/linters/permission-linter/verifiers/image-url-verifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAiBjD,qBAAa,gBAAiB,SAAQ,qBAAsB,YAAW,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IAClG,OAAO,CAAC,sBAAsB,CAAyB;gBAE3C,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAoBnD,SAAS,CAAC,YAAY,IAAI,SAAS;IAItB,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAcvE"}
1
+ {"version":3,"file":"image-url-verifier.d.ts","sourceRoot":"","sources":["../../../../../src/lint/linters/permission-linter/verifiers/image-url-verifier.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAiBjD,qBAAa,gBAAiB,SAAQ,qBAAsB,YAAW,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IAClG,OAAO,CAAC,sBAAsB,CAAyB;gBAE3C,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAoBnD,SAAS,CAAC,YAAY,IAAI,SAAS;IAItB,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAiBvE"}
@@ -40,14 +40,17 @@ class ImageUrlVerifier extends verifier_interface_1.BaseLintIssueVerifier {
40
40
  this.egressFilteringService = new egress_1.EgressFilteringService(collectedUrls);
41
41
  }
42
42
  getLintClass() {
43
- return linter_interface_1.LintClass.Error;
43
+ return this.isConfigurableEgressEnabled() ? linter_interface_1.LintClass.Warning : linter_interface_1.LintClass.Error;
44
44
  }
45
45
  async process(imageUrls) {
46
+ const isConfigurable = this.isConfigurableEgressEnabled();
46
47
  return imageUrls
47
48
  .filter(({ url }) => !this.egressFilteringService.isValidUrl(url))
48
49
  .map((imageUrl) => ({
49
50
  class: this.getLintClass(),
50
- message: text_1.messages.verifiers.imageUrl.message(imageUrl.url),
51
+ message: isConfigurable
52
+ ? text_1.messages.verifiers.imageUrl.warning(imageUrl.url)
53
+ : text_1.messages.verifiers.imageUrl.message(imageUrl.url),
51
54
  reference: text_1.messages.verifiers.imageUrl.reference,
52
55
  column: imageUrl.column,
53
56
  line: imageUrl.line,
@@ -5,6 +5,7 @@ export declare class BaseLintIssueVerifier {
5
5
  protected manifest: Manifest;
6
6
  constructor(environment: string, manifest: Manifest);
7
7
  protected getLintClass(): LintClass;
8
+ protected isConfigurableEgressEnabled(): boolean;
8
9
  }
9
10
  export interface LintIssueVerifier<T> {
10
11
  process(input: T): Promise<LintResultRule[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"verifier-interface.d.ts","sourceRoot":"","sources":["../../../src/lint/linters/verifier-interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE7D,qBAAa,qBAAqB;IAE9B,SAAS,CAAC,WAAW,EAAE,MAAM;IAC7B,SAAS,CAAC,QAAQ,EAAE,QAAQ;gBADlB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ;IAO9B,SAAS,CAAC,YAAY,IAAI,SAAS;CAGpC;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAC9C"}
1
+ {"version":3,"file":"verifier-interface.d.ts","sourceRoot":"","sources":["../../../src/lint/linters/verifier-interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGhE,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE7D,qBAAa,qBAAqB;IAE9B,SAAS,CAAC,WAAW,EAAE,MAAM;IAC7B,SAAS,CAAC,QAAQ,EAAE,QAAQ;gBADlB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ;IAO9B,SAAS,CAAC,YAAY,IAAI,SAAS;IAInC,SAAS,CAAC,2BAA2B,IAAI,OAAO;CAGjD;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAC9C"}
@@ -13,5 +13,8 @@ class BaseLintIssueVerifier {
13
13
  getLintClass() {
14
14
  return this.environment === cli_shared_1.DEFAULT_ENVIRONMENT_OPTION ? linter_interface_1.LintClass.Warning : linter_interface_1.LintClass.Error;
15
15
  }
16
+ isConfigurableEgressEnabled() {
17
+ return this.manifest?.permissions?.external?.configurable?.enabled === true;
18
+ }
16
19
  }
17
20
  exports.BaseLintIssueVerifier = BaseLintIssueVerifier;
@@ -2,6 +2,7 @@ export declare const messages: {
2
2
  verifiers: {
3
3
  externalFetch: {
4
4
  message: (url: string) => string;
5
+ warning: (url: string) => string;
5
6
  reference: string;
6
7
  };
7
8
  dynamicPropertiesIcon: {
@@ -11,6 +12,7 @@ export declare const messages: {
11
12
  };
12
13
  imageUrl: {
13
14
  message: (url: string) => string;
15
+ warning: (url: string) => string;
14
16
  reference: string;
15
17
  };
16
18
  invokeRemoteKey: {
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/lint/text/messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;2BAGA,MAAM;;;;2BAKN,MAAM;2BAER,MAAM;;;;2BAKJ,MAAM;;;;iCAKA,MAAM;;;;iCAKN,MAAM;;;;8BAKT,MAAM,OAAO,MAAM;;;;+BAKlB,MAAM,UAAU,MAAM,QAAQ,MAAM,GAAG,SAAS,SAAS,MAAM;;;;6BAKjE,MAAM;;;;+BAIJ,MAAM,QAAQ,MAAM,SAAS,MAAM;;;;8BAKpC,MAAM;;;;8BAIN,MAAM;;;;8BAIN,MAAM;;;;;;;;;oCASF,MAAM;;;;;6BAOX,MAAM,WAAW,MAAM;;;;;;;;CAU7C,CAAC"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/lint/text/messages.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ;;;2BAGA,MAAM;2BAEN,MAAM,KAAG,MAAM;;;;2BAKf,MAAM;2BAER,MAAM;;;;2BAKJ,MAAM;2BAEN,MAAM,KAAG,MAAM;;;;iCAKT,MAAM;;;;iCAKN,MAAM;;;;8BAKT,MAAM,OAAO,MAAM;;;;+BAKlB,MAAM,UAAU,MAAM,QAAQ,MAAM,GAAG,SAAS,SAAS,MAAM;;;;6BAKjE,MAAM;;;;+BAIJ,MAAM,QAAQ,MAAM,SAAS,MAAM;;;;8BAKpC,MAAM;;;;8BAIN,MAAM;;;;8BAIN,MAAM;;;;;;;;;oCASF,MAAM;;;;;6BAOX,MAAM,WAAW,MAAM;;;;;;;;CAU7C,CAAC"}
@@ -5,6 +5,7 @@ exports.messages = {
5
5
  verifiers: {
6
6
  externalFetch: {
7
7
  message: (url) => `The domain ${url} is not included in the "permissions.external.fetch" section of your app's manifest.yml file`,
8
+ warning: (url) => `The domain ${url} is not included in the "permissions.external.fetch" section of your app's manifest.yml file. Customer-managed egress is enabled, make sure the URL is configured using the \`@forge/bridge\` methods.`,
8
9
  reference: 'egress-permission-required'
9
10
  },
10
11
  dynamicPropertiesIcon: {
@@ -14,6 +15,7 @@ exports.messages = {
14
15
  },
15
16
  imageUrl: {
16
17
  message: (url) => `The domain ${url} is not included in the "permissions.external.images" section of your app's manifest.yml file`,
18
+ warning: (url) => `The domain ${url} is not included in the "permissions.external.images" section of your app's manifest.yml file. Customer-managed egress is enabled, make sure the URL is configured using the \`@forge/bridge\` methods`,
17
19
  reference: 'egress-permission-required'
18
20
  },
19
21
  invokeRemoteKey: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/lint",
3
- "version": "5.16.2",
3
+ "version": "5.16.3-next.1",
4
4
  "description": "Linting for forge apps",
5
5
  "main": "out/index.js",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "devDependencies": {
13
13
  "@atlassian/xen-test-util": "^4.2.0",
14
- "@forge/api": "^7.1.2",
14
+ "@forge/api": "^7.1.3-next.0",
15
15
  "@types/array.prototype.flatmap": "^1.2.6",
16
16
  "@types/cross-spawn": "^6.0.6",
17
17
  "@types/eslint": "8.56.12",
@@ -19,10 +19,10 @@
19
19
  "eslint-plugin-import": "^2.29.1"
20
20
  },
21
21
  "dependencies": {
22
- "@forge/cli-shared": "8.18.0",
22
+ "@forge/cli-shared": "8.18.1-next.1",
23
23
  "@forge/csp": "5.6.1",
24
24
  "@forge/egress": "2.3.2",
25
- "@forge/manifest": "12.4.0",
25
+ "@forge/manifest": "12.4.1-next.0",
26
26
  "@typescript-eslint/typescript-estree": "^5.62.0",
27
27
  "array.prototype.flatmap": "^1.3.3",
28
28
  "@atlassian/atlassian-openapi": "^1.0.6",