@aws-amplify/api-graphql 4.0.22-unstable.f6055cb.0 → 4.0.22
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.
- package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js +31 -40
- package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -1
- package/dist/cjs/internals/APIClient.js +19 -34
- package/dist/cjs/internals/APIClient.js.map +1 -1
- package/dist/cjs/internals/InternalGraphQLAPI.js +9 -10
- package/dist/cjs/internals/InternalGraphQLAPI.js.map +1 -1
- package/dist/cjs/internals/generateClient.js +1 -1
- package/dist/cjs/internals/generateClient.js.map +1 -1
- package/dist/cjs/internals/operations/custom.js +2 -2
- package/dist/cjs/internals/operations/custom.js.map +1 -1
- package/dist/cjs/internals/operations/list.js +1 -1
- package/dist/cjs/internals/operations/list.js.map +1 -1
- package/dist/cjs/internals/server/generateClientWithAmplifyInstance.js +1 -1
- package/dist/cjs/internals/server/generateClientWithAmplifyInstance.js.map +1 -1
- package/dist/cjs/internals/server/generateModelsProperty.js +1 -1
- package/dist/cjs/internals/server/generateModelsProperty.js.map +1 -1
- package/dist/cjs/internals/v6.js +2 -0
- package/dist/cjs/internals/v6.js.map +1 -1
- package/dist/cjs/utils/errors/repackageAuthError.js +1 -1
- package/dist/cjs/utils/errors/repackageAuthError.js.map +1 -1
- package/dist/esm/GraphQLAPI.d.ts +2 -2
- package/dist/esm/GraphQLAPI.mjs.map +1 -1
- package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.d.ts +8 -8
- package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs +31 -40
- package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs.map +1 -1
- package/dist/esm/internals/APIClient.d.ts +6 -5
- package/dist/esm/internals/APIClient.mjs +19 -34
- package/dist/esm/internals/APIClient.mjs.map +1 -1
- package/dist/esm/internals/InternalGraphQLAPI.d.ts +1 -1
- package/dist/esm/internals/InternalGraphQLAPI.mjs +9 -10
- package/dist/esm/internals/InternalGraphQLAPI.mjs.map +1 -1
- package/dist/esm/internals/generateClient.mjs +1 -1
- package/dist/esm/internals/generateClient.mjs.map +1 -1
- package/dist/esm/internals/generateCustomOperationsProperty.d.ts +2 -2
- package/dist/esm/internals/operations/custom.d.ts +1 -1
- package/dist/esm/internals/operations/custom.mjs +2 -2
- package/dist/esm/internals/operations/custom.mjs.map +1 -1
- package/dist/esm/internals/operations/get.d.ts +1 -1
- package/dist/esm/internals/operations/get.mjs.map +1 -1
- package/dist/esm/internals/operations/indexQuery.d.ts +3 -3
- package/dist/esm/internals/operations/indexQuery.mjs.map +1 -1
- package/dist/esm/internals/operations/list.d.ts +1 -1
- package/dist/esm/internals/operations/list.mjs +1 -1
- package/dist/esm/internals/operations/list.mjs.map +1 -1
- package/dist/esm/internals/operations/subscription.d.ts +1 -1
- package/dist/esm/internals/operations/subscription.mjs.map +1 -1
- package/dist/esm/internals/server/generateClientWithAmplifyInstance.d.ts +1 -1
- package/dist/esm/internals/server/generateClientWithAmplifyInstance.mjs +1 -1
- package/dist/esm/internals/server/generateClientWithAmplifyInstance.mjs.map +1 -1
- package/dist/esm/internals/server/generateModelsProperty.d.ts +2 -1
- package/dist/esm/internals/server/generateModelsProperty.mjs +1 -1
- package/dist/esm/internals/server/generateModelsProperty.mjs.map +1 -1
- package/dist/esm/internals/types.d.ts +2 -2
- package/dist/esm/internals/utils/clientProperties/generateModelsProperty.d.ts +1 -1
- package/dist/esm/internals/v6.d.ts +1 -1
- package/dist/esm/internals/v6.mjs +2 -0
- package/dist/esm/internals/v6.mjs.map +1 -1
- package/dist/esm/types/index.d.ts +35 -33
- package/dist/esm/utils/ConnectionStateMonitor.d.ts +2 -2
- package/dist/esm/utils/ConnectionStateMonitor.mjs.map +1 -1
- package/dist/esm/utils/ReachabilityMonitor/index.native.mjs.map +1 -1
- package/dist/esm/utils/errors/repackageAuthError.d.ts +2 -2
- package/dist/esm/utils/errors/repackageAuthError.mjs +1 -1
- package/dist/esm/utils/errors/repackageAuthError.mjs.map +1 -1
- package/dist/esm/utils/findIndexByFields.d.ts +1 -1
- package/package.json +5 -6
- package/src/GraphQLAPI.ts +3 -4
- package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +64 -84
- package/src/internals/APIClient.ts +27 -59
- package/src/internals/InternalGraphQLAPI.ts +30 -26
- package/src/internals/clientUtils.ts +1 -1
- package/src/internals/generateClient.ts +10 -12
- package/src/internals/generateCustomOperationsProperty.ts +6 -7
- package/src/internals/operations/custom.ts +13 -16
- package/src/internals/operations/get.ts +8 -9
- package/src/internals/operations/indexQuery.ts +11 -12
- package/src/internals/operations/list.ts +15 -11
- package/src/internals/operations/observeQuery.ts +1 -3
- package/src/internals/operations/subscription.ts +10 -12
- package/src/internals/server/generateClientWithAmplifyInstance.ts +7 -7
- package/src/internals/server/generateModelsProperty.ts +4 -7
- package/src/internals/types.ts +2 -2
- package/src/internals/utils/clientProperties/generateEnumsProperty.ts +6 -7
- package/src/internals/utils/clientProperties/generateModelsProperty.ts +6 -7
- package/src/internals/v6.ts +4 -6
- package/src/server/generateClient.ts +1 -4
- package/src/types/PubSub.ts +0 -1
- package/src/types/index.ts +47 -49
- package/src/utils/ConnectionStateMonitor.ts +3 -8
- package/src/utils/ReachabilityMonitor/index.native.ts +1 -1
- package/src/utils/ReachabilityMonitor/index.ts +0 -1
- package/src/utils/ReconnectionMonitor.ts +0 -1
- package/src/utils/errors/repackageAuthError.ts +7 -6
- package/src/utils/findIndexByFields.ts +1 -1
- package/src/utils/resolveConfig.ts +0 -1
- package/src/utils/resolveLibraryOptions.ts +0 -1
- package/src/utils/resolveOwnerFields.ts +5 -7
- package/src/utils/resolvePKFields.ts +0 -1
|
@@ -17,10 +17,10 @@ const logger = new core_1.ConsoleLogger('AWSAppSyncRealTimeProvider');
|
|
|
17
17
|
const dispatchApiEvent = (payload) => {
|
|
18
18
|
core_1.Hub.dispatch('api', payload, 'PubSub', constants_1.AMPLIFY_SYMBOL);
|
|
19
19
|
};
|
|
20
|
-
const standardDomainPattern = /^https:\/\/\w{26}\.appsync
|
|
20
|
+
const standardDomainPattern = /^https:\/\/\w{26}\.appsync\-api\.\w{2}(?:(?:\-\w{2,})+)\-\d\.amazonaws.com(?:\.cn)?\/graphql$/i;
|
|
21
21
|
const customDomainPath = '/realtime';
|
|
22
22
|
class AWSAppSyncRealTimeProvider {
|
|
23
|
-
constructor() {
|
|
23
|
+
constructor(options = {}) {
|
|
24
24
|
this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;
|
|
25
25
|
this.keepAliveTimeout = constants_1.DEFAULT_KEEP_ALIVE_TIMEOUT;
|
|
26
26
|
this.subscriptionObserverMap = new Map();
|
|
@@ -122,9 +122,10 @@ class AWSAppSyncRealTimeProvider {
|
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
124
|
};
|
|
125
|
+
let reconnectSubscription;
|
|
125
126
|
// Add an observable to the reconnection list to manage reconnection for this subscription
|
|
126
|
-
|
|
127
|
-
this.reconnectionMonitor.addObserver(
|
|
127
|
+
reconnectSubscription = new rxjs_1.Observable(observer => {
|
|
128
|
+
this.reconnectionMonitor.addObserver(observer);
|
|
128
129
|
}).subscribe(() => {
|
|
129
130
|
startSubscription();
|
|
130
131
|
});
|
|
@@ -247,7 +248,7 @@ class AWSAppSyncRealTimeProvider {
|
|
|
247
248
|
subscriptionReadyCallback,
|
|
248
249
|
subscriptionFailedCallback,
|
|
249
250
|
startAckTimeoutId: setTimeout(() => {
|
|
250
|
-
this._timeoutStartSubscriptionAck(subscriptionId);
|
|
251
|
+
this._timeoutStartSubscriptionAck.call(this, subscriptionId);
|
|
251
252
|
}, constants_1.START_ACK_TIMEOUT),
|
|
252
253
|
});
|
|
253
254
|
if (this.awsRealTimeSocket) {
|
|
@@ -259,7 +260,7 @@ class AWSAppSyncRealTimeProvider {
|
|
|
259
260
|
logger.debug({ err });
|
|
260
261
|
const message = String(err.message ?? '');
|
|
261
262
|
// Resolving to give the state observer time to propogate the update
|
|
262
|
-
this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);
|
|
263
|
+
Promise.resolve(this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED));
|
|
263
264
|
// Capture the error only when the network didn't cause disruption
|
|
264
265
|
if (this.connectionState !== PubSub_1.ConnectionState.ConnectionDisruptedPendingNetwork) {
|
|
265
266
|
// When the error is non-retriable, error out the observable
|
|
@@ -289,15 +290,15 @@ class AWSAppSyncRealTimeProvider {
|
|
|
289
290
|
const { subscriptionState } = subscriptionObserver;
|
|
290
291
|
// This in case unsubscribe is invoked before sending start subscription message
|
|
291
292
|
if (subscriptionState === constants_1.SUBSCRIPTION_STATUS.PENDING) {
|
|
292
|
-
return new Promise((
|
|
293
|
-
const { observer, subscriptionState
|
|
293
|
+
return new Promise((res, rej) => {
|
|
294
|
+
const { observer, subscriptionState, variables, query } = subscriptionObserver;
|
|
294
295
|
this.subscriptionObserverMap.set(subscriptionId, {
|
|
295
296
|
observer,
|
|
296
|
-
subscriptionState
|
|
297
|
+
subscriptionState,
|
|
297
298
|
variables,
|
|
298
299
|
query,
|
|
299
|
-
subscriptionReadyCallback:
|
|
300
|
-
subscriptionFailedCallback:
|
|
300
|
+
subscriptionReadyCallback: res,
|
|
301
|
+
subscriptionFailedCallback: rej,
|
|
301
302
|
});
|
|
302
303
|
});
|
|
303
304
|
}
|
|
@@ -408,9 +409,7 @@ class AWSAppSyncRealTimeProvider {
|
|
|
408
409
|
clearTimeout(this.keepAliveTimeoutId);
|
|
409
410
|
if (this.keepAliveAlertTimeoutId)
|
|
410
411
|
clearTimeout(this.keepAliveAlertTimeoutId);
|
|
411
|
-
this.keepAliveTimeoutId = setTimeout(() =>
|
|
412
|
-
this._errorDisconnect(PubSub_1.CONTROL_MSG.TIMEOUT_DISCONNECT);
|
|
413
|
-
}, this.keepAliveTimeout);
|
|
412
|
+
this.keepAliveTimeoutId = setTimeout(() => this._errorDisconnect(PubSub_1.CONTROL_MSG.TIMEOUT_DISCONNECT), this.keepAliveTimeout);
|
|
414
413
|
this.keepAliveAlertTimeoutId = setTimeout(() => {
|
|
415
414
|
this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.KEEP_ALIVE_MISSED);
|
|
416
415
|
}, constants_1.DEFAULT_KEEP_ALIVE_ALERT_TIMEOUT);
|
|
@@ -474,10 +473,8 @@ class AWSAppSyncRealTimeProvider {
|
|
|
474
473
|
if (this.socketStatus === constants_1.SOCKET_STATUS.READY) {
|
|
475
474
|
return;
|
|
476
475
|
}
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
return new Promise(async (resolve, reject) => {
|
|
480
|
-
this.promiseArray.push({ res: resolve, rej: reject });
|
|
476
|
+
return new Promise(async (res, rej) => {
|
|
477
|
+
this.promiseArray.push({ res, rej });
|
|
481
478
|
if (this.socketStatus === constants_1.SOCKET_STATUS.CLOSED) {
|
|
482
479
|
try {
|
|
483
480
|
this.socketStatus = constants_1.SOCKET_STATUS.CONNECTING;
|
|
@@ -520,9 +517,7 @@ class AWSAppSyncRealTimeProvider {
|
|
|
520
517
|
}
|
|
521
518
|
catch (err) {
|
|
522
519
|
logger.debug('Connection exited with', err);
|
|
523
|
-
this.promiseArray.forEach(({ rej }) =>
|
|
524
|
-
rej(err);
|
|
525
|
-
});
|
|
520
|
+
this.promiseArray.forEach(({ rej }) => rej(err));
|
|
526
521
|
this.promiseArray = [];
|
|
527
522
|
if (this.awsRealTimeSocket &&
|
|
528
523
|
this.awsRealTimeSocket.readyState === WebSocket.OPEN) {
|
|
@@ -544,23 +539,23 @@ class AWSAppSyncRealTimeProvider {
|
|
|
544
539
|
// Step 1: connect websocket
|
|
545
540
|
try {
|
|
546
541
|
await (() => {
|
|
547
|
-
return new Promise((
|
|
542
|
+
return new Promise((res, rej) => {
|
|
548
543
|
const newSocket = this.getNewWebSocket(awsRealTimeUrl, 'graphql-ws');
|
|
549
544
|
newSocket.onerror = () => {
|
|
550
545
|
logger.debug(`WebSocket connection error`);
|
|
551
546
|
};
|
|
552
547
|
newSocket.onclose = () => {
|
|
553
|
-
|
|
548
|
+
rej(new Error('Connection handshake error'));
|
|
554
549
|
};
|
|
555
550
|
newSocket.onopen = () => {
|
|
556
551
|
this.awsRealTimeSocket = newSocket;
|
|
557
|
-
|
|
552
|
+
return res();
|
|
558
553
|
};
|
|
559
554
|
});
|
|
560
555
|
})();
|
|
561
556
|
// Step 2: wait for ack from AWS AppSyncReaTime after sending init
|
|
562
557
|
await (() => {
|
|
563
|
-
return new Promise((
|
|
558
|
+
return new Promise((res, rej) => {
|
|
564
559
|
if (this.awsRealTimeSocket) {
|
|
565
560
|
let ackOk = false;
|
|
566
561
|
this.awsRealTimeSocket.onerror = error => {
|
|
@@ -568,7 +563,7 @@ class AWSAppSyncRealTimeProvider {
|
|
|
568
563
|
};
|
|
569
564
|
this.awsRealTimeSocket.onclose = event => {
|
|
570
565
|
logger.debug(`WebSocket closed ${event.reason}`);
|
|
571
|
-
|
|
566
|
+
rej(new Error(JSON.stringify(event)));
|
|
572
567
|
};
|
|
573
568
|
this.awsRealTimeSocket.onmessage = (message) => {
|
|
574
569
|
if (typeof message.data !== 'string') {
|
|
@@ -592,29 +587,25 @@ class AWSAppSyncRealTimeProvider {
|
|
|
592
587
|
this._errorDisconnect(PubSub_1.CONTROL_MSG.CONNECTION_CLOSED);
|
|
593
588
|
};
|
|
594
589
|
}
|
|
595
|
-
|
|
590
|
+
res('Cool, connected to AWS AppSyncRealTime');
|
|
596
591
|
return;
|
|
597
592
|
}
|
|
598
593
|
if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_ERROR) {
|
|
599
594
|
const { payload: { errors: [{ errorType = '', errorCode = 0 } = {}] = [], } = {}, } = data;
|
|
600
|
-
|
|
601
|
-
// eslint-disable-next-line prefer-promise-reject-errors
|
|
602
|
-
reject({ errorType, errorCode });
|
|
595
|
+
rej({ errorType, errorCode });
|
|
603
596
|
}
|
|
604
597
|
};
|
|
605
598
|
const gqlInit = {
|
|
606
599
|
type: constants_1.MESSAGE_TYPES.GQL_CONNECTION_INIT,
|
|
607
600
|
};
|
|
608
601
|
this.awsRealTimeSocket.send(JSON.stringify(gqlInit));
|
|
609
|
-
const checkAckOk = (
|
|
610
|
-
if (!
|
|
602
|
+
const checkAckOk = (ackOk) => {
|
|
603
|
+
if (!ackOk) {
|
|
611
604
|
this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CONNECTION_FAILED);
|
|
612
|
-
|
|
605
|
+
rej(new Error(`Connection timeout: ack from AWSAppSyncRealTime was not received after ${constants_1.CONNECTION_INIT_TIMEOUT} ms`));
|
|
613
606
|
}
|
|
614
607
|
};
|
|
615
|
-
setTimeout(() =>
|
|
616
|
-
checkAckOk(ackOk);
|
|
617
|
-
}, constants_1.CONNECTION_INIT_TIMEOUT);
|
|
608
|
+
setTimeout(() => checkAckOk(ackOk), constants_1.CONNECTION_INIT_TIMEOUT);
|
|
618
609
|
}
|
|
619
610
|
});
|
|
620
611
|
})();
|
|
@@ -676,7 +667,7 @@ class AWSAppSyncRealTimeProvider {
|
|
|
676
667
|
}
|
|
677
668
|
async _awsRealTimeApiKeyHeader({ apiKey, host, }) {
|
|
678
669
|
const dt = new Date();
|
|
679
|
-
const dtStr = dt.toISOString().replace(/[
|
|
670
|
+
const dtStr = dt.toISOString().replace(/[:\-]|\.\d{3}/g, '');
|
|
680
671
|
return {
|
|
681
672
|
host,
|
|
682
673
|
'x-amz-date': dtStr,
|
|
@@ -695,7 +686,7 @@ class AWSAppSyncRealTimeProvider {
|
|
|
695
686
|
method: 'POST',
|
|
696
687
|
headers: { ...constants_1.AWS_APPSYNC_REALTIME_HEADERS },
|
|
697
688
|
};
|
|
698
|
-
const
|
|
689
|
+
const signed_params = (0, aws_client_utils_1.signRequest)({
|
|
699
690
|
headers: request.headers,
|
|
700
691
|
method: request.method,
|
|
701
692
|
url: new utils_1.AmplifyUrl(request.url),
|
|
@@ -706,7 +697,7 @@ class AWSAppSyncRealTimeProvider {
|
|
|
706
697
|
signingRegion: endpointInfo.region,
|
|
707
698
|
signingService: endpointInfo.service,
|
|
708
699
|
});
|
|
709
|
-
return
|
|
700
|
+
return signed_params.headers;
|
|
710
701
|
}
|
|
711
702
|
_customAuthHeader({ host, additionalCustomHeaders, }) {
|
|
712
703
|
/**
|
|
@@ -714,7 +705,7 @@ class AWSAppSyncRealTimeProvider {
|
|
|
714
705
|
* the headers that are returned by that function will already have been
|
|
715
706
|
* provided before this function is called.
|
|
716
707
|
*/
|
|
717
|
-
if (!additionalCustomHeaders?.Authorization) {
|
|
708
|
+
if (!additionalCustomHeaders?.['Authorization']) {
|
|
718
709
|
throw new Error('No auth token specified');
|
|
719
710
|
}
|
|
720
711
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/Providers/AWSAppSyncRealTimeProvider/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AWSAppSyncRealTimeProvider = 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 aws_client_utils_1 = require(\"@aws-amplify/core/internals/aws-client-utils\");\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 logger = new core_1.ConsoleLogger('AWSAppSyncRealTimeProvider');\nconst dispatchApiEvent = (payload) => {\n core_1.Hub.dispatch('api', payload, 'PubSub', constants_1.AMPLIFY_SYMBOL);\n};\nconst standardDomainPattern = /^https:\\/\\/\\w{26}\\.appsync-api\\.\\w{2}(?:(?:-\\w{2,})+)-\\d\\.amazonaws.com(?:\\.cn)?\\/graphql$/i;\nconst customDomainPath = '/realtime';\nclass AWSAppSyncRealTimeProvider {\n constructor() {\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n this.keepAliveTimeout = constants_1.DEFAULT_KEEP_ALIVE_TIMEOUT;\n this.subscriptionObserverMap = new Map();\n this.promiseArray = [];\n this.connectionStateMonitor = new ConnectionStateMonitor_1.ConnectionStateMonitor();\n this.reconnectionMonitor = new ReconnectionMonitor_1.ReconnectionMonitor();\n // Monitor the connection state and pass changes along to Hub\n this.connectionStateMonitorSubscription =\n 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 /**\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 }\n getNewWebSocket(url, protocol) {\n return new WebSocket(url, protocol);\n }\n getProviderName() {\n return 'AWSAppSyncRealTimeProvider';\n }\n // Check if url matches standard domain pattern\n isCustomDomain(url) {\n return url.match(standardDomainPattern) === null;\n }\n subscribe(options, customUserAgentDetails) {\n const { appSyncGraphqlEndpoint, region, query, variables, authenticationType, additionalHeaders, apiKey, authToken, libraryConfigHeaders, } = options || {};\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 }\n else {\n let subscriptionStartActive = false;\n const subscriptionId = (0, utils_1.amplifyUuid)();\n const startSubscription = () => {\n if (!subscriptionStartActive) {\n subscriptionStartActive = true;\n const startSubscriptionPromise = this._startSubscriptionWithAWSAppSyncRealTime({\n options: {\n query,\n variables,\n region,\n authenticationType,\n appSyncGraphqlEndpoint,\n additionalHeaders,\n apiKey,\n authToken,\n libraryConfigHeaders,\n },\n observer,\n subscriptionId,\n customUserAgentDetails,\n }).catch(err => {\n logger.debug(`${PubSub_1.CONTROL_MSG.REALTIME_SUBSCRIPTION_INIT_ERROR}: ${err}`);\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);\n });\n startSubscriptionPromise.finally(() => {\n subscriptionStartActive = 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 // 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 logger.debug(`Error while unsubscribing ${err}`);\n }\n finally {\n this._removeSubscriptionObserver(subscriptionId);\n }\n };\n }\n });\n }\n async _startSubscriptionWithAWSAppSyncRealTime({ options, observer, subscriptionId, customUserAgentDetails, }) {\n const { appSyncGraphqlEndpoint, authenticationType, query, variables, apiKey, region, libraryConfigHeaders = () => ({}), additionalHeaders = {}, authToken, } = options;\n let additionalCustomHeaders = {};\n if (typeof additionalHeaders === 'function') {\n const requestOptions = {\n url: appSyncGraphqlEndpoint || '',\n queryString: query || '',\n };\n additionalCustomHeaders = await additionalHeaders(requestOptions);\n }\n else {\n additionalCustomHeaders = additionalHeaders;\n }\n // if an authorization header is set, have the explicit authToken take precedence\n if (authToken) {\n additionalCustomHeaders = {\n ...additionalCustomHeaders,\n Authorization: authToken,\n };\n }\n const subscriptionState = constants_1.SUBSCRIPTION_STATUS.PENDING;\n const data = {\n query,\n variables,\n };\n // Having a subscription id map will make it simple to forward messages received\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n query: query ?? '',\n variables: variables ?? {},\n subscriptionState,\n startAckTimeoutId: undefined,\n });\n // Preparing payload for subscription message\n const dataString = JSON.stringify(data);\n const headerObj = {\n ...(await this._awsRealTimeHeaderBasedAuth({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n payload: dataString,\n canonicalUri: '',\n region,\n additionalCustomHeaders,\n })),\n ...(await libraryConfigHeaders()),\n ...additionalCustomHeaders,\n [utils_1.USER_AGENT_HEADER]: (0, utils_1.getAmplifyUserAgent)(customUserAgentDetails),\n };\n const subscriptionMessage = {\n id: subscriptionId,\n payload: {\n data: dataString,\n extensions: {\n authorization: {\n ...headerObj,\n },\n },\n },\n type: constants_1.MESSAGE_TYPES.GQL_START,\n };\n const stringToAWSRealTime = JSON.stringify(subscriptionMessage);\n try {\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 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,\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(stringToAWSRealTime);\n }\n }\n // Log logic for start subscription failures\n _logStartSubscriptionError(subscriptionId, observer, err) {\n logger.debug({ err });\n const message = String(err.message ?? '');\n // Resolving to give the state observer time to propogate the update\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);\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 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 = {\n id: subscriptionId,\n type: constants_1.MESSAGE_TYPES.GQL_STOP,\n };\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 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 logger.debug('closing WebSocket...');\n if (this.keepAliveTimeoutId) {\n clearTimeout(this.keepAliveTimeoutId);\n }\n if (this.keepAliveAlertTimeoutId) {\n clearTimeout(this.keepAliveAlertTimeoutId);\n }\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.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);\n }\n }\n _handleIncomingSubscriptionMessage(message) {\n if (typeof message.data !== 'string') {\n return;\n }\n logger.debug(`subscription message from AWS AppSync RealTime: ${message.data}`);\n const { id = '', payload, type, } = JSON.parse(String(message.data));\n const { observer = null, query = '', variables = {}, startAckTimeoutId, subscriptionReadyCallback, subscriptionFailedCallback, } = this.subscriptionObserverMap.get(id) || {};\n logger.debug({ id, observer, query, variables });\n if (type === constants_1.MESSAGE_TYPES.GQL_DATA && payload && payload.data) {\n if (observer) {\n observer.next(payload);\n }\n else {\n logger.debug(`observer not found for id: ${id}`);\n }\n return;\n }\n if (type === constants_1.MESSAGE_TYPES.GQL_START_ACK) {\n 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 if (this.keepAliveTimeoutId)\n clearTimeout(this.keepAliveTimeoutId);\n if (this.keepAliveAlertTimeoutId)\n clearTimeout(this.keepAliveAlertTimeoutId);\n this.keepAliveTimeoutId = setTimeout(() => {\n this._errorDisconnect(PubSub_1.CONTROL_MSG.TIMEOUT_DISCONNECT);\n }, this.keepAliveTimeout);\n this.keepAliveAlertTimeoutId = setTimeout(() => {\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.KEEP_ALIVE_MISSED);\n }, constants_1.DEFAULT_KEEP_ALIVE_ALERT_TIMEOUT);\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.KEEP_ALIVE);\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 logger.debug(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload)}`);\n observer.error({\n errors: [\n {\n ...new graphql_1.GraphQLError(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload)}`),\n },\n ],\n });\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n if (typeof subscriptionFailedCallback === 'function') {\n subscriptionFailedCallback();\n }\n }\n }\n }\n _errorDisconnect(msg) {\n logger.debug(`Disconnect error: ${msg}`);\n if (this.awsRealTimeSocket) {\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);\n this.awsRealTimeSocket.close();\n }\n this.socketStatus = constants_1.SOCKET_STATUS.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.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);\n 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 const payloadString = '{}';\n const authHeader = await this._awsRealTimeHeaderBasedAuth({\n authenticationType,\n payload: payloadString,\n canonicalUri: '/connect',\n apiKey,\n appSyncGraphqlEndpoint,\n region,\n additionalCustomHeaders,\n });\n const headerString = authHeader ? JSON.stringify(authHeader) : '';\n const headerQs = utils_1.base64Encoder.convert(headerString);\n const payloadQs = utils_1.base64Encoder.convert(payloadString);\n let discoverableEndpoint = appSyncGraphqlEndpoint ?? '';\n if (this.isCustomDomain(discoverableEndpoint)) {\n discoverableEndpoint =\n discoverableEndpoint.concat(customDomainPath);\n }\n else {\n discoverableEndpoint = discoverableEndpoint\n .replace('appsync-api', 'appsync-realtime-api')\n .replace('gogi-beta', 'grt-beta');\n }\n // Creating websocket url with required query strings\n const protocol = 'wss://';\n discoverableEndpoint = discoverableEndpoint\n .replace('https://', protocol)\n .replace('http://', protocol);\n const awsRealTimeUrl = `${discoverableEndpoint}?header=${headerQs}&payload=${payloadQs}`;\n await this._initializeRetryableHandshake(awsRealTimeUrl);\n this.promiseArray.forEach(({ res }) => {\n logger.debug('Notifying connection successful');\n res();\n });\n this.socketStatus = constants_1.SOCKET_STATUS.READY;\n this.promiseArray = [];\n }\n catch (err) {\n 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 _initializeRetryableHandshake(awsRealTimeUrl) {\n logger.debug(`Initializaling retryable Handshake`);\n await (0, utils_1.jitteredExponentialRetry)(this._initializeHandshake.bind(this), [awsRealTimeUrl], constants_1.MAX_DELAY_MS);\n }\n async _initializeHandshake(awsRealTimeUrl) {\n logger.debug(`Initializing handshake ${awsRealTimeUrl}`);\n // Because connecting the socket is async, is waiting until connection is open\n // Step 1: connect websocket\n try {\n await (() => {\n return new Promise((resolve, reject) => {\n const newSocket = this.getNewWebSocket(awsRealTimeUrl, 'graphql-ws');\n newSocket.onerror = () => {\n logger.debug(`WebSocket connection error`);\n };\n newSocket.onclose = () => {\n reject(new Error('Connection handshake error'));\n };\n newSocket.onopen = () => {\n this.awsRealTimeSocket = newSocket;\n resolve();\n };\n });\n })();\n // Step 2: wait for ack from AWS AppSyncReaTime after sending init\n await (() => {\n return new Promise((resolve, reject) => {\n if (this.awsRealTimeSocket) {\n let ackOk = false;\n this.awsRealTimeSocket.onerror = error => {\n logger.debug(`WebSocket error ${JSON.stringify(error)}`);\n };\n this.awsRealTimeSocket.onclose = event => {\n logger.debug(`WebSocket closed ${event.reason}`);\n reject(new Error(JSON.stringify(event)));\n };\n this.awsRealTimeSocket.onmessage = (message) => {\n if (typeof message.data !== 'string') {\n return;\n }\n logger.debug(`subscription message from AWS AppSyncRealTime: ${message.data} `);\n const data = JSON.parse(message.data);\n const { type, payload: { connectionTimeoutMs = constants_1.DEFAULT_KEEP_ALIVE_TIMEOUT, } = {}, } = data;\n if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_ACK) {\n ackOk = true;\n if (this.awsRealTimeSocket) {\n this.keepAliveTimeout = connectionTimeoutMs;\n this.awsRealTimeSocket.onmessage =\n this._handleIncomingSubscriptionMessage.bind(this);\n this.awsRealTimeSocket.onerror = err => {\n logger.debug(err);\n this._errorDisconnect(PubSub_1.CONTROL_MSG.CONNECTION_CLOSED);\n };\n this.awsRealTimeSocket.onclose = event => {\n logger.debug(`WebSocket closed ${event.reason}`);\n this._errorDisconnect(PubSub_1.CONTROL_MSG.CONNECTION_CLOSED);\n };\n }\n resolve('Cool, connected to AWS AppSyncRealTime');\n return;\n }\n if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_ERROR) {\n const { payload: { errors: [{ errorType = '', errorCode = 0 } = {}] = [], } = {}, } = 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 })();\n }\n catch (err) {\n const { errorType, errorCode } = err;\n if (constants_1.NON_RETRYABLE_CODES.includes(errorCode)) {\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 async _awsRealTimeHeaderBasedAuth({ apiKey, authenticationType, payload, canonicalUri, appSyncGraphqlEndpoint, region, additionalCustomHeaders, }) {\n const headerHandler = {\n apiKey: this._awsRealTimeApiKeyHeader.bind(this),\n iam: this._awsRealTimeIAMHeader.bind(this),\n oidc: this._awsAuthTokenHeader.bind(this),\n userPool: this._awsAuthTokenHeader.bind(this),\n lambda: this._customAuthHeader,\n none: this._customAuthHeader,\n };\n if (!authenticationType || !headerHandler[authenticationType]) {\n logger.debug(`Authentication type ${authenticationType} not supported`);\n return undefined;\n }\n else {\n const handler = headerHandler[authenticationType];\n const host = appSyncGraphqlEndpoint\n ? new utils_1.AmplifyUrl(appSyncGraphqlEndpoint).host\n : undefined;\n logger.debug(`Authenticating with ${JSON.stringify(authenticationType)}`);\n let resolvedApiKey;\n if (authenticationType === 'apiKey') {\n resolvedApiKey = apiKey;\n }\n const result = await handler({\n payload,\n canonicalUri,\n appSyncGraphqlEndpoint,\n apiKey: resolvedApiKey,\n region,\n host,\n additionalCustomHeaders,\n });\n return result;\n }\n }\n async _awsAuthTokenHeader({ host }) {\n const session = await (0, core_1.fetchAuthSession)();\n return {\n Authorization: session?.tokens?.accessToken?.toString(),\n host,\n };\n }\n async _awsRealTimeApiKeyHeader({ apiKey, host, }) {\n const dt = new Date();\n const dtStr = dt.toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n return {\n host,\n 'x-amz-date': dtStr,\n 'x-api-key': apiKey,\n };\n }\n async _awsRealTimeIAMHeader({ payload, canonicalUri, appSyncGraphqlEndpoint, region, }) {\n const endpointInfo = {\n region,\n service: 'appsync',\n };\n const creds = (await (0, core_1.fetchAuthSession)()).credentials;\n const request = {\n url: `${appSyncGraphqlEndpoint}${canonicalUri}`,\n data: payload,\n method: 'POST',\n headers: { ...constants_1.AWS_APPSYNC_REALTIME_HEADERS },\n };\n const signedParams = (0, aws_client_utils_1.signRequest)({\n headers: request.headers,\n method: request.method,\n url: new utils_1.AmplifyUrl(request.url),\n body: request.data,\n }, {\n // TODO: What do we need to do to remove these !'s?\n credentials: creds,\n signingRegion: endpointInfo.region,\n signingService: endpointInfo.service,\n });\n return signedParams.headers;\n }\n _customAuthHeader({ host, additionalCustomHeaders, }) {\n /**\n * If `additionalHeaders` was provided to the subscription as a function,\n * the headers that are returned by that function will already have been\n * provided before this function is called.\n */\n if (!additionalCustomHeaders?.Authorization) {\n throw new Error('No auth token specified');\n }\n return {\n Authorization: additionalCustomHeaders.Authorization,\n host,\n };\n }\n}\nexports.AWSAppSyncRealTimeProvider = AWSAppSyncRealTimeProvider;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/Providers/AWSAppSyncRealTimeProvider/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AWSAppSyncRealTimeProvider = 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 aws_client_utils_1 = require(\"@aws-amplify/core/internals/aws-client-utils\");\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 logger = new core_1.ConsoleLogger('AWSAppSyncRealTimeProvider');\nconst dispatchApiEvent = (payload) => {\n core_1.Hub.dispatch('api', payload, 'PubSub', constants_1.AMPLIFY_SYMBOL);\n};\nconst standardDomainPattern = /^https:\\/\\/\\w{26}\\.appsync\\-api\\.\\w{2}(?:(?:\\-\\w{2,})+)\\-\\d\\.amazonaws.com(?:\\.cn)?\\/graphql$/i;\nconst customDomainPath = '/realtime';\nclass AWSAppSyncRealTimeProvider {\n constructor(options = {}) {\n this.socketStatus = constants_1.SOCKET_STATUS.CLOSED;\n this.keepAliveTimeout = constants_1.DEFAULT_KEEP_ALIVE_TIMEOUT;\n this.subscriptionObserverMap = new Map();\n this.promiseArray = [];\n this.connectionStateMonitor = new ConnectionStateMonitor_1.ConnectionStateMonitor();\n this.reconnectionMonitor = new ReconnectionMonitor_1.ReconnectionMonitor();\n // Monitor the connection state and pass changes along to Hub\n this.connectionStateMonitorSubscription =\n 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 /**\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 }\n getNewWebSocket(url, protocol) {\n return new WebSocket(url, protocol);\n }\n getProviderName() {\n return 'AWSAppSyncRealTimeProvider';\n }\n // Check if url matches standard domain pattern\n isCustomDomain(url) {\n return url.match(standardDomainPattern) === null;\n }\n subscribe(options, customUserAgentDetails) {\n const { appSyncGraphqlEndpoint, region, query, variables, authenticationType, additionalHeaders, apiKey, authToken, libraryConfigHeaders, } = options || {};\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 }\n else {\n let subscriptionStartActive = false;\n const subscriptionId = (0, utils_1.amplifyUuid)();\n const startSubscription = () => {\n if (!subscriptionStartActive) {\n subscriptionStartActive = true;\n const startSubscriptionPromise = this._startSubscriptionWithAWSAppSyncRealTime({\n options: {\n query,\n variables,\n region,\n authenticationType,\n appSyncGraphqlEndpoint,\n additionalHeaders,\n apiKey,\n authToken,\n libraryConfigHeaders,\n },\n observer,\n subscriptionId,\n customUserAgentDetails,\n }).catch(err => {\n logger.debug(`${PubSub_1.CONTROL_MSG.REALTIME_SUBSCRIPTION_INIT_ERROR}: ${err}`);\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);\n });\n startSubscriptionPromise.finally(() => {\n subscriptionStartActive = false;\n });\n }\n };\n let reconnectSubscription;\n // Add an observable to the reconnection list to manage reconnection for this subscription\n reconnectSubscription = new rxjs_1.Observable(observer => {\n this.reconnectionMonitor.addObserver(observer);\n }).subscribe(() => {\n startSubscription();\n });\n startSubscription();\n return async () => {\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 logger.debug(`Error while unsubscribing ${err}`);\n }\n finally {\n this._removeSubscriptionObserver(subscriptionId);\n }\n };\n }\n });\n }\n async _startSubscriptionWithAWSAppSyncRealTime({ options, observer, subscriptionId, customUserAgentDetails, }) {\n const { appSyncGraphqlEndpoint, authenticationType, query, variables, apiKey, region, libraryConfigHeaders = () => ({}), additionalHeaders = {}, authToken, } = options;\n let additionalCustomHeaders = {};\n if (typeof additionalHeaders === 'function') {\n const requestOptions = {\n url: appSyncGraphqlEndpoint || '',\n queryString: query || '',\n };\n additionalCustomHeaders = await additionalHeaders(requestOptions);\n }\n else {\n additionalCustomHeaders = additionalHeaders;\n }\n // if an authorization header is set, have the explicit authToken take precedence\n if (authToken) {\n additionalCustomHeaders = {\n ...additionalCustomHeaders,\n Authorization: authToken,\n };\n }\n const subscriptionState = constants_1.SUBSCRIPTION_STATUS.PENDING;\n const data = {\n query,\n variables,\n };\n // Having a subscription id map will make it simple to forward messages received\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n query: query ?? '',\n variables: variables ?? {},\n subscriptionState,\n startAckTimeoutId: undefined,\n });\n // Preparing payload for subscription message\n const dataString = JSON.stringify(data);\n const headerObj = {\n ...(await this._awsRealTimeHeaderBasedAuth({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n payload: dataString,\n canonicalUri: '',\n region,\n additionalCustomHeaders,\n })),\n ...(await libraryConfigHeaders()),\n ...additionalCustomHeaders,\n [utils_1.USER_AGENT_HEADER]: (0, utils_1.getAmplifyUserAgent)(customUserAgentDetails),\n };\n const subscriptionMessage = {\n id: subscriptionId,\n payload: {\n data: dataString,\n extensions: {\n authorization: {\n ...headerObj,\n },\n },\n },\n type: constants_1.MESSAGE_TYPES.GQL_START,\n };\n const stringToAWSRealTime = JSON.stringify(subscriptionMessage);\n try {\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 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,\n query: query ?? '',\n variables: variables ?? {},\n subscriptionReadyCallback,\n subscriptionFailedCallback,\n startAckTimeoutId: setTimeout(() => {\n this._timeoutStartSubscriptionAck.call(this, subscriptionId);\n }, constants_1.START_ACK_TIMEOUT),\n });\n if (this.awsRealTimeSocket) {\n this.awsRealTimeSocket.send(stringToAWSRealTime);\n }\n }\n // Log logic for start subscription failures\n _logStartSubscriptionError(subscriptionId, observer, err) {\n logger.debug({ err });\n const message = String(err.message ?? '');\n // Resolving to give the state observer time to propogate the update\n Promise.resolve(this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED));\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 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((res, rej) => {\n const { observer, subscriptionState, variables, query } = subscriptionObserver;\n this.subscriptionObserverMap.set(subscriptionId, {\n observer,\n subscriptionState,\n variables,\n query,\n subscriptionReadyCallback: res,\n subscriptionFailedCallback: rej,\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 = {\n id: subscriptionId,\n type: constants_1.MESSAGE_TYPES.GQL_STOP,\n };\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 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 logger.debug('closing WebSocket...');\n if (this.keepAliveTimeoutId) {\n clearTimeout(this.keepAliveTimeoutId);\n }\n if (this.keepAliveAlertTimeoutId) {\n clearTimeout(this.keepAliveAlertTimeoutId);\n }\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.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);\n }\n }\n _handleIncomingSubscriptionMessage(message) {\n if (typeof message.data !== 'string') {\n return;\n }\n logger.debug(`subscription message from AWS AppSync RealTime: ${message.data}`);\n const { id = '', payload, type, } = JSON.parse(String(message.data));\n const { observer = null, query = '', variables = {}, startAckTimeoutId, subscriptionReadyCallback, subscriptionFailedCallback, } = this.subscriptionObserverMap.get(id) || {};\n logger.debug({ id, observer, query, variables });\n if (type === constants_1.MESSAGE_TYPES.GQL_DATA && payload && payload.data) {\n if (observer) {\n observer.next(payload);\n }\n else {\n logger.debug(`observer not found for id: ${id}`);\n }\n return;\n }\n if (type === constants_1.MESSAGE_TYPES.GQL_START_ACK) {\n 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 if (this.keepAliveTimeoutId)\n clearTimeout(this.keepAliveTimeoutId);\n if (this.keepAliveAlertTimeoutId)\n clearTimeout(this.keepAliveAlertTimeoutId);\n this.keepAliveTimeoutId = setTimeout(() => this._errorDisconnect(PubSub_1.CONTROL_MSG.TIMEOUT_DISCONNECT), this.keepAliveTimeout);\n this.keepAliveAlertTimeoutId = setTimeout(() => {\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.KEEP_ALIVE_MISSED);\n }, constants_1.DEFAULT_KEEP_ALIVE_ALERT_TIMEOUT);\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.KEEP_ALIVE);\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 logger.debug(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload)}`);\n observer.error({\n errors: [\n {\n ...new graphql_1.GraphQLError(`${PubSub_1.CONTROL_MSG.CONNECTION_FAILED}: ${JSON.stringify(payload)}`),\n },\n ],\n });\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n if (typeof subscriptionFailedCallback === 'function') {\n subscriptionFailedCallback();\n }\n }\n }\n }\n _errorDisconnect(msg) {\n logger.debug(`Disconnect error: ${msg}`);\n if (this.awsRealTimeSocket) {\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);\n this.awsRealTimeSocket.close();\n }\n this.socketStatus = constants_1.SOCKET_STATUS.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.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CLOSED);\n 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 return new Promise(async (res, rej) => {\n this.promiseArray.push({ res, rej });\n if (this.socketStatus === constants_1.SOCKET_STATUS.CLOSED) {\n try {\n this.socketStatus = constants_1.SOCKET_STATUS.CONNECTING;\n const payloadString = '{}';\n const authHeader = await this._awsRealTimeHeaderBasedAuth({\n authenticationType,\n payload: payloadString,\n canonicalUri: '/connect',\n apiKey,\n appSyncGraphqlEndpoint,\n region,\n additionalCustomHeaders,\n });\n const headerString = authHeader ? JSON.stringify(authHeader) : '';\n const headerQs = utils_1.base64Encoder.convert(headerString);\n const payloadQs = utils_1.base64Encoder.convert(payloadString);\n let discoverableEndpoint = appSyncGraphqlEndpoint ?? '';\n if (this.isCustomDomain(discoverableEndpoint)) {\n discoverableEndpoint =\n discoverableEndpoint.concat(customDomainPath);\n }\n else {\n discoverableEndpoint = discoverableEndpoint\n .replace('appsync-api', 'appsync-realtime-api')\n .replace('gogi-beta', 'grt-beta');\n }\n // Creating websocket url with required query strings\n const protocol = 'wss://';\n discoverableEndpoint = discoverableEndpoint\n .replace('https://', protocol)\n .replace('http://', protocol);\n const awsRealTimeUrl = `${discoverableEndpoint}?header=${headerQs}&payload=${payloadQs}`;\n await this._initializeRetryableHandshake(awsRealTimeUrl);\n this.promiseArray.forEach(({ res }) => {\n logger.debug('Notifying connection successful');\n res();\n });\n this.socketStatus = constants_1.SOCKET_STATUS.READY;\n this.promiseArray = [];\n }\n catch (err) {\n logger.debug('Connection exited with', err);\n this.promiseArray.forEach(({ rej }) => rej(err));\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 _initializeRetryableHandshake(awsRealTimeUrl) {\n logger.debug(`Initializaling retryable Handshake`);\n await (0, utils_1.jitteredExponentialRetry)(this._initializeHandshake.bind(this), [awsRealTimeUrl], constants_1.MAX_DELAY_MS);\n }\n async _initializeHandshake(awsRealTimeUrl) {\n logger.debug(`Initializing handshake ${awsRealTimeUrl}`);\n // Because connecting the socket is async, is waiting until connection is open\n // Step 1: connect websocket\n try {\n await (() => {\n return new Promise((res, rej) => {\n const newSocket = this.getNewWebSocket(awsRealTimeUrl, 'graphql-ws');\n newSocket.onerror = () => {\n logger.debug(`WebSocket connection error`);\n };\n newSocket.onclose = () => {\n rej(new Error('Connection handshake error'));\n };\n newSocket.onopen = () => {\n this.awsRealTimeSocket = newSocket;\n return res();\n };\n });\n })();\n // Step 2: wait for ack from AWS AppSyncReaTime after sending init\n await (() => {\n return new Promise((res, rej) => {\n if (this.awsRealTimeSocket) {\n let ackOk = false;\n this.awsRealTimeSocket.onerror = error => {\n logger.debug(`WebSocket error ${JSON.stringify(error)}`);\n };\n this.awsRealTimeSocket.onclose = event => {\n logger.debug(`WebSocket closed ${event.reason}`);\n rej(new Error(JSON.stringify(event)));\n };\n this.awsRealTimeSocket.onmessage = (message) => {\n if (typeof message.data !== 'string') {\n return;\n }\n logger.debug(`subscription message from AWS AppSyncRealTime: ${message.data} `);\n const data = JSON.parse(message.data);\n const { type, payload: { connectionTimeoutMs = constants_1.DEFAULT_KEEP_ALIVE_TIMEOUT, } = {}, } = data;\n if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_ACK) {\n ackOk = true;\n if (this.awsRealTimeSocket) {\n this.keepAliveTimeout = connectionTimeoutMs;\n this.awsRealTimeSocket.onmessage =\n this._handleIncomingSubscriptionMessage.bind(this);\n this.awsRealTimeSocket.onerror = err => {\n logger.debug(err);\n this._errorDisconnect(PubSub_1.CONTROL_MSG.CONNECTION_CLOSED);\n };\n this.awsRealTimeSocket.onclose = event => {\n logger.debug(`WebSocket closed ${event.reason}`);\n this._errorDisconnect(PubSub_1.CONTROL_MSG.CONNECTION_CLOSED);\n };\n }\n res('Cool, connected to AWS AppSyncRealTime');\n return;\n }\n if (type === constants_1.MESSAGE_TYPES.GQL_CONNECTION_ERROR) {\n const { payload: { errors: [{ errorType = '', errorCode = 0 } = {}] = [], } = {}, } = data;\n rej({ 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 = (ackOk) => {\n if (!ackOk) {\n this.connectionStateMonitor.record(ConnectionStateMonitor_1.CONNECTION_CHANGE.CONNECTION_FAILED);\n rej(new Error(`Connection timeout: ack from AWSAppSyncRealTime was not received after ${constants_1.CONNECTION_INIT_TIMEOUT} ms`));\n }\n };\n setTimeout(() => checkAckOk(ackOk), constants_1.CONNECTION_INIT_TIMEOUT);\n }\n });\n })();\n }\n catch (err) {\n const { errorType, errorCode } = err;\n if (constants_1.NON_RETRYABLE_CODES.includes(errorCode)) {\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 async _awsRealTimeHeaderBasedAuth({ apiKey, authenticationType, payload, canonicalUri, appSyncGraphqlEndpoint, region, additionalCustomHeaders, }) {\n const headerHandler = {\n apiKey: this._awsRealTimeApiKeyHeader.bind(this),\n iam: this._awsRealTimeIAMHeader.bind(this),\n oidc: this._awsAuthTokenHeader.bind(this),\n userPool: this._awsAuthTokenHeader.bind(this),\n lambda: this._customAuthHeader,\n none: this._customAuthHeader,\n };\n if (!authenticationType || !headerHandler[authenticationType]) {\n logger.debug(`Authentication type ${authenticationType} not supported`);\n return undefined;\n }\n else {\n const handler = headerHandler[authenticationType];\n const host = appSyncGraphqlEndpoint\n ? new utils_1.AmplifyUrl(appSyncGraphqlEndpoint).host\n : undefined;\n logger.debug(`Authenticating with ${JSON.stringify(authenticationType)}`);\n let resolvedApiKey;\n if (authenticationType === 'apiKey') {\n resolvedApiKey = apiKey;\n }\n const result = await handler({\n payload,\n canonicalUri,\n appSyncGraphqlEndpoint,\n apiKey: resolvedApiKey,\n region,\n host,\n additionalCustomHeaders,\n });\n return result;\n }\n }\n async _awsAuthTokenHeader({ host }) {\n const session = await (0, core_1.fetchAuthSession)();\n return {\n Authorization: session?.tokens?.accessToken?.toString(),\n host,\n };\n }\n async _awsRealTimeApiKeyHeader({ apiKey, host, }) {\n const dt = new Date();\n const dtStr = dt.toISOString().replace(/[:\\-]|\\.\\d{3}/g, '');\n return {\n host,\n 'x-amz-date': dtStr,\n 'x-api-key': apiKey,\n };\n }\n async _awsRealTimeIAMHeader({ payload, canonicalUri, appSyncGraphqlEndpoint, region, }) {\n const endpointInfo = {\n region,\n service: 'appsync',\n };\n const creds = (await (0, core_1.fetchAuthSession)()).credentials;\n const request = {\n url: `${appSyncGraphqlEndpoint}${canonicalUri}`,\n data: payload,\n method: 'POST',\n headers: { ...constants_1.AWS_APPSYNC_REALTIME_HEADERS },\n };\n const signed_params = (0, aws_client_utils_1.signRequest)({\n headers: request.headers,\n method: request.method,\n url: new utils_1.AmplifyUrl(request.url),\n body: request.data,\n }, {\n // TODO: What do we need to do to remove these !'s?\n credentials: creds,\n signingRegion: endpointInfo.region,\n signingService: endpointInfo.service,\n });\n return signed_params.headers;\n }\n _customAuthHeader({ host, additionalCustomHeaders, }) {\n /**\n * If `additionalHeaders` was provided to the subscription as a function,\n * the headers that are returned by that function will already have been\n * provided before this function is called.\n */\n if (!additionalCustomHeaders?.['Authorization']) {\n throw new Error('No auth token specified');\n }\n return {\n Authorization: additionalCustomHeaders.Authorization,\n host,\n };\n }\n}\nexports.AWSAppSyncRealTimeProvider = AWSAppSyncRealTimeProvider;\n"],"names":[],"mappings":"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"}
|