@forge/bridge 5.13.1-next.3 → 5.14.0-experimental-43cfec4

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,40 @@
1
1
  # @forge/bridge
2
2
 
3
+ ## 5.14.0-experimental-43cfec4
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [43cfec4]
8
+ - @forge/manifest@12.2.0-experimental-43cfec4
9
+
10
+ ## 5.14.0
11
+
12
+ ### Minor Changes
13
+
14
+ - Updated Feature flags client SDK to remove dependency on Statsig
15
+ - 16a4b01: Updated SDK to throw type error
16
+
17
+ ### Patch Changes
18
+
19
+ - f513085: Fix content id for embedded macros createAdfRendererIframeProps
20
+ - Updated dependencies [ad5a470]
21
+ - Updated dependencies [c70bd69]
22
+ - Updated dependencies [3a792a2]
23
+ - Updated dependencies [4210da0]
24
+ - @forge/manifest@12.2.0
25
+
26
+ ## 5.14.0-next.5
27
+
28
+ ### Minor Changes
29
+
30
+ - Updated Feature flags client SDK to remove dependency on Statsig
31
+
32
+ ## 5.14.0-next.4
33
+
34
+ ### Minor Changes
35
+
36
+ - 16a4b01: Updated SDK to throw type error
37
+
3
38
  ## 5.13.1-next.3
4
39
 
5
40
  ### Patch Changes
@@ -0,0 +1,9 @@
1
+ import { InitFeatureFlagsResponse } from './types';
2
+ export declare class Evaluator {
3
+ private results;
4
+ constructor(results: InitFeatureFlagsResponse);
5
+ checkFlag(flagName: string, defaultValue: boolean): any;
6
+ shutDown(): void;
7
+ private getHashedValue;
8
+ }
9
+ //# sourceMappingURL=evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/featureFlags/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAEnD,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAA2B;gBAE9B,OAAO,EAAE,wBAAwB;IAItC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO;IAkCjD,QAAQ;IAKf,OAAO,CAAC,cAAc;CAoBvB"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Evaluator = void 0;
4
+ class Evaluator {
5
+ constructor(results) {
6
+ this.results = results;
7
+ }
8
+ checkFlag(flagName, defaultValue) {
9
+ if (!this.results || !this.results.feature_flags) {
10
+ return defaultValue;
11
+ }
12
+ const featureFlags = this.results.feature_flags;
13
+ let hashedValue = '';
14
+ try {
15
+ hashedValue = this.getHashedValue(flagName);
16
+ }
17
+ catch (err) {
18
+ console.error('Unexpected error occurred while evaluating flag ', err);
19
+ return defaultValue;
20
+ }
21
+ if (!hashedValue) {
22
+ return defaultValue;
23
+ }
24
+ const evaluatedFlag = featureFlags[hashedValue];
25
+ if (evaluatedFlag) {
26
+ if (evaluatedFlag.disabled) {
27
+ return false;
28
+ }
29
+ return evaluatedFlag.value;
30
+ }
31
+ return defaultValue;
32
+ }
33
+ shutDown() {
34
+ this.results = undefined;
35
+ }
36
+ getHashedValue(flagName) {
37
+ if (typeof flagName !== 'string') {
38
+ return '';
39
+ }
40
+ const input = flagName.trim();
41
+ if (input.length === 0) {
42
+ return '';
43
+ }
44
+ let hash = 5381;
45
+ for (let i = 0; i < input.length; i += 1) {
46
+ const charCode = input.charCodeAt(i);
47
+ hash = (hash << 5) + hash + charCode;
48
+ hash |= 0;
49
+ }
50
+ return (hash >>> 0).toString();
51
+ }
52
+ }
53
+ exports.Evaluator = Evaluator;
@@ -1,3 +1,3 @@
1
- import { FeatureFlagEventTrackPayload } from '../types';
1
+ import { FeatureFlagEventTrackPayload } from './types';
2
2
  export declare const trackFeatureFlagEvent: <T>(payload: FeatureFlagEventTrackPayload) => Promise<T>;
