@aws-amplify/api-graphql 4.4.3 → 4.4.4-events.fade122.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.
- package/dist/cjs/Providers/AWSAppSyncEventsProvider/index.js +98 -0
- package/dist/cjs/Providers/AWSAppSyncEventsProvider/index.js.map +1 -0
- package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js +34 -731
- package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -1
- package/dist/cjs/Providers/AWSWebSocketProvider/appsyncUrl.js +113 -0
- package/dist/cjs/Providers/AWSWebSocketProvider/appsyncUrl.js.map +1 -0
- package/dist/cjs/Providers/AWSWebSocketProvider/authHeaders.js +99 -0
- package/dist/cjs/Providers/AWSWebSocketProvider/authHeaders.js.map +1 -0
- package/dist/cjs/Providers/AWSWebSocketProvider/index.js +624 -0
- package/dist/cjs/Providers/AWSWebSocketProvider/index.js.map +1 -0
- package/dist/cjs/Providers/constants.js +32 -2
- package/dist/cjs/Providers/constants.js.map +1 -1
- package/dist/cjs/index.js +4 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internals/InternalGraphQLAPI.js +8 -67
- package/dist/cjs/internals/InternalGraphQLAPI.js.map +1 -1
- package/dist/cjs/internals/events/appsyncRequest.js +97 -0
- package/dist/cjs/internals/events/appsyncRequest.js.map +1 -0
- package/dist/cjs/internals/events/index.js +97 -0
- package/dist/cjs/internals/events/index.js.map +1 -0
- package/dist/cjs/internals/events/types.js +6 -0
- package/dist/cjs/internals/events/types.js.map +1 -0
- package/dist/cjs/internals/events/utils.js +57 -0
- package/dist/cjs/internals/events/utils.js.map +1 -0
- package/dist/cjs/internals/graphqlAuth.js +64 -0
- package/dist/cjs/internals/graphqlAuth.js.map +1 -0
- package/dist/cjs/internals/graphqlRequest.js +20 -0
- package/dist/cjs/internals/graphqlRequest.js.map +1 -0
- package/dist/cjs/utils/ReconnectionMonitor.js +1 -1
- package/dist/cjs/utils/ReconnectionMonitor.js.map +1 -1
- package/dist/esm/Providers/AWSAppSyncEventsProvider/index.d.ts +43 -0
- package/dist/esm/Providers/AWSAppSyncEventsProvider/index.mjs +97 -0
- package/dist/esm/Providers/AWSAppSyncEventsProvider/index.mjs.map +1 -0
- package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.d.ts +24 -71
- package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs +34 -731
- package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs.map +1 -1
- package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.d.ts +21 -0
- package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.mjs +107 -0
- package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.mjs.map +1 -0
- package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.d.ts +8 -0
- package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.mjs +97 -0
- package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.mjs.map +1 -0
- package/dist/esm/Providers/AWSWebSocketProvider/index.d.ts +89 -0
- package/dist/esm/Providers/AWSWebSocketProvider/index.mjs +622 -0
- package/dist/esm/Providers/AWSWebSocketProvider/index.mjs.map +1 -0
- package/dist/esm/Providers/constants.d.ts +33 -3
- package/dist/esm/Providers/constants.mjs +32 -2
- package/dist/esm/Providers/constants.mjs.map +1 -1
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.mjs +2 -0
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/internals/InternalGraphQLAPI.d.ts +0 -1
- package/dist/esm/internals/InternalGraphQLAPI.mjs +9 -68
- package/dist/esm/internals/InternalGraphQLAPI.mjs.map +1 -1
- package/dist/esm/internals/events/appsyncRequest.d.ts +14 -0
- package/dist/esm/internals/events/appsyncRequest.mjs +96 -0
- package/dist/esm/internals/events/appsyncRequest.mjs.map +1 -0
- package/dist/esm/internals/events/index.d.ts +47 -0
- package/dist/esm/internals/events/index.mjs +93 -0
- package/dist/esm/internals/events/index.mjs.map +1 -0
- package/dist/esm/internals/events/types.d.ts +59 -0
- package/dist/esm/internals/events/types.mjs +2 -0
- package/dist/esm/internals/events/types.mjs.map +1 -0
- package/dist/esm/internals/events/utils.d.ts +16 -0
- package/dist/esm/internals/events/utils.mjs +53 -0
- package/dist/esm/internals/events/utils.mjs.map +1 -0
- package/dist/esm/internals/graphqlAuth.d.ts +3 -0
- package/dist/esm/internals/graphqlAuth.mjs +64 -0
- package/dist/esm/internals/graphqlAuth.mjs.map +1 -0
- package/dist/esm/internals/graphqlRequest.d.ts +3 -0
- package/dist/esm/internals/graphqlRequest.mjs +18 -0
- package/dist/esm/internals/graphqlRequest.mjs.map +1 -0
- package/dist/esm/utils/ConnectionStateMonitor.d.ts +29 -1
- package/dist/esm/utils/ReconnectionMonitor.d.ts +1 -1
- package/dist/esm/utils/ReconnectionMonitor.mjs +1 -1
- package/dist/esm/utils/ReconnectionMonitor.mjs.map +1 -1
- package/package.json +4 -4
- package/src/Providers/AWSAppSyncEventsProvider/index.ts +192 -0
- package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +56 -1049
- package/src/Providers/AWSWebSocketProvider/appsyncUrl.ts +152 -0
- package/src/Providers/AWSWebSocketProvider/authHeaders.ts +146 -0
- package/src/Providers/AWSWebSocketProvider/index.ts +932 -0
- package/src/Providers/constants.ts +32 -2
- package/src/index.ts +5 -0
- package/src/internals/InternalGraphQLAPI.ts +15 -102
- package/src/internals/events/appsyncRequest.ts +169 -0
- package/src/internals/events/index.ts +161 -0
- package/src/internals/events/types.ts +71 -0
- package/src/internals/events/utils.ts +77 -0
- package/src/internals/graphqlAuth.ts +87 -0
- package/src/internals/graphqlRequest.ts +30 -0
- package/src/utils/ConnectionStateMonitor.ts +2 -13
- 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();
|