@openfin/remote-adapter 45.100.94 → 45.100.95

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/remote-adapter.js +144 -68
  2. package/package.json +2 -2
@@ -7,13 +7,13 @@ var crypto = require('crypto');
7
7
  var backchannel = require('./backchannel.js');
8
8
  var constants = require('./constants.js');
9
9
 
10
- var __classPrivateFieldSet$k = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
10
+ var __classPrivateFieldSet$l = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
11
11
  if (kind === "m") throw new TypeError("Private method is not writable");
12
12
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
13
13
  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");
14
14
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
15
15
  };
16
- var __classPrivateFieldGet$l = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {
16
+ var __classPrivateFieldGet$m = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {
17
17
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
18
18
  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");
19
19
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
@@ -94,9 +94,9 @@ class EmitterBase extends Base {
94
94
  this.emit = (eventType, payload, ...args) => {
95
95
  return this.hasEmitter() ? this.getOrCreateEmitter().emit(eventType, payload, ...args) : false;
96
96
  };
97
- this.hasEmitter = () => this.wire.eventAggregator.has(__classPrivateFieldGet$l(this, _EmitterBase_emitterAccessor, "f"));
97
+ this.hasEmitter = () => this.wire.eventAggregator.has(__classPrivateFieldGet$m(this, _EmitterBase_emitterAccessor, "f"));
98
98
  this.getOrCreateEmitter = () => {
99
- return this.wire.eventAggregator.getOrCreate(__classPrivateFieldGet$l(this, _EmitterBase_emitterAccessor, "f"));
99
+ return this.wire.eventAggregator.getOrCreate(__classPrivateFieldGet$m(this, _EmitterBase_emitterAccessor, "f"));
100
100
  };
101
101
  this.listeners = (type) => this.hasEmitter() ? this.getOrCreateEmitter().listeners(type) : [];
102
102
  this.listenerCount = (type) => this.hasEmitter() ? this.getOrCreateEmitter().listenerCount(type) : 0;
@@ -134,8 +134,8 @@ class EmitterBase extends Base {
134
134
  // This will only be reached if unsubscribe from event that does not exist but do not want to error here
135
135
  return Promise.resolve();
136
136
  };
137
- __classPrivateFieldSet$k(this, _EmitterBase_emitterAccessor, [topic, ...additionalAccessors], "f");
138
- __classPrivateFieldSet$k(this, _EmitterBase_deregisterOnceListeners, new WeakMap(), "f");
137
+ __classPrivateFieldSet$l(this, _EmitterBase_emitterAccessor, [topic, ...additionalAccessors], "f");
138
+ __classPrivateFieldSet$l(this, _EmitterBase_deregisterOnceListeners, new WeakMap(), "f");
139
139
  }
140
140
  /**
141
141
  * Adds a listener to the end of the listeners array for the specified event.
@@ -163,7 +163,7 @@ class EmitterBase extends Base {
163
163
  */
164
164
  async once(eventType, listener, options) {
165
165
  const deregister = () => this.deregisterEventListener(eventType);
166
- __classPrivateFieldGet$l(this, _EmitterBase_deregisterOnceListeners, "f").set(listener, deregister);
166
+ __classPrivateFieldGet$m(this, _EmitterBase_deregisterOnceListeners, "f").set(listener, deregister);
167
167
  await this.registerEventListener(eventType, options, (emitter) => {
168
168
  emitter.once(eventType, deregister);
169
169
  emitter.once(eventType, listener);
@@ -194,7 +194,7 @@ class EmitterBase extends Base {
194
194
  */
195
195
  async prependOnceListener(eventType, listener, options) {
196
196
  const deregister = () => this.deregisterEventListener(eventType);
197
- __classPrivateFieldGet$l(this, _EmitterBase_deregisterOnceListeners, "f").set(listener, deregister);
197
+ __classPrivateFieldGet$m(this, _EmitterBase_deregisterOnceListeners, "f").set(listener, deregister);
198
198
  await this.registerEventListener(eventType, options, (emitter) => {
199
199
  emitter.prependOnceListener(eventType, listener);
200
200
  emitter.once(eventType, deregister);
@@ -213,7 +213,7 @@ class EmitterBase extends Base {
213
213
  const emitter = await this.deregisterEventListener(eventType, options);
214
214
  if (emitter) {
215
215
  emitter.removeListener(eventType, listener);
216
- const deregister = __classPrivateFieldGet$l(this, _EmitterBase_deregisterOnceListeners, "f").get(listener);
216
+ const deregister = __classPrivateFieldGet$m(this, _EmitterBase_deregisterOnceListeners, "f").get(listener);
217
217
  if (deregister) {
218
218
  emitter.removeListener(eventType, deregister);
219
219
  }
@@ -259,7 +259,7 @@ class EmitterBase extends Base {
259
259
  deleteEmitterIfNothingRegistered(emitter) {
260
260
  // TODO: maybe emitterMap should clean up itself..
261
261
  if (emitter.eventNames().length === 0) {
262
- this.wire.eventAggregator.delete(__classPrivateFieldGet$l(this, _EmitterBase_emitterAccessor, "f"));
262
+ this.wire.eventAggregator.delete(__classPrivateFieldGet$m(this, _EmitterBase_emitterAccessor, "f"));
263
263
  }
264
264
  }
265
265
  }
@@ -758,13 +758,13 @@ class AsyncRetryableLazy {
758
758
  }
759
759
  }
760
760
 
761
- var __classPrivateFieldSet$j = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
761
+ var __classPrivateFieldSet$k = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
762
762
  if (kind === "m") throw new TypeError("Private method is not writable");
763
763
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
764
764
  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");
765
765
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
766
766
  };
767
- var __classPrivateFieldGet$k = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {
767
+ var __classPrivateFieldGet$l = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {
768
768
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
769
769
  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");
770
770
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
@@ -944,12 +944,12 @@ class InteropBroker extends Base {
944
944
  _InteropBroker_contextGroups.set(this, void 0);
945
945
  _InteropBroker_providerPromise.set(this, void 0);
946
946
  this.getProvider = () => {
947
- return __classPrivateFieldGet$k(this, _InteropBroker_providerPromise, "f").getValue();
947
+ return __classPrivateFieldGet$l(this, _InteropBroker_providerPromise, "f").getValue();
948
948
  };
949
949
  this.interopClients = new Map();
950
950
  this.contextGroupsById = new Map();
951
- __classPrivateFieldSet$j(this, _InteropBroker_contextGroups, options.contextGroups ?? [...defaultContextGroups], "f");
952
- __classPrivateFieldSet$j(this, _InteropBroker_fdc3Info, options.fdc3Info, "f");
951
+ __classPrivateFieldSet$k(this, _InteropBroker_contextGroups, options.contextGroups ?? [...defaultContextGroups], "f");
952
+ __classPrivateFieldSet$k(this, _InteropBroker_fdc3Info, options.fdc3Info, "f");
953
953
  if (options?.logging) {
954
954
  this.logging = options.logging;
955
955
  }
@@ -957,7 +957,7 @@ class InteropBroker extends Base {
957
957
  this.lastContextMap = new Map();
958
958
  this.sessionContextGroupMap = new Map();
959
959
  this.privateChannelProviderMap = new Map();
960
- __classPrivateFieldSet$j(this, _InteropBroker_providerPromise, new Lazy(createProvider), "f");
960
+ __classPrivateFieldSet$k(this, _InteropBroker_providerPromise, new Lazy(createProvider), "f");
961
961
  this.setContextGroupMap();
962
962
  this.setupChannelProvider();
963
963
  }
@@ -1240,7 +1240,7 @@ class InteropBroker extends Base {
1240
1240
  // don't expose, analytics-only call
1241
1241
  });
1242
1242
  // Create copy for immutability
1243
- return __classPrivateFieldGet$k(this, _InteropBroker_contextGroups, "f").map((contextGroup) => {
1243
+ return __classPrivateFieldGet$l(this, _InteropBroker_contextGroups, "f").map((contextGroup) => {
1244
1244
  return { ...contextGroup };
1245
1245
  });
1246
1246
  }
@@ -1651,7 +1651,7 @@ class InteropBroker extends Base {
1651
1651
  const { fdc3Version } = payload;
1652
1652
  return {
1653
1653
  fdc3Version,
1654
- ...__classPrivateFieldGet$k(this, _InteropBroker_fdc3Info, "f"),
1654
+ ...__classPrivateFieldGet$l(this, _InteropBroker_fdc3Info, "f"),
1655
1655
  optionalFeatures: {
1656
1656
  OriginatingAppMetadata: false,
1657
1657
  UserChannelMembershipAPIs: true
@@ -7078,13 +7078,13 @@ function errorToPOJO(error) {
7078
7078
  return errorObj;
7079
7079
  }
7080
7080
 
7081
- var __classPrivateFieldSet$i = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
7081
+ var __classPrivateFieldSet$j = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
7082
7082
  if (kind === "m") throw new TypeError("Private method is not writable");
7083
7083
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
7084
7084
  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");
7085
7085
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7086
7086
  };
7087
- var __classPrivateFieldGet$j = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {
7087
+ var __classPrivateFieldGet$k = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {
7088
7088
  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
7089
7089
  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");
7090
7090
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
@@ -7105,27 +7105,27 @@ class Transport extends events.EventEmitter {
7105
7105
  // Typing as unknown to avoid circular dependency, should not be used directly.
7106
7106
  _Transport_fin.set(this, void 0);
7107
7107
  this.connectSync = () => {
7108
- const wire = __classPrivateFieldGet$j(this, _Transport_wire, "f");
7108
+ const wire = __classPrivateFieldGet$k(this, _Transport_wire, "f");
7109
7109
  wire.connectSync();
7110
7110
  };
7111
7111
  // This function is only used in our tests.
7112
7112
  this.getPort = () => {
7113
- const wire = __classPrivateFieldGet$j(this, _Transport_wire, "f");
7113
+ const wire = __classPrivateFieldGet$k(this, _Transport_wire, "f");
7114
7114
  return wire.getPort();
7115
7115
  };
7116
- __classPrivateFieldSet$i(this, _Transport_wire, factory(this.onmessage.bind(this)), "f");
7116
+ __classPrivateFieldSet$j(this, _Transport_wire, factory(this.onmessage.bind(this)), "f");
7117
7117
  this.environment = environment;
7118
- __classPrivateFieldSet$i(this, _Transport_analyticsEnabled, config.apiDiagnostics !== false, "f");
7119
- this.sendRaw = __classPrivateFieldGet$j(this, _Transport_wire, "f").send.bind(__classPrivateFieldGet$j(this, _Transport_wire, "f"));
7118
+ __classPrivateFieldSet$j(this, _Transport_analyticsEnabled, config.apiDiagnostics !== false, "f");
7119
+ this.sendRaw = __classPrivateFieldGet$k(this, _Transport_wire, "f").send.bind(__classPrivateFieldGet$k(this, _Transport_wire, "f"));
7120
7120
  this.registerMessageHandler(this.handleMessage.bind(this));
7121
- __classPrivateFieldGet$j(this, _Transport_wire, "f").on('disconnected', () => {
7121
+ __classPrivateFieldGet$k(this, _Transport_wire, "f").on('disconnected', () => {
7122
7122
  for (const [, { handleNack }] of this.wireListeners) {
7123
7123
  handleNack({ reason: 'Remote connection has closed' });
7124
7124
  }
7125
7125
  this.wireListeners.clear();
7126
- clearTimeout(__classPrivateFieldGet$j(this, _Transport_analyticsFlushTimeout, "f"));
7127
- __classPrivateFieldSet$i(this, _Transport_analyticsFlushTimeout, undefined, "f");
7128
- __classPrivateFieldGet$j(this, _Transport_analyticsBuffer, "f").clear();
7126
+ clearTimeout(__classPrivateFieldGet$k(this, _Transport_analyticsFlushTimeout, "f"));
7127
+ __classPrivateFieldSet$j(this, _Transport_analyticsFlushTimeout, undefined, "f");
7128
+ __classPrivateFieldGet$k(this, _Transport_analyticsBuffer, "f").clear();
7129
7129
  this.emit('disconnected');
7130
7130
  });
7131
7131
  const { uuid, name } = config;
@@ -7133,36 +7133,36 @@ class Transport extends events.EventEmitter {
7133
7133
  this.me = getBaseMe(entityType, uuid, name);
7134
7134
  }
7135
7135
  getFin() {
7136
- if (!__classPrivateFieldGet$j(this, _Transport_fin, "f")) {
7136
+ if (!__classPrivateFieldGet$k(this, _Transport_fin, "f")) {
7137
7137
  throw new Error('No Fin object registered for this transport');
7138
7138
  }
7139
- return __classPrivateFieldGet$j(this, _Transport_fin, "f");
7139
+ return __classPrivateFieldGet$k(this, _Transport_fin, "f");
7140
7140
  }
7141
7141
  registerFin(_fin) {
7142
- if (__classPrivateFieldGet$j(this, _Transport_fin, "f")) {
7142
+ if (__classPrivateFieldGet$k(this, _Transport_fin, "f")) {
7143
7143
  throw new Error('Fin object has already been registered for this transport');
7144
7144
  }
7145
- __classPrivateFieldSet$i(this, _Transport_fin, _fin, "f");
7145
+ __classPrivateFieldSet$j(this, _Transport_fin, _fin, "f");
7146
7146
  }
7147
7147
  recordAnalytic(action) {
7148
- if (!__classPrivateFieldGet$j(this, _Transport_analyticsEnabled, "f"))
7148
+ if (!__classPrivateFieldGet$k(this, _Transport_analyticsEnabled, "f"))
7149
7149
  return;
7150
- __classPrivateFieldGet$j(this, _Transport_analyticsBuffer, "f").set(action, (__classPrivateFieldGet$j(this, _Transport_analyticsBuffer, "f").get(action) ?? 0) + 1);
7151
- if (__classPrivateFieldGet$j(this, _Transport_analyticsFlushTimeout, "f") === undefined) {
7152
- const timeout = setTimeout(() => __classPrivateFieldGet$j(this, _Transport_instances, "m", _Transport_flushAnalytics).call(this), 30000);
7150
+ __classPrivateFieldGet$k(this, _Transport_analyticsBuffer, "f").set(action, (__classPrivateFieldGet$k(this, _Transport_analyticsBuffer, "f").get(action) ?? 0) + 1);
7151
+ if (__classPrivateFieldGet$k(this, _Transport_analyticsFlushTimeout, "f") === undefined) {
7152
+ const timeout = setTimeout(() => __classPrivateFieldGet$k(this, _Transport_instances, "m", _Transport_flushAnalytics).call(this), 30000);
7153
7153
  if (typeof timeout === 'object' && timeout !== null) {
7154
7154
  timeout.unref?.();
7155
7155
  }
7156
- __classPrivateFieldSet$i(this, _Transport_analyticsFlushTimeout, timeout, "f");
7156
+ __classPrivateFieldSet$j(this, _Transport_analyticsFlushTimeout, timeout, "f");
7157
7157
  }
7158
7158
  }
7159
7159
  shutdown() {
7160
- const wire = __classPrivateFieldGet$j(this, _Transport_wire, "f");
7160
+ const wire = __classPrivateFieldGet$k(this, _Transport_wire, "f");
7161
7161
  return wire.shutdown();
7162
7162
  }
7163
7163
  async connect(config) {
7164
7164
  if (isConfigWithReceiver(config)) {
7165
- await __classPrivateFieldGet$j(this, _Transport_wire, "f").connect(config.receiver);
7165
+ await __classPrivateFieldGet$k(this, _Transport_wire, "f").connect(config.receiver);
7166
7166
  return this.authorize(config);
7167
7167
  }
7168
7168
  if (isRemoteConfig(config)) {
@@ -7178,13 +7178,13 @@ class Transport extends events.EventEmitter {
7178
7178
  return undefined;
7179
7179
  }
7180
7180
  async connectRemote(config) {
7181
- await __classPrivateFieldGet$j(this, _Transport_wire, "f").connect(new (this.environment.getWsConstructor())(config.address));
7181
+ await __classPrivateFieldGet$k(this, _Transport_wire, "f").connect(new (this.environment.getWsConstructor())(config.address));
7182
7182
  return this.authorize(config);
7183
7183
  }
7184
7184
  async connectByPort(config) {
7185
7185
  const { address, uuid } = config;
7186
7186
  const reqAuthPayload = { ...config, type: 'file-token' };
7187
- const wire = __classPrivateFieldGet$j(this, _Transport_wire, "f");
7187
+ const wire = __classPrivateFieldGet$k(this, _Transport_wire, "f");
7188
7188
  await wire.connect(new (this.environment.getWsConstructor())(config.address));
7189
7189
  const requestExtAuthRet = await this.sendAction('request-external-authorization', {
7190
7190
  uuid,
@@ -7220,7 +7220,7 @@ class Transport extends events.EventEmitter {
7220
7220
  payload,
7221
7221
  messageId
7222
7222
  };
7223
- const wire = __classPrivateFieldGet$j(this, _Transport_wire, "f");
7223
+ const wire = __classPrivateFieldGet$k(this, _Transport_wire, "f");
7224
7224
  this.addWireListener(messageId, resolve, (payload) => this.nackHandler(payload, reject, callSites), uncorrelated);
7225
7225
  return wire.send(msg).catch(reject);
7226
7226
  });
@@ -7242,7 +7242,7 @@ class Transport extends events.EventEmitter {
7242
7242
  const resolver = (data) => {
7243
7243
  resolve(data.payload);
7244
7244
  };
7245
- const wire = __classPrivateFieldGet$j(this, _Transport_wire, "f");
7245
+ const wire = __classPrivateFieldGet$k(this, _Transport_wire, "f");
7246
7246
  return wire
7247
7247
  .send(origData)
7248
7248
  .then(() => this.addWireListener(id, resolver, (payload) => this.nackHandler(payload, reject), false))
@@ -7319,11 +7319,11 @@ class Transport extends events.EventEmitter {
7319
7319
  }
7320
7320
  }
7321
7321
  _Transport_wire = new WeakMap(), _Transport_analyticsEnabled = new WeakMap(), _Transport_analyticsBuffer = new WeakMap(), _Transport_analyticsFlushTimeout = new WeakMap(), _Transport_fin = new WeakMap(), _Transport_instances = new WeakSet(), _Transport_flushAnalytics = function _Transport_flushAnalytics() {
7322
- __classPrivateFieldSet$i(this, _Transport_analyticsFlushTimeout, undefined, "f");
7323
- if (__classPrivateFieldGet$j(this, _Transport_analyticsBuffer, "f").size === 0)
7322
+ __classPrivateFieldSet$j(this, _Transport_analyticsFlushTimeout, undefined, "f");
7323
+ if (__classPrivateFieldGet$k(this, _Transport_analyticsBuffer, "f").size === 0)
7324
7324
  return;
7325
- const counts = Object.fromEntries(__classPrivateFieldGet$j(this, _Transport_analyticsBuffer, "f"));
7326
- __classPrivateFieldGet$j(this, _Transport_analyticsBuffer, "f").clear();
7325
+ const counts = Object.fromEntries(__classPrivateFieldGet$k(this, _Transport_analyticsBuffer, "f"));
7326
+ __classPrivateFieldGet$k(this, _Transport_analyticsBuffer, "f").clear();
7327
7327
  this.sendAction('send-analytics-batch', { counts }).catch(() => {
7328
7328
  // analytics flush failure is non-fatal, counts are already cleared
7329
7329
  });
@@ -7481,18 +7481,36 @@ class SystemContentTracing extends Base {
7481
7481
  *
7482
7482
  * @packageDocumentation
7483
7483
  */
7484
+ var __classPrivateFieldGet$j = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {
7485
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
7486
+ 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");
7487
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
7488
+ };
7489
+ var __classPrivateFieldSet$i = (undefined && undefined.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
7490
+ if (kind === "m") throw new TypeError("Private method is not writable");
7491
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
7492
+ 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");
7493
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7494
+ };
7495
+ var _System_instances, _System_registeredUsageKeys, _System_pendingUsageKeys, _System_usageBatch, _System_usageFlushScheduled, _System_flushUsageBatch;
7484
7496
  /**
7485
7497
  * An object representing the core of OpenFin Runtime. Allows the developer
7486
7498
  * to perform system-level actions, such as accessing logs, viewing processes,
7487
7499
  * clearing the cache and exiting the runtime as well as listen to {@link OpenFin.SystemEvents system events}.
7488
7500
  *
7489
7501
  */
7502
+ const sortedKeysReplacer = (_, v) => v && typeof v === 'object' && !Array.isArray(v) ? Object.fromEntries(Object.entries(v).sort()) : v;
7490
7503
  class System extends EmitterBase {
7491
7504
  /**
7492
7505
  * @internal
7493
7506
  */
7494
7507
  constructor(wire) {
7495
7508
  super(wire, 'system');
7509
+ _System_instances.add(this);
7510
+ _System_registeredUsageKeys.set(this, new Set());
7511
+ _System_pendingUsageKeys.set(this, new Set());
7512
+ _System_usageBatch.set(this, []);
7513
+ _System_usageFlushScheduled.set(this, false);
7496
7514
  this.ContentTracing = new SystemContentTracing(wire);
7497
7515
  }
7498
7516
  sendExternalProcessRequest(action, options) {
@@ -9229,31 +9247,58 @@ class System extends EmitterBase {
9229
9247
  return payload.data;
9230
9248
  }
9231
9249
  /**
9232
- * (Internal) Register the usage of a component with a platform
9233
- * @param options - Object with data and type
9250
+ * (Internal) Register the usage of a component with a platform.
9251
+ *
9252
+ * @param options - Object with `data` and `type`.
9253
+ *
9254
+ * @remarks
9255
+ * **This method never throws.** All errors — including IPC failures, RVM timeouts, and
9256
+ * serialization errors — are caught internally and logged at `debug` level. Usage tracking
9257
+ * must never break the calling feature.
9258
+ *
9259
+ * Calls are automatically deduplicated client-side for the lifetime of the current window
9260
+ * (i.e. until the window is closed or the page is reloaded). The first call with a given
9261
+ * `type` + `data` combination is forwarded to the Runtime as normal. Any subsequent call
9262
+ * with the same `type` and `data` values within the same window lifetime is silently
9263
+ * suppressed without making an IPC round-trip.
9264
+ *
9265
+ * If `data` cannot be serialized to JSON (for example, a circular reference), deduplication
9266
+ * is skipped for that call and the IPC call is still forwarded unconditionally.
9234
9267
  *
9235
9268
  * @example
9236
9269
  * ```js
9237
- * async function registerUsage() {
9238
- * const app = await fin.System.getCurrent();
9239
- * return await fin.System.registerUsage({
9240
- * type: 'workspace-licensing',
9241
- * // example values for the following data object
9242
- * data: {
9243
- * apiVersion: '1.0',
9244
- * componentName: 'home',
9245
- * componentVersion: '1.0',
9246
- * allowed: true,
9247
- * rejectionCode: ''
9248
- * }
9249
- * });
9250
- * }
9251
- *
9252
- * registerUsage().then(() => console.log('Successfully registered component application')).catch(err => console.log(err));
9270
+ * // Safe to fire-and-forget — will never throw or reject.
9271
+ * // Duplicate calls within the same window lifetime are suppressed automatically.
9272
+ * fin.System.registerUsage({
9273
+ * type: 'workspace-licensing',
9274
+ * data: {
9275
+ * apiVersion: '1.0',
9276
+ * componentName: 'home',
9277
+ * componentVersion: '1.0',
9278
+ * allowed: true,
9279
+ * rejectionCode: ''
9280
+ * }
9281
+ * });
9253
9282
  * ```
9254
9283
  */
9255
- async registerUsage({ data, type }) {
9256
- await this.wire.sendAction('register-usage', { data, type });
9284
+ registerUsage({ data, type }) {
9285
+ let dedupKey;
9286
+ try {
9287
+ const key = `${type}\0${JSON.stringify(data, sortedKeysReplacer)}`;
9288
+ if (__classPrivateFieldGet$j(this, _System_registeredUsageKeys, "f").has(key) || __classPrivateFieldGet$j(this, _System_pendingUsageKeys, "f").has(key)) {
9289
+ return;
9290
+ }
9291
+ __classPrivateFieldGet$j(this, _System_pendingUsageKeys, "f").add(key);
9292
+ dedupKey = key;
9293
+ }
9294
+ catch {
9295
+ console.debug(`[registerUsage] Failed to serialize 'data' for deduplication (type: "${type}"). Sending unconditionally.`);
9296
+ }
9297
+ __classPrivateFieldGet$j(this, _System_usageBatch, "f").push({ payload: { data, type }, dedupKey });
9298
+ if (!__classPrivateFieldGet$j(this, _System_usageFlushScheduled, "f")) {
9299
+ __classPrivateFieldSet$i(this, _System_usageFlushScheduled, true, "f");
9300
+ queueMicrotask(() => __classPrivateFieldGet$j(this, _System_instances, "m", _System_flushUsageBatch).call(this));
9301
+ }
9257
9302
  }
9258
9303
  /**
9259
9304
  * Returns an array with all printers of the caller and not all the printers on the desktop.
@@ -9559,6 +9604,37 @@ class System extends EmitterBase {
9559
9604
  return payload.data;
9560
9605
  }
9561
9606
  }
9607
+ _System_registeredUsageKeys = new WeakMap(), _System_pendingUsageKeys = new WeakMap(), _System_usageBatch = new WeakMap(), _System_usageFlushScheduled = new WeakMap(), _System_instances = new WeakSet(), _System_flushUsageBatch = function _System_flushUsageBatch() {
9608
+ __classPrivateFieldSet$i(this, _System_usageFlushScheduled, false, "f");
9609
+ const batch = __classPrivateFieldGet$j(this, _System_usageBatch, "f");
9610
+ __classPrivateFieldSet$i(this, _System_usageBatch, [], "f");
9611
+ if (batch.length === 0)
9612
+ return;
9613
+ const items = batch.map(({ payload }) => payload);
9614
+ const keys = batch.map(({ dedupKey }) => dedupKey);
9615
+ const commitKeys = () => {
9616
+ for (const key of keys) {
9617
+ if (key !== undefined) {
9618
+ __classPrivateFieldGet$j(this, _System_pendingUsageKeys, "f").delete(key);
9619
+ __classPrivateFieldGet$j(this, _System_registeredUsageKeys, "f").add(key);
9620
+ }
9621
+ }
9622
+ };
9623
+ const rollbackKeys = () => {
9624
+ for (const key of keys) {
9625
+ if (key !== undefined) {
9626
+ __classPrivateFieldGet$j(this, _System_pendingUsageKeys, "f").delete(key);
9627
+ }
9628
+ }
9629
+ };
9630
+ const action = items.length === 1
9631
+ ? this.wire.sendAction('register-usage', items[0])
9632
+ : this.wire.sendAction('register-usage-batch', { items });
9633
+ action.then(commitKeys).catch((e) => {
9634
+ rollbackKeys();
9635
+ console.debug('[registerUsage] Failed to send usage data.', e);
9636
+ });
9637
+ };
9562
9638
 
9563
9639
  class RefCounter {
9564
9640
  constructor() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfin/remote-adapter",
3
- "version": "45.100.94",
3
+ "version": "45.100.95",
4
4
  "description": "Establish intermachine runtime connections using webRTC.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "private": false,
@@ -16,7 +16,7 @@
16
16
  "dependencies": {
17
17
  "es-toolkit": "^1.39.3",
18
18
  "tslib": "2.8.1",
19
- "@openfin/core": "45.100.94"
19
+ "@openfin/core": "45.100.95"
20
20
  },
21
21
  "scripts": {
22
22
  "prebuild": "rimraf ./out",