@aws-amplify/api-graphql 4.3.4-email-mfa-test.4e655bc.0 → 4.3.4-events.d7ac57c.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 (99) hide show
  1. package/dist/cjs/Providers/AWSAppSyncEventsProvider/index.js +94 -0
  2. package/dist/cjs/Providers/AWSAppSyncEventsProvider/index.js.map +1 -0
  3. package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js +35 -732
  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 +623 -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 +3 -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 +91 -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 +58 -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/cjs/utils/resolveConfig.js +18 -1
  32. package/dist/cjs/utils/resolveConfig.js.map +1 -1
  33. package/dist/esm/Providers/AWSAppSyncEventsProvider/index.d.ts +41 -0
  34. package/dist/esm/Providers/AWSAppSyncEventsProvider/index.mjs +92 -0
  35. package/dist/esm/Providers/AWSAppSyncEventsProvider/index.mjs.map +1 -0
  36. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.d.ts +24 -71
  37. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs +35 -732
  38. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs.map +1 -1
  39. package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.d.ts +21 -0
  40. package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.mjs +106 -0
  41. package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.mjs.map +1 -0
  42. package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.d.ts +8 -0
  43. package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.mjs +97 -0
  44. package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.mjs.map +1 -0
  45. package/dist/esm/Providers/AWSWebSocketProvider/index.d.ts +83 -0
  46. package/dist/esm/Providers/AWSWebSocketProvider/index.mjs +621 -0
  47. package/dist/esm/Providers/AWSWebSocketProvider/index.mjs.map +1 -0
  48. package/dist/esm/Providers/constants.d.ts +33 -3
  49. package/dist/esm/Providers/constants.mjs +32 -2
  50. package/dist/esm/Providers/constants.mjs.map +1 -1
  51. package/dist/esm/index.d.ts +2 -0
  52. package/dist/esm/index.mjs +2 -0
  53. package/dist/esm/index.mjs.map +1 -1
  54. package/dist/esm/internals/InternalGraphQLAPI.d.ts +0 -1
  55. package/dist/esm/internals/InternalGraphQLAPI.mjs +9 -68
  56. package/dist/esm/internals/InternalGraphQLAPI.mjs.map +1 -1
  57. package/dist/esm/internals/events/appsyncRequest.d.ts +14 -0
  58. package/dist/esm/internals/events/appsyncRequest.mjs +96 -0
  59. package/dist/esm/internals/events/appsyncRequest.mjs.map +1 -0
  60. package/dist/esm/internals/events/index.d.ts +17 -0
  61. package/dist/esm/internals/events/index.mjs +87 -0
  62. package/dist/esm/internals/events/index.mjs.map +1 -0
  63. package/dist/esm/internals/events/types.d.ts +23 -0
  64. package/dist/esm/internals/events/types.mjs +2 -0
  65. package/dist/esm/internals/events/types.mjs.map +1 -0
  66. package/dist/esm/internals/events/utils.d.ts +16 -0
  67. package/dist/esm/internals/events/utils.mjs +54 -0
  68. package/dist/esm/internals/events/utils.mjs.map +1 -0
  69. package/dist/esm/internals/graphqlAuth.d.ts +3 -0
  70. package/dist/esm/internals/graphqlAuth.mjs +64 -0
  71. package/dist/esm/internals/graphqlAuth.mjs.map +1 -0
  72. package/dist/esm/internals/graphqlRequest.d.ts +3 -0
  73. package/dist/esm/internals/graphqlRequest.mjs +18 -0
  74. package/dist/esm/internals/graphqlRequest.mjs.map +1 -0
  75. package/dist/esm/utils/ConnectionStateMonitor.d.ts +29 -1
  76. package/dist/esm/utils/ReconnectionMonitor.d.ts +1 -1
  77. package/dist/esm/utils/ReconnectionMonitor.mjs +1 -1
  78. package/dist/esm/utils/ReconnectionMonitor.mjs.map +1 -1
  79. package/dist/esm/utils/resolveConfig.d.ts +9 -0
  80. package/dist/esm/utils/resolveConfig.mjs +17 -1
  81. package/dist/esm/utils/resolveConfig.mjs.map +1 -1
  82. package/package.json +4 -4
  83. package/src/Providers/AWSAppSyncEventsProvider/index.ts +184 -0
  84. package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +58 -1051
  85. package/src/Providers/AWSWebSocketProvider/appsyncUrl.ts +151 -0
  86. package/src/Providers/AWSWebSocketProvider/authHeaders.ts +146 -0
  87. package/src/Providers/AWSWebSocketProvider/index.ts +925 -0
  88. package/src/Providers/constants.ts +32 -2
  89. package/src/index.ts +2 -0
  90. package/src/internals/InternalGraphQLAPI.ts +15 -102
  91. package/src/internals/events/appsyncRequest.ts +173 -0
  92. package/src/internals/events/index.ts +163 -0
  93. package/src/internals/events/types.ts +35 -0
  94. package/src/internals/events/utils.ts +81 -0
  95. package/src/internals/graphqlAuth.ts +87 -0
  96. package/src/internals/graphqlRequest.ts +30 -0
  97. package/src/utils/ConnectionStateMonitor.ts +2 -13
  98. package/src/utils/ReconnectionMonitor.ts +1 -1
  99. package/src/utils/resolveConfig.ts +23 -0
