@pipeline-builder/api-server 3.3.33 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/index.d.ts +1 -0
- package/lib/api/index.js +3 -1
- package/lib/api/mongo-connect.d.ts +31 -0
- package/lib/api/mongo-connect.js +37 -0
- package/package.json +4 -4
package/lib/api/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export * from './require-org-id';
|
|
|
6
6
|
export * from './get-context';
|
|
7
7
|
export * from './app-factory';
|
|
8
8
|
export * from './health-checks';
|
|
9
|
+
export * from './mongo-connect';
|
|
9
10
|
export * from './quota-helpers';
|
|
10
11
|
export * from './idempotency-middleware';
|
|
11
12
|
export * from './tracing';
|
package/lib/api/index.js
CHANGED
|
@@ -27,6 +27,8 @@ __exportStar(require("./get-context"), exports);
|
|
|
27
27
|
__exportStar(require("./app-factory"), exports);
|
|
28
28
|
// Health-check helpers
|
|
29
29
|
__exportStar(require("./health-checks"), exports);
|
|
30
|
+
// MongoDB connection helper (dependency-injected mongoose)
|
|
31
|
+
__exportStar(require("./mongo-connect"), exports);
|
|
30
32
|
// Quota helpers
|
|
31
33
|
__exportStar(require("./quota-helpers"), exports);
|
|
32
34
|
// Idempotency
|
|
@@ -40,4 +42,4 @@ __exportStar(require("./server"), exports);
|
|
|
40
42
|
__exportStar(require("./route-wrapper"), exports);
|
|
41
43
|
// Request/Response types
|
|
42
44
|
__exportStar(require("./request-types"), exports);
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRXRDLGFBQWE7QUFDYiwrQ0FBNkI7QUFDN0IsdURBQXFDO0FBQ3JDLHVEQUFxQztBQUNyQyxnREFBOEI7QUFDOUIsbURBQWlDO0FBQ2pDLGdEQUE4QjtBQUU5QixjQUFjO0FBQ2QsZ0RBQThCO0FBRTlCLHVCQUF1QjtBQUN2QixrREFBZ0M7QUFFaEMsMkRBQTJEO0FBQzNELGtEQUFnQztBQUVoQyxnQkFBZ0I7QUFDaEIsa0RBQWdDO0FBRWhDLGNBQWM7QUFDZCwyREFBeUM7QUFFekMsZ0JBQWdCO0FBQ2hCLDRDQUEwQjtBQUMxQiw0Q0FBMEI7QUFFMUIsbUJBQW1CO0FBQ25CLDJDQUF5QjtBQUV6QixnQkFBZ0I7QUFDaEIsa0RBQWdDO0FBRWhDLHlCQUF5QjtBQUN6QixrREFBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLy8gTWlkZGxld2FyZVxuZXhwb3J0ICogZnJvbSAnLi9taWRkbGV3YXJlJztcbmV4cG9ydCAqIGZyb20gJy4vbWlkZGxld2FyZS1mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vY29udGV4dC1taWRkbGV3YXJlJztcbmV4cG9ydCAqIGZyb20gJy4vY2hlY2stcXVvdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXF1aXJlLW9yZy1pZCc7XG5leHBvcnQgKiBmcm9tICcuL2dldC1jb250ZXh0JztcblxuLy8gQXBwIGZhY3RvcnlcbmV4cG9ydCAqIGZyb20gJy4vYXBwLWZhY3RvcnknO1xuXG4vLyBIZWFsdGgtY2hlY2sgaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9oZWFsdGgtY2hlY2tzJztcblxuLy8gTW9uZ29EQiBjb25uZWN0aW9uIGhlbHBlciAoZGVwZW5kZW5jeS1pbmplY3RlZCBtb25nb29zZSlcbmV4cG9ydCAqIGZyb20gJy4vbW9uZ28tY29ubmVjdCc7XG5cbi8vIFF1b3RhIGhlbHBlcnNcbmV4cG9ydCAqIGZyb20gJy4vcXVvdGEtaGVscGVycyc7XG5cbi8vIElkZW1wb3RlbmN5XG5leHBvcnQgKiBmcm9tICcuL2lkZW1wb3RlbmN5LW1pZGRsZXdhcmUnO1xuXG4vLyBPYnNlcnZhYmlsaXR5XG5leHBvcnQgKiBmcm9tICcuL3RyYWNpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXRyaWNzJztcblxuLy8gU2VydmVyIHV0aWxpdGllc1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2ZXInO1xuXG4vLyBSb3V0ZSB3cmFwcGVyXG5leHBvcnQgKiBmcm9tICcuL3JvdXRlLXdyYXBwZXInO1xuXG4vLyBSZXF1ZXN0L1Jlc3BvbnNlIHR5cGVzXG5leHBvcnQgKiBmcm9tICcuL3JlcXVlc3QtdHlwZXMnO1xuIl19
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal shape of mongoose accepted by `connectMongo`. Passing the real
|
|
3
|
+
* mongoose object satisfies it; api-server takes mongoose as a parameter
|
|
4
|
+
* (dependency injection) so it doesn't have to declare mongoose as a
|
|
5
|
+
* dependency itself.
|
|
6
|
+
*/
|
|
7
|
+
interface MongooseLike {
|
|
8
|
+
set(option: string, value: unknown): unknown;
|
|
9
|
+
connection: {
|
|
10
|
+
on(event: string, listener: (err?: Error) => void): unknown;
|
|
11
|
+
};
|
|
12
|
+
connect(uri: string, options: {
|
|
13
|
+
maxPoolSize: number;
|
|
14
|
+
minPoolSize: number;
|
|
15
|
+
serverSelectionTimeoutMS: number;
|
|
16
|
+
}): Promise<unknown>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Connect to MongoDB with sensible production-ready pool defaults and
|
|
20
|
+
* standard event-handler wiring (error / disconnected / reconnected).
|
|
21
|
+
*
|
|
22
|
+
* Pool sizing is read from env (`MONGO_MAX_POOL`, `MONGO_MIN_POOL`,
|
|
23
|
+
* `MONGO_SERVER_SELECTION_MS`). Without these the driver default of
|
|
24
|
+
* `maxPoolSize=100` lets a burst exhaust Mongo's connection ceiling
|
|
25
|
+
* across replicas. Defaults: 20 max / 2 min / 5s server selection.
|
|
26
|
+
*
|
|
27
|
+
* Pass the service's own mongoose instance — api-server doesn't bundle
|
|
28
|
+
* mongoose itself.
|
|
29
|
+
*/
|
|
30
|
+
export declare function connectMongo(mongoose: MongooseLike, uri: string): Promise<void>;
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.connectMongo = connectMongo;
|
|
6
|
+
const api_core_1 = require("@pipeline-builder/api-core");
|
|
7
|
+
const logger = (0, api_core_1.createLogger)('mongo-connect');
|
|
8
|
+
/**
|
|
9
|
+
* Connect to MongoDB with sensible production-ready pool defaults and
|
|
10
|
+
* standard event-handler wiring (error / disconnected / reconnected).
|
|
11
|
+
*
|
|
12
|
+
* Pool sizing is read from env (`MONGO_MAX_POOL`, `MONGO_MIN_POOL`,
|
|
13
|
+
* `MONGO_SERVER_SELECTION_MS`). Without these the driver default of
|
|
14
|
+
* `maxPoolSize=100` lets a burst exhaust Mongo's connection ceiling
|
|
15
|
+
* across replicas. Defaults: 20 max / 2 min / 5s server selection.
|
|
16
|
+
*
|
|
17
|
+
* Pass the service's own mongoose instance — api-server doesn't bundle
|
|
18
|
+
* mongoose itself.
|
|
19
|
+
*/
|
|
20
|
+
async function connectMongo(mongoose, uri) {
|
|
21
|
+
mongoose.set('strictQuery', true);
|
|
22
|
+
mongoose.connection.on('error', (err) => {
|
|
23
|
+
logger.error('MongoDB connection error', { error: err?.message });
|
|
24
|
+
});
|
|
25
|
+
mongoose.connection.on('disconnected', () => {
|
|
26
|
+
logger.warn('MongoDB disconnected');
|
|
27
|
+
});
|
|
28
|
+
mongoose.connection.on('reconnected', () => {
|
|
29
|
+
logger.info('MongoDB reconnected');
|
|
30
|
+
});
|
|
31
|
+
const maxPoolSize = parseInt(process.env.MONGO_MAX_POOL || '20', 10);
|
|
32
|
+
const minPoolSize = parseInt(process.env.MONGO_MIN_POOL || '2', 10);
|
|
33
|
+
const serverSelectionTimeoutMS = parseInt(process.env.MONGO_SERVER_SELECTION_MS || '5000', 10);
|
|
34
|
+
await mongoose.connect(uri, { maxPoolSize, minPoolSize, serverSelectionTimeoutMS });
|
|
35
|
+
logger.info('MongoDB connection established', { maxPoolSize, minPoolSize, serverSelectionTimeoutMS });
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ28tY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbW9uZ28tY29ubmVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7QUFvQ3RDLG9DQXFCQztBQXZERCx5REFBMEQ7QUFFMUQsTUFBTSxNQUFNLEdBQUcsSUFBQSx1QkFBWSxFQUFDLGVBQWUsQ0FBQyxDQUFDO0FBb0I3Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNJLEtBQUssVUFBVSxZQUFZLENBQUMsUUFBc0IsRUFBRSxHQUFXO0lBQ3BFLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRWxDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ3RDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1FBQzFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLElBQUksTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRS9GLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQztJQUNwRixNQUFNLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxDQUFDLENBQUM7QUFDeEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcignbW9uZ28tY29ubmVjdCcpO1xuXG4vKipcbiAqIE1pbmltYWwgc2hhcGUgb2YgbW9uZ29vc2UgYWNjZXB0ZWQgYnkgYGNvbm5lY3RNb25nb2AuIFBhc3NpbmcgdGhlIHJlYWxcbiAqIG1vbmdvb3NlIG9iamVjdCBzYXRpc2ZpZXMgaXQ7IGFwaS1zZXJ2ZXIgdGFrZXMgbW9uZ29vc2UgYXMgYSBwYXJhbWV0ZXJcbiAqIChkZXBlbmRlbmN5IGluamVjdGlvbikgc28gaXQgZG9lc24ndCBoYXZlIHRvIGRlY2xhcmUgbW9uZ29vc2UgYXMgYVxuICogZGVwZW5kZW5jeSBpdHNlbGYuXG4gKi9cbmludGVyZmFjZSBNb25nb29zZUxpa2Uge1xuICBzZXQob3B0aW9uOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdW5rbm93bjtcbiAgY29ubmVjdGlvbjoge1xuICAgIG9uKGV2ZW50OiBzdHJpbmcsIGxpc3RlbmVyOiAoZXJyPzogRXJyb3IpID0+IHZvaWQpOiB1bmtub3duO1xuICB9O1xuICBjb25uZWN0KHVyaTogc3RyaW5nLCBvcHRpb25zOiB7XG4gICAgbWF4UG9vbFNpemU6IG51bWJlcjtcbiAgICBtaW5Qb29sU2l6ZTogbnVtYmVyO1xuICAgIHNlcnZlclNlbGVjdGlvblRpbWVvdXRNUzogbnVtYmVyO1xuICB9KTogUHJvbWlzZTx1bmtub3duPjtcbn1cblxuLyoqXG4gKiBDb25uZWN0IHRvIE1vbmdvREIgd2l0aCBzZW5zaWJsZSBwcm9kdWN0aW9uLXJlYWR5IHBvb2wgZGVmYXVsdHMgYW5kXG4gKiBzdGFuZGFyZCBldmVudC1oYW5kbGVyIHdpcmluZyAoZXJyb3IgLyBkaXNjb25uZWN0ZWQgLyByZWNvbm5lY3RlZCkuXG4gKlxuICogUG9vbCBzaXppbmcgaXMgcmVhZCBmcm9tIGVudiAoYE1PTkdPX01BWF9QT09MYCwgYE1PTkdPX01JTl9QT09MYCxcbiAqIGBNT05HT19TRVJWRVJfU0VMRUNUSU9OX01TYCkuIFdpdGhvdXQgdGhlc2UgdGhlIGRyaXZlciBkZWZhdWx0IG9mXG4gKiBgbWF4UG9vbFNpemU9MTAwYCBsZXRzIGEgYnVyc3QgZXhoYXVzdCBNb25nbydzIGNvbm5lY3Rpb24gY2VpbGluZ1xuICogYWNyb3NzIHJlcGxpY2FzLiBEZWZhdWx0czogMjAgbWF4IC8gMiBtaW4gLyA1cyBzZXJ2ZXIgc2VsZWN0aW9uLlxuICpcbiAqIFBhc3MgdGhlIHNlcnZpY2UncyBvd24gbW9uZ29vc2UgaW5zdGFuY2Ug4oCUIGFwaS1zZXJ2ZXIgZG9lc24ndCBidW5kbGVcbiAqIG1vbmdvb3NlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbm5lY3RNb25nbyhtb25nb29zZTogTW9uZ29vc2VMaWtlLCB1cmk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBtb25nb29zZS5zZXQoJ3N0cmljdFF1ZXJ5JywgdHJ1ZSk7XG5cbiAgbW9uZ29vc2UuY29ubmVjdGlvbi5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgbG9nZ2VyLmVycm9yKCdNb25nb0RCIGNvbm5lY3Rpb24gZXJyb3InLCB7IGVycm9yOiBlcnI/Lm1lc3NhZ2UgfSk7XG4gIH0pO1xuXG4gIG1vbmdvb3NlLmNvbm5lY3Rpb24ub24oJ2Rpc2Nvbm5lY3RlZCcsICgpID0+IHtcbiAgICBsb2dnZXIud2FybignTW9uZ29EQiBkaXNjb25uZWN0ZWQnKTtcbiAgfSk7XG5cbiAgbW9uZ29vc2UuY29ubmVjdGlvbi5vbigncmVjb25uZWN0ZWQnLCAoKSA9PiB7XG4gICAgbG9nZ2VyLmluZm8oJ01vbmdvREIgcmVjb25uZWN0ZWQnKTtcbiAgfSk7XG5cbiAgY29uc3QgbWF4UG9vbFNpemUgPSBwYXJzZUludChwcm9jZXNzLmVudi5NT05HT19NQVhfUE9PTCB8fCAnMjAnLCAxMCk7XG4gIGNvbnN0IG1pblBvb2xTaXplID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuTU9OR09fTUlOX1BPT0wgfHwgJzInLCAxMCk7XG4gIGNvbnN0IHNlcnZlclNlbGVjdGlvblRpbWVvdXRNUyA9IHBhcnNlSW50KHByb2Nlc3MuZW52Lk1PTkdPX1NFUlZFUl9TRUxFQ1RJT05fTVMgfHwgJzUwMDAnLCAxMCk7XG5cbiAgYXdhaXQgbW9uZ29vc2UuY29ubmVjdCh1cmksIHsgbWF4UG9vbFNpemUsIG1pblBvb2xTaXplLCBzZXJ2ZXJTZWxlY3Rpb25UaW1lb3V0TVMgfSk7XG4gIGxvZ2dlci5pbmZvKCdNb25nb0RCIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQnLCB7IG1heFBvb2xTaXplLCBtaW5Qb29sU2l6ZSwgc2VydmVyU2VsZWN0aW9uVGltZW91dE1TIH0pO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -31,8 +31,6 @@
|
|
|
31
31
|
"@opentelemetry/exporter-trace-otlp-http": "0.213.0",
|
|
32
32
|
"@opentelemetry/resources": "2.6.0",
|
|
33
33
|
"@opentelemetry/sdk-node": "0.213.0",
|
|
34
|
-
"@pipeline-builder/api-core": "3.3.33",
|
|
35
|
-
"@pipeline-builder/pipeline-core": "3.3.34",
|
|
36
34
|
"compression": "1.8.0",
|
|
37
35
|
"cors": "2.8.6",
|
|
38
36
|
"express": "5.2.1",
|
|
@@ -43,7 +41,9 @@
|
|
|
43
41
|
"prom-client": "15.1.3",
|
|
44
42
|
"rate-limit-redis": "4.2.0",
|
|
45
43
|
"swagger-ui-express": "5.0.1",
|
|
46
|
-
"uuid": "13.0.0"
|
|
44
|
+
"uuid": "13.0.0",
|
|
45
|
+
"@pipeline-builder/api-core": "3.4.0",
|
|
46
|
+
"@pipeline-builder/pipeline-core": "3.4.0"
|
|
47
47
|
},
|
|
48
48
|
"keywords": [
|
|
49
49
|
"aws",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"main": "lib/index.js",
|
|
84
84
|
"license": "Apache-2.0",
|
|
85
85
|
"homepage": "https://mwashburn160.github.io/pipeline-builder/",
|
|
86
|
-
"version": "3.
|
|
86
|
+
"version": "3.4.0",
|
|
87
87
|
"bugs": {
|
|
88
88
|
"url": "https://github.com/mwashburn160/pipeline-builder/issues"
|
|
89
89
|
},
|