@adaptic/backend-legacy 0.0.938 → 0.0.939
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apollo-client.server.cjs +73 -0
- package/apollo-client.server.d.ts +17 -0
- package/client.cjs +17 -1
- package/client.d.ts +10 -0
- package/esm/apollo-client.server.d.ts +17 -0
- package/esm/apollo-client.server.d.ts.map +1 -1
- package/esm/apollo-client.server.js.map +1 -1
- package/esm/apollo-client.server.mjs +71 -0
- package/esm/client.d.ts +10 -0
- package/esm/client.d.ts.map +1 -1
- package/esm/client.js.map +1 -1
- package/esm/client.mjs +17 -1
- package/package.json +1 -1
package/apollo-client.server.cjs
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// apollo-client.server.ts
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.onError = exports.setContext = exports.split = exports.ApolloError = exports.gql = exports.HttpLink = exports.InMemoryCache = exports.ApolloClient = void 0;
|
|
5
|
+
exports.configureKeepAliveDispatcher = configureKeepAliveDispatcher;
|
|
5
6
|
const core_cjs_1 = require("@apollo/client/core/core.cjs");
|
|
6
7
|
Object.defineProperty(exports, "ApolloClient", { enumerable: true, get: function () { return core_cjs_1.ApolloClient; } });
|
|
7
8
|
Object.defineProperty(exports, "gql", { enumerable: true, get: function () { return core_cjs_1.gql; } });
|
|
@@ -16,4 +17,76 @@ const http_cjs_1 = require("@apollo/client/link/http/http.cjs");
|
|
|
16
17
|
Object.defineProperty(exports, "HttpLink", { enumerable: true, get: function () { return http_cjs_1.HttpLink; } });
|
|
17
18
|
const inMemoryCache_js_1 = require("@apollo/client/cache/inmemory/inMemoryCache.js");
|
|
18
19
|
Object.defineProperty(exports, "InMemoryCache", { enumerable: true, get: function () { return inMemoryCache_js_1.InMemoryCache; } });
|
|
20
|
+
const logger_1 = require("./utils/logger.cjs");
|
|
21
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
22
|
+
// HTTP keepalive agent for outgoing fetch (server-side only)
|
|
23
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
24
|
+
//
|
|
25
|
+
// Without an explicit dispatcher, Node.js's built-in fetch (powered by undici)
|
|
26
|
+
// uses a default dispatcher whose connection lifetime defaults are tuned for
|
|
27
|
+
// short scripts, NOT long-running services. In long-running engine processes
|
|
28
|
+
// this manifests as TCP socket "mushrooming": every GraphQL operation opens
|
|
29
|
+
// a fresh TCP+TLS connection, and the kernel's ephemeral-port pool is
|
|
30
|
+
// exhausted under sustained load.
|
|
31
|
+
//
|
|
32
|
+
// Setting a single global undici Agent with `keepAliveTimeout` and a bounded
|
|
33
|
+
// `connections` pool ensures sockets are reused across operations and that
|
|
34
|
+
// at most N parallel connections per origin are kept alive — typical
|
|
35
|
+
// behavior for any production HTTP client. This dramatically reduces TCP
|
|
36
|
+
// handshake overhead and prevents the engine→backend-legacy connection
|
|
37
|
+
// queue from compounding under load.
|
|
38
|
+
//
|
|
39
|
+
// Tuning rationale:
|
|
40
|
+
// - keepAliveTimeout 30s: idle sockets stay open for 30s before being closed
|
|
41
|
+
// - keepAliveMaxTimeout 600s: hard cap on connection age
|
|
42
|
+
// - connections 64: max parallel sockets per origin (covers concurrent
|
|
43
|
+
// sessions × ~1 op each, with headroom for bursts)
|
|
44
|
+
// - pipelining 1: HTTP/1.1 pipelining (most servers don't support more)
|
|
45
|
+
//
|
|
46
|
+
// This setup is idempotent and safe to call multiple times — only the first
|
|
47
|
+
// call actually configures the dispatcher.
|
|
48
|
+
let keepAliveConfigured = false;
|
|
49
|
+
/**
|
|
50
|
+
* Configure a single global undici dispatcher with persistent keepalive
|
|
51
|
+
* connections for the Node.js process. Call this once during server-side
|
|
52
|
+
* application startup, before any GraphQL operation is made.
|
|
53
|
+
*
|
|
54
|
+
* Idempotent: subsequent calls are no-ops.
|
|
55
|
+
*
|
|
56
|
+
* Browser environments are unaffected — this function only runs on Node.js.
|
|
57
|
+
*/
|
|
58
|
+
function configureKeepAliveDispatcher(opts) {
|
|
59
|
+
var _a, _b, _c, _d, _e, _f;
|
|
60
|
+
if (keepAliveConfigured) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Server-only: bail in browser bundles.
|
|
64
|
+
if (typeof window !== 'undefined') {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
// Lazy require so this file remains tree-shakable for browser consumers.
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
|
|
70
|
+
const undici = require('undici');
|
|
71
|
+
const dispatcher = new undici.Agent({
|
|
72
|
+
keepAliveTimeout: (_a = opts === null || opts === void 0 ? void 0 : opts.keepAliveTimeoutMs) !== null && _a !== void 0 ? _a : 30000,
|
|
73
|
+
keepAliveMaxTimeout: (_b = opts === null || opts === void 0 ? void 0 : opts.keepAliveMaxTimeoutMs) !== null && _b !== void 0 ? _b : 600000,
|
|
74
|
+
connections: (_c = opts === null || opts === void 0 ? void 0 : opts.connections) !== null && _c !== void 0 ? _c : 64,
|
|
75
|
+
pipelining: 1,
|
|
76
|
+
});
|
|
77
|
+
undici.setGlobalDispatcher(dispatcher);
|
|
78
|
+
keepAliveConfigured = true;
|
|
79
|
+
logger_1.logger.info('Apollo client: undici global keepalive dispatcher configured', {
|
|
80
|
+
connections: (_d = opts === null || opts === void 0 ? void 0 : opts.connections) !== null && _d !== void 0 ? _d : 64,
|
|
81
|
+
keepAliveTimeoutMs: (_e = opts === null || opts === void 0 ? void 0 : opts.keepAliveTimeoutMs) !== null && _e !== void 0 ? _e : 30000,
|
|
82
|
+
keepAliveMaxTimeoutMs: (_f = opts === null || opts === void 0 ? void 0 : opts.keepAliveMaxTimeoutMs) !== null && _f !== void 0 ? _f : 600000,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
// Undici should always be available alongside Node 18+ but be defensive.
|
|
87
|
+
logger_1.logger.warn('Apollo client: failed to configure undici keepalive dispatcher', {
|
|
88
|
+
error: err instanceof Error ? err.message : String(err),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
19
92
|
//# sourceMappingURL=apollo-client.server.js.map
|
|
@@ -7,4 +7,21 @@ import { HttpLink } from '@apollo/client/link/http/http.cjs';
|
|
|
7
7
|
import { InMemoryCache } from '@apollo/client/cache/inmemory/inMemoryCache.js';
|
|
8
8
|
export { ApolloClient, InMemoryCache, HttpLink, gql, ApolloError, split, setContext, onError, };
|
|
9
9
|
export type { ApolloClientType, InMemoryCacheType, HttpLinkType, NormalizedCacheObject, };
|
|
10
|
+
/**
|
|
11
|
+
* Configure a single global undici dispatcher with persistent keepalive
|
|
12
|
+
* connections for the Node.js process. Call this once during server-side
|
|
13
|
+
* application startup, before any GraphQL operation is made.
|
|
14
|
+
*
|
|
15
|
+
* Idempotent: subsequent calls are no-ops.
|
|
16
|
+
*
|
|
17
|
+
* Browser environments are unaffected — this function only runs on Node.js.
|
|
18
|
+
*/
|
|
19
|
+
export declare function configureKeepAliveDispatcher(opts?: {
|
|
20
|
+
/** Max parallel sockets per origin. Default: 64. */
|
|
21
|
+
connections?: number;
|
|
22
|
+
/** Idle keep-alive timeout in milliseconds. Default: 30000. */
|
|
23
|
+
keepAliveTimeoutMs?: number;
|
|
24
|
+
/** Hard cap on connection age in milliseconds. Default: 600000 (10 min). */
|
|
25
|
+
keepAliveMaxTimeoutMs?: number;
|
|
26
|
+
}): void;
|
|
10
27
|
//# sourceMappingURL=apollo-client.server.d.ts.map
|
package/client.cjs
CHANGED
|
@@ -225,6 +225,18 @@ async function getApolloClient() {
|
|
|
225
225
|
apolloModules = await loadApolloModules();
|
|
226
226
|
}
|
|
227
227
|
const { ApolloClient, InMemoryCache, HttpLink, setContext, onError } = apolloModules;
|
|
228
|
+
// Configure a global undici keepalive dispatcher for Node.js fetch.
|
|
229
|
+
// Without this, Node's built-in fetch opens a fresh TCP socket per
|
|
230
|
+
// request, exhausting the kernel's ephemeral port pool under sustained
|
|
231
|
+
// load (the engine's signature symptom on Railway with many concurrent
|
|
232
|
+
// GraphQL operations). This is server-only — browser bundles see a
|
|
233
|
+
// no-op since `apollo-client.server.ts` is only loaded on Node.js.
|
|
234
|
+
if (typeof window === 'undefined') {
|
|
235
|
+
const serverModule = apolloModules;
|
|
236
|
+
if (typeof serverModule.configureKeepAliveDispatcher === 'function') {
|
|
237
|
+
serverModule.configureKeepAliveDispatcher();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
228
240
|
// Determine the GraphQL endpoint.
|
|
229
241
|
const isProduction = process.env.NODE_ENV === 'production';
|
|
230
242
|
const httpUrl = process.env.NEXT_PUBLIC_BACKEND_HTTPS_URL ||
|
|
@@ -232,7 +244,11 @@ async function getApolloClient() {
|
|
|
232
244
|
(isProduction
|
|
233
245
|
? 'https://api.adaptic.ai/graphql'
|
|
234
246
|
: 'http://localhost:4000/graphql');
|
|
235
|
-
// Create the HTTP link
|
|
247
|
+
// Create the HTTP link. The `fetch` global resolves to Node.js's
|
|
248
|
+
// built-in undici fetch on the server (which now uses the keepalive
|
|
249
|
+
// dispatcher configured above) or the browser's native fetch on the
|
|
250
|
+
// client. Either way, sockets are reused across requests instead of
|
|
251
|
+
// a fresh TCP+TLS handshake per operation.
|
|
236
252
|
const httpLinkInstance = new HttpLink({
|
|
237
253
|
uri: httpUrl,
|
|
238
254
|
fetch,
|
package/client.d.ts
CHANGED
|
@@ -10,6 +10,16 @@ export interface ApolloModules {
|
|
|
10
10
|
split: typeof import('@apollo/client').split;
|
|
11
11
|
setContext: typeof import('@apollo/client/link/context').setContext;
|
|
12
12
|
onError: typeof import('@apollo/client/link/error').onError;
|
|
13
|
+
/**
|
|
14
|
+
* Server-only helper: lazily exported only by `apollo-client.server.ts`.
|
|
15
|
+
* The browser variant does not export this and the runtime check above
|
|
16
|
+
* gates the call to `typeof window === 'undefined'`.
|
|
17
|
+
*/
|
|
18
|
+
configureKeepAliveDispatcher?: (opts?: {
|
|
19
|
+
connections?: number;
|
|
20
|
+
keepAliveTimeoutMs?: number;
|
|
21
|
+
keepAliveMaxTimeoutMs?: number;
|
|
22
|
+
}) => void;
|
|
13
23
|
}
|
|
14
24
|
interface ConnectionPoolConfig {
|
|
15
25
|
maxConcurrentOperations: number;
|
|
@@ -7,4 +7,21 @@ import { HttpLink } from '@apollo/client/link/http/http.cjs';
|
|
|
7
7
|
import { InMemoryCache } from '@apollo/client/cache/inmemory/inMemoryCache.js';
|
|
8
8
|
export { ApolloClient, InMemoryCache, HttpLink, gql, ApolloError, split, setContext, onError, };
|
|
9
9
|
export type { ApolloClientType, InMemoryCacheType, HttpLinkType, NormalizedCacheObject, };
|
|
10
|
+
/**
|
|
11
|
+
* Configure a single global undici dispatcher with persistent keepalive
|
|
12
|
+
* connections for the Node.js process. Call this once during server-side
|
|
13
|
+
* application startup, before any GraphQL operation is made.
|
|
14
|
+
*
|
|
15
|
+
* Idempotent: subsequent calls are no-ops.
|
|
16
|
+
*
|
|
17
|
+
* Browser environments are unaffected — this function only runs on Node.js.
|
|
18
|
+
*/
|
|
19
|
+
export declare function configureKeepAliveDispatcher(opts?: {
|
|
20
|
+
/** Max parallel sockets per origin. Default: 64. */
|
|
21
|
+
connections?: number;
|
|
22
|
+
/** Idle keep-alive timeout in milliseconds. Default: 30000. */
|
|
23
|
+
keepAliveTimeoutMs?: number;
|
|
24
|
+
/** Hard cap on connection age in milliseconds. Default: 600000 (10 min). */
|
|
25
|
+
keepAliveMaxTimeoutMs?: number;
|
|
26
|
+
}): void;
|
|
10
27
|
//# sourceMappingURL=apollo-client.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apollo-client.server.d.ts","sourceRoot":"","sources":["../../src/apollo-client.server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,IAAI,gBAAgB,EAChC,aAAa,IAAI,iBAAiB,EAClC,QAAQ,IAAI,YAAY,EACxB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"apollo-client.server.d.ts","sourceRoot":"","sources":["../../src/apollo-client.server.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,IAAI,gBAAgB,EAChC,aAAa,IAAI,iBAAiB,EAClC,QAAQ,IAAI,YAAY,EACxB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAI/E,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,GAAG,EACH,WAAW,EACX,KAAK,EACL,UAAU,EACV,OAAO,GACR,CAAC;AAGF,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,GACtB,CAAC;AAgCF;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,CAAC,EAAE;IAClD,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4EAA4E;IAC5E,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,GAAG,IAAI,CAoCP"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apollo-client.server.js","sourceRoot":"","sources":["../../src/apollo-client.server.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAU1B,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;
|
|
1
|
+
{"version":3,"file":"apollo-client.server.js","sourceRoot":"","sources":["../../src/apollo-client.server.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAU1B,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,yCAAyC;AACzC,OAAO,EACL,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,GAAG,EACH,WAAW,EACX,KAAK,EACL,UAAU,EACV,OAAO,GACR,CAAC;AAUF,4EAA4E;AAC5E,6DAA6D;AAC7D,4EAA4E;AAC5E,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,6EAA6E;AAC7E,4EAA4E;AAC5E,sEAAsE;AACtE,kCAAkC;AAClC,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,qEAAqE;AACrE,yEAAyE;AACzE,uEAAuE;AACvE,qCAAqC;AACrC,EAAE;AACF,oBAAoB;AACpB,6EAA6E;AAC7E,yDAAyD;AACzD,uEAAuE;AACvE,qDAAqD;AACrD,wEAAwE;AACxE,EAAE;AACF,4EAA4E;AAC5E,2CAA2C;AAE3C,IAAI,mBAAmB,GAAG,KAAK,CAAC;AAEhC;;;;;;;;GAQG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAO5C;IACC,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,wCAAwC;IACxC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,yEAAyE;QACzE,qGAAqG;QACrG,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAA4B,CAAC;QAE5D,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC;YAClC,gBAAgB,EAAE,IAAI,EAAE,kBAAkB,IAAI,MAAM;YACpD,mBAAmB,EAAE,IAAI,EAAE,qBAAqB,IAAI,OAAO;YAC3D,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE;YACpC,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;QAEH,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACvC,mBAAmB,GAAG,IAAI,CAAC;QAE3B,MAAM,CAAC,IAAI,CAAC,8DAA8D,EAAE;YAC1E,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE;YACpC,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,MAAM;YACtD,qBAAqB,EAAE,IAAI,EAAE,qBAAqB,IAAI,OAAO;SAC9D,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yEAAyE;QACzE,MAAM,CAAC,IAAI,CAAC,gEAAgE,EAAE;YAC5E,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -5,6 +5,77 @@ import { setContext } from '@apollo/client/link/context/context.cjs';
|
|
|
5
5
|
import { onError } from '@apollo/client/link/error/error.cjs';
|
|
6
6
|
import { HttpLink } from '@apollo/client/link/http/http.cjs';
|
|
7
7
|
import { InMemoryCache } from '@apollo/client/cache/inmemory/inMemoryCache.js';
|
|
8
|
+
import { logger } from './utils/logger.mjs';
|
|
8
9
|
// Re‑export the runtime implementations.
|
|
9
10
|
export { ApolloClient, InMemoryCache, HttpLink, gql, ApolloError, split, setContext, onError, };
|
|
11
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
12
|
+
// HTTP keepalive agent for outgoing fetch (server-side only)
|
|
13
|
+
// ─────────────────────────────────────────────────────────────────────────
|
|
14
|
+
//
|
|
15
|
+
// Without an explicit dispatcher, Node.js's built-in fetch (powered by undici)
|
|
16
|
+
// uses a default dispatcher whose connection lifetime defaults are tuned for
|
|
17
|
+
// short scripts, NOT long-running services. In long-running engine processes
|
|
18
|
+
// this manifests as TCP socket "mushrooming": every GraphQL operation opens
|
|
19
|
+
// a fresh TCP+TLS connection, and the kernel's ephemeral-port pool is
|
|
20
|
+
// exhausted under sustained load.
|
|
21
|
+
//
|
|
22
|
+
// Setting a single global undici Agent with `keepAliveTimeout` and a bounded
|
|
23
|
+
// `connections` pool ensures sockets are reused across operations and that
|
|
24
|
+
// at most N parallel connections per origin are kept alive — typical
|
|
25
|
+
// behavior for any production HTTP client. This dramatically reduces TCP
|
|
26
|
+
// handshake overhead and prevents the engine→backend-legacy connection
|
|
27
|
+
// queue from compounding under load.
|
|
28
|
+
//
|
|
29
|
+
// Tuning rationale:
|
|
30
|
+
// - keepAliveTimeout 30s: idle sockets stay open for 30s before being closed
|
|
31
|
+
// - keepAliveMaxTimeout 600s: hard cap on connection age
|
|
32
|
+
// - connections 64: max parallel sockets per origin (covers concurrent
|
|
33
|
+
// sessions × ~1 op each, with headroom for bursts)
|
|
34
|
+
// - pipelining 1: HTTP/1.1 pipelining (most servers don't support more)
|
|
35
|
+
//
|
|
36
|
+
// This setup is idempotent and safe to call multiple times — only the first
|
|
37
|
+
// call actually configures the dispatcher.
|
|
38
|
+
let keepAliveConfigured = false;
|
|
39
|
+
/**
|
|
40
|
+
* Configure a single global undici dispatcher with persistent keepalive
|
|
41
|
+
* connections for the Node.js process. Call this once during server-side
|
|
42
|
+
* application startup, before any GraphQL operation is made.
|
|
43
|
+
*
|
|
44
|
+
* Idempotent: subsequent calls are no-ops.
|
|
45
|
+
*
|
|
46
|
+
* Browser environments are unaffected — this function only runs on Node.js.
|
|
47
|
+
*/
|
|
48
|
+
export function configureKeepAliveDispatcher(opts) {
|
|
49
|
+
if (keepAliveConfigured) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
// Server-only: bail in browser bundles.
|
|
53
|
+
if (typeof window !== 'undefined') {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
// Lazy require so this file remains tree-shakable for browser consumers.
|
|
58
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
|
|
59
|
+
const undici = require('undici');
|
|
60
|
+
const dispatcher = new undici.Agent({
|
|
61
|
+
keepAliveTimeout: opts?.keepAliveTimeoutMs ?? 30_000,
|
|
62
|
+
keepAliveMaxTimeout: opts?.keepAliveMaxTimeoutMs ?? 600_000,
|
|
63
|
+
connections: opts?.connections ?? 64,
|
|
64
|
+
pipelining: 1,
|
|
65
|
+
});
|
|
66
|
+
undici.setGlobalDispatcher(dispatcher);
|
|
67
|
+
keepAliveConfigured = true;
|
|
68
|
+
logger.info('Apollo client: undici global keepalive dispatcher configured', {
|
|
69
|
+
connections: opts?.connections ?? 64,
|
|
70
|
+
keepAliveTimeoutMs: opts?.keepAliveTimeoutMs ?? 30_000,
|
|
71
|
+
keepAliveMaxTimeoutMs: opts?.keepAliveMaxTimeoutMs ?? 600_000,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
// Undici should always be available alongside Node 18+ but be defensive.
|
|
76
|
+
logger.warn('Apollo client: failed to configure undici keepalive dispatcher', {
|
|
77
|
+
error: err instanceof Error ? err.message : String(err),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
10
81
|
//# sourceMappingURL=apollo-client.server.js.map
|
package/esm/client.d.ts
CHANGED
|
@@ -10,6 +10,16 @@ export interface ApolloModules {
|
|
|
10
10
|
split: typeof import('@apollo/client').split;
|
|
11
11
|
setContext: typeof import('@apollo/client/link/context').setContext;
|
|
12
12
|
onError: typeof import('@apollo/client/link/error').onError;
|
|
13
|
+
/**
|
|
14
|
+
* Server-only helper: lazily exported only by `apollo-client.server.ts`.
|
|
15
|
+
* The browser variant does not export this and the runtime check above
|
|
16
|
+
* gates the call to `typeof window === 'undefined'`.
|
|
17
|
+
*/
|
|
18
|
+
configureKeepAliveDispatcher?: (opts?: {
|
|
19
|
+
connections?: number;
|
|
20
|
+
keepAliveTimeoutMs?: number;
|
|
21
|
+
keepAliveMaxTimeoutMs?: number;
|
|
22
|
+
}) => void;
|
|
13
23
|
}
|
|
14
24
|
interface ConnectionPoolConfig {
|
|
15
25
|
maxConcurrentOperations: number;
|
package/esm/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,IAAI,gBAAgB,EAChC,aAAa,IAAI,iBAAiB,EAClC,qBAAqB,EAEtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEpE,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,GACtB,CAAC;AAGF,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,cAAc,gBAAgB,EAAE,YAAY,CAAC;IAC3D,aAAa,EAAE,cAAc,6CAA6C,EAAE,aAAa,CAAC;IAC1F,QAAQ,EAAE,cAAc,0BAA0B,EAAE,QAAQ,CAAC;IAC7D,GAAG,EAAE,cAAc,gBAAgB,EAAE,GAAG,CAAC;IACzC,WAAW,EAAE,cAAc,gBAAgB,EAAE,WAAW,CAAC;IACzD,KAAK,EAAE,cAAc,gBAAgB,EAAE,KAAK,CAAC;IAC7C,UAAU,EAAE,cAAc,6BAA6B,EAAE,UAAU,CAAC;IACpE,OAAO,EAAE,cAAc,2BAA2B,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,YAAY,IAAI,gBAAgB,EAChC,aAAa,IAAI,iBAAiB,EAClC,qBAAqB,EAEtB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEpE,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,GACtB,CAAC;AAGF,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,cAAc,gBAAgB,EAAE,YAAY,CAAC;IAC3D,aAAa,EAAE,cAAc,6CAA6C,EAAE,aAAa,CAAC;IAC1F,QAAQ,EAAE,cAAc,0BAA0B,EAAE,QAAQ,CAAC;IAC7D,GAAG,EAAE,cAAc,gBAAgB,EAAE,GAAG,CAAC;IACzC,WAAW,EAAE,cAAc,gBAAgB,EAAE,WAAW,CAAC;IACzD,KAAK,EAAE,cAAc,gBAAgB,EAAE,KAAK,CAAC;IAC7C,UAAU,EAAE,cAAc,6BAA6B,EAAE,UAAU,CAAC;IACpE,OAAO,EAAE,cAAc,2BAA2B,EAAE,OAAO,CAAC;IAC5D;;;;OAIG;IACH,4BAA4B,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;QACrC,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;KAChC,KAAK,IAAI,CAAC;CACZ;AAGD,UAAU,oBAAoB;IAC5B,uBAAuB,EAAE,MAAM,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAUD;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAiC3D;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GACpC,IAAI,CAKN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAS9D;AAsID;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAC9C,gBAAgB,CAAC,qBAAqB,CAAC,CACxC,CAmLA;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAK/D;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,kDAAoB,CAAC"}
|
package/esm/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,YAAY;AAEZ,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
package/esm/client.mjs
CHANGED
|
@@ -185,6 +185,18 @@ export async function getApolloClient() {
|
|
|
185
185
|
apolloModules = await loadApolloModules();
|
|
186
186
|
}
|
|
187
187
|
const { ApolloClient, InMemoryCache, HttpLink, setContext, onError } = apolloModules;
|
|
188
|
+
// Configure a global undici keepalive dispatcher for Node.js fetch.
|
|
189
|
+
// Without this, Node's built-in fetch opens a fresh TCP socket per
|
|
190
|
+
// request, exhausting the kernel's ephemeral port pool under sustained
|
|
191
|
+
// load (the engine's signature symptom on Railway with many concurrent
|
|
192
|
+
// GraphQL operations). This is server-only — browser bundles see a
|
|
193
|
+
// no-op since `apollo-client.server.ts` is only loaded on Node.js.
|
|
194
|
+
if (typeof window === 'undefined') {
|
|
195
|
+
const serverModule = apolloModules;
|
|
196
|
+
if (typeof serverModule.configureKeepAliveDispatcher === 'function') {
|
|
197
|
+
serverModule.configureKeepAliveDispatcher();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
188
200
|
// Determine the GraphQL endpoint.
|
|
189
201
|
const isProduction = process.env.NODE_ENV === 'production';
|
|
190
202
|
const httpUrl = process.env.NEXT_PUBLIC_BACKEND_HTTPS_URL ||
|
|
@@ -192,7 +204,11 @@ export async function getApolloClient() {
|
|
|
192
204
|
(isProduction
|
|
193
205
|
? 'https://api.adaptic.ai/graphql'
|
|
194
206
|
: 'http://localhost:4000/graphql');
|
|
195
|
-
// Create the HTTP link
|
|
207
|
+
// Create the HTTP link. The `fetch` global resolves to Node.js's
|
|
208
|
+
// built-in undici fetch on the server (which now uses the keepalive
|
|
209
|
+
// dispatcher configured above) or the browser's native fetch on the
|
|
210
|
+
// client. Either way, sockets are reused across requests instead of
|
|
211
|
+
// a fresh TCP+TLS handshake per operation.
|
|
196
212
|
const httpLinkInstance = new HttpLink({
|
|
197
213
|
uri: httpUrl,
|
|
198
214
|
fetch,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adaptic/backend-legacy",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.939",
|
|
4
4
|
"description": "Backend executable CRUD functions with dynamic variables construction, and type definitions for the Adaptic AI platform.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "index.d.ts",
|