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