3
3
  //# sourceMappingURL=featureFlagEvents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"featureFlagEvents.d.ts","sourceRoot":"","sources":["../../src/featureFlags/featureFlagEvents.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAwB,MAAM,UAAU,CAAC;AA8B9E,eAAO,MAAM,qBAAqB,0DAKjC,CAAC"}
1
+ {"version":3,"file":"featureFlagEvents.d.ts","sourceRoot":"","sources":["../../src/featureFlags/featureFlagEvents.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,4BAA4B,EAAwB,MAAM,SAAS,CAAC;AA6B7E,eAAO,MAAM,qBAAqB,0DAKjC,CAAC"}
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.trackFeatureFlagEvent = void 0;
4
4
  const bridge_1 = require("../bridge");
5
5
  const errors_1 = require("../errors");
6
- const types_1 = require("../types");
7
6
  const utils_1 = require("../utils");
7
+ const types_1 = require("./types");
8
8
  const maxOps = 500;
9
9
  const intervalInMs = 1000 * 25;
10
10
  const callBridge = (0, bridge_1.getCallBridge)();
@@ -1,33 +1,12 @@
1
- import { FeatureFlagEnvironment } from '../types';
2
- export interface ForgeFeatureFlagConfig {
3
- environment?: FeatureFlagEnvironment;
4
- }
5
- export interface FeatureFlagUser {
6
- userId?: string;
7
- custom?: Record<string, string | number>;
8
- attributes?: {
9
- installContext?: string;
10
- accountId?: string;
11
- appVersion?: string;
12
- license?: string;
13
- capabilitySet?: string;
14
- };
15
- identifiers?: {
16
- installContext?: string;
17
- accountId?: string;
18
- };
19
- }
20
- export declare class ForgeFeatureFlags {
1
+ import { FeatureFlagUser, ForgeFeatureFlagConfig } from './types';
2
+ export declare class FeatureFlags {
21
3
  private initialized;
22
- private client;
23
- private dataAdapter;
4
+ private evaluator;
24
5
  private eventProps;
25
- private readonly CLIENT_KEY;
26
6
  initialize(user: FeatureFlagUser, config?: ForgeFeatureFlagConfig): Promise<void>;
27
- checkFlag(flagName: string): boolean;
28
- shutdown(): Promise<void>;
7
+ checkFlag(flagName: string, defaultValue?: boolean): boolean;
8
+ shutdown(): void;
29
9
  isInitialized(): boolean;
30
- private convertUser;
31
10
  private sendCheckFlagEvent;
32
11
  }
33
12
  //# sourceMappingURL=featureFlags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"featureFlags.d.ts","sourceRoot":"","sources":["../../src/featureFlags/featureFlags.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAGlB,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,sBAAsB,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACzC,UAAU,CAAC,EAAE;QACX,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,WAAW,CAAC,EAAE;QACZ,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAID,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuC;IAKrD,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB3F,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAa9B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,aAAa;IAIpB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,kBAAkB;CAa3B"}
1
+ {"version":3,"file":"featureFlags.d.ts","sourceRoot":"","sources":["../../src/featureFlags/featureFlags.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,eAAe,EACf,sBAAsB,EAEvB,MAAM,SAAS,CAAC;AAEjB,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,UAAU,CAAkC;IAKvC,UAAU,CACrB,IAAI,EAAE,eAAe,EACrB,MAAM,GAAE,sBAAuD,GAC9D,OAAO,CAAC,IAAI,CAAC;IAgBT,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO;IAa1D,QAAQ;IAQR,aAAa;IAIpB,OAAO,CAAC,kBAAkB;CAa3B"}
@@ -1,64 +1,42 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ForgeFeatureFlags = void 0;
4
- const js_client_1 = require("@statsig/js-client");
5
- const dataAdapter_1 = require("./dataAdapter");
6
- const types_1 = require("../types");
3
+ exports.FeatureFlags = void 0;
4
+ const evaluator_1 = require("./evaluator");
7
5
  const featureFlagEvents_1 = require("./featureFlagEvents");
8
- class ForgeFeatureFlags {
6
+ const initFeatureFlags_1 = require("./initFeatureFlags");
7
+ const types_1 = require("./types");
8
+ class FeatureFlags {
9
9
  constructor() {
10
10
  this.initialized = false;
11
- this.client = null;
12
- this.dataAdapter = null;
13
11
  this.eventProps = {};
14
- this.CLIENT_KEY = 'client-forge-internal-key';
15
12
  }
16
- async initialize(user, config = {}) {
17
- var _a;
13
+ async initialize(user, config = { environment: 'development' }) {
18
14
  if (this.isInitialized()) {
19
15
  return;
20
16
  }
21
- this.dataAdapter = new dataAdapter_1.ForgeDataAdapter();
22
- const options = {
23
- environment: { tier: config.environment || 'development' },
24
- disableEvaluationMemoization: false,
25
- loggingEnabled: js_client_1.LoggingEnabledOption.disabled,
26
- logLevel: js_client_1.LogLevel.None,
27
- dataAdapter: this.dataAdapter
28
- };
29
- this.eventProps.environment = (_a = options.environment) === null || _a === void 0 ? void 0 : _a.tier;
30
- this.client = new js_client_1.StatsigClient(this.CLIENT_KEY, this.convertUser(user), options);
31
- await this.client.initializeAsync();
17
+ this.eventProps.environment = config.environment;
18
+ const result = await (0, initFeatureFlags_1.initFeatureFlags)({ user, config });
32
19
  this.initialized = true;
20
+ this.evaluator = new evaluator_1.Evaluator(result);
33
21
  }
34
- checkFlag(flagName) {
35
- if (!this.isInitialized() || !this.client) {
22
+ checkFlag(flagName, defaultValue = false) {
23
+ if (!this.isInitialized() || !this.evaluator) {
36
24
  this.sendCheckFlagEvent(flagName, false);
37
- throw new Error('ForgeFeatureFlags not initialized. Call initialize() first.');
25
+ throw new Error('FeatureFlags not initialized. Call initialize() first.');
38
26
  }
39
27
  this.sendCheckFlagEvent(flagName, true);
40
- return this.client.checkGate(flagName, { disableExposureLog: true });
28
+ return this.evaluator.checkFlag(flagName, defaultValue);
41
29
  }
42
- async shutdown() {
43
- if (!this.isInitialized() || !this.client) {
30
+ shutdown() {
31
+ if (!this.isInitialized()) {
44
32
  return;
45
33
  }
46
- await this.client.shutdown();
47
- if (this.dataAdapter) {
48
- await this.dataAdapter.shutdown();
49
- }
50
34
  this.initialized = false;
35
+ this.evaluator.shutDown();
51
36
  }
52
37
  isInitialized() {
53
38
  return this.initialized;
54
39
  }
55
- convertUser(user) {
56
- return {
57
- userID: user.userId,
58
- custom: { ...(user.custom || {}), ...(user.attributes || {}) },
59
- customIDs: user.identifiers || {}
60
- };
61
- }
62
40
  sendCheckFlagEvent(flagName, success) {
63
41
  const props = {
64
42
  type: types_1.FeatureFlagEventType.CHECKFLAG,
@@ -72,4 +50,4 @@ class ForgeFeatureFlags {
72
50
  void (0, featureFlagEvents_1.trackFeatureFlagEvent)(props);
73
51
  }
74
52
  }
75
- exports.ForgeFeatureFlags = ForgeFeatureFlags;
53
+ exports.FeatureFlags = FeatureFlags;
@@ -1,2 +1,3 @@
1
- export { ForgeFeatureFlags, FeatureFlagUser, ForgeFeatureFlagConfig } from './featureFlags';
1
+ export { FeatureFlags } from './featureFlags';
2
+ export { FeatureFlagUser, ForgeFeatureFlagConfig } from './types';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/featureFlags/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/featureFlags/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ForgeFeatureFlags = void 0;
3
+ exports.FeatureFlags = void 0;
4
4
  var featureFlags_1 = require("./featureFlags");
5
- Object.defineProperty(exports, "ForgeFeatureFlags", { enumerable: true, get: function () { return featureFlags_1.ForgeFeatureFlags; } });
5
+ Object.defineProperty(exports, "FeatureFlags", { enumerable: true, get: function () { return featureFlags_1.FeatureFlags; } });
@@ -1,3 +1,3 @@
1
- import { InitFeatureFlagsPayload } from '../types';
1
+ import { InitFeatureFlagsPayload } from './types';
2
2
  export declare const initFeatureFlags: <T>(payload: InitFeatureFlagsPayload) => Promise<T>;
3
3
  //# sourceMappingURL=initFeatureFlags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initFeatureFlags.d.ts","sourceRoot":"","sources":["../../src/featureFlags/initFeatureFlags.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAA4B,MAAM,UAAU,CAAC;AAwB7E,eAAO,MAAM,gBAAgB,qDAK5B,CAAC"}
1
+ {"version":3,"file":"initFeatureFlags.d.ts","sourceRoot":"","sources":["../../src/featureFlags/initFeatureFlags.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAA4B,MAAM,SAAS,CAAC;AAuB5E,eAAO,MAAM,gBAAgB,qDAK5B,CAAC"}
@@ -8,7 +8,7 @@ const maxOps = 500;
8
8
  const intervalInMs = 1000 * 25;
9
9
  const callBridge = (0, bridge_1.getCallBridge)();
10
10
  const validatePayload = (payload) => {
11
- if (!payload || !payload.user) {
11
+ if (!payload || !payload.user || !payload.config) {
12
12
  throw new errors_1.BridgeAPIError('Missing required parameters. Parameter user is required in the payload.');
13
13
  }
14
14
  if (Object.values(payload).some((val) => typeof val === 'function')) {
@@ -17,6 +17,6 @@ const validatePayload = (payload) => {
17
17
  };
18
18
  const _initFeatureFlags = (payload) => {
19
19
  validatePayload(payload);
20
- return callBridge('initFeatureFlags', { user: payload.user });
20
+ return callBridge('initFeatureFlags', { user: payload.user, config: payload.config });
21
21
  };
22
22
  exports.initFeatureFlags = (0, utils_1.withRateLimiter)(_initFeatureFlags, maxOps, intervalInMs, `Feature flags initialisation calls are rate limited at ${maxOps}req/${intervalInMs / 1000}s`);
@@ -0,0 +1,29 @@
1
+ export interface ForgeFeatureFlagConfig {
2
+ environment: FeatureFlagEnvironment;
3
+ }
4
+ export interface FeatureFlagUser {
5
+ attributes?: Record<string, string | number>;
6
+ identifiers?: {
7
+ installContext?: string;
8
+ accountId?: string;
9
+ };
10
+ }
11
+ export declare type InitFeatureFlagsPayload = {
12
+ user: FeatureFlagUser;
13
+ config: ForgeFeatureFlagConfig;
14
+ };
15
+ export declare type InitFeatureFlagsResponse = Record<string, any> | void;
16
+ export declare enum FeatureFlagEventType {
17
+ CHECKFLAG = "checkFlag"
18
+ }
19
+ export declare type FeatureFlagEnvironment = 'development' | 'staging' | 'production';
20
+ export declare type FeatureFlagEventProperties = {
21
+ environment?: FeatureFlagEnvironment;
22
+ success?: boolean;
23
+ name?: string;
24
+ };
25
+ export declare type FeatureFlagEventTrackPayload = {
26
+ type: FeatureFlagEventType;
27
+ properties: FeatureFlagEventProperties;
28
+ };
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/featureFlags/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAC7C,WAAW,CAAC,EAAE;QACZ,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,oBAAY,uBAAuB,GAAG;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,sBAAsB,CAAC;CAChC,CAAC;AAEF,oBAAY,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;AAElE,oBAAY,oBAAoB;IAC9B,SAAS,cAAc;CACxB;AAED,oBAAY,sBAAsB,GAAG,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;AAE9E,oBAAY,0BAA0B,GAAG;IACvC,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,oBAAY,4BAA4B,GAAG;IACzC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,UAAU,EAAE,0BAA0B,CAAC;CACxC,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FeatureFlagEventType = void 0;
4
+ var FeatureFlagEventType;
5
+ (function (FeatureFlagEventType) {
6
+ FeatureFlagEventType["CHECKFLAG"] = "checkFlag";
7
+ })(FeatureFlagEventType = exports.FeatureFlagEventType || (exports.FeatureFlagEventType = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"permissionsUtil.d.ts","sourceRoot":"","sources":["../../src/permissions/permissionsUtil.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAoBnD,QAAA,MAAM,cAAc,sEAAuE,CAAC;AAC5F,oBAAY,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAK3D,QAAA,MAAM,WAAW,gCAAiC,CAAC;AACnD,oBAAY,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAKrD,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE;YACN,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAKD,oBAAY,kBAAkB,GAAG,sBAAsB,CAAC;AAKxD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACpC;AAKD,MAAM,WAAW,eAAe;IAI9B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAOrC,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAOxD,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAK9D,SAAS,EAAE,MAAM,MAAM,EAAE,CAAC;IAK1B,sBAAsB,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAC;IAKnD,iBAAiB,EAAE,MAAM,OAAO,CAAC;CAClC;AAOD,wBAAgB,qBAAqB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,GAAG,eAAe,GAAG,IAAI,CAmDhH;AAiGD,wBAAsB,gBAAgB,CACpC,mBAAmB,EAAE,sBAAsB,EAC3C,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,SAAS,GAClD,OAAO,CAAC,qBAAqB,CAAC,CA+ChC"}
1
+ {"version":3,"file":"permissionsUtil.d.ts","sourceRoot":"","sources":["../../src/permissions/permissionsUtil.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAoBnD,QAAA,MAAM,cAAc,sEAAuE,CAAC;AAC5F,oBAAY,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAK3D,QAAA,MAAM,WAAW,gCAAiC,CAAC;AACnD,oBAAY,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAKrD,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE;YACN,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;YACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;SACnB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAKD,oBAAY,kBAAkB,GAAG,sBAAsB,CAAC;AAKxD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACpC;AAKD,MAAM,WAAW,eAAe;IAI9B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAOrC,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAOxD,eAAe,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAK9D,SAAS,EAAE,MAAM,MAAM,EAAE,CAAC;IAK1B,sBAAsB,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAC;IAKnD,iBAAiB,EAAE,MAAM,OAAO,CAAC;CAClC;AAOD,wBAAgB,qBAAqB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,SAAS,GAAG,eAAe,GAAG,IAAI,CAmDhH;AA+ID,wBAAsB,gBAAgB,CACpC,mBAAmB,EAAE,sBAAsB,EAC3C,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,SAAS,GAClD,OAAO,CAAC,qBAAqB,CAAC,CAiDhC"}
@@ -106,11 +106,40 @@ function checkExternalPermissions(requiredExternal, permissionUtils) {
106
106
  }
107
107
  return missingExternal;
108
108
  }
109
+ function validateObjectField(value, fieldPath) {
110
+ if (value !== undefined) {
111
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
112
+ throw new TypeError(`${fieldPath} should be an object, not ${Array.isArray(value) ? 'an array' : `a ${typeof value}`}`);
113
+ }
114
+ }
115
+ }
116
+ function validateArrayField(value, fieldPath) {
117
+ if (value !== undefined && !Array.isArray(value)) {
118
+ throw new TypeError(`${fieldPath} should be an array, not a ${typeof value}`);
119
+ }
120
+ }
121
+ function validatePermissionShape(requiredPermissions) {
122
+ validateArrayField(requiredPermissions.scopes, 'scopes');
123
+ const external = requiredPermissions.external;
124
+ if (external === undefined)
125
+ return;
126
+ validateObjectField(external, 'external');
127
+ if (external.fetch !== undefined) {
128
+ validateObjectField(external.fetch, 'external.fetch');
129
+ for (const type of FETCH_TYPES) {
130
+ validateArrayField(external.fetch[type], `external.fetch.${type}`);
131
+ }
132
+ }
133
+ for (const type of RESOURCE_TYPES) {
134
+ validateArrayField(external[type], `external.${type}`);
135
+ }
136
+ }
109
137
  async function checkPermissions(requiredPermissions, runtimePermissions) {
110
138
  var _a;
111
139
  if (!requiredPermissions) {
112
140
  return { granted: false, missing: null };
113
141
  }
142
+ validatePermissionShape(requiredPermissions);
114
143
  if (!((_a = requiredPermissions.scopes) === null || _a === void 0 ? void 0 : _a.length) && !requiredPermissions.external) {
115
144
  return { granted: true, missing: null };
116
145
  }
package/out/types.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { type ForgeSupportedLocaleCode } from '@forge/i18n';
2
2
  import { type ThemeState } from '@atlaskit/tokens';
3
- import { StatsigUserInternal } from '@statsig/js-client';
4
3
  import { type Scopes, type External } from '@forge/manifest';
5
4
  export declare type InvokePayload = {
6
5
  [key in number | string]: any;
@@ -64,23 +63,6 @@ export interface LicenseDetails {
64
63
  export declare type Subscription = {
65
64
  unsubscribe: () => void;
66
65
  };
67
- export declare type InitFeatureFlagsPayload = {
68
- user: StatsigUserInternal;
69
- };
70
- export declare type InitFeatureFlagsResponse = Record<string, any> | void;
71
- export declare enum FeatureFlagEventType {
72
- CHECKFLAG = "checkFlag"
73
- }
74
- export declare type FeatureFlagEnvironment = 'development' | 'staging' | 'production';
75
- export declare type FeatureFlagEventProperties = {
76
- environment?: FeatureFlagEnvironment;
77
- success?: boolean;
78
- name?: string;
79
- };
80
- export declare type FeatureFlagEventTrackPayload = {
81
- type: FeatureFlagEventType;
82
- properties: FeatureFlagEventProperties;
83
- };
84
66
  export interface RuntimePermissions {
85
67
  scopes?: Scopes;
86
68
  external?: External;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE7D,oBAAY,aAAa,GAAG;KACzB,GAAG,IAAI,MAAM,GAAG,MAAM,GAAG,GAAG;CAC9B,CAAC;AAEF,oBAAY,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;AAExD,aAAK,aAAa,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC;AAEhD,oBAAY,oBAAoB,GAAG,aAAa,CAAC;AACjD,oBAAY,mBAAmB,GAAG,aAAa,CAAC;AAEhD,oBAAY,oBAAoB;IAC9B,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;CAC1B;AAED,aAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,oBAAY,eAAe,GAAG,MAAM,OAAO,oBAAoB,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,wBAAwB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AACD,UAAU,aAAa;IACrB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AAED,aAAK,oBAAoB;IACvB,WAAW,gBAAgB;CAC5B;AACD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,OAAO,CAAC;IACtB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;CACtC;AAED,oBAAY,YAAY,GAAG;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAQF,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAGD,oBAAY,gBAAgB,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AAE3D,oBAAY,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC"}
package/out/types.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FeatureFlagEventType = exports.ExtensionEnvironment = void 0;
3
+ exports.ExtensionEnvironment = void 0;
4
4
  var ExtensionEnvironment;
5
5
  (function (ExtensionEnvironment) {
6
6
  ExtensionEnvironment["DEVELOPMENT"] = "DEVELOPMENT";
@@ -11,7 +11,3 @@ var EcosystemLicenseMode;
11
11
  (function (EcosystemLicenseMode) {
12
12
  EcosystemLicenseMode["USER_ACCESS"] = "USER_ACCESS";
13
13
  })(EcosystemLicenseMode || (EcosystemLicenseMode = {}));
14
- var FeatureFlagEventType;
15
- (function (FeatureFlagEventType) {
16
- FeatureFlagEventType["CHECKFLAG"] = "checkFlag";
17
- })(FeatureFlagEventType = exports.FeatureFlagEventType || (exports.FeatureFlagEventType = {}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/bridge",
3
- "version": "5.13.1-next.3",
3
+ "version": "5.14.0-experimental-43cfec4",
4
4
  "description": "Forge bridge API for custom UI apps",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -18,9 +18,8 @@
18
18
  "@forge/egress": "^2.3.1",
19
19
  "@forge/i18n": "0.0.7",
20
20
  "@forge/resolver": "1.7.1",
21
- "@statsig/js-client": "3.18.2",
22
21
  "@types/history": "^4.7.11",
23
- "@forge/manifest": "12.2.0-next.3",
22
+ "@forge/manifest": "12.2.0-experimental-43cfec4",
24
23
  "@types/iframe-resizer": "^3.5.8",
25
24
  "iframe-resizer": "^4.4.5",
26
25
  "uuid": "^9.0.1"
@@ -1,14 +0,0 @@
1
- import { StatsigUser, EvaluationsDataAdapter, DataAdapterResult, DataAdapterAsyncOptions, NetworkCore, AnyStatsigOptions } from '@statsig/js-client';
2
- export declare class ForgeDataAdapter implements EvaluationsDataAdapter {
3
- private options;
4
- private environment;
5
- private cache;
6
- getDataAsync(current: DataAdapterResult | null, user: StatsigUser, options?: DataAdapterAsyncOptions): Promise<DataAdapterResult | null>;
7
- getDataSync(_user: StatsigUser): DataAdapterResult | null;
8
- attach(_sdkKey: string, options: AnyStatsigOptions | null, _network: NetworkCore): Promise<void>;
9
- prefetchData(): Promise<void>;
10
- setData(_data: string): Promise<void>;
11
- setDataLegacy(_data: string): Promise<void>;
12
- shutdown(): Promise<void>;
13
- }
14
- //# sourceMappingURL=dataAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dataAdapter.d.ts","sourceRoot":"","sources":["../../src/featureFlags/dataAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,WAAW,EACX,iBAAiB,EAIlB,MAAM,oBAAoB,CAAC;AAO5B,qBAAa,gBAAiB,YAAW,sBAAsB;IAC7D,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,WAAW,CAA6C;IAChE,OAAO,CAAC,KAAK,CAAkC;IAKzC,YAAY,CAChB,OAAO,EAAE,iBAAiB,GAAG,IAAI,EACjC,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IA8BpC,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,iBAAiB,GAAG,IAAI;IAOnD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAM7B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAKhC"}
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ForgeDataAdapter = void 0;
4
- const initFeatureFlags_1 = require("./initFeatureFlags");
5
- class ForgeDataAdapter {
6
- constructor() {
7
- this.options = null;
8
- this.environment = undefined;
9
- this.cache = null;
10
- }
11
- async getDataAsync(current, user, options) {
12
- var _a;
13
- if (current) {
14
- return current;
15
- }
16
- this.environment = ((_a = this.options) === null || _a === void 0 ? void 0 : _a.environment) || { tier: 'development' };
17
- const initUser = {
18
- ...user,
19
- statsigEnvironment: this.environment
20
- };
21
- const result = await (0, initFeatureFlags_1.initFeatureFlags)({ user: initUser });
22
- const data = {
23
- source: 'Network',
24
- data: JSON.stringify(result),
25
- receivedAt: Date.now(),
26
- stableID: null,
27
- fullUserHash: null
28
- };
29
- this.cache = data;
30
- return data;
31
- }
32
- getDataSync(_user) {
33
- return this.cache;
34
- }
35
- async attach(_sdkKey, options, _network) {
36
- this.options = options;
37
- }
38
- async prefetchData() { }
39
- async setData(_data) { }
40
- async setDataLegacy(_data) { }
41
- async shutdown() {
42
- this.options = null;
43
- this.cache = null;
44
- this.environment = undefined;
45
- }
46
- }
47
- exports.ForgeDataAdapter = ForgeDataAdapter;