@forge/lint
5.16.3-next.05.16.3-next.1
~
Modified (12 files)
Index: package/out/lint/linters/permission-linter/verifiers/external-fetch-verifier.js
===================================================================
--- package/out/lint/linters/permission-linter/verifiers/external-fetch-verifier.js
+++ package/out/lint/linters/permission-linter/verifiers/external-fetch-verifier.js
@@ -25,16 +25,19 @@
.filter((x) => typeof x === 'string');
this.egressFilteringService = new egress_1.EgressFilteringService(collectedUrls.concat(collectedRemotes));
}
getLintClass() {
- return linter_interface_1.LintClass.Error;
+ return this.isConfigurableEgressEnabled() ? linter_interface_1.LintClass.Warning : linter_interface_1.LintClass.Error;
}
async process(fetchCalls) {
+ const isConfigurable = this.isConfigurableEgressEnabled();
return fetchCalls
.filter(({ url }) => !this.egressFilteringService.isValidUrl(url))
.map((fetchCall) => ({
class: this.getLintClass(),
- message: text_1.messages.verifiers.externalFetch.message(fetchCall.url),
+ message: isConfigurable
+ ? text_1.messages.verifiers.externalFetch.warning(fetchCall.url)
+ : text_1.messages.verifiers.externalFetch.message(fetchCall.url),
reference: text_1.messages.verifiers.externalFetch.reference,
column: fetchCall.column,
line: fetchCall.line,
metadata: { Index: package/out/lint/linters/permission-linter/verifiers/image-url-verifier.js
===================================================================
--- package/out/lint/linters/permission-linter/verifiers/image-url-verifier.js
+++ package/out/lint/linters/permission-linter/verifiers/image-url-verifier.js
@@ -39,16 +39,19 @@
].filter((item) => typeof item === 'string');
this.egressFilteringService = new egress_1.EgressFilteringService(collectedUrls);
}
getLintClass() {
- return linter_interface_1.LintClass.Error;
+ return this.isConfigurableEgressEnabled() ? linter_interface_1.LintClass.Warning : linter_interface_1.LintClass.Error;
}
async process(imageUrls) {
+ const isConfigurable = this.isConfigurableEgressEnabled();
return imageUrls
.filter(({ url }) => !this.egressFilteringService.isValidUrl(url))
.map((imageUrl) => ({
class: this.getLintClass(),
- message: text_1.messages.verifiers.imageUrl.message(imageUrl.url),
+ message: isConfigurable
+ ? text_1.messages.verifiers.imageUrl.warning(imageUrl.url)
+ : text_1.messages.verifiers.imageUrl.message(imageUrl.url),
reference: text_1.messages.verifiers.imageUrl.reference,
column: imageUrl.column,
line: imageUrl.line,
metadata: { Index: package/out/lint/text/messages.js
===================================================================
--- package/out/lint/text/messages.js
+++ package/out/lint/text/messages.js
@@ -4,8 +4,9 @@
exports.messages = {
verifiers: {
externalFetch: {
message: (url) => `The domain ${url} is not included in the "permissions.external.fetch" section of your app's manifest.yml file`,
+ 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.`,
reference: 'egress-permission-required'
},
dynamicPropertiesIcon: {
message: (url) => `The domain ${url} is not included in the "permissions.external.images" section of your app's manifest.yml file`,
@@ -13,8 +14,9 @@
reference: 'egress-permission-required'
},
imageUrl: {
message: (url) => `The domain ${url} is not included in the "permissions.external.images" section of your app's manifest.yml file`,
+ 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`,
reference: 'egress-permission-required'
},
invokeRemoteKey: {
message: (remoteKey) => `The remote key "${remoteKey}" does not exist in the "remotes" section of your app's manifest.yml file`, Index: package/out/lint/linters/verifier-interface.js
===================================================================
--- package/out/lint/linters/verifier-interface.js
+++ package/out/lint/linters/verifier-interface.js
@@ -12,6 +12,9 @@
}
getLintClass() {
return this.environment === cli_shared_1.DEFAULT_ENVIRONMENT_OPTION ? linter_interface_1.LintClass.Warning : linter_interface_1.LintClass.Error;
}
+ isConfigurableEgressEnabled() {
+ return this.manifest?.permissions?.external?.configurable?.enabled === true;
+ }
}
exports.BaseLintIssueVerifier = BaseLintIssueVerifier; Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
{
"name": "@forge/lint",
- "version": "5.16.3-next.0",
+ "version": "5.16.3-next.1",
"description": "Linting for forge apps",
"main": "out/index.js",
"license": "SEE LICENSE IN LICENSE.txt",
"scripts": {
@@ -10,20 +10,20 @@
"clean": "rm -rf ./out && rm -f tsconfig.tsbuildinfo"
},
"devDependencies": {
"@atlassian/xen-test-util": "^4.2.0",
- "@forge/api": "^7.1.2",
+ "@forge/api": "^7.1.3-next.0",
"@types/array.prototype.flatmap": "^1.2.6",
"@types/cross-spawn": "^6.0.6",
"@types/eslint": "8.56.12",
"@types/node-fetch": "^2.6.12",
"eslint-plugin-import": "^2.29.1"
},
"dependencies": {
- "@forge/cli-shared": "8.18.1-next.0",
+ "@forge/cli-shared": "8.18.1-next.1",
"@forge/csp": "5.6.1",
"@forge/egress": "2.3.2",
- "@forge/manifest": "12.4.0",
+ "@forge/manifest": "12.4.1-next.0",
"@typescript-eslint/typescript-estree": "^5.62.0",
"array.prototype.flatmap": "^1.3.3",
"@atlassian/atlassian-openapi": "^1.0.6",
"cross-spawn": "^7.0.6", Index: package/out/lint/linters/permission-linter/verifiers/external-fetch-verifier.d.ts.map
===================================================================
--- package/out/lint/linters/permission-linter/verifiers/external-fetch-verifier.d.ts.map
+++ package/out/lint/linters/permission-linter/verifiers/external-fetch-verifier.d.ts.map
@@ -1,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"}
\ No newline at end of file
+{"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"}
\ No newline at end of file Index: package/out/lint/linters/permission-linter/verifiers/image-url-verifier.d.ts.map
===================================================================
--- package/out/lint/linters/permission-linter/verifiers/image-url-verifier.d.ts.map
+++ package/out/lint/linters/permission-linter/verifiers/image-url-verifier.d.ts.map
@@ -1,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"}
\ No newline at end of file
+{"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"}
\ No newline at end of file Index: package/out/lint/text/messages.d.ts.map
===================================================================
--- package/out/lint/text/messages.d.ts.map
+++ package/out/lint/text/messages.d.ts.map
@@ -1,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"}
\ No newline at end of file
+{"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"}
\ No newline at end of file Index: package/out/lint/linters/verifier-interface.d.ts.map
===================================================================
--- package/out/lint/linters/verifier-interface.d.ts.map
+++ package/out/lint/linters/verifier-interface.d.ts.map
@@ -1,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"}
\ No newline at end of file
+{"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"}
\ No newline at end of file File too large for inline diff
Index: package/out/lint/text/messages.d.ts
===================================================================
--- package/out/lint/text/messages.d.ts
+++ package/out/lint/text/messages.d.ts
@@ -1,8 +1,9 @@
export declare const messages: {
verifiers: {
externalFetch: {
message: (url: string) => string;
+ warning: (url: string) => string;
reference: string;
};
dynamicPropertiesIcon: {
message: (url: string) => string;
@@ -10,8 +11,9 @@
reference: string;
};
imageUrl: {
message: (url: string) => string;
+ warning: (url: string) => string;
reference: string;
};
invokeRemoteKey: {
message: (remoteKey: string) => string; Index: package/out/lint/linters/verifier-interface.d.ts
===================================================================
--- package/out/lint/linters/verifier-interface.d.ts
+++ package/out/lint/linters/verifier-interface.d.ts
@@ -4,8 +4,9 @@
protected environment: string;
protected manifest: Manifest;
constructor(environment: string, manifest: Manifest);
protected getLintClass(): LintClass;
+ protected isConfigurableEgressEnabled(): boolean;
}
export interface LintIssueVerifier<T> {
process(input: T): Promise<LintResultRule[]>;
}