@forge/bridge 5.7.0-next.9-experimental-04e7c02 → 5.7.1-next.0

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,18 +1,27 @@
1
1
  # @forge/bridge
2
2
 
3
- ## 5.7.0-next.9-experimental-04e7c02
3
+ ## 5.7.1-next.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [8962080]
8
+ - @forge/manifest@11.0.0-next.0
9
+
10
+ ## 5.7.0
4
11
 
5
12
  ### Minor Changes
6
13
 
7
14
  - be6eab0: Add OS upload bridge method
8
15
  - 6e14850: Added FOS download bridge method
9
- - 30c8262: Add FAUS wrapper web component
10
16
 
11
17
  ### Patch Changes
12
18
 
13
19
  - a03c9c5: Adds new bridge method objectStore.getMetadata
20
+ - 1290018: Updated types for Forge Realtime context overrides
21
+ - eda5e4f: Adds new bridge method objectStore.delete
14
22
  - 94243f1: Split development and contribution guidelines
15
23
  - d9e48cd: minor update to tsconfig
24
+ - 18a7e05: Add Track Events for Feature flags
16
25
  - Updated dependencies [b3792e4]
17
26
  - Updated dependencies [fae0e71]
18
27
  - Updated dependencies [0ea6722]
@@ -20,8 +29,29 @@
20
29
  - Updated dependencies [94243f1]
21
30
  - Updated dependencies [0ef937d]
22
31
  - Updated dependencies [dcd46a4]
23
- - @forge/manifest@10.8.0-next.5-experimental-04e7c02
24
- - @forge/resolver@1.7.1-next.0-experimental-04e7c02
32
+ - Updated dependencies [8ec0d92]
33
+ - @forge/manifest@10.8.0
34
+ - @forge/resolver@1.7.1
35
+
36
+ ## 5.7.0-next.12
37
+
38
+ ### Patch Changes
39
+
40
+ - 1290018: Updated types for Forge Realtime context overrides
41
+ - Updated dependencies [8ec0d92]
42
+ - @forge/manifest@10.8.0-next.6
43
+
44
+ ## 5.7.0-next.11
45
+
46
+ ### Patch Changes
47
+
48
+ - 18a7e05: Add Track Events for Feature flags
49
+
50
+ ## 5.7.0-next.10
51
+
52
+ ### Patch Changes
53
+
54
+ - eda5e4f: Adds new bridge method objectStore.delete
25
55
 
26
56
  ## 5.7.0-next.9
27
57
 
@@ -0,0 +1,3 @@
1
+ import { FeatureFlagEventTrackPayload } from '../types';
2
+ export declare const trackFeatureFlagEvent: <T>(payload: FeatureFlagEventTrackPayload) => Promise<T>;
3
+ //# sourceMappingURL=featureFlagEvents.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.trackFeatureFlagEvent = void 0;
4
+ const bridge_1 = require("../bridge");
5
+ const errors_1 = require("../errors");
6
+ const types_1 = require("../types");
7
+ const utils_1 = require("../utils");
8
+ const maxOps = 500;
9
+ const intervalInMs = 1000 * 25;
10
+ const callBridge = (0, bridge_1.getCallBridge)();
11
+ const validatePayload = (payload) => {
12
+ if (!payload || !payload.type || !payload.properties) {
13
+ throw new errors_1.BridgeAPIError('Missing required parameters. Parameter type, and properties are required in the payload.');
14
+ }
15
+ if (!(payload.type.toUpperCase() in types_1.FeatureFlagEventType)) {
16
+ throw new errors_1.BridgeAPIError('Event type is not supported');
17
+ }
18
+ if (Object.values(payload).some((val) => typeof val === 'function')) {
19
+ throw new errors_1.BridgeAPIError('Passing functions as part of the payload is not supported!');
20
+ }
21
+ };
22
+ const _trackFeatureFlagEvent = (payload) => {
23
+ validatePayload(payload);
24
+ return callBridge('trackFeatureFlagEvent', payload);
25
+ };
26
+ exports.trackFeatureFlagEvent = (0, utils_1.withRateLimiter)(_trackFeatureFlagEvent, maxOps, intervalInMs, `Feature flags calls are rate limited at ${maxOps}req/${intervalInMs / 1000}s`);
@@ -1,5 +1,6 @@
1
+ import { FeatureFlagEnvironment } from '../types';
1
2
  export interface ForgeFeatureFlagConfig {
2
- environment?: 'development' | 'staging' | 'production';
3
+ environment?: FeatureFlagEnvironment;
3
4
  }
