@aws-amplify/pubsub 4.4.10 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/aws-amplify-pubsub.js +178 -141
  3. package/dist/aws-amplify-pubsub.js.map +1 -1
  4. package/dist/aws-amplify-pubsub.min.js +2 -2
  5. package/dist/aws-amplify-pubsub.min.js.map +1 -1
  6. package/lib/Providers/AWSAppSyncRealTimeProvider/index.d.ts +1 -1
  7. package/lib/Providers/AWSAppSyncRealTimeProvider/index.js +8 -8
  8. package/lib/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -1
  9. package/lib/Providers/MqttOverWSProvider.d.ts +1 -0
  10. package/lib/Providers/MqttOverWSProvider.js +23 -1
  11. package/lib/Providers/MqttOverWSProvider.js.map +1 -1
  12. package/lib/Providers/{AWSAppSyncRealTimeProvider/constants.d.ts → constants.d.ts} +0 -0
  13. package/lib/Providers/{AWSAppSyncRealTimeProvider/constants.js → constants.js} +0 -0
  14. package/lib/Providers/constants.js.map +1 -0
  15. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.d.ts +1 -1
  16. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.js +8 -8
  17. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -1
  18. package/lib-esm/Providers/MqttOverWSProvider.d.ts +1 -0
  19. package/lib-esm/Providers/MqttOverWSProvider.js +24 -2
  20. package/lib-esm/Providers/MqttOverWSProvider.js.map +1 -1
  21. package/lib-esm/Providers/{AWSAppSyncRealTimeProvider/constants.d.ts → constants.d.ts} +0 -0
  22. package/lib-esm/Providers/{AWSAppSyncRealTimeProvider/constants.js → constants.js} +0 -0
  23. package/lib-esm/Providers/constants.js.map +1 -0
  24. package/package.json +5 -5
  25. package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +14 -14
  26. package/src/Providers/MqttOverWSProvider.ts +43 -2
  27. package/src/Providers/{AWSAppSyncRealTimeProvider/constants.ts → constants.ts} +0 -0
  28. package/lib/Providers/AWSAppSyncRealTimeProvider/constants.js.map +0 -1
  29. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/constants.js.map +0 -1
@@ -44,7 +44,7 @@ import {
44
44
  SOCKET_STATUS,
45
45
  START_ACK_TIMEOUT,
46
46
  SUBSCRIPTION_STATUS,
47
- } from './constants';
47
+ } from '../constants';
48
48
  import {
49
49
  ConnectionStateMonitor,
50
50
  CONNECTION_CHANGE,
@@ -747,20 +747,20 @@ export class AWSAppSyncRealTimeProvider extends AbstractPubSubProvider {
747
747
  };
748
748
  this.awsRealTimeSocket.send(JSON.stringify(gqlInit));
749
749
 
750
- setTimeout(checkAckOk.bind(this, ackOk), CONNECTION_INIT_TIMEOUT);
751
- }
750
+ const checkAckOk = (ackOk: boolean) => {
751
+ if (!ackOk) {
752
+ this.connectionStateMonitor.record(
753
+ CONNECTION_CHANGE.CONNECTION_FAILED
754
+ );
755
+ rej(
756
+ new Error(
757
+ `Connection timeout: ack from AWSAppSyncRealTime was not received after ${CONNECTION_INIT_TIMEOUT} ms`
758
+ )
759
+ );
760
+ }
761
+ };
752
762
 
753
- function checkAckOk(ackOk: boolean) {
754
- if (!ackOk) {
755
- this.connectionStateMonitor.record(
756
- CONNECTION_CHANGE.CONNECTION_FAILED
757
- );
758
- rej(
759
- new Error(
760
- `Connection timeout: ack from AWSRealTime was not received on ${CONNECTION_INIT_TIMEOUT} ms`
761
- )
762
- );
763
- }
763
+ setTimeout(() => checkAckOk(ackOk), CONNECTION_INIT_TIMEOUT);
764
764
  }
765
765
  });
766
766
  })();
@@ -16,7 +16,13 @@ import Observable from 'zen-observable-ts';
16
16
 
17
17
  import { AbstractPubSubProvider } from './PubSubProvider';
18
18
  import { ProviderOptions, SubscriptionObserver } from '../types';
