npm package diff

Package: @forge/egress

Versions: 1.2.13 - 1.3.0-next.0

Modified: package/out/egress/egress-filtering-service.js

Index: package/out/egress/egress-filtering-service.js
===================================================================
--- package/out/egress/egress-filtering-service.js
+++ package/out/egress/egress-filtering-service.js
@@ -3,8 +3,11 @@
 exports.EgressFilteringService = void 0;
 const minimatch_1 = require("minimatch");
 const url_parser_1 = require("./url-parser");
 class EgressFilteringService {
+    URLs;
+    wildcardDomains;
+    allowsEverything;
     constructor(allowList) {
         this.URLs = allowList.filter((domainOrURL) => !domainOrURL.startsWith('*')).map((url) => this.parseUrl(url));
         this.wildcardDomains = allowList
             .filter((domainOrURL) => domainOrURL !== '*')

Modified: package/out/egress/url-parser.js

Index: package/out/egress/url-parser.js
===================================================================
--- package/out/egress/url-parser.js
+++ package/out/egress/url-parser.js
@@ -1,10 +1,9 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.parseUrl = void 0;
 function parseUrl(url) {
-    var _a, _b;
-    const protocol = (_b = (_a = url.match(/^(.*?:)/)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : 'https:';
+    const protocol = url.match(/^(.*?:)/)?.[0] ?? 'https:';
     const hostname = url
         .replace(protocol, '')
         .replace(/^\/*/, '')
         .split(/[\?\/]/)[0];

Modified: package/out/egress/utils.js

Index: package/out/egress/utils.js
===================================================================
--- package/out/egress/utils.js
+++ package/out/egress/utils.js
@@ -1,11 +1,11 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.sortAndGroupEgressPermissionsByDomain = void 0;
+exports.getEgressesBasedOnToggles = exports.sortAndGroupEgressPermissionsByDomain = exports.EgressCategory = exports.EgressType = void 0;
 const minimatch_1 = require("minimatch");
 const url_parser_1 = require("./url-parser");
 const sortAndGroupEgressPermissionsByDomain = (egressAddresses) => {
-    if ((egressAddresses === null || egressAddresses === void 0 ? void 0 : egressAddresses.length) === 0) {
+    if (egressAddresses?.length === 0) {
         return [];
     }
     const protocolRegex = /^(.*?:\/\/)/;
     const domains = new Set();
@@ -28,4 +28,40 @@
         return grouped;
     }, []);
 };
 exports.sortAndGroupEgressPermissionsByDomain = sortAndGroupEgressPermissionsByDomain;
+var EgressType;
+(function (EgressType) {
+    EgressType["FetchBackendSide"] = "FETCH_BACKEND_SIDE";
+    EgressType["FetchClientSide"] = "FETCH_CLIENT_SIDE";
+    EgressType["Fonts"] = "FONTS";
+    EgressType["Frames"] = "FRAMES";
+    EgressType["Images"] = "IMAGES";
+    EgressType["Media"] = "MEDIA";
+    EgressType["Navigation"] = "NAVIGATION";
+    EgressType["Scripts"] = "SCRIPTS";
+    EgressType["Styles"] = "STYLES";
+})(EgressType = exports.EgressType || (exports.EgressType = {}));
+var EgressCategory;
+(function (EgressCategory) {
+    EgressCategory["ANALYTICS"] = "analytics";
+})(EgressCategory = exports.EgressCategory || (exports.EgressCategory = {}));
+const getEgressesBasedOnToggles = (input) => {
+    const filteredEgresses = input.egress.filter((egress) => {
+        if (egress.category === EgressCategory.ANALYTICS) {
+            return input.overrides.ALLOW_EGRESS_ANALYTICS !== false;
+        }
+        return true;
+    });
+    const egressByType = new Map();
+    for (const egress of filteredEgresses) {
+        if (!egressByType.has(egress.type)) {
+            egressByType.set(egress.type, egress.addresses);
+        }
+        egressByType.set(egress.type, [...egressByType.get(egress.type), ...egress.addresses]);
+    }
+    return [...egressByType.entries()].map(([type, egresses]) => ({
+        type,
+        addresses: [...new Set(egresses)]
+    }));
+};
+exports.getEgressesBasedOnToggles = getEgressesBasedOnToggles;

Modified: package/package.json

Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@forge/egress",
-  "version": "1.2.13",
+  "version": "1.3.0-next.0",
   "description": "Helpers and utils for egress implementation in Forge apps",
   "main": "out/index.js",
   "author": "Atlassian",
   "license": "UNLICENSED",

Modified: package/out/egress/utils.d.ts.map

Index: package/out/egress/utils.d.ts.map
===================================================================
--- package/out/egress/utils.d.ts.map
+++ package/out/egress/utils.d.ts.map
@@ -1,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,OAAO,EAAE,qCAAqC,EAAE,CAAC"}
\ No newline at end of file
+{"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,QAAA,MAAM,yBAAyB,UAAW;IACxC,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B,KAAG,2BAA2B,EAqB9B,CAAC;AAEF,OAAO,EAAE,qCAAqC,EAAE,yBAAyB,EAAE,CAAC"}
\ No newline at end of file

Modified: package/CHANGELOG.md

Index: package/CHANGELOG.md
===================================================================
--- package/CHANGELOG.md
+++ package/CHANGELOG.md
@@ -1,6 +1,12 @@
 # @forge/egress
 
+## 1.3.0-next.0
+
+### Minor Changes
+
+- 2e198f0: Adding new logic to retrieve egress permissions from a list of duplicates and with override filters
+
 ## 1.2.13
 
 ### Patch Changes

Modified: package/out/egress/utils.d.ts

Index: package/out/egress/utils.d.ts
===================================================================
--- package/out/egress/utils.d.ts
+++ package/out/egress/utils.d.ts
@@ -1,3 +1,31 @@
 declare const sortAndGroupEgressPermissionsByDomain: (egressAddresses: string[]) => Array<string>;
-export { sortAndGroupEgressPermissionsByDomain };
+export declare enum EgressType {
+    FetchBackendSide = "FETCH_BACKEND_SIDE",
+    FetchClientSide = "FETCH_CLIENT_SIDE",
+    Fonts = "FONTS",
+    Frames = "FRAMES",
+    Images = "IMAGES",
+    Media = "MEDIA",
+    Navigation = "NAVIGATION",
+    Scripts = "SCRIPTS",
+    Styles = "STYLES"
+}
+export declare enum EgressCategory {
+    ANALYTICS = "analytics"
+}
+export declare type EgressPermissions = {
+    type: EgressType;
+    addresses: string[];
+    category?: EgressCategory;
+    inScopeEUD?: boolean;
+};
+export declare type EgressPermissionsSimplified = Omit<EgressPermissions, 'inScopeEUD' | 'enabled' | 'category'>;
+interface ConfigOverrides {
+    ALLOW_EGRESS_ANALYTICS?: boolean;
+}
+declare const getEgressesBasedOnToggles: (input: {
+    overrides: ConfigOverrides;
+    egress: EgressPermissions[];
+}) => EgressPermissionsSimplified[];
+export { sortAndGroupEgressPermissionsByDomain, getEgressesBasedOnToggles };
 //# sourceMappingURL=utils.d.ts.map
\ No newline at end of file