@@ -0,0 +1,184 @@
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
+ // resolved/actual AuthMode values. identityPool gets resolves to IAM upstream in InternalGraphQLAPI._graphqlSubscribe
16
+ type ResolvedGraphQLAuthModes = Exclude<GraphQLAuthMode, 'identityPool'>;
17
+
18
+ interface AWSAppSyncEventProviderOptions {
19
+ appSyncGraphqlEndpoint?: string;
20
+ authenticationType?: ResolvedGraphQLAuthModes;
21
+ query?: string;
22
+ variables?: DocumentType;
23
+ apiKey?: string;
24
+ region?: string;
25
+ libraryConfigHeaders?(): Promise<Record<string, unknown> | Headers>;
26
+ additionalHeaders?: CustomHeaders;
27
+ additionalCustomHeaders?: Record<string, string>;
28
+ authToken?: string;
29
+ }
30
+
31
+ interface DataPayload {
32
+ id: string;
33
+ event: string;
34
+ type: string;
35
+ }
36
+
37
+ interface DataResponse {
38
+ id: string;
39
+ payload: string;
40
+ type: string;
41
+ }
42
+
43
+ const PROVIDER_NAME = 'AWSAppSyncEventsProvider';
44
+
45
+ export class AWSAppSyncEventProvider extends AWSWebSocketProvider {
46
+ constructor() {
47
+ super(PROVIDER_NAME);
48
+ }
49
+
50
+ public async connect(options: AWSAppSyncEventProviderOptions) {
51
+ super.connect(options);
52
+ }
53
+
54
+ public subscribe(
55
+ options?: AWSAppSyncEventProviderOptions,
56
+ customUserAgentDetails?: CustomUserAgentDetails,
57
+ ) {
58
+ return super.subscribe(options, customUserAgentDetails).pipe();
59
+ }
60
+
61
+ public async publish(
62
+ options: AWSAppSyncEventProviderOptions,
63
+ customUserAgentDetails?: CustomUserAgentDetails,
64
+ ) {
65
+ super.publish(options, customUserAgentDetails);
66
+ }
67
+
68
+ protected async _prepareSubscriptionPayload({
69
+ options,
70
+ subscriptionId,
71
+ customUserAgentDetails,
72
+ additionalCustomHeaders,
73
+ libraryConfigHeaders,
74
+ publish,
75
+ }: {
76
+ options: AWSAppSyncEventProviderOptions;
77
+ subscriptionId: string;
78
+ customUserAgentDetails: CustomUserAgentDetails | undefined;
79
+ additionalCustomHeaders: Record<string, string>;
80
+ libraryConfigHeaders: Record<string, string>;
81
+ publish?: boolean;
82
+ }): Promise<string> {
83
+ const {
84
+ appSyncGraphqlEndpoint,
85
+ authenticationType,
86
+ query,
87
+ variables,
88
+ apiKey,
89
+ region,
90
+ } = options;
91
+
92
+ // This will be needed for WS publish
93
+ // const data = {
94
+ // events: [variables],
95
+ // };
96
+
97
+ const serializedData = JSON.stringify([variables]);
98
+
99
+ const headers = {
100
+ ...(await awsRealTimeHeaderBasedAuth({
101
+ apiKey,
102
+ appSyncGraphqlEndpoint,
103
+ authenticationType,
104
+ payload: serializedData,
105
+ canonicalUri: '',
106
+ region,
107
+ additionalCustomHeaders,
108
+ })),
109
+ ...libraryConfigHeaders,
110
+ ...additionalCustomHeaders,
111
+ [USER_AGENT_HEADER]: getAmplifyUserAgent(customUserAgentDetails),
112
+ };
113
+
114
+ // Commented out code will be needed for WS publish
115
+ const subscriptionMessage = {
116
+ id: subscriptionId,
117
+ channel: query,
118
+ // events: [JSON.stringify(variables)],
119
+ authorization: {
120
+ ...headers,
121
+ },
122
+ // payload: {
123
+ // events: serializedData,
124
+ // extensions: {
125
+ // authorization: {
126
+ // ...headers,
127
+ // },
128
+ // },
129
+ // },
130
+ type: publish
131
+ ? MESSAGE_TYPES.EVENT_PUBLISH
132
+ : MESSAGE_TYPES.EVENT_SUBSCRIBE,
133
+ };
134
+
135
+ const serializedSubscriptionMessage = JSON.stringify(subscriptionMessage);
136
+
137
+ return serializedSubscriptionMessage;
138
+ }
139
+
140
+ protected _handleSubscriptionData(
141
+ message: MessageEvent,
142
+ ): [boolean, DataResponse] {
143
+ this.logger.debug(
144
+ `subscription message from AWS AppSync Events: ${message.data}`,
145
+ );
146
+
147
+ const {
148
+ id = '',
149
+ event: payload,
150
+ type,
151
+ }: DataPayload = JSON.parse(String(message.data));
152
+
153
+ const {
154
+ observer = null,
155
+ query = '',
156
+ variables = {},
157
+ } = this.subscriptionObserverMap.get(id) || {};
158
+
159
+ this.logger.debug({ id, observer, query, variables });
160
+
161
+ if (type === MESSAGE_TYPES.DATA && payload) {
162
+ const deserializedEvent = JSON.parse(payload);
163
+ if (observer) {
164
+ observer.next(deserializedEvent);
165
+ } else {
166
+ this.logger.debug(`observer not found for id: ${id}`);
167
+ }
168
+
169
+ return [true, { id, type, payload: deserializedEvent }];
170
+ }
171
+
172
+ return [false, { id, type, payload }];
173
+ }
174
+
175
+ protected _unsubscribeMessage(subscriptionId: string): {
176
+ id: string;
177
+ type: string;
178
+ } {
179
+ return {
180
+ id: subscriptionId,
181
+ type: MESSAGE_TYPES.EVENT_STOP,
182
+ };
183
+ }
184
+ }