@aws-amplify/api-graphql 4.4.3 → 4.4.4-unstable.5d549c3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/cjs/Providers/AWSAppSyncEventsProvider/index.js +98 -0
  2. package/dist/cjs/Providers/AWSAppSyncEventsProvider/index.js.map +1 -0
  3. package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js +34 -731
  4. package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -1
  5. package/dist/cjs/Providers/AWSWebSocketProvider/appsyncUrl.js +112 -0
  6. package/dist/cjs/Providers/AWSWebSocketProvider/appsyncUrl.js.map +1 -0
  7. package/dist/cjs/Providers/AWSWebSocketProvider/authHeaders.js +99 -0
  8. package/dist/cjs/Providers/AWSWebSocketProvider/authHeaders.js.map +1 -0
  9. package/dist/cjs/Providers/AWSWebSocketProvider/index.js +624 -0
  10. package/dist/cjs/Providers/AWSWebSocketProvider/index.js.map +1 -0
  11. package/dist/cjs/Providers/constants.js +32 -2
  12. package/dist/cjs/Providers/constants.js.map +1 -1
  13. package/dist/cjs/index.js +4 -1
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/internals/InternalGraphQLAPI.js +8 -67
  16. package/dist/cjs/internals/InternalGraphQLAPI.js.map +1 -1
  17. package/dist/cjs/internals/events/appsyncRequest.js +97 -0
  18. package/dist/cjs/internals/events/appsyncRequest.js.map +1 -0
  19. package/dist/cjs/internals/events/index.js +97 -0
  20. package/dist/cjs/internals/events/index.js.map +1 -0
  21. package/dist/cjs/internals/events/types.js +6 -0
  22. package/dist/cjs/internals/events/types.js.map +1 -0
  23. package/dist/cjs/internals/events/utils.js +57 -0
  24. package/dist/cjs/internals/events/utils.js.map +1 -0
  25. package/dist/cjs/internals/graphqlAuth.js +64 -0
  26. package/dist/cjs/internals/graphqlAuth.js.map +1 -0
  27. package/dist/cjs/internals/graphqlRequest.js +20 -0
  28. package/dist/cjs/internals/graphqlRequest.js.map +1 -0
  29. package/dist/cjs/utils/ReconnectionMonitor.js +1 -1
  30. package/dist/cjs/utils/ReconnectionMonitor.js.map +1 -1
  31. package/dist/esm/Providers/AWSAppSyncEventsProvider/index.d.ts +43 -0
  32. package/dist/esm/Providers/AWSAppSyncEventsProvider/index.mjs +97 -0
  33. package/dist/esm/Providers/AWSAppSyncEventsProvider/index.mjs.map +1 -0
  34. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.d.ts +24 -71
  35. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs +34 -731
  36. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs.map +1 -1
  37. package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.d.ts +21 -0
  38. package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.mjs +106 -0
  39. package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.mjs.map +1 -0
  40. package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.d.ts +8 -0
  41. package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.mjs +97 -0
  42. package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.mjs.map +1 -0
  43. package/dist/esm/Providers/AWSWebSocketProvider/index.d.ts +89 -0
  44. package/dist/esm/Providers/AWSWebSocketProvider/index.mjs +622 -0
  45. package/dist/esm/Providers/AWSWebSocketProvider/index.mjs.map +1 -0
  46. package/dist/esm/Providers/constants.d.ts +33 -3
  47. package/dist/esm/Providers/constants.mjs +32 -2
  48. package/dist/esm/Providers/constants.mjs.map +1 -1
  49. package/dist/esm/index.d.ts +3 -0
  50. package/dist/esm/index.mjs +2 -0
  51. package/dist/esm/index.mjs.map +1 -1
  52. package/dist/esm/internals/InternalGraphQLAPI.d.ts +0 -1
  53. package/dist/esm/internals/InternalGraphQLAPI.mjs +9 -68
  54. package/dist/esm/internals/InternalGraphQLAPI.mjs.map +1 -1
  55. package/dist/esm/internals/events/appsyncRequest.d.ts +14 -0
  56. package/dist/esm/internals/events/appsyncRequest.mjs +96 -0
  57. package/dist/esm/internals/events/appsyncRequest.mjs.map +1 -0
  58. package/dist/esm/internals/events/index.d.ts +47 -0
  59. package/dist/esm/internals/events/index.mjs +93 -0
  60. package/dist/esm/internals/events/index.mjs.map +1 -0
  61. package/dist/esm/internals/events/types.d.ts +59 -0
  62. package/dist/esm/internals/events/types.mjs +2 -0
  63. package/dist/esm/internals/events/types.mjs.map +1 -0
  64. package/dist/esm/internals/events/utils.d.ts +16 -0
  65. package/dist/esm/internals/events/utils.mjs +53 -0
  66. package/dist/esm/internals/events/utils.mjs.map +1 -0
  67. package/dist/esm/internals/graphqlAuth.d.ts +3 -0
  68. package/dist/esm/internals/graphqlAuth.mjs +64 -0
  69. package/dist/esm/internals/graphqlAuth.mjs.map +1 -0
  70. package/dist/esm/internals/graphqlRequest.d.ts +3 -0
  71. package/dist/esm/internals/graphqlRequest.mjs +18 -0
  72. package/dist/esm/internals/graphqlRequest.mjs.map +1 -0
  73. package/dist/esm/utils/ConnectionStateMonitor.d.ts +29 -1
  74. package/dist/esm/utils/ReconnectionMonitor.d.ts +1 -1
  75. package/dist/esm/utils/ReconnectionMonitor.mjs +1 -1
  76. package/dist/esm/utils/ReconnectionMonitor.mjs.map +1 -1
  77. package/package.json +4 -4
  78. package/src/Providers/AWSAppSyncEventsProvider/index.ts +192 -0
  79. package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +56 -1049
  80. package/src/Providers/AWSWebSocketProvider/appsyncUrl.ts +151 -0
  81. package/src/Providers/AWSWebSocketProvider/authHeaders.ts +146 -0
  82. package/src/Providers/AWSWebSocketProvider/index.ts +932 -0
  83. package/src/Providers/constants.ts +32 -2
  84. package/src/index.ts +5 -0
  85. package/src/internals/InternalGraphQLAPI.ts +15 -102
  86. package/src/internals/events/appsyncRequest.ts +169 -0
  87. package/src/internals/events/index.ts +161 -0
  88. package/src/internals/events/types.ts +71 -0
  89. package/src/internals/events/utils.ts +77 -0
  90. package/src/internals/graphqlAuth.ts +87 -0
  91. package/src/internals/graphqlRequest.ts +30 -0
  92. package/src/utils/ConnectionStateMonitor.ts +2 -13
  93. package/src/utils/ReconnectionMonitor.ts +1 -1