4
5
  export interface FeatureFlagUser {
5
6
  userId?: string;
@@ -20,11 +21,13 @@ export declare class ForgeFeatureFlags {
20
21
  private initialized;
21
22
  private client;
22
23
  private dataAdapter;
24
+ private eventProps;
23
25
  private readonly CLIENT_KEY;
24
26
  initialize(user: FeatureFlagUser, config?: ForgeFeatureFlagConfig): Promise<void>;
25
27
  checkFlag(flagName: string): boolean;
26
28
  shutdown(): Promise<void>;
27
29
  isInitialized(): boolean;
28
30
  private convertUser;
31
+ private sendCheckFlagEvent;
29
32
  }
30
33
  //# sourceMappingURL=featureFlags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"featureFlags.d.ts","sourceRoot":"","sources":["../../src/featureFlags/featureFlags.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,aAAa,GAAG,SAAS,GAAG,YAAY,CAAC;CACxD;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,QAAQ,CAAC,UAAU,CAAuC;IAKrD,UAAU,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,GAAE,sBAA2B,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB3F,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAW9B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B,aAAa;IAIpB,OAAO,CAAC,WAAW;CAOpB"}
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"}
@@ -3,14 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ForgeFeatureFlags = void 0;
4
4
  const js_client_1 = require("@statsig/js-client");
5
5
  const dataAdapter_1 = require("./dataAdapter");
6
+ const types_1 = require("../types");
7
+ const featureFlagEvents_1 = require("./featureFlagEvents");
6
8
  class ForgeFeatureFlags {
7
9
  constructor() {
8
10
  this.initialized = false;
9
11
  this.client = null;
10
12
  this.dataAdapter = null;
13
+ this.eventProps = {};
11
14
  this.CLIENT_KEY = 'client-forge-internal-key';
12
15
  }
13
16
  async initialize(user, config = {}) {
17
+ var _a;
14
18
  if (this.isInitialized()) {
15
19
  return;
16
20
  }
@@ -22,14 +26,17 @@ class ForgeFeatureFlags {
22
26
  logLevel: js_client_1.LogLevel.None,
23
27
  dataAdapter: this.dataAdapter
24
28
  };
29
+ this.eventProps.environment = (_a = options.environment) === null || _a === void 0 ? void 0 : _a.tier;
25
30
  this.client = new js_client_1.StatsigClient(this.CLIENT_KEY, this.convertUser(user), options);
26
31
  await this.client.initializeAsync();
27
32
  this.initialized = true;
28
33
  }
29
34
  checkFlag(flagName) {
30
35
  if (!this.isInitialized() || !this.client) {
36
+ this.sendCheckFlagEvent(flagName, false);
31
37
  throw new Error('ForgeFeatureFlags not initialized. Call initialize() first.');
32
38
  }
39
+ this.sendCheckFlagEvent(flagName, true);
33
40
  return this.client.checkGate(flagName, { disableExposureLog: true });
34
41
  }
35
42
  async shutdown() {
@@ -52,5 +59,17 @@ class ForgeFeatureFlags {
52
59
  customIDs: user.identifiers || {}
53
60
  };
54
61
  }
62
+ sendCheckFlagEvent(flagName, success) {
63
+ const props = {
64
+ type: types_1.FeatureFlagEventType.CHECKFLAG,
65
+ properties: {
66
+ ...this.eventProps,
67
+ environment: this.eventProps.environment || 'development',
68
+ name: flagName,
69
+ success
70
+ }
71
+ };
72
+ void (0, featureFlagEvents_1.trackFeatureFlagEvent)(props);
73
+ }
55
74
  }
56
75
  exports.ForgeFeatureFlags = ForgeFeatureFlags;
@@ -1,3 +1,2 @@
1
- export * from './initFeatureFlags';
2
1
  export { ForgeFeatureFlags, FeatureFlagUser, ForgeFeatureFlagConfig } from './featureFlags';
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/featureFlags/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,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,iBAAiB,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,7 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ForgeFeatureFlags = void 0;
4
- const tslib_1 = require("tslib");
5
- tslib_1.__exportStar(require("./initFeatureFlags"), exports);
6
4
  var featureFlags_1 = require("./featureFlags");
7
5
  Object.defineProperty(exports, "ForgeFeatureFlags", { enumerable: true, get: function () { return featureFlags_1.ForgeFeatureFlags; } });
@@ -19,4 +19,4 @@ const _initFeatureFlags = (payload) => {
19
19
  validatePayload(payload);
20
20
  return callBridge('initFeatureFlags', { user: payload.user });
21
21
  };
22
- exports.initFeatureFlags = (0, utils_1.withRateLimiter)(_initFeatureFlags, maxOps, intervalInMs, 'Feature flags initialisation calls are rate limited at 500req/25s');
22
+ exports.initFeatureFlags = (0, utils_1.withRateLimiter)(_initFeatureFlags, maxOps, intervalInMs, `Feature flags initialisation calls are rate limited at ${maxOps}req/${intervalInMs / 1000}s`);
package/out/index.d.ts CHANGED
@@ -11,5 +11,4 @@ export * from './realtime';
11
11
  export * as i18n from './i18n';
12
12
  export { type FullContext } from './types';
13
13
  export * from './featureFlags';
14
- export * from './adf-renderer';
15
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,cAAc,gBAAgB,CAAC"}
package/out/index.js CHANGED
@@ -15,4 +15,3 @@ tslib_1.__exportStar(require("./events"), exports);
15
15
  tslib_1.__exportStar(require("./realtime"), exports);
16
16
  exports.i18n = tslib_1.__importStar(require("./i18n"));
17
17
  tslib_1.__exportStar(require("./featureFlags"), exports);
18
- tslib_1.__exportStar(require("./adf-renderer"), exports);
@@ -0,0 +1,5 @@
1
+ export declare const deleteObjects: ({ functionKey, keys }: {
2
+ functionKey: string;
3
+ keys: string[];
4
+ }) => Promise<void>;
5
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/object-store/delete.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,aAAa;iBAAgD,MAAM;UAAQ,MAAM,EAAE;MAAK,QAAQ,IAAI,CAchH,CAAC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteObjects = void 0;
4
+ const invoke_1 = require("../invoke");
5
+ const errors_1 = require("../errors");
6
+ const deleteObjects = async ({ functionKey, keys }) => {
7
+ if (!functionKey || functionKey.length === 0) {
8
+ throw new errors_1.BridgeAPIError('functionKey is required to delete objects');
9
+ }
10
+ if (!Array.isArray(keys) || keys.length === 0) {
11
+ throw new errors_1.BridgeAPIError('keys array is required and must not be empty');
12
+ }
13
+ await Promise.all(keys.map(async (key) => {
14
+ await (0, invoke_1.invoke)(functionKey, { key });
15
+ }));
16
+ };
17
+ exports.deleteObjects = deleteObjects;
@@ -1,3 +1,3 @@
1
1
  export { type SubscriptionOptions, type PublishOptions, type PublishResult, realtime } from './realtime';
2
- export { Jira } from './productContext';
2
+ export { Jira, Confluence, Bitbucket } from './productContext';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACzG,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACzG,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Jira = exports.realtime = void 0;
3
+ exports.Bitbucket = exports.Confluence = exports.Jira = exports.realtime = void 0;
4
4
  var realtime_1 = require("./realtime");
5
5
  Object.defineProperty(exports, "realtime", { enumerable: true, get: function () { return realtime_1.realtime; } });
6
6
  var productContext_1 = require("./productContext");
7
7
  Object.defineProperty(exports, "Jira", { enumerable: true, get: function () { return productContext_1.Jira; } });
8
+ Object.defineProperty(exports, "Confluence", { enumerable: true, get: function () { return productContext_1.Confluence; } });
9
+ Object.defineProperty(exports, "Bitbucket", { enumerable: true, get: function () { return productContext_1.Bitbucket; } });
@@ -3,5 +3,13 @@ export declare enum Jira {
3
3
  Issue = "issue",
4
4
  Project = "project"
5
5
  }
6
- export declare type ProductContext = Jira;
6
+ export declare enum Confluence {
7
+ Content = "content",
8
+ Space = "space"
9
+ }
10
+ export declare enum Bitbucket {
11
+ Repository = "repository",
12
+ PullRequest = "pullRequest"
13
+ }
14
+ export declare type ProductContext = Jira | Confluence | Bitbucket;
7
15
  //# sourceMappingURL=productContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"productContext.d.ts","sourceRoot":"","sources":["../../src/realtime/productContext.ts"],"names":[],"mappings":"AAEA,oBAAY,IAAI;IACd,KAAK,UAAU;IACf,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,oBAAY,cAAc,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"productContext.d.ts","sourceRoot":"","sources":["../../src/realtime/productContext.ts"],"names":[],"mappings":"AAGA,oBAAY,IAAI;IACd,KAAK,UAAU;IACf,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,oBAAY,SAAS;IACnB,UAAU,eAAe;IACzB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,cAAc,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,CAAC"}
@@ -1,9 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Jira = void 0;
3
+ exports.Bitbucket = exports.Confluence = exports.Jira = void 0;
4
4
  var Jira;
5
5
  (function (Jira) {
6
6
  Jira["Board"] = "board";
7
7
  Jira["Issue"] = "issue";
8
8
  Jira["Project"] = "project";
9
9
  })(Jira = exports.Jira || (exports.Jira = {}));
10
+ var Confluence;
11
+ (function (Confluence) {
12
+ Confluence["Content"] = "content";
13
+ Confluence["Space"] = "space";
14
+ })(Confluence = exports.Confluence || (exports.Confluence = {}));
15
+ var Bitbucket;
16
+ (function (Bitbucket) {
17
+ Bitbucket["Repository"] = "repository";
18
+ Bitbucket["PullRequest"] = "pullRequest";
19
+ })(Bitbucket = exports.Bitbucket || (exports.Bitbucket = {}));
package/out/types.d.ts CHANGED
@@ -66,6 +66,19 @@ export declare type InitFeatureFlagsPayload = {
66
66
  user: StatsigUserInternal;
67
67
  };
68
68
  export declare type InitFeatureFlagsResponse = Record<string, any> | void;
69
+ export declare enum FeatureFlagEventType {
70
+ CHECKFLAG = "checkFlag"
71
+ }
72
+ export declare type FeatureFlagEnvironment = 'development' | 'staging' | 'production';
73
+ export declare type FeatureFlagEventProperties = {
74
+ environment?: FeatureFlagEnvironment;
75
+ success?: boolean;
76
+ name?: string;
77
+ };
78
+ export declare type FeatureFlagEventTrackPayload = {
79
+ type: FeatureFlagEventType;
80
+ properties: FeatureFlagEventProperties;
81
+ };
69
82
  export interface RuntimePermissions {
70
83
  scopes?: Scopes;
71
84
  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":"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"}
package/out/types.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExtensionEnvironment = void 0;
3
+ exports.FeatureFlagEventType = exports.ExtensionEnvironment = void 0;
4
4
  var ExtensionEnvironment;
5
5
  (function (ExtensionEnvironment) {
6
6
  ExtensionEnvironment["DEVELOPMENT"] = "DEVELOPMENT";
@@ -11,3 +11,7 @@ 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.7.0-next.9-experimental-04e7c02",
3
+ "version": "5.7.1-next.0",
4
4
  "description": "Forge bridge API for custom UI apps",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -13,13 +13,12 @@
13
13
  "compile": "tsc -b -v"
14
14
  },
15
15
  "dependencies": {
16
- "@atlaskit/adf-schema": "^48.0.0",
17
16
  "@atlaskit/tokens": "^1.58.0",
18
17
  "@forge/i18n": "0.0.7",
19
- "@forge/resolver": "1.7.1-next.0-experimental-04e7c02",
18
+ "@forge/resolver": "1.7.1",
20
19
  "@statsig/js-client": "3.18.2",
21
20
  "@types/history": "^4.7.11",
22
- "@forge/manifest": "10.8.0-next.5-experimental-04e7c02"
21
+ "@forge/manifest": "11.0.0-next.0"
23
22
  },
24
23
  "devDependencies": {
25
24
  "history": "5.3.0",
@@ -1,37 +0,0 @@
1
- import { DocNode } from '@atlaskit/adf-schema';
2
- export interface AdfPostMessageData {
3
- type: 'adf-document';
4
- document: DocNode;
5
- timestamp: number;
6
- source: 'forge-adf-renderer';
7
- }
8
- export declare class ForgeADFRenderer extends HTMLElement {
9
- private _adfDocument;
10
- private _isConnected;
11
- private iframe;
12
- private origin;
13
- constructor();
14
- static get observedAttributes(): string[];
15
- get adfDocument(): DocNode | null;
16
- set adfDocument(document: DocNode | null);
17
- private attachShadowDOM;
18
- private createShadowDOMContent;
19
- private getComponentStyles;
20
- private getHTMLTemplate;
21
- private cacheDOMReferences;
22
- connectedCallback(): void;
23
- attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void;
24
- private handleAdfDocumentChange;
25
- private setupIframe;
26
- private passAdfToIframe;
27
- private handleError;
28
- private showErrorState;
29
- private getErrorTemplate;
30
- }
31
- export declare function registerAdfRenderer(): void;
32
- export declare const createAdfRendererIframeProps: (adfDocument: DocNode, iframeId?: string) => {
33
- id: string;
34
- src: string;
35
- onLoad: () => void;
36
- };
37
- //# sourceMappingURL=adf-renderer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adf-renderer.d.ts","sourceRoot":"","sources":["../../src/adf-renderer/adf-renderer.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAA6C;;IAY3D,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAKD,IAAI,WAAW,IAAI,OAAO,GAAG,IAAI,CAEhC;IAKD,IAAI,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,EAEvC;IAKD,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,kBAAkB;IA+B1B,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,kBAAkB;IAS1B,iBAAiB,IAAI,IAAI;IAQzB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAwB/F,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,gBAAgB;CAOzB;AAMD,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAED,eAAO,MAAM,4BAA4B,gBAAiB,OAAO,aAAa,MAAM;;;;CAwBnF,CAAC"}
@@ -1,187 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createAdfRendererIframeProps = exports.registerAdfRenderer = exports.ForgeADFRenderer = void 0;
4
- class ForgeADFRenderer extends HTMLElement {
5
- constructor() {
6
- super();
7
- this._adfDocument = null;
8
- this._isConnected = false;
9
- this.iframe = null;
10
- this.origin = new URL(document.referrer).origin;
11
- this.attachShadowDOM();
12
- }
13
- static get observedAttributes() {
14
- return ['adf-document', 'width', 'height'];
15
- }
16
- get adfDocument() {
17
- return this._adfDocument;
18
- }
19
- set adfDocument(document) {
20
- this.handleAdfDocumentChange(document);
21
- }
22
- attachShadowDOM() {
23
- this.attachShadow({ mode: 'open' });
24
- this.createShadowDOMContent();
25
- this.cacheDOMReferences();
26
- }
27
- createShadowDOMContent() {
28
- if (!this.shadowRoot)
29
- return;
30
- const styles = this.getComponentStyles();
31
- const template = this.getHTMLTemplate();
32
- this.shadowRoot.innerHTML = `${styles}${template}`;
33
- }
34
- getComponentStyles() {
35
- return `
36
- <style>
37
- :host {
38
- display: block;
39
- width: 100%;
40
- height: 400px;
41
- }
42
-
43
- iframe {
44
- width: 100%;
45
- height: 100%;
46
- border: 1px solid #dfe1e6;
47
- border-radius: 3px;
48
- }
49
-
50
- .error {
51
- color: #de350b;
52
- background: #ffebe6;
53
- border: 1px solid #ff8f73;
54
- border-radius: 3px;
55
- padding: 12px;
56
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
57
- }
58
- </style>
59
- `;
60
- }
61
- getHTMLTemplate() {
62
- const iframeSrc = `${this.origin}/forge-apps/adf-renderer`;
63
- return `
64
- <iframe id="forge-adf-renderer-iframe"
65
- src="${iframeSrc}"
66
- frameborder="0"
67
- allowfullscreen>
68
- </iframe>
69
- `;
70
- }
71
- cacheDOMReferences() {
72
- if (!this.shadowRoot)
73
- return;
74
- this.iframe = this.shadowRoot.getElementById('forge-adf-renderer-iframe');
75
- }
76
- connectedCallback() {
77
- this._isConnected = true;
78
- this.setupIframe();
79
- }
80
- attributeChangedCallback(name, _oldValue, newValue) {
81
- if (!this._isConnected)
82
- return;
83
- switch (name) {
84
- case 'adf-document':
85
- try {
86
- const parsedDocument = newValue ? JSON.parse(newValue) : null;
87
- this.handleAdfDocumentChange(parsedDocument);
88
- }
89
- catch (error) {
90
- this.handleError(new Error(`Invalid ADF document: ${error.message}`));
91
- }
92
- break;
93
- case 'width':
94
- this.style.width = newValue || '100%';
95
- break;
96
- case 'height':
97
- this.style.height = newValue || '400px';
98
- break;
99
- }
100
- }
101
- handleAdfDocumentChange(document) {
102
- try {
103
- this._adfDocument = document;
104
- this.passAdfToIframe();
105
- }
106
- catch (error) {
107
- this.handleError(error);
108
- }
109
- }
110
- setupIframe() {
111
- if (!this.iframe)
112
- return;
113
- try {
114
- this.iframe.onload = () => {
115
- this.passAdfToIframe();
116
- };
117
- }
118
- catch (error) {
119
- this.handleError(error);
120
- }
121
- }
122
- passAdfToIframe() {
123
- if (!this.iframe || !this.iframe.contentWindow)
124
- return;
125
- try {
126
- const iframeWindow = this.iframe.contentWindow;
127
- if (this._adfDocument) {
128
- const message = {
129
- type: 'adf-document',
130
- document: this._adfDocument,
131
- timestamp: Date.now(),
132
- source: 'forge-adf-renderer'
133
- };
134
- iframeWindow.postMessage(message, this.origin);
135
- }
136
- }
137
- catch (error) {
138
- }
139
- }
140
- handleError(error) {
141
- this.showErrorState(error);
142
- }
143
- showErrorState(error) {
144
- if (!this.shadowRoot)
145
- return;
146
- const styles = this.getComponentStyles();
147
- const errorTemplate = this.getErrorTemplate(error.message);
148
- this.shadowRoot.innerHTML = `${styles}${errorTemplate}`;
149
- }
150
- getErrorTemplate(message) {
151
- return `
152
- <div class="error">
153
- <strong>Error:</strong> ${message}
154
- </div>
155
- `;
156
- }
157
- }
158
- exports.ForgeADFRenderer = ForgeADFRenderer;
159
- function registerAdfRenderer() {
160
- if (!customElements.get('forge-adf-renderer')) {
161
- customElements.define('forge-adf-renderer', ForgeADFRenderer);
162
- }
163
- }
164
- exports.registerAdfRenderer = registerAdfRenderer;
165
- const createAdfRendererIframeProps = (adfDocument, iframeId) => {
166
- const origin = new URL(document.referrer).origin;
167
- const src = `${origin}/forge-apps/forge-adf-renderer`;
168
- const guid = crypto.randomUUID();
169
- const id = iframeId || `forge-adf-renderer-iframe-${guid}`;
170
- const onLoad = () => {
171
- var _a;
172
- const iframe = document.getElementById(id);
173
- const message = {
174
- type: 'adf-document',
175
- document: adfDocument,
176
- timestamp: Date.now(),
177
- source: 'forge-adf-renderer'
178
- };
179
- (_a = iframe.contentWindow) === null || _a === void 0 ? void 0 : _a.postMessage(message, origin);
180
- };
181
- return {
182
- id,
183
- src,
184
- onLoad
185
- };
186
- };
187
- exports.createAdfRendererIframeProps = createAdfRendererIframeProps;
@@ -1,2 +0,0 @@
1
- export { ForgeADFRenderer, AdfPostMessageData, registerAdfRenderer, createAdfRendererIframeProps } from './adf-renderer';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adf-renderer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,gBAAgB,CAAC"}
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createAdfRendererIframeProps = exports.registerAdfRenderer = exports.ForgeADFRenderer = void 0;
4
- var adf_renderer_1 = require("./adf-renderer");
5
- Object.defineProperty(exports, "ForgeADFRenderer", { enumerable: true, get: function () { return adf_renderer_1.ForgeADFRenderer; } });
6
- Object.defineProperty(exports, "registerAdfRenderer", { enumerable: true, get: function () { return adf_renderer_1.registerAdfRenderer; } });
7
- Object.defineProperty(exports, "createAdfRendererIframeProps", { enumerable: true, get: function () { return adf_renderer_1.createAdfRendererIframeProps; } });