@forge/egress 2.1.0 → 2.1.1-experimental-ec29181

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,23 @@
1
1
  # @forge/egress
2
2
 
3
+ ## 2.1.1-experimental-ec29181
4
+
5
+ ### Minor Changes
6
+
7
+ - d7f1cb8: Replacing minimatch package with regexp
8
+
9
+ ## 2.1.1
10
+
11
+ ### Patch Changes
12
+
13
+ - 94243f1: Split development and contribution guidelines
14
+
15
+ ## 2.1.1-next.0
16
+
17
+ ### Patch Changes
18
+
19
+ - 94243f1: Split development and contribution guidelines
20
+
3
21
  ## 2.1.0
4
22
 
5
23
  ### Minor Changes
@@ -6,6 +6,7 @@ export declare class EgressFilteringService {
6
6
  private parseUrl;
7
7
  containsWildCardEgress(): boolean;
8
8
  isValidUrl(url: string): boolean;
9
- private allowedDomain;
9
+ private allowedDomainExact;
10
+ private allowedDomainPattern;
10
11
  }
11
12
  //# sourceMappingURL=egress-filtering-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"egress-filtering-service.d.ts","sourceRoot":"","sources":["../../src/egress/egress-filtering-service.ts"],"names":[],"mappings":"AAGA,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;gBAE/B,SAAS,EAAE,MAAM,EAAE;IAU/B,OAAO,CAAC,QAAQ;IAIT,sBAAsB,IAAI,OAAO;IAKjC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvC,OAAO,CAAC,aAAa;CAKtB"}
1
+ {"version":3,"file":"egress-filtering-service.d.ts","sourceRoot":"","sources":["../../src/egress/egress-filtering-service.ts"],"names":[],"mappings":"AAOA,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAe;IAC/C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;gBAE/B,SAAS,EAAE,MAAM,EAAE;IAc/B,OAAO,CAAC,QAAQ;IAIT,sBAAsB,IAAI,OAAO;IAKjC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IASvC,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,oBAAoB;CAK7B"}
@@ -1,15 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EgressFilteringService = void 0;
4
- const minimatch_1 = require("minimatch");
5
4
  const url_parser_1 = require("./url-parser");
