@aws-amplify/api-graphql 4.7.4-websocket-event.a29d4a1.0 → 4.7.4

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.
@@ -32,13 +32,12 @@ class AWSAppSyncEventProvider extends AWSWebSocketProvider_1.AWSWebSocketProvide
32
32
  super.publish(options, customUserAgentDetails);
33
33
  }
34
34
  async _prepareSubscriptionPayload({ options, subscriptionId, customUserAgentDetails, additionalCustomHeaders, libraryConfigHeaders, publish, }) {
35
- const { appSyncGraphqlEndpoint, authenticationType, query, apiKey, region, variables, } = options;
35
+ const { appSyncGraphqlEndpoint, authenticationType, query, apiKey, region, } = options;
36
36
  // This will be needed for WS publish
37
- const data = {
38
- channel: query,
39
- events: [variables],
40
- };
41
- const serializedData = JSON.stringify(data);
37
+ // const data = {
38
+ // events: [variables],
39
+ // };
40
+ const serializedData = JSON.stringify({ channel: query });
42
41
  const headers = {
43
42
  ...(await (0, authHeaders_1.awsRealTimeHeaderBasedAuth)({
44
43
  apiKey,
@@ -57,18 +56,18 @@ class AWSAppSyncEventProvider extends AWSWebSocketProvider_1.AWSWebSocketProvide
57
56
  const subscriptionMessage = {
58
57
  id: subscriptionId,
59
58
  channel: query,
60
- events: [JSON.stringify(variables)],
59
+ // events: [JSON.stringify(variables)],
61
60
  authorization: {
62
61
  ...headers,
63
62
  },
64
- payload: {
65
- events: serializedData,
66
- extensions: {
67
- authorization: {
68
- ...headers,
69
- },
70
- },
71
- },
63
+ // payload: {
64
+ // events: serializedData,
65
+ // extensions: {
66
+ // authorization: {
67
+ // ...headers,
68
+ // },
69
+ // },
70
+ // },
72
71
  type: publish
73
72
  ? constants_1.MESSAGE_TYPES.EVENT_PUBLISH
74
73
  : constants_1.MESSAGE_TYPES.EVENT_SUBSCRIBE,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/Providers/AWSAppSyncEventsProvider/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AppSyncEventProvider = exports.AWSAppSyncEventProvider = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst constants_1 = require(\"../constants\");\nconst AWSWebSocketProvider_1 = require(\"../AWSWebSocketProvider\");\nconst authHeaders_1 = require(\"../AWSWebSocketProvider/authHeaders\");\nconst PROVIDER_NAME = 'AWSAppSyncEventsProvider';\nconst WS_PROTOCOL_NAME = 'aws-appsync-event-ws';\nconst CONNECT_URI = ''; // events does not expect a connect uri\nclass AWSAppSyncEventProvider extends AWSWebSocketProvider_1.AWSWebSocketProvider {\n constructor() {\n super({\n providerName: PROVIDER_NAME,\n wsProtocolName: WS_PROTOCOL_NAME,\n connectUri: CONNECT_URI,\n });\n }\n getProviderName() {\n return PROVIDER_NAME;\n }\n async connect(options) {\n super.connect(options);\n }\n subscribe(options, customUserAgentDetails) {\n return super.subscribe(options, customUserAgentDetails).pipe();\n }\n async publish(options, customUserAgentDetails) {\n super.publish(options, customUserAgentDetails);\n }\n async _prepareSubscriptionPayload({ options, subscriptionId, customUserAgentDetails, additionalCustomHeaders, libraryConfigHeaders, publish, }) {\n const { appSyncGraphqlEndpoint, authenticationType, query, apiKey, region, variables, } = options;\n // This will be needed for WS publish\n const data = {\n channel: query,\n events: [variables],\n };\n const serializedData = JSON.stringify(data);\n const headers = {\n ...(await (0, authHeaders_1.awsRealTimeHeaderBasedAuth)({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n payload: serializedData,\n canonicalUri: '',\n region,\n additionalCustomHeaders,\n })),\n ...libraryConfigHeaders,\n ...additionalCustomHeaders,\n [utils_1.USER_AGENT_HEADER]: (0, utils_1.getAmplifyUserAgent)(customUserAgentDetails),\n };\n // Commented out code will be needed for WS publish\n const subscriptionMessage = {\n id: subscriptionId,\n channel: query,\n events: [JSON.stringify(variables)],\n authorization: {\n ...headers,\n },\n payload: {\n events: serializedData,\n extensions: {\n authorization: {\n ...headers,\n },\n },\n },\n type: publish\n ? constants_1.MESSAGE_TYPES.EVENT_PUBLISH\n : constants_1.MESSAGE_TYPES.EVENT_SUBSCRIBE,\n };\n const serializedSubscriptionMessage = JSON.stringify(subscriptionMessage);\n return serializedSubscriptionMessage;\n }\n _handleSubscriptionData(message) {\n this.logger.debug(`subscription message from AWS AppSync Events: ${message.data}`);\n const { id = '', event: payload, type, } = JSON.parse(String(message.data));\n const { observer = null, query = '', variables = {}, } = this.subscriptionObserverMap.get(id) || {};\n this.logger.debug({ id, observer, query, variables });\n if (type === constants_1.MESSAGE_TYPES.DATA && payload) {\n const deserializedEvent = JSON.parse(payload);\n if (observer) {\n observer.next({ id, type, event: deserializedEvent });\n }\n else {\n this.logger.debug(`observer not found for id: ${id}`);\n }\n return [true, { id, type, payload: deserializedEvent }];\n }\n return [false, { id, type, payload }];\n }\n _unsubscribeMessage(subscriptionId) {\n return {\n id: subscriptionId,\n type: constants_1.MESSAGE_TYPES.EVENT_STOP,\n };\n }\n _extractConnectionTimeout(data) {\n const { connectionTimeoutMs = constants_1.DEFAULT_KEEP_ALIVE_TIMEOUT } = data;\n return connectionTimeoutMs;\n }\n _extractErrorCodeAndType(data) {\n const { errors: [{ errorType = '', errorCode = 0 } = {}] = [] } = data;\n return { errorCode, errorType };\n }\n}\nexports.AWSAppSyncEventProvider = AWSAppSyncEventProvider;\nexports.AppSyncEventProvider = new AWSAppSyncEventProvider();\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/Providers/AWSAppSyncEventsProvider/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AppSyncEventProvider = exports.AWSAppSyncEventProvider = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst constants_1 = require(\"../constants\");\nconst AWSWebSocketProvider_1 = require(\"../AWSWebSocketProvider\");\nconst authHeaders_1 = require(\"../AWSWebSocketProvider/authHeaders\");\nconst PROVIDER_NAME = 'AWSAppSyncEventsProvider';\nconst WS_PROTOCOL_NAME = 'aws-appsync-event-ws';\nconst CONNECT_URI = ''; // events does not expect a connect uri\nclass AWSAppSyncEventProvider extends AWSWebSocketProvider_1.AWSWebSocketProvider {\n constructor() {\n super({\n providerName: PROVIDER_NAME,\n wsProtocolName: WS_PROTOCOL_NAME,\n connectUri: CONNECT_URI,\n });\n }\n getProviderName() {\n return PROVIDER_NAME;\n }\n async connect(options) {\n super.connect(options);\n }\n subscribe(options, customUserAgentDetails) {\n return super.subscribe(options, customUserAgentDetails).pipe();\n }\n async publish(options, customUserAgentDetails) {\n super.publish(options, customUserAgentDetails);\n }\n async _prepareSubscriptionPayload({ options, subscriptionId, customUserAgentDetails, additionalCustomHeaders, libraryConfigHeaders, publish, }) {\n const { appSyncGraphqlEndpoint, authenticationType, query, apiKey, region, } = options;\n // This will be needed for WS publish\n // const data = {\n // \tevents: [variables],\n // };\n const serializedData = JSON.stringify({ channel: query });\n const headers = {\n ...(await (0, authHeaders_1.awsRealTimeHeaderBasedAuth)({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n payload: serializedData,\n canonicalUri: '',\n region,\n additionalCustomHeaders,\n })),\n ...libraryConfigHeaders,\n ...additionalCustomHeaders,\n [utils_1.USER_AGENT_HEADER]: (0, utils_1.getAmplifyUserAgent)(customUserAgentDetails),\n };\n // Commented out code will be needed for WS publish\n const subscriptionMessage = {\n id: subscriptionId,\n channel: query,\n // events: [JSON.stringify(variables)],\n authorization: {\n ...headers,\n },\n // payload: {\n // \tevents: serializedData,\n // \textensions: {\n // \t\tauthorization: {\n // \t\t\t...headers,\n // \t\t},\n // \t},\n // },\n type: publish\n ? constants_1.MESSAGE_TYPES.EVENT_PUBLISH\n : constants_1.MESSAGE_TYPES.EVENT_SUBSCRIBE,\n };\n const serializedSubscriptionMessage = JSON.stringify(subscriptionMessage);\n return serializedSubscriptionMessage;\n }\n _handleSubscriptionData(message) {\n this.logger.debug(`subscription message from AWS AppSync Events: ${message.data}`);\n const { id = '', event: payload, type, } = JSON.parse(String(message.data));\n const { observer = null, query = '', variables = {}, } = this.subscriptionObserverMap.get(id) || {};\n this.logger.debug({ id, observer, query, variables });\n if (type === constants_1.MESSAGE_TYPES.DATA && payload) {\n const deserializedEvent = JSON.parse(payload);\n if (observer) {\n observer.next({ id, type, event: deserializedEvent });\n }\n else {\n this.logger.debug(`observer not found for id: ${id}`);\n }\n return [true, { id, type, payload: deserializedEvent }];\n }\n return [false, { id, type, payload }];\n }\n _unsubscribeMessage(subscriptionId) {\n return {\n id: subscriptionId,\n type: constants_1.MESSAGE_TYPES.EVENT_STOP,\n };\n }\n _extractConnectionTimeout(data) {\n const { connectionTimeoutMs = constants_1.DEFAULT_KEEP_ALIVE_TIMEOUT } = data;\n return connectionTimeoutMs;\n }\n _extractErrorCodeAndType(data) {\n const { errors: [{ errorType = '', errorCode = 0 } = {}] = [] } = data;\n return { errorCode, errorType };\n }\n}\nexports.AWSAppSyncEventProvider = AWSAppSyncEventProvider;\nexports.AppSyncEventProvider = new AWSAppSyncEventProvider();\n"],"names":[],"mappings":"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"}
@@ -170,47 +170,23 @@ class AWSWebSocketProvider {
170
170
  });
171
171
  return new Promise((resolve, reject) => {
172
172
  if (this.awsRealTimeSocket) {
173
- const timeoutId = setTimeout(() => {
174
- cleanup();
175
- reject(new Error('Publish operation timed out'));
176
- }, 30000); // 30 seconds timeout
177
173
  const publishListener = (event) => {
178
174
  const data = JSON.parse(event.data);
179
175
  if (data.id === subscriptionId && data.type === 'publish_success') {
180
176
  this.awsRealTimeSocket &&
181
177
  this.awsRealTimeSocket.removeEventListener('message', publishListener);
182
- cleanup();
183
178
  resolve();
184
179
  }
185
- if (data.erroredEvents && data.erroredEvents.length > 0) {
186
- // TODO: handle errors
187
- const errors = data.erroredEvents.map((errorEvent) => errorEvent.error);
188
- cleanup();
189
- reject(new Error(`Publish errors: ${errors.join(', ')}`));
190
- }
191
- };
192
- const errorListener = (error) => {
193
- cleanup();
194
- reject(new Error(`WebSocket error: ${error}`));
195
- };
196
- const closeListener = () => {
197
- cleanup();
198
- reject(new Error('WebSocket is closed'));
199
- };
200
- const cleanup = () => {
201
- clearTimeout(timeoutId);
202
- this.awsRealTimeSocket?.removeEventListener('message', publishListener);
203
- this.awsRealTimeSocket?.removeEventListener('error', errorListener);
204
- this.awsRealTimeSocket?.removeEventListener('close', closeListener);
180
+ if (data.erroredEvents && data.erroredEvents.length > 0) ;
205
181
  };
206
182
  this.awsRealTimeSocket.addEventListener('message', publishListener);
207
- this.awsRealTimeSocket.addEventListener('error', errorListener);
208
- this.awsRealTimeSocket.addEventListener('close', closeListener);
183
+ this.awsRealTimeSocket.addEventListener('close', () => {
184
+ reject(new Error('WebSocket is closed'));
185
+ });
186
+ //
187
+ // this.awsRealTimeSocket.addEventListener('error', publishListener);
209
188
  this.awsRealTimeSocket.send(serializedSubscriptionMessage);
210
189
  }
211
- else {
212
- reject(new Error('WebSocket is not connected'));
213
- }
214
190
  });
215
191
  }
216
192
  async _cleanupSubscription(subscriptionId, reconnectSubscription) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/Providers/AWSWebSocketProvider/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AWSWebSocketProvider = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst rxjs_1 = require(\"rxjs\");\nconst graphql_1 = require(\"graphql\");\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst PubSub_1 = require(\"../../types/PubSub\");\nconst constants_1 = require(\"../constants\");\nconst ConnectionStateMonitor_1 = require(\"../../utils/ConnectionStateMonitor\");\nconst ReconnectionMonitor_1 = require(\"../../utils/ReconnectionMonitor\");\nconst appsyncUrl_1 = require(\"./appsyncUrl\");\nconst authHeaders_1 = require(\"./authHeaders\");\nconst dispatchApiEvent = (payload) => {\n core_1.Hub.dispatch('api', payload, 'PubSub', constants_1.AMPLIFY_SYMBOL);\n};\nclass AWSWebSocketProvider {\n constructor(args) {\n this.subscriptionObserverMap = new Map();\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n this.keepAliveTimestamp = Date.now();\n this.promiseArray = [];\n this.connectionStateMonitor = new ConnectionStateMonitor_1.ConnectionStateMonitor();\n this.reconnectionMonitor = new ReconnectionMonitor_1.ReconnectionMonitor();\n /**\n * Open WebSocket connection & perform handshake\n * Ref: https://docs.aws.amazon.com/appsync/latest/devguide/real-time-websocket-client.html#appsynclong-real-time-websocket-client-implementation-guide-for-graphql-subscriptions\n *\n * @param subprotocol -\n */\n this._establishConnection = async (awsRealTimeUrl, subprotocol) => {\n this.logger.debug(`Establishing WebSocket connection to ${awsRealTimeUrl}`);\n try {\n await this._openConnection(awsRealTimeUrl, subprotocol);\n await this._initiateHandshake();\n }\n catch (err) {\n const { errorType, errorCode } = err;\n if (constants_1.NON_RETRYABLE_CODES.includes(errorCode) ||\n // Event API does not currently return `errorCode`. This may change in the future.\n // For now fall back to also checking known non-retryable error types\n constants_1.NON_RETRYABLE_ERROR_TYPES.includes(errorType)) {\n throw new utils_1.NonRetryableError(errorType);\n }\n else if (errorType) {\n throw new Error(errorType);\n }\n else {\n throw err;\n }\n }\n };\n this.logger = new core_1.ConsoleLogger(args.providerName);\n this.wsProtocolName = args.wsProtocolName;\n this.wsConnectUri = args.connectUri;\n this.connectionStateMonitorSubscription =\n this._startConnectionStateMonitoring();\n }\n /**\n * Mark the socket closed and release all active listeners\n */\n close() {\n // Mark the socket closed both in status and the connection monitor\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CONNECTION_FAILED);\n // Turn off the subscription monitor Hub publishing\n this.connectionStateMonitorSubscription.unsubscribe();\n // Complete all reconnect observers\n this.reconnectionMonitor.close();\n return new Promise((resolve, reject) => {\n if (this.awsRealTimeSocket) {\n this.awsRealTimeSocket.onclose = (_) => {\n this._closeSocket();\n this.subscriptionObserverMap = new Map();\n this.awsRealTimeSocket = undefined;\n resolve();\n };\n this.awsRealTimeSocket.onerror = (err) => {\n reject(err);\n };\n this.awsRealTimeSocket.close();\n }\n else {\n resolve();\n }\n });\n }\n subscribe(options, customUserAgentDetails) {\n return new rxjs_1.Observable(observer => {\n if (!options?.appSyncGraphqlEndpoint) {\n observer.error({\n errors: [\n {\n ...new graphql_1.GraphQLError(`Subscribe only available for AWS AppSync endpoint`),\n },\n ],\n });\n observer.complete();\n return;\n }\n let subscriptionStartInProgress = false;\n const subscriptionId = (0, utils_1.amplifyUuid)();\n const startSubscription = () => {\n if (!subscriptionStartInProgress) {\n subscriptionStartInProgress = true;\n this._startSubscriptionWithAWSAppSyncRealTime({\n options,\n observer,\n subscriptionId,\n customUserAgentDetails,\n })\n .catch(err => {\n this.logger.debug(`${PubSub_1.CONTROL_MSG.REALTIME_SUBSCRIPTION_INIT_ERROR}: ${err}`);\n this._closeSocket();\n })\n .finally(() => {\n subscriptionStartInProgress = false;\n });\n }\n };\n // Add an observable to the reconnection list to manage reconnection for this subscription\n const reconnectSubscription = new rxjs_1.Observable(reconnectSubscriptionObserver => {\n this.reconnectionMonitor.addObserver(reconnectSubscriptionObserver);\n }).subscribe(() => {\n startSubscription();\n });\n startSubscription();\n return async () => {\n await this._cleanupSubscription(subscriptionId, reconnectSubscription);\n };\n });\n }\n async connect(options) {\n if (this.socketStatus === constants_1.SOCKET_STATUS.READY) {\n return;\n }\n await this._connectWebSocket(options);\n }\n async publish(options, customUserAgentDetails) {\n if (this.socketStatus !== constants_1.SOCKET_STATUS.READY) {\n throw new Error('Subscription has not been initialized');\n }\n return this._publishMessage(options, customUserAgentDetails);\n }\n async _connectWebSocket(options) {\n const { apiKey, appSyncGraphqlEndpoint, authenticationType, region } = options;\n const { additionalCustomHeaders } = await (0, appsyncUrl_1.additionalHeadersFromOptions)(options);\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.OPENING_CONNECTION);\n await this._initializeWebSocketConnection({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n region,\n additionalCustomHeaders,\n });\n }\n async _publishMessage(options, customUserAgentDetails) {\n const subscriptionId = (0, utils_1.amplifyUuid)();\n const { additionalCustomHeaders, libraryConfigHeaders } = await (0, appsyncUrl_1.additionalHeadersFromOptions)(options);\n const serializedSubscriptionMessage = await this._prepareSubscriptionPayload({\n options,\n subscriptionId,\n customUserAgentDetails,\n additionalCustomHeaders,\n libraryConfigHeaders,\n publish: true,\n });\n return new Promise((resolve, reject) => {\n if (this.awsRealTimeSocket) {\n const timeoutId = setTimeout(() => {\n cleanup();\n reject(new Error('Publish operation timed out'));\n }, 30000); // 30 seconds timeout\n const publishListener = (event) => {\n const data = JSON.parse(event.data);\n if (data.id === subscriptionId && data.type === 'publish_success') {\n this.awsRealTimeSocket &&\n this.awsRealTimeSocket.removeEventListener('message', publishListener);\n cleanup();\n resolve();\n }\n if (data.erroredEvents && data.erroredEvents.length > 0) {\n // TODO: handle errors\n const errors = data.erroredEvents.map((errorEvent) => errorEvent.error);\n cleanup();\n reject(new Error(`Publish errors: ${errors.join(', ')}`));\n }\n };\n const errorListener = (error) => {\n cleanup();\n reject(new Error(`WebSocket error: ${error}`));\n };\n const closeListener = () => {\n cleanup();\n reject(new Error('WebSocket is closed'));\n };\n const cleanup = () => {\n clearTimeout(timeoutId);\n this.awsRealTimeSocket?.removeEventListener('message', publishListener);\n this.awsRealTimeSocket?.removeEventListener('error', errorListener);\n this.awsRealTimeSocket?.removeEventListener('close', closeListener);\n };\n this.awsRealTimeSocket.addEventListener('message', publishListener);\n this.awsRealTimeSocket.addEventListener('error', errorListener);\n this.awsRealTimeSocket.addEventListener('close', closeListener);\n this.awsRealTimeSocket.send(serializedSubscriptionMessage);\n }\n else {\n reject(new Error('WebSocket is not connected'));\n }\n });\n }\n async _cleanupSubscription(subscriptionId, reconnectSubscription) {\n // Cleanup reconnection subscription\n reconnectSubscription?.unsubscribe();\n // Cleanup after unsubscribing or observer.complete was called after _startSubscriptionWithAWSAppSyncRealTime\n try {\n // Waiting that subscription has been connected before trying to unsubscribe\n await this._waitForSubscriptionToBeConnected(subscriptionId);\n const { subscriptionState } = this.subscriptionObserverMap.get(subscriptionId) || {};\n if (!subscriptionState) {\n // subscription already unsubscribed\n return;\n }\n if (subscriptionState === constants_1.SUBSCRIPTION_STATUS.CONNECTED) {\n this._sendUnsubscriptionMessage(subscriptionId);\n }\n else {\n throw new Error('Subscription never connected');\n }\n }\n catch (err) {\n this.logger.debug(`Error while unsubscribing ${err}`);\n }\n finally {\n this._removeSubscriptionObserver(subscriptionId);\n }\n }\n // Monitor the connection state and pass changes along to Hub\n _startConnectionStateMonitoring() {\n return this.connectionStateMonitor.connectionStateObservable.subscribe(connectionState => {\n dispatchApiEvent({\n event: constants_1.CONNECTION_STATE_CHANGE,\n data: {\n provider: this,\n connectionState,\n },\n message: `Connection state is ${connectionState}`,\n });\n this.connectionState = connectionState;\n // Trigger START_RECONNECT when the connection is disrupted\n if (connectionState === PubSub_1.ConnectionState.ConnectionDisrupted) {\n this.reconnectionMonitor.record(ReconnectionMonitor_1.ReconnectEvent.START_RECONNECT);\n }\n // Trigger HALT_RECONNECT to halt reconnection attempts when the state is anything other than\n // ConnectionDisrupted or Connecting\n if ([\n PubSub_1.ConnectionState.Connected,\n PubSub_1.ConnectionState.ConnectedPendingDisconnect,\n PubSub_1.ConnectionState.ConnectedPendingKeepAlive,\n PubSub_1.ConnectionState.ConnectedPendingNetwork,\n PubSub_1.ConnectionState.ConnectionDisruptedPendingNetwork,\n PubSub_1.ConnectionState.Disconnected,\n ].includes(connectionState)) {\n this.reconnectionMonitor.record(ReconnectionMonitor_1.ReconnectEvent.HALT_RECONNECT);\n }\n });\n }\n async _startSubscriptionWithAWSAppSyncRealTime({ options, observer, subscriptionId, customUserAgentDetails, }) {\n const { query, variables } = options;\n const { additionalCustomHeaders, libraryConfigHeaders } = await (0, appsyncUrl_1.additionalHeadersFromOptions)(options);\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n query: query ?? '',\n variables: variables ?? {},\n subscriptionState: constants_1.SUBSCRIPTION_STATUS.PENDING,\n startAckTimeoutId: undefined,\n });\n const serializedSubscriptionMessage = await this._prepareSubscriptionPayload({\n options,\n subscriptionId,\n customUserAgentDetails,\n additionalCustomHeaders,\n libraryConfigHeaders,\n });\n try {\n await this._connectWebSocket(options);\n }\n catch (err) {\n this._logStartSubscriptionError(subscriptionId, observer, err);\n return;\n }\n // Potential race condition can occur when unsubscribe is called during _initializeWebSocketConnection.\n // E.g.unsubscribe gets invoked prior to finishing WebSocket handshake or START_ACK.\n // Both subscriptionFailedCallback and subscriptionReadyCallback are used to synchronized this.\n const { subscriptionFailedCallback, subscriptionReadyCallback } = this.subscriptionObserverMap.get(subscriptionId) ?? {};\n // This must be done before sending the message in order to be listening immediately\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n subscriptionState: constants_1.SUBSCRIPTION_STATUS.PENDING,\n query: query ?? '',\n variables: variables ?? {},\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n startAckTimeoutId: setTimeout(() => {\n this._timeoutStartSubscriptionAck(subscriptionId);\n }, constants_1.START_ACK_TIMEOUT),\n });\n if (this.awsRealTimeSocket) {\n this.awsRealTimeSocket.send(serializedSubscriptionMessage);\n }\n }\n // Log logic for start subscription failures\n _logStartSubscriptionError(subscriptionId, observer, err) {\n this.logger.debug({ err });\n const message = String(err.message ?? '');\n // Resolving to give the state observer time to propogate the update\n this._closeSocket();\n // Capture the error only when the network didn't cause disruption\n if (this.connectionState !== PubSub_1.ConnectionState.ConnectionDisruptedPendingNetwork) {\n // When the error is non-retriable, error out the observable\n if ((0, utils_1.isNonRetryableError)(err)) {\n observer.error({\n errors: [\n {\n ...new graphql_1.GraphQLError(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${message}`),\n },\n ],\n });\n }\n else {\n this.logger.debug(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${message}`);\n }\n const { subscriptionFailedCallback } = this.subscriptionObserverMap.get(subscriptionId) || {};\n // Notify concurrent unsubscription\n if (typeof subscriptionFailedCallback === 'function') {\n subscriptionFailedCallback();\n }\n }\n }\n // Waiting that subscription has been connected before trying to unsubscribe\n async _waitForSubscriptionToBeConnected(subscriptionId) {\n const subscriptionObserver = this.subscriptionObserverMap.get(subscriptionId);\n if (subscriptionObserver) {\n const { subscriptionState } = subscriptionObserver;\n // This in case unsubscribe is invoked before sending start subscription message\n if (subscriptionState === constants_1.SUBSCRIPTION_STATUS.PENDING) {\n return new Promise((resolve, reject) => {\n const { observer, subscriptionState: observedSubscriptionState, variables, query, } = subscriptionObserver;\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n subscriptionState: observedSubscriptionState,\n variables,\n query,\n subscriptionReadyCallback: resolve,\n subscriptionFailedCallback: reject,\n });\n });\n }\n }\n }\n _sendUnsubscriptionMessage(subscriptionId) {\n try {\n if (this.awsRealTimeSocket &&\n this.awsRealTimeSocket.readyState === WebSocket.OPEN &&\n this.socketStatus === constants_1.SOCKET_STATUS.READY) {\n // Preparing unsubscribe message to stop receiving messages for that subscription\n const unsubscribeMessage = this._unsubscribeMessage(subscriptionId);\n const stringToAWSRealTime = JSON.stringify(unsubscribeMessage);\n this.awsRealTimeSocket.send(stringToAWSRealTime);\n }\n }\n catch (err) {\n // If GQL_STOP is not sent because of disconnection issue, then there is nothing the client can do\n this.logger.debug({ err });\n }\n }\n _removeSubscriptionObserver(subscriptionId) {\n this.subscriptionObserverMap.delete(subscriptionId);\n // Verifying 1000ms after removing subscription in case there are new subscription unmount/mount\n setTimeout(this._closeSocketIfRequired.bind(this), 1000);\n }\n _closeSocketIfRequired() {\n if (this.subscriptionObserverMap.size > 0) {\n // Active subscriptions on the WebSocket\n return;\n }\n if (!this.awsRealTimeSocket) {\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n return;\n }\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSING_CONNECTION);\n if (this.awsRealTimeSocket.bufferedAmount > 0) {\n // Still data on the WebSocket\n setTimeout(this._closeSocketIfRequired.bind(this), 1000);\n }\n else {\n this.logger.debug('closing WebSocket...');\n const tempSocket = this.awsRealTimeSocket;\n // Cleaning callbacks to avoid race condition, socket still exists\n tempSocket.onclose = null;\n tempSocket.onerror = null;\n tempSocket.close(1000);\n this.awsRealTimeSocket = undefined;\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n this._closeSocket();\n }\n }\n maintainKeepAlive() {\n this.keepAliveTimestamp = Date.now();\n }\n keepAliveHeartbeat(connectionTimeoutMs) {\n const currentTime = Date.now();\n // Check for missed KA message\n if (currentTime - this.keepAliveTimestamp >\n constants_1.DEFAULT_KEEP_ALIVE_ALERT_TIMEOUT) {\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.KEEP_ALIVE_MISSED);\n }\n else {\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.KEEP_ALIVE);\n }\n // Recognize we are disconnected if we haven't seen messages in the keep alive timeout period\n if (currentTime - this.keepAliveTimestamp > connectionTimeoutMs) {\n this._errorDisconnect(PubSub_1.CONTROL_MSG.TIMEOUT_DISCONNECT);\n }\n }\n _handleIncomingSubscriptionMessage(message) {\n if (typeof message.data !== 'string') {\n return;\n }\n const [isData, data] = this._handleSubscriptionData(message);\n if (isData) {\n this.maintainKeepAlive();\n return;\n }\n const { type, id, payload } = data;\n const { observer = null, query = '', variables = {}, startAckTimeoutId, subscriptionReadyCallback, subscriptionFailedCallback, } = this.subscriptionObserverMap.get(id) || {};\n if (type === constants_1.MESSAGE_TYPES.GQL_START_ACK ||\n type === constants_1.MESSAGE_TYPES.EVENT_SUBSCRIBE_ACK) {\n this.logger.debug(`subscription ready for ${JSON.stringify({ query, variables })}`);\n if (typeof subscriptionReadyCallback === 'function') {\n subscriptionReadyCallback();\n }\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n dispatchApiEvent({\n event: PubSub_1.CONTROL_MSG.SUBSCRIPTION_ACK,\n data: { query, variables },\n message: 'Connection established for subscription',\n });\n const subscriptionState = constants_1.SUBSCRIPTION_STATUS.CONNECTED;\n if (observer) {\n this.subscriptionObserverMap.set(id, {\n observer,\n query,\n variables,\n startAckTimeoutId: undefined,\n subscriptionState,\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n });\n }\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CONNECTION_ESTABLISHED);\n return;\n }\n if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_KEEP_ALIVE) {\n this.maintainKeepAlive();\n return;\n }\n if (type === constants_1.MESSAGE_TYPES.GQL_ERROR) {\n const subscriptionState = constants_1.SUBSCRIPTION_STATUS.FAILED;\n if (observer) {\n this.subscriptionObserverMap.set(id, {\n observer,\n query,\n variables,\n startAckTimeoutId,\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n subscriptionState,\n });\n this.logger.debug(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload ?? data)}`);\n observer.error({\n errors: [\n {\n ...new graphql_1.GraphQLError(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload ?? data)}`),\n },\n ],\n });\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n if (typeof subscriptionFailedCallback === 'function') {\n subscriptionFailedCallback();\n }\n }\n }\n }\n _errorDisconnect(msg) {\n this.logger.debug(`Disconnect error: ${msg}`);\n if (this.awsRealTimeSocket) {\n this._closeSocket();\n this.awsRealTimeSocket.close();\n }\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n }\n _closeSocket() {\n if (this.keepAliveHeartbeatIntervalId) {\n clearInterval(this.keepAliveHeartbeatIntervalId);\n this.keepAliveHeartbeatIntervalId = undefined;\n }\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);\n }\n _timeoutStartSubscriptionAck(subscriptionId) {\n const subscriptionObserver = this.subscriptionObserverMap.get(subscriptionId);\n if (subscriptionObserver) {\n const { observer, query, variables } = subscriptionObserver;\n if (!observer) {\n return;\n }\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n query,\n variables,\n subscriptionState: constants_1.SUBSCRIPTION_STATUS.FAILED,\n });\n this._closeSocket();\n this.logger.debug('timeoutStartSubscription', JSON.stringify({ query, variables }));\n }\n }\n _initializeWebSocketConnection({ appSyncGraphqlEndpoint, authenticationType, apiKey, region, additionalCustomHeaders, }) {\n if (this.socketStatus === constants_1.SOCKET_STATUS.READY) {\n return;\n }\n // TODO(Eslint): refactor to now use async function as the promise executor\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n this.promiseArray.push({ res: resolve, rej: reject });\n if (this.socketStatus === constants_1.SOCKET_STATUS.CLOSED) {\n try {\n this.socketStatus = constants_1.SOCKET_STATUS.CONNECTING;\n // Empty payload on connect\n const payloadString = '{}';\n const authHeader = await (0, authHeaders_1.awsRealTimeHeaderBasedAuth)({\n authenticationType,\n payload: payloadString,\n canonicalUri: this.wsConnectUri,\n apiKey,\n appSyncGraphqlEndpoint,\n region,\n additionalCustomHeaders,\n });\n const headerString = authHeader ? JSON.stringify(authHeader) : '';\n // base64url-encoded string\n const encodedHeader = utils_1.base64Encoder.convert(headerString, {\n urlSafe: true,\n skipPadding: true,\n });\n const authTokenSubprotocol = `header-${encodedHeader}`;\n const queryParams = (0, appsyncUrl_1.queryParamsFromCustomHeaders)(additionalCustomHeaders);\n const awsRealTimeUrl = (0, appsyncUrl_1.realtimeUrlWithQueryString)(appSyncGraphqlEndpoint, queryParams);\n await this._establishRetryableConnection(awsRealTimeUrl, authTokenSubprotocol);\n this.promiseArray.forEach(({ res }) => {\n this.logger.debug('Notifying connection successful');\n res();\n });\n this.socketStatus = constants_1.SOCKET_STATUS.READY;\n this.promiseArray = [];\n }\n catch (err) {\n this.logger.debug('Connection exited with', err);\n this.promiseArray.forEach(({ rej }) => {\n rej(err);\n });\n this.promiseArray = [];\n if (this.awsRealTimeSocket &&\n this.awsRealTimeSocket.readyState === WebSocket.OPEN) {\n this.awsRealTimeSocket.close(3001);\n }\n this.awsRealTimeSocket = undefined;\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n }\n }\n });\n }\n async _establishRetryableConnection(awsRealTimeUrl, subprotocol) {\n this.logger.debug(`Establishing retryable connection`);\n await (0, utils_1.jitteredExponentialRetry)(this._establishConnection.bind(this), [awsRealTimeUrl, subprotocol], constants_1.MAX_DELAY_MS);\n }\n async _openConnection(awsRealTimeUrl, subprotocol) {\n return new Promise((resolve, reject) => {\n const newSocket = this._getNewWebSocket(awsRealTimeUrl, [\n this.wsProtocolName,\n subprotocol,\n ]);\n newSocket.onerror = () => {\n this.logger.debug(`WebSocket connection error`);\n };\n newSocket.onclose = () => {\n this._closeSocket();\n reject(new Error('Connection handshake error'));\n };\n newSocket.onopen = () => {\n this.awsRealTimeSocket = newSocket;\n resolve();\n };\n });\n }\n _getNewWebSocket(url, protocol) {\n return new WebSocket(url, protocol);\n }\n async _initiateHandshake() {\n return new Promise((resolve, reject) => {\n if (!this.awsRealTimeSocket) {\n reject(new Error('awsRealTimeSocket undefined'));\n return;\n }\n let ackOk = false;\n this.awsRealTimeSocket.onerror = error => {\n this.logger.debug(`WebSocket error ${JSON.stringify(error)}`);\n };\n this.awsRealTimeSocket.onclose = event => {\n this.logger.debug(`WebSocket closed ${event.reason}`);\n this._closeSocket();\n reject(new Error(JSON.stringify(event)));\n };\n this.awsRealTimeSocket.onmessage = (message) => {\n if (typeof message.data !== 'string') {\n return;\n }\n this.logger.debug(`subscription message from AWS AppSyncRealTime: ${message.data} `);\n const data = JSON.parse(message.data);\n const { type } = data;\n const connectionTimeoutMs = this._extractConnectionTimeout(data);\n if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_ACK) {\n ackOk = true;\n this._registerWebsocketHandlers(connectionTimeoutMs);\n resolve('Connected to AWS AppSyncRealTime');\n return;\n }\n if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_ERROR) {\n const { errorType, errorCode } = this._extractErrorCodeAndType(data);\n // TODO(Eslint): refactor to reject an Error object instead of a plain object\n // eslint-disable-next-line prefer-promise-reject-errors\n reject({ errorType, errorCode });\n }\n };\n const gqlInit = {\n type: constants_1.MESSAGE_TYPES.GQL_CONNECTION_INIT,\n };\n this.awsRealTimeSocket.send(JSON.stringify(gqlInit));\n const checkAckOk = (targetAckOk) => {\n if (!targetAckOk) {\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CONNECTION_FAILED);\n reject(new Error(`Connection timeout: ack from AWSAppSyncRealTime was not received after ${constants_1.CONNECTION_INIT_TIMEOUT} ms`));\n }\n };\n setTimeout(() => {\n checkAckOk(ackOk);\n }, constants_1.CONNECTION_INIT_TIMEOUT);\n });\n }\n _registerWebsocketHandlers(connectionTimeoutMs) {\n if (!this.awsRealTimeSocket) {\n return;\n }\n // Set up a keep alive heartbeat for this connection\n this.keepAliveHeartbeatIntervalId = setInterval(() => {\n this.keepAliveHeartbeat(connectionTimeoutMs);\n }, constants_1.DEFAULT_KEEP_ALIVE_HEARTBEAT_TIMEOUT);\n this.awsRealTimeSocket.onmessage =\n this._handleIncomingSubscriptionMessage.bind(this);\n this.awsRealTimeSocket.onerror = err => {\n this.logger.debug(err);\n this._errorDisconnect(PubSub_1.CONTROL_MSG.CONNECTION_CLOSED);\n };\n this.awsRealTimeSocket.onclose = event => {\n this.logger.debug(`WebSocket closed ${event.reason}`);\n this._closeSocket();\n this._errorDisconnect(PubSub_1.CONTROL_MSG.CONNECTION_CLOSED);\n };\n }\n}\nexports.AWSWebSocketProvider = AWSWebSocketProvider;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/Providers/AWSWebSocketProvider/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AWSWebSocketProvider = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst rxjs_1 = require(\"rxjs\");\nconst graphql_1 = require(\"graphql\");\nconst core_1 = require(\"@aws-amplify/core\");\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst PubSub_1 = require(\"../../types/PubSub\");\nconst constants_1 = require(\"../constants\");\nconst ConnectionStateMonitor_1 = require(\"../../utils/ConnectionStateMonitor\");\nconst ReconnectionMonitor_1 = require(\"../../utils/ReconnectionMonitor\");\nconst appsyncUrl_1 = require(\"./appsyncUrl\");\nconst authHeaders_1 = require(\"./authHeaders\");\nconst dispatchApiEvent = (payload) => {\n core_1.Hub.dispatch('api', payload, 'PubSub', constants_1.AMPLIFY_SYMBOL);\n};\nclass AWSWebSocketProvider {\n constructor(args) {\n this.subscriptionObserverMap = new Map();\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n this.keepAliveTimestamp = Date.now();\n this.promiseArray = [];\n this.connectionStateMonitor = new ConnectionStateMonitor_1.ConnectionStateMonitor();\n this.reconnectionMonitor = new ReconnectionMonitor_1.ReconnectionMonitor();\n /**\n * Open WebSocket connection & perform handshake\n * Ref: https://docs.aws.amazon.com/appsync/latest/devguide/real-time-websocket-client.html#appsynclong-real-time-websocket-client-implementation-guide-for-graphql-subscriptions\n *\n * @param subprotocol -\n */\n this._establishConnection = async (awsRealTimeUrl, subprotocol) => {\n this.logger.debug(`Establishing WebSocket connection to ${awsRealTimeUrl}`);\n try {\n await this._openConnection(awsRealTimeUrl, subprotocol);\n await this._initiateHandshake();\n }\n catch (err) {\n const { errorType, errorCode } = err;\n if (constants_1.NON_RETRYABLE_CODES.includes(errorCode) ||\n // Event API does not currently return `errorCode`. This may change in the future.\n // For now fall back to also checking known non-retryable error types\n constants_1.NON_RETRYABLE_ERROR_TYPES.includes(errorType)) {\n throw new utils_1.NonRetryableError(errorType);\n }\n else if (errorType) {\n throw new Error(errorType);\n }\n else {\n throw err;\n }\n }\n };\n this.logger = new core_1.ConsoleLogger(args.providerName);\n this.wsProtocolName = args.wsProtocolName;\n this.wsConnectUri = args.connectUri;\n this.connectionStateMonitorSubscription =\n this._startConnectionStateMonitoring();\n }\n /**\n * Mark the socket closed and release all active listeners\n */\n close() {\n // Mark the socket closed both in status and the connection monitor\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CONNECTION_FAILED);\n // Turn off the subscription monitor Hub publishing\n this.connectionStateMonitorSubscription.unsubscribe();\n // Complete all reconnect observers\n this.reconnectionMonitor.close();\n return new Promise((resolve, reject) => {\n if (this.awsRealTimeSocket) {\n this.awsRealTimeSocket.onclose = (_) => {\n this._closeSocket();\n this.subscriptionObserverMap = new Map();\n this.awsRealTimeSocket = undefined;\n resolve();\n };\n this.awsRealTimeSocket.onerror = (err) => {\n reject(err);\n };\n this.awsRealTimeSocket.close();\n }\n else {\n resolve();\n }\n });\n }\n subscribe(options, customUserAgentDetails) {\n return new rxjs_1.Observable(observer => {\n if (!options?.appSyncGraphqlEndpoint) {\n observer.error({\n errors: [\n {\n ...new graphql_1.GraphQLError(`Subscribe only available for AWS AppSync endpoint`),\n },\n ],\n });\n observer.complete();\n return;\n }\n let subscriptionStartInProgress = false;\n const subscriptionId = (0, utils_1.amplifyUuid)();\n const startSubscription = () => {\n if (!subscriptionStartInProgress) {\n subscriptionStartInProgress = true;\n this._startSubscriptionWithAWSAppSyncRealTime({\n options,\n observer,\n subscriptionId,\n customUserAgentDetails,\n })\n .catch(err => {\n this.logger.debug(`${PubSub_1.CONTROL_MSG.REALTIME_SUBSCRIPTION_INIT_ERROR}: ${err}`);\n this._closeSocket();\n })\n .finally(() => {\n subscriptionStartInProgress = false;\n });\n }\n };\n // Add an observable to the reconnection list to manage reconnection for this subscription\n const reconnectSubscription = new rxjs_1.Observable(reconnectSubscriptionObserver => {\n this.reconnectionMonitor.addObserver(reconnectSubscriptionObserver);\n }).subscribe(() => {\n startSubscription();\n });\n startSubscription();\n return async () => {\n await this._cleanupSubscription(subscriptionId, reconnectSubscription);\n };\n });\n }\n async connect(options) {\n if (this.socketStatus === constants_1.SOCKET_STATUS.READY) {\n return;\n }\n await this._connectWebSocket(options);\n }\n async publish(options, customUserAgentDetails) {\n if (this.socketStatus !== constants_1.SOCKET_STATUS.READY) {\n throw new Error('Subscription has not been initialized');\n }\n return this._publishMessage(options, customUserAgentDetails);\n }\n async _connectWebSocket(options) {\n const { apiKey, appSyncGraphqlEndpoint, authenticationType, region } = options;\n const { additionalCustomHeaders } = await (0, appsyncUrl_1.additionalHeadersFromOptions)(options);\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.OPENING_CONNECTION);\n await this._initializeWebSocketConnection({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n region,\n additionalCustomHeaders,\n });\n }\n async _publishMessage(options, customUserAgentDetails) {\n const subscriptionId = (0, utils_1.amplifyUuid)();\n const { additionalCustomHeaders, libraryConfigHeaders } = await (0, appsyncUrl_1.additionalHeadersFromOptions)(options);\n const serializedSubscriptionMessage = await this._prepareSubscriptionPayload({\n options,\n subscriptionId,\n customUserAgentDetails,\n additionalCustomHeaders,\n libraryConfigHeaders,\n publish: true,\n });\n return new Promise((resolve, reject) => {\n if (this.awsRealTimeSocket) {\n const publishListener = (event) => {\n const data = JSON.parse(event.data);\n if (data.id === subscriptionId && data.type === 'publish_success') {\n this.awsRealTimeSocket &&\n this.awsRealTimeSocket.removeEventListener('message', publishListener);\n resolve();\n }\n if (data.erroredEvents && data.erroredEvents.length > 0) {\n // TODO: handle errors\n }\n };\n this.awsRealTimeSocket.addEventListener('message', publishListener);\n this.awsRealTimeSocket.addEventListener('close', () => {\n reject(new Error('WebSocket is closed'));\n });\n //\n // this.awsRealTimeSocket.addEventListener('error', publishListener);\n this.awsRealTimeSocket.send(serializedSubscriptionMessage);\n }\n });\n }\n async _cleanupSubscription(subscriptionId, reconnectSubscription) {\n // Cleanup reconnection subscription\n reconnectSubscription?.unsubscribe();\n // Cleanup after unsubscribing or observer.complete was called after _startSubscriptionWithAWSAppSyncRealTime\n try {\n // Waiting that subscription has been connected before trying to unsubscribe\n await this._waitForSubscriptionToBeConnected(subscriptionId);\n const { subscriptionState } = this.subscriptionObserverMap.get(subscriptionId) || {};\n if (!subscriptionState) {\n // subscription already unsubscribed\n return;\n }\n if (subscriptionState === constants_1.SUBSCRIPTION_STATUS.CONNECTED) {\n this._sendUnsubscriptionMessage(subscriptionId);\n }\n else {\n throw new Error('Subscription never connected');\n }\n }\n catch (err) {\n this.logger.debug(`Error while unsubscribing ${err}`);\n }\n finally {\n this._removeSubscriptionObserver(subscriptionId);\n }\n }\n // Monitor the connection state and pass changes along to Hub\n _startConnectionStateMonitoring() {\n return this.connectionStateMonitor.connectionStateObservable.subscribe(connectionState => {\n dispatchApiEvent({\n event: constants_1.CONNECTION_STATE_CHANGE,\n data: {\n provider: this,\n connectionState,\n },\n message: `Connection state is ${connectionState}`,\n });\n this.connectionState = connectionState;\n // Trigger START_RECONNECT when the connection is disrupted\n if (connectionState === PubSub_1.ConnectionState.ConnectionDisrupted) {\n this.reconnectionMonitor.record(ReconnectionMonitor_1.ReconnectEvent.START_RECONNECT);\n }\n // Trigger HALT_RECONNECT to halt reconnection attempts when the state is anything other than\n // ConnectionDisrupted or Connecting\n if ([\n PubSub_1.ConnectionState.Connected,\n PubSub_1.ConnectionState.ConnectedPendingDisconnect,\n PubSub_1.ConnectionState.ConnectedPendingKeepAlive,\n PubSub_1.ConnectionState.ConnectedPendingNetwork,\n PubSub_1.ConnectionState.ConnectionDisruptedPendingNetwork,\n PubSub_1.ConnectionState.Disconnected,\n ].includes(connectionState)) {\n this.reconnectionMonitor.record(ReconnectionMonitor_1.ReconnectEvent.HALT_RECONNECT);\n }\n });\n }\n async _startSubscriptionWithAWSAppSyncRealTime({ options, observer, subscriptionId, customUserAgentDetails, }) {\n const { query, variables } = options;\n const { additionalCustomHeaders, libraryConfigHeaders } = await (0, appsyncUrl_1.additionalHeadersFromOptions)(options);\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n query: query ?? '',\n variables: variables ?? {},\n subscriptionState: constants_1.SUBSCRIPTION_STATUS.PENDING,\n startAckTimeoutId: undefined,\n });\n const serializedSubscriptionMessage = await this._prepareSubscriptionPayload({\n options,\n subscriptionId,\n customUserAgentDetails,\n additionalCustomHeaders,\n libraryConfigHeaders,\n });\n try {\n await this._connectWebSocket(options);\n }\n catch (err) {\n this._logStartSubscriptionError(subscriptionId, observer, err);\n return;\n }\n // Potential race condition can occur when unsubscribe is called during _initializeWebSocketConnection.\n // E.g.unsubscribe gets invoked prior to finishing WebSocket handshake or START_ACK.\n // Both subscriptionFailedCallback and subscriptionReadyCallback are used to synchronized this.\n const { subscriptionFailedCallback, subscriptionReadyCallback } = this.subscriptionObserverMap.get(subscriptionId) ?? {};\n // This must be done before sending the message in order to be listening immediately\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n subscriptionState: constants_1.SUBSCRIPTION_STATUS.PENDING,\n query: query ?? '',\n variables: variables ?? {},\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n startAckTimeoutId: setTimeout(() => {\n this._timeoutStartSubscriptionAck(subscriptionId);\n }, constants_1.START_ACK_TIMEOUT),\n });\n if (this.awsRealTimeSocket) {\n this.awsRealTimeSocket.send(serializedSubscriptionMessage);\n }\n }\n // Log logic for start subscription failures\n _logStartSubscriptionError(subscriptionId, observer, err) {\n this.logger.debug({ err });\n const message = String(err.message ?? '');\n // Resolving to give the state observer time to propogate the update\n this._closeSocket();\n // Capture the error only when the network didn't cause disruption\n if (this.connectionState !== PubSub_1.ConnectionState.ConnectionDisruptedPendingNetwork) {\n // When the error is non-retriable, error out the observable\n if ((0, utils_1.isNonRetryableError)(err)) {\n observer.error({\n errors: [\n {\n ...new graphql_1.GraphQLError(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${message}`),\n },\n ],\n });\n }\n else {\n this.logger.debug(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${message}`);\n }\n const { subscriptionFailedCallback } = this.subscriptionObserverMap.get(subscriptionId) || {};\n // Notify concurrent unsubscription\n if (typeof subscriptionFailedCallback === 'function') {\n subscriptionFailedCallback();\n }\n }\n }\n // Waiting that subscription has been connected before trying to unsubscribe\n async _waitForSubscriptionToBeConnected(subscriptionId) {\n const subscriptionObserver = this.subscriptionObserverMap.get(subscriptionId);\n if (subscriptionObserver) {\n const { subscriptionState } = subscriptionObserver;\n // This in case unsubscribe is invoked before sending start subscription message\n if (subscriptionState === constants_1.SUBSCRIPTION_STATUS.PENDING) {\n return new Promise((resolve, reject) => {\n const { observer, subscriptionState: observedSubscriptionState, variables, query, } = subscriptionObserver;\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n subscriptionState: observedSubscriptionState,\n variables,\n query,\n subscriptionReadyCallback: resolve,\n subscriptionFailedCallback: reject,\n });\n });\n }\n }\n }\n _sendUnsubscriptionMessage(subscriptionId) {\n try {\n if (this.awsRealTimeSocket &&\n this.awsRealTimeSocket.readyState === WebSocket.OPEN &&\n this.socketStatus === constants_1.SOCKET_STATUS.READY) {\n // Preparing unsubscribe message to stop receiving messages for that subscription\n const unsubscribeMessage = this._unsubscribeMessage(subscriptionId);\n const stringToAWSRealTime = JSON.stringify(unsubscribeMessage);\n this.awsRealTimeSocket.send(stringToAWSRealTime);\n }\n }\n catch (err) {\n // If GQL_STOP is not sent because of disconnection issue, then there is nothing the client can do\n this.logger.debug({ err });\n }\n }\n _removeSubscriptionObserver(subscriptionId) {\n this.subscriptionObserverMap.delete(subscriptionId);\n // Verifying 1000ms after removing subscription in case there are new subscription unmount/mount\n setTimeout(this._closeSocketIfRequired.bind(this), 1000);\n }\n _closeSocketIfRequired() {\n if (this.subscriptionObserverMap.size > 0) {\n // Active subscriptions on the WebSocket\n return;\n }\n if (!this.awsRealTimeSocket) {\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n return;\n }\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSING_CONNECTION);\n if (this.awsRealTimeSocket.bufferedAmount > 0) {\n // Still data on the WebSocket\n setTimeout(this._closeSocketIfRequired.bind(this), 1000);\n }\n else {\n this.logger.debug('closing WebSocket...');\n const tempSocket = this.awsRealTimeSocket;\n // Cleaning callbacks to avoid race condition, socket still exists\n tempSocket.onclose = null;\n tempSocket.onerror = null;\n tempSocket.close(1000);\n this.awsRealTimeSocket = undefined;\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n this._closeSocket();\n }\n }\n maintainKeepAlive() {\n this.keepAliveTimestamp = Date.now();\n }\n keepAliveHeartbeat(connectionTimeoutMs) {\n const currentTime = Date.now();\n // Check for missed KA message\n if (currentTime - this.keepAliveTimestamp >\n constants_1.DEFAULT_KEEP_ALIVE_ALERT_TIMEOUT) {\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.KEEP_ALIVE_MISSED);\n }\n else {\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.KEEP_ALIVE);\n }\n // Recognize we are disconnected if we haven't seen messages in the keep alive timeout period\n if (currentTime - this.keepAliveTimestamp > connectionTimeoutMs) {\n this._errorDisconnect(PubSub_1.CONTROL_MSG.TIMEOUT_DISCONNECT);\n }\n }\n _handleIncomingSubscriptionMessage(message) {\n if (typeof message.data !== 'string') {\n return;\n }\n const [isData, data] = this._handleSubscriptionData(message);\n if (isData) {\n this.maintainKeepAlive();\n return;\n }\n const { type, id, payload } = data;\n const { observer = null, query = '', variables = {}, startAckTimeoutId, subscriptionReadyCallback, subscriptionFailedCallback, } = this.subscriptionObserverMap.get(id) || {};\n if (type === constants_1.MESSAGE_TYPES.GQL_START_ACK ||\n type === constants_1.MESSAGE_TYPES.EVENT_SUBSCRIBE_ACK) {\n this.logger.debug(`subscription ready for ${JSON.stringify({ query, variables })}`);\n if (typeof subscriptionReadyCallback === 'function') {\n subscriptionReadyCallback();\n }\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n dispatchApiEvent({\n event: PubSub_1.CONTROL_MSG.SUBSCRIPTION_ACK,\n data: { query, variables },\n message: 'Connection established for subscription',\n });\n const subscriptionState = constants_1.SUBSCRIPTION_STATUS.CONNECTED;\n if (observer) {\n this.subscriptionObserverMap.set(id, {\n observer,\n query,\n variables,\n startAckTimeoutId: undefined,\n subscriptionState,\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n });\n }\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CONNECTION_ESTABLISHED);\n return;\n }\n if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_KEEP_ALIVE) {\n this.maintainKeepAlive();\n return;\n }\n if (type === constants_1.MESSAGE_TYPES.GQL_ERROR) {\n const subscriptionState = constants_1.SUBSCRIPTION_STATUS.FAILED;\n if (observer) {\n this.subscriptionObserverMap.set(id, {\n observer,\n query,\n variables,\n startAckTimeoutId,\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n subscriptionState,\n });\n this.logger.debug(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload ?? data)}`);\n observer.error({\n errors: [\n {\n ...new graphql_1.GraphQLError(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload ?? data)}`),\n },\n ],\n });\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n if (typeof subscriptionFailedCallback === 'function') {\n subscriptionFailedCallback();\n }\n }\n }\n }\n _errorDisconnect(msg) {\n this.logger.debug(`Disconnect error: ${msg}`);\n if (this.awsRealTimeSocket) {\n this._closeSocket();\n this.awsRealTimeSocket.close();\n }\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n }\n _closeSocket() {\n if (this.keepAliveHeartbeatIntervalId) {\n clearInterval(this.keepAliveHeartbeatIntervalId);\n this.keepAliveHeartbeatIntervalId = undefined;\n }\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);\n }\n _timeoutStartSubscriptionAck(subscriptionId) {\n const subscriptionObserver = this.subscriptionObserverMap.get(subscriptionId);\n if (subscriptionObserver) {\n const { observer, query, variables } = subscriptionObserver;\n if (!observer) {\n return;\n }\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n query,\n variables,\n subscriptionState: constants_1.SUBSCRIPTION_STATUS.FAILED,\n });\n this._closeSocket();\n this.logger.debug('timeoutStartSubscription', JSON.stringify({ query, variables }));\n }\n }\n _initializeWebSocketConnection({ appSyncGraphqlEndpoint, authenticationType, apiKey, region, additionalCustomHeaders, }) {\n if (this.socketStatus === constants_1.SOCKET_STATUS.READY) {\n return;\n }\n // TODO(Eslint): refactor to now use async function as the promise executor\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n this.promiseArray.push({ res: resolve, rej: reject });\n if (this.socketStatus === constants_1.SOCKET_STATUS.CLOSED) {\n try {\n this.socketStatus = constants_1.SOCKET_STATUS.CONNECTING;\n // Empty payload on connect\n const payloadString = '{}';\n const authHeader = await (0, authHeaders_1.awsRealTimeHeaderBasedAuth)({\n authenticationType,\n payload: payloadString,\n canonicalUri: this.wsConnectUri,\n apiKey,\n appSyncGraphqlEndpoint,\n region,\n additionalCustomHeaders,\n });\n const headerString = authHeader ? JSON.stringify(authHeader) : '';\n // base64url-encoded string\n const encodedHeader = utils_1.base64Encoder.convert(headerString, {\n urlSafe: true,\n skipPadding: true,\n });\n const authTokenSubprotocol = `header-${encodedHeader}`;\n const queryParams = (0, appsyncUrl_1.queryParamsFromCustomHeaders)(additionalCustomHeaders);\n const awsRealTimeUrl = (0, appsyncUrl_1.realtimeUrlWithQueryString)(appSyncGraphqlEndpoint, queryParams);\n await this._establishRetryableConnection(awsRealTimeUrl, authTokenSubprotocol);\n this.promiseArray.forEach(({ res }) => {\n this.logger.debug('Notifying connection successful');\n res();\n });\n this.socketStatus = constants_1.SOCKET_STATUS.READY;\n this.promiseArray = [];\n }\n catch (err) {\n this.logger.debug('Connection exited with', err);\n this.promiseArray.forEach(({ rej }) => {\n rej(err);\n });\n this.promiseArray = [];\n if (this.awsRealTimeSocket &&\n this.awsRealTimeSocket.readyState === WebSocket.OPEN) {\n this.awsRealTimeSocket.close(3001);\n }\n this.awsRealTimeSocket = undefined;\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n }\n }\n });\n }\n async _establishRetryableConnection(awsRealTimeUrl, subprotocol) {\n this.logger.debug(`Establishing retryable connection`);\n await (0, utils_1.jitteredExponentialRetry)(this._establishConnection.bind(this), [awsRealTimeUrl, subprotocol], constants_1.MAX_DELAY_MS);\n }\n async _openConnection(awsRealTimeUrl, subprotocol) {\n return new Promise((resolve, reject) => {\n const newSocket = this._getNewWebSocket(awsRealTimeUrl, [\n this.wsProtocolName,\n subprotocol,\n ]);\n newSocket.onerror = () => {\n this.logger.debug(`WebSocket connection error`);\n };\n newSocket.onclose = () => {\n this._closeSocket();\n reject(new Error('Connection handshake error'));\n };\n newSocket.onopen = () => {\n this.awsRealTimeSocket = newSocket;\n resolve();\n };\n });\n }\n _getNewWebSocket(url, protocol) {\n return new WebSocket(url, protocol);\n }\n async _initiateHandshake() {\n return new Promise((resolve, reject) => {\n if (!this.awsRealTimeSocket) {\n reject(new Error('awsRealTimeSocket undefined'));\n return;\n }\n let ackOk = false;\n this.awsRealTimeSocket.onerror = error => {\n this.logger.debug(`WebSocket error ${JSON.stringify(error)}`);\n };\n this.awsRealTimeSocket.onclose = event => {\n this.logger.debug(`WebSocket closed ${event.reason}`);\n this._closeSocket();\n reject(new Error(JSON.stringify(event)));\n };\n this.awsRealTimeSocket.onmessage = (message) => {\n if (typeof message.data !== 'string') {\n return;\n }\n this.logger.debug(`subscription message from AWS AppSyncRealTime: ${message.data} `);\n const data = JSON.parse(message.data);\n const { type } = data;\n const connectionTimeoutMs = this._extractConnectionTimeout(data);\n if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_ACK) {\n ackOk = true;\n this._registerWebsocketHandlers(connectionTimeoutMs);\n resolve('Connected to AWS AppSyncRealTime');\n return;\n }\n if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_ERROR) {\n const { errorType, errorCode } = this._extractErrorCodeAndType(data);\n // TODO(Eslint): refactor to reject an Error object instead of a plain object\n // eslint-disable-next-line prefer-promise-reject-errors\n reject({ errorType, errorCode });\n }\n };\n const gqlInit = {\n type: constants_1.MESSAGE_TYPES.GQL_CONNECTION_INIT,\n };\n this.awsRealTimeSocket.send(JSON.stringify(gqlInit));\n const checkAckOk = (targetAckOk) => {\n if (!targetAckOk) {\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CONNECTION_FAILED);\n reject(new Error(`Connection timeout: ack from AWSAppSyncRealTime was not received after ${constants_1.CONNECTION_INIT_TIMEOUT} ms`));\n }\n };\n setTimeout(() => {\n checkAckOk(ackOk);\n }, constants_1.CONNECTION_INIT_TIMEOUT);\n });\n }\n _registerWebsocketHandlers(connectionTimeoutMs) {\n if (!this.awsRealTimeSocket) {\n return;\n }\n // Set up a keep alive heartbeat for this connection\n this.keepAliveHeartbeatIntervalId = setInterval(() => {\n this.keepAliveHeartbeat(connectionTimeoutMs);\n }, constants_1.DEFAULT_KEEP_ALIVE_HEARTBEAT_TIMEOUT);\n this.awsRealTimeSocket.onmessage =\n this._handleIncomingSubscriptionMessage.bind(this);\n this.awsRealTimeSocket.onerror = err => {\n this.logger.debug(err);\n this._errorDisconnect(PubSub_1.CONTROL_MSG.CONNECTION_CLOSED);\n };\n this.awsRealTimeSocket.onclose = event => {\n this.logger.debug(`WebSocket closed ${event.reason}`);\n this._closeSocket();\n this._errorDisconnect(PubSub_1.CONTROL_MSG.CONNECTION_CLOSED);\n };\n }\n}\nexports.AWSWebSocketProvider = AWSWebSocketProvider;\n"],"names":[],"mappings":"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"}
@@ -41,23 +41,13 @@ async function connect(channel, options) {
41
41
  .subscribe(observer);
42
42
  return _subscription;
43
43
  };
44
- // WS publish is not enabled in the service yet. It will be a follow up feature
45
- const pub = async (event, pubOptions) => {
46
- const publishOptions = {
47
- ...providerOptions,
48
- query: channel,
49
- variables: event,
50
- };
51
- publishOptions.authenticationType = (0, utils_1.normalizeAuth)(pubOptions?.authMode, publishOptions.authenticationType);
52
- return AWSAppSyncEventsProvider_1.AppSyncEventProvider.publish(publishOptions);
53
- };
54
44
  const close = () => {
55
45
  _subscription && _subscription.unsubscribe();
56
46
  };
57
47
  return {
58
48
  subscribe: sub,
59
49
  close,
60
- publish: pub,
50
+ // publish: pub,
61
51
  };
62
52
  }
63
53
  exports.connect = connect;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/internals/events/index.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.closeAll = exports.post = exports.connect = void 0;\nconst core_1 = require(\"@aws-amplify/core\");\nconst AWSAppSyncEventsProvider_1 = require(\"../../Providers/AWSAppSyncEventsProvider\");\nconst appsyncRequest_1 = require(\"./appsyncRequest\");\nconst utils_1 = require(\"./utils\");\n/**\n * @experimental API may change in future versions\n *\n * Establish a WebSocket connection to an Events channel\n *\n * @example\n * const channel = await events.connect(\"default/channel\")\n *\n * channel.subscribe({\n * next: (data) => { console.log(data) },\n * error: (err) => { console.error(err) },\n * })\n *\n * @example // authMode override\n * const channel = await events.connect(\"default/channel\", { authMode: \"userPool\" })\n *\n * @param channel - channel path; `<namespace>/<channel>`\n * @param options - request overrides: `authMode`, `authToken`\n *\n */\nasync function connect(channel, options) {\n const providerOptions = (0, utils_1.configure)();\n providerOptions.authenticationType = (0, utils_1.normalizeAuth)(options?.authMode, providerOptions.authenticationType);\n await AWSAppSyncEventsProvider_1.AppSyncEventProvider.connect(providerOptions);\n let _subscription;\n const sub = (observer, subOptions) => {\n const subscribeOptions = { ...providerOptions, query: channel };\n subscribeOptions.authenticationType = (0, utils_1.normalizeAuth)(subOptions?.authMode, subscribeOptions.authenticationType);\n _subscription = AWSAppSyncEventsProvider_1.AppSyncEventProvider\n .subscribe(subscribeOptions)\n .subscribe(observer);\n return _subscription;\n };\n // WS publish is not enabled in the service yet. It will be a follow up feature\n const pub = async (event, pubOptions) => {\n const publishOptions = {\n ...providerOptions,\n query: channel,\n variables: event,\n };\n publishOptions.authenticationType = (0, utils_1.normalizeAuth)(pubOptions?.authMode, publishOptions.authenticationType);\n return AWSAppSyncEventsProvider_1.AppSyncEventProvider.publish(publishOptions);\n };\n const close = () => {\n _subscription && _subscription.unsubscribe();\n };\n return {\n subscribe: sub,\n close,\n publish: pub,\n };\n}\nexports.connect = connect;\n/**\n * @experimental API may change in future versions\n *\n * Publish events to a channel via HTTP request\n *\n * @example\n * await events.post(\"default/channel\", { some: \"event\" })\n *\n * @example // event batching\n * await events.post(\"default/channel\", [{ some: \"event\" }, { some: \"event2\" }])\n *\n * @example // authMode override\n * await events.post(\"default/channel\", { some: \"event\" }, { authMode: \"userPool\" })\n *\n * @param channel - channel path; `<namespace>/<channel>`\n * @param event - JSON-serializable value or an array of values\n * @param options - request overrides: `authMode`, `authToken`\n *\n * @returns void on success\n * @throws on error\n */\nasync function post(channel, event, options) {\n const providerOptions = (0, utils_1.configure)();\n providerOptions.authenticationType = (0, utils_1.normalizeAuth)(options?.authMode, providerOptions.authenticationType);\n // trailing slash required in publish\n const normalizedChannelName = channel[0] === '/' ? channel : `/${channel}`;\n const publishOptions = {\n ...providerOptions,\n query: normalizedChannelName,\n variables: (0, utils_1.serializeEvents)(event),\n authToken: options?.authToken,\n };\n const abortController = new AbortController();\n const res = await (0, appsyncRequest_1.appsyncRequest)(core_1.Amplify, publishOptions, {}, abortController);\n if (res.failed?.length > 0) {\n return res.failed;\n }\n}\nexports.post = post;\n/**\n * @experimental API may change in future versions\n *\n * Close WebSocket connection, disconnect listeners and reconnect observers\n *\n * @example\n * await events.closeAll()\n *\n * @returns void on success\n * @throws on error\n */\nasync function closeAll() {\n await AWSAppSyncEventsProvider_1.AppSyncEventProvider.close();\n}\nexports.closeAll = closeAll;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/internals/events/index.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.closeAll = exports.post = exports.connect = void 0;\nconst core_1 = require(\"@aws-amplify/core\");\nconst AWSAppSyncEventsProvider_1 = require(\"../../Providers/AWSAppSyncEventsProvider\");\nconst appsyncRequest_1 = require(\"./appsyncRequest\");\nconst utils_1 = require(\"./utils\");\n/**\n * @experimental API may change in future versions\n *\n * Establish a WebSocket connection to an Events channel\n *\n * @example\n * const channel = await events.connect(\"default/channel\")\n *\n * channel.subscribe({\n * next: (data) => { console.log(data) },\n * error: (err) => { console.error(err) },\n * })\n *\n * @example // authMode override\n * const channel = await events.connect(\"default/channel\", { authMode: \"userPool\" })\n *\n * @param channel - channel path; `<namespace>/<channel>`\n * @param options - request overrides: `authMode`, `authToken`\n *\n */\nasync function connect(channel, options) {\n const providerOptions = (0, utils_1.configure)();\n providerOptions.authenticationType = (0, utils_1.normalizeAuth)(options?.authMode, providerOptions.authenticationType);\n await AWSAppSyncEventsProvider_1.AppSyncEventProvider.connect(providerOptions);\n let _subscription;\n const sub = (observer, subOptions) => {\n const subscribeOptions = { ...providerOptions, query: channel };\n subscribeOptions.authenticationType = (0, utils_1.normalizeAuth)(subOptions?.authMode, subscribeOptions.authenticationType);\n _subscription = AWSAppSyncEventsProvider_1.AppSyncEventProvider\n .subscribe(subscribeOptions)\n .subscribe(observer);\n return _subscription;\n };\n // WS publish is not enabled in the service yet. It will be a follow up feature\n const _pub = async (event, pubOptions) => {\n const publishOptions = {\n ...providerOptions,\n query: channel,\n variables: event,\n };\n publishOptions.authenticationType = (0, utils_1.normalizeAuth)(pubOptions?.authMode, publishOptions.authenticationType);\n return AWSAppSyncEventsProvider_1.AppSyncEventProvider.publish(publishOptions);\n };\n const close = () => {\n _subscription && _subscription.unsubscribe();\n };\n return {\n subscribe: sub,\n close,\n // publish: pub,\n };\n}\nexports.connect = connect;\n/**\n * @experimental API may change in future versions\n *\n * Publish events to a channel via HTTP request\n *\n * @example\n * await events.post(\"default/channel\", { some: \"event\" })\n *\n * @example // event batching\n * await events.post(\"default/channel\", [{ some: \"event\" }, { some: \"event2\" }])\n *\n * @example // authMode override\n * await events.post(\"default/channel\", { some: \"event\" }, { authMode: \"userPool\" })\n *\n * @param channel - channel path; `<namespace>/<channel>`\n * @param event - JSON-serializable value or an array of values\n * @param options - request overrides: `authMode`, `authToken`\n *\n * @returns void on success\n * @throws on error\n */\nasync function post(channel, event, options) {\n const providerOptions = (0, utils_1.configure)();\n providerOptions.authenticationType = (0, utils_1.normalizeAuth)(options?.authMode, providerOptions.authenticationType);\n // trailing slash required in publish\n const normalizedChannelName = channel[0] === '/' ? channel : `/${channel}`;\n const publishOptions = {\n ...providerOptions,\n query: normalizedChannelName,\n variables: (0, utils_1.serializeEvents)(event),\n authToken: options?.authToken,\n };\n const abortController = new AbortController();\n const res = await (0, appsyncRequest_1.appsyncRequest)(core_1.Amplify, publishOptions, {}, abortController);\n if (res.failed?.length > 0) {\n return res.failed;\n }\n}\nexports.post = post;\n/**\n * @experimental API may change in future versions\n *\n * Close WebSocket connection, disconnect listeners and reconnect observers\n *\n * @example\n * await events.closeAll()\n *\n * @returns void on success\n * @throws on error\n */\nasync function closeAll() {\n await AWSAppSyncEventsProvider_1.AppSyncEventProvider.close();\n}\nexports.closeAll = closeAll;\n"],"names":[],"mappings":"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"}
