@openfin/node-adapter 40.82.17 → 40.82.20

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.
Files changed (2) hide show
  1. package/out/node-adapter.js +1032 -986
  2. package/package.json +2 -2
@@ -73,7 +73,7 @@ async function promiseMapSerial(arr, func) {
73
73
  }
74
74
  promises.promiseMapSerial = promiseMapSerial;
75
75
 
76
- var __classPrivateFieldSet$c = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
76
+ var __classPrivateFieldSet$d = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
77
77
  if (kind === "m") throw new TypeError("Private method is not writable");
78
78
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
79
79
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
@@ -202,7 +202,7 @@ class EmitterBase extends Base {
202
202
  // This will only be reached if unsubscribe from event that does not exist but do not want to error here
203
203
  return Promise.resolve();
204
204
  };
205
- __classPrivateFieldSet$c(this, _EmitterBase_emitterAccessor, [topic, ...additionalAccessors], "f");
205
+ __classPrivateFieldSet$d(this, _EmitterBase_emitterAccessor, [topic, ...additionalAccessors], "f");
206
206
  this.listeners = (event) => this.hasEmitter() ? this.getOrCreateEmitter().listeners(event) : [];
207
207
  }
208
208
  /**
@@ -767,781 +767,117 @@ class AsyncRetryableLazy {
767
767
  }
768
768
  lazy.AsyncRetryableLazy = AsyncRetryableLazy;
769
769
 
770
- var layoutEntities = {};
771
-
772
- var apiExposer$1 = {};
773
-
774
- var apiConsumer = {};
775
-
776
- Object.defineProperty(apiConsumer, "__esModule", { value: true });
777
- apiConsumer.ApiConsumer = void 0;
778
- /**
779
- * Consumer for apis exposed with {@see ApiExposer}.
780
- *
781
- * A strategy that matches the strategy used to expose a target API must be provided.
782
- */
783
- class ApiConsumer {
784
- // eslint-disable-next-line
785
- constructor(strategy) {
786
- this.strategy = strategy;
787
- /**
788
- * Consumes an api exposed using a given transport strategy, and generates a client
789
- * for easy, type safe consumption of that client.
790
- * @param options Strategy specific consumption options.
791
- * @returns An api client matching the given type.
792
- */
793
- this.consume = async (options) => {
794
- const exposedProperties = await this.strategy.getExposedFunctions(options);
795
- return exposedProperties.reduce((client, prop) => ({
796
- ...client,
797
- [prop.key]: this.strategy.createFunction(prop, options)
798
- }), {});
799
- };
800
- }
801
- }
802
- apiConsumer.ApiConsumer = ApiConsumer;
803
-
804
- var apiExposer = {};
805
-
806
- var decorators = {};
807
-
808
- Object.defineProperty(decorators, "__esModule", { value: true });
809
- decorators.expose = decorators.getExposedProperties = void 0;
810
- const exposedProperties = Symbol('exposedProperties');
811
- const getExposedProperties = (target) => {
812
- return target[exposedProperties] || target.prototype[exposedProperties] || [];
813
- };
814
- decorators.getExposedProperties = getExposedProperties;
815
- /**
816
- * Indicates that a class member function can be exposed using {@link ApiExposer}.
817
- * @param options Options specific to the strategy used in {@link ApiExposer}
818
- */
819
- // Returns any as decorator typing is weird.
820
- const expose = (options) => (target, key, descriptor) => {
821
- target[exposedProperties] = target[exposedProperties] || [];
822
- target[exposedProperties].push({ key, descriptor, options });
823
- };
824
- decorators.expose = expose;
770
+ var main = {};
825
771
 
