@aws-amplify/pubsub 4.5.11 → 4.5.12-unstable.2

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 (102) hide show
  1. package/CHANGELOG.md +0 -8
  2. package/lib/.tsbuildinfo +3 -0
  3. package/lib/Providers/AWSAppSyncProvider.d.ts +21 -0
  4. package/lib/Providers/AWSAppSyncProvider.js +20 -102
  5. package/lib/Providers/AWSAppSyncProvider.js.map +1 -1
  6. package/lib/Providers/AWSAppSyncRealTimeProvider/index.d.ts +75 -0
  7. package/lib/Providers/AWSAppSyncRealTimeProvider/index.js +158 -210
  8. package/lib/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -1
  9. package/lib/Providers/AWSIotProvider.d.ts +11 -0
  10. package/lib/Providers/AWSIotProvider.js +6 -64
  11. package/lib/Providers/AWSIotProvider.js.map +1 -1
  12. package/lib/Providers/MqttOverWSProvider.d.ts +41 -0
  13. package/lib/Providers/MqttOverWSProvider.js +158 -204
  14. package/lib/Providers/MqttOverWSProvider.js.map +1 -1
  15. package/lib/Providers/PubSubProvider.d.ts +13 -0
  16. package/lib/Providers/PubSubProvider.js +3 -13
  17. package/lib/Providers/PubSubProvider.js.map +1 -1
  18. package/lib/Providers/constants.d.ts +95 -0
  19. package/lib/Providers/constants.js +8 -0
  20. package/lib/Providers/constants.js.map +1 -1
  21. package/lib/Providers/index.d.ts +5 -0
  22. package/lib/Providers/index.js +13 -20
  23. package/lib/Providers/index.js.map +1 -1
  24. package/lib/PubSub.d.ts +51 -0
  25. package/lib/PubSub.js +8 -56
  26. package/lib/PubSub.js.map +1 -1
  27. package/lib/index.d.ts +4 -0
  28. package/lib/index.js +9 -20
  29. package/lib/index.js.map +1 -1
  30. package/lib/types/Provider.d.ts +14 -0
  31. package/lib/types/PubSub.d.ts +24 -0
  32. package/lib/types/PubSub.js +2 -12
  33. package/lib/types/PubSub.js.map +1 -1
  34. package/lib/types/index.d.ts +2 -0
  35. package/lib/types/index.js +2 -4
  36. package/lib/types/index.js.map +1 -1
  37. package/lib/utils/ConnectionStateMonitor.d.ts +41 -0
  38. package/lib/utils/ConnectionStateMonitor.js +16 -29
  39. package/lib/utils/ConnectionStateMonitor.js.map +1 -1
  40. package/lib/utils/ReachabilityMonitor/index.d.ts +3 -0
  41. package/lib/utils/ReachabilityMonitor/index.native.d.ts +3 -0
  42. package/lib/utils/ReachabilityMonitor/index.native.js +2 -4
  43. package/lib/utils/ReachabilityMonitor/index.native.js.map +1 -1
  44. package/lib/utils/ReconnectionMonitor.d.ts +29 -0
  45. package/lib/utils/ReconnectionMonitor.js +73 -0
  46. package/lib/utils/ReconnectionMonitor.js.map +1 -0
  47. package/lib-esm/.tsbuildinfo +3 -0
  48. package/lib-esm/Providers/AWSAppSyncProvider.js +1 -80
  49. package/lib-esm/Providers/AWSAppSyncProvider.js.map +1 -1
  50. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.d.ts +8 -0
  51. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.js +126 -168
  52. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -1
  53. package/lib-esm/Providers/AWSIotProvider.js +3 -61
  54. package/lib-esm/Providers/AWSIotProvider.js.map +1 -1
  55. package/lib-esm/Providers/MqttOverWSProvider.d.ts +2 -4
  56. package/lib-esm/Providers/MqttOverWSProvider.js +139 -175
  57. package/lib-esm/Providers/MqttOverWSProvider.js.map +1 -1
  58. package/lib-esm/Providers/PubSubProvider.js +1 -11
  59. package/lib-esm/Providers/PubSubProvider.js.map +1 -1
  60. package/lib-esm/Providers/constants.d.ts +8 -0
  61. package/lib-esm/Providers/constants.js +8 -0
  62. package/lib-esm/Providers/constants.js.map +1 -1
  63. package/lib-esm/Providers/index.d.ts +5 -5
  64. package/lib-esm/Providers/index.js +7 -17
  65. package/lib-esm/Providers/index.js.map +1 -1
  66. package/lib-esm/PubSub.js +3 -48
  67. package/lib-esm/PubSub.js.map +1 -1
  68. package/lib-esm/index.d.ts +2 -7
  69. package/lib-esm/index.js +4 -19
  70. package/lib-esm/index.js.map +1 -1
  71. package/lib-esm/types/Provider.d.ts +0 -4
  72. package/lib-esm/types/PubSub.js +2 -12
  73. package/lib-esm/types/PubSub.js.map +1 -1
  74. package/lib-esm/types/index.js.map +1 -1
  75. package/lib-esm/utils/ConnectionStateMonitor.d.ts +1 -0
  76. package/lib-esm/utils/ConnectionStateMonitor.js +13 -23
  77. package/lib-esm/utils/ConnectionStateMonitor.js.map +1 -1
  78. package/lib-esm/utils/ReconnectionMonitor.d.ts +29 -0
  79. package/lib-esm/utils/ReconnectionMonitor.js +71 -0
  80. package/lib-esm/utils/ReconnectionMonitor.js.map +1 -0
  81. package/package.json +14 -10
  82. package/src/Providers/AWSAppSyncProvider.ts +2 -12
  83. package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +142 -89
  84. package/src/Providers/AWSIotProvider.ts +2 -12
  85. package/src/Providers/MqttOverWSProvider.ts +90 -79
  86. package/src/Providers/PubSubProvider.ts +2 -12
  87. package/src/Providers/constants.ts +10 -0
  88. package/src/Providers/index.ts +15 -17
  89. package/src/PubSub.ts +2 -12
  90. package/src/index.ts +15 -23
  91. package/src/types/Provider.ts +2 -17
  92. package/src/types/PubSub.ts +2 -12
  93. package/src/types/index.ts +2 -12
  94. package/src/utils/ConnectionStateMonitor.ts +16 -12
  95. package/src/utils/ReconnectionMonitor.ts +74 -0
  96. package/build.js +0 -5
  97. package/dist/aws-amplify-pubsub.js +0 -10314
  98. package/dist/aws-amplify-pubsub.js.map +0 -1
  99. package/dist/aws-amplify-pubsub.min.js +0 -11
  100. package/dist/aws-amplify-pubsub.min.js.map +0 -1
  101. package/index.js +0 -7
  102. package/webpack.config.dev.js +0 -6
