@aws-amplify/api-graphql 0.0.0-unstable-1ca644b-20260128091132

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 (257) hide show
  1. package/README.md +3 -0
  2. package/dist/cjs/GraphQLAPI.js +66 -0
  3. package/dist/cjs/GraphQLAPI.js.map +1 -0
  4. package/dist/cjs/Providers/AWSAppSyncEventsProvider/index.js +117 -0
  5. package/dist/cjs/Providers/AWSAppSyncEventsProvider/index.js.map +1 -0
  6. package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js +96 -0
  7. package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -0
  8. package/dist/cjs/Providers/AWSWebSocketProvider/appsyncUrl.js +113 -0
  9. package/dist/cjs/Providers/AWSWebSocketProvider/appsyncUrl.js.map +1 -0
  10. package/dist/cjs/Providers/AWSWebSocketProvider/authHeaders.js +99 -0
  11. package/dist/cjs/Providers/AWSWebSocketProvider/authHeaders.js.map +1 -0
  12. package/dist/cjs/Providers/AWSWebSocketProvider/index.js +693 -0
  13. package/dist/cjs/Providers/AWSWebSocketProvider/index.js.map +1 -0
  14. package/dist/cjs/Providers/constants.js +149 -0
  15. package/dist/cjs/Providers/constants.js.map +1 -0
  16. package/dist/cjs/index.js +18 -0
  17. package/dist/cjs/index.js.map +1 -0
  18. package/dist/cjs/internals/InternalGraphQLAPI.js +269 -0
  19. package/dist/cjs/internals/InternalGraphQLAPI.js.map +1 -0
  20. package/dist/cjs/internals/events/appsyncRequest.js +96 -0
  21. package/dist/cjs/internals/events/appsyncRequest.js.map +1 -0
  22. package/dist/cjs/internals/events/index.js +142 -0
  23. package/dist/cjs/internals/events/index.js.map +1 -0
  24. package/dist/cjs/internals/events/types.js +6 -0
  25. package/dist/cjs/internals/events/types.js.map +1 -0
  26. package/dist/cjs/internals/events/utils.js +57 -0
  27. package/dist/cjs/internals/events/utils.js.map +1 -0
  28. package/dist/cjs/internals/generateClient.js +86 -0
  29. package/dist/cjs/internals/generateClient.js.map +1 -0
  30. package/dist/cjs/internals/graphqlAuth.js +63 -0
  31. package/dist/cjs/internals/graphqlAuth.js.map +1 -0
  32. package/dist/cjs/internals/graphqlRequest.js +19 -0
  33. package/dist/cjs/internals/graphqlRequest.js.map +1 -0
  34. package/dist/cjs/internals/index.js +16 -0
  35. package/dist/cjs/internals/index.js.map +1 -0
  36. package/dist/cjs/internals/server/generateClientWithAmplifyInstance.js +48 -0
  37. package/dist/cjs/internals/server/generateClientWithAmplifyInstance.js.map +1 -0
  38. package/dist/cjs/internals/server/index.js +9 -0
  39. package/dist/cjs/internals/server/index.js.map +1 -0
  40. package/dist/cjs/internals/types.js +4 -0
  41. package/dist/cjs/internals/types.js.map +1 -0
  42. package/dist/cjs/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.js +10 -0
  43. package/dist/cjs/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.js.map +1 -0
  44. package/dist/cjs/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.js +10 -0
  45. package/dist/cjs/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.js.map +1 -0
  46. package/dist/cjs/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js +14 -0
  47. package/dist/cjs/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js.map +1 -0
  48. package/dist/cjs/internals/v6.js +155 -0
  49. package/dist/cjs/internals/v6.js.map +1 -0
  50. package/dist/cjs/server/generateClient.js +42 -0
  51. package/dist/cjs/server/generateClient.js.map +1 -0
  52. package/dist/cjs/server/index.js +9 -0
  53. package/dist/cjs/server/index.js.map +1 -0
  54. package/dist/cjs/types/PubSub.js +49 -0
  55. package/dist/cjs/types/PubSub.js.map +1 -0
  56. package/dist/cjs/types/index.js +34 -0
  57. package/dist/cjs/types/index.js.map +1 -0
  58. package/dist/cjs/utils/ConnectionStateMonitor.js +134 -0
  59. package/dist/cjs/utils/ConnectionStateMonitor.js.map +1 -0
  60. package/dist/cjs/utils/ReachabilityMonitor/index.js +10 -0
  61. package/dist/cjs/utils/ReachabilityMonitor/index.js.map +1 -0
  62. package/dist/cjs/utils/ReachabilityMonitor/index.native.js +12 -0
  63. package/dist/cjs/utils/ReachabilityMonitor/index.native.js.map +1 -0
  64. package/dist/cjs/utils/ReconnectionMonitor.js +71 -0
  65. package/dist/cjs/utils/ReconnectionMonitor.js.map +1 -0
  66. package/dist/cjs/utils/errors/GraphQLApiError.js +21 -0
  67. package/dist/cjs/utils/errors/GraphQLApiError.js.map +1 -0
  68. package/dist/cjs/utils/errors/assertValidationError.js +18 -0
  69. package/dist/cjs/utils/errors/assertValidationError.js.map +1 -0
  70. package/dist/cjs/utils/errors/constants.js +47 -0
  71. package/dist/cjs/utils/errors/constants.js.map +1 -0
  72. package/dist/cjs/utils/errors/createGraphQLResultWithError.js +15 -0
  73. package/dist/cjs/utils/errors/createGraphQLResultWithError.js.map +1 -0
  74. package/dist/cjs/utils/errors/index.js +16 -0
  75. package/dist/cjs/utils/errors/index.js.map +1 -0
  76. package/dist/cjs/utils/errors/repackageAuthError.js +38 -0
  77. package/dist/cjs/utils/errors/repackageAuthError.js.map +1 -0
  78. package/dist/cjs/utils/errors/validation.js +28 -0
  79. package/dist/cjs/utils/errors/validation.js.map +1 -0
  80. package/dist/cjs/utils/index.js +11 -0
  81. package/dist/cjs/utils/index.js.map +1 -0
  82. package/dist/cjs/utils/resolveConfig.js +32 -0
  83. package/dist/cjs/utils/resolveConfig.js.map +1 -0
  84. package/dist/cjs/utils/resolveLibraryOptions.js +16 -0
  85. package/dist/cjs/utils/resolveLibraryOptions.js.map +1 -0
  86. package/dist/esm/GraphQLAPI.d.ts +37 -0
  87. package/dist/esm/GraphQLAPI.mjs +63 -0
  88. package/dist/esm/GraphQLAPI.mjs.map +1 -0
  89. package/dist/esm/Providers/AWSAppSyncEventsProvider/index.d.ts +49 -0
  90. package/dist/esm/Providers/AWSAppSyncEventsProvider/index.mjs +115 -0
  91. package/dist/esm/Providers/AWSAppSyncEventsProvider/index.mjs.map +1 -0
  92. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.d.ts +47 -0
  93. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs +94 -0
  94. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs.map +1 -0
  95. package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.d.ts +21 -0
  96. package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.mjs +107 -0
  97. package/dist/esm/Providers/AWSWebSocketProvider/appsyncUrl.mjs.map +1 -0
  98. package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.d.ts +8 -0
  99. package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.mjs +97 -0
  100. package/dist/esm/Providers/AWSWebSocketProvider/authHeaders.mjs.map +1 -0
  101. package/dist/esm/Providers/AWSWebSocketProvider/index.d.ts +99 -0
  102. package/dist/esm/Providers/AWSWebSocketProvider/index.mjs +691 -0
  103. package/dist/esm/Providers/AWSWebSocketProvider/index.mjs.map +1 -0
  104. package/dist/esm/Providers/constants.d.ts +135 -0
  105. package/dist/esm/Providers/constants.mjs +147 -0
  106. package/dist/esm/Providers/constants.mjs.map +1 -0
  107. package/dist/esm/index.d.ts +6 -0
  108. package/dist/esm/index.mjs +7 -0
  109. package/dist/esm/index.mjs.map +1 -0
  110. package/dist/esm/internals/InternalGraphQLAPI.d.ts +45 -0
  111. package/dist/esm/internals/InternalGraphQLAPI.mjs +270 -0
  112. package/dist/esm/internals/InternalGraphQLAPI.mjs.map +1 -0
  113. package/dist/esm/internals/events/appsyncRequest.d.ts +14 -0
  114. package/dist/esm/internals/events/appsyncRequest.mjs +96 -0
  115. package/dist/esm/internals/events/appsyncRequest.mjs.map +1 -0
  116. package/dist/esm/internals/events/index.d.ts +58 -0
  117. package/dist/esm/internals/events/index.mjs +139 -0
  118. package/dist/esm/internals/events/index.mjs.map +1 -0
  119. package/dist/esm/internals/events/types.d.ts +93 -0
  120. package/dist/esm/internals/events/types.mjs +2 -0
  121. package/dist/esm/internals/events/types.mjs.map +1 -0
  122. package/dist/esm/internals/events/utils.d.ts +16 -0
  123. package/dist/esm/internals/events/utils.mjs +53 -0
  124. package/dist/esm/internals/events/utils.mjs.map +1 -0
  125. package/dist/esm/internals/generateClient.d.ts +12 -0
  126. package/dist/esm/internals/generateClient.mjs +85 -0
  127. package/dist/esm/internals/generateClient.mjs.map +1 -0
  128. package/dist/esm/internals/graphqlAuth.d.ts +3 -0
  129. package/dist/esm/internals/graphqlAuth.mjs +64 -0
  130. package/dist/esm/internals/graphqlAuth.mjs.map +1 -0
  131. package/dist/esm/internals/graphqlRequest.d.ts +3 -0
  132. package/dist/esm/internals/graphqlRequest.mjs +18 -0
  133. package/dist/esm/internals/graphqlRequest.mjs.map +1 -0
  134. package/dist/esm/internals/index.d.ts +4 -0
  135. package/dist/esm/internals/index.mjs +4 -0
  136. package/dist/esm/internals/index.mjs.map +1 -0
  137. package/dist/esm/internals/server/generateClientWithAmplifyInstance.d.ts +13 -0
  138. package/dist/esm/internals/server/generateClientWithAmplifyInstance.mjs +61 -0
  139. package/dist/esm/internals/server/generateClientWithAmplifyInstance.mjs.map +1 -0
  140. package/dist/esm/internals/server/index.d.ts +1 -0
  141. package/dist/esm/internals/server/index.mjs +2 -0
  142. package/dist/esm/internals/server/index.mjs.map +1 -0
  143. package/dist/esm/internals/types.d.ts +34 -0
  144. package/dist/esm/internals/types.mjs +2 -0
  145. package/dist/esm/internals/types.mjs.map +1 -0
  146. package/dist/esm/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.d.ts +2 -0
  147. package/dist/esm/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.mjs +8 -0
  148. package/dist/esm/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.mjs.map +1 -0
  149. package/dist/esm/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.d.ts +8 -0
  150. package/dist/esm/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.mjs +8 -0
  151. package/dist/esm/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.mjs.map +1 -0
  152. package/dist/esm/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.d.ts +2 -0
  153. package/dist/esm/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.mjs +12 -0
  154. package/dist/esm/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.mjs.map +1 -0
  155. package/dist/esm/internals/v6.d.ts +100 -0
  156. package/dist/esm/internals/v6.mjs +152 -0
  157. package/dist/esm/internals/v6.mjs.map +1 -0
  158. package/dist/esm/server/generateClient.d.ts +21 -0
  159. package/dist/esm/server/generateClient.mjs +41 -0
  160. package/dist/esm/server/generateClient.mjs.map +1 -0
  161. package/dist/esm/server/index.d.ts +1 -0
  162. package/dist/esm/server/index.mjs +2 -0
  163. package/dist/esm/server/index.mjs.map +1 -0
  164. package/dist/esm/types/PubSub.d.ts +27 -0
  165. package/dist/esm/types/PubSub.mjs +47 -0
  166. package/dist/esm/types/PubSub.mjs.map +1 -0
  167. package/dist/esm/types/index.d.ts +369 -0
  168. package/dist/esm/types/index.mjs +30 -0
  169. package/dist/esm/types/index.mjs.map +1 -0
  170. package/dist/esm/utils/ConnectionStateMonitor.d.ts +69 -0
  171. package/dist/esm/utils/ConnectionStateMonitor.mjs +132 -0
  172. package/dist/esm/utils/ConnectionStateMonitor.mjs.map +1 -0
  173. package/dist/esm/utils/ReachabilityMonitor/index.d.ts +1 -0
  174. package/dist/esm/utils/ReachabilityMonitor/index.mjs +8 -0
  175. package/dist/esm/utils/ReachabilityMonitor/index.mjs.map +1 -0
  176. package/dist/esm/utils/ReachabilityMonitor/index.native.d.ts +1 -0
  177. package/dist/esm/utils/ReachabilityMonitor/index.native.mjs +9 -0
  178. package/dist/esm/utils/ReachabilityMonitor/index.native.mjs.map +1 -0
  179. package/dist/esm/utils/ReconnectionMonitor.d.ts +29 -0
  180. package/dist/esm/utils/ReconnectionMonitor.mjs +69 -0
  181. package/dist/esm/utils/ReconnectionMonitor.mjs.map +1 -0
  182. package/dist/esm/utils/errors/GraphQLApiError.d.ts +7 -0
  183. package/dist/esm/utils/errors/GraphQLApiError.mjs +19 -0
  184. package/dist/esm/utils/errors/GraphQLApiError.mjs.map +1 -0
  185. package/dist/esm/utils/errors/assertValidationError.d.ts +5 -0
  186. package/dist/esm/utils/errors/assertValidationError.mjs +17 -0
  187. package/dist/esm/utils/errors/assertValidationError.mjs.map +1 -0
  188. package/dist/esm/utils/errors/constants.d.ts +7 -0
  189. package/dist/esm/utils/errors/constants.mjs +46 -0
  190. package/dist/esm/utils/errors/constants.mjs.map +1 -0
  191. package/dist/esm/utils/errors/createGraphQLResultWithError.d.ts +2 -0
  192. package/dist/esm/utils/errors/createGraphQLResultWithError.mjs +13 -0
  193. package/dist/esm/utils/errors/createGraphQLResultWithError.mjs.map +1 -0
  194. package/dist/esm/utils/errors/index.d.ts +4 -0
  195. package/dist/esm/utils/errors/index.mjs +5 -0
  196. package/dist/esm/utils/errors/index.mjs.map +1 -0
  197. package/dist/esm/utils/errors/repackageAuthError.d.ts +7 -0
  198. package/dist/esm/utils/errors/repackageAuthError.mjs +36 -0
  199. package/dist/esm/utils/errors/repackageAuthError.mjs.map +1 -0
  200. package/dist/esm/utils/errors/validation.d.ts +7 -0
  201. package/dist/esm/utils/errors/validation.mjs +26 -0
  202. package/dist/esm/utils/errors/validation.mjs.map +1 -0
  203. package/dist/esm/utils/index.d.ts +2 -0
  204. package/dist/esm/utils/index.mjs +3 -0
  205. package/dist/esm/utils/index.mjs.map +1 -0
  206. package/dist/esm/utils/resolveConfig.d.ts +12 -0
  207. package/dist/esm/utils/resolveConfig.mjs +33 -0
  208. package/dist/esm/utils/resolveConfig.mjs.map +1 -0
  209. package/dist/esm/utils/resolveLibraryOptions.d.ts +11 -0
  210. package/dist/esm/utils/resolveLibraryOptions.mjs +13 -0
  211. package/dist/esm/utils/resolveLibraryOptions.mjs.map +1 -0
  212. package/internals/package.json +8 -0
  213. package/internals/server/package.json +8 -0
  214. package/package.json +99 -0
  215. package/server/package.json +7 -0
  216. package/src/GraphQLAPI.ts +97 -0
  217. package/src/Providers/AWSAppSyncEventsProvider/index.ts +218 -0
  218. package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +185 -0
  219. package/src/Providers/AWSWebSocketProvider/appsyncUrl.ts +152 -0
  220. package/src/Providers/AWSWebSocketProvider/authHeaders.ts +146 -0
  221. package/src/Providers/AWSWebSocketProvider/index.ts +1028 -0
  222. package/src/Providers/constants.ts +154 -0
  223. package/src/index.ts +12 -0
  224. package/src/internals/InternalGraphQLAPI.ts +424 -0
  225. package/src/internals/events/appsyncRequest.ts +169 -0
  226. package/src/internals/events/index.ts +199 -0
  227. package/src/internals/events/types.ts +109 -0
  228. package/src/internals/events/utils.ts +77 -0
  229. package/src/internals/generateClient.ts +120 -0
  230. package/src/internals/graphqlAuth.ts +87 -0
  231. package/src/internals/graphqlRequest.ts +30 -0
  232. package/src/internals/index.ts +10 -0
  233. package/src/internals/server/generateClientWithAmplifyInstance.ts +73 -0
  234. package/src/internals/server/index.ts +4 -0
  235. package/src/internals/types.ts +42 -0
  236. package/src/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.ts +10 -0
  237. package/src/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.ts +13 -0
  238. package/src/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.ts +15 -0
  239. package/src/internals/v6.ts +189 -0
  240. package/src/server/generateClient.ts +68 -0
  241. package/src/server/index.ts +4 -0
  242. package/src/types/PubSub.ts +57 -0
  243. package/src/types/index.ts +524 -0
  244. package/src/utils/ConnectionStateMonitor.ts +195 -0
  245. package/src/utils/ReachabilityMonitor/index.native.ts +7 -0
  246. package/src/utils/ReachabilityMonitor/index.ts +5 -0
  247. package/src/utils/ReconnectionMonitor.ts +77 -0
  248. package/src/utils/errors/GraphQLApiError.ts +21 -0
  249. package/src/utils/errors/assertValidationError.ts +19 -0
  250. package/src/utils/errors/constants.ts +56 -0
  251. package/src/utils/errors/createGraphQLResultWithError.ts +15 -0
  252. package/src/utils/errors/index.ts +7 -0
  253. package/src/utils/errors/repackageAuthError.ts +43 -0
  254. package/src/utils/errors/validation.ts +26 -0
  255. package/src/utils/index.ts +5 -0
  256. package/src/utils/resolveConfig.ts +46 -0
  257. package/src/utils/resolveLibraryOptions.ts +14 -0