@@ -29,13 +29,12 @@ class AWSAppSyncEventProvider extends AWSWebSocketProvider {
29
29
  super.publish(options, customUserAgentDetails);
30
30
  }
31
31
  async _prepareSubscriptionPayload({ options, subscriptionId, customUserAgentDetails, additionalCustomHeaders, libraryConfigHeaders, publish, }) {
32
- const { appSyncGraphqlEndpoint, authenticationType, query, apiKey, region, variables, } = options;
32
+ const { appSyncGraphqlEndpoint, authenticationType, query, apiKey, region, } = options;
33
33
  // This will be needed for WS publish
34
- const data = {
35
- channel: query,
36
- events: [variables],
37
- };
38
- const serializedData = JSON.stringify(data);
34
+ // const data = {
35
+ // events: [variables],
36
+ // };
37
+ const serializedData = JSON.stringify({ channel: query });
39
38
  const headers = {
40
39
  ...(await awsRealTimeHeaderBasedAuth({
41
40
  apiKey,
@@ -54,18 +53,18 @@ class AWSAppSyncEventProvider extends AWSWebSocketProvider {
54
53
  const subscriptionMessage = {
55
54
  id: subscriptionId,
56
55
  channel: query,
57
- events: [JSON.stringify(variables)],
56
+ // events: [JSON.stringify(variables)],
58
57
  authorization: {
59
58
  ...headers,
60
59
  },
61
- payload: {
62
- events: serializedData,
63
- extensions: {
64
- authorization: {
65
- ...headers,
66
- },
67
- },
68
- },
60
+ // payload: {
61
+ // events: serializedData,
62
+ // extensions: {
63
+ // authorization: {
64
+ // ...headers,
65
+ // },
66
+ // },
67
+ // },
69
68
  type: publish
70
69
  ? MESSAGE_TYPES.EVENT_PUBLISH
71
70
  : MESSAGE_TYPES.EVENT_SUBSCRIBE,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/Providers/AWSAppSyncEventsProvider/index.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { USER_AGENT_HEADER, getAmplifyUserAgent, } from '@aws-amplify/core/internals/utils';\nimport { DEFAULT_KEEP_ALIVE_TIMEOUT, MESSAGE_TYPES } from '../constants';\nimport { AWSWebSocketProvider } from '../AWSWebSocketProvider';\nimport { awsRealTimeHeaderBasedAuth } from '../AWSWebSocketProvider/authHeaders';\nconst PROVIDER_NAME = 'AWSAppSyncEventsProvider';\nconst WS_PROTOCOL_NAME = 'aws-appsync-event-ws';\nconst CONNECT_URI = ''; // events does not expect a connect uri\nexport class AWSAppSyncEventProvider extends AWSWebSocketProvider {\n constructor() {\n super({\n providerName: PROVIDER_NAME,\n wsProtocolName: WS_PROTOCOL_NAME,\n connectUri: CONNECT_URI,\n });\n }\n getProviderName() {\n return PROVIDER_NAME;\n }\n async connect(options) {\n super.connect(options);\n }\n subscribe(options, customUserAgentDetails) {\n return super.subscribe(options, customUserAgentDetails).pipe();\n }\n async publish(options, customUserAgentDetails) {\n super.publish(options, customUserAgentDetails);\n }\n async _prepareSubscriptionPayload({ options, subscriptionId, customUserAgentDetails, additionalCustomHeaders, libraryConfigHeaders, publish, }) {\n const { appSyncGraphqlEndpoint, authenticationType, query, apiKey, region, variables, } = options;\n // This will be needed for WS publish\n const data = {\n channel: query,\n events: [variables],\n };\n const serializedData = JSON.stringify(data);\n const headers = {\n ...(await awsRealTimeHeaderBasedAuth({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n payload: serializedData,\n canonicalUri: '',\n region,\n additionalCustomHeaders,\n })),\n ...libraryConfigHeaders,\n ...additionalCustomHeaders,\n [USER_AGENT_HEADER]: getAmplifyUserAgent(customUserAgentDetails),\n };\n // Commented out code will be needed for WS publish\n const subscriptionMessage = {\n id: subscriptionId,\n channel: query,\n events: [JSON.stringify(variables)],\n authorization: {\n ...headers,\n },\n payload: {\n events: serializedData,\n extensions: {\n authorization: {\n ...headers,\n },\n },\n },\n type: publish\n ? MESSAGE_TYPES.EVENT_PUBLISH\n : MESSAGE_TYPES.EVENT_SUBSCRIBE,\n };\n const serializedSubscriptionMessage = JSON.stringify(subscriptionMessage);\n return serializedSubscriptionMessage;\n }\n _handleSubscriptionData(message) {\n this.logger.debug(`subscription message from AWS AppSync Events: ${message.data}`);\n const { id = '', event: payload, type, } = JSON.parse(String(message.data));\n const { observer = null, query = '', variables = {}, } = this.subscriptionObserverMap.get(id) || {};\n this.logger.debug({ id, observer, query, variables });\n if (type === MESSAGE_TYPES.DATA && payload) {\n const deserializedEvent = JSON.parse(payload);\n if (observer) {\n observer.next({ id, type, event: deserializedEvent });\n }\n else {\n this.logger.debug(`observer not found for id: ${id}`);\n }\n return [true, { id, type, payload: deserializedEvent }];\n }\n return [false, { id, type, payload }];\n }\n _unsubscribeMessage(subscriptionId) {\n return {\n id: subscriptionId,\n type: MESSAGE_TYPES.EVENT_STOP,\n };\n }\n _extractConnectionTimeout(data) {\n const { connectionTimeoutMs = DEFAULT_KEEP_ALIVE_TIMEOUT } = data;\n return connectionTimeoutMs;\n }\n _extractErrorCodeAndType(data) {\n const { errors: [{ errorType = '', errorCode = 0 } = {}] = [] } = data;\n return { errorCode, errorType };\n }\n}\nexport const AppSyncEventProvider = new AWSAppSyncEventProvider();\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/Providers/AWSAppSyncEventsProvider/index.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { USER_AGENT_HEADER, getAmplifyUserAgent, } from '@aws-amplify/core/internals/utils';\nimport { DEFAULT_KEEP_ALIVE_TIMEOUT, MESSAGE_TYPES } from '../constants';\nimport { AWSWebSocketProvider } from '../AWSWebSocketProvider';\nimport { awsRealTimeHeaderBasedAuth } from '../AWSWebSocketProvider/authHeaders';\nconst PROVIDER_NAME = 'AWSAppSyncEventsProvider';\nconst WS_PROTOCOL_NAME = 'aws-appsync-event-ws';\nconst CONNECT_URI = ''; // events does not expect a connect uri\nexport class AWSAppSyncEventProvider extends AWSWebSocketProvider {\n constructor() {\n super({\n providerName: PROVIDER_NAME,\n wsProtocolName: WS_PROTOCOL_NAME,\n connectUri: CONNECT_URI,\n });\n }\n getProviderName() {\n return PROVIDER_NAME;\n }\n async connect(options) {\n super.connect(options);\n }\n subscribe(options, customUserAgentDetails) {\n return super.subscribe(options, customUserAgentDetails).pipe();\n }\n async publish(options, customUserAgentDetails) {\n super.publish(options, customUserAgentDetails);\n }\n async _prepareSubscriptionPayload({ options, subscriptionId, customUserAgentDetails, additionalCustomHeaders, libraryConfigHeaders, publish, }) {\n const { appSyncGraphqlEndpoint, authenticationType, query, apiKey, region, } = options;\n // This will be needed for WS publish\n // const data = {\n // \tevents: [variables],\n // };\n const serializedData = JSON.stringify({ channel: query });\n const headers = {\n ...(await awsRealTimeHeaderBasedAuth({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n payload: serializedData,\n canonicalUri: '',\n region,\n additionalCustomHeaders,\n })),\n ...libraryConfigHeaders,\n ...additionalCustomHeaders,\n [USER_AGENT_HEADER]: getAmplifyUserAgent(customUserAgentDetails),\n };\n // Commented out code will be needed for WS publish\n const subscriptionMessage = {\n id: subscriptionId,\n channel: query,\n // events: [JSON.stringify(variables)],\n authorization: {\n ...headers,\n },\n // payload: {\n // \tevents: serializedData,\n // \textensions: {\n // \t\tauthorization: {\n // \t\t\t...headers,\n // \t\t},\n // \t},\n // },\n type: publish\n ? MESSAGE_TYPES.EVENT_PUBLISH\n : MESSAGE_TYPES.EVENT_SUBSCRIBE,\n };\n const serializedSubscriptionMessage = JSON.stringify(subscriptionMessage);\n return serializedSubscriptionMessage;\n }\n _handleSubscriptionData(message) {\n this.logger.debug(`subscription message from AWS AppSync Events: ${message.data}`);\n const { id = '', event: payload, type, } = JSON.parse(String(message.data));\n const { observer = null, query = '', variables = {}, } = this.subscriptionObserverMap.get(id) || {};\n this.logger.debug({ id, observer, query, variables });\n if (type === MESSAGE_TYPES.DATA && payload) {\n const deserializedEvent = JSON.parse(payload);\n if (observer) {\n observer.next({ id, type, event: deserializedEvent });\n }\n else {\n this.logger.debug(`observer not found for id: ${id}`);\n }\n return [true, { id, type, payload: deserializedEvent }];\n }\n return [false, { id, type, payload }];\n }\n _unsubscribeMessage(subscriptionId) {\n return {\n id: subscriptionId,\n type: MESSAGE_TYPES.EVENT_STOP,\n };\n }\n _extractConnectionTimeout(data) {\n const { connectionTimeoutMs = DEFAULT_KEEP_ALIVE_TIMEOUT } = data;\n return connectionTimeoutMs;\n }\n _extractErrorCodeAndType(data) {\n const { errors: [{ errorType = '', errorCode = 0 } = {}] = [] } = data;\n return { errorCode, errorType };\n }\n}\nexport const AppSyncEventProvider = new AWSAppSyncEventProvider();\n"],"names":[],"mappings":"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"}
@@ -167,47 +167,23 @@ class AWSWebSocketProvider {
167
167
  });
168
168
  return new Promise((resolve, reject) => {
169
169
  if (this.awsRealTimeSocket) {
170
- const timeoutId = setTimeout(() => {
171
- cleanup();
172
- reject(new Error('Publish operation timed out'));
173
- }, 30000); // 30 seconds timeout
174
170
  const publishListener = (event) => {
175
171
  const data = JSON.parse(event.data);
176
172
  if (data.id === subscriptionId && data.type === 'publish_success') {
177
173
  this.awsRealTimeSocket &&
178
174
  this.awsRealTimeSocket.removeEventListener('message', publishListener);
179
- cleanup();
180
175
  resolve();
181
176
  }
182
- if (data.erroredEvents && data.erroredEvents.length > 0) {
183
- // TODO: handle errors
184
- const errors = data.erroredEvents.map((errorEvent) => errorEvent.error);
185
- cleanup();
186
- reject(new Error(`Publish errors: ${errors.join(', ')}`));
187
- }
188
- };
189
- const errorListener = (error) => {
190
- cleanup();
191
- reject(new Error(`WebSocket error: ${error}`));
192
- };
193
- const closeListener = () => {
194
- cleanup();
195
- reject(new Error('WebSocket is closed'));
196
- };
197
- const cleanup = () => {
198
- clearTimeout(timeoutId);
199
- this.awsRealTimeSocket?.removeEventListener('message', publishListener);
200
- this.awsRealTimeSocket?.removeEventListener('error', errorListener);
201
- this.awsRealTimeSocket?.removeEventListener('close', closeListener);
177
+ if (data.erroredEvents && data.erroredEvents.length > 0) ;
202
178
  };
203
179
  this.awsRealTimeSocket.addEventListener('message', publishListener);
204
- this.awsRealTimeSocket.addEventListener('error', errorListener);
205
- this.awsRealTimeSocket.addEventListener('close', closeListener);
180
+ this.awsRealTimeSocket.addEventListener('close', () => {
181
+ reject(new Error('WebSocket is closed'));
182
+ });
183
+ //
184
+ // this.awsRealTimeSocket.addEventListener('error', publishListener);
206
185
  this.awsRealTimeSocket.send(serializedSubscriptionMessage);
207
186
  }
208
- else {
209
- reject(new Error('WebSocket is not connected'));
210
- }
211
187
  });
212
188
  }
213
189
  async _cleanupSubscription(subscriptionId, reconnectSubscription) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/Providers/AWSWebSocketProvider/index.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Observable } from 'rxjs';\nimport { GraphQLError } from 'graphql';\nimport { ConsoleLogger, Hub } from '@aws-amplify/core';\nimport { NonRetryableError, amplifyUuid, base64Encoder, isNonRetryableError, jitteredExponentialRetry, } from '@aws-amplify/core/internals/utils';\nimport { CONTROL_MSG, ConnectionState, } from '../../types/PubSub';\nimport { AMPLIFY_SYMBOL, CONNECTION_INIT_TIMEOUT, CONNECTION_STATE_CHANGE, DEFAULT_KEEP_ALIVE_ALERT_TIMEOUT, DEFAULT_KEEP_ALIVE_HEARTBEAT_TIMEOUT, MAX_DELAY_MS, MESSAGE_TYPES, NON_RETRYABLE_CODES, NON_RETRYABLE_ERROR_TYPES, SOCKET_STATUS, START_ACK_TIMEOUT, SUBSCRIPTION_STATUS, } from '../constants';\nimport { CONNECTION_CHANGE, ConnectionStateMonitor, } from '../../utils/ConnectionStateMonitor';\nimport { ReconnectEvent, ReconnectionMonitor, } from '../../utils/ReconnectionMonitor';\nimport { additionalHeadersFromOptions, queryParamsFromCustomHeaders, realtimeUrlWithQueryString, } from './appsyncUrl';\nimport { awsRealTimeHeaderBasedAuth } from './authHeaders';\nconst dispatchApiEvent = (payload) => {\n Hub.dispatch('api', payload, 'PubSub', AMPLIFY_SYMBOL);\n};\nexport class AWSWebSocketProvider {\n constructor(args) {\n this.subscriptionObserverMap = new Map();\n this.socketStatus = SOCKET_STATUS.CLOSED;\n this.keepAliveTimestamp = Date.now();\n this.promiseArray = [];\n this.connectionStateMonitor = new ConnectionStateMonitor();\n this.reconnectionMonitor = new ReconnectionMonitor();\n /**\n * Open WebSocket connection & perform handshake\n * Ref: https://docs.aws.amazon.com/appsync/latest/devguide/real-time-websocket-client.html#appsynclong-real-time-websocket-client-implementation-guide-for-graphql-subscriptions\n *\n * @param subprotocol -\n */\n this._establishConnection = async (awsRealTimeUrl, subprotocol) => {\n this.logger.debug(`Establishing WebSocket connection to ${awsRealTimeUrl}`);\n try {\n await this._openConnection(awsRealTimeUrl, subprotocol);\n await this._initiateHandshake();\n }\n catch (err) {\n const { errorType, errorCode } = err;\n if (NON_RETRYABLE_CODES.includes(errorCode) ||\n // Event API does not currently return `errorCode`. This may change in the future.\n // For now fall back to also checking known non-retryable error types\n NON_RETRYABLE_ERROR_TYPES.includes(errorType)) {\n throw new NonRetryableError(errorType);\n }\n else if (errorType) {\n throw new Error(errorType);\n }\n else {\n throw err;\n }\n }\n };\n this.logger = new ConsoleLogger(args.providerName);\n this.wsProtocolName = args.wsProtocolName;\n this.wsConnectUri = args.connectUri;\n this.connectionStateMonitorSubscription =\n this._startConnectionStateMonitoring();\n }\n /**\n * Mark the socket closed and release all active listeners\n */\n close() {\n // Mark the socket closed both in status and the connection monitor\n this.socketStatus = SOCKET_STATUS.CLOSED;\n this.connectionStateMonitor.record(CONNECTION_CHANGE.CONNECTION_FAILED);\n // Turn off the subscription monitor Hub publishing\n this.connectionStateMonitorSubscription.unsubscribe();\n // Complete all reconnect observers\n this.reconnectionMonitor.close();\n return new Promise((resolve, reject) => {\n if (this.awsRealTimeSocket) {\n this.awsRealTimeSocket.onclose = (_) => {\n this._closeSocket();\n this.subscriptionObserverMap = new Map();\n this.awsRealTimeSocket = undefined;\n resolve();\n };\n this.awsRealTimeSocket.onerror = (err) => {\n reject(err);\n };\n this.awsRealTimeSocket.close();\n }\n else {\n resolve();\n }\n });\n }\n subscribe(options, customUserAgentDetails) {\n return new Observable(observer => {\n if (!options?.appSyncGraphqlEndpoint) {\n observer.error({\n errors: [\n {\n ...new GraphQLError(`Subscribe only available for AWS AppSync endpoint`),\n },\n ],\n });\n observer.complete();\n return;\n }\n let subscriptionStartInProgress = false;\n const subscriptionId = amplifyUuid();\n const startSubscription = () => {\n if (!subscriptionStartInProgress) {\n subscriptionStartInProgress = true;\n this._startSubscriptionWithAWSAppSyncRealTime({\n options,\n observer,\n subscriptionId,\n customUserAgentDetails,\n })\n .catch(err => {\n this.logger.debug(`${CONTROL_MSG.REALTIME_SUBSCRIPTION_INIT_ERROR}: ${err}`);\n this._closeSocket();\n })\n .finally(() => {\n subscriptionStartInProgress = false;\n });\n }\n };\n // Add an observable to the reconnection list to manage reconnection for this subscription\n const reconnectSubscription = new Observable(reconnectSubscriptionObserver => {\n this.reconnectionMonitor.addObserver(reconnectSubscriptionObserver);\n }).subscribe(() => {\n startSubscription();\n });\n startSubscription();\n return async () => {\n await this._cleanupSubscription(subscriptionId, reconnectSubscription);\n };\n });\n }\n async connect(options) {\n if (this.socketStatus === SOCKET_STATUS.READY) {\n return;\n }\n await this._connectWebSocket(options);\n }\n async publish(options, customUserAgentDetails) {\n if (this.socketStatus !== SOCKET_STATUS.READY) {\n throw new Error('Subscription has not been initialized');\n }\n return this._publishMessage(options, customUserAgentDetails);\n }\n async _connectWebSocket(options) {\n const { apiKey, appSyncGraphqlEndpoint, authenticationType, region } = options;\n const { additionalCustomHeaders } = await additionalHeadersFromOptions(options);\n this.connectionStateMonitor.record(CONNECTION_CHANGE.OPENING_CONNECTION);\n await this._initializeWebSocketConnection({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n region,\n additionalCustomHeaders,\n });\n }\n async _publishMessage(options, customUserAgentDetails) {\n const subscriptionId = amplifyUuid();\n const { additionalCustomHeaders, libraryConfigHeaders } = await additionalHeadersFromOptions(options);\n const serializedSubscriptionMessage = await this._prepareSubscriptionPayload({\n options,\n subscriptionId,\n customUserAgentDetails,\n additionalCustomHeaders,\n libraryConfigHeaders,\n publish: true,\n });\n return new Promise((resolve, reject) => {\n if (this.awsRealTimeSocket) {\n const timeoutId = setTimeout(() => {\n cleanup();\n reject(new Error('Publish operation timed out'));\n }, 30000); // 30 seconds timeout\n const publishListener = (event) => {\n const data = JSON.parse(event.data);\n if (data.id === subscriptionId && data.type === 'publish_success') {\n this.awsRealTimeSocket &&\n this.awsRealTimeSocket.removeEventListener('message', publishListener);\n cleanup();\n resolve();\n }\n if (data.erroredEvents && data.erroredEvents.length > 0) {\n // TODO: handle errors\n const errors = data.erroredEvents.map((errorEvent) => errorEvent.error);\n cleanup();\n reject(new Error(`Publish errors: ${errors.join(', ')}`));\n }\n };\n const errorListener = (error) => {\n cleanup();\n reject(new Error(`WebSocket error: ${error}`));\n };\n const closeListener = () => {\n cleanup();\n reject(new Error('WebSocket is closed'));\n };\n const cleanup = () => {\n clearTimeout(timeoutId);\n this.awsRealTimeSocket?.removeEventListener('message', publishListener);\n this.awsRealTimeSocket?.removeEventListener('error', errorListener);\n this.awsRealTimeSocket?.removeEventListener('close', closeListener);\n };\n this.awsRealTimeSocket.addEventListener('message', publishListener);\n this.awsRealTimeSocket.addEventListener('error', errorListener);\n this.awsRealTimeSocket.addEventListener('close', closeListener);\n this.awsRealTimeSocket.send(serializedSubscriptionMessage);\n }\n else {\n reject(new Error('WebSocket is not connected'));\n }\n });\n }\n async _cleanupSubscription(subscriptionId, reconnectSubscription) {\n // Cleanup reconnection subscription\n reconnectSubscription?.unsubscribe();\n // Cleanup after unsubscribing or observer.complete was called after _startSubscriptionWithAWSAppSyncRealTime\n try {\n // Waiting that subscription has been connected before trying to unsubscribe\n await this._waitForSubscriptionToBeConnected(subscriptionId);\n const { subscriptionState } = this.subscriptionObserverMap.get(subscriptionId) || {};\n if (!subscriptionState) {\n // subscription already unsubscribed\n return;\n }\n if (subscriptionState === SUBSCRIPTION_STATUS.CONNECTED) {\n this._sendUnsubscriptionMessage(subscriptionId);\n }\n else {\n throw new Error('Subscription never connected');\n }\n }\n catch (err) {\n this.logger.debug(`Error while unsubscribing ${err}`);\n }\n finally {\n this._removeSubscriptionObserver(subscriptionId);\n }\n }\n // Monitor the connection state and pass changes along to Hub\n _startConnectionStateMonitoring() {\n return this.connectionStateMonitor.connectionStateObservable.subscribe(connectionState => {\n dispatchApiEvent({\n event: CONNECTION_STATE_CHANGE,\n data: {\n provider: this,\n connectionState,\n },\n message: `Connection state is ${connectionState}`,\n });\n this.connectionState = connectionState;\n // Trigger START_RECONNECT when the connection is disrupted\n if (connectionState === ConnectionState.ConnectionDisrupted) {\n this.reconnectionMonitor.record(ReconnectEvent.START_RECONNECT);\n }\n // Trigger HALT_RECONNECT to halt reconnection attempts when the state is anything other than\n // ConnectionDisrupted or Connecting\n if ([\n ConnectionState.Connected,\n ConnectionState.ConnectedPendingDisconnect,\n ConnectionState.ConnectedPendingKeepAlive,\n ConnectionState.ConnectedPendingNetwork,\n ConnectionState.ConnectionDisruptedPendingNetwork,\n ConnectionState.Disconnected,\n ].includes(connectionState)) {\n this.reconnectionMonitor.record(ReconnectEvent.HALT_RECONNECT);\n }\n });\n }\n async _startSubscriptionWithAWSAppSyncRealTime({ options, observer, subscriptionId, customUserAgentDetails, }) {\n const { query, variables } = options;\n const { additionalCustomHeaders, libraryConfigHeaders } = await additionalHeadersFromOptions(options);\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n query: query ?? '',\n variables: variables ?? {},\n subscriptionState: SUBSCRIPTION_STATUS.PENDING,\n startAckTimeoutId: undefined,\n });\n const serializedSubscriptionMessage = await this._prepareSubscriptionPayload({\n options,\n subscriptionId,\n customUserAgentDetails,\n additionalCustomHeaders,\n libraryConfigHeaders,\n });\n try {\n await this._connectWebSocket(options);\n }\n catch (err) {\n this._logStartSubscriptionError(subscriptionId, observer, err);\n return;\n }\n // Potential race condition can occur when unsubscribe is called during _initializeWebSocketConnection.\n // E.g.unsubscribe gets invoked prior to finishing WebSocket handshake or START_ACK.\n // Both subscriptionFailedCallback and subscriptionReadyCallback are used to synchronized this.\n const { subscriptionFailedCallback, subscriptionReadyCallback } = this.subscriptionObserverMap.get(subscriptionId) ?? {};\n // This must be done before sending the message in order to be listening immediately\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n subscriptionState: SUBSCRIPTION_STATUS.PENDING,\n query: query ?? '',\n variables: variables ?? {},\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n startAckTimeoutId: setTimeout(() => {\n this._timeoutStartSubscriptionAck(subscriptionId);\n }, START_ACK_TIMEOUT),\n });\n if (this.awsRealTimeSocket) {\n this.awsRealTimeSocket.send(serializedSubscriptionMessage);\n }\n }\n // Log logic for start subscription failures\n _logStartSubscriptionError(subscriptionId, observer, err) {\n this.logger.debug({ err });\n const message = String(err.message ?? '');\n // Resolving to give the state observer time to propogate the update\n this._closeSocket();\n // Capture the error only when the network didn't cause disruption\n if (this.connectionState !== ConnectionState.ConnectionDisruptedPendingNetwork) {\n // When the error is non-retriable, error out the observable\n if (isNonRetryableError(err)) {\n observer.error({\n errors: [\n {\n ...new GraphQLError(`${CONTROL_MSG.CONNECTION_FAILED}: ${message}`),\n },\n ],\n });\n }\n else {\n this.logger.debug(`${CONTROL_MSG.CONNECTION_FAILED}: ${message}`);\n }\n const { subscriptionFailedCallback } = this.subscriptionObserverMap.get(subscriptionId) || {};\n // Notify concurrent unsubscription\n if (typeof subscriptionFailedCallback === 'function') {\n subscriptionFailedCallback();\n }\n }\n }\n // Waiting that subscription has been connected before trying to unsubscribe\n async _waitForSubscriptionToBeConnected(subscriptionId) {\n const subscriptionObserver = this.subscriptionObserverMap.get(subscriptionId);\n if (subscriptionObserver) {\n const { subscriptionState } = subscriptionObserver;\n // This in case unsubscribe is invoked before sending start subscription message\n if (subscriptionState === SUBSCRIPTION_STATUS.PENDING) {\n return new Promise((resolve, reject) => {\n const { observer, subscriptionState: observedSubscriptionState, variables, query, } = subscriptionObserver;\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n subscriptionState: observedSubscriptionState,\n variables,\n query,\n subscriptionReadyCallback: resolve,\n subscriptionFailedCallback: reject,\n });\n });\n }\n }\n }\n _sendUnsubscriptionMessage(subscriptionId) {\n try {\n if (this.awsRealTimeSocket &&\n this.awsRealTimeSocket.readyState === WebSocket.OPEN &&\n this.socketStatus === SOCKET_STATUS.READY) {\n // Preparing unsubscribe message to stop receiving messages for that subscription\n const unsubscribeMessage = this._unsubscribeMessage(subscriptionId);\n const stringToAWSRealTime = JSON.stringify(unsubscribeMessage);\n this.awsRealTimeSocket.send(stringToAWSRealTime);\n }\n }\n catch (err) {\n // If GQL_STOP is not sent because of disconnection issue, then there is nothing the client can do\n this.logger.debug({ err });\n }\n }\n _removeSubscriptionObserver(subscriptionId) {\n this.subscriptionObserverMap.delete(subscriptionId);\n // Verifying 1000ms after removing subscription in case there are new subscription unmount/mount\n setTimeout(this._closeSocketIfRequired.bind(this), 1000);\n }\n _closeSocketIfRequired() {\n if (this.subscriptionObserverMap.size > 0) {\n // Active subscriptions on the WebSocket\n return;\n }\n if (!this.awsRealTimeSocket) {\n this.socketStatus = SOCKET_STATUS.CLOSED;\n return;\n }\n this.connectionStateMonitor.record(CONNECTION_CHANGE.CLOSING_CONNECTION);\n if (this.awsRealTimeSocket.bufferedAmount > 0) {\n // Still data on the WebSocket\n setTimeout(this._closeSocketIfRequired.bind(this), 1000);\n }\n else {\n this.logger.debug('closing WebSocket...');\n const tempSocket = this.awsRealTimeSocket;\n // Cleaning callbacks to avoid race condition, socket still exists\n tempSocket.onclose = null;\n tempSocket.onerror = null;\n tempSocket.close(1000);\n this.awsRealTimeSocket = undefined;\n this.socketStatus = SOCKET_STATUS.CLOSED;\n this._closeSocket();\n }\n }\n maintainKeepAlive() {\n this.keepAliveTimestamp = Date.now();\n }\n keepAliveHeartbeat(connectionTimeoutMs) {\n const currentTime = Date.now();\n // Check for missed KA message\n if (currentTime - this.keepAliveTimestamp >\n DEFAULT_KEEP_ALIVE_ALERT_TIMEOUT) {\n this.connectionStateMonitor.record(CONNECTION_CHANGE.KEEP_ALIVE_MISSED);\n }\n else {\n this.connectionStateMonitor.record(CONNECTION_CHANGE.KEEP_ALIVE);\n }\n // Recognize we are disconnected if we haven't seen messages in the keep alive timeout period\n if (currentTime - this.keepAliveTimestamp > connectionTimeoutMs) {\n this._errorDisconnect(CONTROL_MSG.TIMEOUT_DISCONNECT);\n }\n }\n _handleIncomingSubscriptionMessage(message) {\n if (typeof message.data !== 'string') {\n return;\n }\n const [isData, data] = this._handleSubscriptionData(message);\n if (isData) {\n this.maintainKeepAlive();\n return;\n }\n const { type, id, payload } = data;\n const { observer = null, query = '', variables = {}, startAckTimeoutId, subscriptionReadyCallback, subscriptionFailedCallback, } = this.subscriptionObserverMap.get(id) || {};\n if (type === MESSAGE_TYPES.GQL_START_ACK ||\n type === MESSAGE_TYPES.EVENT_SUBSCRIBE_ACK) {\n this.logger.debug(`subscription ready for ${JSON.stringify({ query, variables })}`);\n if (typeof subscriptionReadyCallback === 'function') {\n subscriptionReadyCallback();\n }\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n dispatchApiEvent({\n event: CONTROL_MSG.SUBSCRIPTION_ACK,\n data: { query, variables },\n message: 'Connection established for subscription',\n });\n const subscriptionState = SUBSCRIPTION_STATUS.CONNECTED;\n if (observer) {\n this.subscriptionObserverMap.set(id, {\n observer,\n query,\n variables,\n startAckTimeoutId: undefined,\n subscriptionState,\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n });\n }\n this.connectionStateMonitor.record(CONNECTION_CHANGE.CONNECTION_ESTABLISHED);\n return;\n }\n if (type === MESSAGE_TYPES.GQL_CONNECTION_KEEP_ALIVE) {\n this.maintainKeepAlive();\n return;\n }\n if (type === MESSAGE_TYPES.GQL_ERROR) {\n const subscriptionState = SUBSCRIPTION_STATUS.FAILED;\n if (observer) {\n this.subscriptionObserverMap.set(id, {\n observer,\n query,\n variables,\n startAckTimeoutId,\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n subscriptionState,\n });\n this.logger.debug(`${CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload ?? data)}`);\n observer.error({\n errors: [\n {\n ...new GraphQLError(`${CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload ?? data)}`),\n },\n ],\n });\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n if (typeof subscriptionFailedCallback === 'function') {\n subscriptionFailedCallback();\n }\n }\n }\n }\n _errorDisconnect(msg) {\n this.logger.debug(`Disconnect error: ${msg}`);\n if (this.awsRealTimeSocket) {\n this._closeSocket();\n this.awsRealTimeSocket.close();\n }\n this.socketStatus = SOCKET_STATUS.CLOSED;\n }\n _closeSocket() {\n if (this.keepAliveHeartbeatIntervalId) {\n clearInterval(this.keepAliveHeartbeatIntervalId);\n this.keepAliveHeartbeatIntervalId = undefined;\n }\n this.connectionStateMonitor.record(CONNECTION_CHANGE.CLOSED);\n }\n _timeoutStartSubscriptionAck(subscriptionId) {\n const subscriptionObserver = this.subscriptionObserverMap.get(subscriptionId);\n if (subscriptionObserver) {\n const { observer, query, variables } = subscriptionObserver;\n if (!observer) {\n return;\n }\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n query,\n variables,\n subscriptionState: SUBSCRIPTION_STATUS.FAILED,\n });\n this._closeSocket();\n this.logger.debug('timeoutStartSubscription', JSON.stringify({ query, variables }));\n }\n }\n _initializeWebSocketConnection({ appSyncGraphqlEndpoint, authenticationType, apiKey, region, additionalCustomHeaders, }) {\n if (this.socketStatus === SOCKET_STATUS.READY) {\n return;\n }\n // TODO(Eslint): refactor to now use async function as the promise executor\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n this.promiseArray.push({ res: resolve, rej: reject });\n if (this.socketStatus === SOCKET_STATUS.CLOSED) {\n try {\n this.socketStatus = SOCKET_STATUS.CONNECTING;\n // Empty payload on connect\n const payloadString = '{}';\n const authHeader = await awsRealTimeHeaderBasedAuth({\n authenticationType,\n payload: payloadString,\n canonicalUri: this.wsConnectUri,\n apiKey,\n appSyncGraphqlEndpoint,\n region,\n additionalCustomHeaders,\n });\n const headerString = authHeader ? JSON.stringify(authHeader) : '';\n // base64url-encoded string\n const encodedHeader = base64Encoder.convert(headerString, {\n urlSafe: true,\n skipPadding: true,\n });\n const authTokenSubprotocol = `header-${encodedHeader}`;\n const queryParams = queryParamsFromCustomHeaders(additionalCustomHeaders);\n const awsRealTimeUrl = realtimeUrlWithQueryString(appSyncGraphqlEndpoint, queryParams);\n await this._establishRetryableConnection(awsRealTimeUrl, authTokenSubprotocol);\n this.promiseArray.forEach(({ res }) => {\n this.logger.debug('Notifying connection successful');\n res();\n });\n this.socketStatus = SOCKET_STATUS.READY;\n this.promiseArray = [];\n }\n catch (err) {\n this.logger.debug('Connection exited with', err);\n this.promiseArray.forEach(({ rej }) => {\n rej(err);\n });\n this.promiseArray = [];\n if (this.awsRealTimeSocket &&\n this.awsRealTimeSocket.readyState === WebSocket.OPEN) {\n this.awsRealTimeSocket.close(3001);\n }\n this.awsRealTimeSocket = undefined;\n this.socketStatus = SOCKET_STATUS.CLOSED;\n }\n }\n });\n }\n async _establishRetryableConnection(awsRealTimeUrl, subprotocol) {\n this.logger.debug(`Establishing retryable connection`);\n await jitteredExponentialRetry(this._establishConnection.bind(this), [awsRealTimeUrl, subprotocol], MAX_DELAY_MS);\n }\n async _openConnection(awsRealTimeUrl, subprotocol) {\n return new Promise((resolve, reject) => {\n const newSocket = this._getNewWebSocket(awsRealTimeUrl, [\n this.wsProtocolName,\n subprotocol,\n ]);\n newSocket.onerror = () => {\n this.logger.debug(`WebSocket connection error`);\n };\n newSocket.onclose = () => {\n this._closeSocket();\n reject(new Error('Connection handshake error'));\n };\n newSocket.onopen = () => {\n this.awsRealTimeSocket = newSocket;\n resolve();\n };\n });\n }\n _getNewWebSocket(url, protocol) {\n return new WebSocket(url, protocol);\n }\n async _initiateHandshake() {\n return new Promise((resolve, reject) => {\n if (!this.awsRealTimeSocket) {\n reject(new Error('awsRealTimeSocket undefined'));\n return;\n }\n let ackOk = false;\n this.awsRealTimeSocket.onerror = error => {\n this.logger.debug(`WebSocket error ${JSON.stringify(error)}`);\n };\n this.awsRealTimeSocket.onclose = event => {\n this.logger.debug(`WebSocket closed ${event.reason}`);\n this._closeSocket();\n reject(new Error(JSON.stringify(event)));\n };\n this.awsRealTimeSocket.onmessage = (message) => {\n if (typeof message.data !== 'string') {\n return;\n }\n this.logger.debug(`subscription message from AWS AppSyncRealTime: ${message.data} `);\n const data = JSON.parse(message.data);\n const { type } = data;\n const connectionTimeoutMs = this._extractConnectionTimeout(data);\n if (type === MESSAGE_TYPES.GQL_CONNECTION_ACK) {\n ackOk = true;\n this._registerWebsocketHandlers(connectionTimeoutMs);\n resolve('Connected to AWS AppSyncRealTime');\n return;\n }\n if (type === MESSAGE_TYPES.GQL_CONNECTION_ERROR) {\n const { errorType, errorCode } = this._extractErrorCodeAndType(data);\n // TODO(Eslint): refactor to reject an Error object instead of a plain object\n // eslint-disable-next-line prefer-promise-reject-errors\n reject({ errorType, errorCode });\n }\n };\n const gqlInit = {\n type: MESSAGE_TYPES.GQL_CONNECTION_INIT,\n };\n this.awsRealTimeSocket.send(JSON.stringify(gqlInit));\n const checkAckOk = (targetAckOk) => {\n if (!targetAckOk) {\n this.connectionStateMonitor.record(CONNECTION_CHANGE.CONNECTION_FAILED);\n reject(new Error(`Connection timeout: ack from AWSAppSyncRealTime was not received after ${CONNECTION_INIT_TIMEOUT} ms`));\n }\n };\n setTimeout(() => {\n checkAckOk(ackOk);\n }, CONNECTION_INIT_TIMEOUT);\n });\n }\n _registerWebsocketHandlers(connectionTimeoutMs) {\n if (!this.awsRealTimeSocket) {\n return;\n }\n // Set up a keep alive heartbeat for this connection\n this.keepAliveHeartbeatIntervalId = setInterval(() => {\n this.keepAliveHeartbeat(connectionTimeoutMs);\n }, DEFAULT_KEEP_ALIVE_HEARTBEAT_TIMEOUT);\n this.awsRealTimeSocket.onmessage =\n this._handleIncomingSubscriptionMessage.bind(this);\n this.awsRealTimeSocket.onerror = err => {\n this.logger.debug(err);\n this._errorDisconnect(CONTROL_MSG.CONNECTION_CLOSED);\n };\n this.awsRealTimeSocket.onclose = event => {\n this.logger.debug(`WebSocket closed ${event.reason}`);\n this._closeSocket();\n this._errorDisconnect(CONTROL_MSG.CONNECTION_CLOSED);\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/Providers/AWSWebSocketProvider/index.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Observable } from 'rxjs';\nimport { GraphQLError } from 'graphql';\nimport { ConsoleLogger, Hub } from '@aws-amplify/core';\nimport { NonRetryableError, amplifyUuid, base64Encoder, isNonRetryableError, jitteredExponentialRetry, } from '@aws-amplify/core/internals/utils';\nimport { CONTROL_MSG, ConnectionState, } from '../../types/PubSub';\nimport { AMPLIFY_SYMBOL, CONNECTION_INIT_TIMEOUT, CONNECTION_STATE_CHANGE, DEFAULT_KEEP_ALIVE_ALERT_TIMEOUT, DEFAULT_KEEP_ALIVE_HEARTBEAT_TIMEOUT, MAX_DELAY_MS, MESSAGE_TYPES, NON_RETRYABLE_CODES, NON_RETRYABLE_ERROR_TYPES, SOCKET_STATUS, START_ACK_TIMEOUT, SUBSCRIPTION_STATUS, } from '../constants';\nimport { CONNECTION_CHANGE, ConnectionStateMonitor, } from '../../utils/ConnectionStateMonitor';\nimport { ReconnectEvent, ReconnectionMonitor, } from '../../utils/ReconnectionMonitor';\nimport { additionalHeadersFromOptions, queryParamsFromCustomHeaders, realtimeUrlWithQueryString, } from './appsyncUrl';\nimport { awsRealTimeHeaderBasedAuth } from './authHeaders';\nconst dispatchApiEvent = (payload) => {\n Hub.dispatch('api', payload, 'PubSub', AMPLIFY_SYMBOL);\n};\nexport class AWSWebSocketProvider {\n constructor(args) {\n this.subscriptionObserverMap = new Map();\n this.socketStatus = SOCKET_STATUS.CLOSED;\n this.keepAliveTimestamp = Date.now();\n this.promiseArray = [];\n this.connectionStateMonitor = new ConnectionStateMonitor();\n this.reconnectionMonitor = new ReconnectionMonitor();\n /**\n * Open WebSocket connection & perform handshake\n * Ref: https://docs.aws.amazon.com/appsync/latest/devguide/real-time-websocket-client.html#appsynclong-real-time-websocket-client-implementation-guide-for-graphql-subscriptions\n *\n * @param subprotocol -\n */\n this._establishConnection = async (awsRealTimeUrl, subprotocol) => {\n this.logger.debug(`Establishing WebSocket connection to ${awsRealTimeUrl}`);\n try {\n await this._openConnection(awsRealTimeUrl, subprotocol);\n await this._initiateHandshake();\n }\n catch (err) {\n const { errorType, errorCode } = err;\n if (NON_RETRYABLE_CODES.includes(errorCode) ||\n // Event API does not currently return `errorCode`. This may change in the future.\n // For now fall back to also checking known non-retryable error types\n NON_RETRYABLE_ERROR_TYPES.includes(errorType)) {\n throw new NonRetryableError(errorType);\n }\n else if (errorType) {\n throw new Error(errorType);\n }\n else {\n throw err;\n }\n }\n };\n this.logger = new ConsoleLogger(args.providerName);\n this.wsProtocolName = args.wsProtocolName;\n this.wsConnectUri = args.connectUri;\n this.connectionStateMonitorSubscription =\n this._startConnectionStateMonitoring();\n }\n /**\n * Mark the socket closed and release all active listeners\n */\n close() {\n // Mark the socket closed both in status and the connection monitor\n this.socketStatus = SOCKET_STATUS.CLOSED;\n this.connectionStateMonitor.record(CONNECTION_CHANGE.CONNECTION_FAILED);\n // Turn off the subscription monitor Hub publishing\n this.connectionStateMonitorSubscription.unsubscribe();\n // Complete all reconnect observers\n this.reconnectionMonitor.close();\n return new Promise((resolve, reject) => {\n if (this.awsRealTimeSocket) {\n this.awsRealTimeSocket.onclose = (_) => {\n this._closeSocket();\n this.subscriptionObserverMap = new Map();\n this.awsRealTimeSocket = undefined;\n resolve();\n };\n this.awsRealTimeSocket.onerror = (err) => {\n reject(err);\n };\n this.awsRealTimeSocket.close();\n }\n else {\n resolve();\n }\n });\n }\n subscribe(options, customUserAgentDetails) {\n return new Observable(observer => {\n if (!options?.appSyncGraphqlEndpoint) {\n observer.error({\n errors: [\n {\n ...new GraphQLError(`Subscribe only available for AWS AppSync endpoint`),\n },\n ],\n });\n observer.complete();\n return;\n }\n let subscriptionStartInProgress = false;\n const subscriptionId = amplifyUuid();\n const startSubscription = () => {\n if (!subscriptionStartInProgress) {\n subscriptionStartInProgress = true;\n this._startSubscriptionWithAWSAppSyncRealTime({\n options,\n observer,\n subscriptionId,\n customUserAgentDetails,\n })\n .catch(err => {\n this.logger.debug(`${CONTROL_MSG.REALTIME_SUBSCRIPTION_INIT_ERROR}: ${err}`);\n this._closeSocket();\n })\n .finally(() => {\n subscriptionStartInProgress = false;\n });\n }\n };\n // Add an observable to the reconnection list to manage reconnection for this subscription\n const reconnectSubscription = new Observable(reconnectSubscriptionObserver => {\n this.reconnectionMonitor.addObserver(reconnectSubscriptionObserver);\n }).subscribe(() => {\n startSubscription();\n });\n startSubscription();\n return async () => {\n await this._cleanupSubscription(subscriptionId, reconnectSubscription);\n };\n });\n }\n async connect(options) {\n if (this.socketStatus === SOCKET_STATUS.READY) {\n return;\n }\n await this._connectWebSocket(options);\n }\n async publish(options, customUserAgentDetails) {\n if (this.socketStatus !== SOCKET_STATUS.READY) {\n throw new Error('Subscription has not been initialized');\n }\n return this._publishMessage(options, customUserAgentDetails);\n }\n async _connectWebSocket(options) {\n const { apiKey, appSyncGraphqlEndpoint, authenticationType, region } = options;\n const { additionalCustomHeaders } = await additionalHeadersFromOptions(options);\n this.connectionStateMonitor.record(CONNECTION_CHANGE.OPENING_CONNECTION);\n await this._initializeWebSocketConnection({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n region,\n additionalCustomHeaders,\n });\n }\n async _publishMessage(options, customUserAgentDetails) {\n const subscriptionId = amplifyUuid();\n const { additionalCustomHeaders, libraryConfigHeaders } = await additionalHeadersFromOptions(options);\n const serializedSubscriptionMessage = await this._prepareSubscriptionPayload({\n options,\n subscriptionId,\n customUserAgentDetails,\n additionalCustomHeaders,\n libraryConfigHeaders,\n publish: true,\n });\n return new Promise((resolve, reject) => {\n if (this.awsRealTimeSocket) {\n const publishListener = (event) => {\n const data = JSON.parse(event.data);\n if (data.id === subscriptionId && data.type === 'publish_success') {\n this.awsRealTimeSocket &&\n this.awsRealTimeSocket.removeEventListener('message', publishListener);\n resolve();\n }\n if (data.erroredEvents && data.erroredEvents.length > 0) {\n // TODO: handle errors\n }\n };\n this.awsRealTimeSocket.addEventListener('message', publishListener);\n this.awsRealTimeSocket.addEventListener('close', () => {\n reject(new Error('WebSocket is closed'));\n });\n //\n // this.awsRealTimeSocket.addEventListener('error', publishListener);\n this.awsRealTimeSocket.send(serializedSubscriptionMessage);\n }\n });\n }\n async _cleanupSubscription(subscriptionId, reconnectSubscription) {\n // Cleanup reconnection subscription\n reconnectSubscription?.unsubscribe();\n // Cleanup after unsubscribing or observer.complete was called after _startSubscriptionWithAWSAppSyncRealTime\n try {\n // Waiting that subscription has been connected before trying to unsubscribe\n await this._waitForSubscriptionToBeConnected(subscriptionId);\n const { subscriptionState } = this.subscriptionObserverMap.get(subscriptionId) || {};\n if (!subscriptionState) {\n // subscription already unsubscribed\n return;\n }\n if (subscriptionState === SUBSCRIPTION_STATUS.CONNECTED) {\n this._sendUnsubscriptionMessage(subscriptionId);\n }\n else {\n throw new Error('Subscription never connected');\n }\n }\n catch (err) {\n this.logger.debug(`Error while unsubscribing ${err}`);\n }\n finally {\n this._removeSubscriptionObserver(subscriptionId);\n }\n }\n // Monitor the connection state and pass changes along to Hub\n _startConnectionStateMonitoring() {\n return this.connectionStateMonitor.connectionStateObservable.subscribe(connectionState => {\n dispatchApiEvent({\n event: CONNECTION_STATE_CHANGE,\n data: {\n provider: this,\n connectionState,\n },\n message: `Connection state is ${connectionState}`,\n });\n this.connectionState = connectionState;\n // Trigger START_RECONNECT when the connection is disrupted\n if (connectionState === ConnectionState.ConnectionDisrupted) {\n this.reconnectionMonitor.record(ReconnectEvent.START_RECONNECT);\n }\n // Trigger HALT_RECONNECT to halt reconnection attempts when the state is anything other than\n // ConnectionDisrupted or Connecting\n if ([\n ConnectionState.Connected,\n ConnectionState.ConnectedPendingDisconnect,\n ConnectionState.ConnectedPendingKeepAlive,\n ConnectionState.ConnectedPendingNetwork,\n ConnectionState.ConnectionDisruptedPendingNetwork,\n ConnectionState.Disconnected,\n ].includes(connectionState)) {\n this.reconnectionMonitor.record(ReconnectEvent.HALT_RECONNECT);\n }\n });\n }\n async _startSubscriptionWithAWSAppSyncRealTime({ options, observer, subscriptionId, customUserAgentDetails, }) {\n const { query, variables } = options;\n const { additionalCustomHeaders, libraryConfigHeaders } = await additionalHeadersFromOptions(options);\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n query: query ?? '',\n variables: variables ?? {},\n subscriptionState: SUBSCRIPTION_STATUS.PENDING,\n startAckTimeoutId: undefined,\n });\n const serializedSubscriptionMessage = await this._prepareSubscriptionPayload({\n options,\n subscriptionId,\n customUserAgentDetails,\n additionalCustomHeaders,\n libraryConfigHeaders,\n });\n try {\n await this._connectWebSocket(options);\n }\n catch (err) {\n this._logStartSubscriptionError(subscriptionId, observer, err);\n return;\n }\n // Potential race condition can occur when unsubscribe is called during _initializeWebSocketConnection.\n // E.g.unsubscribe gets invoked prior to finishing WebSocket handshake or START_ACK.\n // Both subscriptionFailedCallback and subscriptionReadyCallback are used to synchronized this.\n const { subscriptionFailedCallback, subscriptionReadyCallback } = this.subscriptionObserverMap.get(subscriptionId) ?? {};\n // This must be done before sending the message in order to be listening immediately\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n subscriptionState: SUBSCRIPTION_STATUS.PENDING,\n query: query ?? '',\n variables: variables ?? {},\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n startAckTimeoutId: setTimeout(() => {\n this._timeoutStartSubscriptionAck(subscriptionId);\n }, START_ACK_TIMEOUT),\n });\n if (this.awsRealTimeSocket) {\n this.awsRealTimeSocket.send(serializedSubscriptionMessage);\n }\n }\n // Log logic for start subscription failures\n _logStartSubscriptionError(subscriptionId, observer, err) {\n this.logger.debug({ err });\n const message = String(err.message ?? '');\n // Resolving to give the state observer time to propogate the update\n this._closeSocket();\n // Capture the error only when the network didn't cause disruption\n if (this.connectionState !== ConnectionState.ConnectionDisruptedPendingNetwork) {\n // When the error is non-retriable, error out the observable\n if (isNonRetryableError(err)) {\n observer.error({\n errors: [\n {\n ...new GraphQLError(`${CONTROL_MSG.CONNECTION_FAILED}: ${message}`),\n },\n ],\n });\n }\n else {\n this.logger.debug(`${CONTROL_MSG.CONNECTION_FAILED}: ${message}`);\n }\n const { subscriptionFailedCallback } = this.subscriptionObserverMap.get(subscriptionId) || {};\n // Notify concurrent unsubscription\n if (typeof subscriptionFailedCallback === 'function') {\n subscriptionFailedCallback();\n }\n }\n }\n // Waiting that subscription has been connected before trying to unsubscribe\n async _waitForSubscriptionToBeConnected(subscriptionId) {\n const subscriptionObserver = this.subscriptionObserverMap.get(subscriptionId);\n if (subscriptionObserver) {\n const { subscriptionState } = subscriptionObserver;\n // This in case unsubscribe is invoked before sending start subscription message\n if (subscriptionState === SUBSCRIPTION_STATUS.PENDING) {\n return new Promise((resolve, reject) => {\n const { observer, subscriptionState: observedSubscriptionState, variables, query, } = subscriptionObserver;\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n subscriptionState: observedSubscriptionState,\n variables,\n query,\n subscriptionReadyCallback: resolve,\n subscriptionFailedCallback: reject,\n });\n });\n }\n }\n }\n _sendUnsubscriptionMessage(subscriptionId) {\n try {\n if (this.awsRealTimeSocket &&\n this.awsRealTimeSocket.readyState === WebSocket.OPEN &&\n this.socketStatus === SOCKET_STATUS.READY) {\n // Preparing unsubscribe message to stop receiving messages for that subscription\n const unsubscribeMessage = this._unsubscribeMessage(subscriptionId);\n const stringToAWSRealTime = JSON.stringify(unsubscribeMessage);\n this.awsRealTimeSocket.send(stringToAWSRealTime);\n }\n }\n catch (err) {\n // If GQL_STOP is not sent because of disconnection issue, then there is nothing the client can do\n this.logger.debug({ err });\n }\n }\n _removeSubscriptionObserver(subscriptionId) {\n this.subscriptionObserverMap.delete(subscriptionId);\n // Verifying 1000ms after removing subscription in case there are new subscription unmount/mount\n setTimeout(this._closeSocketIfRequired.bind(this), 1000);\n }\n _closeSocketIfRequired() {\n if (this.subscriptionObserverMap.size > 0) {\n // Active subscriptions on the WebSocket\n return;\n }\n if (!this.awsRealTimeSocket) {\n this.socketStatus = SOCKET_STATUS.CLOSED;\n return;\n }\n this.connectionStateMonitor.record(CONNECTION_CHANGE.CLOSING_CONNECTION);\n if (this.awsRealTimeSocket.bufferedAmount > 0) {\n // Still data on the WebSocket\n setTimeout(this._closeSocketIfRequired.bind(this), 1000);\n }\n else {\n this.logger.debug('closing WebSocket...');\n const tempSocket = this.awsRealTimeSocket;\n // Cleaning callbacks to avoid race condition, socket still exists\n tempSocket.onclose = null;\n tempSocket.onerror = null;\n tempSocket.close(1000);\n this.awsRealTimeSocket = undefined;\n this.socketStatus = SOCKET_STATUS.CLOSED;\n this._closeSocket();\n }\n }\n maintainKeepAlive() {\n this.keepAliveTimestamp = Date.now();\n }\n keepAliveHeartbeat(connectionTimeoutMs) {\n const currentTime = Date.now();\n // Check for missed KA message\n if (currentTime - this.keepAliveTimestamp >\n DEFAULT_KEEP_ALIVE_ALERT_TIMEOUT) {\n this.connectionStateMonitor.record(CONNECTION_CHANGE.KEEP_ALIVE_MISSED);\n }\n else {\n this.connectionStateMonitor.record(CONNECTION_CHANGE.KEEP_ALIVE);\n }\n // Recognize we are disconnected if we haven't seen messages in the keep alive timeout period\n if (currentTime - this.keepAliveTimestamp > connectionTimeoutMs) {\n this._errorDisconnect(CONTROL_MSG.TIMEOUT_DISCONNECT);\n }\n }\n _handleIncomingSubscriptionMessage(message) {\n if (typeof message.data !== 'string') {\n return;\n }\n const [isData, data] = this._handleSubscriptionData(message);\n if (isData) {\n this.maintainKeepAlive();\n return;\n }\n const { type, id, payload } = data;\n const { observer = null, query = '', variables = {}, startAckTimeoutId, subscriptionReadyCallback, subscriptionFailedCallback, } = this.subscriptionObserverMap.get(id) || {};\n if (type === MESSAGE_TYPES.GQL_START_ACK ||\n type === MESSAGE_TYPES.EVENT_SUBSCRIBE_ACK) {\n this.logger.debug(`subscription ready for ${JSON.stringify({ query, variables })}`);\n if (typeof subscriptionReadyCallback === 'function') {\n subscriptionReadyCallback();\n }\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n dispatchApiEvent({\n event: CONTROL_MSG.SUBSCRIPTION_ACK,\n data: { query, variables },\n message: 'Connection established for subscription',\n });\n const subscriptionState = SUBSCRIPTION_STATUS.CONNECTED;\n if (observer) {\n this.subscriptionObserverMap.set(id, {\n observer,\n query,\n variables,\n startAckTimeoutId: undefined,\n subscriptionState,\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n });\n }\n this.connectionStateMonitor.record(CONNECTION_CHANGE.CONNECTION_ESTABLISHED);\n return;\n }\n if (type === MESSAGE_TYPES.GQL_CONNECTION_KEEP_ALIVE) {\n this.maintainKeepAlive();\n return;\n }\n if (type === MESSAGE_TYPES.GQL_ERROR) {\n const subscriptionState = SUBSCRIPTION_STATUS.FAILED;\n if (observer) {\n this.subscriptionObserverMap.set(id, {\n observer,\n query,\n variables,\n startAckTimeoutId,\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n subscriptionState,\n });\n this.logger.debug(`${CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload ?? data)}`);\n observer.error({\n errors: [\n {\n ...new GraphQLError(`${CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload ?? data)}`),\n },\n ],\n });\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n if (typeof subscriptionFailedCallback === 'function') {\n subscriptionFailedCallback();\n }\n }\n }\n }\n _errorDisconnect(msg) {\n this.logger.debug(`Disconnect error: ${msg}`);\n if (this.awsRealTimeSocket) {\n this._closeSocket();\n this.awsRealTimeSocket.close();\n }\n this.socketStatus = SOCKET_STATUS.CLOSED;\n }\n _closeSocket() {\n if (this.keepAliveHeartbeatIntervalId) {\n clearInterval(this.keepAliveHeartbeatIntervalId);\n this.keepAliveHeartbeatIntervalId = undefined;\n }\n this.connectionStateMonitor.record(CONNECTION_CHANGE.CLOSED);\n }\n _timeoutStartSubscriptionAck(subscriptionId) {\n const subscriptionObserver = this.subscriptionObserverMap.get(subscriptionId);\n if (subscriptionObserver) {\n const { observer, query, variables } = subscriptionObserver;\n if (!observer) {\n return;\n }\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n query,\n variables,\n subscriptionState: SUBSCRIPTION_STATUS.FAILED,\n });\n this._closeSocket();\n this.logger.debug('timeoutStartSubscription', JSON.stringify({ query, variables }));\n }\n }\n _initializeWebSocketConnection({ appSyncGraphqlEndpoint, authenticationType, apiKey, region, additionalCustomHeaders, }) {\n if (this.socketStatus === SOCKET_STATUS.READY) {\n return;\n }\n // TODO(Eslint): refactor to now use async function as the promise executor\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n this.promiseArray.push({ res: resolve, rej: reject });\n if (this.socketStatus === SOCKET_STATUS.CLOSED) {\n try {\n this.socketStatus = SOCKET_STATUS.CONNECTING;\n // Empty payload on connect\n const payloadString = '{}';\n const authHeader = await awsRealTimeHeaderBasedAuth({\n authenticationType,\n payload: payloadString,\n canonicalUri: this.wsConnectUri,\n apiKey,\n appSyncGraphqlEndpoint,\n region,\n additionalCustomHeaders,\n });\n const headerString = authHeader ? JSON.stringify(authHeader) : '';\n // base64url-encoded string\n const encodedHeader = base64Encoder.convert(headerString, {\n urlSafe: true,\n skipPadding: true,\n });\n const authTokenSubprotocol = `header-${encodedHeader}`;\n const queryParams = queryParamsFromCustomHeaders(additionalCustomHeaders);\n const awsRealTimeUrl = realtimeUrlWithQueryString(appSyncGraphqlEndpoint, queryParams);\n await this._establishRetryableConnection(awsRealTimeUrl, authTokenSubprotocol);\n this.promiseArray.forEach(({ res }) => {\n this.logger.debug('Notifying connection successful');\n res();\n });\n this.socketStatus = SOCKET_STATUS.READY;\n this.promiseArray = [];\n }\n catch (err) {\n this.logger.debug('Connection exited with', err);\n this.promiseArray.forEach(({ rej }) => {\n rej(err);\n });\n this.promiseArray = [];\n if (this.awsRealTimeSocket &&\n this.awsRealTimeSocket.readyState === WebSocket.OPEN) {\n this.awsRealTimeSocket.close(3001);\n }\n this.awsRealTimeSocket = undefined;\n this.socketStatus = SOCKET_STATUS.CLOSED;\n }\n }\n });\n }\n async _establishRetryableConnection(awsRealTimeUrl, subprotocol) {\n this.logger.debug(`Establishing retryable connection`);\n await jitteredExponentialRetry(this._establishConnection.bind(this), [awsRealTimeUrl, subprotocol], MAX_DELAY_MS);\n }\n async _openConnection(awsRealTimeUrl, subprotocol) {\n return new Promise((resolve, reject) => {\n const newSocket = this._getNewWebSocket(awsRealTimeUrl, [\n this.wsProtocolName,\n subprotocol,\n ]);\n newSocket.onerror = () => {\n this.logger.debug(`WebSocket connection error`);\n };\n newSocket.onclose = () => {\n this._closeSocket();\n reject(new Error('Connection handshake error'));\n };\n newSocket.onopen = () => {\n this.awsRealTimeSocket = newSocket;\n resolve();\n };\n });\n }\n _getNewWebSocket(url, protocol) {\n return new WebSocket(url, protocol);\n }\n async _initiateHandshake() {\n return new Promise((resolve, reject) => {\n if (!this.awsRealTimeSocket) {\n reject(new Error('awsRealTimeSocket undefined'));\n return;\n }\n let ackOk = false;\n this.awsRealTimeSocket.onerror = error => {\n this.logger.debug(`WebSocket error ${JSON.stringify(error)}`);\n };\n this.awsRealTimeSocket.onclose = event => {\n this.logger.debug(`WebSocket closed ${event.reason}`);\n this._closeSocket();\n reject(new Error(JSON.stringify(event)));\n };\n this.awsRealTimeSocket.onmessage = (message) => {\n if (typeof message.data !== 'string') {\n return;\n }\n this.logger.debug(`subscription message from AWS AppSyncRealTime: ${message.data} `);\n const data = JSON.parse(message.data);\n const { type } = data;\n const connectionTimeoutMs = this._extractConnectionTimeout(data);\n if (type === MESSAGE_TYPES.GQL_CONNECTION_ACK) {\n ackOk = true;\n this._registerWebsocketHandlers(connectionTimeoutMs);\n resolve('Connected to AWS AppSyncRealTime');\n return;\n }\n if (type === MESSAGE_TYPES.GQL_CONNECTION_ERROR) {\n const { errorType, errorCode } = this._extractErrorCodeAndType(data);\n // TODO(Eslint): refactor to reject an Error object instead of a plain object\n // eslint-disable-next-line prefer-promise-reject-errors\n reject({ errorType, errorCode });\n }\n };\n const gqlInit = {\n type: MESSAGE_TYPES.GQL_CONNECTION_INIT,\n };\n this.awsRealTimeSocket.send(JSON.stringify(gqlInit));\n const checkAckOk = (targetAckOk) => {\n if (!targetAckOk) {\n this.connectionStateMonitor.record(CONNECTION_CHANGE.CONNECTION_FAILED);\n reject(new Error(`Connection timeout: ack from AWSAppSyncRealTime was not received after ${CONNECTION_INIT_TIMEOUT} ms`));\n }\n };\n setTimeout(() => {\n checkAckOk(ackOk);\n }, CONNECTION_INIT_TIMEOUT);\n });\n }\n _registerWebsocketHandlers(connectionTimeoutMs) {\n if (!this.awsRealTimeSocket) {\n return;\n }\n // Set up a keep alive heartbeat for this connection\n this.keepAliveHeartbeatIntervalId = setInterval(() => {\n this.keepAliveHeartbeat(connectionTimeoutMs);\n }, DEFAULT_KEEP_ALIVE_HEARTBEAT_TIMEOUT);\n this.awsRealTimeSocket.onmessage =\n this._handleIncomingSubscriptionMessage.bind(this);\n this.awsRealTimeSocket.onerror = err => {\n this.logger.debug(err);\n this._errorDisconnect(CONTROL_MSG.CONNECTION_CLOSED);\n };\n this.awsRealTimeSocket.onclose = event => {\n this.logger.debug(`WebSocket closed ${event.reason}`);\n this._closeSocket();\n this._errorDisconnect(CONTROL_MSG.CONNECTION_CLOSED);\n };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -38,23 +38,13 @@ async function connect(channel, options) {
38
38
  .subscribe(observer);
39
39
  return _subscription;
40
40
  };
41
- // WS publish is not enabled in the service yet. It will be a follow up feature
42
- const pub = async (event, pubOptions) => {
43
- const publishOptions = {
44
- ...providerOptions,
45
- query: channel,
46
- variables: event,
47
- };
48
- publishOptions.authenticationType = normalizeAuth(pubOptions?.authMode, publishOptions.authenticationType);
49
- return AppSyncEventProvider.publish(publishOptions);
50
- };
51
41
  const close = () => {
52
42
  _subscription && _subscription.unsubscribe();
53
43
  };
54
44
  return {
55
45
  subscribe: sub,
56
46
  close,
57
- publish: pub,
47
+ // publish: pub,
58
48
  };
59
49
  }
60
50
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../src/internals/events/index.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Amplify } from '@aws-amplify/core';\nimport { AppSyncEventProvider as eventProvider } from '../../Providers/AWSAppSyncEventsProvider';\nimport { appsyncRequest } from './appsyncRequest';\nimport { configure, normalizeAuth, serializeEvents } from './utils';\n/**\n * @experimental API may change in future versions\n *\n * Establish a WebSocket connection to an Events channel\n *\n * @example\n * const channel = await events.connect(\"default/channel\")\n *\n * channel.subscribe({\n * next: (data) => { console.log(data) },\n * error: (err) => { console.error(err) },\n * })\n *\n * @example // authMode override\n * const channel = await events.connect(\"default/channel\", { authMode: \"userPool\" })\n *\n * @param channel - channel path; `<namespace>/<channel>`\n * @param options - request overrides: `authMode`, `authToken`\n *\n */\nasync function connect(channel, options) {\n const providerOptions = configure();\n providerOptions.authenticationType = normalizeAuth(options?.authMode, providerOptions.authenticationType);\n await eventProvider.connect(providerOptions);\n let _subscription;\n const sub = (observer, subOptions) => {\n const subscribeOptions = { ...providerOptions, query: channel };\n subscribeOptions.authenticationType = normalizeAuth(subOptions?.authMode, subscribeOptions.authenticationType);\n _subscription = eventProvider\n .subscribe(subscribeOptions)\n .subscribe(observer);\n return _subscription;\n };\n // WS publish is not enabled in the service yet. It will be a follow up feature\n const pub = async (event, pubOptions) => {\n const publishOptions = {\n ...providerOptions,\n query: channel,\n variables: event,\n };\n publishOptions.authenticationType = normalizeAuth(pubOptions?.authMode, publishOptions.authenticationType);\n return eventProvider.publish(publishOptions);\n };\n const close = () => {\n _subscription && _subscription.unsubscribe();\n };\n return {\n subscribe: sub,\n close,\n publish: pub,\n };\n}\n/**\n * @experimental API may change in future versions\n *\n * Publish events to a channel via HTTP request\n *\n * @example\n * await events.post(\"default/channel\", { some: \"event\" })\n *\n * @example // event batching\n * await events.post(\"default/channel\", [{ some: \"event\" }, { some: \"event2\" }])\n *\n * @example // authMode override\n * await events.post(\"default/channel\", { some: \"event\" }, { authMode: \"userPool\" })\n *\n * @param channel - channel path; `<namespace>/<channel>`\n * @param event - JSON-serializable value or an array of values\n * @param options - request overrides: `authMode`, `authToken`\n *\n * @returns void on success\n * @throws on error\n */\nasync function post(channel, event, options) {\n const providerOptions = configure();\n providerOptions.authenticationType = normalizeAuth(options?.authMode, providerOptions.authenticationType);\n // trailing slash required in publish\n const normalizedChannelName = channel[0] === '/' ? channel : `/${channel}`;\n const publishOptions = {\n ...providerOptions,\n query: normalizedChannelName,\n variables: serializeEvents(event),\n authToken: options?.authToken,\n };\n const abortController = new AbortController();\n const res = await appsyncRequest(Amplify, publishOptions, {}, abortController);\n if (res.failed?.length > 0) {\n return res.failed;\n }\n}\n/**\n * @experimental API may change in future versions\n *\n * Close WebSocket connection, disconnect listeners and reconnect observers\n *\n * @example\n * await events.closeAll()\n *\n * @returns void on success\n * @throws on error\n */\nasync function closeAll() {\n await eventProvider.close();\n}\nexport { connect, post, closeAll };\n"],"names":["eventProvider"],"mappings":";;;;;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE;AACzC,IAAI,MAAM,eAAe,GAAG,SAAS,EAAE,CAAC;AACxC,IAAI,eAAe,CAAC,kBAAkB,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;AAC9G,IAAI,MAAMA,oBAAa,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACjD,IAAI,IAAI,aAAa,CAAC;AACtB,IAAI,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAU,KAAK;AAC1C,QAAQ,MAAM,gBAAgB,GAAG,EAAE,GAAG,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACxE,QAAQ,gBAAgB,CAAC,kBAAkB,GAAG,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AACvH,QAAQ,aAAa,GAAGA,oBAAa;AACrC,aAAa,SAAS,CAAC,gBAAgB,CAAC;AACxC,aAAa,SAAS,CAAC,QAAQ,CAAC,CAAC;AACjC,QAAQ,OAAO,aAAa,CAAC;AAC7B,KAAK,CAAC;AACN;AACA,IAAI,MAAM,GAAG,GAAG,OAAO,KAAK,EAAE,UAAU,KAAK;AAC7C,QAAQ,MAAM,cAAc,GAAG;AAC/B,YAAY,GAAG,eAAe;AAC9B,YAAY,KAAK,EAAE,OAAO;AAC1B,YAAY,SAAS,EAAE,KAAK;AAC5B,SAAS,CAAC;AACV,QAAQ,cAAc,CAAC,kBAAkB,GAAG,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,CAAC,kBAAkB,CAAC,CAAC;AACnH,QAAQ,OAAOA,oBAAa,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACrD,KAAK,CAAC;AACN,IAAI,MAAM,KAAK,GAAG,MAAM;AACxB,QAAQ,aAAa,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;AACrD,KAAK,CAAC;AACN,IAAI,OAAO;AACX,QAAQ,SAAS,EAAE,GAAG;AACtB,QAAQ,KAAK;AACb,QAAQ,OAAO,EAAE,GAAG;AACpB,KAAK,CAAC;AACN,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AAC7C,IAAI,MAAM,eAAe,GAAG,SAAS,EAAE,CAAC;AACxC,IAAI,eAAe,CAAC,kBAAkB,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;AAC9G;AACA,IAAI,MAAM,qBAAqB,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/E,IAAI,MAAM,cAAc,GAAG;AAC3B,QAAQ,GAAG,eAAe;AAC1B,QAAQ,KAAK,EAAE,qBAAqB;AACpC,QAAQ,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC;AACzC,QAAQ,SAAS,EAAE,OAAO,EAAE,SAAS;AACrC,KAAK,CAAC;AACN,IAAI,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAClD,IAAI,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;AACnF,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE;AAChC,QAAQ,OAAO,GAAG,CAAC,MAAM,CAAC;AAC1B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ,GAAG;AAC1B,IAAI,MAAMA,oBAAa,CAAC,KAAK,EAAE,CAAC;AAChC;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/internals/events/index.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Amplify } from '@aws-amplify/core';\nimport { AppSyncEventProvider as eventProvider } from '../../Providers/AWSAppSyncEventsProvider';\nimport { appsyncRequest } from './appsyncRequest';\nimport { configure, normalizeAuth, serializeEvents } from './utils';\n/**\n * @experimental API may change in future versions\n *\n * Establish a WebSocket connection to an Events channel\n *\n * @example\n * const channel = await events.connect(\"default/channel\")\n *\n * channel.subscribe({\n * next: (data) => { console.log(data) },\n * error: (err) => { console.error(err) },\n * })\n *\n * @example // authMode override\n * const channel = await events.connect(\"default/channel\", { authMode: \"userPool\" })\n *\n * @param channel - channel path; `<namespace>/<channel>`\n * @param options - request overrides: `authMode`, `authToken`\n *\n */\nasync function connect(channel, options) {\n const providerOptions = configure();\n providerOptions.authenticationType = normalizeAuth(options?.authMode, providerOptions.authenticationType);\n await eventProvider.connect(providerOptions);\n let _subscription;\n const sub = (observer, subOptions) => {\n const subscribeOptions = { ...providerOptions, query: channel };\n subscribeOptions.authenticationType = normalizeAuth(subOptions?.authMode, subscribeOptions.authenticationType);\n _subscription = eventProvider\n .subscribe(subscribeOptions)\n .subscribe(observer);\n return _subscription;\n };\n // WS publish is not enabled in the service yet. It will be a follow up feature\n const _pub = async (event, pubOptions) => {\n const publishOptions = {\n ...providerOptions,\n query: channel,\n variables: event,\n };\n publishOptions.authenticationType = normalizeAuth(pubOptions?.authMode, publishOptions.authenticationType);\n return eventProvider.publish(publishOptions);\n };\n const close = () => {\n _subscription && _subscription.unsubscribe();\n };\n return {\n subscribe: sub,\n close,\n // publish: pub,\n };\n}\n/**\n * @experimental API may change in future versions\n *\n * Publish events to a channel via HTTP request\n *\n * @example\n * await events.post(\"default/channel\", { some: \"event\" })\n *\n * @example // event batching\n * await events.post(\"default/channel\", [{ some: \"event\" }, { some: \"event2\" }])\n *\n * @example // authMode override\n * await events.post(\"default/channel\", { some: \"event\" }, { authMode: \"userPool\" })\n *\n * @param channel - channel path; `<namespace>/<channel>`\n * @param event - JSON-serializable value or an array of values\n * @param options - request overrides: `authMode`, `authToken`\n *\n * @returns void on success\n * @throws on error\n */\nasync function post(channel, event, options) {\n const providerOptions = configure();\n providerOptions.authenticationType = normalizeAuth(options?.authMode, providerOptions.authenticationType);\n // trailing slash required in publish\n const normalizedChannelName = channel[0] === '/' ? channel : `/${channel}`;\n const publishOptions = {\n ...providerOptions,\n query: normalizedChannelName,\n variables: serializeEvents(event),\n authToken: options?.authToken,\n };\n const abortController = new AbortController();\n const res = await appsyncRequest(Amplify, publishOptions, {}, abortController);\n if (res.failed?.length > 0) {\n return res.failed;\n }\n}\n/**\n * @experimental API may change in future versions\n *\n * Close WebSocket connection, disconnect listeners and reconnect observers\n *\n * @example\n * await events.closeAll()\n *\n * @returns void on success\n * @throws on error\n */\nasync function closeAll() {\n await eventProvider.close();\n}\nexport { connect, post, closeAll };\n"],"names":["eventProvider"],"mappings":";;;;;AAAA;AACA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE;AACzC,IAAI,MAAM,eAAe,GAAG,SAAS,EAAE,CAAC;AACxC,IAAI,eAAe,CAAC,kBAAkB,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;AAC9G,IAAI,MAAMA,oBAAa,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AACjD,IAAI,IAAI,aAAa,CAAC;AACtB,IAAI,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAU,KAAK;AAC1C,QAAQ,MAAM,gBAAgB,GAAG,EAAE,GAAG,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACxE,QAAQ,gBAAgB,CAAC,kBAAkB,GAAG,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;AACvH,QAAQ,aAAa,GAAGA,oBAAa;AACrC,aAAa,SAAS,CAAC,gBAAgB,CAAC;AACxC,aAAa,SAAS,CAAC,QAAQ,CAAC,CAAC;AACjC,QAAQ,OAAO,aAAa,CAAC;AAC7B,KAAK,CAAC;AAWN,IAAI,MAAM,KAAK,GAAG,MAAM;AACxB,QAAQ,aAAa,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;AACrD,KAAK,CAAC;AACN,IAAI,OAAO;AACX,QAAQ,SAAS,EAAE,GAAG;AACtB,QAAQ,KAAK;AACb;AACA,KAAK,CAAC;AACN,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AAC7C,IAAI,MAAM,eAAe,GAAG,SAAS,EAAE,CAAC;AACxC,IAAI,eAAe,CAAC,kBAAkB,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;AAC9G;AACA,IAAI,MAAM,qBAAqB,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/E,IAAI,MAAM,cAAc,GAAG;AAC3B,QAAQ,GAAG,eAAe;AAC1B,QAAQ,KAAK,EAAE,qBAAqB;AACpC,QAAQ,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC;AACzC,QAAQ,SAAS,EAAE,OAAO,EAAE,SAAS;AACrC,KAAK,CAAC;AACN,IAAI,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAClD,IAAI,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;AACnF,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE;AAChC,QAAQ,OAAO,GAAG,CAAC,MAAM,CAAC;AAC1B,KAAK;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,QAAQ,GAAG;AAC1B,IAAI,MAAMA,oBAAa,CAAC,KAAK,EAAE,CAAC;AAChC;;;;"}
@@ -1,6 +1,5 @@
1
1
  import { Subscription } from 'rxjs';
2
2
  import type { GraphQLAuthMode } from '@aws-amplify/core/internals/utils';
3
- import { DocumentType } from '@aws-amplify/core/internals/utils';
4
3
  export interface SubscriptionObserver<T> {
5
4
  next(value: T): void;
6
5
  error(errorValue: any): void;
@@ -44,15 +43,6 @@ export interface EventsChannel {
44
43
  *
45
44
  */
46
45
  close(): void;
47
- /**
48
- *
49
- * @param event
50
- * @param pubOptions
51
- *
52
- * @example
53
- * await channel.publish({ some: "data" });
54
- */
55
- publish(event: DocumentType, pubOptions?: EventsOptions): Promise<any>;
56
46
  }
57
47
  export type ResolvedGraphQLAuthModes = Exclude<GraphQLAuthMode, 'identityPool'>;
58
48
  export interface EventsOptions {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-amplify/api-graphql",
3
- "version": "4.7.4-websocket-event.a29d4a1.0+a29d4a1",
3
+ "version": "4.7.4",
4
4
  "description": "Api-graphql category of aws-amplify",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.mjs",
@@ -84,8 +84,8 @@
84
84
  "server"
85
85
  ],
86
86
  "dependencies": {
87
- "@aws-amplify/api-rest": "4.0.69-websocket-event.a29d4a1.0+a29d4a1",
88
- "@aws-amplify/core": "6.9.4-websocket-event.a29d4a1.0+a29d4a1",
87
+ "@aws-amplify/api-rest": "4.0.69",
88
+ "@aws-amplify/core": "6.10.0",
89
89
  "@aws-amplify/data-schema": "^1.7.0",
90
90
  "@aws-sdk/types": "3.387.0",
91
91
  "graphql": "15.8.0",
@@ -101,5 +101,5 @@
101
101
  "limit": "91.7 kB"
102
102
  }
103
103
  ],
104
- "gitHead": "a29d4a1b5b8c149c0096e57eba23392191118ad4"
104
+ "gitHead": "14751ffe757a776e4af5c4403e1f78adcc933a98"
105
105
  }
@@ -97,16 +97,14 @@ export class AWSAppSyncEventProvider extends AWSWebSocketProvider {
97
97
  query,
98
98
  apiKey,
99
99
  region,
100
- variables,
101
100
  } = options;
102
101
 
103
102
  // This will be needed for WS publish
104
- const data = {
105
- channel: query,
106
- events: [variables],
107
- };
103
+ // const data = {
104
+ // events: [variables],
105
+ // };
108
106
 
109
- const serializedData = JSON.stringify(data);
107
+ const serializedData = JSON.stringify({ channel: query });
110
108
 
111
109
  const headers = {
112
110
  ...(await awsRealTimeHeaderBasedAuth({
@@ -127,18 +125,18 @@ export class AWSAppSyncEventProvider extends AWSWebSocketProvider {
127
125
  const subscriptionMessage = {
128
126
  id: subscriptionId,
129
127
  channel: query,
130
- events: [JSON.stringify(variables)],
128
+ // events: [JSON.stringify(variables)],
131
129
  authorization: {
132
130
  ...headers,
133
131
  },
134
- payload: {
135
- events: serializedData,
136
- extensions: {
137
- authorization: {
138
- ...headers,
139
- },
140
- },
141
- },
132
+ // payload: {
133
+ // events: serializedData,
134
+ // extensions: {
135
+ // authorization: {
136
+ // ...headers,
137
+ // },
138
+ // },
139
+ // },
142
140
  type: publish
143
141
  ? MESSAGE_TYPES.EVENT_PUBLISH
144
142
  : MESSAGE_TYPES.EVENT_SUBSCRIBE,
@@ -255,11 +255,6 @@ export abstract class AWSWebSocketProvider {
255
255
 
256
256
  return new Promise((resolve, reject) => {
257
257
  if (this.awsRealTimeSocket) {
258
- const timeoutId = setTimeout(() => {
259
- cleanup();
260
- reject(new Error('Publish operation timed out'));
261
- }, 30000); // 30 seconds timeout
262
-
263
258
  const publishListener = (event: MessageEvent) => {
264
259
  const data = JSON.parse(event.data);
265
260
  if (data.id === subscriptionId && data.type === 'publish_success') {
@@ -268,47 +263,22 @@ export abstract class AWSWebSocketProvider {
268
263
  'message',
269
264
  publishListener,
270
265
  );
271
- cleanup();
266
+
272
267
  resolve();
273
268
  }
274
269
 
275
270
  if (data.erroredEvents && data.erroredEvents.length > 0) {
276
271
  // TODO: handle errors
277
- const errors = data.erroredEvents.map(
278
- (errorEvent: any) => errorEvent.error,
279
- );
280
- cleanup();
281
- reject(new Error(`Publish errors: ${errors.join(', ')}`));
282
272
  }
283
273
  };
284
-
285
- const errorListener = (error: Event) => {
286
- cleanup();
287
- reject(new Error(`WebSocket error: ${error}`));
288
- };
289
-
290
- const closeListener = () => {
291
- cleanup();
292
- reject(new Error('WebSocket is closed'));
293
- };
294
-
295
- const cleanup = () => {
296
- clearTimeout(timeoutId);
297
- this.awsRealTimeSocket?.removeEventListener(
298
- 'message',
299
- publishListener,
300
- );
301
- this.awsRealTimeSocket?.removeEventListener('error', errorListener);
302
- this.awsRealTimeSocket?.removeEventListener('close', closeListener);
303
- };
304
-
305
274
  this.awsRealTimeSocket.addEventListener('message', publishListener);
306
- this.awsRealTimeSocket.addEventListener('error', errorListener);
307
- this.awsRealTimeSocket.addEventListener('close', closeListener);
275
+ this.awsRealTimeSocket.addEventListener('close', () => {
276
+ reject(new Error('WebSocket is closed'));
277
+ });
278
+ //
279
+ // this.awsRealTimeSocket.addEventListener('error', publishListener);
308
280
 
309
281
  this.awsRealTimeSocket.send(serializedSubscriptionMessage);
310
- } else {
311
- reject(new Error('WebSocket is not connected'));
312
282
  }
313
283
  });
314
284
  }
@@ -70,7 +70,7 @@ async function connect(
70
70
  };
71
71
 
72
72
  // WS publish is not enabled in the service yet. It will be a follow up feature
73
- const pub = async (
73
+ const _pub = async (
74
74
  event: DocumentType,
75
75
  pubOptions?: EventsOptions,
76
76
  ): Promise<any> => {
@@ -94,7 +94,7 @@ async function connect(
94
94
  return {
95
95
  subscribe: sub,
96
96
  close,
97
- publish: pub,
97
+ // publish: pub,
98
98
  };
99
99
  }
100
100
 
@@ -3,7 +3,6 @@
3
3
 
4
4
  import { Subscription } from 'rxjs';
5
5
  import type { GraphQLAuthMode } from '@aws-amplify/core/internals/utils';
6
- import { DocumentType } from '@aws-amplify/core/internals/utils';
7
6
 
8
7
  export interface SubscriptionObserver<T> {
9
8
  next(value: T): void;
@@ -52,15 +51,6 @@ export interface EventsChannel {
52
51
  *
53
52
  */
54
53
  close(): void;
55
- /**
56
- *
57
- * @param event
58
- * @param pubOptions
59
- *
60
- * @example
61
- * await channel.publish({ some: "data" });
62
- */
63
- publish(event: DocumentType, pubOptions?: EventsOptions): Promise<any>;
64
54
  }
65
55
 
66
56
  export type ResolvedGraphQLAuthModes = Exclude<GraphQLAuthMode, 'identityPool'>;