@@ -0,0 +1,192 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import {
4
+ CustomUserAgentDetails,
5
+ DocumentType,
6
+ GraphQLAuthMode,
7
+ USER_AGENT_HEADER,
8
+ getAmplifyUserAgent,
9
+ } from '@aws-amplify/core/internals/utils';
10
+ import { CustomHeaders } from '@aws-amplify/data-schema/runtime';
11
+
12
+ import { MESSAGE_TYPES } from '../constants';
13
+ import { AWSWebSocketProvider } from '../AWSWebSocketProvider';
14
+ import { awsRealTimeHeaderBasedAuth } from '../AWSWebSocketProvider/authHeaders';
15
+
16
+ // resolved/actual AuthMode values. identityPool gets resolves to IAM upstream in InternalGraphQLAPI._graphqlSubscribe
17
+ type ResolvedGraphQLAuthModes = Exclude<GraphQLAuthMode, 'identityPool'>;
18
+
19
+ interface AWSAppSyncEventProviderOptions {
20
+ appSyncGraphqlEndpoint?: string;
21
+ authenticationType?: ResolvedGraphQLAuthModes;
22
+ query?: string;
23
+ variables?: DocumentType;
24
+ apiKey?: string;
25
+ region?: string;
26
+ libraryConfigHeaders?(): Promise<Record<string, unknown> | Headers>;
27
+ additionalHeaders?: CustomHeaders;
28
+ additionalCustomHeaders?: Record<string, string>;
29
+ authToken?: string;
30
+ }
31
+
32
+ interface DataPayload {
33
+ id: string;
34
+ event: string;
35
+ type: string;
36
+ }
37
+
38
+ interface DataResponse {
39
+ id: string;
40
+ payload: string;
41
+ type: string;
42
+ }
43
+
44
+ const PROVIDER_NAME = 'AWSAppSyncEventsProvider';
45
+ const WS_PROTOCOL_NAME = 'aws-appsync-event-ws';
46
+
47
+ class AWSAppSyncEventProvider extends AWSWebSocketProvider {
48
+ constructor() {
49
+ super({ providerName: PROVIDER_NAME, wsProtocolName: WS_PROTOCOL_NAME });
50
+ }
51
+
52
+ getProviderName() {
53
+ return PROVIDER_NAME;
54
+ }
55
+
56
+ public async connect(options: AWSAppSyncEventProviderOptions) {
57
+ super.connect(options);
58
+ }
59
+
60
+ public subscribe(
61
+ options?: AWSAppSyncEventProviderOptions,
62
+ customUserAgentDetails?: CustomUserAgentDetails,
63
+ ) {
64
+ return super.subscribe(options, customUserAgentDetails).pipe();
65
+ }
66
+
67
+ public async publish(
68
+ options: AWSAppSyncEventProviderOptions,
69
+ customUserAgentDetails?: CustomUserAgentDetails,
70
+ ) {
71
+ super.publish(options, customUserAgentDetails);
72
+ }
73
+
74
+ protected async _prepareSubscriptionPayload({
75
+ options,
76
+ subscriptionId,
77
+ customUserAgentDetails,
78
+ additionalCustomHeaders,
79
+ libraryConfigHeaders,
80
+ publish,
81
+ }: {
82
+ options: AWSAppSyncEventProviderOptions;
83
+ subscriptionId: string;
84
+ customUserAgentDetails: CustomUserAgentDetails | undefined;
85
+ additionalCustomHeaders: Record<string, string>;
86
+ libraryConfigHeaders: Record<string, string>;
87
+ publish?: boolean;
88
+ }): Promise<string> {
89
+ const {
90
+ appSyncGraphqlEndpoint,
91
+ authenticationType,
92
+ query,
93
+ variables,
94
+ apiKey,
95
+ region,
96
+ } = options;
97
+
98
+ // This will be needed for WS publish
99
+ // const data = {
100
+ // events: [variables],
101
+ // };
102
+
103
+ const serializedData = JSON.stringify([variables]);
104
+
105
+ const headers = {
106
+ ...(await awsRealTimeHeaderBasedAuth({
107
+ apiKey,
108
+ appSyncGraphqlEndpoint,
109
+ authenticationType,
110
+ payload: serializedData,
111
+ canonicalUri: '',
112
+ region,
113
+ additionalCustomHeaders,
114
+ })),
115
+ ...libraryConfigHeaders,
116
+ ...additionalCustomHeaders,
117
+ [USER_AGENT_HEADER]: getAmplifyUserAgent(customUserAgentDetails),
118
+ };
119
+
120
+ // Commented out code will be needed for WS publish
121
+ const subscriptionMessage = {
122
+ id: subscriptionId,
123
+ channel: query,
124
+ // events: [JSON.stringify(variables)],
125
+ authorization: {
126
+ ...headers,
127
+ },
128
+ // payload: {
129
+ // events: serializedData,
130
+ // extensions: {
131
+ // authorization: {
132
+ // ...headers,
133
+ // },
134
+ // },
135
+ // },
136
+ type: publish
137
+ ? MESSAGE_TYPES.EVENT_PUBLISH
138
+ : MESSAGE_TYPES.EVENT_SUBSCRIBE,
139
+ };
140
+
141
+ const serializedSubscriptionMessage = JSON.stringify(subscriptionMessage);
142
+
143
+ return serializedSubscriptionMessage;
144
+ }
145
+
146
+ protected _handleSubscriptionData(
147
+ message: MessageEvent,
148
+ ): [boolean, DataResponse] {
149
+ this.logger.debug(
150
+ `subscription message from AWS AppSync Events: ${message.data}`,
151
+ );
152
+
153
+ const {
154
+ id = '',
155
+ event: payload,
156
+ type,
157
+ }: DataPayload = JSON.parse(String(message.data));
158
+
159
+ const {
160
+ observer = null,
161
+ query = '',
162
+ variables = {},
163
+ } = this.subscriptionObserverMap.get(id) || {};
164
+
165
+ this.logger.debug({ id, observer, query, variables });
166
+
167
+ if (type === MESSAGE_TYPES.DATA && payload) {
168
+ const deserializedEvent = JSON.parse(payload);
169
+ if (observer) {
170
+ observer.next(deserializedEvent);
171
+ } else {
172
+ this.logger.debug(`observer not found for id: ${id}`);
173
+ }
174
+
175
+ return [true, { id, type, payload: deserializedEvent }];
176
+ }
177
+
178
+ return [false, { id, type, payload }];
179
+ }
180
+
181
+ protected _unsubscribeMessage(subscriptionId: string): {
182
+ id: string;
183
+ type: string;
184
+ } {
185
+ return {
186
+ id: subscriptionId,
187
+ type: MESSAGE_TYPES.EVENT_STOP,
188
+ };
189
+ }
190
+ }
191
+
192
+ export const AppSyncEventProvider = new AWSAppSyncEventProvider();