@forge/api
6.4.2-next.0-experimental-0c74a4b6.4.2-next.1
~
Modified (4 files)
Index: package/out/api/permissions.js
===================================================================
--- package/out/api/permissions.js
+++ package/out/api/permissions.js
@@ -2,9 +2,8 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.permissions = exports.canLoadResource = exports.canFetchFrom = exports.hasScope = exports.hasPermission = exports.extractUrlString = void 0;
const runtime_1 = require("./runtime");
const errors_1 = require("./errors");
-const minimatch_1 = require("minimatch");
const egress_1 = require("@forge/egress");
function extractUrlString(url) {
if (typeof url === 'string') {
return url;
@@ -14,12 +13,8 @@
}
return url.remote;
}
exports.extractUrlString = extractUrlString;
-function normalizeUrl(url) {
- const { protocol, hostname } = (0, egress_1.parseUrl)(url);
- return `${protocol}//${hostname}`;
-}
function wrapInSyncMetrics(options, cb) {
const metrics = (0, runtime_1.__getRuntime)().metrics;
metrics.counter(options.name, options.tags).incr();
return cb();
@@ -36,16 +31,17 @@
}
}
return undefined;
};
-const getMissingUrls = (requiredUrls, currentlyGrantedUrls) => {
+const getMissingUrls = (requiredUrls, currentlyGrantedUrls, useCSP) => {
+ const allowList = currentlyGrantedUrls.map((url) => extractUrlString(url));
+ const egressFilter = new egress_1.EgressFilteringService(allowList);
const missingUrls = requiredUrls.filter((requiredUrl) => {
- const normalizedRequiredUrl = normalizeUrl(extractUrlString(requiredUrl));
- const isUrlAlreadyGranted = currentlyGrantedUrls.some((currentGrantedUrl) => {
- const normalizedGrantedUrl = normalizeUrl(extractUrlString(currentGrantedUrl));
- return (0, minimatch_1.minimatch)(normalizedRequiredUrl, normalizedGrantedUrl);
- });
- return !isUrlAlreadyGranted;
+ const urlString = extractUrlString(requiredUrl);
+ if (useCSP) {
+ return !egressFilter.isValidUrlCSP(urlString);
+ }
+ return !egressFilter.isValidUrl(urlString);
});
return missingUrls;
};
const VALID_REQUIREMENT_KEYS = ['scopes', 'external'];
@@ -85,9 +81,9 @@
Object.keys(requiredFetch).forEach((fetchType) => {
const requiredUrls = requiredFetch[fetchType];
if (!requiredUrls || !Array.isArray(requiredUrls) || requiredUrls.length === 0)
return;
- const missingUrls = getMissingUrls(requiredUrls, currentlyGrantedFetch?.[fetchType] ?? []);
+ const missingUrls = getMissingUrls(requiredUrls, currentlyGrantedFetch?.[fetchType] ?? [], fetchType === 'client');
if (missingUrls.length) {
missingFetch[fetchType] = missingUrls.map(extractUrlString);
}
});
@@ -109,9 +105,9 @@
const externalUrls = requiredExternal[type];
if (!externalUrls || !Array.isArray(externalUrls) || externalUrls.length === 0) {
return;
}
- const missingUrls = getMissingUrls(externalUrls, currentGrantedExternal[type] || []);
+ const missingUrls = getMissingUrls(externalUrls, currentGrantedExternal[type] || [], true);
if (missingUrls.length > 0) {
if (!missingExternal) {
missingExternal = {};
} Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
{
"name": "@forge/api",
- "version": "6.4.2-next.0-experimental-0c74a4b",
+ "version": "6.4.2-next.1",
"description": "Forge API methods",
"author": "Atlassian",
"license": "SEE LICENSE IN LICENSE.txt",
"main": "out/index.js",
@@ -25,14 +25,13 @@
"nock": "13.5.6"
},
"dependencies": {
"@forge/auth": "0.0.9",
- "@forge/egress": "2.3.0",
+ "@forge/egress": "2.3.1-next.0",
"@forge/i18n": "0.0.7",
- "@forge/manifest": "^11.3.1-next.1-experimental-0c74a4b",
+ "@forge/manifest": "^11.3.1-next.0",
"@forge/storage": "2.0.3",
- "headers-utils": "^3.0.2",
- "minimatch": "^9.0.5"
+ "headers-utils": "^3.0.2"
},
"publishConfig": {
"registry": "https://packages.atlassian.com/api/npm/npm-public/"
} Index: package/out/api/permissions.d.ts.map
===================================================================
--- package/out/api/permissions.d.ts.map
+++ package/out/api/permissions.d.ts.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/api/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,sBAAsB,EAAE,kBAAkB,EAAgB,MAAM,WAAW,CAAC;AAGpG,OAAO,EAAU,QAAQ,EAAS,MAAM,iBAAiB,CAAC;AAM1D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAQ/F;AA8BD,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAKvC,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAOnC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAsMD,eAAO,MAAM,aAAa,iBAAkB,QAAQ,sBAAsB,CAAC,KAAG,gBAE7E,CAAC;AAiEF,eAAO,MAAM,QAAQ,UAAW,MAAM,KAAG,OAKxC,CAAC;AAyBF,eAAO,MAAM,YAAY,SAAU,SAAS,GAAG,QAAQ,OAAO,MAAM,KAAG,OAKtE,CAAC;AAyBF,eAAO,MAAM,eAAe,SAAU,QAAQ,MAAM,QAAQ,EAAE,OAAO,CAAC,OAAO,MAAM,KAAG,OAKrF,CAAC;AAKF,eAAO,MAAM,WAAW;kCAzIoB,QAAQ,sBAAsB,CAAC,KAAG,gBAAgB;sBAmE9D,MAAM,KAAG,OAAO;yBA8Bb,SAAS,GAAG,QAAQ,OAAO,MAAM,KAAG,OAAO;4BA8BxC,QAAQ,MAAM,QAAQ,EAAE,OAAO,CAAC,OAAO,MAAM,KAAG,OAAO;CAe5F,CAAC"}
\ No newline at end of file
+{"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/api/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,sBAAsB,EAAE,kBAAkB,EAAgB,MAAM,WAAW,CAAC;AAEpG,OAAO,EAAU,QAAQ,EAAS,MAAM,iBAAiB,CAAC;AAM1D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAQ/F;AAeD,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAKvC,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAOnC,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAmND,eAAO,MAAM,aAAa,iBAAkB,QAAQ,sBAAsB,CAAC,KAAG,gBAE7E,CAAC;AAiEF,eAAO,MAAM,QAAQ,UAAW,MAAM,KAAG,OAKxC,CAAC;AAyBF,eAAO,MAAM,YAAY,SAAU,SAAS,GAAG,QAAQ,OAAO,MAAM,KAAG,OAKtE,CAAC;AAyBF,eAAO,MAAM,eAAe,SAAU,QAAQ,MAAM,QAAQ,EAAE,OAAO,CAAC,OAAO,MAAM,KAAG,OAKrF,CAAC;AAKF,eAAO,MAAM,WAAW;kCAzIoB,QAAQ,sBAAsB,CAAC,KAAG,gBAAgB;sBAmE9D,MAAM,KAAG,OAAO;yBA8Bb,SAAS,GAAG,QAAQ,OAAO,MAAM,KAAG,OAAO;4BA8BxC,QAAQ,MAAM,QAAQ,EAAE,OAAO,CAAC,OAAO,MAAM,KAAG,OAAO;CAe5F,CAAC"}
\ No newline at end of file Index: package/CHANGELOG.md
===================================================================
--- package/CHANGELOG.md
+++ package/CHANGELOG.md
@@ -1,13 +1,13 @@
# @forge/api
-## 6.4.2-next.0-experimental-0c74a4b
+## 6.4.2-next.1
### Patch Changes
-- Updated dependencies [cd0a085]
-- Updated dependencies [8b66e6f]
- - @forge/[email protected]
+- 16e7d61: Fixed bug when doing checking for CSPs
+- Updated dependencies [16e7d61]
+ - @forge/[email protected]
## 6.4.2-next.0
### Patch Changes