826
- Object.defineProperty(apiExposer, "__esModule", { value: true });
827
- apiExposer.ApiExposer = void 0;
828
- const decorators_1 = decorators;
829
- /**
830
- * Exposes api services on the transport of choice.
831
- */
832
- class ApiExposer {
772
+ Object.defineProperty(main, "__esModule", { value: true });
773
+ main.WebContents = void 0;
774
+ const base_1$j = base;
775
+ class WebContents extends base_1$j.EmitterBase {
833
776
  /**
834
- * @param strategy The expose strategy to use to expose instances.
777
+ * @param identity The identity of the {@link OpenFin.WebContentsEvents WebContents}.
778
+ * @param entityType The type of the {@link OpenFin.WebContentsEvents WebContents}.
835
779
  */
836
- // eslint-disable-next-line
837
- constructor(strategy) {
838
- this.strategy = strategy;
839
- /**
840
- * Exposes an instance of a given api on
841
- * @param instance Instance of a class which has been decorated to indicate which functions can be exposed.
842
- * @param instanceOptions Transport strategy specific options to use when exposing.
843
- */
844
- this.exposeInstance = async (instance, instanceOptions) => {
845
- const exposableProps = (0, decorators_1.getExposedProperties)(instance);
846
- const exposedProps = await Promise.all(exposableProps.map(async ({ key, options }) => {
847
- const customConsumptionOptions = await this.strategy.exposeFunction(instance[key].bind(instance), {
848
- key,
849
- options,
850
- meta: instanceOptions
851
- });
852
- return {
853
- key,
854
- options: customConsumptionOptions
855
- };
856
- }));
857
- await this.strategy.exposeMeta(instanceOptions, exposedProps);
858
- };
780
+ constructor(wire, identity, entityType) {
781
+ super(wire, entityType, identity.uuid, identity.name);
782
+ this.identity = identity;
783
+ this.entityType = entityType;
859
784
  }
860
- ;
861
- }
862
- apiExposer.ApiExposer = ApiExposer;
863
-
864
- var strategies = {};
865
-
866
- var openfinChannels = {};
867
-
868
- var channelsConsumer = {};
869
-
870
- Object.defineProperty(channelsConsumer, "__esModule", { value: true });
871
- channelsConsumer.ChannelsConsumer = void 0;
872
- class ChannelsConsumer {
873
- // eslint-disable-next-line
874
- constructor(channel) {
875
- this.channel = channel;
876
- this.getExposedFunctions = async (options) => {
877
- const { id } = options;
878
- const { props } = await this.channel.dispatch(`api-meta:${id}`);
879
- return props;
880
- };
881
- this.createFunction = (prop) => (...args) => {
882
- const { action } = prop.options;
883
- return this.channel.dispatch(action, { args });
884
- };
785
+ /**
786
+ * Gets a base64 encoded image of all or part of the WebContents.
787
+ * @param options Options for the capturePage call.
788
+ *
789
+ * @example
790
+ *
791
+ * View:
792
+ * ```js
793
+ * const view = fin.View.getCurrentSync();
794
+ *
795
+ * // PNG image of a full visible View
796
+ * console.log(await view.capturePage());
797
+ *
798
+ * // Low-quality JPEG image of a defined visible area of the view
799
+ * const options = {
800
+ * area: {
801
+ * height: 100,
802
+ * width: 100,
803
+ * x: 10,
804
+ * y: 10,
805
+ * },
806
+ * format: 'jpg',
807
+ * quality: 20
808
+ * }
809
+ * console.log(await view.capturePage(options));
810
+ * ```
811
+ *
812
+ * Window:
813
+ * ```js
814
+ * const wnd = await fin.Window.getCurrent();
815
+ *
816
+ * // PNG image of a full visible window
817
+ * console.log(await wnd.capturePage());
818
+ *
819
+ * // Low-quality JPEG image of a defined visible area of the window
820
+ * const options = {
821
+ * area: {
822
+ * height: 100,
823
+ * width: 100,
824
+ * x: 10,
825
+ * y: 10,
826
+ * },
827
+ * format: 'jpg',
828
+ * quality: 20
829
+ * }
830
+ * console.log(await wnd.capturePage(options));
831
+ * ```
832
+ *
833
+ * @remarks
834
+ * `WebContents` refers to shared functionality between {@link OpenFin.Window} and {@link OpenFin.View}.
835
+ * We do not expose an explicit superclass for this functionality, but it does have its own
836
+ * {@link OpenFin.WebContentsEvents event namespace}.
837
+ */
838
+ capturePage(options) {
839
+ return this.wire.sendAction('capture-page', { options, ...this.identity }).then(({ payload }) => payload.data);
885
840
  }
886
- ;
887
- }
888
- channelsConsumer.ChannelsConsumer = ChannelsConsumer;
889
-
890
- var channelsExposer = {};
891
-
892
- Object.defineProperty(channelsExposer, "__esModule", { value: true });
893
- channelsExposer.ChannelsExposer = void 0;
894
- class ChannelsExposer {
895
- // eslint-disable-next-line
896
- constructor(channelProviderOrClient) {
897
- this.channelProviderOrClient = channelProviderOrClient;
898
- this.exposeFunction = async (target, config) => {
899
- const { key, options, meta } = config;
900
- const { id } = meta;
901
- const action = `${id}.${options?.action || key}`;
902
- await this.channelProviderOrClient.register(action, async ({ args }) => {
903
- return target(...args);
904
- });
905
- return { action };
906
- };
907
- this.exposeMeta = async ({ id }, props) => {
908
- const action = `api-meta:${id}`;
909
- await this.channelProviderOrClient.register(action, () => ({ props }));
910
- };
911
- }
912
- }
913
- channelsExposer.ChannelsExposer = ChannelsExposer;
914
-
915
- (function (exports) {
916
- var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
917
- if (k2 === undefined) k2 = k;
918
- var desc = Object.getOwnPropertyDescriptor(m, k);
919
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
920
- desc = { enumerable: true, get: function() { return m[k]; } };
921
- }
922
- Object.defineProperty(o, k2, desc);
923
- }) : (function(o, m, k, k2) {
924
- if (k2 === undefined) k2 = k;
925
- o[k2] = m[k];
926
- }));
927
- var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
928
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
929
- };
930
- Object.defineProperty(exports, "__esModule", { value: true });
931
- __exportStar(channelsConsumer, exports);
932
- __exportStar(channelsExposer, exports);
933
- } (openfinChannels));
934
-
935
- (function (exports) {
936
- var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
937
- if (k2 === undefined) k2 = k;
938
- var desc = Object.getOwnPropertyDescriptor(m, k);
939
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
940
- desc = { enumerable: true, get: function() { return m[k]; } };
941
- }
942
- Object.defineProperty(o, k2, desc);
943
- }) : (function(o, m, k, k2) {
944
- if (k2 === undefined) k2 = k;
945
- o[k2] = m[k];
946
- }));
947
- var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
948
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
949
- };
950
- Object.defineProperty(exports, "__esModule", { value: true });
951
- __exportStar(openfinChannels, exports);
952
- } (strategies));
953
-
954
- (function (exports) {
955
- var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
956
- if (k2 === undefined) k2 = k;
957
- var desc = Object.getOwnPropertyDescriptor(m, k);
958
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
959
- desc = { enumerable: true, get: function() { return m[k]; } };
960
- }
961
- Object.defineProperty(o, k2, desc);
962
- }) : (function(o, m, k, k2) {
963
- if (k2 === undefined) k2 = k;
964
- o[k2] = m[k];
965
- }));
966
- var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
967
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
968
- };
969
- Object.defineProperty(exports, "__esModule", { value: true });
970
- __exportStar(apiConsumer, exports);
971
- __exportStar(apiExposer, exports);
972
- __exportStar(strategies, exports);
973
- __exportStar(decorators, exports);
974
- } (apiExposer$1));
975
-
976
- var channelApiRelay = {};
977
-
978
- Object.defineProperty(channelApiRelay, "__esModule", { value: true });
979
- channelApiRelay.createRelayedDispatch = channelApiRelay.relayChannelClientApi = void 0;
980
- const EXPECTED_ERRORS = [
981
- 'no longer connected',
982
- 'RTCDataChannel closed unexpectedly',
983
- 'The client you are trying to dispatch from is disconnected from the target provider',
984
- ];
985
- // Checks possible error messages that we want to trap, client error message can originate
986
- // from ChannelProvider::dispatch OR ClassicStrategy::closeEndpoint OR RTCEndPoint::dataChannel::onclose
987
- const isDisconnectedError = (errorMsg) => {
988
- return EXPECTED_ERRORS.some(e => errorMsg.includes(e));
989
- };
990
- /**
991
- * @internal
992
- * Create a channel relay for a given channel exposition, allowing a single provider to route
993
- * actions to the designated clients.
994
- *
995
- * Designed to be used in conjunction with @expose
996
- *
997
- * @param channelProvider The channel provider to relay the actions on.
998
- * @param config Determines which actions to relay. Please ensure action prefix matches the exposed api.
999
- */
1000
- const relayChannelClientApi = async (channelProvider, relayId) => {
1001
- channelProvider.register(`relay:${relayId}`, ({ action, target, payload }) => {
1002
- return channelProvider.dispatch(target, action, payload);
1003
- });
1004
- await Promise.resolve();
1005
- };
1006
- channelApiRelay.relayChannelClientApi = relayChannelClientApi;
1007
- const createRelayedDispatch = (client, target, relayId, relayErrorMsg) => async (action, payload) => {
1008
- try {
1009
- return await client.dispatch(`relay:${relayId}`, {
1010
- action,
1011
- payload,
1012
- target
1013
- });
1014
- }
1015
- catch (e) {
1016
- if (isDisconnectedError(e.message) && relayErrorMsg) {
1017
- throw new Error(relayErrorMsg);
1018
- }
1019
- throw e;
1020
- }
1021
- };
1022
- channelApiRelay.createRelayedDispatch = createRelayedDispatch;
1023
-
1024
- var __classPrivateFieldSet$b = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
1025
- if (kind === "m") throw new TypeError("Private method is not writable");
1026
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
1027
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
1028
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
1029
- };
1030
- var __classPrivateFieldGet$d = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
1031
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
1032
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
1033
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
1034
- };
1035
- var _LayoutNode_client, _TabStack_client, _ColumnOrRow_client;
1036
- Object.defineProperty(layoutEntities, "__esModule", { value: true });
1037
- layoutEntities.ColumnOrRow = layoutEntities.TabStack = layoutEntities.LayoutNode = void 0;
1038
- const api_exposer_1 = apiExposer$1;
1039
- const channel_api_relay_1 = channelApiRelay;
1040
- /*
1041
- This file includes LayoutNode, ColumnOrRow and TabStack classes, which are all closely
1042
- intertwined, and share members via parent abstract class LayoutNode. To prevent circular
1043
- refs, we define and export all the classes here.
1044
- */
1045
- /**
1046
- * @ignore
1047
- * @internal
1048
- * Supplies an ApiClient for {@link LayoutEntitiesController} and helper methods
1049
- * for the entities {@link TabStack} AND {@link ColumnOrRow} to use.
1050
- */
1051
- class LayoutNode {
1052
- /**
1053
- * @internal
1054
- * @ignore
1055
- */
1056
- constructor(client, entityId) {
1057
- /**
1058
- * @ignore
1059
- * @internal
1060
- * ApiClient for {@link LayoutEntitiesController}
1061
- */
1062
- _LayoutNode_client.set(this, void 0);
1063
- /**
1064
- * Checks if the TabStack or ColumnOrRow is the root content item
1065
- *
1066
- * @example
1067
- * ```js
1068
- * if (!fin.me.isView) {
1069
- * throw new Error('Not running in a platform View.');
1070
- * }
1071
- *
1072
- * const stack = await fin.me.getCurrentStack();
1073
- * const isRoot = await stack.isRoot();
1074
- * // The TabStack is root: false
1075
- * console.log(`The TabStack is root: ${isRoot}`);
1076
- *
1077
- * // Retrieves the parent ColumnOrRow
1078
- * const parent = await stack.getParent();
1079
- * const parentIsRoot = await parent.isRoot();
1080
- * // The parent ColumnOrRow is root: true
1081
- * console.log(`The parent ColumnOrRow is root: ${parentIsRoot}`);
1082
- * ```
1083
- */
1084
- this.isRoot = () => __classPrivateFieldGet$d(this, _LayoutNode_client, "f").isRoot(this.entityId);
1085
- /**
1086
- * Checks if the TabStack or ColumnOrRow exists
1087
- *
1088
- * @example
1089
- * ```js
1090
- * if (!fin.me.isView) {
1091
- * throw new Error('Not running in a platform View.');
1092
- * }
1093
- *
1094
- * const stack = await fin.me.getCurrentStack();
1095
- * // Retrieves the parent ColumnOrRow
1096
- * const columnOrRow = await stack.getParent();
1097
- * let exists = await stack.exists();
1098
- * // or
1099
- * let exists = await columnOrRow.exists();
1100
- * // The entity exists: true
1101
- * console.log(`The entity exists: ${exists}`);
1102
- * ```
1103
- */
1104
- this.exists = () => __classPrivateFieldGet$d(this, _LayoutNode_client, "f").exists(this.entityId);
1105
- /**
1106
- * Retrieves the parent of the TabStack or ColumnOrRow
1107
- *
1108
- * @example
1109
- * ```js
1110
- * if (!fin.me.isView) {
1111
- * throw new Error('Not running in a platform View.');
1112
- * }
1113
- *
1114
- * const stack = await fin.me.getCurrentStack();
1115
- * // Retrieves the parent ColumnOrRow
1116
- * const columnOrRow = await stack.getParent();
1117
- *
1118
- * // undefined if entity is the root item
1119
- * let parent = await columnOrRow.getParent();
1120
- * // or
1121
- * let parent = await stack.getParent();
1122
- * ```
1123
- */
1124
- this.getParent = async () => {
1125
- const parent = await __classPrivateFieldGet$d(this, _LayoutNode_client, "f").getParent(this.entityId);
1126
- if (!parent) {
1127
- return undefined;
1128
- }
1129
- return LayoutNode.getEntity(parent, __classPrivateFieldGet$d(this, _LayoutNode_client, "f"));
1130
- };
1131
- /**
1132
- * Creates a new TabStack adjacent to the given TabStack or ColumnOrRow. Inputs can be new views to create, or existing views.
1133
- *
1134
- * Known Issue: If the number of views to add overflows the tab-container, the added views will be set as active
1135
- * during each render, and then placed at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
1136
- * This means the views you pass to createAdjacentStack() may not render in the order given by the array.
1137
- * Until fixed, this problem can be avoided only if your window is wide enough to fit creating all the views in the tabstack.
1138
- *
1139
- * @param views The views that will populate the new TabStack.
1140
- * @param options Additional options that control new TabStack creation.
1141
- * @returns The newly-created TabStack.
1142
- *
1143
- * @example
1144
- * ```js
1145
- * if (!fin.me.isView) {
1146
- * throw new Error('Not running in a platform View.');
1147
- * }
1148
- *
1149
- * const stack = await fin.me.getCurrentStack();
1150
- * const columnOrRow = await stack.getParent();
1151
- *
1152
- * // Create view references by supplying a 'name' and 'url'
1153
- * const views = [
1154
- * // if 'name' is undefined, one will be generated
1155
- * // if 'url' is undefined, it will default the view URL to 'about:blank'
1156
- * { name: 'google-view', url: 'http://google.com/'},
1157
- * { name: 'of-developers-view', url: 'http://developers.openfin.co/'},
1158
- * ];
1159
- *
1160
- * // Create a view beforehand to be included in the new tab stack
1161
- * const outsideView = await fin.View.create({
1162
- * name: 'outside-bloomberg-view',
1163
- * url: 'https://bloomberg.com/',
1164
- * target: fin.me.identity,
1165
- * });
1166
- *
1167
- * // Views to add can be identities, or the reference views mentioned above
1168
- * const viewsToAdd = [outsideView.identity, ...views];
1169
- *
1170
- * // Possible position inputs: 'right' | 'left' | 'top' | 'bottom'
1171
- * let stackFrom = await columnOrRow.createAdjacentStack(viewsToAdd, { position: 'right' });
1172
- * // Or
1173
- * let newStack = await stack.createAdjacentStack(viewsToAdd, { position: 'right' });
1174
- * console.log(`A new TabStack created to the right has ${newStack.length} views in it`);
1175
- *
1176
- * ```
1177
- * @experimental
1178
- */
1179
- this.createAdjacentStack = async (views, options) => {
1180
- const entityId = await __classPrivateFieldGet$d(this, _LayoutNode_client, "f").createAdjacentStack(this.entityId, views, options);
1181
- return LayoutNode.getEntity({ entityId, type: 'stack' }, __classPrivateFieldGet$d(this, _LayoutNode_client, "f"));
1182
- };
1183
- /**
1184
- * Retrieves the adjacent TabStacks of the given TabStack or ColumnOrRow.
1185
- *
1186
- * @param edge Edge whose adjacent TabStacks will be returned.
1187
- *
1188
- * @example
1189
- * ```js
1190
- * if (!fin.me.isView) {
1191
- * throw new Error('Not running in a platform View.');
1192
- * }
1193
- *
1194
- * const stack = await fin.me.getCurrentStack();
1195
- * const columnOrRow = await stack.getParent();
1196
- * // Possible position inputs: 'right' | 'left' | 'top' | 'bottom'
1197
- * let rightStacks = await columnOrRow.getAdjacentStacks('right');
1198
- * let leftStacks = await columnOrRow.getAdjacentStacks('left');
1199
- * // or
1200
- * let rightStacks = await stack.getAdjacentStacks('right');
1201
- * let leftStacks = await stack.getAdjacentStacks('left');
1202
- *
1203
- * console.log(`The entity has ${rightStacks.length} stacks to the right, and ${leftStacks.length} stacks to the left`);
1204
- *
1205
- * ```
1206
- * @experimental
1207
- */
1208
- this.getAdjacentStacks = async (edge) => {
1209
- const adjacentStacks = await __classPrivateFieldGet$d(this, _LayoutNode_client, "f").getAdjacentStacks({
1210
- targetId: this.entityId,
1211
- edge
1212
- });
1213
- return adjacentStacks.map((stack) => LayoutNode.getEntity({
1214
- type: 'stack',
1215
- entityId: stack.entityId
1216
- }, __classPrivateFieldGet$d(this, _LayoutNode_client, "f")));
1217
- };
1218
- __classPrivateFieldSet$b(this, _LayoutNode_client, client, "f");
1219
- this.entityId = entityId;
1220
- }
1221
- }
1222
- layoutEntities.LayoutNode = LayoutNode;
1223
- _LayoutNode_client = new WeakMap();
1224
- /**
1225
- * @ignore
1226
- * @internal
1227
- * Encapsulates Api consumption of {@link LayoutEntitiesClient} with a relayed dispatch
1228
- * @param client
1229
- * @param controllerId
1230
- * @param identity
1231
- * @returns a new instance of {@link LayoutEntitiesClient} with bound to the controllerId
1232
- */
1233
- LayoutNode.newLayoutEntitiesClient = async (client, controllerId, identity) => {
1234
- const dispatch = (0, channel_api_relay_1.createRelayedDispatch)(client, identity, 'layout-relay', 'You are trying to interact with a layout component on a window that does not exist or has been destroyed.');
1235
- const consumer = new api_exposer_1.ApiConsumer(new api_exposer_1.ChannelsConsumer({ dispatch }));
1236
- return consumer.consume({ id: controllerId });
1237
- };
1238
- LayoutNode.getEntity = (definition, client) => {
1239
- const { entityId, type } = definition;
1240
- switch (type) {
1241
- case 'column':
1242
- case 'row':
1243
- return new ColumnOrRow(client, entityId, type);
1244
- case 'stack':
1245
- return new TabStack(client, entityId);
1246
- default:
1247
- throw new Error(`Unrecognised Layout Entity encountered ('${JSON.stringify(definition)})`);
1248
- }
1249
- };
1250
- /**
1251
- * A TabStack is used to manage the state of a stack of tabs within an OpenFin Layout.
1252
- */
1253
- class TabStack extends LayoutNode {
1254
- /** @internal */
1255
- constructor(client, entityId) {
1256
- super(client, entityId);
1257
- /**
1258
- * @internal
1259
- * ApiClient for {@link LayoutEntitiesController}
1260
- */
1261
- _TabStack_client.set(this, void 0);
1262
- /**
1263
- * Type of the content item. Always stack, but useful for distinguishing between a {@link TabStack} and {@link ColumnOrRow}.
1264
- */
1265
- this.type = 'stack';
1266
- /**
1267
- * Retrieves a list of all views belonging to this {@link TabStack}.
1268
- *
1269
- * Known Issue: If adding a view overflows the tab-container width, the added view will be set as active
1270
- * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
1271
- * If that happens and then getViews() is called, it will return the identities in a different order than
1272
- * than the currently rendered tab order.
1273
- *
1274
- *
1275
- * @throws If the {@link TabStack} has been destroyed.
1276
- * @example
1277
- * ```js
1278
- * if (!fin.me.isView) {
1279
- * throw new Error('Not running in a platform View.');
1280
- * }
1281
- *
1282
- * const stack = await fin.me.getCurrentStack();
1283
- * // Alternatively, you can wrap any view and get the stack from there
1284
- * // const viewFromSomewhere = fin.View.wrapSync(someView.identity);
1285
- * // const stack = await viewFromSomewhere.getCurrentStack();
1286
- * const views = await stack.getViews();
1287
- * console.log(`Stack contains ${views.length} view(s)`);
1288
- * ```
1289
- * @experimental
1290
- */
1291
- this.getViews = () => __classPrivateFieldGet$d(this, _TabStack_client, "f").getStackViews(this.entityId);
1292
- /**
1293
- * Adds or creates a view in this {@link TabStack}.
1294
- *
1295
- * @remarks Known Issue: If adding a view overflows the tab-container, the added view will be set as active
1296
- * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
1297
- *
1298
- * @param view The identity of an existing view to add, or options to create a view.
1299
- * @param options Optional view options: index number used to insert the view into the stack at that index. Defaults to 0 (front of the stack)
1300
- * @returns Resolves with the {@link OpenFin.Identity identity} of the added view.
1301
- * @throws If the view does not exist or fails to create.
1302
- * @throws If the {@link TabStack} has been destroyed.
1303
- * @example
1304
- * ```js
1305
- * if (!fin.me.isView) {
1306
- * throw new Error('Not running in a platform View.');
1307
- * }
1308
- *
1309
- * const stack = await fin.me.getCurrentStack();
1310
- * // Alternatively, you can wrap any view and get the stack from there
1311
- * // const viewFromSomewhere = fin.View.wrapSync(someView.identity);
1312
- * // const stack = await viewFromSomewhere.getCurrentStack();
1313
- * const googleViewIdentity = await stack.addView({ name: 'google-view', url: 'http://google.com/' });
1314
- * console.log('Identity of the google view just added', { googleViewIdentity });
1315
- * // pass in { index: number } to set the index in the stack. Here 1 means, end of the stack (defaults to 0)
1316
- * const appleViewIdentity = await stack.addView({ name: 'apple-view', url: 'http://apple.com/' }, { index: 1 });
1317
- * console.log('Identity of the apple view just added', { appleViewIdentity });
1318
- * ```
1319
- * @experimental
1320
- */
1321
- this.addView = async (view, options = { index: 0 }) => __classPrivateFieldGet$d(this, _TabStack_client, "f").addViewToStack(this.entityId, view, options);
1322
- /**
1323
- * Removes a view from this {@link TabStack}.
1324
- *
1325
- * @remarks Throws an exception if the view identity does not exist or was already destroyed.
1326
- *
1327
- * @param view - Identity of the view to remove.
1328
- * @throws If the view does not exist or does not belong to the stack.
1329
- * @throws If the {@link TabStack} has been destroyed.
1330
- *
1331
- * @example
1332
- * ```js
1333
- * if (!fin.me.isView) {
1334
- * throw new Error('Not running in a platform View.');
1335
- * }
1336
- *
1337
- * const stack = await fin.me.getCurrentStack();
1338
- * const googleViewIdentity = await stack.addView({ name: 'google-view', url: 'http://google.com/' });
1339
- *
1340
- * await stack.removeView(googleViewIdentity);
1341
- *
1342
- * try {
1343
- * await stack.removeView(googleViewIdentity);
1344
- * } catch (error) {
1345
- * // Tried to remove a view ('google-view') which does not belong to the stack.
1346
- * console.log(error);
1347
- * }
1348
- * ```
1349
- */
1350
- this.removeView = async (view) => {
1351
- await __classPrivateFieldGet$d(this, _TabStack_client, "f").removeViewFromStack(this.entityId, view);
1352
- };
1353
- /**
1354
- * Sets the active view of the {@link TabStack} without focusing it.
1355
- * @param view - Identity of the view to activate.
1356
- * @returns Promise which resolves with void once the view has been activated.
1357
- * @throws If the {@link TabStack} has been destroyed.
1358
- * @throws If the view does not exist.
1359
- * @example
1360
- * Change the active tab of a known View's TabStack:
1361
- * ```js
1362
- * const targetView = fin.View.wrapSync({ uuid: 'uuid', name: 'view-name' });
1363
- * const stack = await targetView.getCurrentStack();
1364
- * await stack.setActiveView(targetView.identity);
1365
- * ```
1366
- *
1367
- * Set the current View as active within its TabStack:
1368
- * ```js
1369
- * const stack = await fin.me.getCurrentStack();
1370
- * await stack.setActiveView(fin.me.identity);
1371
- * ```
1372
- * @experimental
1373
- */
1374
- this.setActiveView = async (view) => {
1375
- await __classPrivateFieldGet$d(this, _TabStack_client, "f").setStackActiveView(this.entityId, view);
1376
- };
1377
- __classPrivateFieldSet$b(this, _TabStack_client, client, "f");
1378
- }
1379
- }
1380
- layoutEntities.TabStack = TabStack;
1381
- _TabStack_client = new WeakMap();
1382
- /**
1383
- * A ColumnOrRow is used to manage the state of Column and Rows within an OpenFin Layout.
1384
- */
1385
- class ColumnOrRow extends LayoutNode {
1386
- /**
1387
- * @internal
1388
- */
1389
- constructor(client, entityId, type) {
1390
- super(client, entityId);
1391
- /**
1392
- * @ignore
1393
- * @internal
1394
- * ApiClient for {@link LayoutEntitiesController}
1395
- */
1396
- _ColumnOrRow_client.set(this, void 0);
1397
- /**
1398
- * Retrieves the content array of the ColumnOrRow
1399
- *
1400
- * @example
1401
- * ```js
1402
- * if (!fin.me.isView) {
1403
- * throw new Error('Not running in a platform View.');
1404
- * }
1405
- *
1406
- * const stack = await fin.me.getCurrentStack();
1407
- * // Retrieves the parent ColumnOrRow
1408
- * const columnOrRow = await stack.getParent();
1409
- *
1410
- * // returns [TabStack]
1411
- * const contentArray = await columnOrRow.getContent();
1412
- * console.log(`The ColumnOrRow has ${contentArray.length} item(s)`);
1413
- * ```
1414
- */
1415
- this.getContent = async () => {
1416
- const contentItemEntities = await __classPrivateFieldGet$d(this, _ColumnOrRow_client, "f").getContent(this.entityId);
1417
- return contentItemEntities.map((entity) => LayoutNode.getEntity(entity, __classPrivateFieldGet$d(this, _ColumnOrRow_client, "f")));
1418
- };
1419
- __classPrivateFieldSet$b(this, _ColumnOrRow_client, client, "f");
1420
- this.type = type;
1421
- }
1422
- }
1423
- layoutEntities.ColumnOrRow = ColumnOrRow;
1424
- _ColumnOrRow_client = new WeakMap();
1425
-
1426
- var layout_constants = {};
1427
-
1428
- Object.defineProperty(layout_constants, "__esModule", { value: true });
1429
- layout_constants.DEFAULT_LAYOUT_KEY = layout_constants.LAYOUT_CONTROLLER_ID = void 0;
1430
- layout_constants.LAYOUT_CONTROLLER_ID = 'layout-entities';
1431
- // TODO: eventually export this somehow
1432
- layout_constants.DEFAULT_LAYOUT_KEY = '__default__';
1433
-
1434
- var main = {};
1435
-
1436
- Object.defineProperty(main, "__esModule", { value: true });
1437
- main.WebContents = void 0;
1438
- const base_1$j = base;
1439
- class WebContents extends base_1$j.EmitterBase {
1440
- /**
1441
- * @param identity The identity of the {@link OpenFin.WebContentsEvents WebContents}.
1442
- * @param entityType The type of the {@link OpenFin.WebContentsEvents WebContents}.
1443
- */
1444
- constructor(wire, identity, entityType) {
1445
- super(wire, entityType, identity.uuid, identity.name);
1446
- this.identity = identity;
1447
- this.entityType = entityType;
1448
- }
1449
- /**
1450
- * Gets a base64 encoded image of all or part of the WebContents.
1451
- * @param options Options for the capturePage call.
1452
- *
1453
- * @example
1454
- *
1455
- * View:
1456
- * ```js
1457
- * const view = fin.View.getCurrentSync();
1458
- *
1459
- * // PNG image of a full visible View
1460
- * console.log(await view.capturePage());
1461
- *
1462
- * // Low-quality JPEG image of a defined visible area of the view
1463
- * const options = {
1464
- * area: {
1465
- * height: 100,
1466
- * width: 100,
1467
- * x: 10,
1468
- * y: 10,
1469
- * },
1470
- * format: 'jpg',
1471
- * quality: 20
1472
- * }
1473
- * console.log(await view.capturePage(options));
1474
- * ```
1475
- *
1476
- * Window:
1477
- * ```js
1478
- * const wnd = await fin.Window.getCurrent();
1479
- *
1480
- * // PNG image of a full visible window
1481
- * console.log(await wnd.capturePage());
1482
- *
1483
- * // Low-quality JPEG image of a defined visible area of the window
1484
- * const options = {
1485
- * area: {
1486
- * height: 100,
1487
- * width: 100,
1488
- * x: 10,
1489
- * y: 10,
1490
- * },
1491
- * format: 'jpg',
1492
- * quality: 20
1493
- * }
1494
- * console.log(await wnd.capturePage(options));
1495
- * ```
1496
- *
1497
- * @remarks
1498
- * `WebContents` refers to shared functionality between {@link OpenFin.Window} and {@link OpenFin.View}.
1499
- * We do not expose an explicit superclass for this functionality, but it does have its own
1500
- * {@link OpenFin.WebContentsEvents event namespace}.
1501
- */
1502
- capturePage(options) {
1503
- return this.wire.sendAction('capture-page', { options, ...this.identity }).then(({ payload }) => payload.data);
1504
- }
1505
- /**
1506
- * Executes Javascript on the WebContents, restricted to contents you own or contents owned by
1507
- * applications you have created.
1508
- * @param code JavaScript code to be executed on the view.
1509
- *
1510
- * @example
1511
- * View:
1512
- * ```js
1513
- * async function executeJavaScript(code) {
1514
- * const view = await fin.View.wrap({uuid: 'uuid', name: 'view name'});
1515
- * return await view.executeJavaScript(code);
1516
- * }
1517
- *
1518
- * executeJavaScript(`console.log('Hello, Openfin')`).then(() => console.log('Javascript excuted')).catch(err => console.log(err));
1519
- * ```
1520
- *
1521
- * Window:
1522
- * ```js
1523
- * async function executeJavaScript(code) {
1524
- * const app = await fin.Application.start({
1525
- * name: 'myApp',
1526
- * uuid: 'app-1',
1527
- * url: 'https://cdn.openfin.co/docs/javascript/stable/tutorial-Window.executeJavaScript.html',
1528
- * autoShow: true
1529
- * });
1530
- * const win = await app.getWindow();
1531
- * return await win.executeJavaScript(code);
1532
- * }
1533
- *
1534
- * executeJavaScript(`console.log('Hello, Openfin')`).then(() => console.log('Javascript excuted')).catch(err => console.log(err));
1535
- * ```
1536
- * @remarks
1537
- * `WebContents` refers to shared functionality between {@link OpenFin.Window} and {@link OpenFin.View}.
1538
- * We do not expose an explicit superclass for this functionality, but it does have its own
1539
- * {@link OpenFin.WebContentsEvents event namespace}.
1540
- */
1541
- executeJavaScript(code) {
1542
- return this.wire
1543
- .sendAction('execute-javascript-in-window', { ...this.identity, code })
1544
- .then(({ payload }) => payload.data);
841
+ /**
842
+ * Executes Javascript on the WebContents, restricted to contents you own or contents owned by
843
+ * applications you have created.
844
+ * @param code JavaScript code to be executed on the view.
845
+ *
846
+ * @example
847
+ * View:
848
+ * ```js
849
+ * async function executeJavaScript(code) {
850
+ * const view = await fin.View.wrap({uuid: 'uuid', name: 'view name'});
851
+ * return await view.executeJavaScript(code);
852
+ * }
853
+ *
854
+ * executeJavaScript(`console.log('Hello, Openfin')`).then(() => console.log('Javascript excuted')).catch(err => console.log(err));
855
+ * ```
856
+ *
857
+ * Window:
858
+ * ```js
859
+ * async function executeJavaScript(code) {
860
+ * const app = await fin.Application.start({
861
+ * name: 'myApp',
862
+ * uuid: 'app-1',
863
+ * url: 'https://cdn.openfin.co/docs/javascript/stable/tutorial-Window.executeJavaScript.html',
864
+ * autoShow: true
865
+ * });
866
+ * const win = await app.getWindow();
867
+ * return await win.executeJavaScript(code);
868
+ * }
869
+ *
870
+ * executeJavaScript(`console.log('Hello, Openfin')`).then(() => console.log('Javascript excuted')).catch(err => console.log(err));
871
+ * ```
872
+ * @remarks
873
+ * `WebContents` refers to shared functionality between {@link OpenFin.Window} and {@link OpenFin.View}.
874
+ * We do not expose an explicit superclass for this functionality, but it does have its own
875
+ * {@link OpenFin.WebContentsEvents event namespace}.
876
+ */
877
+ executeJavaScript(code) {
878
+ return this.wire
879
+ .sendAction('execute-javascript-in-window', { ...this.identity, code })
880
+ .then(({ payload }) => payload.data);
1545
881
  }
1546
882
  /**
1547
883
  * Returns the zoom level of the WebContents.
@@ -2507,18 +1843,11 @@ var hasRequiredInstance$2;
2507
1843
  function requireInstance$2 () {
2508
1844
  if (hasRequiredInstance$2) return Instance$5;
2509
1845
  hasRequiredInstance$2 = 1;
2510
- var __classPrivateFieldGet = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
2511
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
2512
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
2513
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
2514
- };
2515
1846
  var _View_providerChannelClient;
2516
1847
  Object.defineProperty(Instance$5, "__esModule", { value: true });
2517
1848
  Instance$5.View = void 0;
2518
1849
  const transport_errors_1 = transportErrors;
2519
1850
  const lazy_1 = lazy;
2520
- const layout_entities_1 = layoutEntities;
2521
- const layout_constants_1 = layout_constants;
2522
1851
  const main_1 = main;
2523
1852
  const window_1 = requireWindow();
2524
1853
  /**
@@ -2836,7 +2165,7 @@ function requireInstance$2 () {
2836
2165
  return ack.payload.data;
2837
2166
  };
2838
2167
  /**
2839
- * Retrieves the layout for the window the view is attached to.
2168
+ * Retrieves the OpenFin.Layout instance for the Window the View is attached to.
2840
2169
  *
2841
2170
  * @example
2842
2171
  * ```js
@@ -2852,29 +2181,7 @@ function requireInstance$2 () {
2852
2181
  this.wire.sendAction('view-get-parent-layout', { ...this.identity }).catch(() => {
2853
2182
  // don't expose
2854
2183
  });
2855
- const layoutWindow = await this.getCurrentWindow();
2856
- let layoutWindowIdentity = layoutWindow.identity;
2857
- // TODO: CORE-1857 - when we tearout active layout or drag a view out of a window, the above identity includes the whole window info.
2858
- if (layoutWindowIdentity.identity) {
2859
- layoutWindowIdentity = layoutWindowIdentity.identity;
2860
- }
2861
- try {
2862
- const providerChannelClient = await __classPrivateFieldGet(this, _View_providerChannelClient, "f").getValue();
2863
- const client = await layout_entities_1.LayoutNode.newLayoutEntitiesClient(providerChannelClient, layout_constants_1.LAYOUT_CONTROLLER_ID, layoutWindowIdentity);
2864
- const layoutIdentity = await client.getLayoutIdentityForViewOrThrow(this.identity);
2865
- return this.fin.Platform.Layout.wrap(layoutIdentity);
2866
- }
2867
- catch (e) {
2868
- const allowedErrors = [
2869
- 'No action registered at target for',
2870
- 'getLayoutIdentityForViewOrThrow is not a function'
2871
- ];
2872
- if (!allowedErrors.some((m) => e.message.includes(m))) {
2873
- throw e;
2874
- }
2875
- // fallback logic for missing endpoint
2876
- return this.fin.Platform.Layout.wrap(layoutWindowIdentity);
2877
- }
2184
+ return this.fin.Platform.Layout.getLayoutByViewIdentity(this.identity);
2878
2185
  };
2879
2186
  /**
2880
2187
  * Gets the View's options.
@@ -2991,7 +2298,7 @@ function requireInstance$2 () {
2991
2298
  });
2992
2299
  try {
2993
2300
  const layout = await this.getParentLayout();
2994
- return layout.getStackByView(this.identity);
2301
+ return layout.getStackByViewIdentity(this.identity);
2995
2302
  }
2996
2303
  catch (error) {
2997
2304
  throw new transport_errors_1.RuntimeError({ reason: 'This view does not belong to a stack.', error });
@@ -8024,12 +7331,12 @@ class ChannelError extends Error {
8024
7331
  }
8025
7332
  channelError.ChannelError = ChannelError;
8026
7333
 
8027
- var __classPrivateFieldGet$c = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
7334
+ var __classPrivateFieldGet$d = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8028
7335
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
8029
7336
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
8030
7337
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
8031
7338
  };
8032
- var __classPrivateFieldSet$a = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
7339
+ var __classPrivateFieldSet$c = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8033
7340
  if (kind === "m") throw new TypeError("Private method is not writable");
8034
7341
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
8035
7342
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
@@ -8073,7 +7380,7 @@ class ChannelClient extends channel_1$1.ChannelBase {
8073
7380
  static closeChannelByEndpointId(id) {
8074
7381
  const channel = channelClientsByEndpointId.get(id);
8075
7382
  if (channel) {
8076
- __classPrivateFieldGet$c(channel, _ChannelClient_close, "f").call(channel);
7383
+ __classPrivateFieldGet$d(channel, _ChannelClient_close, "f").call(channel);
8077
7384
  }
8078
7385
  }
8079
7386
  /**
@@ -8084,7 +7391,7 @@ class ChannelClient extends channel_1$1.ChannelBase {
8084
7391
  for (const channelClient of channelClientsByEndpointId.values()) {
8085
7392
  if (channelClient.providerIdentity.channelId === eventPayload.channelId) {
8086
7393
  channelClient.disconnectListener(eventPayload);
8087
- __classPrivateFieldGet$c(channelClient, _ChannelClient_close, "f").call(channelClient);
7394
+ __classPrivateFieldGet$d(channelClient, _ChannelClient_close, "f").call(channelClient);
8088
7395
  }
8089
7396
  }
8090
7397
  }
@@ -8099,12 +7406,12 @@ class ChannelClient extends channel_1$1.ChannelBase {
8099
7406
  this.processAction = (action, payload, senderIdentity) => super.processAction(action, payload, senderIdentity);
8100
7407
  _ChannelClient_close.set(this, () => {
8101
7408
  channelClientsByEndpointId.delete(this.endpointId);
8102
- __classPrivateFieldGet$c(this, _ChannelClient_strategy, "f").close();
7409
+ __classPrivateFieldGet$d(this, _ChannelClient_strategy, "f").close();
8103
7410
  });
8104
- __classPrivateFieldSet$a(this, _ChannelClient_protectedObj, new channel_1$1.ProtectedItems(routingInfo, close), "f");
7411
+ __classPrivateFieldSet$c(this, _ChannelClient_protectedObj, new channel_1$1.ProtectedItems(routingInfo, close), "f");
8105
7412
  this.disconnectListener = () => undefined;
8106
7413
  this.endpointId = routingInfo.endpointId;
8107
- __classPrivateFieldSet$a(this, _ChannelClient_strategy, strategy, "f");
7414
+ __classPrivateFieldSet$c(this, _ChannelClient_strategy, strategy, "f");
8108
7415
  channelClientsByEndpointId.set(this.endpointId, this);
8109
7416
  strategy.receive(this.processAction);
8110
7417
  }
@@ -8112,7 +7419,7 @@ class ChannelClient extends channel_1$1.ChannelBase {
8112
7419
  * a read-only provider identity
8113
7420
  */
8114
7421
  get providerIdentity() {
8115
- const protectedObj = __classPrivateFieldGet$c(this, _ChannelClient_protectedObj, "f");
7422
+ const protectedObj = __classPrivateFieldGet$d(this, _ChannelClient_protectedObj, "f");
8116
7423
  return protectedObj.providerIdentity;
8117
7424
  }
8118
7425
  /**
@@ -8141,9 +7448,9 @@ class ChannelClient extends channel_1$1.ChannelBase {
8141
7448
  * ```
8142
7449
  */
8143
7450
  async dispatch(action, payload) {
8144
- if (__classPrivateFieldGet$c(this, _ChannelClient_strategy, "f").isEndpointConnected(this.providerIdentity.channelId)) {
7451
+ if (__classPrivateFieldGet$d(this, _ChannelClient_strategy, "f").isEndpointConnected(this.providerIdentity.channelId)) {
8145
7452
  const callSites = transport_errors_1$3.RuntimeError.getCallSite();
8146
- return __classPrivateFieldGet$c(this, _ChannelClient_strategy, "f").send(this.providerIdentity.channelId, action, payload).catch((e) => {
7453
+ return __classPrivateFieldGet$d(this, _ChannelClient_strategy, "f").send(this.providerIdentity.channelId, action, payload).catch((e) => {
8147
7454
  throw new channel_error_1$1.ChannelError(e, action, payload, callSites);
8148
7455
  });
8149
7456
  }
@@ -8195,10 +7502,10 @@ class ChannelClient extends channel_1$1.ChannelBase {
8195
7502
  */
8196
7503
  async disconnect() {
8197
7504
  await this.sendDisconnectAction();
8198
- __classPrivateFieldGet$c(this, _ChannelClient_close, "f").call(this);
7505
+ __classPrivateFieldGet$d(this, _ChannelClient_close, "f").call(this);
8199
7506
  }
8200
7507
  async sendDisconnectAction() {
8201
- const protectedObj = __classPrivateFieldGet$c(this, _ChannelClient_protectedObj, "f");
7508
+ const protectedObj = __classPrivateFieldGet$d(this, _ChannelClient_protectedObj, "f");
8202
7509
  await protectedObj.close();
8203
7510
  }
8204
7511
  /**
@@ -8231,13 +7538,13 @@ exhaustive.exhaustiveCheck = exhaustiveCheck;
8231
7538
 
8232
7539
  var strategy$3 = {};
8233
7540
 
8234
- var __classPrivateFieldSet$9 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
7541
+ var __classPrivateFieldSet$b = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8235
7542
  if (kind === "m") throw new TypeError("Private method is not writable");
8236
7543
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
8237
7544
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
8238
7545
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
8239
7546
  };
8240
- var __classPrivateFieldGet$b = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
7547
+ var __classPrivateFieldGet$c = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8241
7548
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
8242
7549
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
8243
7550
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
@@ -8262,7 +7569,7 @@ class ClassicStrategy {
8262
7569
  // connection problems occur
8263
7570
  _ClassicStrategy_pendingMessagesByEndpointId.set(this, new Map());
8264
7571
  this.send = async (endpointId, action, payload) => {
8265
- const to = __classPrivateFieldGet$b(this, _ClassicStrategy_endpointIdentityMap, "f").get(endpointId);
7572
+ const to = __classPrivateFieldGet$c(this, _ClassicStrategy_endpointIdentityMap, "f").get(endpointId);
8266
7573
  if (!to) {
8267
7574
  throw new Error(`Could not locate routing info for endpoint ${endpointId}`);
8268
7575
  }
@@ -8274,13 +7581,13 @@ class ClassicStrategy {
8274
7581
  }
8275
7582
  delete cleanId.isLocalEndpointId;
8276
7583
  // grab the promise before awaiting it to save in our pending messages map
8277
- const p = __classPrivateFieldGet$b(this, _ClassicStrategy_wire, "f").sendAction('send-channel-message', {
7584
+ const p = __classPrivateFieldGet$c(this, _ClassicStrategy_wire, "f").sendAction('send-channel-message', {
8278
7585
  ...cleanId,
8279
7586
  providerIdentity: this.providerIdentity,
8280
7587
  action,
8281
7588
  payload
8282
7589
  });
8283
- __classPrivateFieldGet$b(this, _ClassicStrategy_pendingMessagesByEndpointId, "f").get(endpointId)?.add(p);
7590
+ __classPrivateFieldGet$c(this, _ClassicStrategy_pendingMessagesByEndpointId, "f").get(endpointId)?.add(p);
8284
7591
  const raw = await p
8285
7592
  .catch((error) => {
8286
7593
  if ('cause' in error) {
@@ -8290,16 +7597,16 @@ class ClassicStrategy {
8290
7597
  })
8291
7598
  .finally(() => {
8292
7599
  // clean up the pending promise
8293
- __classPrivateFieldGet$b(this, _ClassicStrategy_pendingMessagesByEndpointId, "f").get(endpointId)?.delete(p);
7600
+ __classPrivateFieldGet$c(this, _ClassicStrategy_pendingMessagesByEndpointId, "f").get(endpointId)?.delete(p);
8294
7601
  });
8295
7602
  return raw.payload.data.result;
8296
7603
  };
8297
7604
  this.close = async () => {
8298
7605
  this.messageReceiver.removeEndpoint(this.providerIdentity.channelId, this.endpointId);
8299
- [...__classPrivateFieldGet$b(this, _ClassicStrategy_endpointIdentityMap, "f").keys()].forEach((id) => this.closeEndpoint(id));
8300
- __classPrivateFieldSet$9(this, _ClassicStrategy_endpointIdentityMap, new Map(), "f");
7606
+ [...__classPrivateFieldGet$c(this, _ClassicStrategy_endpointIdentityMap, "f").keys()].forEach((id) => this.closeEndpoint(id));
7607
+ __classPrivateFieldSet$b(this, _ClassicStrategy_endpointIdentityMap, new Map(), "f");
8301
7608
  };
8302
- __classPrivateFieldSet$9(this, _ClassicStrategy_wire, wire, "f");
7609
+ __classPrivateFieldSet$b(this, _ClassicStrategy_wire, wire, "f");
8303
7610
  }
8304
7611
  onEndpointDisconnect(endpointId, listener) {
8305
7612
  // Never fires for 'classic'.
@@ -8308,20 +7615,20 @@ class ClassicStrategy {
8308
7615
  this.messageReceiver.addEndpoint(listener, this.providerIdentity.channelId, this.endpointId);
8309
7616
  }
8310
7617
  async closeEndpoint(endpointId) {
8311
- const id = __classPrivateFieldGet$b(this, _ClassicStrategy_endpointIdentityMap, "f").get(endpointId);
8312
- __classPrivateFieldGet$b(this, _ClassicStrategy_endpointIdentityMap, "f").delete(endpointId);
8313
- const pendingSet = __classPrivateFieldGet$b(this, _ClassicStrategy_pendingMessagesByEndpointId, "f").get(endpointId);
7618
+ const id = __classPrivateFieldGet$c(this, _ClassicStrategy_endpointIdentityMap, "f").get(endpointId);
7619
+ __classPrivateFieldGet$c(this, _ClassicStrategy_endpointIdentityMap, "f").delete(endpointId);
7620
+ const pendingSet = __classPrivateFieldGet$c(this, _ClassicStrategy_pendingMessagesByEndpointId, "f").get(endpointId);
8314
7621
  pendingSet?.forEach((p) => {
8315
7622
  const errorMsg = `Channel connection with identity uuid: ${id?.uuid} / name: ${id?.name} / endpointId: ${endpointId} no longer connected.`;
8316
7623
  p.cancel(new Error(errorMsg));
8317
7624
  });
8318
7625
  }
8319
7626
  isEndpointConnected(endpointId) {
8320
- return __classPrivateFieldGet$b(this, _ClassicStrategy_endpointIdentityMap, "f").has(endpointId);
7627
+ return __classPrivateFieldGet$c(this, _ClassicStrategy_endpointIdentityMap, "f").has(endpointId);
8321
7628
  }
8322
7629
  addEndpoint(endpointId, payload) {
8323
- __classPrivateFieldGet$b(this, _ClassicStrategy_endpointIdentityMap, "f").set(endpointId, payload.endpointIdentity);
8324
- __classPrivateFieldGet$b(this, _ClassicStrategy_pendingMessagesByEndpointId, "f").set(endpointId, new Set());
7630
+ __classPrivateFieldGet$c(this, _ClassicStrategy_endpointIdentityMap, "f").set(endpointId, payload.endpointIdentity);
7631
+ __classPrivateFieldGet$c(this, _ClassicStrategy_pendingMessagesByEndpointId, "f").set(endpointId, new Set());
8325
7632
  }
8326
7633
  isValidEndpointPayload(payload) {
8327
7634
  return (typeof payload?.endpointIdentity?.endpointId === 'string' ||
@@ -8356,12 +7663,12 @@ function errorToPOJO(error) {
8356
7663
  }
8357
7664
  errors.errorToPOJO = errorToPOJO;
8358
7665
 
8359
- var __classPrivateFieldGet$a = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
7666
+ var __classPrivateFieldGet$b = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8360
7667
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
8361
7668
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
8362
7669
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
8363
7670
  };
8364
- var __classPrivateFieldSet$8 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
7671
+ var __classPrivateFieldSet$a = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8365
7672
  if (kind === "m") throw new TypeError("Private method is not writable");
8366
7673
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
8367
7674
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
@@ -8396,8 +7703,8 @@ class RTCEndpoint {
8396
7703
  if (this.rtc.rtcClient.connectionState !== 'connected') {
8397
7704
  this.rtc.rtcClient.removeEventListener('connectionstatechange', this.connectionStateChangeHandler);
8398
7705
  this.close();
8399
- if (__classPrivateFieldGet$a(this, _RTCEndpoint_disconnectListener, "f")) {
8400
- __classPrivateFieldGet$a(this, _RTCEndpoint_disconnectListener, "f").call(this);
7706
+ if (__classPrivateFieldGet$b(this, _RTCEndpoint_disconnectListener, "f")) {
7707
+ __classPrivateFieldGet$b(this, _RTCEndpoint_disconnectListener, "f").call(this);
8401
7708
  }
8402
7709
  }
8403
7710
  };
@@ -8445,9 +7752,9 @@ class RTCEndpoint {
8445
7752
  data = new TextDecoder().decode(e.data);
8446
7753
  }
8447
7754
  const { messageId, action, payload } = JSON.parse(data);
8448
- if (__classPrivateFieldGet$a(this, _RTCEndpoint_processAction, "f")) {
7755
+ if (__classPrivateFieldGet$b(this, _RTCEndpoint_processAction, "f")) {
8449
7756
  try {
8450
- const res = await __classPrivateFieldGet$a(this, _RTCEndpoint_processAction, "f").call(this, action, payload, endpointIdentity);
7757
+ const res = await __classPrivateFieldGet$b(this, _RTCEndpoint_processAction, "f").call(this, action, payload, endpointIdentity);
8451
7758
  this.rtc.channels.response.send(JSON.stringify({
8452
7759
  messageId,
8453
7760
  payload: res,
@@ -8481,25 +7788,25 @@ class RTCEndpoint {
8481
7788
  datachannel.onclose = (e) => {
8482
7789
  [...this.responseMap.values()].forEach((promise) => promise.reject(new Error('RTCDataChannel closed unexpectedly, this is most commonly caused by message size. Note: RTC Channels have a message size limit of ~255kB.')));
8483
7790
  this.close();
8484
- if (__classPrivateFieldGet$a(this, _RTCEndpoint_disconnectListener, "f")) {
8485
- __classPrivateFieldGet$a(this, _RTCEndpoint_disconnectListener, "f").call(this);
7791
+ if (__classPrivateFieldGet$b(this, _RTCEndpoint_disconnectListener, "f")) {
7792
+ __classPrivateFieldGet$b(this, _RTCEndpoint_disconnectListener, "f").call(this);
8486
7793
  }
8487
7794
  };
8488
7795
  });
8489
7796
  }
8490
7797
  onDisconnect(listener) {
8491
- if (!__classPrivateFieldGet$a(this, _RTCEndpoint_disconnectListener, "f")) {
8492
- __classPrivateFieldSet$8(this, _RTCEndpoint_disconnectListener, listener, "f");
7798
+ if (!__classPrivateFieldGet$b(this, _RTCEndpoint_disconnectListener, "f")) {
7799
+ __classPrivateFieldSet$a(this, _RTCEndpoint_disconnectListener, listener, "f");
8493
7800
  }
8494
7801
  else {
8495
7802
  throw new Error('RTCEndpoint disconnectListener cannot be set twice.');
8496
7803
  }
8497
7804
  }
8498
7805
  receive(listener) {
8499
- if (__classPrivateFieldGet$a(this, _RTCEndpoint_processAction, "f")) {
7806
+ if (__classPrivateFieldGet$b(this, _RTCEndpoint_processAction, "f")) {
8500
7807
  throw new Error('You have already set a listener for this RTC Endpoint.');
8501
7808
  }
8502
- __classPrivateFieldSet$8(this, _RTCEndpoint_processAction, listener, "f");
7809
+ __classPrivateFieldSet$a(this, _RTCEndpoint_processAction, listener, "f");
8503
7810
  }
8504
7811
  get connected() {
8505
7812
  return this.rtc.rtcClient.connectionState === 'connected';
@@ -8510,12 +7817,12 @@ _RTCEndpoint_processAction = new WeakMap(), _RTCEndpoint_disconnectListener = ne
8510
7817
 
8511
7818
  var strategy$1 = {};
8512
7819
 
8513
- var __classPrivateFieldGet$9 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
7820
+ var __classPrivateFieldGet$a = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8514
7821
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
8515
7822
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
8516
7823
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
8517
7824
  };
8518
- var __classPrivateFieldSet$7 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
7825
+ var __classPrivateFieldSet$9 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8519
7826
  if (kind === "m") throw new TypeError("Private method is not writable");
8520
7827
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
8521
7828
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
@@ -8536,11 +7843,11 @@ class EndpointStrategy {
8536
7843
  return this.getEndpointById(endpointId).send(action, payload);
8537
7844
  };
8538
7845
  this.close = async () => {
8539
- if (__classPrivateFieldGet$9(this, _EndpointStrategy_connected, "f")) {
8540
- __classPrivateFieldGet$9(this, _EndpointStrategy_endpointMap, "f").forEach((endpoint) => endpoint.close());
8541
- __classPrivateFieldSet$7(this, _EndpointStrategy_endpointMap, new Map(), "f");
7846
+ if (__classPrivateFieldGet$a(this, _EndpointStrategy_connected, "f")) {
7847
+ __classPrivateFieldGet$a(this, _EndpointStrategy_endpointMap, "f").forEach((endpoint) => endpoint.close());
7848
+ __classPrivateFieldSet$9(this, _EndpointStrategy_endpointMap, new Map(), "f");
8542
7849
  }
8543
- __classPrivateFieldSet$7(this, _EndpointStrategy_connected, false, "f");
7850
+ __classPrivateFieldSet$9(this, _EndpointStrategy_connected, false, "f");
8544
7851
  };
8545
7852
  this.isValidEndpointPayload = validateEndpoint;
8546
7853
  }
@@ -8548,39 +7855,39 @@ class EndpointStrategy {
8548
7855
  this.getEndpointById(endpointId).onDisconnect(listener);
8549
7856
  }
8550
7857
  receive(listener) {
8551
- if (__classPrivateFieldGet$9(this, _EndpointStrategy_processAction, "f")) {
7858
+ if (__classPrivateFieldGet$a(this, _EndpointStrategy_processAction, "f")) {
8552
7859
  throw new Error(`You have already set a listener for this ${this.StrategyName} Strategy`);
8553
7860
  }
8554
- __classPrivateFieldSet$7(this, _EndpointStrategy_processAction, listener, "f");
7861
+ __classPrivateFieldSet$9(this, _EndpointStrategy_processAction, listener, "f");
8555
7862
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
8556
- __classPrivateFieldGet$9(this, _EndpointStrategy_endpointMap, "f").forEach((endpoint) => endpoint.receive(__classPrivateFieldGet$9(this, _EndpointStrategy_processAction, "f")));
7863
+ __classPrivateFieldGet$a(this, _EndpointStrategy_endpointMap, "f").forEach((endpoint) => endpoint.receive(__classPrivateFieldGet$a(this, _EndpointStrategy_processAction, "f")));
8557
7864
  }
8558
7865
  getEndpointById(endpointId) {
8559
- const endpoint = __classPrivateFieldGet$9(this, _EndpointStrategy_endpointMap, "f").get(endpointId);
7866
+ const endpoint = __classPrivateFieldGet$a(this, _EndpointStrategy_endpointMap, "f").get(endpointId);
8560
7867
  if (!endpoint) {
8561
7868
  throw new Error(`Client with endpoint id ${endpointId} is not connected`);
8562
7869
  }
8563
7870
  return endpoint;
8564
7871
  }
8565
7872
  get connected() {
8566
- return __classPrivateFieldGet$9(this, _EndpointStrategy_connected, "f");
7873
+ return __classPrivateFieldGet$a(this, _EndpointStrategy_connected, "f");
8567
7874
  }
8568
7875
  isEndpointConnected(endpointId) {
8569
- return __classPrivateFieldGet$9(this, _EndpointStrategy_endpointMap, "f").has(endpointId);
7876
+ return __classPrivateFieldGet$a(this, _EndpointStrategy_endpointMap, "f").has(endpointId);
8570
7877
  }
8571
7878
  addEndpoint(endpointId, payload) {
8572
- if (!__classPrivateFieldGet$9(this, _EndpointStrategy_connected, "f")) {
7879
+ if (!__classPrivateFieldGet$a(this, _EndpointStrategy_connected, "f")) {
8573
7880
  console.warn(`Adding endpoint to disconnected ${this.StrategyName} Strategy`);
8574
7881
  return;
8575
7882
  }
8576
7883
  const clientStrat = new this.EndpointType(payload);
8577
- if (__classPrivateFieldGet$9(this, _EndpointStrategy_processAction, "f")) {
8578
- clientStrat.receive(__classPrivateFieldGet$9(this, _EndpointStrategy_processAction, "f"));
7884
+ if (__classPrivateFieldGet$a(this, _EndpointStrategy_processAction, "f")) {
7885
+ clientStrat.receive(__classPrivateFieldGet$a(this, _EndpointStrategy_processAction, "f"));
8579
7886
  }
8580
- __classPrivateFieldGet$9(this, _EndpointStrategy_endpointMap, "f").set(endpointId, clientStrat);
7887
+ __classPrivateFieldGet$a(this, _EndpointStrategy_endpointMap, "f").set(endpointId, clientStrat);
8581
7888
  }
8582
7889
  async closeEndpoint(endpointId) {
8583
- __classPrivateFieldGet$9(this, _EndpointStrategy_endpointMap, "f").delete(endpointId);
7890
+ __classPrivateFieldGet$a(this, _EndpointStrategy_endpointMap, "f").delete(endpointId);
8584
7891
  }
8585
7892
  }
8586
7893
  strategy$1.EndpointStrategy = EndpointStrategy;
@@ -8762,12 +8069,12 @@ function runtimeUuidMeetsMinimumRuntimeVersion(runtimeUuid, minVersion) {
8762
8069
  }
8763
8070
  runtimeVersioning.runtimeUuidMeetsMinimumRuntimeVersion = runtimeUuidMeetsMinimumRuntimeVersion;
8764
8071
 
8765
- var __classPrivateFieldGet$8 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8072
+ var __classPrivateFieldGet$9 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8766
8073
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
8767
8074
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
8768
8075
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
8769
8076
  };
8770
- var __classPrivateFieldSet$6 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8077
+ var __classPrivateFieldSet$8 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8771
8078
  if (kind === "m") throw new TypeError("Private method is not writable");
8772
8079
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
8773
8080
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
@@ -8811,18 +8118,18 @@ class ChannelProvider extends channel_1.ChannelBase {
8811
8118
  * a read-only array containing all the identities of connecting clients.
8812
8119
  */
8813
8120
  get connections() {
8814
- return [...__classPrivateFieldGet$8(this, _ChannelProvider_connections, "f")];
8121
+ return [...__classPrivateFieldGet$9(this, _ChannelProvider_connections, "f")];
8815
8122
  }
8816
8123
  static handleClientDisconnection(channel, payload) {
8817
8124
  const removeById = channel.connections.find((identity) => identity.endpointId === payload.endpointId);
8818
8125
  if (removeById) {
8819
- __classPrivateFieldGet$8(channel, _ChannelProvider_removeEndpoint, "f").call(channel, removeById);
8126
+ __classPrivateFieldGet$9(channel, _ChannelProvider_removeEndpoint, "f").call(channel, removeById);
8820
8127
  }
8821
8128
  else {
8822
8129
  const multipleRemoves = channel.connections.filter((identity) => {
8823
8130
  return identity.uuid === payload.uuid && identity.name === payload.name;
8824
8131
  });
8825
- multipleRemoves.forEach(__classPrivateFieldGet$8(channel, _ChannelProvider_removeEndpoint, "f"));
8132
+ multipleRemoves.forEach(__classPrivateFieldGet$9(channel, _ChannelProvider_removeEndpoint, "f"));
8826
8133
  }
8827
8134
  channel.disconnectListener(payload);
8828
8135
  }
@@ -8839,8 +8146,8 @@ class ChannelProvider extends channel_1.ChannelBase {
8839
8146
  _ChannelProvider_strategy.set(this, void 0);
8840
8147
  _ChannelProvider_removeEndpoint.set(this, (identity) => {
8841
8148
  const remainingConnections = this.connections.filter((clientIdentity) => clientIdentity.endpointId !== identity.endpointId);
8842
- __classPrivateFieldGet$8(this, _ChannelProvider_strategy, "f").closeEndpoint(identity.endpointId);
8843
- __classPrivateFieldSet$6(this, _ChannelProvider_connections, remainingConnections, "f");
8149
+ __classPrivateFieldGet$9(this, _ChannelProvider_strategy, "f").closeEndpoint(identity.endpointId);
8150
+ __classPrivateFieldSet$8(this, _ChannelProvider_connections, remainingConnections, "f");
8844
8151
  });
8845
8152
  // Must be bound.
8846
8153
  this.processAction = async (action, payload, senderIdentity) => {
@@ -8854,17 +8161,17 @@ class ChannelProvider extends channel_1.ChannelBase {
8854
8161
  return super.processAction(action, payload, senderIdentity);
8855
8162
  };
8856
8163
  _ChannelProvider_close.set(this, () => {
8857
- __classPrivateFieldGet$8(this, _ChannelProvider_strategy, "f").close();
8164
+ __classPrivateFieldGet$9(this, _ChannelProvider_strategy, "f").close();
8858
8165
  const remove = ChannelProvider.removalMap.get(this);
8859
8166
  if (remove) {
8860
8167
  remove();
8861
8168
  }
8862
8169
  });
8863
- __classPrivateFieldSet$6(this, _ChannelProvider_protectedObj, new channel_1.ProtectedItems(providerIdentity, close), "f");
8170
+ __classPrivateFieldSet$8(this, _ChannelProvider_protectedObj, new channel_1.ProtectedItems(providerIdentity, close), "f");
8864
8171
  this.connectListener = () => undefined;
8865
8172
  this.disconnectListener = () => undefined;
8866
- __classPrivateFieldSet$6(this, _ChannelProvider_connections, [], "f");
8867
- __classPrivateFieldSet$6(this, _ChannelProvider_strategy, strategy, "f");
8173
+ __classPrivateFieldSet$8(this, _ChannelProvider_connections, [], "f");
8174
+ __classPrivateFieldSet$8(this, _ChannelProvider_strategy, strategy, "f");
8868
8175
  strategy.receive(this.processAction);
8869
8176
  }
8870
8177
  /**
@@ -8895,16 +8202,16 @@ class ChannelProvider extends channel_1.ChannelBase {
8895
8202
  */
8896
8203
  dispatch(to, action, payload) {
8897
8204
  const endpointId = to.endpointId ?? this.getEndpointIdForOpenFinId(to, action);
8898
- if (endpointId && __classPrivateFieldGet$8(this, _ChannelProvider_strategy, "f").isEndpointConnected(endpointId)) {
8205
+ if (endpointId && __classPrivateFieldGet$9(this, _ChannelProvider_strategy, "f").isEndpointConnected(endpointId)) {
8899
8206
  const callSites = transport_errors_1$2.RuntimeError.getCallSite();
8900
- return __classPrivateFieldGet$8(this, _ChannelProvider_strategy, "f").send(endpointId, action, payload).catch((e) => {
8207
+ return __classPrivateFieldGet$9(this, _ChannelProvider_strategy, "f").send(endpointId, action, payload).catch((e) => {
8901
8208
  throw new channel_error_1.ChannelError(e, action, payload, callSites);
8902
8209
  });
8903
8210
  }
8904
8211
  return Promise.reject(new Error(`Client connection with identity uuid: ${to.uuid} / name: ${to.name} / endpointId: ${endpointId} no longer connected.`));
8905
8212
  }
8906
8213
  async processConnection(senderId, payload) {
8907
- __classPrivateFieldGet$8(this, _ChannelProvider_connections, "f").push(senderId);
8214
+ __classPrivateFieldGet$9(this, _ChannelProvider_connections, "f").push(senderId);
8908
8215
  return this.connectListener(senderId, payload);
8909
8216
  }
8910
8217
  /**
@@ -8927,7 +8234,7 @@ class ChannelProvider extends channel_1.ChannelBase {
8927
8234
  * ```
8928
8235
  */
8929
8236
  publish(action, payload) {
8930
- return this.connections.map((to) => __classPrivateFieldGet$8(this, _ChannelProvider_strategy, "f").send(to.endpointId, action, payload));
8237
+ return this.connections.map((to) => __classPrivateFieldGet$9(this, _ChannelProvider_strategy, "f").send(to.endpointId, action, payload));
8931
8238
  }
8932
8239
  /**
8933
8240
  * Register a listener that is called on every new client connection.
@@ -9001,11 +8308,11 @@ class ChannelProvider extends channel_1.ChannelBase {
9001
8308
  * ```
9002
8309
  */
9003
8310
  async destroy() {
9004
- const protectedObj = __classPrivateFieldGet$8(this, _ChannelProvider_protectedObj, "f");
8311
+ const protectedObj = __classPrivateFieldGet$9(this, _ChannelProvider_protectedObj, "f");
9005
8312
  protectedObj.providerIdentity;
9006
- __classPrivateFieldSet$6(this, _ChannelProvider_connections, [], "f");
8313
+ __classPrivateFieldSet$8(this, _ChannelProvider_connections, [], "f");
9007
8314
  await protectedObj.close();
9008
- __classPrivateFieldGet$8(this, _ChannelProvider_close, "f").call(this);
8315
+ __classPrivateFieldGet$9(this, _ChannelProvider_close, "f").call(this);
9009
8316
  }
9010
8317
  /**
9011
8318
  * Returns an array with info on every Client connected to the Provider
@@ -9075,7 +8382,7 @@ class ChannelProvider extends channel_1.ChannelBase {
9075
8382
  getEndpointIdForOpenFinId(clientIdentity, action) {
9076
8383
  const matchingConnections = this.connections.filter((c) => c.name === clientIdentity.name && c.uuid === clientIdentity.uuid);
9077
8384
  if (matchingConnections.length >= 2) {
9078
- const protectedObj = __classPrivateFieldGet$8(this, _ChannelProvider_protectedObj, "f");
8385
+ const protectedObj = __classPrivateFieldGet$9(this, _ChannelProvider_protectedObj, "f");
9079
8386
  const { uuid, name } = clientIdentity;
9080
8387
  const providerUuid = protectedObj?.providerIdentity.uuid;
9081
8388
  const providerName = protectedObj?.providerIdentity.name;
@@ -9287,13 +8594,13 @@ class CombinedStrategy {
9287
8594
  }
9288
8595
  strategy.default = CombinedStrategy;
9289
8596
 
9290
- var __classPrivateFieldSet$5 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8597
+ var __classPrivateFieldSet$7 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
9291
8598
  if (kind === "m") throw new TypeError("Private method is not writable");
9292
8599
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
9293
8600
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
9294
8601
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
9295
8602
  };
9296
- var __classPrivateFieldGet$7 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8603
+ var __classPrivateFieldGet$8 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9297
8604
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9298
8605
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
9299
8606
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
@@ -9342,8 +8649,8 @@ class ConnectionManager extends base_1$f.Base {
9342
8649
  };
9343
8650
  this.providerMap = new Map();
9344
8651
  this.protocolManager = new protocol_manager_1.ProtocolManager(this.wire.environment.type === 'node' ? ['classic'] : ['rtc', 'classic']);
9345
- __classPrivateFieldSet$5(this, _ConnectionManager_messageReceiver, new message_receiver_1.MessageReceiver(wire), "f");
9346
- __classPrivateFieldSet$5(this, _ConnectionManager_rtcConnectionManager, new ice_manager_1.RTCICEManager(wire), "f");
8652
+ __classPrivateFieldSet$7(this, _ConnectionManager_messageReceiver, new message_receiver_1.MessageReceiver(wire), "f");
8653
+ __classPrivateFieldSet$7(this, _ConnectionManager_rtcConnectionManager, new ice_manager_1.RTCICEManager(wire), "f");
9347
8654
  wire.registerMessageHandler(this.onmessage.bind(this));
9348
8655
  }
9349
8656
  createProvider(options, providerIdentity) {
@@ -9354,7 +8661,7 @@ class ConnectionManager extends base_1$f.Base {
9354
8661
  case 'rtc':
9355
8662
  return new strategy_2.RTCStrategy();
9356
8663
  case 'classic':
9357
- return new strategy_1.ClassicStrategy(this.wire, __classPrivateFieldGet$7(this, _ConnectionManager_messageReceiver, "f"),
8664
+ return new strategy_1.ClassicStrategy(this.wire, __classPrivateFieldGet$8(this, _ConnectionManager_messageReceiver, "f"),
9358
8665
  // Providers do not have an endpointId, use channelId as endpointId in the strategy.
9359
8666
  providerIdentity.channelId, providerIdentity);
9360
8667
  default:
@@ -9390,7 +8697,7 @@ class ConnectionManager extends base_1$f.Base {
9390
8697
  const supportedProtocols = await Promise.all(protocols.map(async (type) => {
9391
8698
  switch (type) {
9392
8699
  case 'rtc': {
9393
- const { rtcClient, channels, offer, rtcConnectionId, channelsOpened } = await __classPrivateFieldGet$7(this, _ConnectionManager_rtcConnectionManager, "f").startClientOffer();
8700
+ const { rtcClient, channels, offer, rtcConnectionId, channelsOpened } = await __classPrivateFieldGet$8(this, _ConnectionManager_rtcConnectionManager, "f").startClientOffer();
9394
8701
  rtcPacket = { rtcClient, channels, channelsOpened };
9395
8702
  return {
9396
8703
  type: 'rtc',
@@ -9417,18 +8724,18 @@ class ConnectionManager extends base_1$f.Base {
9417
8724
  routingInfo.endpointId = this.wire.environment.getNextMessageId();
9418
8725
  // For New Clients connecting to Old Providers. To prevent multi-dispatching and publishing, we delete previously-connected
9419
8726
  // clients that are in the same context as the newly-connected client.
9420
- __classPrivateFieldGet$7(this, _ConnectionManager_messageReceiver, "f").checkForPreviousClientConnection(routingInfo.channelId);
8727
+ __classPrivateFieldGet$8(this, _ConnectionManager_messageReceiver, "f").checkForPreviousClientConnection(routingInfo.channelId);
9421
8728
  }
9422
8729
  const answer = routingInfo.answer ?? {
9423
8730
  supportedProtocols: [{ type: 'classic', version: 1 }]
9424
8731
  };
9425
8732
  const createStrategyFromAnswer = async (protocol) => {
9426
8733
  if (protocol.type === 'rtc' && rtcPacket) {
9427
- await __classPrivateFieldGet$7(this, _ConnectionManager_rtcConnectionManager, "f").finishClientOffer(rtcPacket.rtcClient, protocol.payload.answer, rtcPacket.channelsOpened);
8734
+ await __classPrivateFieldGet$8(this, _ConnectionManager_rtcConnectionManager, "f").finishClientOffer(rtcPacket.rtcClient, protocol.payload.answer, rtcPacket.channelsOpened);
9428
8735
  return new strategy_2.RTCStrategy();
9429
8736
  }
9430
8737
  if (protocol.type === 'classic') {
9431
- return new strategy_1.ClassicStrategy(this.wire, __classPrivateFieldGet$7(this, _ConnectionManager_messageReceiver, "f"), routingInfo.endpointId, routingInfo);
8738
+ return new strategy_1.ClassicStrategy(this.wire, __classPrivateFieldGet$8(this, _ConnectionManager_messageReceiver, "f"), routingInfo.endpointId, routingInfo);
9432
8739
  }
9433
8740
  return null;
9434
8741
  };
@@ -9496,7 +8803,7 @@ class ConnectionManager extends base_1$f.Base {
9496
8803
  clientAnswer = await overlappingProtocols.reduce(async (accumP, protocolToUse) => {
9497
8804
  const answer = await accumP;
9498
8805
  if (protocolToUse.type === 'rtc') {
9499
- const { answer: rtcAnswer, rtcClient, channels } = await __classPrivateFieldGet$7(this, _ConnectionManager_rtcConnectionManager, "f").createProviderAnswer(protocolToUse.payload.rtcConnectionId, protocolToUse.payload.offer);
8806
+ const { answer: rtcAnswer, rtcClient, channels } = await __classPrivateFieldGet$8(this, _ConnectionManager_rtcConnectionManager, "f").createProviderAnswer(protocolToUse.payload.rtcConnectionId, protocolToUse.payload.offer);
9500
8807
  answer.supportedProtocols.push({
9501
8808
  type: 'rtc',
9502
8809
  version: strategy_2.RTCInfo.version,
@@ -9544,13 +8851,13 @@ _ConnectionManager_messageReceiver = new WeakMap(), _ConnectionManager_rtcConnec
9544
8851
  *
9545
8852
  * @packageDocumentation
9546
8853
  */
9547
- var __classPrivateFieldSet$4 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8854
+ var __classPrivateFieldSet$6 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
9548
8855
  if (kind === "m") throw new TypeError("Private method is not writable");
9549
8856
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
9550
8857
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
9551
8858
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
9552
8859
  };
9553
- var __classPrivateFieldGet$6 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8860
+ var __classPrivateFieldGet$7 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9554
8861
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9555
8862
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
9556
8863
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
@@ -9607,11 +8914,11 @@ class Channel extends base_1$e.EmitterBase {
9607
8914
  client_1.ChannelClient.handleProviderDisconnect(eventPayload);
9608
8915
  }),
9609
8916
  this.on('connected', (...args) => {
9610
- __classPrivateFieldGet$6(this, _Channel_internalEmitter, "f").emit('connected', ...args);
8917
+ __classPrivateFieldGet$7(this, _Channel_internalEmitter, "f").emit('connected', ...args);
9611
8918
  })
9612
8919
  ]).catch(() => new Error('error setting up channel connection listeners'));
9613
8920
  }));
9614
- __classPrivateFieldSet$4(this, _Channel_connectionManager, new connection_manager_1.ConnectionManager(wire), "f");
8921
+ __classPrivateFieldSet$6(this, _Channel_connectionManager, new connection_manager_1.ConnectionManager(wire), "f");
9615
8922
  }
9616
8923
  /**
9617
8924
  *
@@ -9686,7 +8993,7 @@ class Channel extends base_1$e.EmitterBase {
9686
8993
  resolve(true);
9687
8994
  }
9688
8995
  };
9689
- __classPrivateFieldGet$6(this, _Channel_internalEmitter, "f").on('connected', connectedListener);
8996
+ __classPrivateFieldGet$7(this, _Channel_internalEmitter, "f").on('connected', connectedListener);
9690
8997
  });
9691
8998
  try {
9692
8999
  if (retryInfo.count > 0) {
@@ -9718,7 +9025,7 @@ class Channel extends base_1$e.EmitterBase {
9718
9025
  finally {
9719
9026
  retryInfo.count += 1;
9720
9027
  // in case of other errors, remove our listener
9721
- __classPrivateFieldGet$6(this, _Channel_internalEmitter, "f").removeListener('connected', connectedListener);
9028
+ __classPrivateFieldGet$7(this, _Channel_internalEmitter, "f").removeListener('connected', connectedListener);
9722
9029
  }
9723
9030
  } while (shouldWait); // If we're waiting we retry the above loop
9724
9031
  // Should wait was false, no channel was found.
@@ -9777,12 +9084,12 @@ class Channel extends base_1$e.EmitterBase {
9777
9084
  async connect(channelName, options = {}) {
9778
9085
  // Make sure we don't connect before listeners are set up
9779
9086
  // This also errors if we're not in OpenFin, ensuring we don't run unnecessary code
9780
- await __classPrivateFieldGet$6(this, _Channel_readyToConnect, "f").getValue();
9087
+ await __classPrivateFieldGet$7(this, _Channel_readyToConnect, "f").getValue();
9781
9088
  if (!channelName || typeof channelName !== 'string') {
9782
9089
  throw new Error('Please provide a channelName string to connect to a channel.');
9783
9090
  }
9784
9091
  const opts = { wait: true, ...this.wire.environment.getDefaultChannelOptions().connect, ...options };
9785
- const { offer, rtc: rtcPacket } = await __classPrivateFieldGet$6(this, _Channel_connectionManager, "f").createClientOffer(opts);
9092
+ const { offer, rtc: rtcPacket } = await __classPrivateFieldGet$7(this, _Channel_connectionManager, "f").createClientOffer(opts);
9786
9093
  let connectionUrl;
9787
9094
  if (this.fin.me.isFrame || this.fin.me.isView || this.fin.me.isWindow) {
9788
9095
  connectionUrl = (await this.fin.me.getInfo()).url;
@@ -9794,7 +9101,7 @@ class Channel extends base_1$e.EmitterBase {
9794
9101
  connectionUrl
9795
9102
  };
9796
9103
  const routingInfo = await this.safeConnect(channelName, opts.wait, connectPayload);
9797
- const strategy = await __classPrivateFieldGet$6(this, _Channel_connectionManager, "f").createClientStrategy(rtcPacket, routingInfo);
9104
+ const strategy = await __classPrivateFieldGet$7(this, _Channel_connectionManager, "f").createClientStrategy(rtcPacket, routingInfo);
9798
9105
  const channel = new client_1.ChannelClient(routingInfo, () => client_1.ChannelClient.wireClose(this.wire, routingInfo, routingInfo.endpointId), strategy);
9799
9106
  // It is the client's responsibility to handle endpoint disconnection to the provider.
9800
9107
  // If the endpoint dies, the client will force a disconnection through the core.
@@ -9863,7 +9170,7 @@ class Channel extends base_1$e.EmitterBase {
9863
9170
  throw new Error('Please provide a channelName to create a channel');
9864
9171
  }
9865
9172
  const { payload: { data: providerIdentity } } = await this.wire.sendAction('create-channel', { channelName });
9866
- const channel = __classPrivateFieldGet$6(this, _Channel_connectionManager, "f").createProvider(options, providerIdentity);
9173
+ const channel = __classPrivateFieldGet$7(this, _Channel_connectionManager, "f").createProvider(options, providerIdentity);
9867
9174
  // TODO: fix typing (internal)
9868
9175
  // @ts-expect-error
9869
9176
  this.on('client-disconnected', (eventPayload) => {
@@ -10754,19 +10061,23 @@ var Factory$3 = {};
10754
10061
 
10755
10062
  var Instance$2 = {};
10756
10063
 
10757
- var __classPrivateFieldGet$5 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
10064
+ var __classPrivateFieldSet$5 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
10065
+ if (kind === "m") throw new TypeError("Private method is not writable");
10066
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10067
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
10068
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
10069
+ };
10070
+ var __classPrivateFieldGet$6 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
10758
10071
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
10759
10072
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10760
10073
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
10761
10074
  };
10762
- var _Platform_connectToProvider;
10075
+ var _Platform_channelName, _Platform_connectToProvider;
10763
10076
  Object.defineProperty(Instance$2, "__esModule", { value: true });
10764
10077
  Instance$2.Platform = void 0;
10765
10078
  /* eslint-disable import/prefer-default-export, no-undef */
10766
10079
  const base_1$6 = base;
10767
10080
  const validate_1$1 = validate;
10768
- // Reuse clients to avoid overwriting already-registered client in provider
10769
- const clientMap = new Map();
10770
10081
  /** Manages the life cycle of windows and views in the application.
10771
10082
  *
10772
10083
  * Enables taking snapshots of itself and applying them to restore a previous configuration
@@ -10777,34 +10088,40 @@ class Platform extends base_1$6.EmitterBase {
10777
10088
  * @internal
10778
10089
  */
10779
10090
  // eslint-disable-next-line no-shadow
10780
- constructor(identity, channel) {
10091
+ constructor(wire, identity, channelName = `custom-frame-${identity.uuid}`) {
10781
10092
  // we piggyback off of application event emitter because from the core's perspective platform is just an app.
10782
- super(channel.wire, 'application', identity.uuid);
10783
- this.getClient = (identity) => {
10093
+ super(wire, 'application', identity.uuid);
10094
+ /**
10095
+ * @internal
10096
+ */
10097
+ _Platform_channelName.set(this, void 0);
10098
+ this.getClient = (identity = this.identity) => {
10099
+ if (identity.uuid !== this.identity.uuid) {
10100
+ // I have no idea why we allow passing in a different identity, but we do.
10101
+ // Doing this above the analytics call so we only register one call.
10102
+ return new Platform(this.wire, identity).getClient();
10103
+ }
10784
10104
  this.wire.sendAction('platform-get-client', this.identity).catch((e) => {
10785
10105
  // don't expose
10786
10106
  });
10787
- const target = identity || this.identity;
10788
- const { uuid } = target;
10789
- if (!clientMap.has(uuid)) {
10790
- const clientPromise = __classPrivateFieldGet$5(this, _Platform_connectToProvider, "f").call(this, uuid);
10791
- clientMap.set(uuid, clientPromise);
10107
+ if (!Platform.clientMap.has(__classPrivateFieldGet$6(this, _Platform_channelName, "f"))) {
10108
+ const clientPromise = __classPrivateFieldGet$6(this, _Platform_connectToProvider, "f").call(this);
10109
+ Platform.clientMap.set(__classPrivateFieldGet$6(this, _Platform_channelName, "f"), clientPromise);
10792
10110
  }
10793
10111
  // we set it above
10794
10112
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
10795
- return clientMap.get(uuid);
10113
+ return Platform.clientMap.get(__classPrivateFieldGet$6(this, _Platform_channelName, "f"));
10796
10114
  };
10797
- _Platform_connectToProvider.set(this, async (uuid) => {
10115
+ _Platform_connectToProvider.set(this, async () => {
10798
10116
  try {
10799
- const channelName = `custom-frame-${uuid}`;
10800
- const client = await this._channel.connect(channelName, { wait: false });
10117
+ const client = await this._channel.connect(__classPrivateFieldGet$6(this, _Platform_channelName, "f"), { wait: false });
10801
10118
  client.onDisconnection(() => {
10802
- clientMap.delete(uuid);
10119
+ Platform.clientMap.delete(__classPrivateFieldGet$6(this, _Platform_channelName, "f"));
10803
10120
  });
10804
10121
  return client;
10805
10122
  }
10806
10123
  catch (e) {
10807
- clientMap.delete(uuid);
10124
+ Platform.clientMap.delete(__classPrivateFieldGet$6(this, _Platform_channelName, "f"));
10808
10125
  throw new Error('The targeted Platform is not currently running. Listen for application-started event for the given Uuid.');
10809
10126
  }
10810
10127
  });
@@ -10817,7 +10134,8 @@ class Platform extends base_1$6.EmitterBase {
10817
10134
  if (errorMsg) {
10818
10135
  throw new Error(errorMsg);
10819
10136
  }
10820
- this._channel = channel;
10137
+ __classPrivateFieldSet$5(this, _Platform_channelName, channelName, "f");
10138
+ this._channel = this.fin.InterApplicationBus.Channel;
10821
10139
  this.identity = { uuid: identity.uuid };
10822
10140
  this.Layout = this.fin.Platform.Layout;
10823
10141
  this.Application = this.fin.Application.wrapSync(this.identity);
@@ -11530,87 +10848,757 @@ class Platform extends base_1$6.EmitterBase {
11530
10848
  *
11531
10849
  * const windowOrViewIdentity = { uuid: fin.me.uuid, name: 'nameOfWindowOrView' };
11532
10850
  *
11533
- * const targetWindowContext = await platform.getWindowContext(windowOrViewIdentity);
11534
- * console.log(targetWindowContext); // context of target window
10851
+ * const targetWindowContext = await platform.getWindowContext(windowOrViewIdentity);
10852
+ * console.log(targetWindowContext); // context of target window
10853
+ * ```
10854
+ * @experimental
10855
+ */
10856
+ async getWindowContext(target) {
10857
+ this.wire.sendAction('platform-get-window-context', this.identity).catch((e) => {
10858
+ // don't expose
10859
+ });
10860
+ const client = await this.getClient();
10861
+ const { entityType } = target ? await this.fin.System.getEntityInfo(target.uuid, target.name) : this.fin.me;
10862
+ return client.dispatch('get-window-context', {
10863
+ target: target || { uuid: this.fin.me.uuid, name: this.fin.me.name },
10864
+ entityType
10865
+ });
10866
+ }
10867
+ /**
10868
+ * Closes a window. If enableBeforeUnload is enabled in the Platform options, any beforeunload handler set on Views will fire
10869
+ * This behavior can be disabled by setting skipBeforeUnload to false in the options parameter.
10870
+ * @param winId
10871
+ * @param options
10872
+ *
10873
+ * @remarks This method works by setting a `close-requested` handler on the Platform Window. If you have your own `close-requested` handler set on the Platform Window as well,
10874
+ * it is recommended to move that logic over to the [PlatformProvider.closeWindow]{@link PlatformProvider#closeWindow} override to ensure it runs when the Window closes.
10875
+ *
10876
+ * @example
10877
+ *
10878
+ * ```js
10879
+ * // Close the current Window inside a Window context
10880
+ * const platform = await fin.Platform.getCurrent();
10881
+ * platform.closeWindow(fin.me.identity);
10882
+ *
10883
+ * // Close the Window from inside a View context
10884
+ * const platform = await fin.Platform.getCurrent();
10885
+ * const parentWindow = await fin.me.getCurrentWindow();
10886
+ * platform.closeWindow(parentWindow.identity);
10887
+ *
10888
+ * // Close the Window and do not fire the before unload handler on Views
10889
+ * const platform = await fin.Platform.getCurrent();
10890
+ * platform.closeWindow(fin.me.identity, { skipBeforeUnload: true });
11535
10891
  * ```
11536
10892
  * @experimental
11537
10893
  */
11538
- async getWindowContext(target) {
11539
- this.wire.sendAction('platform-get-window-context', this.identity).catch((e) => {
10894
+ async closeWindow(windowId, options = { skipBeforeUnload: false }) {
10895
+ this.wire.sendAction('platform-close-window', this.identity).catch((e) => {
11540
10896
  // don't expose
11541
10897
  });
11542
10898
  const client = await this.getClient();
11543
- const { entityType } = target ? await this.fin.System.getEntityInfo(target.uuid, target.name) : this.fin.me;
11544
- return client.dispatch('get-window-context', {
11545
- target: target || { uuid: this.fin.me.uuid, name: this.fin.me.name },
11546
- entityType
10899
+ return client.dispatch('close-window', { windowId, options });
10900
+ }
10901
+ }
10902
+ Instance$2.Platform = Platform;
10903
+ _Platform_channelName = new WeakMap(), _Platform_connectToProvider = new WeakMap();
10904
+ /**
10905
+ * @internal
10906
+ * Reuse clients to avoid overwriting already-registered client in provider
10907
+ * This ensures that only channel client is created per channel name per `fin` instance
10908
+ */
10909
+ Platform.clientMap = new Map();
10910
+
10911
+ var layout = {};
10912
+
10913
+ var Factory$2 = {};
10914
+
10915
+ var Instance$1 = {};
10916
+
10917
+ var commonUtils = {};
10918
+
10919
+ Object.defineProperty(commonUtils, "__esModule", { value: true });
10920
+ commonUtils.overrideFromComposables = commonUtils.isValidPresetType = void 0;
10921
+ function isValidPresetType(type) {
10922
+ switch (type) {
10923
+ case 'columns':
10924
+ case 'grid':
10925
+ case 'rows':
10926
+ case 'tabs':
10927
+ return true;
10928
+ default:
10929
+ return false;
10930
+ }
10931
+ }
10932
+ commonUtils.isValidPresetType = isValidPresetType;
10933
+ function overrideFromComposables(...overrides) {
10934
+ return (base) => overrides.reduceRight((p, c) => (b) => c(p(b)), (x) => x)(base);
10935
+ }
10936
+ commonUtils.overrideFromComposables = overrideFromComposables;
10937
+ commonUtils.default = { isValidPresetType };
10938
+
10939
+ var layoutEntities = {};
10940
+
10941
+ var apiExposer$1 = {};
10942
+
10943
+ var apiConsumer = {};
10944
+
10945
+ Object.defineProperty(apiConsumer, "__esModule", { value: true });
10946
+ apiConsumer.ApiConsumer = void 0;
10947
+ /**
10948
+ * Consumer for apis exposed with {@see ApiExposer}.
10949
+ *
10950
+ * A strategy that matches the strategy used to expose a target API must be provided.
10951
+ */
10952
+ class ApiConsumer {
10953
+ // eslint-disable-next-line
10954
+ constructor(strategy) {
10955
+ this.strategy = strategy;
10956
+ /**
10957
+ * Consumes an api exposed using a given transport strategy, and generates a client
10958
+ * for easy, type safe consumption of that client.
10959
+ * @param options Strategy specific consumption options.
10960
+ * @returns An api client matching the given type.
10961
+ */
10962
+ this.consume = async (options) => {
10963
+ const exposedProperties = await this.strategy.getExposedFunctions(options);
10964
+ return exposedProperties.reduce((client, prop) => ({
10965
+ ...client,
10966
+ [prop.key]: this.strategy.createFunction(prop, options)
10967
+ }), {});
10968
+ };
10969
+ }
10970
+ }
10971
+ apiConsumer.ApiConsumer = ApiConsumer;
10972
+
10973
+ var apiExposer = {};
10974
+
10975
+ var decorators = {};
10976
+
10977
+ Object.defineProperty(decorators, "__esModule", { value: true });
10978
+ decorators.expose = decorators.getExposedProperties = void 0;
10979
+ const exposedProperties = Symbol('exposedProperties');
10980
+ const getExposedProperties = (target) => {
10981
+ return target[exposedProperties] || target.prototype[exposedProperties] || [];
10982
+ };
10983
+ decorators.getExposedProperties = getExposedProperties;
10984
+ /**
10985
+ * Indicates that a class member function can be exposed using {@link ApiExposer}.
10986
+ * @param options Options specific to the strategy used in {@link ApiExposer}
10987
+ */
10988
+ // Returns any as decorator typing is weird.
10989
+ const expose = (options) => (target, key, descriptor) => {
10990
+ target[exposedProperties] = target[exposedProperties] || [];
10991
+ target[exposedProperties].push({ key, descriptor, options });
10992
+ };
10993
+ decorators.expose = expose;
10994
+
10995
+ Object.defineProperty(apiExposer, "__esModule", { value: true });
10996
+ apiExposer.ApiExposer = void 0;
10997
+ const decorators_1 = decorators;
10998
+ /**
10999
+ * Exposes api services on the transport of choice.
11000
+ */
11001
+ class ApiExposer {
11002
+ /**
11003
+ * @param strategy The expose strategy to use to expose instances.
11004
+ */
11005
+ // eslint-disable-next-line
11006
+ constructor(strategy) {
11007
+ this.strategy = strategy;
11008
+ /**
11009
+ * Exposes an instance of a given api on
11010
+ * @param instance Instance of a class which has been decorated to indicate which functions can be exposed.
11011
+ * @param instanceOptions Transport strategy specific options to use when exposing.
11012
+ */
11013
+ this.exposeInstance = async (instance, instanceOptions) => {
11014
+ const exposableProps = (0, decorators_1.getExposedProperties)(instance);
11015
+ const exposedProps = await Promise.all(exposableProps.map(async ({ key, options }) => {
11016
+ const customConsumptionOptions = await this.strategy.exposeFunction(instance[key].bind(instance), {
11017
+ key,
11018
+ options,
11019
+ meta: instanceOptions
11020
+ });
11021
+ return {
11022
+ key,
11023
+ options: customConsumptionOptions
11024
+ };
11025
+ }));
11026
+ await this.strategy.exposeMeta(instanceOptions, exposedProps);
11027
+ };
11028
+ }
11029
+ ;
11030
+ }
11031
+ apiExposer.ApiExposer = ApiExposer;
11032
+
11033
+ var strategies = {};
11034
+
11035
+ var openfinChannels = {};
11036
+
11037
+ var channelsConsumer = {};
11038
+
11039
+ Object.defineProperty(channelsConsumer, "__esModule", { value: true });
11040
+ channelsConsumer.ChannelsConsumer = void 0;
11041
+ class ChannelsConsumer {
11042
+ // eslint-disable-next-line
11043
+ constructor(channel) {
11044
+ this.channel = channel;
11045
+ this.getExposedFunctions = async (options) => {
11046
+ const { id } = options;
11047
+ const { props } = await this.channel.dispatch(`api-meta:${id}`);
11048
+ return props;
11049
+ };
11050
+ this.createFunction = (prop) => (...args) => {
11051
+ const { action } = prop.options;
11052
+ return this.channel.dispatch(action, { args });
11053
+ };
11054
+ }
11055
+ ;
11056
+ }
11057
+ channelsConsumer.ChannelsConsumer = ChannelsConsumer;
11058
+
11059
+ var channelsExposer = {};
11060
+
11061
+ Object.defineProperty(channelsExposer, "__esModule", { value: true });
11062
+ channelsExposer.ChannelsExposer = void 0;
11063
+ class ChannelsExposer {
11064
+ // eslint-disable-next-line
11065
+ constructor(channelProviderOrClient) {
11066
+ this.channelProviderOrClient = channelProviderOrClient;
11067
+ this.exposeFunction = async (target, config) => {
11068
+ const { key, options, meta } = config;
11069
+ const { id } = meta;
11070
+ const action = `${id}.${options?.action || key}`;
11071
+ await this.channelProviderOrClient.register(action, async ({ args }) => {
11072
+ return target(...args);
11073
+ });
11074
+ return { action };
11075
+ };
11076
+ this.exposeMeta = async ({ id }, props) => {
11077
+ const action = `api-meta:${id}`;
11078
+ await this.channelProviderOrClient.register(action, () => ({ props }));
11079
+ };
11080
+ }
11081
+ }
11082
+ channelsExposer.ChannelsExposer = ChannelsExposer;
11083
+
11084
+ (function (exports) {
11085
+ var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11086
+ if (k2 === undefined) k2 = k;
11087
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11088
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11089
+ desc = { enumerable: true, get: function() { return m[k]; } };
11090
+ }
11091
+ Object.defineProperty(o, k2, desc);
11092
+ }) : (function(o, m, k, k2) {
11093
+ if (k2 === undefined) k2 = k;
11094
+ o[k2] = m[k];
11095
+ }));
11096
+ var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
11097
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11098
+ };
11099
+ Object.defineProperty(exports, "__esModule", { value: true });
11100
+ __exportStar(channelsConsumer, exports);
11101
+ __exportStar(channelsExposer, exports);
11102
+ } (openfinChannels));
11103
+
11104
+ (function (exports) {
11105
+ var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11106
+ if (k2 === undefined) k2 = k;
11107
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11108
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11109
+ desc = { enumerable: true, get: function() { return m[k]; } };
11110
+ }
11111
+ Object.defineProperty(o, k2, desc);
11112
+ }) : (function(o, m, k, k2) {
11113
+ if (k2 === undefined) k2 = k;
11114
+ o[k2] = m[k];
11115
+ }));
11116
+ var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
11117
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11118
+ };
11119
+ Object.defineProperty(exports, "__esModule", { value: true });
11120
+ __exportStar(openfinChannels, exports);
11121
+ } (strategies));
11122
+
11123
+ (function (exports) {
11124
+ var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11125
+ if (k2 === undefined) k2 = k;
11126
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11127
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11128
+ desc = { enumerable: true, get: function() { return m[k]; } };
11129
+ }
11130
+ Object.defineProperty(o, k2, desc);
11131
+ }) : (function(o, m, k, k2) {
11132
+ if (k2 === undefined) k2 = k;
11133
+ o[k2] = m[k];
11134
+ }));
11135
+ var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) {
11136
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11137
+ };
11138
+ Object.defineProperty(exports, "__esModule", { value: true });
11139
+ __exportStar(apiConsumer, exports);
11140
+ __exportStar(apiExposer, exports);
11141
+ __exportStar(strategies, exports);
11142
+ __exportStar(decorators, exports);
11143
+ } (apiExposer$1));
11144
+
11145
+ var channelApiRelay = {};
11146
+
11147
+ Object.defineProperty(channelApiRelay, "__esModule", { value: true });
11148
+ channelApiRelay.createRelayedDispatch = channelApiRelay.relayChannelClientApi = void 0;
11149
+ const EXPECTED_ERRORS = [
11150
+ 'no longer connected',
11151
+ 'RTCDataChannel closed unexpectedly',
11152
+ 'The client you are trying to dispatch from is disconnected from the target provider',
11153
+ ];
11154
+ // Checks possible error messages that we want to trap, client error message can originate
11155
+ // from ChannelProvider::dispatch OR ClassicStrategy::closeEndpoint OR RTCEndPoint::dataChannel::onclose
11156
+ const isDisconnectedError = (errorMsg) => {
11157
+ return EXPECTED_ERRORS.some(e => errorMsg.includes(e));
11158
+ };
11159
+ /**
11160
+ * @internal
11161
+ * Create a channel relay for a given channel exposition, allowing a single provider to route
11162
+ * actions to the designated clients.
11163
+ *
11164
+ * Designed to be used in conjunction with @expose
11165
+ *
11166
+ * @param channelProvider The channel provider to relay the actions on.
11167
+ * @param config Determines which actions to relay. Please ensure action prefix matches the exposed api.
11168
+ */
11169
+ const relayChannelClientApi = async (channelProvider, relayId) => {
11170
+ channelProvider.register(`relay:${relayId}`, ({ action, target, payload }) => {
11171
+ return channelProvider.dispatch(target, action, payload);
11172
+ });
11173
+ await Promise.resolve();
11174
+ };
11175
+ channelApiRelay.relayChannelClientApi = relayChannelClientApi;
11176
+ const createRelayedDispatch = (client, target, relayId, relayErrorMsg) => async (action, payload) => {
11177
+ try {
11178
+ return await client.dispatch(`relay:${relayId}`, {
11179
+ action,
11180
+ payload,
11181
+ target
11547
11182
  });
11548
11183
  }
11184
+ catch (e) {
11185
+ if (isDisconnectedError(e.message) && relayErrorMsg) {
11186
+ throw new Error(relayErrorMsg);
11187
+ }
11188
+ throw e;
11189
+ }
11190
+ };
11191
+ channelApiRelay.createRelayedDispatch = createRelayedDispatch;
11192
+
11193
+ var __classPrivateFieldSet$4 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
11194
+ if (kind === "m") throw new TypeError("Private method is not writable");
11195
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
11196
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11197
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
11198
+ };
11199
+ var __classPrivateFieldGet$5 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
11200
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
11201
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11202
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11203
+ };
11204
+ var _LayoutNode_client, _TabStack_client, _ColumnOrRow_client;
11205
+ Object.defineProperty(layoutEntities, "__esModule", { value: true });
11206
+ layoutEntities.ColumnOrRow = layoutEntities.TabStack = layoutEntities.LayoutNode = void 0;
11207
+ const api_exposer_1 = apiExposer$1;
11208
+ const channel_api_relay_1 = channelApiRelay;
11209
+ /*
11210
+ This file includes LayoutNode, ColumnOrRow and TabStack classes, which are all closely
11211
+ intertwined, and share members via parent abstract class LayoutNode. To prevent circular
11212
+ refs, we define and export all the classes here.
11213
+ */
11214
+ /**
11215
+ * @ignore
11216
+ * @internal
11217
+ * Supplies an ApiClient for {@link LayoutEntitiesController} and helper methods
11218
+ * for the entities {@link TabStack} AND {@link ColumnOrRow} to use.
11219
+ */
11220
+ class LayoutNode {
11549
11221
  /**
11550
- * Closes a window. If enableBeforeUnload is enabled in the Platform options, any beforeunload handler set on Views will fire
11551
- * This behavior can be disabled by setting skipBeforeUnload to false in the options parameter.
11552
- * @param winId
11553
- * @param options
11554
- *
11555
- * @remarks This method works by setting a `close-requested` handler on the Platform Window. If you have your own `close-requested` handler set on the Platform Window as well,
11556
- * it is recommended to move that logic over to the [PlatformProvider.closeWindow]{@link PlatformProvider#closeWindow} override to ensure it runs when the Window closes.
11557
- *
11558
- * @example
11559
- *
11560
- * ```js
11561
- * // Close the current Window inside a Window context
11562
- * const platform = await fin.Platform.getCurrent();
11563
- * platform.closeWindow(fin.me.identity);
11564
- *
11565
- * // Close the Window from inside a View context
11566
- * const platform = await fin.Platform.getCurrent();
11567
- * const parentWindow = await fin.me.getCurrentWindow();
11568
- * platform.closeWindow(parentWindow.identity);
11569
- *
11570
- * // Close the Window and do not fire the before unload handler on Views
11571
- * const platform = await fin.Platform.getCurrent();
11572
- * platform.closeWindow(fin.me.identity, { skipBeforeUnload: true });
11573
- * ```
11574
- * @experimental
11222
+ * @internal
11223
+ * @ignore
11575
11224
  */
11576
- async closeWindow(windowId, options = { skipBeforeUnload: false }) {
11577
- this.wire.sendAction('platform-close-window', this.identity).catch((e) => {
11578
- // don't expose
11579
- });
11580
- const client = await this.getClient();
11581
- return client.dispatch('close-window', { windowId, options });
11225
+ constructor(client, entityId) {
11226
+ /**
11227
+ * @ignore
11228
+ * @internal
11229
+ * ApiClient for {@link LayoutEntitiesController}
11230
+ */
11231
+ _LayoutNode_client.set(this, void 0);
11232
+ /**
11233
+ * Checks if the TabStack or ColumnOrRow is the root content item
11234
+ *
11235
+ * @example
11236
+ * ```js
11237
+ * if (!fin.me.isView) {
11238
+ * throw new Error('Not running in a platform View.');
11239
+ * }
11240
+ *
11241
+ * const stack = await fin.me.getCurrentStack();
11242
+ * const isRoot = await stack.isRoot();
11243
+ * // The TabStack is root: false
11244
+ * console.log(`The TabStack is root: ${isRoot}`);
11245
+ *
11246
+ * // Retrieves the parent ColumnOrRow
11247
+ * const parent = await stack.getParent();
11248
+ * const parentIsRoot = await parent.isRoot();
11249
+ * // The parent ColumnOrRow is root: true
11250
+ * console.log(`The parent ColumnOrRow is root: ${parentIsRoot}`);
11251
+ * ```
11252
+ */
11253
+ this.isRoot = () => __classPrivateFieldGet$5(this, _LayoutNode_client, "f").isRoot(this.entityId);
11254
+ /**
11255
+ * Checks if the TabStack or ColumnOrRow exists
11256
+ *
11257
+ * @example
11258
+ * ```js
11259
+ * if (!fin.me.isView) {
11260
+ * throw new Error('Not running in a platform View.');
11261
+ * }
11262
+ *
11263
+ * const stack = await fin.me.getCurrentStack();
11264
+ * // Retrieves the parent ColumnOrRow
11265
+ * const columnOrRow = await stack.getParent();
11266
+ * let exists = await stack.exists();
11267
+ * // or
11268
+ * let exists = await columnOrRow.exists();
11269
+ * // The entity exists: true
11270
+ * console.log(`The entity exists: ${exists}`);
11271
+ * ```
11272
+ */
11273
+ this.exists = () => __classPrivateFieldGet$5(this, _LayoutNode_client, "f").exists(this.entityId);
11274
+ /**
11275
+ * Retrieves the parent of the TabStack or ColumnOrRow
11276
+ *
11277
+ * @example
11278
+ * ```js
11279
+ * if (!fin.me.isView) {
11280
+ * throw new Error('Not running in a platform View.');
11281
+ * }
11282
+ *
11283
+ * const stack = await fin.me.getCurrentStack();
11284
+ * // Retrieves the parent ColumnOrRow
11285
+ * const columnOrRow = await stack.getParent();
11286
+ *
11287
+ * // undefined if entity is the root item
11288
+ * let parent = await columnOrRow.getParent();
11289
+ * // or
11290
+ * let parent = await stack.getParent();
11291
+ * ```
11292
+ */
11293
+ this.getParent = async () => {
11294
+ const parent = await __classPrivateFieldGet$5(this, _LayoutNode_client, "f").getParent(this.entityId);
11295
+ if (!parent) {
11296
+ return undefined;
11297
+ }
11298
+ return LayoutNode.getEntity(parent, __classPrivateFieldGet$5(this, _LayoutNode_client, "f"));
11299
+ };
11300
+ /**
11301
+ * Creates a new TabStack adjacent to the given TabStack or ColumnOrRow. Inputs can be new views to create, or existing views.
11302
+ *
11303
+ * Known Issue: If the number of views to add overflows the tab-container, the added views will be set as active
11304
+ * during each render, and then placed at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
11305
+ * This means the views you pass to createAdjacentStack() may not render in the order given by the array.
11306
+ * Until fixed, this problem can be avoided only if your window is wide enough to fit creating all the views in the tabstack.
11307
+ *
11308
+ * @param views The views that will populate the new TabStack.
11309
+ * @param options Additional options that control new TabStack creation.
11310
+ * @returns The newly-created TabStack.
11311
+ *
11312
+ * @example
11313
+ * ```js
11314
+ * if (!fin.me.isView) {
11315
+ * throw new Error('Not running in a platform View.');
11316
+ * }
11317
+ *
11318
+ * const stack = await fin.me.getCurrentStack();
11319
+ * const columnOrRow = await stack.getParent();
11320
+ *
11321
+ * // Create view references by supplying a 'name' and 'url'
11322
+ * const views = [
11323
+ * // if 'name' is undefined, one will be generated
11324
+ * // if 'url' is undefined, it will default the view URL to 'about:blank'
11325
+ * { name: 'google-view', url: 'http://google.com/'},
11326
+ * { name: 'of-developers-view', url: 'http://developers.openfin.co/'},
11327
+ * ];
11328
+ *
11329
+ * // Create a view beforehand to be included in the new tab stack
11330
+ * const outsideView = await fin.View.create({
11331
+ * name: 'outside-bloomberg-view',
11332
+ * url: 'https://bloomberg.com/',
11333
+ * target: fin.me.identity,
11334
+ * });
11335
+ *
11336
+ * // Views to add can be identities, or the reference views mentioned above
11337
+ * const viewsToAdd = [outsideView.identity, ...views];
11338
+ *
11339
+ * // Possible position inputs: 'right' | 'left' | 'top' | 'bottom'
11340
+ * let stackFrom = await columnOrRow.createAdjacentStack(viewsToAdd, { position: 'right' });
11341
+ * // Or
11342
+ * let newStack = await stack.createAdjacentStack(viewsToAdd, { position: 'right' });
11343
+ * console.log(`A new TabStack created to the right has ${newStack.length} views in it`);
11344
+ *
11345
+ * ```
11346
+ * @experimental
11347
+ */
11348
+ this.createAdjacentStack = async (views, options) => {
11349
+ const entityId = await __classPrivateFieldGet$5(this, _LayoutNode_client, "f").createAdjacentStack(this.entityId, views, options);
11350
+ return LayoutNode.getEntity({ entityId, type: 'stack' }, __classPrivateFieldGet$5(this, _LayoutNode_client, "f"));
11351
+ };
11352
+ /**
11353
+ * Retrieves the adjacent TabStacks of the given TabStack or ColumnOrRow.
11354
+ *
11355
+ * @param edge Edge whose adjacent TabStacks will be returned.
11356
+ *
11357
+ * @example
11358
+ * ```js
11359
+ * if (!fin.me.isView) {
11360
+ * throw new Error('Not running in a platform View.');
11361
+ * }
11362
+ *
11363
+ * const stack = await fin.me.getCurrentStack();
11364
+ * const columnOrRow = await stack.getParent();
11365
+ * // Possible position inputs: 'right' | 'left' | 'top' | 'bottom'
11366
+ * let rightStacks = await columnOrRow.getAdjacentStacks('right');
11367
+ * let leftStacks = await columnOrRow.getAdjacentStacks('left');
11368
+ * // or
11369
+ * let rightStacks = await stack.getAdjacentStacks('right');
11370
+ * let leftStacks = await stack.getAdjacentStacks('left');
11371
+ *
11372
+ * console.log(`The entity has ${rightStacks.length} stacks to the right, and ${leftStacks.length} stacks to the left`);
11373
+ *
11374
+ * ```
11375
+ * @experimental
11376
+ */
11377
+ this.getAdjacentStacks = async (edge) => {
11378
+ const adjacentStacks = await __classPrivateFieldGet$5(this, _LayoutNode_client, "f").getAdjacentStacks({
11379
+ targetId: this.entityId,
11380
+ edge
11381
+ });
11382
+ return adjacentStacks.map((stack) => LayoutNode.getEntity({
11383
+ type: 'stack',
11384
+ entityId: stack.entityId
11385
+ }, __classPrivateFieldGet$5(this, _LayoutNode_client, "f")));
11386
+ };
11387
+ __classPrivateFieldSet$4(this, _LayoutNode_client, client, "f");
11388
+ this.entityId = entityId;
11582
11389
  }
11583
11390
  }
11584
- Instance$2.Platform = Platform;
11585
- _Platform_connectToProvider = new WeakMap();
11586
-
11587
- var layout = {};
11588
-
11589
- var Factory$2 = {};
11590
-
11591
- var Instance$1 = {};
11592
-
11593
- var commonUtils = {};
11594
-
11595
- Object.defineProperty(commonUtils, "__esModule", { value: true });
11596
- commonUtils.overrideFromComposables = commonUtils.isValidPresetType = void 0;
11597
- function isValidPresetType(type) {
11391
+ layoutEntities.LayoutNode = LayoutNode;
11392
+ _LayoutNode_client = new WeakMap();
11393
+ /**
11394
+ * @ignore
11395
+ * @internal
11396
+ * Encapsulates Api consumption of {@link LayoutEntitiesClient} with a relayed dispatch
11397
+ * @param client
11398
+ * @param controllerId
11399
+ * @param identity
11400
+ * @returns a new instance of {@link LayoutEntitiesClient} with bound to the controllerId
11401
+ */
11402
+ LayoutNode.newLayoutEntitiesClient = async (client, controllerId, identity) => {
11403
+ const dispatch = (0, channel_api_relay_1.createRelayedDispatch)(client, identity, 'layout-relay', 'You are trying to interact with a layout component on a window that does not exist or has been destroyed.');
11404
+ const consumer = new api_exposer_1.ApiConsumer(new api_exposer_1.ChannelsConsumer({ dispatch }));
11405
+ return consumer.consume({ id: controllerId });
11406
+ };
11407
+ LayoutNode.getEntity = (definition, client) => {
11408
+ const { entityId, type } = definition;
11598
11409
  switch (type) {
11599
- case 'columns':
11600
- case 'grid':
11601
- case 'rows':
11602
- case 'tabs':
11603
- return true;
11410
+ case 'column':
11411
+ case 'row':
11412
+ return new ColumnOrRow(client, entityId, type);
11413
+ case 'stack':
11414
+ return new TabStack(client, entityId);
11604
11415
  default:
11605
- return false;
11416
+ throw new Error(`Unrecognised Layout Entity encountered ('${JSON.stringify(definition)})`);
11417
+ }
11418
+ };
11419
+ /**
11420
+ * A TabStack is used to manage the state of a stack of tabs within an OpenFin Layout.
11421
+ */
11422
+ class TabStack extends LayoutNode {
11423
+ /** @internal */
11424
+ constructor(client, entityId) {
11425
+ super(client, entityId);
11426
+ /**
11427
+ * @internal
11428
+ * ApiClient for {@link LayoutEntitiesController}
11429
+ */
11430
+ _TabStack_client.set(this, void 0);
11431
+ /**
11432
+ * Type of the content item. Always stack, but useful for distinguishing between a {@link TabStack} and {@link ColumnOrRow}.
11433
+ */
11434
+ this.type = 'stack';
11435
+ /**
11436
+ * Retrieves a list of all views belonging to this {@link TabStack}.
11437
+ *
11438
+ * Known Issue: If adding a view overflows the tab-container width, the added view will be set as active
11439
+ * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
11440
+ * If that happens and then getViews() is called, it will return the identities in a different order than
11441
+ * than the currently rendered tab order.
11442
+ *
11443
+ *
11444
+ * @throws If the {@link TabStack} has been destroyed.
11445
+ * @example
11446
+ * ```js
11447
+ * if (!fin.me.isView) {
11448
+ * throw new Error('Not running in a platform View.');
11449
+ * }
11450
+ *
11451
+ * const stack = await fin.me.getCurrentStack();
11452
+ * // Alternatively, you can wrap any view and get the stack from there
11453
+ * // const viewFromSomewhere = fin.View.wrapSync(someView.identity);
11454
+ * // const stack = await viewFromSomewhere.getCurrentStack();
11455
+ * const views = await stack.getViews();
11456
+ * console.log(`Stack contains ${views.length} view(s)`);
11457
+ * ```
11458
+ * @experimental
11459
+ */
11460
+ this.getViews = () => __classPrivateFieldGet$5(this, _TabStack_client, "f").getStackViews(this.entityId);
11461
+ /**
11462
+ * Adds or creates a view in this {@link TabStack}.
11463
+ *
11464
+ * @remarks Known Issue: If adding a view overflows the tab-container, the added view will be set as active
11465
+ * and rendered at the front of the tab-stack, while the underlying order of tabs will remain unchanged.
11466
+ *
11467
+ * @param view The identity of an existing view to add, or options to create a view.
11468
+ * @param options Optional view options: index number used to insert the view into the stack at that index. Defaults to 0 (front of the stack)
11469
+ * @returns Resolves with the {@link OpenFin.Identity identity} of the added view.
11470
+ * @throws If the view does not exist or fails to create.
11471
+ * @throws If the {@link TabStack} has been destroyed.
11472
+ * @example
11473
+ * ```js
11474
+ * if (!fin.me.isView) {
11475
+ * throw new Error('Not running in a platform View.');
11476
+ * }
11477
+ *
11478
+ * const stack = await fin.me.getCurrentStack();
11479
+ * // Alternatively, you can wrap any view and get the stack from there
11480
+ * // const viewFromSomewhere = fin.View.wrapSync(someView.identity);
11481
+ * // const stack = await viewFromSomewhere.getCurrentStack();
11482
+ * const googleViewIdentity = await stack.addView({ name: 'google-view', url: 'http://google.com/' });
11483
+ * console.log('Identity of the google view just added', { googleViewIdentity });
11484
+ * // pass in { index: number } to set the index in the stack. Here 1 means, end of the stack (defaults to 0)
11485
+ * const appleViewIdentity = await stack.addView({ name: 'apple-view', url: 'http://apple.com/' }, { index: 1 });
11486
+ * console.log('Identity of the apple view just added', { appleViewIdentity });
11487
+ * ```
11488
+ * @experimental
11489
+ */
11490
+ this.addView = async (view, options = { index: 0 }) => __classPrivateFieldGet$5(this, _TabStack_client, "f").addViewToStack(this.entityId, view, options);
11491
+ /**
11492
+ * Removes a view from this {@link TabStack}.
11493
+ *
11494
+ * @remarks Throws an exception if the view identity does not exist or was already destroyed.
11495
+ *
11496
+ * @param view - Identity of the view to remove.
11497
+ * @throws If the view does not exist or does not belong to the stack.
11498
+ * @throws If the {@link TabStack} has been destroyed.
11499
+ *
11500
+ * @example
11501
+ * ```js
11502
+ * if (!fin.me.isView) {
11503
+ * throw new Error('Not running in a platform View.');
11504
+ * }
11505
+ *
11506
+ * const stack = await fin.me.getCurrentStack();
11507
+ * const googleViewIdentity = await stack.addView({ name: 'google-view', url: 'http://google.com/' });
11508
+ *
11509
+ * await stack.removeView(googleViewIdentity);
11510
+ *
11511
+ * try {
11512
+ * await stack.removeView(googleViewIdentity);
11513
+ * } catch (error) {
11514
+ * // Tried to remove a view ('google-view') which does not belong to the stack.
11515
+ * console.log(error);
11516
+ * }
11517
+ * ```
11518
+ */
11519
+ this.removeView = async (view) => {
11520
+ await __classPrivateFieldGet$5(this, _TabStack_client, "f").removeViewFromStack(this.entityId, view);
11521
+ };
11522
+ /**
11523
+ * Sets the active view of the {@link TabStack} without focusing it.
11524
+ * @param view - Identity of the view to activate.
11525
+ * @returns Promise which resolves with void once the view has been activated.
11526
+ * @throws If the {@link TabStack} has been destroyed.
11527
+ * @throws If the view does not exist.
11528
+ * @example
11529
+ * Change the active tab of a known View's TabStack:
11530
+ * ```js
11531
+ * const targetView = fin.View.wrapSync({ uuid: 'uuid', name: 'view-name' });
11532
+ * const stack = await targetView.getCurrentStack();
11533
+ * await stack.setActiveView(targetView.identity);
11534
+ * ```
11535
+ *
11536
+ * Set the current View as active within its TabStack:
11537
+ * ```js
11538
+ * const stack = await fin.me.getCurrentStack();
11539
+ * await stack.setActiveView(fin.me.identity);
11540
+ * ```
11541
+ * @experimental
11542
+ */
11543
+ this.setActiveView = async (view) => {
11544
+ await __classPrivateFieldGet$5(this, _TabStack_client, "f").setStackActiveView(this.entityId, view);
11545
+ };
11546
+ __classPrivateFieldSet$4(this, _TabStack_client, client, "f");
11606
11547
  }
11607
11548
  }
11608
- commonUtils.isValidPresetType = isValidPresetType;
11609
- function overrideFromComposables(...overrides) {
11610
- return (base) => overrides.reduceRight((p, c) => (b) => c(p(b)), (x) => x)(base);
11549
+ layoutEntities.TabStack = TabStack;
11550
+ _TabStack_client = new WeakMap();
11551
+ /**
11552
+ * A ColumnOrRow is used to manage the state of Column and Rows within an OpenFin Layout.
11553
+ */
11554
+ class ColumnOrRow extends LayoutNode {
11555
+ /**
11556
+ * @internal
11557
+ */
11558
+ constructor(client, entityId, type) {
11559
+ super(client, entityId);
11560
+ /**
11561
+ * @ignore
11562
+ * @internal
11563
+ * ApiClient for {@link LayoutEntitiesController}
11564
+ */
11565
+ _ColumnOrRow_client.set(this, void 0);
11566
+ /**
11567
+ * Retrieves the content array of the ColumnOrRow
11568
+ *
11569
+ * @example
11570
+ * ```js
11571
+ * if (!fin.me.isView) {
11572
+ * throw new Error('Not running in a platform View.');
11573
+ * }
11574
+ *
11575
+ * const stack = await fin.me.getCurrentStack();
11576
+ * // Retrieves the parent ColumnOrRow
11577
+ * const columnOrRow = await stack.getParent();
11578
+ *
11579
+ * // returns [TabStack]
11580
+ * const contentArray = await columnOrRow.getContent();
11581
+ * console.log(`The ColumnOrRow has ${contentArray.length} item(s)`);
11582
+ * ```
11583
+ */
11584
+ this.getContent = async () => {
11585
+ const contentItemEntities = await __classPrivateFieldGet$5(this, _ColumnOrRow_client, "f").getContent(this.entityId);
11586
+ return contentItemEntities.map((entity) => LayoutNode.getEntity(entity, __classPrivateFieldGet$5(this, _ColumnOrRow_client, "f")));
11587
+ };
11588
+ __classPrivateFieldSet$4(this, _ColumnOrRow_client, client, "f");
11589
+ this.type = type;
11590
+ }
11611
11591
  }
11612
- commonUtils.overrideFromComposables = overrideFromComposables;
11613
- commonUtils.default = { isValidPresetType };
11592
+ layoutEntities.ColumnOrRow = ColumnOrRow;
11593
+ _ColumnOrRow_client = new WeakMap();
11594
+
11595
+ var layout_constants = {};
11596
+
11597
+ Object.defineProperty(layout_constants, "__esModule", { value: true });
11598
+ layout_constants.DEFAULT_LAYOUT_KEY = layout_constants.LAYOUT_CONTROLLER_ID = void 0;
11599
+ layout_constants.LAYOUT_CONTROLLER_ID = 'layout-entities';
11600
+ // TODO: eventually export this somehow
11601
+ layout_constants.DEFAULT_LAYOUT_KEY = '__default__';
11614
11602
 
11615
11603
  var __classPrivateFieldGet$4 = (commonjsGlobal && commonjsGlobal.__classPrivateFieldGet) || function (receiver, state, kind, f) {
11616
11604
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
@@ -11759,6 +11747,12 @@ const layout_constants_1$1 = layout_constants;
11759
11747
  * ```
11760
11748
  */
11761
11749
  class Layout extends base_1$5.Base {
11750
+ /**
11751
+ * @internal
11752
+ */
11753
+ static getClient(layout) {
11754
+ return __classPrivateFieldGet$4(layout, _Layout_layoutClient, "f").getValue();
11755
+ }
11762
11756
  /**
11763
11757
  * @internal
11764
11758
  */
@@ -11983,7 +11977,17 @@ class Layout extends base_1$5.Base {
11983
11977
  const root = await client.getRoot('layoutName' in this.identity ? this.identity : undefined);
11984
11978
  return layout_entities_1.LayoutNode.getEntity(root, client);
11985
11979
  }
11986
- async getStackByView(identity) {
11980
+ /**
11981
+ * Retrieves the OpenFin.TabStack instance which the View belongs to.
11982
+ *
11983
+ * @example
11984
+ * ```js
11985
+ * const viewIdentity = { uuid: 'uuid', name: 'view-name' };
11986
+ * const stack = await fin.View.wrapSync(viewIdentity).getStackByViewIdentity(viewIdentity);
11987
+ * console.log(await stack.getViews());
11988
+ * ```
11989
+ */
11990
+ async getStackByViewIdentity(identity) {
11987
11991
  this.wire.sendAction('layout-get-stack-by-view').catch(() => {
11988
11992
  // don't expose
11989
11993
  });
@@ -12216,6 +12220,44 @@ class LayoutModule extends base_1$4.Base {
12216
12220
  const { uuid, name } = this.fin.me;
12217
12221
  return this.wrapSync({ uuid, name });
12218
12222
  }
12223
+ /**
12224
+ * Retrieves the OpenFin.Layout instance for the Window the View is attached to.
12225
+ *
12226
+ * @example
12227
+ * ```js
12228
+ * const viewIdentity = { uuid: 'uuid', name: 'view-name' };
12229
+ * const layout = await fin.Platform.Layout.getLayoutByViewIdentity(viewIdentity);
12230
+ * console.log(await layout.getCurrentViews());
12231
+ * ```
12232
+ */
12233
+ async getLayoutByViewIdentity(viewIdentity) {
12234
+ this.wire.sendAction('layout-get-by-view-identity').catch(() => {
12235
+ // don't expose
12236
+ });
12237
+ const winIdentity = await this.wire.environment.getViewWindowIdentity(this.fin, viewIdentity);
12238
+ let layoutWindowIdentity = winIdentity;
12239
+ // TODO: CORE-1857 - when we tearout active layout or drag a view out of a window, the above identity includes the whole window info.
12240
+ if (layoutWindowIdentity.identity) {
12241
+ layoutWindowIdentity = layoutWindowIdentity.identity;
12242
+ }
12243
+ try {
12244
+ const layoutWindow = this.wrapSync(layoutWindowIdentity);
12245
+ const client = await Instance_1$2.Layout.getClient(layoutWindow);
12246
+ const layoutIdentity = await client.getLayoutIdentityForViewOrThrow(viewIdentity);
12247
+ return this.wrapSync(layoutIdentity);
12248
+ }
12249
+ catch (e) {
12250
+ const allowedErrors = [
12251
+ 'No action registered at target for',
12252
+ 'getLayoutIdentityForViewOrThrow is not a function'
12253
+ ];
12254
+ if (!allowedErrors.some((m) => e.message.includes(m))) {
12255
+ throw e;
12256
+ }
12257
+ // fallback logic for missing endpoint in older runtimes
12258
+ return this.wrapSync(layoutWindowIdentity);
12259
+ }
12260
+ }
12219
12261
  }
12220
12262
  Factory$2.LayoutModule = LayoutModule;
12221
12263
  _LayoutModule_layoutInitializationAttempted = new WeakMap(), _LayoutModule_layoutManager = new WeakMap(), _LayoutModule_getLayoutManagerSpy = new WeakMap(), _LayoutModule_instances = new WeakSet(), _LayoutModule_getSafeLayoutManager = function _LayoutModule_getSafeLayoutManager(method) {
@@ -12352,7 +12394,7 @@ class PlatformModule extends base_1$3.Base {
12352
12394
  this.wire.sendAction('platform-wrap').catch((e) => {
12353
12395
  // don't expose
12354
12396
  });
12355
- return new Instance_1$1.Platform({ uuid: identity.uuid }, this._channel);
12397
+ return new Instance_1$1.Platform(this.wire, { uuid: identity.uuid });
12356
12398
  }
12357
12399
  /**
12358
12400
  * Synchronously returns a Platform object that represents an existing platform.
@@ -12369,7 +12411,7 @@ class PlatformModule extends base_1$3.Base {
12369
12411
  this.wire.sendAction('platform-wrap-sync').catch((e) => {
12370
12412
  // don't expose
12371
12413
  });
12372
- return new Instance_1$1.Platform({ uuid: identity.uuid }, this._channel);
12414
+ return new Instance_1$1.Platform(this.wire, { uuid: identity.uuid });
12373
12415
  }
12374
12416
  /**
12375
12417
  * Asynchronously returns a Platform object that represents the current platform.
@@ -17576,6 +17618,10 @@ Object.defineProperty(baseEnv, "__esModule", { value: true });
17576
17618
  var BaseEnvironment_1 = baseEnv.BaseEnvironment = void 0;
17577
17619
  const overrideCheck_1 = requireOverrideCheck();
17578
17620
  class BaseEnvironment {
17621
+ async getViewWindowIdentity(fin, viewIdentity) {
17622
+ const { identity } = await fin.View.wrapSync(viewIdentity).getCurrentWindow();
17623
+ return identity;
17624
+ }
17579
17625
  async getInteropInfo(fin) {
17580
17626
  const appInfo = await fin.Application.getCurrentSync()
17581
17627
  .getInfo()
@@ -17639,7 +17685,7 @@ class NodeEnvironment extends BaseEnvironment_1 {
17639
17685
  };
17640
17686
  }
17641
17687
  getAdapterVersionSync() {
17642
- return "40.82.17";
17688
+ return "40.82.20";
17643
17689
  }
17644
17690
  observeBounds(element, onChange) {
17645
17691
  throw new Error('Method not implemented.');