@forge/lint 5.16.3-next.0 → 5.16.3-next.2
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 +16 -0
- package/out/lint/linters/permission-linter/verifiers/external-fetch-verifier.d.ts.map +1 -1
- package/out/lint/linters/permission-linter/verifiers/external-fetch-verifier.js +5 -2
- package/out/lint/linters/permission-linter/verifiers/image-url-verifier.d.ts.map +1 -1
- package/out/lint/linters/permission-linter/verifiers/image-url-verifier.js +5 -2
- package/out/lint/linters/verifier-interface.d.ts +1 -0
- package/out/lint/linters/verifier-interface.d.ts.map +1 -1
- package/out/lint/linters/verifier-interface.js +3 -0
- package/out/lint/text/messages.d.ts +2 -0
- package/out/lint/text/messages.d.ts.map +1 -1
- package/out/lint/text/messages.js +2 -0
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @forge/lint
|
|
2
2
|
|
|
3
|
+
## 5.16.3-next.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [c94dead]
|
|
8
|
+
- @forge/cli-shared@8.19.0-next.2
|
|
9
|
+
|
|
10
|
+
## 5.16.3-next.1
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 2120a35: When customer-managed egress is enabled, lint errors that refer to `permissions.external` have been updated to warnings and have an updated message
|
|
15
|
+
- Updated dependencies [296a58d]
|
|
16
|
+
- @forge/manifest@12.4.1-next.0
|
|
17
|
+
- @forge/cli-shared@8.18.1-next.1
|
|
18
|
+
|
|
3
19
|
## 5.16.3-next.0
|
|
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;
|
|
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:
|
|
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;
|
|
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:
|
|
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;
|
|
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;;;;
|
|
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.3-next.
|
|
3
|
+
"version": "5.16.3-next.2",
|
|
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.
|
|
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.
|
|
22
|
+
"@forge/cli-shared": "8.19.0-next.2",
|
|
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",
|