@@ -1,115 +1,21 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- extendStatics(d, b);
11
- function __() { this.constructor = d; }
12
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
- };
14
- })();
15
- var __assign = (this && this.__assign) || function () {
16
- __assign = Object.assign || function(t) {
17
- for (var s, i = 1, n = arguments.length; i < n; i++) {
18
- s = arguments[i];
19
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
20
- t[p] = s[p];
21
- }
22
- return t;
23
- };
24
- return __assign.apply(this, arguments);
25
- };
26
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
27
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
28
- return new (P || (P = Promise))(function (resolve, reject) {
29
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
30
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
31
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
32
- step((generator = generator.apply(thisArg, _arguments || [])).next());
33
- });
34
- };
35
- var __generator = (this && this.__generator) || function (thisArg, body) {
36
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
37
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
38
- function verb(n) { return function (v) { return step([n, v]); }; }
39
- function step(op) {
40
- if (f) throw new TypeError("Generator is already executing.");
41
- while (_) try {
42
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
43
- if (y = 0, t) op = [op[0] & 2, t.value];
44
- switch (op[0]) {
45
- case 0: case 1: t = op; break;
46
- case 4: _.label++; return { value: op[1], done: false };
47
- case 5: _.label++; y = op[1]; op = [0]; continue;
48
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
49
- default:
50
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
51
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
52
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
53
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
54
- if (t[2]) _.ops.pop();
55
- _.trys.pop(); continue;
56
- }
57
- op = body.call(thisArg, _);
58
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
59
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
60
- }
61
- };
62
- var __read = (this && this.__read) || function (o, n) {
63
- var m = typeof Symbol === "function" && o[Symbol.iterator];
64
- if (!m) return o;
65
- var i = m.call(o), r, ar = [], e;
66
- try {
67
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
68
- }
69
- catch (error) { e = { error: error }; }
70
- finally {
71
- try {
72
- if (r && !r.done && (m = i["return"])) m.call(i);
73
- }
74
- finally { if (e) throw e.error; }
75
- }
76
- return ar;
77
- };
78
- var __importDefault = (this && this.__importDefault) || function (mod) {
79
- return (mod && mod.__esModule) ? mod : { "default": mod };
80
- };
81
- var __importStar = (this && this.__importStar) || function (mod) {
82
- if (mod && mod.__esModule) return mod;
83
- var result = {};
84
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
85
- result["default"] = mod;
86
- return result;
87
- };
88
2
  Object.defineProperty(exports, "__esModule", { value: true });
89
- /*
90
- * Copyright 2017-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.
91
- *
92
- * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
93
- * the License. A copy of the License is located at
94
- *
95
- * http://aws.amazon.com/apache2.0/
96
- *
97
- * or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
98
- * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
99
- * and limitations under the License.
100
- */
101
- var zen_observable_ts_1 = __importDefault(require("zen-observable-ts"));
3
+ var tslib_1 = require("tslib");
4
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+ // SPDX-License-Identifier: Apache-2.0
6
+ var zen_observable_ts_1 = tslib_1.__importDefault(require("zen-observable-ts"));
102
7
  var graphql_1 = require("graphql");
103
- var url = __importStar(require("url"));
8
+ var url = tslib_1.__importStar(require("url"));
104
9
  var uuid_1 = require("uuid");
105
10
  var buffer_1 = require("buffer");
106
11
  var core_1 = require("@aws-amplify/core");
107
- var cache_1 = __importDefault(require("@aws-amplify/cache"));
108
- var auth_1 = __importDefault(require("@aws-amplify/auth"));
12
+ var cache_1 = require("@aws-amplify/cache");
13
+ var auth_1 = require("@aws-amplify/auth");
109
14
  var PubSubProvider_1 = require("../PubSubProvider");
110
15
  var PubSub_1 = require("../../types/PubSub");
111
16
  var constants_1 = require("../constants");
112
17
  var ConnectionStateMonitor_1 = require("../../utils/ConnectionStateMonitor");
18
+ var ReconnectionMonitor_1 = require("../../utils/ReconnectionMonitor");
113
19
  var logger = new core_1.Logger('AWSAppSyncRealTimeProvider');
114
20
  var dispatchApiEvent = function (event, data, message) {
115
21
  core_1.Hub.dispatch('api', { event: event, data: data, message: message }, 'PubSub', constants_1.AMPLIFY_SYMBOL);
@@ -117,7 +23,7 @@ var dispatchApiEvent = function (event, data, message) {
117
23
  var standardDomainPattern = /^https:\/\/\w{26}\.appsync\-api\.\w{2}(?:(?:\-\w{2,})+)\-\d\.amazonaws.com\/graphql$/i;
118
24
  var customDomainPath = '/realtime';
119
25
  var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
120
- __extends(AWSAppSyncRealTimeProvider, _super);
26
+ tslib_1.__extends(AWSAppSyncRealTimeProvider, _super);
121
27
  function AWSAppSyncRealTimeProvider(options) {
122
28
  if (options === void 0) { options = {}; }
123
29
  var _this = _super.call(this, options) || this;
@@ -126,15 +32,47 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
126
32
  _this.subscriptionObserverMap = new Map();
127
33
  _this.promiseArray = [];
128
34
  _this.connectionStateMonitor = new ConnectionStateMonitor_1.ConnectionStateMonitor();
35
+ _this.reconnectionMonitor = new ReconnectionMonitor_1.ReconnectionMonitor();
129
36
  // Monitor the connection state and pass changes along to Hub
130
- _this.connectionStateMonitor.connectionStateObservable.subscribe(function (ConnectionState) {
131
- dispatchApiEvent(constants_1.CONNECTION_STATE_CHANGE, {
132
- provider: _this,
133
- connectionState: ConnectionState,
134
- }, "Connection state is " + ConnectionState);
135
- });
37
+ _this.connectionStateMonitorSubscription =
38
+ _this.connectionStateMonitor.connectionStateObservable.subscribe(function (connectionState) {
39
+ dispatchApiEvent(constants_1.CONNECTION_STATE_CHANGE, {
40
+ provider: _this,
41
+ connectionState: connectionState,
42
+ }, "Connection state is " + connectionState);
43
+ _this.connectionState = connectionState;
44
+ // Trigger START_RECONNECT when the connection is disrupted
45
+ if (connectionState === PubSub_1.ConnectionState.ConnectionDisrupted) {
46
+ _this.reconnectionMonitor.record(ReconnectionMonitor_1.ReconnectEvent.START_RECONNECT);
47
+ }
48
+ // Trigger HALT_RECONNECT to halt reconnection attempts when the state is anything other than
49
+ // ConnectionDisrupted or Connecting
50
+ if ([
51
+ PubSub_1.ConnectionState.Connected,
52
+ PubSub_1.ConnectionState.ConnectedPendingDisconnect,
53
+ PubSub_1.ConnectionState.ConnectedPendingKeepAlive,
54
+ PubSub_1.ConnectionState.ConnectedPendingNetwork,
55
+ PubSub_1.ConnectionState.ConnectedPendingNetwork,
56
+ PubSub_1.ConnectionState.ConnectionDisruptedPendingNetwork,
57
+ PubSub_1.ConnectionState.Disconnected,
58
+ ].includes(connectionState)) {
59
+ _this.reconnectionMonitor.record(ReconnectionMonitor_1.ReconnectEvent.HALT_RECONNECT);
60
+ }
61
+ });
136
62
  return _this;
137
63
  }
64
+ /**
65
+ * Mark the socket closed and release all active listeners
66
+ */
67
+ AWSAppSyncRealTimeProvider.prototype.close = function () {
68
+ // Mark the socket closed both in status and the connection monitor
69
+ this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;
70
+ this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CONNECTION_FAILED);
71
+ // Turn off the subscription monitor Hub publishing
72
+ this.connectionStateMonitorSubscription.unsubscribe();
73
+ // Complete all reconnect observers
74
+ this.reconnectionMonitor.close();
75
+ };
138
76
  AWSAppSyncRealTimeProvider.prototype.getNewWebSocket = function (url, protocol) {
139
77
  return new WebSocket(url, protocol);
140
78
  };
@@ -145,8 +83,8 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
145
83
  throw new Error('Not used here');
146
84
  };
147
85
  AWSAppSyncRealTimeProvider.prototype.publish = function (_topics, _msg, _options) {
148
- return __awaiter(this, void 0, void 0, function () {
149
- return __generator(this, function (_a) {
86
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
87
+ return tslib_1.__generator(this, function (_a) {
150
88
  throw new Error('Operation not supported');
151
89
  });
152
90
  });
@@ -162,35 +100,51 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
162
100
  if (!options || !appSyncGraphqlEndpoint) {
163
101
  observer.error({
164
102
  errors: [
165
- __assign({}, new graphql_1.GraphQLError("Subscribe only available for AWS AppSync endpoint")),
103
+ tslib_1.__assign({}, new graphql_1.GraphQLError("Subscribe only available for AWS AppSync endpoint")),
166
104
  ],
167
105
  });
168
106
  observer.complete();
169
107
  }
170
108
  else {
109
+ var subscriptionStartActive_1 = false;
171
110
  var subscriptionId_1 = uuid_1.v4();
172
- _this._startSubscriptionWithAWSAppSyncRealTime({
173
- options: options,
174
- observer: observer,
175
- subscriptionId: subscriptionId_1,
176
- }).catch(function (err) {
177
- observer.error({
178
- errors: [
179
- __assign({}, new graphql_1.GraphQLError(PubSub_1.CONTROL_MSG.REALTIME_SUBSCRIPTION_INIT_ERROR + ": " + err)),
180
- ],
181
- });
182
- _this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);
183
- observer.complete();
111
+ var startSubscription_1 = function () {
112
+ if (!subscriptionStartActive_1) {
113
+ subscriptionStartActive_1 = true;
114
+ var startSubscriptionPromise = _this._startSubscriptionWithAWSAppSyncRealTime({
115
+ options: options,
116
+ observer: observer,
117
+ subscriptionId: subscriptionId_1,
118
+ }).catch(function (err) {
119
+ logger.debug(PubSub_1.CONTROL_MSG.REALTIME_SUBSCRIPTION_INIT_ERROR + ": " + err);
120
+ _this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);
121
+ });
122
+ startSubscriptionPromise.finally(function () {
123
+ subscriptionStartActive_1 = false;
124
+ });
125
+ }
126
+ };
127
+ var reconnectSubscription_1;
128
+ // Add an observable to the reconnection list to manage reconnection for this subscription
129
+ reconnectSubscription_1 = new zen_observable_ts_1.default(function (observer) {
130
+ _this.reconnectionMonitor.addObserver(observer);
131
+ }).subscribe(function () {
132
+ startSubscription_1();
184
133
  });
185
- return function () { return __awaiter(_this, void 0, void 0, function () {
134
+ startSubscription_1();
135
+ return function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
186
136
  var subscriptionState, err_1;
187
- return __generator(this, function (_a) {
137
+ return tslib_1.__generator(this, function (_a) {
188
138
  switch (_a.label) {
189
139
  case 0:
190
- _a.trys.push([0, 2, 3, 4]);
140
+ // Cleanup reconnection subscription
141
+ reconnectSubscription_1 === null || reconnectSubscription_1 === void 0 ? void 0 : reconnectSubscription_1.unsubscribe();
142
+ _a.label = 1;
143
+ case 1:
144
+ _a.trys.push([1, 3, 4, 5]);
191
145
  // Waiting that subscription has been connected before trying to unsubscribe
192
146
  return [4 /*yield*/, this._waitForSubscriptionToBeConnected(subscriptionId_1)];
193
- case 1:
147
+ case 2:
194
148
  // Waiting that subscription has been connected before trying to unsubscribe
195
149
  _a.sent();
196
150
  subscriptionState = (this.subscriptionObserverMap.get(subscriptionId_1) || {}).subscriptionState;
@@ -204,15 +158,15 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
204
158
  else {
205
159
  throw new Error('Subscription never connected');
206
160
  }
207
- return [3 /*break*/, 4];
208
- case 2:
161
+ return [3 /*break*/, 5];
162
+ case 3:
209
163
  err_1 = _a.sent();
210
164
  logger.debug("Error while unsubscribing " + err_1);
211
- return [3 /*break*/, 4];
212
- case 3:
165
+ return [3 /*break*/, 5];
166
+ case 4:
213
167
  this._removeSubscriptionObserver(subscriptionId_1);
214
168
  return [7 /*endfinally*/];
215
- case 4: return [2 /*return*/];
169
+ case 5: return [2 /*return*/];
216
170
  }
217
171
  });
218
172
  }); };
@@ -229,15 +183,15 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
229
183
  });
230
184
  AWSAppSyncRealTimeProvider.prototype._startSubscriptionWithAWSAppSyncRealTime = function (_a) {
231
185
  var options = _a.options, observer = _a.observer, subscriptionId = _a.subscriptionId;
232
- var _b, _c;
233
- return __awaiter(this, void 0, void 0, function () {
234
- var appSyncGraphqlEndpoint, authenticationType, query, variables, apiKey, region, _d, graphql_headers, _e, additionalHeaders, subscriptionState, data, dataString, headerObj, _f, _g, subscriptionMessage, stringToAWSRealTime, err_2, message, subscriptionFailedCallback_1, _h, subscriptionFailedCallback, subscriptionReadyCallback;
235
- var _j;
186
+ var _b;
187
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
188
+ var appSyncGraphqlEndpoint, authenticationType, query, variables, apiKey, region, _c, graphql_headers, _d, additionalHeaders, subscriptionState, data, dataString, headerObj, _e, _f, subscriptionMessage, stringToAWSRealTime, err_2, _g, subscriptionFailedCallback, subscriptionReadyCallback;
189
+ var _h;
236
190
  var _this = this;
237
- return __generator(this, function (_k) {
238
- switch (_k.label) {
191
+ return tslib_1.__generator(this, function (_j) {
192
+ switch (_j.label) {
239
193
  case 0:
240
- appSyncGraphqlEndpoint = options.appSyncGraphqlEndpoint, authenticationType = options.authenticationType, query = options.query, variables = options.variables, apiKey = options.apiKey, region = options.region, _d = options.graphql_headers, graphql_headers = _d === void 0 ? function () { return ({}); } : _d, _e = options.additionalHeaders, additionalHeaders = _e === void 0 ? {} : _e;
194
+ appSyncGraphqlEndpoint = options.appSyncGraphqlEndpoint, authenticationType = options.authenticationType, query = options.query, variables = options.variables, apiKey = options.apiKey, region = options.region, _c = options.graphql_headers, graphql_headers = _c === void 0 ? function () { return ({}); } : _c, _d = options.additionalHeaders, additionalHeaders = _d === void 0 ? {} : _d;
241
195
  subscriptionState = constants_1.SUBSCRIPTION_STATUS.PENDING;
242
196
  data = {
243
197
  query: query,
@@ -252,7 +206,7 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
252
206
  startAckTimeoutId: undefined,
253
207
  });
254
208
  dataString = JSON.stringify(data);
255
- _f = [{}];
209
+ _e = [{}];
256
210
  return [4 /*yield*/, this._awsRealTimeHeaderBasedAuth({
257
211
  apiKey: apiKey,
258
212
  appSyncGraphqlEndpoint: appSyncGraphqlEndpoint,
@@ -263,24 +217,24 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
263
217
  additionalHeaders: additionalHeaders,
264
218
  })];
265
219
  case 1:
266
- _g = [__assign.apply(void 0, _f.concat([(_k.sent())]))];
220
+ _f = [tslib_1.__assign.apply(void 0, _e.concat([(_j.sent())]))];
267
221
  return [4 /*yield*/, graphql_headers()];
268
222
  case 2:
269
- headerObj = __assign.apply(void 0, [__assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_k.sent())])), additionalHeaders]), (_j = {}, _j[core_1.USER_AGENT_HEADER] = core_1.Constants.userAgent, _j)]);
223
+ headerObj = tslib_1.__assign.apply(void 0, [tslib_1.__assign.apply(void 0, [tslib_1.__assign.apply(void 0, _f.concat([(_j.sent())])), additionalHeaders]), (_h = {}, _h[core_1.USER_AGENT_HEADER] = core_1.Constants.userAgent, _h)]);
270
224
  subscriptionMessage = {
271
225
  id: subscriptionId,
272
226
  payload: {
273
227
  data: dataString,
274
228
  extensions: {
275
- authorization: __assign({}, headerObj),
229
+ authorization: tslib_1.__assign({}, headerObj),
276
230
  },
277
231
  },
278
232
  type: constants_1.MESSAGE_TYPES.GQL_START,
279
233
  };
280
234
  stringToAWSRealTime = JSON.stringify(subscriptionMessage);
281
- _k.label = 3;
235
+ _j.label = 3;
282
236
  case 3:
283
- _k.trys.push([3, 5, , 6]);
237
+ _j.trys.push([3, 5, , 6]);
284
238
  this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.OPENING_CONNECTION);
285
239
  return [4 /*yield*/, this._initializeWebSocketConnection({
286
240
  apiKey: apiKey,
@@ -290,27 +244,14 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
290
244
  additionalHeaders: additionalHeaders,
291
245
  })];
292
246
  case 4:
293
- _k.sent();
247
+ _j.sent();
294
248
  return [3 /*break*/, 6];
295
249
  case 5:
296
- err_2 = _k.sent();
297
- logger.debug({ err: err_2 });
298
- message = (_b = err_2['message']) !== null && _b !== void 0 ? _b : '';
299
- this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);
300
- observer.error({
301
- errors: [
302
- __assign({}, new graphql_1.GraphQLError(PubSub_1.CONTROL_MSG.CONNECTION_FAILED + ": " + message)),
303
- ],
304
- });
305
- observer.complete();
306
- subscriptionFailedCallback_1 = (this.subscriptionObserverMap.get(subscriptionId) || {}).subscriptionFailedCallback;
307
- // Notify concurrent unsubscription
308
- if (typeof subscriptionFailedCallback_1 === 'function') {
309
- subscriptionFailedCallback_1();
310
- }
250
+ err_2 = _j.sent();
251
+ this._logStartSubscriptionError(subscriptionId, observer, err_2);
311
252
  return [2 /*return*/];
312
253
  case 6:
313
- _h = (_c = this.subscriptionObserverMap.get(subscriptionId)) !== null && _c !== void 0 ? _c : {}, subscriptionFailedCallback = _h.subscriptionFailedCallback, subscriptionReadyCallback = _h.subscriptionReadyCallback;
254
+ _g = (_b = this.subscriptionObserverMap.get(subscriptionId)) !== null && _b !== void 0 ? _b : {}, subscriptionFailedCallback = _g.subscriptionFailedCallback, subscriptionReadyCallback = _g.subscriptionReadyCallback;
314
255
  // This must be done before sending the message in order to be listening immediately
315
256
  this.subscriptionObserverMap.set(subscriptionId, {
316
257
  observer: observer,
@@ -331,12 +272,39 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
331
272
  });
332
273
  });
333
274
  };
275
+ // Log logic for start subscription failures
276
+ AWSAppSyncRealTimeProvider.prototype._logStartSubscriptionError = function (subscriptionId, observer, err) {
277
+ var _a;
278
+ logger.debug({ err: err });
279
+ var message = (_a = err['message']) !== null && _a !== void 0 ? _a : '';
280
+ // Resolving to give the state observer time to propogate the update
281
+ Promise.resolve(this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED));
282
+ // Capture the error only when the network didn't cause disruption
283
+ if (this.connectionState !== PubSub_1.ConnectionState.ConnectionDisruptedPendingNetwork) {
284
+ // When the error is non-retriable, error out the observable
285
+ if (core_1.isNonRetryableError(err)) {
286
+ observer.error({
287
+ errors: [
288
+ tslib_1.__assign({}, new graphql_1.GraphQLError(PubSub_1.CONTROL_MSG.CONNECTION_FAILED + ": " + message)),
289
+ ],
290
+ });
291
+ }
292
+ else {
293
+ logger.debug(PubSub_1.CONTROL_MSG.CONNECTION_FAILED + ": " + message);
294
+ }
295
+ var subscriptionFailedCallback = (this.subscriptionObserverMap.get(subscriptionId) || {}).subscriptionFailedCallback;
296
+ // Notify concurrent unsubscription
297
+ if (typeof subscriptionFailedCallback === 'function') {
298
+ subscriptionFailedCallback();
299
+ }
300
+ }
301
+ };
334
302
  // Waiting that subscription has been connected before trying to unsubscribe
335
303
  AWSAppSyncRealTimeProvider.prototype._waitForSubscriptionToBeConnected = function (subscriptionId) {
336
- return __awaiter(this, void 0, void 0, function () {
304
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
337
305
  var subscriptionObserver, subscriptionState;
338
306
  var _this = this;
339
- return __generator(this, function (_a) {
307
+ return tslib_1.__generator(this, function (_a) {
340
308
  subscriptionObserver = this.subscriptionObserverMap.get(subscriptionId);
341
309
  if (subscriptionObserver) {
342
310
  subscriptionState = subscriptionObserver.subscriptionState;
@@ -477,14 +445,14 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
477
445
  subscriptionFailedCallback: subscriptionFailedCallback,
478
446
  subscriptionState: subscriptionState,
479
447
  });
448
+ logger.debug(PubSub_1.CONTROL_MSG.CONNECTION_FAILED + ": " + JSON.stringify(payload));
480
449
  observer.error({
481
450
  errors: [
482
- __assign({}, new graphql_1.GraphQLError(PubSub_1.CONTROL_MSG.CONNECTION_FAILED + ": " + JSON.stringify(payload))),
451
+ tslib_1.__assign({}, new graphql_1.GraphQLError(PubSub_1.CONTROL_MSG.CONNECTION_FAILED + ": " + JSON.stringify(payload))),
483
452
  ],
484
453
  });
485
454
  if (startAckTimeoutId)
486
455
  clearTimeout(startAckTimeoutId);
487
- observer.complete();
488
456
  if (typeof subscriptionFailedCallback === 'function') {
489
457
  subscriptionFailedCallback();
490
458
  }
@@ -493,15 +461,6 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
493
461
  };
494
462
  AWSAppSyncRealTimeProvider.prototype._errorDisconnect = function (msg) {
495
463
  logger.debug("Disconnect error: " + msg);
496
- this.subscriptionObserverMap.forEach(function (_a) {
497
- var observer = _a.observer;
498
- if (observer && !observer.closed) {
499
- observer.error({
500
- errors: [__assign({}, new graphql_1.GraphQLError(msg))],
501
- });
502
- }
503
- });
504
- this.subscriptionObserverMap.clear();
505
464
  if (this.awsRealTimeSocket) {
506
465
  this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);
507
466
  this.awsRealTimeSocket.close();
@@ -521,18 +480,7 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
521
480
  variables: variables,
522
481
  subscriptionState: constants_1.SUBSCRIPTION_STATUS.FAILED,
523
482
  });
524
- if (observer && !observer.closed) {
525
- observer.error({
526
- errors: [
527
- __assign({}, new graphql_1.GraphQLError("Subscription timeout " + JSON.stringify({
528
- query: query,
529
- variables: variables,
530
- }))),
531
- ],
532
- });
533
- // Cleanup will be automatically executed
534
- observer.complete();
535
- }
483
+ this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);
536
484
  logger.debug('timeoutStartSubscription', JSON.stringify({ query: query, variables: variables }));
537
485
  }
538
486
  };
@@ -542,9 +490,9 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
542
490
  if (this.socketStatus === constants_1.SOCKET_STATUS.READY) {
543
491
  return;
544
492
  }
545
- return new Promise(function (res, rej) { return __awaiter(_this, void 0, void 0, function () {
493
+ return new Promise(function (res, rej) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
546
494
  var payloadString, headerString, _a, _b, headerQs, payloadQs, discoverableEndpoint, protocol, awsRealTimeUrl, err_3;
547
- return __generator(this, function (_c) {
495
+ return tslib_1.__generator(this, function (_c) {
548
496
  switch (_c.label) {
549
497
  case 0:
550
498
  this.promiseArray.push({ res: res, rej: rej });
@@ -596,6 +544,7 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
596
544
  return [3 /*break*/, 5];
597
545
  case 4:
598
546
  err_3 = _c.sent();
547
+ logger.debug('Connection exited with', err_3);
599
548
  this.promiseArray.forEach(function (_a) {
600
549
  var rej = _a.rej;
601
550
  return rej(err_3);
@@ -614,8 +563,8 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
614
563
  }); });
615
564
  };
616
565
  AWSAppSyncRealTimeProvider.prototype._initializeRetryableHandshake = function (awsRealTimeUrl) {
617
- return __awaiter(this, void 0, void 0, function () {
618
- return __generator(this, function (_a) {
566
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
567
+ return tslib_1.__generator(this, function (_a) {
619
568
  switch (_a.label) {
620
569
  case 0:
621
570
  logger.debug("Initializaling retryable Handshake");
@@ -628,10 +577,10 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
628
577
  });
629
578
  };
630
579
  AWSAppSyncRealTimeProvider.prototype._initializeHandshake = function (awsRealTimeUrl) {
631
- return __awaiter(this, void 0, void 0, function () {
580
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
632
581
  var err_4, _a, errorType, errorCode;
633
582
  var _this = this;
634
- return __generator(this, function (_b) {
583
+ return tslib_1.__generator(this, function (_b) {
635
584
  switch (_b.label) {
636
585
  case 0:
637
586
  logger.debug("Initializing handshake " + awsRealTimeUrl);
@@ -645,7 +594,6 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
645
594
  logger.debug("WebSocket connection error");
646
595
  };
647
596
  newSocket.onclose = function () {
648
- _this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CONNECTION_FAILED);
649
597
  rej(new Error('Connection handshake error'));
650
598
  };
651
599
  newSocket.onopen = function () {
@@ -691,7 +639,7 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
691
639
  return;
692
640
  }
693
641
  if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_ERROR) {
694
- var _c = data.payload, _d = (_c === void 0 ? {} : _c).errors, _e = __read(_d === void 0 ? [] : _d, 1), _f = _e[0], _g = _f === void 0 ? {} : _f, _h = _g.errorType, errorType = _h === void 0 ? '' : _h, _j = _g.errorCode, errorCode = _j === void 0 ? 0 : _j;
642
+ var _c = data.payload, _d = (_c === void 0 ? {} : _c).errors, _e = tslib_1.__read(_d === void 0 ? [] : _d, 1), _f = _e[0], _g = _f === void 0 ? {} : _f, _h = _g.errorType, errorType = _h === void 0 ? '' : _h, _j = _g.errorCode, errorCode = _j === void 0 ? 0 : _j;
695
643
  rej({ errorType: errorType, errorCode: errorCode });
696
644
  }
697
645
  };
@@ -733,9 +681,9 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
733
681
  };
734
682
  AWSAppSyncRealTimeProvider.prototype._awsRealTimeHeaderBasedAuth = function (_a) {
735
683
  var authenticationType = _a.authenticationType, payload = _a.payload, canonicalUri = _a.canonicalUri, appSyncGraphqlEndpoint = _a.appSyncGraphqlEndpoint, apiKey = _a.apiKey, region = _a.region, additionalHeaders = _a.additionalHeaders;
736
- return __awaiter(this, void 0, void 0, function () {
684
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
737
685
  var headerHandler, handler, host, result;
738
- return __generator(this, function (_b) {
686
+ return tslib_1.__generator(this, function (_b) {
739
687
  switch (_b.label) {
740
688
  case 0:
741
689
  headerHandler = {
@@ -770,11 +718,11 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
770
718
  };
771
719
  AWSAppSyncRealTimeProvider.prototype._awsRealTimeCUPHeader = function (_a) {
772
720
  var host = _a.host;
773
- return __awaiter(this, void 0, void 0, function () {
721
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
774
722
  var session;
775
- return __generator(this, function (_b) {
723
+ return tslib_1.__generator(this, function (_b) {
776
724
  switch (_b.label) {
777
- case 0: return [4 /*yield*/, auth_1.default.currentSession()];
725
+ case 0: return [4 /*yield*/, auth_1.Auth.currentSession()];
778
726
  case 1:
779
727
  session = _b.sent();
780
728
  return [2 /*return*/, {
@@ -787,17 +735,17 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
787
735
  };
788
736
  AWSAppSyncRealTimeProvider.prototype._awsRealTimeOPENIDHeader = function (_a) {
789
737
  var host = _a.host;
790
- return __awaiter(this, void 0, void 0, function () {
738
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
791
739
  var token, federatedInfo, currentUser;
792
- return __generator(this, function (_b) {
740
+ return tslib_1.__generator(this, function (_b) {
793
741
  switch (_b.label) {
794
- case 0: return [4 /*yield*/, cache_1.default.getItem('federatedInfo')];
742
+ case 0: return [4 /*yield*/, cache_1.Cache.getItem('federatedInfo')];
795
743
  case 1:
796
744
  federatedInfo = _b.sent();
797
745
  if (!federatedInfo) return [3 /*break*/, 2];
798
746
  token = federatedInfo.token;
799
747
  return [3 /*break*/, 4];
800
- case 2: return [4 /*yield*/, auth_1.default.currentAuthenticatedUser()];
748
+ case 2: return [4 /*yield*/, auth_1.Auth.currentAuthenticatedUser()];
801
749
  case 3:
802
750
  currentUser = _b.sent();
803
751
  if (currentUser) {
@@ -818,9 +766,9 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
818
766
  };
819
767
  AWSAppSyncRealTimeProvider.prototype._awsRealTimeApiKeyHeader = function (_a) {
820
768
  var apiKey = _a.apiKey, host = _a.host;
821
- return __awaiter(this, void 0, void 0, function () {
769
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
822
770
  var dt, dtStr;
823
- return __generator(this, function (_b) {
771
+ return tslib_1.__generator(this, function (_b) {
824
772
  dt = new Date();
825
773
  dtStr = dt.toISOString().replace(/[:\-]|\.\d{3}/g, '');
826
774
  return [2 /*return*/, {
@@ -833,9 +781,9 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
833
781
  };
834
782
  AWSAppSyncRealTimeProvider.prototype._awsRealTimeIAMHeader = function (_a) {
835
783
  var payload = _a.payload, canonicalUri = _a.canonicalUri, appSyncGraphqlEndpoint = _a.appSyncGraphqlEndpoint, region = _a.region;
836
- return __awaiter(this, void 0, void 0, function () {
784
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
837
785
  var endpointInfo, credentialsOK, creds, request, signed_params;
838
- return __generator(this, function (_b) {
786
+ return tslib_1.__generator(this, function (_b) {
839
787
  switch (_b.label) {
840
788
  case 0:
841
789
  endpointInfo = {
@@ -862,7 +810,7 @@ var AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {
862
810
  url: "" + appSyncGraphqlEndpoint + canonicalUri,
863
811
  data: payload,
864
812
  method: 'POST',
865
- headers: __assign({}, constants_1.AWS_APPSYNC_REALTIME_HEADERS),
813
+ headers: tslib_1.__assign({}, constants_1.AWS_APPSYNC_REALTIME_HEADERS),
866
814
  };
867
815
  signed_params = core_1.Signer.sign(request, creds, endpointInfo);
868
816
  return [2 /*return*/, signed_params.headers];