@genesislcap/foundation-comms 15.17.0 → 15.18.0-notification-listener.1

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.
@@ -224,6 +224,14 @@ export declare class DefaultDatasource implements Datasource {
224
224
  constructor(connect: Connect, auth: Auth, resources: GenesisResources, config: DatasourceConfig, connectEvents: ConnectEvents);
225
225
  private pollTrigger$;
226
226
  private commitResponseUnsubscribe?;
227
+ /**
228
+ * Bumped by every `init()` call and by `destroy()`, so an `init()` suspended on an `await` can
229
+ * tell a concurrent `destroy()`/`init()` cycle has superseded it before it commits `this.stream`
230
+ * — without this, a `destroy()` that runs while an earlier `init()` is still awaiting resets
231
+ * `this.options` out from under that suspended call, which then resumes and opens a stream
232
+ * with a stale/undefined resource name.
233
+ */
234
+ private generation;
227
235
  private triggerPoll;
228
236
  /**
229
237
  * @deprecated - Please use {@link (GenesisResources:interface).isValidResource} instead.
@@ -257,6 +265,12 @@ export declare class DefaultDatasource implements Datasource {
257
265
  updateLoadMoreCount(count: number): void;
258
266
  snapshot(overrideParams?: any): Promise<Message>;
259
267
  snapshotFiltered(rowId?: string): Promise<any[]>;
268
+ /**
269
+ * `resourceName` is passed in explicitly (the snapshot `init()` captured at its own call time)
270
+ * rather than read back off `this.options` here — `this.options` is shared mutable state that
271
+ * a concurrent `destroy()` can reset to `{}` while this call is in flight, which previously let
272
+ * a superseded call open a stream with an `undefined` resource name.
273
+ */
260
274
  private createStream;
261
275
  private createDataserverStream;
262
276
  private createReqRepStream;
@@ -1 +1 @@
1
- {"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../../src/datasource/datasource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../../src/datasource/datasource.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,14 @@ let DefaultDatasource = class DefaultDatasource {
51
51
  this.readOnly = true;
52
52
  this._allParams = null;
53
53
  this.pollTrigger$ = new Subject();
54
+ /**
55
+ * Bumped by every `init()` call and by `destroy()`, so an `init()` suspended on an `await` can
56
+ * tell a concurrent `destroy()`/`init()` cycle has superseded it before it commits `this.stream`
57
+ * — without this, a `destroy()` that runs while an earlier `init()` is still awaiting resets
58
+ * `this.options` out from under that suspended call, which then resumes and opens a stream
59
+ * with a stale/undefined resource name.
60
+ */
61
+ this.generation = 0;
54
62
  }
55
63
  triggerPoll() {
56
64
  this.pollTrigger$.next();
@@ -69,6 +77,8 @@ let DefaultDatasource = class DefaultDatasource {
69
77
  }
70
78
  init(options_1) {
71
79
  return __awaiter(this, arguments, void 0, function* (options, fetchMeta = this.fetchMetadataRequired, startStream = this.startStreamRequired) {
80
+ this.generation += 1;
81
+ const myGeneration = this.generation;
72
82
  this.fetchMetadataRequired = fetchMeta;
73
83
  this.options = Object.assign(Object.assign({}, this.config.options), options);
74
84
  // Invalidate parameter cache when options change
@@ -99,10 +109,22 @@ let DefaultDatasource = class DefaultDatasource {
99
109
  }
100
110
  logger.debug(`Initializing ${resourceName} datasource from ${this.connect.host}`);
101
111
  if (!this.options.isSnapshot && startStream) {
112
+ if (myGeneration !== this.generation) {
113
+ // A concurrent destroy()/init() superseded this call while we were awaiting the
114
+ // connection/resource/metadata checks above — this.options (including resourceName)
115
+ // may already have been reset, so bail out here rather than opening a stream against
116
+ // stale state.
117
+ return false;
118
+ }
102
119
  // Recreate pollTrigger$ so pollTriggerEvents work after destroy/reinit.
103
120
  // A completed Subject ignores next(), so we need a fresh one each init.
104
121
  this.pollTrigger$ = new Subject();
105
- this.stream = yield this.createStream();
122
+ const stream = yield this.createStream(resourceName);
123
+ if (myGeneration !== this.generation) {
124
+ // Superseded while createStream() itself was in flight — discard rather than commit.
125
+ return false;
126
+ }
127
+ this.stream = stream;
106
128
  }
107
129
  logger.debug(`${resourceName} datasource initialization ${this.initialized ? `was successful.` : 'has failed.'}`);
108
130
  this.reportStatus();
@@ -112,7 +134,7 @@ let DefaultDatasource = class DefaultDatasource {
112
134
  startStream() {
113
135
  return __awaiter(this, void 0, void 0, function* () {
114
136
  if (!this.options.isSnapshot && this.stream === undefined) {
115
- this.stream = yield this.createStream();
137
+ this.stream = yield this.createStream(this.options.resourceName);
116
138
  }
117
139
  });
118
140
  }
@@ -120,6 +142,10 @@ let DefaultDatasource = class DefaultDatasource {
120
142
  destroy() {
121
143
  var _a, _b;
122
144
  logger.debug('Datasource.destroy', (_a = this.options) === null || _a === void 0 ? void 0 : _a.resourceName);
145
+ // Invalidate any in-flight init() first, so its next generation check (however soon it
146
+ // resumes) sees this destroy() and bails out instead of committing state we're about to
147
+ // reset below.
148
+ this.generation += 1;
123
149
  if (this.commitResponseUnsubscribe) {
124
150
  this.commitResponseUnsubscribe();
125
151
  this.commitResponseUnsubscribe = undefined;
@@ -261,23 +287,29 @@ let DefaultDatasource = class DefaultDatasource {
261
287
  }
262
288
  });
263
289
  }
264
- createStream() {
290
+ /**
291
+ * `resourceName` is passed in explicitly (the snapshot `init()` captured at its own call time)
292
+ * rather than read back off `this.options` here — `this.options` is shared mutable state that
293
+ * a concurrent `destroy()` can reset to `{}` while this call is in flight, which previously let
294
+ * a superseded call open a stream with an `undefined` resource name.
295
+ */
296
+ createStream(resourceName) {
265
297
  return __awaiter(this, void 0, void 0, function* () {
266
298
  if (![ResourceType.DATASERVER, ResourceType.REQUEST_SERVER].includes(this.resourceType)) {
267
299
  throw new Error(`Streaming not supported for selected resource type: ${this.resourceType}`);
268
300
  }
269
301
  if (this.resourceType === ResourceType.DATASERVER) {
270
- return this.createDataserverStream();
302
+ return this.createDataserverStream(resourceName);
271
303
  }
272
- logger.debug(`Creating fake stream by polling ${this.options.resourceName} REQUEST_SERVER`);
304
+ logger.debug(`Creating fake stream by polling ${resourceName} REQUEST_SERVER`);
273
305
  return this.createReqRepStream();
274
306
  });
275
307
  }
276
- createDataserverStream() {
308
+ createDataserverStream(resourceName) {
277
309
  return __awaiter(this, void 0, void 0, function* () {
278
310
  const onMessage = (message) => { };
279
311
  const onError = (error) => logger.error(error);
280
- return this.connect.stream(this.options.resourceName, onMessage, onError, this.dataserverOnlyParams);
312
+ return this.connect.stream(resourceName, onMessage, onError, this.dataserverOnlyParams);
281
313
  });
282
314
  }
283
315
  createReqRepStream() {
@@ -2047,6 +2047,14 @@ export declare class DefaultDatasource implements Datasource {
2047
2047
  constructor(connect: Connect, auth: Auth, resources: GenesisResources, config: DatasourceConfig, connectEvents: ConnectEvents);
2048
2048
  private pollTrigger$;
2049
2049
  private commitResponseUnsubscribe?;
2050
+ /**
2051
+ * Bumped by every `init()` call and by `destroy()`, so an `init()` suspended on an `await` can
2052
+ * tell a concurrent `destroy()`/`init()` cycle has superseded it before it commits `this.stream`
2053
+ * — without this, a `destroy()` that runs while an earlier `init()` is still awaiting resets
2054
+ * `this.options` out from under that suspended call, which then resumes and opens a stream
2055
+ * with a stale/undefined resource name.
2056
+ */
2057
+ private generation;
2050
2058
  private triggerPoll;
2051
2059
  /**
2052
2060
  * @deprecated - Please use {@link (GenesisResources:interface).isValidResource} instead.
@@ -2080,6 +2088,12 @@ export declare class DefaultDatasource implements Datasource {
2080
2088
  updateLoadMoreCount(count: number): void;
2081
2089
  snapshot(overrideParams?: any): Promise<Message>;
2082
2090
  snapshotFiltered(rowId?: string): Promise<any[]>;
2091
+ /**
2092
+ * `resourceName` is passed in explicitly (the snapshot `init()` captured at its own call time)
2093
+ * rather than read back off `this.options` here — `this.options` is shared mutable state that
2094
+ * a concurrent `destroy()` can reset to `{}` while this call is in flight, which previously let
2095
+ * a superseded call open a stream with an `undefined` resource name.
2096
+ */
2083
2097
  private createStream;
2084
2098
  private createDataserverStream;
2085
2099
  private createReqRepStream;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@genesislcap/foundation-comms",
3
3
  "description": "Genesis Foundation UI Comms",
4
- "version": "15.17.0",
4
+ "version": "15.18.0-notification-listener.1",
5
5
  "sideEffects": false,
6
6
  "license": "SEE LICENSE IN license.txt",
7
7
  "main": "dist/esm/index.js",
@@ -77,24 +77,24 @@
77
77
  }
78
78
  },
79
79
  "devDependencies": {
80
- "@genesislcap/foundation-testing": "15.17.0",
81
- "@genesislcap/genx": "15.17.0",
82
- "@genesislcap/rollup-builder": "15.17.0",
83
- "@genesislcap/ts-builder": "15.17.0",
84
- "@genesislcap/uvu-playwright-builder": "15.17.0",
85
- "@genesislcap/vite-builder": "15.17.0",
86
- "@genesislcap/webpack-builder": "15.17.0",
80
+ "@genesislcap/foundation-testing": "15.18.0-notification-listener.1",
81
+ "@genesislcap/genx": "15.18.0-notification-listener.1",
82
+ "@genesislcap/rollup-builder": "15.18.0-notification-listener.1",
83
+ "@genesislcap/ts-builder": "15.18.0-notification-listener.1",
84
+ "@genesislcap/uvu-playwright-builder": "15.18.0-notification-listener.1",
85
+ "@genesislcap/vite-builder": "15.18.0-notification-listener.1",
86
+ "@genesislcap/webpack-builder": "15.18.0-notification-listener.1",
87
87
  "@types/js-cookie": "^3.0.2",
88
88
  "@types/json-schema": "^7.0.11",
89
89
  "@types/webappsec-credential-management": "^0.6.2",
90
90
  "sinon": "^17.0.1"
91
91
  },
92
92
  "dependencies": {
93
- "@genesislcap/foundation-broadcast-channel": "15.17.0",
94
- "@genesislcap/foundation-logger": "15.17.0",
95
- "@genesislcap/foundation-user": "15.17.0",
96
- "@genesislcap/foundation-utils": "15.17.0",
97
- "@genesislcap/web-core": "15.17.0",
93
+ "@genesislcap/foundation-broadcast-channel": "15.18.0-notification-listener.1",
94
+ "@genesislcap/foundation-logger": "15.18.0-notification-listener.1",
95
+ "@genesislcap/foundation-user": "15.18.0-notification-listener.1",
96
+ "@genesislcap/foundation-utils": "15.18.0-notification-listener.1",
97
+ "@genesislcap/web-core": "15.18.0-notification-listener.1",
98
98
  "@microsoft/fast-element": "1.14.0",
99
99
  "@microsoft/fast-foundation": "2.50.0",
100
100
  "bowser": "^2.11.0",
@@ -112,5 +112,5 @@
112
112
  "publishConfig": {
113
113
  "access": "public"
114
114
  },
115
- "gitHead": "2e040c4861f6acfde7afef48b60555548fac8708"
115
+ "gitHead": "51bed22f8b8a92c2333c46b9bbec906d687fa7ad"
116
116
  }