5
+ const utils_1 = require("./utils");
6
6
  class EgressFilteringService {
7
7
  constructor(allowList) {
8
8
  this.URLs = allowList.filter((domainOrURL) => !domainOrURL.startsWith('*')).map((url) => this.parseUrl(url));
9
9
  this.wildcardDomains = allowList
10
10
  .filter((domainOrURL) => domainOrURL !== '*')
11
11
  .map((url) => this.parseUrl(url))
12
- .filter((url) => decodeURIComponent(url.hostname).startsWith('*'));
12
+ .filter((url) => decodeURIComponent(url.hostname).startsWith('*'))
13
+ .map((url) => ({
14
+ ...url,
15
+ regex: (0, utils_1.globToRegex)(decodeURIComponent(url.hostname))
16
+ }));
13
17
  this.allowsEverything = allowList.includes('*');
14
18
  }
15
19
  parseUrl(url) {
@@ -23,12 +27,17 @@ class EgressFilteringService {
23
27
  return true;
24
28
  }
25
29
  const parsedUrl = this.parseUrl(url);
26
- return this.allowedDomain(parsedUrl, this.URLs) || this.allowedDomain(parsedUrl, this.wildcardDomains);
30
+ return this.allowedDomainExact(parsedUrl, this.URLs) || this.allowedDomainPattern(parsedUrl, this.wildcardDomains);
27
31
  }
28
- allowedDomain(domain, allowList) {
32
+ allowedDomainExact(domain, allowList) {
29
33
  return allowList
30
34
  .filter((allowed) => allowed.protocol === domain.protocol)
31
- .some((url) => (0, minimatch_1.minimatch)(domain.hostname, decodeURIComponent(url.hostname)));
35
+ .some((url) => url.hostname === domain.hostname);
36
+ }
37
+ allowedDomainPattern(domain, allowList) {
38
+ return allowList
39
+ .filter((allowed) => allowed.protocol === domain.protocol)
40
+ .some((pattern) => pattern.regex.test(domain.hostname));
32
41
  }
33
42
  }
34
43
  exports.EgressFilteringService = EgressFilteringService;
@@ -1,3 +1,4 @@
1
+ export declare function globToRegex(pattern: string): RegExp;
1
2
  declare const sortAndGroupEgressPermissionsByDomain: (egressAddresses: string[]) => Array<string>;
2
3
  export declare enum EgressType {
3
4
  FetchBackendSide = "FETCH_BACKEND_SIDE",
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/egress/utils.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,qCAAqC,oBAAqB,MAAM,EAAE,KAAG,MAAM,MAAM,CA6BtF,CAAC;AAEF,oBAAY,UAAU;IACpB,gBAAgB,uBAAuB;IACvC,eAAe,sBAAsB;IACrC,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,oBAAY,cAAc;IACxB,SAAS,cAAc;CACxB;AAED,oBAAY,iBAAiB,GAAG;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,oBAAY,2BAA2B,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;AAEzG,UAAU,eAAe;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,eAAe,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,QAAA,MAAM,yBAAyB,UAAW;IACxC,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC9C,KAAG,2BAA2B,EA4B9B,CAAC;AAEF,OAAO,EAAE,qCAAqC,EAAE,yBAAyB,EAAE,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/egress/utils.ts"],"names":[],"mappings":"AAMA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,QAAA,MAAM,qCAAqC,oBAAqB,MAAM,EAAE,KAAG,MAAM,MAAM,CA6BtF,CAAC;AAEF,oBAAY,UAAU;IACpB,gBAAgB,uBAAuB;IACvC,eAAe,sBAAsB;IACrC,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED,oBAAY,cAAc;IACxB,SAAS,cAAc;CACxB;AAED,oBAAY,iBAAiB,GAAG;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,oBAAY,2BAA2B,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;AAEzG,UAAU,eAAe;IACvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,eAAe,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,QAAA,MAAM,yBAAyB,UAAW;IACxC,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,CAAC;CAC9C,KAAG,2BAA2B,EA4B9B,CAAC;AAEF,OAAO,EAAE,qCAAqC,EAAE,yBAAyB,EAAE,CAAC"}
@@ -1,8 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getEgressesBasedOnToggles = exports.sortAndGroupEgressPermissionsByDomain = exports.EgressCategory = exports.EgressType = void 0;
4
- const minimatch_1 = require("minimatch");
3
+ exports.getEgressesBasedOnToggles = exports.sortAndGroupEgressPermissionsByDomain = exports.EgressCategory = exports.EgressType = exports.globToRegex = void 0;
5
4
  const url_parser_1 = require("./url-parser");
5
+ function globToRegex(pattern) {
6
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
7
+ const regexPattern = escaped.replace(/\*/g, '.*');
8
+ return new RegExp(`^${regexPattern}$`);
9
+ }
10
+ exports.globToRegex = globToRegex;
6
11
  const sortAndGroupEgressPermissionsByDomain = (egressAddresses) => {
7
12
  if ((egressAddresses === null || egressAddresses === void 0 ? void 0 : egressAddresses.length) === 0) {
8
13
  return [];
@@ -15,14 +20,14 @@ const sortAndGroupEgressPermissionsByDomain = (egressAddresses) => {
15
20
  const url = (0, url_parser_1.parseUrl)(itemWithProtocol);
16
21
  if (url.hostname.startsWith('*')) {
17
22
  domains.add(url.hostname.substring(2));
18
- wildcardDomains.push(new minimatch_1.Minimatch(url.hostname));
23
+ wildcardDomains.push(globToRegex(url.hostname));
19
24
  }
20
25
  else {
21
26
  domains.add(url.hostname);
22
27
  }
23
28
  });
24
29
  return [...domains].sort().reduce((grouped, domain) => {
25
- if (!wildcardDomains.some((wcd) => wcd.match(domain))) {
30
+ if (!wildcardDomains.some((pattern) => pattern.test(domain))) {
26
31
  grouped.push(domain);
27
32
  }
28
33
  return grouped;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/egress",
3
- "version": "2.1.0",
3
+ "version": "2.1.1-experimental-ec29181",
4
4
  "description": "Helpers and utils for egress implementation in Forge apps",
5
5
  "main": "out/index.js",
6
6
  "author": "Atlassian",
@@ -16,9 +16,6 @@
16
16
  "@types/jest": "^29.5.14",
17
17
  "@types/node": "20.19.1"
18
18
  },
19
- "dependencies": {
20
- "minimatch": "^9.0.5"
21
- },
22
19
  "publishConfig": {
23
20
  "registry": "https://packages.atlassian.com/api/npm/npm-public/"
24
21
  }