@apollo/gateway 2.4.4 → 2.4.5

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 (117) hide show
  1. package/dist/__generated__/graphqlTypes.d.ts +160 -0
  2. package/dist/__generated__/graphqlTypes.d.ts.map +1 -0
  3. package/dist/__generated__/graphqlTypes.js +30 -0
  4. package/dist/__generated__/graphqlTypes.js.map +1 -0
  5. package/dist/config.d.ts +138 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +60 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/dataRewrites.d.ts +5 -0
  10. package/dist/dataRewrites.d.ts.map +1 -0
  11. package/dist/dataRewrites.js +103 -0
  12. package/dist/dataRewrites.js.map +1 -0
  13. package/dist/datasources/LocalGraphQLDataSource.d.ts +10 -0
  14. package/dist/datasources/LocalGraphQLDataSource.d.ts.map +1 -0
  15. package/dist/datasources/LocalGraphQLDataSource.js +31 -0
  16. package/dist/datasources/LocalGraphQLDataSource.js.map +1 -0
  17. package/dist/datasources/RemoteGraphQLDataSource.d.ts +24 -0
  18. package/dist/datasources/RemoteGraphQLDataSource.d.ts.map +1 -0
  19. package/dist/datasources/RemoteGraphQLDataSource.js +180 -0
  20. package/dist/datasources/RemoteGraphQLDataSource.js.map +1 -0
  21. package/dist/datasources/index.d.ts +4 -0
  22. package/dist/datasources/index.d.ts.map +1 -0
  23. package/dist/datasources/index.js +8 -0
  24. package/dist/datasources/index.js.map +1 -0
  25. package/dist/datasources/parseCacheControlHeader.d.ts +2 -0
  26. package/dist/datasources/parseCacheControlHeader.d.ts.map +1 -0
  27. package/dist/datasources/parseCacheControlHeader.js +16 -0
  28. package/dist/datasources/parseCacheControlHeader.js.map +1 -0
  29. package/dist/datasources/types.d.ts +23 -0
  30. package/dist/datasources/types.d.ts.map +1 -0
  31. package/dist/datasources/types.js +10 -0
  32. package/dist/datasources/types.js.map +1 -0
  33. package/dist/executeQueryPlan.d.ts +15 -0
  34. package/dist/executeQueryPlan.d.ts.map +1 -0
  35. package/dist/executeQueryPlan.js +539 -0
  36. package/dist/executeQueryPlan.js.map +1 -0
  37. package/dist/index.d.ts +113 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +590 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/logger.d.ts +3 -0
  42. package/dist/logger.d.ts.map +1 -0
  43. package/dist/logger.js +15 -0
  44. package/dist/logger.js.map +1 -0
  45. package/dist/operationContext.d.ts +17 -0
  46. package/dist/operationContext.d.ts.map +1 -0
  47. package/dist/operationContext.js +38 -0
  48. package/dist/operationContext.js.map +1 -0
  49. package/dist/resultShaping.d.ts +12 -0
  50. package/dist/resultShaping.d.ts.map +1 -0
  51. package/dist/resultShaping.js +229 -0
  52. package/dist/resultShaping.js.map +1 -0
  53. package/dist/schema-helper/addExtensions.d.ts +3 -0
  54. package/dist/schema-helper/addExtensions.d.ts.map +1 -0
  55. package/dist/schema-helper/addExtensions.js +23 -0
  56. package/dist/schema-helper/addExtensions.js.map +1 -0
  57. package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts +31 -0
  58. package/dist/supergraphManagers/IntrospectAndCompose/index.d.ts.map +1 -0
  59. package/dist/supergraphManagers/IntrospectAndCompose/index.js +112 -0
  60. package/dist/supergraphManagers/IntrospectAndCompose/index.js.map +1 -0
  61. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts +12 -0
  62. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.d.ts.map +1 -0
  63. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js +57 -0
  64. package/dist/supergraphManagers/IntrospectAndCompose/loadServicesFromRemoteEndpoint.js.map +1 -0
  65. package/dist/supergraphManagers/LegacyFetcher/index.d.ts +33 -0
  66. package/dist/supergraphManagers/LegacyFetcher/index.d.ts.map +1 -0
  67. package/dist/supergraphManagers/LegacyFetcher/index.js +149 -0
  68. package/dist/supergraphManagers/LegacyFetcher/index.js.map +1 -0
  69. package/dist/supergraphManagers/LocalCompose/index.d.ts +19 -0
  70. package/dist/supergraphManagers/LocalCompose/index.d.ts.map +1 -0
  71. package/dist/supergraphManagers/LocalCompose/index.js +55 -0
  72. package/dist/supergraphManagers/LocalCompose/index.js.map +1 -0
  73. package/dist/supergraphManagers/UplinkSupergraphManager/index.d.ts +63 -0
  74. package/dist/supergraphManagers/UplinkSupergraphManager/index.d.ts.map +1 -0
  75. package/dist/supergraphManagers/UplinkSupergraphManager/index.js +210 -0
  76. package/dist/supergraphManagers/UplinkSupergraphManager/index.js.map +1 -0
  77. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.d.ts +30 -0
  78. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.d.ts.map +1 -0
  79. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.js +145 -0
  80. package/dist/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.js.map +1 -0
  81. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.d.ts +14 -0
  82. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.d.ts.map +1 -0
  83. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.js +85 -0
  84. package/dist/supergraphManagers/UplinkSupergraphManager/outOfBandReporter.js.map +1 -0
  85. package/dist/supergraphManagers/index.d.ts +6 -0
  86. package/dist/supergraphManagers/index.d.ts.map +1 -0
  87. package/dist/supergraphManagers/index.js +27 -0
  88. package/dist/supergraphManagers/index.js.map +1 -0
  89. package/dist/typings/graphql.d.ts +11 -0
  90. package/dist/typings/graphql.d.ts.map +1 -0
  91. package/dist/typings/graphql.js +3 -0
  92. package/dist/typings/graphql.js.map +1 -0
  93. package/dist/utilities/array.d.ts +5 -0
  94. package/dist/utilities/array.d.ts.map +1 -0
  95. package/dist/utilities/array.js +46 -0
  96. package/dist/utilities/array.js.map +1 -0
  97. package/dist/utilities/assert.d.ts +2 -0
  98. package/dist/utilities/assert.d.ts.map +1 -0
  99. package/dist/utilities/assert.js +10 -0
  100. package/dist/utilities/assert.js.map +1 -0
  101. package/dist/utilities/deepMerge.d.ts +2 -0
  102. package/dist/utilities/deepMerge.d.ts.map +1 -0
  103. package/dist/utilities/deepMerge.js +34 -0
  104. package/dist/utilities/deepMerge.js.map +1 -0
  105. package/dist/utilities/graphql.d.ts +5 -0
  106. package/dist/utilities/graphql.d.ts.map +1 -0
  107. package/dist/utilities/graphql.js +28 -0
  108. package/dist/utilities/graphql.js.map +1 -0
  109. package/dist/utilities/opentelemetry.d.ts +10 -0
  110. package/dist/utilities/opentelemetry.d.ts.map +1 -0
  111. package/dist/utilities/opentelemetry.js +19 -0
  112. package/dist/utilities/opentelemetry.js.map +1 -0
  113. package/dist/utilities/predicates.d.ts +2 -0
  114. package/dist/utilities/predicates.d.ts.map +1 -0
  115. package/dist/utilities/predicates.js +11 -0
  116. package/dist/utilities/predicates.js.map +1 -0
  117. package/package.json +4 -4
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LegacyFetcher = void 0;
7
+ const resolvable_1 = __importDefault(require("@josephg/resolvable"));
8
+ const config_1 = require("../../config");
9
+ const composition_1 = require("@apollo/composition");
10
+ class LegacyFetcher {
11
+ constructor(options) {
12
+ this.timerRef = null;
13
+ this.config = options;
14
+ this.state = { phase: 'initialized' };
15
+ this.issueDeprecationWarnings();
16
+ }
17
+ issueDeprecationWarnings() {
18
+ var _a, _b;
19
+ if ('experimental_updateSupergraphSdl' in this.config.gatewayConfig) {
20
+ (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.warn('The `experimental_updateSupergraphSdl` option is deprecated and will be removed in a future version of `@apollo/gateway`. Please migrate to the function form of the `supergraphSdl` configuration option.');
21
+ }
22
+ if ('experimental_updateServiceDefinitions' in this.config.gatewayConfig) {
23
+ (_b = this.config.logger) === null || _b === void 0 ? void 0 : _b.warn('The `experimental_updateServiceDefinitions` option is deprecated and will be removed in a future version of `@apollo/gateway`. Please migrate to the function form of the `supergraphSdl` configuration option.');
24
+ }
25
+ }
26
+ async initialize({ update, healthCheck, getDataSource, }) {
27
+ this.update = update;
28
+ this.getDataSource = getDataSource;
29
+ if (this.config.subgraphHealthCheck) {
30
+ this.healthCheck = healthCheck;
31
+ }
32
+ let initialSupergraphSdl = null;
33
+ try {
34
+ initialSupergraphSdl = await this.updateSupergraphSdl();
35
+ }
36
+ catch (e) {
37
+ this.logUpdateFailure(e);
38
+ throw e;
39
+ }
40
+ if (this.config.pollIntervalInMs) {
41
+ this.beginPolling();
42
+ }
43
+ return {
44
+ supergraphSdl: initialSupergraphSdl,
45
+ cleanup: async () => {
46
+ if (this.state.phase === 'polling') {
47
+ await this.state.pollingPromise;
48
+ }
49
+ this.state = { phase: 'stopped' };
50
+ if (this.timerRef) {
51
+ clearTimeout(this.timerRef);
52
+ this.timerRef = null;
53
+ }
54
+ },
55
+ };
56
+ }
57
+ async updateSupergraphSdl() {
58
+ var _a, _b;
59
+ const result = await this.config.updateServiceDefinitions(this.config.gatewayConfig);
60
+ if ((0, config_1.isSupergraphSdlUpdate)(result)) {
61
+ if (this.compositionId === result.id)
62
+ return null;
63
+ await ((_a = this.healthCheck) === null || _a === void 0 ? void 0 : _a.call(this, result.supergraphSdl));
64
+ this.compositionId = result.id;
65
+ return result.supergraphSdl;
66
+ }
67
+ else if ((0, config_1.isServiceDefinitionUpdate)(result)) {
68
+ const supergraphSdl = this.updateByComposition(result);
69
+ if (!supergraphSdl)
70
+ return null;
71
+ await ((_b = this.healthCheck) === null || _b === void 0 ? void 0 : _b.call(this, supergraphSdl));
72
+ return supergraphSdl;
73
+ }
74
+ else {
75
+ throw new Error('Programming error: unexpected result type from `updateServiceDefinitions`');
76
+ }
77
+ }
78
+ updateByComposition(result) {
79
+ var _a, _b;
80
+ if (!result.serviceDefinitions ||
81
+ JSON.stringify(this.serviceDefinitions) ===
82
+ JSON.stringify(result.serviceDefinitions)) {
83
+ (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.debug('No change in service definitions since last check.');
84
+ return null;
85
+ }
86
+ if (this.serviceDefinitions) {
87
+ (_b = this.config.logger) === null || _b === void 0 ? void 0 : _b.info('New service definitions were found.');
88
+ }
89
+ this.serviceDefinitions = result.serviceDefinitions;
90
+ const supergraphSdl = this.createSupergraphFromServiceList(result.serviceDefinitions);
91
+ if (!supergraphSdl) {
92
+ throw new Error("A valid schema couldn't be composed. Falling back to previous schema.");
93
+ }
94
+ else {
95
+ return supergraphSdl;
96
+ }
97
+ }
98
+ createSupergraphFromServiceList(serviceList) {
99
+ var _a, _b, _c;
100
+ (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.debug(`Composing schema from service list: \n${serviceList
101
+ .map(({ name, url }) => ` ${url || 'local'}: ${name}`)
102
+ .join('\n')}`);
103
+ const compositionResult = (0, composition_1.composeServices)(serviceList);
104
+ if (compositionResult.errors) {
105
+ const { errors } = compositionResult;
106
+ throw Error("A valid schema couldn't be composed. The following composition errors were found:\n" +
107
+ errors.map((e) => '\t' + e.message).join('\n'));
108
+ }
109
+ else {
110
+ const { supergraphSdl } = compositionResult;
111
+ for (const service of serviceList) {
112
+ (_b = this.getDataSource) === null || _b === void 0 ? void 0 : _b.call(this, service);
113
+ }
114
+ (_c = this.config.logger) === null || _c === void 0 ? void 0 : _c.debug('Schema loaded and ready for execution');
115
+ return supergraphSdl;
116
+ }
117
+ }
118
+ beginPolling() {
119
+ this.state = { phase: 'polling' };
120
+ this.poll();
121
+ }
122
+ poll() {
123
+ this.timerRef = setTimeout(async () => {
124
+ var _a;
125
+ if (this.state.phase === 'polling') {
126
+ const pollingPromise = (0, resolvable_1.default)();
127
+ this.state.pollingPromise = pollingPromise;
128
+ try {
129
+ const maybeNewSupergraphSdl = await this.updateSupergraphSdl();
130
+ if (maybeNewSupergraphSdl) {
131
+ (_a = this.update) === null || _a === void 0 ? void 0 : _a.call(this, maybeNewSupergraphSdl);
132
+ }
133
+ }
134
+ catch (e) {
135
+ this.logUpdateFailure(e);
136
+ }
137
+ pollingPromise.resolve();
138
+ }
139
+ this.poll();
140
+ }, this.config.pollIntervalInMs);
141
+ }
142
+ logUpdateFailure(e) {
143
+ var _a, _b;
144
+ (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.error('LegacyFetcher failed to update supergraph with the following error: ' +
145
+ ((_b = e.message) !== null && _b !== void 0 ? _b : e));
146
+ }
147
+ }
148
+ exports.LegacyFetcher = LegacyFetcher;
149
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/supergraphManagers/LegacyFetcher/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Logger } from '@apollo/utils.logger';
2
+ import { SupergraphSdlHookOptions, SupergraphManager } from '../../config';
3
+ import { ServiceDefinition } from '@apollo/federation-internals';
4
+ export interface LocalComposeOptions {
5
+ logger?: Logger;
6
+ localServiceList: ServiceDefinition[];
7
+ }
8
+ export declare class LocalCompose implements SupergraphManager {
9
+ private config;
10
+ private getDataSource?;
11
+ constructor(options: LocalComposeOptions);
12
+ private issueDeprecationWarnings;
13
+ initialize({ getDataSource }: SupergraphSdlHookOptions): Promise<{
14
+ supergraphSdl: string;
15
+ }>;
16
+ private createSupergraphFromServiceList;
17
+ private logUpdateFailure;
18
+ }
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/supergraphManagers/LocalCompose/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAEL,wBAAwB,EACxB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;CACvC;AAED,qBAAa,YAAa,YAAW,iBAAiB;IACpD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,aAAa,CAAC,CAAwB;gBAElC,OAAO,EAAE,mBAAmB;IAKxC,OAAO,CAAC,wBAAwB;IAMnB,UAAU,CAAC,EAAE,aAAa,EAAE,EAAE,wBAAwB;;;IAgBnE,OAAO,CAAC,+BAA+B;IA0BvC,OAAO,CAAC,gBAAgB;CAMzB"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocalCompose = void 0;
4
+ const composition_1 = require("@apollo/composition");
5
+ class LocalCompose {
6
+ constructor(options) {
7
+ this.config = options;
8
+ this.issueDeprecationWarnings();
9
+ }
10
+ issueDeprecationWarnings() {
11
+ var _a;
12
+ (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.warn('The `localServiceList` option is deprecated and will be removed in a future version of `@apollo/gateway`. Please migrate to the `LocalCompose` supergraph manager exported by `@apollo/gateway`.');
13
+ }
14
+ async initialize({ getDataSource }) {
15
+ this.getDataSource = getDataSource;
16
+ let supergraphSdl = null;
17
+ try {
18
+ supergraphSdl = this.createSupergraphFromServiceList(this.config.localServiceList);
19
+ }
20
+ catch (e) {
21
+ this.logUpdateFailure(e);
22
+ throw e;
23
+ }
24
+ return {
25
+ supergraphSdl,
26
+ };
27
+ }
28
+ createSupergraphFromServiceList(serviceList) {
29
+ var _a, _b, _c;
30
+ (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.debug(`Composing schema from service list: \n${serviceList
31
+ .map(({ name, url }) => ` ${url || 'local'}: ${name}`)
32
+ .join('\n')}`);
33
+ const compositionResult = (0, composition_1.composeServices)(serviceList);
34
+ const errors = compositionResult.errors;
35
+ if (errors) {
36
+ throw Error("A valid schema couldn't be composed. The following composition errors were found:\n" +
37
+ errors.map((e) => '\t' + e.message).join('\n'));
38
+ }
39
+ else {
40
+ const { supergraphSdl } = compositionResult;
41
+ for (const service of serviceList) {
42
+ (_b = this.getDataSource) === null || _b === void 0 ? void 0 : _b.call(this, service);
43
+ }
44
+ (_c = this.config.logger) === null || _c === void 0 ? void 0 : _c.debug('Schema loaded and ready for execution');
45
+ return supergraphSdl;
46
+ }
47
+ }
48
+ logUpdateFailure(e) {
49
+ var _a, _b;
50
+ (_a = this.config.logger) === null || _a === void 0 ? void 0 : _a.error('LocalCompose failed to update supergraph with the following error: ' +
51
+ ((_b = e.message) !== null && _b !== void 0 ? _b : e));
52
+ }
53
+ }
54
+ exports.LocalCompose = LocalCompose;
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/supergraphManagers/LocalCompose/index.ts"],"names":[],"mappings":";;;AAEA,qDAAsD;AAatD,MAAa,YAAY;IAIvB,YAAY,OAA4B;QACtC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;QACtB,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAEO,wBAAwB;;QAC9B,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,0CAAE,IAAI,CACtB,kMAAkM,CACnM,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,EAAE,aAAa,EAA4B;QACjE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,aAAa,GAAkB,IAAI,CAAC;QACxC,IAAI;YACF,aAAa,GAAG,IAAI,CAAC,+BAA+B,CAClD,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAC7B,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,CAAC,CAAC;SACT;QACD,OAAO;YACL,aAAa;SACd,CAAC;IACJ,CAAC;IAEO,+BAA+B,CAAC,WAAgC;;QACtE,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,0CAAE,KAAK,CACvB,yCAAyC,WAAW;aACjD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;aACtD,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;QAEF,MAAM,iBAAiB,GAAG,IAAA,6BAAe,EAAC,WAAW,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;QACxC,IAAI,MAAM,EAAE;YACV,MAAM,KAAK,CACT,qFAAqF;gBACnF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACjD,CAAC;SACH;aAAM;YACL,MAAM,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAAC;YAC5C,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;gBACjC,MAAA,IAAI,CAAC,aAAa,qDAAG,OAAO,CAAC,CAAC;aAC/B;YAED,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,0CAAE,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAEnE,OAAO,aAAa,CAAC;SACtB;IACH,CAAC;IAEO,gBAAgB,CAAC,CAAM;;QAC7B,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,0CAAE,KAAK,CACvB,qEAAqE;YACnE,CAAC,MAAA,CAAC,CAAC,OAAO,mCAAI,CAAC,CAAC,CACnB,CAAC;IACJ,CAAC;CACF;AA/DD,oCA+DC"}
@@ -0,0 +1,63 @@
1
+ import type { Logger } from '@apollo/utils.logger';
2
+ import type { Fetcher } from '@apollo/utils.fetcher';
3
+ import { SupergraphManager, SupergraphSdlHookOptions } from '../../config';
4
+ export type FailureToFetchSupergraphSdlFunctionParams = {
5
+ error: Error;
6
+ graphRef: string;
7
+ logger: Logger;
8
+ fetchCount: number;
9
+ };
10
+ export type FailureToFetchSupergraphSdlDuringInit = ({ error, graphRef, logger, fetchCount, }: FailureToFetchSupergraphSdlFunctionParams) => Promise<string>;
11
+ export type FailureToFetchSupergraphSdlAfterInit = ({ error, graphRef, logger, fetchCount, mostRecentSuccessfulFetchAt, }: FailureToFetchSupergraphSdlFunctionParams & {
12
+ mostRecentSuccessfulFetchAt?: Date;
13
+ }) => Promise<string | null>;
14
+ export declare class UplinkSupergraphManager implements SupergraphManager {
15
+ static readonly DEFAULT_REQUEST_TIMEOUT_MS = 30000;
16
+ static readonly MIN_POLL_INTERVAL_MS = 10000;
17
+ static readonly DEFAULT_UPLINK_ENDPOINTS: string[];
18
+ readonly uplinkEndpoints: string[];
19
+ private apiKey;
20
+ private graphRef;
21
+ private fetcher;
22
+ private maxRetries;
23
+ private requestTimeoutMs;
24
+ private initialMaxRetries;
25
+ private pollIntervalMs;
26
+ private logger;
27
+ private update?;
28
+ private shouldRunSubgraphHealthcheck;
29
+ private healthCheck?;
30
+ private onFailureToFetchSupergraphSdlDuringInit?;
31
+ private onFailureToFetchSupergraphSdlAfterInit?;
32
+ private timerRef;
33
+ private state;
34
+ private errorReportingEndpoint;
35
+ private compositionId?;
36
+ private fetchCount;
37
+ private mostRecentSuccessfulFetchAt?;
38
+ constructor({ apiKey, graphRef, debug, logger, uplinkEndpoints, fallbackPollIntervalInMs, maxRetries, initialMaxRetries, fetcher, shouldRunSubgraphHealthcheck, onFailureToFetchSupergraphSdlDuringInit, onFailureToFetchSupergraphSdlAfterInit, }: {
39
+ apiKey: string;
40
+ graphRef: string;
41
+ debug?: boolean;
42
+ logger?: Logger;
43
+ uplinkEndpoints?: string[];
44
+ fallbackPollIntervalInMs?: number;
45
+ maxRetries?: number;
46
+ initialMaxRetries?: number;
47
+ fetcher?: Fetcher;
48
+ shouldRunSubgraphHealthcheck?: boolean;
49
+ onFailureToFetchSupergraphSdlDuringInit?: FailureToFetchSupergraphSdlDuringInit;
50
+ onFailureToFetchSupergraphSdlAfterInit?: FailureToFetchSupergraphSdlAfterInit;
51
+ });
52
+ initialize({ update, healthCheck }: SupergraphSdlHookOptions): Promise<{
53
+ supergraphSdl: string;
54
+ cleanup: () => Promise<void>;
55
+ }>;
56
+ nextFetch(): Promise<void | null>;
57
+ static getUplinkEndpoints(): string[];
58
+ private updateSupergraphSdl;
59
+ private beginPolling;
60
+ private poll;
61
+ private logUpdateFailure;
62
+ }
63
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/supergraphManagers/UplinkSupergraphManager/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.UplinkSupergraphManager = void 0;
30
+ const makeFetchHappen = __importStar(require("make-fetch-happen"));
31
+ const resolvable_1 = __importDefault(require("@josephg/resolvable"));
32
+ const logger_1 = require("../../logger");
33
+ const loadSupergraphSdlFromStorage_1 = require("./loadSupergraphSdlFromStorage");
34
+ class UplinkSupergraphManager {
35
+ constructor({ apiKey, graphRef, debug, logger, uplinkEndpoints, fallbackPollIntervalInMs, maxRetries, initialMaxRetries, fetcher, shouldRunSubgraphHealthcheck, onFailureToFetchSupergraphSdlDuringInit, onFailureToFetchSupergraphSdlAfterInit, }) {
36
+ var _a;
37
+ this.uplinkEndpoints = UplinkSupergraphManager.getUplinkEndpoints();
38
+ this.fetcher = makeFetchHappen.defaults();
39
+ this.requestTimeoutMs = UplinkSupergraphManager.DEFAULT_REQUEST_TIMEOUT_MS;
40
+ this.pollIntervalMs = UplinkSupergraphManager.MIN_POLL_INTERVAL_MS;
41
+ this.shouldRunSubgraphHealthcheck = false;
42
+ this.timerRef = null;
43
+ this.errorReportingEndpoint = (_a = process.env.APOLLO_OUT_OF_BAND_REPORTER_ENDPOINT) !== null && _a !== void 0 ? _a : undefined;
44
+ this.fetchCount = 0;
45
+ this.apiKey = apiKey;
46
+ this.graphRef = graphRef;
47
+ this.logger = logger !== null && logger !== void 0 ? logger : (0, logger_1.getDefaultLogger)(debug);
48
+ this.uplinkEndpoints = uplinkEndpoints !== null && uplinkEndpoints !== void 0 ? uplinkEndpoints : this.uplinkEndpoints;
49
+ this.maxRetries = maxRetries !== null && maxRetries !== void 0 ? maxRetries : this.uplinkEndpoints.length * 3 - 1;
50
+ this.initialMaxRetries = initialMaxRetries !== null && initialMaxRetries !== void 0 ? initialMaxRetries : this.maxRetries;
51
+ this.pollIntervalMs = fallbackPollIntervalInMs !== null && fallbackPollIntervalInMs !== void 0 ? fallbackPollIntervalInMs : this.pollIntervalMs;
52
+ if (this.pollIntervalMs < UplinkSupergraphManager.MIN_POLL_INTERVAL_MS) {
53
+ this.logger.warn('Polling Apollo services at a frequency of less than once per 10 seconds (10000) is disallowed. Instead, the minimum allowed pollInterval of 10000 will be used. Please reconfigure your `fallbackPollIntervalInMs` accordingly. If this is problematic for your team, please contact support.');
54
+ this.pollIntervalMs = UplinkSupergraphManager.MIN_POLL_INTERVAL_MS;
55
+ }
56
+ this.fetcher = fetcher !== null && fetcher !== void 0 ? fetcher : this.fetcher;
57
+ this.shouldRunSubgraphHealthcheck =
58
+ shouldRunSubgraphHealthcheck !== null && shouldRunSubgraphHealthcheck !== void 0 ? shouldRunSubgraphHealthcheck : this.shouldRunSubgraphHealthcheck;
59
+ this.onFailureToFetchSupergraphSdlDuringInit =
60
+ onFailureToFetchSupergraphSdlDuringInit;
61
+ this.onFailureToFetchSupergraphSdlAfterInit =
62
+ onFailureToFetchSupergraphSdlAfterInit;
63
+ this.state = { phase: 'constructed' };
64
+ }
65
+ async initialize({ update, healthCheck }) {
66
+ this.update = update;
67
+ if (this.shouldRunSubgraphHealthcheck) {
68
+ this.healthCheck = healthCheck;
69
+ }
70
+ let initialSupergraphSdl = null;
71
+ try {
72
+ initialSupergraphSdl = await this.updateSupergraphSdl(this.initialMaxRetries);
73
+ if (!initialSupergraphSdl) {
74
+ throw new Error('Invalid supergraph schema supplied during initialization.');
75
+ }
76
+ }
77
+ catch (e) {
78
+ this.logUpdateFailure(e);
79
+ throw e;
80
+ }
81
+ this.state = { phase: 'initialized' };
82
+ this.beginPolling();
83
+ return {
84
+ supergraphSdl: initialSupergraphSdl,
85
+ cleanup: async () => {
86
+ if (this.state.phase === 'polling') {
87
+ await this.state.pollingPromise;
88
+ }
89
+ this.state = { phase: 'stopped' };
90
+ if (this.timerRef) {
91
+ clearTimeout(this.timerRef);
92
+ this.timerRef = null;
93
+ }
94
+ },
95
+ };
96
+ }
97
+ async nextFetch() {
98
+ if (this.state.phase !== 'polling') {
99
+ return;
100
+ }
101
+ return this.state.nextFetchPromise;
102
+ }
103
+ static getUplinkEndpoints() {
104
+ var _a;
105
+ const envEndpoints = (_a = process.env.APOLLO_SCHEMA_CONFIG_DELIVERY_ENDPOINT) === null || _a === void 0 ? void 0 : _a.split(',');
106
+ return envEndpoints !== null && envEndpoints !== void 0 ? envEndpoints : UplinkSupergraphManager.DEFAULT_UPLINK_ENDPOINTS;
107
+ }
108
+ async updateSupergraphSdl(maxRetries) {
109
+ var _a, _b;
110
+ let supergraphSdl;
111
+ try {
112
+ const result = await (0, loadSupergraphSdlFromStorage_1.loadSupergraphSdlFromUplinks)({
113
+ graphRef: this.graphRef,
114
+ apiKey: this.apiKey,
115
+ endpoints: this.uplinkEndpoints,
116
+ errorReportingEndpoint: this.errorReportingEndpoint,
117
+ fetcher: this.fetcher,
118
+ compositionId: (_a = this.compositionId) !== null && _a !== void 0 ? _a : null,
119
+ maxRetries,
120
+ requestTimeoutMs: this.requestTimeoutMs,
121
+ roundRobinSeed: this.fetchCount++,
122
+ logger: this.logger,
123
+ });
124
+ this.mostRecentSuccessfulFetchAt = new Date();
125
+ this.logger.debug(`Received Uplink response. Has updated SDL? ${!!(result === null || result === void 0 ? void 0 : result.supergraphSdl)}`);
126
+ if (!result) {
127
+ return null;
128
+ }
129
+ this.compositionId = result.id;
130
+ supergraphSdl = result.supergraphSdl;
131
+ if (result === null || result === void 0 ? void 0 : result.minDelaySeconds) {
132
+ this.pollIntervalMs = result.minDelaySeconds * 1000;
133
+ }
134
+ }
135
+ catch (e) {
136
+ this.logger.debug(`Error fetching supergraphSdl from Uplink during phase '${this.state.phase}'`);
137
+ if (this.state.phase === 'constructed' &&
138
+ this.onFailureToFetchSupergraphSdlDuringInit) {
139
+ supergraphSdl = await this.onFailureToFetchSupergraphSdlDuringInit({
140
+ error: e,
141
+ graphRef: this.graphRef,
142
+ logger: this.logger,
143
+ fetchCount: this.fetchCount,
144
+ });
145
+ }
146
+ else if (this.state.phase === 'polling' &&
147
+ this.onFailureToFetchSupergraphSdlAfterInit) {
148
+ supergraphSdl = await this.onFailureToFetchSupergraphSdlAfterInit({
149
+ error: e,
150
+ graphRef: this.graphRef,
151
+ logger: this.logger,
152
+ fetchCount: this.fetchCount,
153
+ mostRecentSuccessfulFetchAt: this.mostRecentSuccessfulFetchAt,
154
+ });
155
+ if (!supergraphSdl) {
156
+ return null;
157
+ }
158
+ }
159
+ else {
160
+ throw e;
161
+ }
162
+ }
163
+ await ((_b = this.healthCheck) === null || _b === void 0 ? void 0 : _b.call(this, supergraphSdl));
164
+ return supergraphSdl;
165
+ }
166
+ beginPolling() {
167
+ this.state = { phase: 'polling' };
168
+ this.poll();
169
+ }
170
+ poll() {
171
+ if (this.state.phase !== 'polling') {
172
+ this.logger.debug(`Stopped polling Uplink [phase: ${this.state.phase}]`);
173
+ return;
174
+ }
175
+ this.state.nextFetchPromise = (0, resolvable_1.default)();
176
+ this.logger.debug(`Will poll Uplink after ${this.pollIntervalMs}ms [phase: ${this.state.phase}]`);
177
+ this.timerRef = setTimeout(async () => {
178
+ var _a, _b;
179
+ if (this.state.phase === 'polling') {
180
+ const pollingPromise = (0, resolvable_1.default)();
181
+ this.state.pollingPromise = pollingPromise;
182
+ try {
183
+ const supergraphSdl = await this.updateSupergraphSdl(this.maxRetries);
184
+ if (supergraphSdl) {
185
+ (_a = this.update) === null || _a === void 0 ? void 0 : _a.call(this, supergraphSdl);
186
+ }
187
+ }
188
+ catch (e) {
189
+ this.logUpdateFailure(e);
190
+ }
191
+ pollingPromise.resolve();
192
+ (_b = this.state.nextFetchPromise) === null || _b === void 0 ? void 0 : _b.resolve();
193
+ }
194
+ this.poll();
195
+ }, this.pollIntervalMs);
196
+ }
197
+ logUpdateFailure(e) {
198
+ var _a;
199
+ this.logger.error('UplinkSupergraphManager failed to update supergraph with the following error: ' +
200
+ ((_a = e.message) !== null && _a !== void 0 ? _a : e));
201
+ }
202
+ }
203
+ UplinkSupergraphManager.DEFAULT_REQUEST_TIMEOUT_MS = 30000;
204
+ UplinkSupergraphManager.MIN_POLL_INTERVAL_MS = 10000;
205
+ UplinkSupergraphManager.DEFAULT_UPLINK_ENDPOINTS = [
206
+ 'https://uplink.api.apollographql.com/',
207
+ 'https://aws.uplink.api.apollographql.com/',
208
+ ];
209
+ exports.UplinkSupergraphManager = UplinkSupergraphManager;
210
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/supergraphManagers/UplinkSupergraphManager/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { SupergraphSdlUpdate } from '../../config';
2
+ import type { Fetcher } from '@apollo/utils.fetcher';
3
+ import type { Logger } from '@apollo/utils.logger';
4
+ export declare const SUPERGRAPH_SDL_QUERY = "#graphql\n query SupergraphSdl($apiKey: String!, $ref: String!, $ifAfterId: ID) {\n routerConfig(ref: $ref, apiKey: $apiKey, ifAfterId: $ifAfterId) {\n __typename\n ... on RouterConfigResult {\n id\n supergraphSdl: supergraphSDL\n minDelaySeconds\n }\n ... on FetchError {\n code\n message\n }\n }\n }\n";
5
+ export declare class UplinkFetcherError extends Error {
6
+ constructor(message: string);
7
+ }
8
+ export declare function loadSupergraphSdlFromUplinks({ graphRef, apiKey, endpoints, errorReportingEndpoint, fetcher, compositionId, maxRetries, requestTimeoutMs, roundRobinSeed, logger, }: {
9
+ graphRef: string;
10
+ apiKey: string;
11
+ endpoints: string[];
12
+ errorReportingEndpoint: string | undefined;
13
+ fetcher: Fetcher;
14
+ compositionId: string | null;
15
+ maxRetries: number;
16
+ requestTimeoutMs: number;
17
+ roundRobinSeed: number;
18
+ logger: Logger;
19
+ }): Promise<SupergraphSdlUpdate | null>;
20
+ export declare function loadSupergraphSdlFromStorage({ graphRef, apiKey, endpoint, errorReportingEndpoint, fetcher, requestTimeoutMs, compositionId, logger, }: {
21
+ graphRef: string;
22
+ apiKey: string;
23
+ endpoint: string;
24
+ errorReportingEndpoint?: string;
25
+ fetcher: Fetcher;
26
+ requestTimeoutMs: number;
27
+ compositionId: string | null;
28
+ logger: Logger;
29
+ }): Promise<SupergraphSdlUpdate | null>;
30
+ //# sourceMappingURL=loadSupergraphSdlFromStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadSupergraphSdlFromStorage.d.ts","sourceRoot":"","sources":["../../../src/supergraphManagers/UplinkSupergraphManager/loadSupergraphSdlFromStorage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,OAAO,KAAK,EAEV,OAAO,EAER,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD,eAAO,MAAM,oBAAoB,wXAehC,CAAC;AAoBF,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAsB,4BAA4B,CAAC,EACjD,QAAQ,EACR,MAAM,EACN,SAAS,EACT,sBAAsB,EACtB,OAAO,EACP,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAwBvC;AAED,wBAAsB,4BAA4B,CAAC,EACjD,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,sBAAsB,EACtB,OAAO,EACP,gBAAgB,EAChB,aAAa,EACb,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAI,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAsGvC"}