19
- import { ConsoleLogger as Logger } from '@aws-amplify/core';
19
+ import { ConsoleLogger as Logger, Hub } from '@aws-amplify/core';
20
+ import {
21
+ ConnectionStateMonitor,
22
+ CONNECTION_CHANGE,
23
+ } from '../utils/ConnectionStateMonitor';
24
+ import { AMPLIFY_SYMBOL } from './constants';
25
+ import { CONNECTION_STATE_CHANGE } from '..';
20
26
 
21
27
  const logger = new Logger('MqttOverWSProvider');
22
28
 
@@ -72,13 +78,32 @@ class ClientsQueue {
72
78
  }
73
79
  }
74
80
 
81
+ const dispatchPubSubEvent = (event: string, data: any, message: string) => {
82
+ Hub.dispatch('pubsub', { event, data, message }, 'PubSub', AMPLIFY_SYMBOL);
83
+ };
84
+
75
85
  const topicSymbol = typeof Symbol !== 'undefined' ? Symbol('topic') : '@@topic';
76
86
 
77
87
  export class MqttOverWSProvider extends AbstractPubSubProvider {
78
88
  private _clientsQueue = new ClientsQueue();
89
+ private readonly connectionStateMonitor = new ConnectionStateMonitor();
79
90
 
80
91
  constructor(options: MqttProviderOptions = {}) {
81
92
  super({ ...options, clientId: options.clientId || uuid() });
93
+
94
+ // Monitor the connection health state and pass changes along to Hub
95
+ this.connectionStateMonitor.connectionStateObservable.subscribe(
96
+ connectionStateChange => {
97
+ dispatchPubSubEvent(
98
+ CONNECTION_STATE_CHANGE,
99
+ {
100
+ provider: this,
101
+ connectionState: connectionStateChange,
102
+ },
103
+ `Connection state is ${connectionStateChange}`
104
+ );
105
+ }
106
+ );
82
107
  }
83
108
 
84
109
  protected get clientId() {
@@ -149,6 +174,7 @@ export class MqttOverWSProvider extends AbstractPubSubProvider {
149
174
  public async newClient({ url, clientId }: MqttProviderOptions): Promise<any> {
150
175
  logger.debug('Creating new MQTT client', clientId);
151
176
 
177
+ this.connectionStateMonitor.record(CONNECTION_CHANGE.OPENING_CONNECTION);
152
178
  // @ts-ignore
153
179
  const client = new Paho.Client(url, clientId);
154
180
  // client.trace = (args) => logger.debug(clientId, JSON.stringify(args, null, 2));
@@ -168,6 +194,7 @@ export class MqttOverWSProvider extends AbstractPubSubProvider {
168
194
  errorCode: number;
169
195
  }) => {
170
196
  this.onDisconnect({ clientId, errorCode, ...args });
197
+ this.connectionStateMonitor.record(CONNECTION_CHANGE.CLOSED);
171
198
  };
172
199
 
173
200
  await new Promise((resolve, reject) => {
@@ -175,10 +202,19 @@ export class MqttOverWSProvider extends AbstractPubSubProvider {
175
202
  useSSL: this.isSSLEnabled,
176
203
  mqttVersion: 3,
177
204
  onSuccess: () => resolve(client),
178
- onFailure: reject,
205
+ onFailure: () => {
206
+ reject();
207
+ this.connectionStateMonitor.record(
208
+ CONNECTION_CHANGE.CONNECTION_FAILED
209
+ );
210
+ },
179
211
  });
180
212
  });
181
213
 
214
+ this.connectionStateMonitor.record(
215
+ CONNECTION_CHANGE.CONNECTION_ESTABLISHED
216
+ );
217
+
182
218
  return client;
183
219
  }
184
220
 
@@ -196,6 +232,7 @@ export class MqttOverWSProvider extends AbstractPubSubProvider {
196
232
 
197
233
  if (client && client.isConnected()) {
198
234
  client.disconnect();
235
+ this.connectionStateMonitor.record(CONNECTION_CHANGE.CLOSED);
199
236
  }
200
237
  this.clientsQueue.remove(clientId);
201
238
  }
@@ -293,6 +330,10 @@ export class MqttOverWSProvider extends AbstractPubSubProvider {
293
330
  this._clientIdObservers.get(clientId)?.delete(observer);
294
331
  // No more observers per client => client not needed anymore
295
332
  if (this._clientIdObservers.get(clientId)?.size === 0) {
333
+ this.connectionStateMonitor.record(
334
+ CONNECTION_CHANGE.CLOSING_CONNECTION
335
+ );
336
+
296
337
  this.disconnect(clientId);
297
338
  this._clientIdObservers.delete(clientId);
298
339
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/Providers/AWSAppSyncRealTimeProvider/constants.ts"],"names":[],"mappings":";;AAAa,QAAA,YAAY,GAAG,IAAI,CAAC;AAEpB,QAAA,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnD,IAAY,aAmDX;AAnDD,WAAY,aAAa;IACxB;;;OAGG;IACH,wDAAuC,CAAA;IACvC;;;OAGG;IACH,0DAAyC,CAAA;IACzC;;;OAGG;IACH,sDAAqC,CAAA;IACrC;;;OAGG;IACH,oCAAmB,CAAA;IACnB;;;OAGG;IACH,4CAA2B,CAAA;IAC3B;;;OAGG;IACH,kCAAiB,CAAA;IACjB;;;OAGG;IACH,iDAAgC,CAAA;IAChC;;;OAGG;IACH,kCAAiB,CAAA;IACjB;;;OAGG;IACH,0CAAyB,CAAA;IACzB;;;OAGG;IACH,oCAAmB,CAAA;AACpB,CAAC,EAnDW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAmDxB;AAED,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC9B,mEAAO,CAAA;IACP,uEAAS,CAAA;IACT,iEAAM,CAAA;AACP,CAAC,EAJW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAI9B;AAED,IAAY,aAIX;AAJD,WAAY,aAAa;IACxB,qDAAM,CAAA;IACN,mDAAK,CAAA;IACL,6DAAU,CAAA;AACX,CAAC,EAJW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAIxB;AAEY,QAAA,cAAc,GAAG,CAC7B,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,UAAU;IAChE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC/B,CAAC,CAAC,mBAAmB,CACZ,CAAC;AAEC,QAAA,4BAA4B,GAAG;IAC3C,MAAM,EAAE,mCAAmC;IAC3C,kBAAkB,EAAE,SAAS;IAC7B,cAAc,EAAE,iCAAiC;CACjD,CAAC;AAEF;;GAEG;AACU,QAAA,uBAAuB,GAAG,KAAK,CAAC;AAE7C;;GAEG;AACU,QAAA,iBAAiB,GAAG,KAAK,CAAC;AAEvC;;GAEG;AACU,QAAA,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAExD;;GAEG;AACU,QAAA,gCAAgC,GAAG,EAAE,GAAG,IAAI,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/Providers/AWSAppSyncRealTimeProvider/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,IAAM,YAAY,GAAG,IAAI,CAAC;AAEjC,MAAM,CAAC,IAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEnD,MAAM,CAAN,IAAY,aAmDX;AAnDD,WAAY,aAAa;IACxB;;;OAGG;IACH,wDAAuC,CAAA;IACvC;;;OAGG;IACH,0DAAyC,CAAA;IACzC;;;OAGG;IACH,sDAAqC,CAAA;IACrC;;;OAGG;IACH,oCAAmB,CAAA;IACnB;;;OAGG;IACH,4CAA2B,CAAA;IAC3B;;;OAGG;IACH,kCAAiB,CAAA;IACjB;;;OAGG;IACH,iDAAgC,CAAA;IAChC;;;OAGG;IACH,kCAAiB,CAAA;IACjB;;;OAGG;IACH,0CAAyB,CAAA;IACzB;;;OAGG;IACH,oCAAmB,CAAA;AACpB,CAAC,EAnDW,aAAa,KAAb,aAAa,QAmDxB;AAED,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC9B,mEAAO,CAAA;IACP,uEAAS,CAAA;IACT,iEAAM,CAAA;AACP,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACxB,qDAAM,CAAA;IACN,mDAAK,CAAA;IACL,6DAAU,CAAA;AACX,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED,MAAM,CAAC,IAAM,cAAc,GAAG,CAC7B,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,UAAU;IAChE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAC/B,CAAC,CAAC,mBAAmB,CACZ,CAAC;AAEZ,MAAM,CAAC,IAAM,4BAA4B,GAAG;IAC3C,MAAM,EAAE,mCAAmC;IAC3C,kBAAkB,EAAE,SAAS;IAC7B,cAAc,EAAE,iCAAiC;CACjD,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,IAAM,uBAAuB,GAAG,KAAK,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,IAAM,iBAAiB,GAAG,KAAK,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,IAAM,0BAA0B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,IAAM,gCAAgC,GAAG,EAAE,GAAG,IAAI,CAAC"}