package/README.md ADDED
@@ -0,0 +1,3 @@
1
+ > INTERNAL USE ONLY
2
+
3
+ This package contains the AWS Amplify API GraphQL category and is intended for internal use only. To integrate Amplify into your app, please use [aws-amplify](https://www.npmjs.com/package/aws-amplify).
@@ -0,0 +1,66 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.GraphQLAPI = exports.GraphQLAPIClass = exports.graphqlOperation = void 0;
5
+ const utils_1 = require("@aws-amplify/core/internals/utils");
6
+ const runtime_1 = require("@aws-amplify/data-schema/runtime");
7
+ const InternalGraphQLAPI_1 = require("./internals/InternalGraphQLAPI");
8
+ function isGraphQLOptionsWithOverride(options) {
9
+ return runtime_1.INTERNAL_USER_AGENT_OVERRIDE in options;
10
+ }
11
+ const graphqlOperation = (query, variables = {}, authToken) => ({
12
+ query,
13
+ variables,
14
+ authToken,
15
+ });
16
+ exports.graphqlOperation = graphqlOperation;
17
+ /**
18
+ * Export Cloud Logic APIs
19
+ */
20
+ class GraphQLAPIClass extends InternalGraphQLAPI_1.InternalGraphQLAPIClass {
21
+ getModuleName() {
22
+ return 'GraphQLAPI';
23
+ }
24
+ /**
25
+ * Executes a GraphQL operation
26
+ *
27
+ * @param options - GraphQL Options
28
+ * @param [additionalHeaders] - headers to merge in after any `libraryConfigHeaders` set in the config
29
+ * @returns An Observable if the query is a subscription query, else a promise of the graphql result.
30
+ */
31
+ graphql(amplify, options, additionalHeaders) {
32
+ const userAgentDetails = {
33
+ category: utils_1.Category.API,
34
+ action: utils_1.ApiAction.GraphQl,
35
+ };
36
+ if (isGraphQLOptionsWithOverride(options)) {
37
+ const { [runtime_1.INTERNAL_USER_AGENT_OVERRIDE]: internalUserAgentOverride, ...cleanOptions } = options;
38
+ return super.graphql(amplify, cleanOptions, additionalHeaders, {
39
+ ...userAgentDetails,
40
+ ...internalUserAgentOverride,
41
+ });
42
+ }
43
+ return super.graphql(amplify, options, additionalHeaders, {
44
+ ...userAgentDetails,
45
+ });
46
+ }
47
+ /**
48
+ * Checks to see if an error thrown is from an api request cancellation
49
+ * @param error - Any error
50
+ * @returns A boolean indicating if the error was from an api request cancellation
51
+ */
52
+ isCancelError(error) {
53
+ return super.isCancelError(error);
54
+ }
55
+ /**
56
+ * Cancels an inflight request. Only applicable for graphql queries and mutations
57
+ * @param {any} request - request to cancel
58
+ * @returns A boolean indicating if the request was cancelled
59
+ */
60
+ cancel(request, message) {
61
+ return super.cancel(request, message);
62
+ }
63
+ }
64
+ exports.GraphQLAPIClass = GraphQLAPIClass;
65
+ exports.GraphQLAPI = new GraphQLAPIClass();
66
+ //# sourceMappingURL=GraphQLAPI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GraphQLAPI.js","sources":["../../src/GraphQLAPI.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GraphQLAPI = exports.GraphQLAPIClass = exports.graphqlOperation = void 0;\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst runtime_1 = require(\"@aws-amplify/data-schema/runtime\");\nconst InternalGraphQLAPI_1 = require(\"./internals/InternalGraphQLAPI\");\nfunction isGraphQLOptionsWithOverride(options) {\n return runtime_1.INTERNAL_USER_AGENT_OVERRIDE in options;\n}\nconst graphqlOperation = (query, variables = {}, authToken) => ({\n query,\n variables,\n authToken,\n});\nexports.graphqlOperation = graphqlOperation;\n/**\n * Export Cloud Logic APIs\n */\nclass GraphQLAPIClass extends InternalGraphQLAPI_1.InternalGraphQLAPIClass {\n getModuleName() {\n return 'GraphQLAPI';\n }\n /**\n * Executes a GraphQL operation\n *\n * @param options - GraphQL Options\n * @param [additionalHeaders] - headers to merge in after any `libraryConfigHeaders` set in the config\n * @returns An Observable if the query is a subscription query, else a promise of the graphql result.\n */\n graphql(amplify, options, additionalHeaders) {\n const userAgentDetails = {\n category: utils_1.Category.API,\n action: utils_1.ApiAction.GraphQl,\n };\n if (isGraphQLOptionsWithOverride(options)) {\n const { [runtime_1.INTERNAL_USER_AGENT_OVERRIDE]: internalUserAgentOverride, ...cleanOptions } = options;\n return super.graphql(amplify, cleanOptions, additionalHeaders, {\n ...userAgentDetails,\n ...internalUserAgentOverride,\n });\n }\n return super.graphql(amplify, options, additionalHeaders, {\n ...userAgentDetails,\n });\n }\n /**\n * Checks to see if an error thrown is from an api request cancellation\n * @param error - Any error\n * @returns A boolean indicating if the error was from an api request cancellation\n */\n isCancelError(error) {\n return super.isCancelError(error);\n }\n /**\n * Cancels an inflight request. Only applicable for graphql queries and mutations\n * @param {any} request - request to cancel\n * @returns A boolean indicating if the request was cancelled\n */\n cancel(request, message) {\n return super.cancel(request, message);\n }\n}\nexports.GraphQLAPIClass = GraphQLAPIClass;\nexports.GraphQLAPI = new GraphQLAPIClass();\n"],"names":[],"mappings":";;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,gBAAgB,GAAG,MAAM;AAChF,MAAM,OAAO,GAAG,OAAO,CAAC,mCAAmC,CAAC;AAC5D,MAAM,SAAS,GAAG,OAAO,CAAC,kCAAkC,CAAC;AAC7D,MAAM,oBAAoB,GAAG,OAAO,CAAC,gCAAgC,CAAC;AACtE,SAAS,4BAA4B,CAAC,OAAO,EAAE;AAC/C,IAAI,OAAO,SAAS,CAAC,4BAA4B,IAAI,OAAO;AAC5D;AACA,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,EAAE,SAAS,MAAM;AAChE,IAAI,KAAK;AACT,IAAI,SAAS;AACb,IAAI,SAAS;AACb,CAAC,CAAC;AACF,OAAO,CAAC,gBAAgB,GAAG,gBAAgB;AAC3C;AACA;AACA;AACA,MAAM,eAAe,SAAS,oBAAoB,CAAC,uBAAuB,CAAC;AAC3E,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,YAAY;AAC3B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE;AACjD,QAAQ,MAAM,gBAAgB,GAAG;AACjC,YAAY,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG;AAC1C,YAAY,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO;AAC7C,SAAS;AACT,QAAQ,IAAI,4BAA4B,CAAC,OAAO,CAAC,EAAE;AACnD,YAAY,MAAM,EAAE,CAAC,SAAS,CAAC,4BAA4B,GAAG,yBAAyB,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO;AACpH,YAAY,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE;AAC3E,gBAAgB,GAAG,gBAAgB;AACnC,gBAAgB,GAAG,yBAAyB;AAC5C,aAAa,CAAC;AACd,QAAQ;AACR,QAAQ,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE;AAClE,YAAY,GAAG,gBAAgB;AAC/B,SAAS,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,OAAO,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE;AAC7B,QAAQ,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC;AAC7C,IAAI;AACJ;AACA,OAAO,CAAC,eAAe,GAAG,eAAe;AACzC,OAAO,CAAC,UAAU,GAAG,IAAI,eAAe,EAAE;;"}
@@ -0,0 +1,117 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AppSyncEventProvider = exports.AWSAppSyncEventProvider = void 0;
5
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
6
+ // SPDX-License-Identifier: Apache-2.0
7
+ const utils_1 = require("@aws-amplify/core/internals/utils");
8
+ const constants_1 = require("../constants");
9
+ const AWSWebSocketProvider_1 = require("../AWSWebSocketProvider");
10
+ const authHeaders_1 = require("../AWSWebSocketProvider/authHeaders");
11
+ const utils_2 = require("../../internals/events/utils");
12
+ const PROVIDER_NAME = 'AWSAppSyncEventsProvider';
13
+ const WS_PROTOCOL_NAME = 'aws-appsync-event-ws';
14
+ const CONNECT_URI = ''; // events does not expect a connect uri
15
+ class AWSAppSyncEventProvider extends AWSWebSocketProvider_1.AWSWebSocketProvider {
16
+ constructor() {
17
+ super({
18
+ providerName: PROVIDER_NAME,
19
+ wsProtocolName: WS_PROTOCOL_NAME,
20
+ connectUri: CONNECT_URI,
21
+ });
22
+ this.allowNoSubscriptions = true;
23
+ }
24
+ getProviderName() {
25
+ return PROVIDER_NAME;
26
+ }
27
+ async connect(options) {
28
+ return super.connect(options);
29
+ }
30
+ subscribe(options, customUserAgentDetails) {
31
+ return super.subscribe(options, customUserAgentDetails).pipe();
32
+ }
33
+ async publish(options, customUserAgentDetails) {
34
+ return super.publish(options, customUserAgentDetails);
35
+ }
36
+ closeIfNoActiveSubscription() {
37
+ this._closeSocketIfRequired();
38
+ }
39
+ async _prepareSubscriptionPayload({ options, subscriptionId, customUserAgentDetails, additionalCustomHeaders, libraryConfigHeaders, publish, }) {
40
+ const { appSyncGraphqlEndpoint, authenticationType, query, apiKey, region, variables, } = options;
41
+ const data = {
42
+ channel: query,
43
+ events: variables !== undefined ? (0, utils_2.serializeEvents)(variables) : undefined,
44
+ };
45
+ const serializedData = JSON.stringify(data);
46
+ const headers = {
47
+ ...(await (0, authHeaders_1.awsRealTimeHeaderBasedAuth)({
48
+ apiKey,
49
+ appSyncGraphqlEndpoint,
50
+ authenticationType,
51
+ payload: serializedData,
52
+ canonicalUri: '',
53
+ region,
54
+ additionalCustomHeaders,
55
+ })),
56
+ ...libraryConfigHeaders,
57
+ ...additionalCustomHeaders,
58
+ [utils_1.USER_AGENT_HEADER]: (0, utils_1.getAmplifyUserAgent)(customUserAgentDetails),
59
+ };
60
+ const subscriptionMessage = {
61
+ id: subscriptionId,
62
+ channel: query,
63
+ events: variables !== undefined ? (0, utils_2.serializeEvents)(variables) : undefined,
64
+ authorization: {
65
+ ...headers,
66
+ },
67
+ payload: {
68
+ events: variables !== undefined ? (0, utils_2.serializeEvents)(variables) : undefined,
69
+ channel: query,
70
+ extensions: {
71
+ authorization: {
72
+ ...headers,
73
+ },
74
+ },
75
+ },
76
+ type: publish
77
+ ? constants_1.MESSAGE_TYPES.EVENT_PUBLISH
78
+ : constants_1.MESSAGE_TYPES.EVENT_SUBSCRIBE,
79
+ };
80
+ const serializedSubscriptionMessage = JSON.stringify(subscriptionMessage);
81
+ return serializedSubscriptionMessage;
82
+ }
83
+ _handleSubscriptionData(message) {
84
+ this.logger.debug(`subscription message from AWS AppSync Events: ${message.data}`);
85
+ const { id = '', event: payload, type, } = JSON.parse(String(message.data));
86
+ const { observer = null, query = '', variables = {}, } = this.subscriptionObserverMap.get(id) || {};
87
+ this.logger.debug({ id, observer, query, variables });
88
+ if (type === constants_1.MESSAGE_TYPES.DATA && payload) {
89
+ const deserializedEvent = JSON.parse(payload);
90
+ if (observer) {
91
+ observer.next({ id, type, event: deserializedEvent });
92
+ }
93
+ else {
94
+ this.logger.debug(`observer not found for id: ${id}`);
95
+ }
96
+ return [true, { id, type, payload: deserializedEvent }];
97
+ }
98
+ return [false, { id, type, payload }];
99
+ }
100
+ _unsubscribeMessage(subscriptionId) {
101
+ return {
102
+ id: subscriptionId,
103
+ type: constants_1.MESSAGE_TYPES.EVENT_STOP,
104
+ };
105
+ }
106
+ _extractConnectionTimeout(data) {
107
+ const { connectionTimeoutMs = constants_1.DEFAULT_KEEP_ALIVE_TIMEOUT } = data;
108
+ return connectionTimeoutMs;
109
+ }
110
+ _extractErrorCodeAndType(data) {
111
+ const { errors: [{ errorType = '', errorCode = 0 } = {}] = [] } = data;
112
+ return { errorCode, errorType };
113
+ }
114
+ }
115
+ exports.AWSAppSyncEventProvider = AWSAppSyncEventProvider;
116
+ exports.AppSyncEventProvider = new AWSAppSyncEventProvider();
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/Providers/AWSAppSyncEventsProvider/index.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AppSyncEventProvider = exports.AWSAppSyncEventProvider = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst constants_1 = require(\"../constants\");\nconst AWSWebSocketProvider_1 = require(\"../AWSWebSocketProvider\");\nconst authHeaders_1 = require(\"../AWSWebSocketProvider/authHeaders\");\nconst utils_2 = require(\"../../internals/events/utils\");\nconst PROVIDER_NAME = 'AWSAppSyncEventsProvider';\nconst WS_PROTOCOL_NAME = 'aws-appsync-event-ws';\nconst CONNECT_URI = ''; // events does not expect a connect uri\nclass AWSAppSyncEventProvider extends AWSWebSocketProvider_1.AWSWebSocketProvider {\n constructor() {\n super({\n providerName: PROVIDER_NAME,\n wsProtocolName: WS_PROTOCOL_NAME,\n connectUri: CONNECT_URI,\n });\n this.allowNoSubscriptions = true;\n }\n getProviderName() {\n return PROVIDER_NAME;\n }\n async connect(options) {\n return super.connect(options);\n }\n subscribe(options, customUserAgentDetails) {\n return super.subscribe(options, customUserAgentDetails).pipe();\n }\n async publish(options, customUserAgentDetails) {\n return super.publish(options, customUserAgentDetails);\n }\n closeIfNoActiveSubscription() {\n this._closeSocketIfRequired();\n }\n async _prepareSubscriptionPayload({ options, subscriptionId, customUserAgentDetails, additionalCustomHeaders, libraryConfigHeaders, publish, }) {\n const { appSyncGraphqlEndpoint, authenticationType, query, apiKey, region, variables, } = options;\n const data = {\n channel: query,\n events: variables !== undefined ? (0, utils_2.serializeEvents)(variables) : undefined,\n };\n const serializedData = JSON.stringify(data);\n const headers = {\n ...(await (0, authHeaders_1.awsRealTimeHeaderBasedAuth)({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n payload: serializedData,\n canonicalUri: '',\n region,\n additionalCustomHeaders,\n })),\n ...libraryConfigHeaders,\n ...additionalCustomHeaders,\n [utils_1.USER_AGENT_HEADER]: (0, utils_1.getAmplifyUserAgent)(customUserAgentDetails),\n };\n const subscriptionMessage = {\n id: subscriptionId,\n channel: query,\n events: variables !== undefined ? (0, utils_2.serializeEvents)(variables) : undefined,\n authorization: {\n ...headers,\n },\n payload: {\n events: variables !== undefined ? (0, utils_2.serializeEvents)(variables) : undefined,\n channel: query,\n extensions: {\n authorization: {\n ...headers,\n },\n },\n },\n type: publish\n ? constants_1.MESSAGE_TYPES.EVENT_PUBLISH\n : constants_1.MESSAGE_TYPES.EVENT_SUBSCRIBE,\n };\n const serializedSubscriptionMessage = JSON.stringify(subscriptionMessage);\n return serializedSubscriptionMessage;\n }\n _handleSubscriptionData(message) {\n this.logger.debug(`subscription message from AWS AppSync Events: ${message.data}`);\n const { id = '', event: payload, type, } = JSON.parse(String(message.data));\n const { observer = null, query = '', variables = {}, } = this.subscriptionObserverMap.get(id) || {};\n this.logger.debug({ id, observer, query, variables });\n if (type === constants_1.MESSAGE_TYPES.DATA && payload) {\n const deserializedEvent = JSON.parse(payload);\n if (observer) {\n observer.next({ id, type, event: deserializedEvent });\n }\n else {\n this.logger.debug(`observer not found for id: ${id}`);\n }\n return [true, { id, type, payload: deserializedEvent }];\n }\n return [false, { id, type, payload }];\n }\n _unsubscribeMessage(subscriptionId) {\n return {\n id: subscriptionId,\n type: constants_1.MESSAGE_TYPES.EVENT_STOP,\n };\n }\n _extractConnectionTimeout(data) {\n const { connectionTimeoutMs = constants_1.DEFAULT_KEEP_ALIVE_TIMEOUT } = data;\n return connectionTimeoutMs;\n }\n _extractErrorCodeAndType(data) {\n const { errors: [{ errorType = '', errorCode = 0 } = {}] = [] } = data;\n return { errorCode, errorType };\n }\n}\nexports.AWSAppSyncEventProvider = AWSAppSyncEventProvider;\nexports.AppSyncEventProvider = new AWSAppSyncEventProvider();\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ 'use strict';
2
+
3
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ // SPDX-License-Identifier: Apache-2.0
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AWSAppSyncRealTimeProvider = void 0;
7
+ const utils_1 = require("@aws-amplify/core/internals/utils");
8
+ const constants_1 = require("../constants");
9
+ const AWSWebSocketProvider_1 = require("../AWSWebSocketProvider");
10
+ const authHeaders_1 = require("../AWSWebSocketProvider/authHeaders");
11
+ const PROVIDER_NAME = 'AWSAppSyncRealTimeProvider';
12
+ const WS_PROTOCOL_NAME = 'graphql-ws';
13
+ const CONNECT_URI = '/connect';
14
+ class AWSAppSyncRealTimeProvider extends AWSWebSocketProvider_1.AWSWebSocketProvider {
15
+ constructor() {
16
+ super({
17
+ providerName: PROVIDER_NAME,
18
+ wsProtocolName: WS_PROTOCOL_NAME,
19
+ connectUri: CONNECT_URI,
20
+ });
21
+ }
22
+ getProviderName() {
23
+ return PROVIDER_NAME;
24
+ }
25
+ subscribe(options, customUserAgentDetails) {
26
+ return super.subscribe(options, customUserAgentDetails);
27
+ }
28
+ async _prepareSubscriptionPayload({ options, subscriptionId, customUserAgentDetails, additionalCustomHeaders, libraryConfigHeaders, }) {
29
+ const { appSyncGraphqlEndpoint, authenticationType, query, variables, apiKey, region, } = options;
30
+ const data = {
31
+ query,
32
+ variables,
33
+ };
34
+ const serializedData = JSON.stringify(data);
35
+ const headers = {
36
+ ...(await (0, authHeaders_1.awsRealTimeHeaderBasedAuth)({
37
+ apiKey,
38
+ appSyncGraphqlEndpoint,
39
+ authenticationType,
40
+ payload: serializedData,
41
+ canonicalUri: '',
42
+ region,
43
+ additionalCustomHeaders,
44
+ })),
45
+ ...libraryConfigHeaders,
46
+ ...additionalCustomHeaders,
47
+ [utils_1.USER_AGENT_HEADER]: (0, utils_1.getAmplifyUserAgent)(customUserAgentDetails),
48
+ };
49
+ const subscriptionMessage = {
50
+ id: subscriptionId,
51
+ payload: {
52
+ data: serializedData,
53
+ extensions: {
54
+ authorization: {
55
+ ...headers,
56
+ },
57
+ },
58
+ },
59
+ type: constants_1.MESSAGE_TYPES.GQL_START,
60
+ };
61
+ const serializedSubscriptionMessage = JSON.stringify(subscriptionMessage);
62
+ return serializedSubscriptionMessage;
63
+ }
64
+ _handleSubscriptionData(message) {
65
+ this.logger.debug(`subscription message from AWS AppSync RealTime: ${message.data}`);
66
+ const { id = '', payload, type } = JSON.parse(String(message.data));
67
+ const { observer = null, query = '', variables = {}, } = this.subscriptionObserverMap.get(id) || {};
68
+ this.logger.debug({ id, observer, query, variables });
69
+ if (type === constants_1.MESSAGE_TYPES.DATA && payload && payload.data) {
70
+ if (observer) {
71
+ observer.next(payload);
72
+ }
73
+ else {
74
+ this.logger.debug(`observer not found for id: ${id}`);
75
+ }
76
+ return [true, { id, type, payload }];
77
+ }
78
+ return [false, { id, type, payload }];
79
+ }
80
+ _unsubscribeMessage(subscriptionId) {
81
+ return {
82
+ id: subscriptionId,
83
+ type: constants_1.MESSAGE_TYPES.GQL_STOP,
84
+ };
85
+ }
86
+ _extractConnectionTimeout(data) {
87
+ const { payload: { connectionTimeoutMs = constants_1.DEFAULT_KEEP_ALIVE_TIMEOUT } = {}, } = data;
88
+ return connectionTimeoutMs;
89
+ }
90
+ _extractErrorCodeAndType(data) {
91
+ const { payload: { errors: [{ errorType = '', errorCode = 0 } = {}] = [] } = {}, } = data;
92
+ return { errorCode, errorType };
93
+ }
94
+ }
95
+ exports.AWSAppSyncRealTimeProvider = AWSAppSyncRealTimeProvider;
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/Providers/AWSAppSyncRealTimeProvider/index.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AWSAppSyncRealTimeProvider = void 0;\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst constants_1 = require(\"../constants\");\nconst AWSWebSocketProvider_1 = require(\"../AWSWebSocketProvider\");\nconst authHeaders_1 = require(\"../AWSWebSocketProvider/authHeaders\");\nconst PROVIDER_NAME = 'AWSAppSyncRealTimeProvider';\nconst WS_PROTOCOL_NAME = 'graphql-ws';\nconst CONNECT_URI = '/connect';\nclass AWSAppSyncRealTimeProvider extends AWSWebSocketProvider_1.AWSWebSocketProvider {\n constructor() {\n super({\n providerName: PROVIDER_NAME,\n wsProtocolName: WS_PROTOCOL_NAME,\n connectUri: CONNECT_URI,\n });\n }\n getProviderName() {\n return PROVIDER_NAME;\n }\n subscribe(options, customUserAgentDetails) {\n return super.subscribe(options, customUserAgentDetails);\n }\n async _prepareSubscriptionPayload({ options, subscriptionId, customUserAgentDetails, additionalCustomHeaders, libraryConfigHeaders, }) {\n const { appSyncGraphqlEndpoint, authenticationType, query, variables, apiKey, region, } = options;\n const data = {\n query,\n variables,\n };\n const serializedData = JSON.stringify(data);\n const headers = {\n ...(await (0, authHeaders_1.awsRealTimeHeaderBasedAuth)({\n apiKey,\n appSyncGraphqlEndpoint,\n authenticationType,\n payload: serializedData,\n canonicalUri: '',\n region,\n additionalCustomHeaders,\n })),\n ...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: serializedData,\n extensions: {\n authorization: {\n ...headers,\n },\n },\n },\n type: constants_1.MESSAGE_TYPES.GQL_START,\n };\n const serializedSubscriptionMessage = JSON.stringify(subscriptionMessage);\n return serializedSubscriptionMessage;\n }\n _handleSubscriptionData(message) {\n this.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 = {}, } = this.subscriptionObserverMap.get(id) || {};\n this.logger.debug({ id, observer, query, variables });\n if (type === constants_1.MESSAGE_TYPES.DATA && payload && payload.data) {\n if (observer) {\n observer.next(payload);\n }\n else {\n this.logger.debug(`observer not found for id: ${id}`);\n }\n return [true, { id, type, payload }];\n }\n return [false, { id, type, payload }];\n }\n _unsubscribeMessage(subscriptionId) {\n return {\n id: subscriptionId,\n type: constants_1.MESSAGE_TYPES.GQL_STOP,\n };\n }\n _extractConnectionTimeout(data) {\n const { payload: { connectionTimeoutMs = constants_1.DEFAULT_KEEP_ALIVE_TIMEOUT } = {}, } = data;\n return connectionTimeoutMs;\n }\n _extractErrorCodeAndType(data) {\n const { payload: { errors: [{ errorType = '', errorCode = 0 } = {}] = [] } = {}, } = data;\n return { errorCode, errorType };\n }\n}\nexports.AWSAppSyncRealTimeProvider = AWSAppSyncRealTimeProvider;\n"],"names":[],"mappings":";;AACA;AACA;AACA,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC7D,OAAO,CAAC,0BAA0B,GAAG,MAAM;AAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,mCAAmC,CAAC;AAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC;AAC3C,MAAM,sBAAsB,GAAG,OAAO,CAAC,yBAAyB,CAAC;AACjE,MAAM,aAAa,GAAG,OAAO,CAAC,qCAAqC,CAAC;AACpE,MAAM,aAAa,GAAG,4BAA4B;AAClD,MAAM,gBAAgB,GAAG,YAAY;AACrC,MAAM,WAAW,GAAG,UAAU;AAC9B,MAAM,0BAA0B,SAAS,sBAAsB,CAAC,oBAAoB,CAAC;AACrF,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC;AACd,YAAY,YAAY,EAAE,aAAa;AACvC,YAAY,cAAc,EAAE,gBAAgB;AAC5C,YAAY,UAAU,EAAE,WAAW;AACnC,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,eAAe,GAAG;AACtB,QAAQ,OAAO,aAAa;AAC5B,IAAI;AACJ,IAAI,SAAS,CAAC,OAAO,EAAE,sBAAsB,EAAE;AAC/C,QAAQ,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,sBAAsB,CAAC;AAC/D,IAAI;AACJ,IAAI,MAAM,2BAA2B,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,oBAAoB,GAAG,EAAE;AAC3I,QAAQ,MAAM,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,OAAO;AACzG,QAAQ,MAAM,IAAI,GAAG;AACrB,YAAY,KAAK;AACjB,YAAY,SAAS;AACrB,SAAS;AACT,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACnD,QAAQ,MAAM,OAAO,GAAG;AACxB,YAAY,IAAI,MAAM,IAAI,aAAa,CAAC,0BAA0B,EAAE;AACpE,gBAAgB,MAAM;AACtB,gBAAgB,sBAAsB;AACtC,gBAAgB,kBAAkB;AAClC,gBAAgB,OAAO,EAAE,cAAc;AACvC,gBAAgB,YAAY,EAAE,EAAE;AAChC,gBAAgB,MAAM;AACtB,gBAAgB,uBAAuB;AACvC,aAAa,CAAC,CAAC;AACf,YAAY,GAAG,oBAAoB;AACnC,YAAY,GAAG,uBAAuB;AACtC,YAAY,CAAC,OAAO,CAAC,iBAAiB,GAAG,IAAI,OAAO,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;AACjG,SAAS;AACT,QAAQ,MAAM,mBAAmB,GAAG;AACpC,YAAY,EAAE,EAAE,cAAc;AAC9B,YAAY,OAAO,EAAE;AACrB,gBAAgB,IAAI,EAAE,cAAc;AACpC,gBAAgB,UAAU,EAAE;AAC5B,oBAAoB,aAAa,EAAE;AACnC,wBAAwB,GAAG,OAAO;AAClC,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,YAAY,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC,SAAS;AACrD,SAAS;AACT,QAAQ,MAAM,6BAA6B,GAAG,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;AACjF,QAAQ,OAAO,6BAA6B;AAC5C,IAAI;AACJ,IAAI,uBAAuB,CAAC,OAAO,EAAE;AACrC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,gDAAgD,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5F,QAAQ,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3E,QAAQ,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE;AAC3G,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC7D,QAAQ,IAAI,IAAI,KAAK,WAAW,CAAC,aAAa,CAAC,IAAI,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE;AAChF,YAAY,IAAI,QAAQ,EAAE;AAC1B,gBAAgB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AACtC,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,YAAY;AACZ,YAAY,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAChD,QAAQ;AACR,QAAQ,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC7C,IAAI;AACJ,IAAI,mBAAmB,CAAC,cAAc,EAAE;AACxC,QAAQ,OAAO;AACf,YAAY,EAAE,EAAE,cAAc;AAC9B,YAAY,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC,QAAQ;AACpD,SAAS;AACT,IAAI;AACJ,IAAI,yBAAyB,CAAC,IAAI,EAAE;AACpC,QAAQ,MAAM,EAAE,OAAO,EAAE,EAAE,mBAAmB,GAAG,WAAW,CAAC,0BAA0B,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI;AACxG,QAAQ,OAAO,mBAAmB;AAClC,IAAI;AACJ,IAAI,wBAAwB,CAAC,IAAI,EAAE;AACnC,QAAQ,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,SAAS,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI;AACjG,QAAQ,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE;AACvC,IAAI;AACJ;AACA,OAAO,CAAC,0BAA0B,GAAG,0BAA0B;;"}
@@ -0,0 +1,113 @@
1
+ 'use strict';
2
+
3
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ // SPDX-License-Identifier: Apache-2.0
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.additionalHeadersFromOptions = exports.realtimeUrlWithQueryString = exports.queryParamsFromCustomHeaders = exports.getRealtimeEndpointUrl = exports.isCustomDomain = void 0;
7
+ const utils_1 = require("@aws-amplify/core/internals/utils");
8
+ const protocol = 'wss://';
9
+ const standardDomainPattern = /^https:\/\/\w{26}\.appsync-api\.\w{2}(?:(?:-\w{2,})+)-\d\.amazonaws.com(?:\.cn)?\/graphql$/i;
10
+ const eventDomainPattern = /^https:\/\/\w{26}\.\w+-api\.\w{2}(?:(?:-\w{2,})+)-\d\.amazonaws.com(?:\.cn)?\/event$/i;
11
+ const customDomainPath = '/realtime';
12
+ const isCustomDomain = (url) => {
13
+ return url.match(standardDomainPattern) === null;
14
+ };
15
+ exports.isCustomDomain = isCustomDomain;
16
+ const isEventDomain = (url) => url.match(eventDomainPattern) !== null;
17
+ const getRealtimeEndpointUrl = (appSyncGraphqlEndpoint) => {
18
+ let realtimeEndpoint = appSyncGraphqlEndpoint ?? '';
19
+ if (isEventDomain(realtimeEndpoint)) {
20
+ realtimeEndpoint = realtimeEndpoint
21
+ .concat(customDomainPath)
22
+ .replace('ddpg-api', 'grt-gamma')
23
+ .replace('appsync-api', 'appsync-realtime-api');
24
+ }
25
+ else if ((0, exports.isCustomDomain)(realtimeEndpoint)) {
26
+ realtimeEndpoint = realtimeEndpoint.concat(customDomainPath);
27
+ }
28
+ else {
29
+ realtimeEndpoint = realtimeEndpoint
30
+ .replace('appsync-api', 'appsync-realtime-api')
31
+ .replace('gogi-beta', 'grt-beta')
32
+ .replace('ddpg-api', 'grt-gamma');
33
+ }
34
+ realtimeEndpoint = realtimeEndpoint
35
+ .replace('https://', protocol)
36
+ .replace('http://', protocol);
37
+ return new utils_1.AmplifyUrl(realtimeEndpoint);
38
+ };
39
+ exports.getRealtimeEndpointUrl = getRealtimeEndpointUrl;
40
+ /**
41
+ * Strips out `Authorization` header if present
42
+ */
43
+ const extractNonAuthHeaders = (headers) => {
44
+ if (!headers) {
45
+ return {};
46
+ }
47
+ if ('Authorization' in headers) {
48
+ const { Authorization: _, ...nonAuthHeaders } = headers;
49
+ return nonAuthHeaders;
50
+ }
51
+ return headers;
52
+ };
53
+ /**
54
+ *
55
+ * @param headers - http headers
56
+ * @returns uri-encoded query parameters derived from custom headers
57
+ */
58
+ const queryParamsFromCustomHeaders = (headers) => {
59
+ const nonAuthHeaders = extractNonAuthHeaders(headers);
60
+ const params = new utils_1.AmplifyUrlSearchParams();
61
+ Object.entries(nonAuthHeaders).forEach(([k, v]) => {
62
+ params.append(k, v);
63
+ });
64
+ return params;
65
+ };
66
+ exports.queryParamsFromCustomHeaders = queryParamsFromCustomHeaders;
67
+ /**
68
+ * Normalizes AppSync realtime endpoint URL
69
+ *
70
+ * @param appSyncGraphqlEndpoint - AppSync endpointUri from config
71
+ * @param urlParams - URLSearchParams
72
+ * @returns fully resolved string realtime endpoint URL
73
+ */
74
+ const realtimeUrlWithQueryString = (appSyncGraphqlEndpoint, urlParams) => {
75
+ const realtimeEndpointUrl = (0, exports.getRealtimeEndpointUrl)(appSyncGraphqlEndpoint);
76
+ // preserves any query params a customer might manually set in the configuration
77
+ const existingParams = new utils_1.AmplifyUrlSearchParams(realtimeEndpointUrl.search);
78
+ for (const [k, v] of urlParams.entries()) {
79
+ existingParams.append(k, v);
80
+ }
81
+ realtimeEndpointUrl.search = existingParams.toString();
82
+ return realtimeEndpointUrl.toString();
83
+ };
84
+ exports.realtimeUrlWithQueryString = realtimeUrlWithQueryString;
85
+ // TODO: move to separate file?
86
+ const additionalHeadersFromOptions = async (options) => {
87
+ const { appSyncGraphqlEndpoint, query, libraryConfigHeaders = () => ({}), additionalHeaders = {}, authToken, } = options;
88
+ let additionalCustomHeaders = {};
89
+ const _libraryConfigHeaders = await libraryConfigHeaders();
90
+ if (typeof additionalHeaders === 'function') {
91
+ const requestOptions = {
92
+ url: appSyncGraphqlEndpoint || '',
93
+ queryString: query || '',
94
+ };
95
+ additionalCustomHeaders = await additionalHeaders(requestOptions);
96
+ }
97
+ else {
98
+ additionalCustomHeaders = additionalHeaders;
99
+ }
100
+ // if an authorization header is set, have the explicit, operation-level authToken take precedence
101
+ if (authToken) {
102
+ additionalCustomHeaders = {
103
+ ...additionalCustomHeaders,
104
+ Authorization: authToken,
105
+ };
106
+ }
107
+ return {
108
+ additionalCustomHeaders,
109
+ libraryConfigHeaders: _libraryConfigHeaders,
110
+ };
111
+ };
112
+ exports.additionalHeadersFromOptions = additionalHeadersFromOptions;
113
+ //# sourceMappingURL=appsyncUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appsyncUrl.js","sources":["../../../../src/Providers/AWSWebSocketProvider/appsyncUrl.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.additionalHeadersFromOptions = exports.realtimeUrlWithQueryString = exports.queryParamsFromCustomHeaders = exports.getRealtimeEndpointUrl = exports.isCustomDomain = void 0;\nconst utils_1 = require(\"@aws-amplify/core/internals/utils\");\nconst protocol = 'wss://';\nconst standardDomainPattern = /^https:\\/\\/\\w{26}\\.appsync-api\\.\\w{2}(?:(?:-\\w{2,})+)-\\d\\.amazonaws.com(?:\\.cn)?\\/graphql$/i;\nconst eventDomainPattern = /^https:\\/\\/\\w{26}\\.\\w+-api\\.\\w{2}(?:(?:-\\w{2,})+)-\\d\\.amazonaws.com(?:\\.cn)?\\/event$/i;\nconst customDomainPath = '/realtime';\nconst isCustomDomain = (url) => {\n return url.match(standardDomainPattern) === null;\n};\nexports.isCustomDomain = isCustomDomain;\nconst isEventDomain = (url) => url.match(eventDomainPattern) !== null;\nconst getRealtimeEndpointUrl = (appSyncGraphqlEndpoint) => {\n let realtimeEndpoint = appSyncGraphqlEndpoint ?? '';\n if (isEventDomain(realtimeEndpoint)) {\n realtimeEndpoint = realtimeEndpoint\n .concat(customDomainPath)\n .replace('ddpg-api', 'grt-gamma')\n .replace('appsync-api', 'appsync-realtime-api');\n }\n else if ((0, exports.isCustomDomain)(realtimeEndpoint)) {\n realtimeEndpoint = realtimeEndpoint.concat(customDomainPath);\n }\n else {\n realtimeEndpoint = realtimeEndpoint\n .replace('appsync-api', 'appsync-realtime-api')\n .replace('gogi-beta', 'grt-beta')\n .replace('ddpg-api', 'grt-gamma');\n }\n realtimeEndpoint = realtimeEndpoint\n .replace('https://', protocol)\n .replace('http://', protocol);\n return new utils_1.AmplifyUrl(realtimeEndpoint);\n};\nexports.getRealtimeEndpointUrl = getRealtimeEndpointUrl;\n/**\n * Strips out `Authorization` header if present\n */\nconst extractNonAuthHeaders = (headers) => {\n if (!headers) {\n return {};\n }\n if ('Authorization' in headers) {\n const { Authorization: _, ...nonAuthHeaders } = headers;\n return nonAuthHeaders;\n }\n return headers;\n};\n/**\n *\n * @param headers - http headers\n * @returns uri-encoded query parameters derived from custom headers\n */\nconst queryParamsFromCustomHeaders = (headers) => {\n const nonAuthHeaders = extractNonAuthHeaders(headers);\n const params = new utils_1.AmplifyUrlSearchParams();\n Object.entries(nonAuthHeaders).forEach(([k, v]) => {\n params.append(k, v);\n });\n return params;\n};\nexports.queryParamsFromCustomHeaders = queryParamsFromCustomHeaders;\n/**\n * Normalizes AppSync realtime endpoint URL\n *\n * @param appSyncGraphqlEndpoint - AppSync endpointUri from config\n * @param urlParams - URLSearchParams\n * @returns fully resolved string realtime endpoint URL\n */\nconst realtimeUrlWithQueryString = (appSyncGraphqlEndpoint, urlParams) => {\n const realtimeEndpointUrl = (0, exports.getRealtimeEndpointUrl)(appSyncGraphqlEndpoint);\n // preserves any query params a customer might manually set in the configuration\n const existingParams = new utils_1.AmplifyUrlSearchParams(realtimeEndpointUrl.search);\n for (const [k, v] of urlParams.entries()) {\n existingParams.append(k, v);\n }\n realtimeEndpointUrl.search = existingParams.toString();\n return realtimeEndpointUrl.toString();\n};\nexports.realtimeUrlWithQueryString = realtimeUrlWithQueryString;\n// TODO: move to separate file?\nconst additionalHeadersFromOptions = async (options) => {\n const { appSyncGraphqlEndpoint, query, libraryConfigHeaders = () => ({}), additionalHeaders = {}, authToken, } = options;\n let additionalCustomHeaders = {};\n const _libraryConfigHeaders = await libraryConfigHeaders();\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, operation-level authToken take precedence\n if (authToken) {\n additionalCustomHeaders = {\n ...additionalCustomHeaders,\n Authorization: authToken,\n };\n }\n return {\n additionalCustomHeaders,\n libraryConfigHeaders: _libraryConfigHeaders,\n };\n};\nexports.additionalHeadersFromOptions = additionalHeadersFromOptions;\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ 'use strict';
2
+
3
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ // SPDX-License-Identifier: Apache-2.0
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.awsRealTimeHeaderBasedAuth = void 0;
7
+ const core_1 = require("@aws-amplify/core");
8
+ const aws_client_utils_1 = require("@aws-amplify/core/internals/aws-client-utils");
9
+ const utils_1 = require("@aws-amplify/core/internals/utils");
10
+ const constants_1 = require("../constants");
11
+ const logger = new core_1.ConsoleLogger('AWSAppSyncRealTimeProvider Auth');
12
+ const awsAuthTokenHeader = async ({ host }) => {
13
+ const session = await (0, core_1.fetchAuthSession)();
14
+ return {
15
+ Authorization: session?.tokens?.accessToken?.toString(),
16
+ host,
17
+ };
18
+ };
19
+ const awsRealTimeApiKeyHeader = async ({ apiKey, host, }) => {
20
+ const dt = new Date();
21
+ const dtStr = dt.toISOString().replace(/[:-]|\.\d{3}/g, '');
22
+ return {
23
+ host,
24
+ 'x-amz-date': dtStr,
25
+ 'x-api-key': apiKey,
26
+ };
27
+ };
28
+ const awsRealTimeIAMHeader = async ({ payload, canonicalUri, appSyncGraphqlEndpoint, region, }) => {
29
+ const endpointInfo = {
30
+ region,
31
+ service: 'appsync',
32
+ };
33
+ const creds = (await (0, core_1.fetchAuthSession)()).credentials;
34
+ const request = {
35
+ url: `${appSyncGraphqlEndpoint}${canonicalUri}`,
36
+ data: payload,
37
+ method: 'POST',
38
+ headers: { ...constants_1.AWS_APPSYNC_REALTIME_HEADERS },
39
+ };
40
+ const signedParams = (0, aws_client_utils_1.signRequest)({
41
+ headers: request.headers,
42
+ method: request.method,
43
+ url: new utils_1.AmplifyUrl(request.url),
44
+ body: request.data,
45
+ }, {
46
+ credentials: creds,
47
+ signingRegion: endpointInfo.region,
48
+ signingService: endpointInfo.service,
49
+ });
50
+ return signedParams.headers;
51
+ };
52
+ const customAuthHeader = async ({ host, additionalCustomHeaders, }) => {
53
+ /**
54
+ * If `additionalHeaders` was provided to the subscription as a function,
55
+ * the headers that are returned by that function will already have been
56
+ * provided before this function is called.
57
+ */
58
+ if (!additionalCustomHeaders?.Authorization) {
59
+ throw new Error('No auth token specified');
60
+ }
61
+ return {
62
+ Authorization: additionalCustomHeaders.Authorization,
63
+ host,
64
+ };
65
+ };
66
+ const awsRealTimeHeaderBasedAuth = async ({ apiKey, authenticationType, canonicalUri, appSyncGraphqlEndpoint, region, additionalCustomHeaders, payload, }) => {
67
+ const headerHandler = {
68
+ apiKey: awsRealTimeApiKeyHeader,
69
+ iam: awsRealTimeIAMHeader,
70
+ oidc: awsAuthTokenHeader,
71
+ userPool: awsAuthTokenHeader,
72
+ lambda: customAuthHeader,
73
+ none: customAuthHeader,
74
+ };
75
+ if (!authenticationType || !headerHandler[authenticationType]) {
76
+ logger.debug(`Authentication type ${authenticationType} not supported`);
77
+ return undefined;
78
+ }
79
+ else {
80
+ const handler = headerHandler[authenticationType];
81
+ const host = appSyncGraphqlEndpoint
82
+ ? new utils_1.AmplifyUrl(appSyncGraphqlEndpoint).host
83
+ : undefined;
84
+ const resolvedApiKey = authenticationType === 'apiKey' ? apiKey : undefined;
85
+ logger.debug(`Authenticating with ${JSON.stringify(authenticationType)}`);
86
+ const result = await handler({
87
+ payload,
88
+ canonicalUri,
89
+ appSyncGraphqlEndpoint,
90
+ apiKey: resolvedApiKey,
91
+ region,
92
+ host,
93
+ additionalCustomHeaders,
94
+ });
95
+ return result;
96
+ }
97
+ };
98
+ exports.awsRealTimeHeaderBasedAuth = awsRealTimeHeaderBasedAuth;
99
+ //# sourceMappingURL=authHeaders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authHeaders.js","sources":["../../../../src/Providers/AWSWebSocketProvider/authHeaders.ts"],"sourcesContent":["\"use strict\";\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.awsRealTimeHeaderBasedAuth = void 0;\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 constants_1 = require(\"../constants\");\nconst logger = new core_1.ConsoleLogger('AWSAppSyncRealTimeProvider Auth');\nconst awsAuthTokenHeader = async ({ host }) => {\n const session = await (0, core_1.fetchAuthSession)();\n return {\n Authorization: session?.tokens?.accessToken?.toString(),\n host,\n };\n};\nconst awsRealTimeApiKeyHeader = async ({ 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};\nconst awsRealTimeIAMHeader = async ({ 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 credentials: creds,\n signingRegion: endpointInfo.region,\n signingService: endpointInfo.service,\n });\n return signedParams.headers;\n};\nconst customAuthHeader = async ({ 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};\nconst awsRealTimeHeaderBasedAuth = async ({ apiKey, authenticationType, canonicalUri, appSyncGraphqlEndpoint, region, additionalCustomHeaders, payload, }) => {\n const headerHandler = {\n apiKey: awsRealTimeApiKeyHeader,\n iam: awsRealTimeIAMHeader,\n oidc: awsAuthTokenHeader,\n userPool: awsAuthTokenHeader,\n lambda: customAuthHeader,\n none: 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 const resolvedApiKey = authenticationType === 'apiKey' ? apiKey : undefined;\n logger.debug(`Authenticating with ${JSON.stringify(authenticationType)}`);\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};\nexports.awsRealTimeHeaderBasedAuth = awsRealTimeHeaderBasedAuth;\n"],"names":[],"mappings":"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"}