@pipeline-builder/pipeline-manager 4.4.20 → 4.5.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.
@@ -1,7 +1,9 @@
1
1
  // Copyright 2026 Pipeline Builder Contributors
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import { randomUUID } from 'node:crypto';
4
+ import { CLIENT_VERSION_HEADER } from '@pipeline-builder/api-core';
4
5
  import { correlationHeaders, sanitizeCorrelationValue } from '@pipeline-builder/pipeline-core';
6
+ import { APP_VERSION } from '../config/cli.constants.js';
5
7
  /**
6
8
  * The audit-correlation headers every platform call from this CLI carries, so
7
9
  * a server-side audit row joins back to the run that caused it.
@@ -19,6 +21,8 @@ import { correlationHeaders, sanitizeCorrelationValue } from '@pipeline-builder/
19
21
  * plugin verify, security-report), once the command knows it
20
22
  * ({@link setPipelineId}). The quota service's usage ledger records it, so
21
23
  * "what spent our calls?" can answer "this pipeline's builds".
24
+ * - `X-Pb-Client-Version` — this CLI's version, so a platform with
25
+ * `PIPELINE_MANAGER_MIN_VERSION` set can answer 426 "run --upgrade".
22
26
  *
23
27
  * Never an ARN — nothing here can carry an AWS account id.
24
28
  */
@@ -52,6 +56,7 @@ export function requestCorrelationHeaders(env = process.env) {
52
56
  const pipeline = sanitizeCorrelationValue(pipelineId);
53
57
  if (pipeline)
54
58
  headers[PIPELINE_ID_HEADER] = pipeline;
59
+ headers[CLIENT_VERSION_HEADER] = APP_VERSION;
55
60
  return headers;
56
61
  }
57
62
  /** @internal Test-only: forget the invocation id. */
@@ -59,4 +64,4 @@ export function _resetInvocationIdForTests() {
59
64
  invocationId = undefined;
60
65
  pipelineId = undefined;
61
66
  }
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1jb250ZXh0LmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVxdWVzdC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUvRjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILElBQUksWUFBZ0MsQ0FBQztBQUNyQyxJQUFJLFVBQThCLENBQUM7QUFFbkMsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQztBQUVsRCxnR0FBZ0c7QUFDaEcsTUFBTSxVQUFVLGFBQWEsQ0FBQyxFQUFzQjtJQUNsRCxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxVQUFVLGVBQWUsQ0FBQyxFQUFVO0lBQ3hDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVELDBGQUEwRjtBQUMxRixNQUFNLFVBQVUsZUFBZTtJQUM3QixZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7SUFDOUIsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELDJGQUEyRjtBQUMzRixNQUFNLFVBQVUseUJBQXlCLENBQUMsR0FBRyxHQUFzQixPQUFPLENBQUMsR0FBRztJQUM1RSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUM7UUFDakMsU0FBUyxFQUFFLGVBQWUsRUFBRTtRQUM1QixnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNsRSxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN6RSxDQUFDLENBQUM7SUFDSCw2RUFBNkU7SUFDN0Usc0JBQXNCO0lBQ3RCLE1BQU0sUUFBUSxHQUFHLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUTtRQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUNyRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQscURBQXFEO0FBQ3JELE1BQU0sVUFBVSwwQkFBMEI7SUFDeEMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUN6QixVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCB7IGNvcnJlbGF0aW9uSGVhZGVycywgc2FuaXRpemVDb3JyZWxhdGlvblZhbHVlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZSc7XG5cbi8qKlxuICogVGhlIGF1ZGl0LWNvcnJlbGF0aW9uIGhlYWRlcnMgZXZlcnkgcGxhdGZvcm0gY2FsbCBmcm9tIHRoaXMgQ0xJIGNhcnJpZXMsIHNvXG4gKiBhIHNlcnZlci1zaWRlIGF1ZGl0IHJvdyBqb2lucyBiYWNrIHRvIHRoZSBydW4gdGhhdCBjYXVzZWQgaXQuXG4gKlxuICogLSBgWC1SZXF1ZXN0LUlkYCDigJQgdGhlIGNvbW1hbmQncyBleGVjdXRpb24gaWQgKHRoZSBgW0VYRS3igKZdYCBwcmludGVkIGluIHRoZVxuICogICBoZWFkZXIgYW5kIHRoZSBsb2NhbCBhdWRpdCBsb2cpLCBvciBhIHV1aWQgZm9yIHRoaXMgcHJvY2VzcyB3aGVuIG5vIGNvbW1hbmRcbiAqICAgaGVhZGVyIHdhcyBwcmludGVkLlxuICogLSBgWC1Db2RlQnVpbGQtQnVpbGQtSWRgIOKAlCBDT0RFQlVJTERfQlVJTERfSUQgKGA8cHJvamVjdD46PHV1aWQ+YCkgd2hlbiBydW5uaW5nXG4gKiAgIGluc2lkZSBDb2RlQnVpbGQuXG4gKiAtIGBYLVBpcGVsaW5lLUV4ZWN1dGlvbi1JZGAg4oCUIFBJUEVMSU5FX0VYRUNVVElPTl9JRCwgd2hpY2ggdGhlIHN5bnRoIGluamVjdHMgaW50b1xuICogICBldmVyeSBDb2RlQnVpbGQgc3RlcCBmcm9tIGAje2NvZGVwaXBlbGluZS5QaXBlbGluZUV4ZWN1dGlvbklkfWAuIFNlbnQgb25seVxuICogICB3aGVuIHNldDogQ09ERUJVSUxEX0lOSVRJQVRPUiAoYGNvZGVwaXBlbGluZS88bmFtZT5gKSBuYW1lcyB0aGUgcGlwZWxpbmUsIG5vdFxuICogICB0aGUgZXhlY3V0aW9uLCBzbyBub3RoaW5nIGlzIGRlcml2ZWQgZnJvbSBpdC5cbiAqIC0gYFgtUGlwZWxpbmUtSWRgIOKAlCB0aGUgcGxhdGZvcm0gcGlwZWxpbmUgYSBjb21tYW5kIHdvcmtzIG9uIChzeW50aCwgZGVwbG95LFxuICogICBwbHVnaW4gdmVyaWZ5LCBzZWN1cml0eS1yZXBvcnQpLCBvbmNlIHRoZSBjb21tYW5kIGtub3dzIGl0XG4gKiAgICh7QGxpbmsgc2V0UGlwZWxpbmVJZH0pLiBUaGUgcXVvdGEgc2VydmljZSdzIHVzYWdlIGxlZGdlciByZWNvcmRzIGl0LCBzb1xuICogICBcIndoYXQgc3BlbnQgb3VyIGNhbGxzP1wiIGNhbiBhbnN3ZXIgXCJ0aGlzIHBpcGVsaW5lJ3MgYnVpbGRzXCIuXG4gKlxuICogTmV2ZXIgYW4gQVJOIOKAlCBub3RoaW5nIGhlcmUgY2FuIGNhcnJ5IGFuIEFXUyBhY2NvdW50IGlkLlxuICovXG5cbmxldCBpbnZvY2F0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbmxldCBwaXBlbGluZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbi8qKiBUaGUgaGVhZGVyIHRoZSBwbGF0Zm9ybSdzIHF1b3RhIGF0dHJpYnV0aW9uIHJlYWRzIHRoZSBwaXBlbGluZSBmcm9tLiAqL1xuZXhwb3J0IGNvbnN0IFBJUEVMSU5FX0lEX0hFQURFUiA9ICdYLVBpcGVsaW5lLUlkJztcblxuLyoqIE5hbWUgdGhlIHBpcGVsaW5lIHRoaXMgaW52b2NhdGlvbidzIHBsYXRmb3JtIGNhbGxzIGFyZSBtYWRlIGZvciAodW5zZXQgd2l0aCBgdW5kZWZpbmVkYCkuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UGlwZWxpbmVJZChpZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gIHBpcGVsaW5lSWQgPSBpZDtcbn1cblxuLyoqIEFkb3B0IHRoZSBjb21tYW5kJ3MgZXhlY3V0aW9uIGlkIGFzIHRoaXMgaW52b2NhdGlvbidzIHJlcXVlc3QgaWQuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SW52b2NhdGlvbklkKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgaW52b2NhdGlvbklkID0gaWQ7XG59XG5cbi8qKiBUaGlzIGludm9jYXRpb24ncyByZXF1ZXN0IGlkIOKAlCB0aGUgY29tbWFuZCdzIGV4ZWN1dGlvbiBpZCwgZWxzZSBhIHBlci1wcm9jZXNzIHV1aWQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW52b2NhdGlvbklkKCk6IHN0cmluZyB7XG4gIGludm9jYXRpb25JZCA/Pz0gcmFuZG9tVVVJRCgpO1xuICByZXR1cm4gaW52b2NhdGlvbklkO1xufVxuXG4vKiogVGhlIGNvcnJlbGF0aW9uIGhlYWRlcnMgZm9yIHRoaXMgaW52b2NhdGlvbiAodmFsdWVzIHNhbml0aXplZCwgdW5rbm93biBpZHMgb21pdHRlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdENvcnJlbGF0aW9uSGVhZGVycyhlbnY6IE5vZGVKUy5Qcm9jZXNzRW52ID0gcHJvY2Vzcy5lbnYpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgaW5Db2RlQnVpbGQgPSBCb29sZWFuKGVudi5DT0RFQlVJTERfQlVJTERfSUQpO1xuICBjb25zdCBoZWFkZXJzID0gY29ycmVsYXRpb25IZWFkZXJzKHtcbiAgICByZXF1ZXN0SWQ6IGdldEludm9jYXRpb25JZCgpLFxuICAgIGNvZGVCdWlsZEJ1aWxkSWQ6IGluQ29kZUJ1aWxkID8gZW52LkNPREVCVUlMRF9CVUlMRF9JRCA6IHVuZGVmaW5lZCxcbiAgICBwaXBlbGluZUV4ZWN1dGlvbklkOiBpbkNvZGVCdWlsZCA/IGVudi5QSVBFTElORV9FWEVDVVRJT05fSUQgOiB1bmRlZmluZWQsXG4gIH0pO1xuICAvLyBTYW1lIHNhbml0aXplciBhcyB0aGUgb3RoZXIgaWRzOiBhIHZhbHVlIHRoYXQgaXNuJ3QgYSBwbGFpbiBpZCBpcyBkcm9wcGVkLFxuICAvLyBuZXZlciBzZW50IG1hbmdsZWQuXG4gIGNvbnN0IHBpcGVsaW5lID0gc2FuaXRpemVDb3JyZWxhdGlvblZhbHVlKHBpcGVsaW5lSWQpO1xuICBpZiAocGlwZWxpbmUpIGhlYWRlcnNbUElQRUxJTkVfSURfSEVBREVSXSA9IHBpcGVsaW5lO1xuICByZXR1cm4gaGVhZGVycztcbn1cblxuLyoqIEBpbnRlcm5hbCBUZXN0LW9ubHk6IGZvcmdldCB0aGUgaW52b2NhdGlvbiBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRJbnZvY2F0aW9uSWRGb3JUZXN0cygpOiB2b2lkIHtcbiAgaW52b2NhdGlvbklkID0gdW5kZWZpbmVkO1xuICBwaXBlbGluZUlkID0gdW5kZWZpbmVkO1xufVxuIl19
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1jb250ZXh0LmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVxdWVzdC1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFekQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILElBQUksWUFBZ0MsQ0FBQztBQUNyQyxJQUFJLFVBQThCLENBQUM7QUFFbkMsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQztBQUVsRCxnR0FBZ0c7QUFDaEcsTUFBTSxVQUFVLGFBQWEsQ0FBQyxFQUFzQjtJQUNsRCxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxVQUFVLGVBQWUsQ0FBQyxFQUFVO0lBQ3hDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVELDBGQUEwRjtBQUMxRixNQUFNLFVBQVUsZUFBZTtJQUM3QixZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7SUFDOUIsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELDJGQUEyRjtBQUMzRixNQUFNLFVBQVUseUJBQXlCLENBQUMsR0FBRyxHQUFzQixPQUFPLENBQUMsR0FBRztJQUM1RSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUM7UUFDakMsU0FBUyxFQUFFLGVBQWUsRUFBRTtRQUM1QixnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNsRSxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUN6RSxDQUFDLENBQUM7SUFDSCw2RUFBNkU7SUFDN0Usc0JBQXNCO0lBQ3RCLE1BQU0sUUFBUSxHQUFHLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUTtRQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLFFBQVEsQ0FBQztJQUNyRCxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxXQUFXLENBQUM7SUFDN0MsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELHFEQUFxRDtBQUNyRCxNQUFNLFVBQVUsMEJBQTBCO0lBQ3hDLFlBQVksR0FBRyxTQUFTLENBQUM7SUFDekIsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgeyBDTElFTlRfVkVSU0lPTl9IRUFERVIgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBjb3JyZWxhdGlvbkhlYWRlcnMsIHNhbml0aXplQ29ycmVsYXRpb25WYWx1ZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnO1xuaW1wb3J0IHsgQVBQX1ZFUlNJT04gfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5cbi8qKlxuICogVGhlIGF1ZGl0LWNvcnJlbGF0aW9uIGhlYWRlcnMgZXZlcnkgcGxhdGZvcm0gY2FsbCBmcm9tIHRoaXMgQ0xJIGNhcnJpZXMsIHNvXG4gKiBhIHNlcnZlci1zaWRlIGF1ZGl0IHJvdyBqb2lucyBiYWNrIHRvIHRoZSBydW4gdGhhdCBjYXVzZWQgaXQuXG4gKlxuICogLSBgWC1SZXF1ZXN0LUlkYCDigJQgdGhlIGNvbW1hbmQncyBleGVjdXRpb24gaWQgKHRoZSBgW0VYRS3igKZdYCBwcmludGVkIGluIHRoZVxuICogICBoZWFkZXIgYW5kIHRoZSBsb2NhbCBhdWRpdCBsb2cpLCBvciBhIHV1aWQgZm9yIHRoaXMgcHJvY2VzcyB3aGVuIG5vIGNvbW1hbmRcbiAqICAgaGVhZGVyIHdhcyBwcmludGVkLlxuICogLSBgWC1Db2RlQnVpbGQtQnVpbGQtSWRgIOKAlCBDT0RFQlVJTERfQlVJTERfSUQgKGA8cHJvamVjdD46PHV1aWQ+YCkgd2hlbiBydW5uaW5nXG4gKiAgIGluc2lkZSBDb2RlQnVpbGQuXG4gKiAtIGBYLVBpcGVsaW5lLUV4ZWN1dGlvbi1JZGAg4oCUIFBJUEVMSU5FX0VYRUNVVElPTl9JRCwgd2hpY2ggdGhlIHN5bnRoIGluamVjdHMgaW50b1xuICogICBldmVyeSBDb2RlQnVpbGQgc3RlcCBmcm9tIGAje2NvZGVwaXBlbGluZS5QaXBlbGluZUV4ZWN1dGlvbklkfWAuIFNlbnQgb25seVxuICogICB3aGVuIHNldDogQ09ERUJVSUxEX0lOSVRJQVRPUiAoYGNvZGVwaXBlbGluZS88bmFtZT5gKSBuYW1lcyB0aGUgcGlwZWxpbmUsIG5vdFxuICogICB0aGUgZXhlY3V0aW9uLCBzbyBub3RoaW5nIGlzIGRlcml2ZWQgZnJvbSBpdC5cbiAqIC0gYFgtUGlwZWxpbmUtSWRgIOKAlCB0aGUgcGxhdGZvcm0gcGlwZWxpbmUgYSBjb21tYW5kIHdvcmtzIG9uIChzeW50aCwgZGVwbG95LFxuICogICBwbHVnaW4gdmVyaWZ5LCBzZWN1cml0eS1yZXBvcnQpLCBvbmNlIHRoZSBjb21tYW5kIGtub3dzIGl0XG4gKiAgICh7QGxpbmsgc2V0UGlwZWxpbmVJZH0pLiBUaGUgcXVvdGEgc2VydmljZSdzIHVzYWdlIGxlZGdlciByZWNvcmRzIGl0LCBzb1xuICogICBcIndoYXQgc3BlbnQgb3VyIGNhbGxzP1wiIGNhbiBhbnN3ZXIgXCJ0aGlzIHBpcGVsaW5lJ3MgYnVpbGRzXCIuXG4gKiAtIGBYLVBiLUNsaWVudC1WZXJzaW9uYCDigJQgdGhpcyBDTEkncyB2ZXJzaW9uLCBzbyBhIHBsYXRmb3JtIHdpdGhcbiAqICAgYFBJUEVMSU5FX01BTkFHRVJfTUlOX1ZFUlNJT05gIHNldCBjYW4gYW5zd2VyIDQyNiBcInJ1biAtLXVwZ3JhZGVcIi5cbiAqXG4gKiBOZXZlciBhbiBBUk4g4oCUIG5vdGhpbmcgaGVyZSBjYW4gY2FycnkgYW4gQVdTIGFjY291bnQgaWQuXG4gKi9cblxubGV0IGludm9jYXRpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xubGV0IHBpcGVsaW5lSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuLyoqIFRoZSBoZWFkZXIgdGhlIHBsYXRmb3JtJ3MgcXVvdGEgYXR0cmlidXRpb24gcmVhZHMgdGhlIHBpcGVsaW5lIGZyb20uICovXG5leHBvcnQgY29uc3QgUElQRUxJTkVfSURfSEVBREVSID0gJ1gtUGlwZWxpbmUtSWQnO1xuXG4vKiogTmFtZSB0aGUgcGlwZWxpbmUgdGhpcyBpbnZvY2F0aW9uJ3MgcGxhdGZvcm0gY2FsbHMgYXJlIG1hZGUgZm9yICh1bnNldCB3aXRoIGB1bmRlZmluZWRgKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQaXBlbGluZUlkKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgcGlwZWxpbmVJZCA9IGlkO1xufVxuXG4vKiogQWRvcHQgdGhlIGNvbW1hbmQncyBleGVjdXRpb24gaWQgYXMgdGhpcyBpbnZvY2F0aW9uJ3MgcmVxdWVzdCBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnZvY2F0aW9uSWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICBpbnZvY2F0aW9uSWQgPSBpZDtcbn1cblxuLyoqIFRoaXMgaW52b2NhdGlvbidzIHJlcXVlc3QgaWQg4oCUIHRoZSBjb21tYW5kJ3MgZXhlY3V0aW9uIGlkLCBlbHNlIGEgcGVyLXByb2Nlc3MgdXVpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnZvY2F0aW9uSWQoKTogc3RyaW5nIHtcbiAgaW52b2NhdGlvbklkID8/PSByYW5kb21VVUlEKCk7XG4gIHJldHVybiBpbnZvY2F0aW9uSWQ7XG59XG5cbi8qKiBUaGUgY29ycmVsYXRpb24gaGVhZGVycyBmb3IgdGhpcyBpbnZvY2F0aW9uICh2YWx1ZXMgc2FuaXRpemVkLCB1bmtub3duIGlkcyBvbWl0dGVkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0Q29ycmVsYXRpb25IZWFkZXJzKGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSBwcm9jZXNzLmVudik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBpbkNvZGVCdWlsZCA9IEJvb2xlYW4oZW52LkNPREVCVUlMRF9CVUlMRF9JRCk7XG4gIGNvbnN0IGhlYWRlcnMgPSBjb3JyZWxhdGlvbkhlYWRlcnMoe1xuICAgIHJlcXVlc3RJZDogZ2V0SW52b2NhdGlvbklkKCksXG4gICAgY29kZUJ1aWxkQnVpbGRJZDogaW5Db2RlQnVpbGQgPyBlbnYuQ09ERUJVSUxEX0JVSUxEX0lEIDogdW5kZWZpbmVkLFxuICAgIHBpcGVsaW5lRXhlY3V0aW9uSWQ6IGluQ29kZUJ1aWxkID8gZW52LlBJUEVMSU5FX0VYRUNVVElPTl9JRCA6IHVuZGVmaW5lZCxcbiAgfSk7XG4gIC8vIFNhbWUgc2FuaXRpemVyIGFzIHRoZSBvdGhlciBpZHM6IGEgdmFsdWUgdGhhdCBpc24ndCBhIHBsYWluIGlkIGlzIGRyb3BwZWQsXG4gIC8vIG5ldmVyIHNlbnQgbWFuZ2xlZC5cbiAgY29uc3QgcGlwZWxpbmUgPSBzYW5pdGl6ZUNvcnJlbGF0aW9uVmFsdWUocGlwZWxpbmVJZCk7XG4gIGlmIChwaXBlbGluZSkgaGVhZGVyc1tQSVBFTElORV9JRF9IRUFERVJdID0gcGlwZWxpbmU7XG4gIGhlYWRlcnNbQ0xJRU5UX1ZFUlNJT05fSEVBREVSXSA9IEFQUF9WRVJTSU9OO1xuICByZXR1cm4gaGVhZGVycztcbn1cblxuLyoqIEBpbnRlcm5hbCBUZXN0LW9ubHk6IGZvcmdldCB0aGUgaW52b2NhdGlvbiBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRJbnZvY2F0aW9uSWRGb3JUZXN0cygpOiB2b2lkIHtcbiAgaW52b2NhdGlvbklkID0gdW5kZWZpbmVkO1xuICBwaXBlbGluZUlkID0gdW5kZWZpbmVkO1xufVxuIl19
@@ -0,0 +1,25 @@
1
+ export declare const NO_UPDATE_CHECK_ENV = "PIPELINE_MANAGER_NO_UPDATE_CHECK";
2
+ export declare const CHECK_INTERVAL_MS: number;
3
+ export interface UpdateCache {
4
+ checkedAt: number;
5
+ latest?: string;
6
+ }
7
+ export interface NoticeContext {
8
+ argv: string[];
9
+ env: NodeJS.ProcessEnv;
10
+ isTTY: boolean;
11
+ }
12
+ /** Whether the notice (and its background refresh) may run at all. */
13
+ export declare function updateCheckEnabled({ argv, env, isTTY }: NoticeContext): boolean;
14
+ /** The notice line for `current` given the cache, or null when there is nothing newer. */
15
+ export declare function noticeFor(current: string, cache: UpdateCache | null): string | null;
16
+ /** Whether the cache is due for a refresh at `now`. */
17
+ export declare function isStale(cache: UpdateCache | null, now: number): boolean;
18
+ export declare function readCache(file: string): UpdateCache | null;
19
+ export declare function defaultCacheFile(): string;
20
+ /**
21
+ * Wire the notice for this process: read the cache now, refresh it in the
22
+ * background when stale, and print on exit when a newer release is known.
23
+ */
24
+ export declare function scheduleUpdateNotice(ctx?: NoticeContext, file?: string, now?: number): void;
25
+ //# sourceMappingURL=update-notice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-notice.d.ts","sources":["../../src/utils/update-notice.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,mBAAmB,qCAAqC,CAAC;AACtE,eAAO,MAAM,iBAAiB,QAAsB,CAAC;AAGrD,MAAM,WAAW,WAAW;IAAG,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAEnE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,sEAAsE;AACtE,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,aAAa,GAAG,OAAO,CAI/E;AAED,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAMnF;AAED,uDAAuD;AACvD,wBAAgB,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEvE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAO1D;AAsBD,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,aAAuG,EAC5G,IAAI,GAAE,MAA2B,EACjC,GAAG,GAAE,MAAmB,GACvB,IAAI,CAgBN"}
@@ -0,0 +1,100 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * "A newer pipeline-manager is available" — printed to stderr when a command
5
+ * exits, from a cache refreshed at most once a day by a DETACHED background
6
+ * process, so no command ever waits on the registry.
7
+ *
8
+ * Silent when: `PIPELINE_MANAGER_NO_UPDATE_CHECK` is set, `CI` is set, stderr
9
+ * is not a terminal, `--quiet` / `--token` output is wanted, or the command is
10
+ * itself `--upgrade` / `--upgrade-check`. It never fails a command: every
11
+ * error here is swallowed.
12
+ */
13
+ import { spawn } from 'node:child_process';
14
+ import { mkdirSync, readFileSync } from 'node:fs';
15
+ import { homedir } from 'node:os';
16
+ import { dirname, join } from 'node:path';
17
+ import { compareSemver, isSemver } from '@pipeline-builder/api-core';
18
+ import pico from 'picocolors';
19
+ import { APP_NAME, APP_VERSION } from '../config/cli.constants.js';
20
+ export const NO_UPDATE_CHECK_ENV = 'PIPELINE_MANAGER_NO_UPDATE_CHECK';
21
+ export const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000;
22
+ const PACKAGE_NAME = '@pipeline-builder/pipeline-manager';
23
+ /** Whether the notice (and its background refresh) may run at all. */
24
+ export function updateCheckEnabled({ argv, env, isTTY }) {
25
+ if (env[NO_UPDATE_CHECK_ENV] || env.CI || env.NODE_ENV === 'test')
26
+ return false;
27
+ if (!isTTY)
28
+ return false;
29
+ return !argv.some((a) => a === '--quiet' || a === '--token' || a === '--upgrade' || a === '--upgrade-check');
30
+ }
31
+ /** The notice line for `current` given the cache, or null when there is nothing newer. */
32
+ export function noticeFor(current, cache) {
33
+ const latest = cache?.latest;
34
+ if (!latest || !isSemver(latest) || !isSemver(current))
35
+ return null;
36
+ if (compareSemver(latest, current) <= 0)
37
+ return null;
38
+ return `${pico.yellow('Update available')} ${current} → ${pico.green(latest)}: run ${pico.cyan(`${APP_NAME} --upgrade`)}`
39
+ + pico.dim(` (silence with ${NO_UPDATE_CHECK_ENV}=1)`);
40
+ }
41
+ /** Whether the cache is due for a refresh at `now`. */
42
+ export function isStale(cache, now) {
43
+ return !cache || !Number.isFinite(cache.checkedAt) || now - cache.checkedAt >= CHECK_INTERVAL_MS || cache.checkedAt > now;
44
+ }
45
+ export function readCache(file) {
46
+ try {
47
+ const parsed = JSON.parse(readFileSync(file, 'utf8'));
48
+ return typeof parsed.checkedAt === 'number' ? parsed : null;
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ /**
55
+ * The detached refresher: asks the registry for `latest` and writes the cache.
56
+ * It stamps `checkedAt` even when the lookup fails, so an offline machine
57
+ * retries tomorrow rather than on every command.
58
+ */
59
+ const REFRESH_SCRIPT = `
60
+ const { execFileSync } = require('node:child_process');
61
+ const { writeFileSync, renameSync } = require('node:fs');
62
+ const [file, pkg] = process.argv.slice(1);
63
+ let latest;
64
+ try {
65
+ const out = execFileSync('npm', ['view', pkg + '@latest', 'version', '--json'], { encoding: 'utf8', timeout: 20000, stdio: ['ignore', 'pipe', 'ignore'], shell: process.platform === 'win32' });
66
+ const v = JSON.parse(out);
67
+ if (typeof v === 'string') latest = v;
68
+ } catch {}
69
+ const tmp = file + '.' + process.pid;
70
+ writeFileSync(tmp, JSON.stringify({ checkedAt: Date.now(), latest }));
71
+ renameSync(tmp, file);
72
+ `;
73
+ export function defaultCacheFile() {
74
+ return join(homedir(), '.pipeline-manager', 'update-check.json');
75
+ }
76
+ /**
77
+ * Wire the notice for this process: read the cache now, refresh it in the
78
+ * background when stale, and print on exit when a newer release is known.
79
+ */
80
+ export function scheduleUpdateNotice(ctx = { argv: process.argv.slice(2), env: process.env, isTTY: Boolean(process.stderr.isTTY) }, file = defaultCacheFile(), now = Date.now()) {
81
+ try {
82
+ if (!updateCheckEnabled(ctx))
83
+ return;
84
+ const cache = readCache(file);
85
+ if (isStale(cache, now)) {
86
+ // ~/.pipeline-manager is also the CREDENTIAL store (credential-store.ts
87
+ // makes it 0700, but only when creating it) — if this runs first it must
88
+ // not leave that directory world-readable.
89
+ mkdirSync(dirname(file), { recursive: true, mode: 0o700 });
90
+ spawn(process.execPath, ['-e', REFRESH_SCRIPT, file, PACKAGE_NAME], { detached: true, stdio: 'ignore', windowsHide: true }).unref();
91
+ }
92
+ const line = noticeFor(APP_VERSION, cache);
93
+ if (line)
94
+ process.once('exit', () => { process.stderr.write(`\n${line}\n`); });
95
+ }
96
+ catch {
97
+ // Never let the update notice break a command.
98
+ }
99
+ }
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLW5vdGljZS5qcyIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3VwZGF0ZS1ub3RpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7O0dBU0c7QUFFSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGtDQUFrQyxDQUFDO0FBQ3RFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNyRCxNQUFNLFlBQVksR0FBRyxvQ0FBb0MsQ0FBQztBQVUxRCxzRUFBc0U7QUFDdEUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQWlCO0lBQ3BFLElBQUksR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNoRixJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVB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QUFPLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEksQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsSUFBSSxJQUFJO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLCtDQUErQztJQUNqRCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFwiQSBuZXdlciBwaXBlbGluZS1tYW5hZ2VyIGlzIGF2YWlsYWJsZVwiIOKAlCBwcmludGVkIHRvIHN0ZGVyciB3aGVuIGEgY29tbWFuZFxuICogZXhpdHMsIGZyb20gYSBjYWNoZSByZWZyZXNoZWQgYXQgbW9zdCBvbmNlIGEgZGF5IGJ5IGEgREVUQUNIRUQgYmFja2dyb3VuZFxuICogcHJvY2Vzcywgc28gbm8gY29tbWFuZCBldmVyIHdhaXRzIG9uIHRoZSByZWdpc3RyeS5cbiAqXG4gKiBTaWxlbnQgd2hlbjogYFBJUEVMSU5FX01BTkFHRVJfTk9fVVBEQVRFX0NIRUNLYCBpcyBzZXQsIGBDSWAgaXMgc2V0LCBzdGRlcnJcbiAqIGlzIG5vdCBhIHRlcm1pbmFsLCBgLS1xdWlldGAgLyBgLS10b2tlbmAgb3V0cHV0IGlzIHdhbnRlZCwgb3IgdGhlIGNvbW1hbmQgaXNcbiAqIGl0c2VsZiBgLS11cGdyYWRlYCAvIGAtLXVwZ3JhZGUtY2hlY2tgLiBJdCBuZXZlciBmYWlscyBhIGNvbW1hbmQ6IGV2ZXJ5XG4gKiBlcnJvciBoZXJlIGlzIHN3YWxsb3dlZC5cbiAqL1xuXG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBta2RpclN5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBjb21wYXJlU2VtdmVyLCBpc1NlbXZlciB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnO1xuaW1wb3J0IHsgQVBQX05BTUUsIEFQUF9WRVJTSU9OIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuXG5leHBvcnQgY29uc3QgTk9fVVBEQVRFX0NIRUNLX0VOViA9ICdQSVBFTElORV9NQU5BR0VSX05PX1VQREFURV9DSEVDSyc7XG5leHBvcnQgY29uc3QgQ0hFQ0tfSU5URVJWQUxfTVMgPSAyNCAqIDYwICogNjAgKiAxMDAwO1xuY29uc3QgUEFDS0FHRV9OQU1FID0gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLW1hbmFnZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUNhY2hlIHsgY2hlY2tlZEF0OiBudW1iZXI7IGxhdGVzdD86IHN0cmluZyB9XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm90aWNlQ29udGV4dCB7XG4gIGFyZ3Y6IHN0cmluZ1tdO1xuICBlbnY6IE5vZGVKUy5Qcm9jZXNzRW52O1xuICBpc1RUWTogYm9vbGVhbjtcbn1cblxuLyoqIFdoZXRoZXIgdGhlIG5vdGljZSAoYW5kIGl0cyBiYWNrZ3JvdW5kIHJlZnJlc2gpIG1heSBydW4gYXQgYWxsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUNoZWNrRW5hYmxlZCh7IGFyZ3YsIGVudiwgaXNUVFkgfTogTm90aWNlQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAoZW52W05PX1VQREFURV9DSEVDS19FTlZdIHx8IGVudi5DSSB8fCBlbnYuTk9ERV9FTlYgPT09ICd0ZXN0JykgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzVFRZKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAhYXJndi5zb21lKChhKSA9PiBhID09PSAnLS1xdWlldCcgfHwgYSA9PT0gJy0tdG9rZW4nIHx8IGEgPT09ICctLXVwZ3JhZGUnIHx8IGEgPT09ICctLXVwZ3JhZGUtY2hlY2snKTtcbn1cblxuLyoqIFRoZSBub3RpY2UgbGluZSBmb3IgYGN1cnJlbnRgIGdpdmVuIHRoZSBjYWNoZSwgb3IgbnVsbCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgbmV3ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gbm90aWNlRm9yKGN1cnJlbnQ6IHN0cmluZywgY2FjaGU6IFVwZGF0ZUNhY2hlIHwgbnVsbCk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBsYXRlc3QgPSBjYWNoZT8ubGF0ZXN0O1xuICBpZiAoIWxhdGVzdCB8fCAhaXNTZW12ZXIobGF0ZXN0KSB8fCAhaXNTZW12ZXIoY3VycmVudCkpIHJldHVybiBudWxsO1xuICBpZiAoY29tcGFyZVNlbXZlcihsYXRlc3QsIGN1cnJlbnQpIDw9IDApIHJldHVybiBudWxsO1xuICByZXR1cm4gYCR7cGljby55ZWxsb3coJ1VwZGF0ZSBhdmFpbGFibGUnKX0gJHtjdXJyZW50fSDihpIgJHtwaWNvLmdyZWVuKGxhdGVzdCl9OiBydW4gJHtwaWNvLmN5YW4oYCR7QVBQX05BTUV9IC0tdXBncmFkZWApfWBcbiAgICArIHBpY28uZGltKGAgKHNpbGVuY2Ugd2l0aCAke05PX1VQREFURV9DSEVDS19FTlZ9PTEpYCk7XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBjYWNoZSBpcyBkdWUgZm9yIGEgcmVmcmVzaCBhdCBgbm93YC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N0YWxlKGNhY2hlOiBVcGRhdGVDYWNoZSB8IG51bGwsIG5vdzogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiAhY2FjaGUgfHwgIU51bWJlci5pc0Zpbml0ZShjYWNoZS5jaGVja2VkQXQpIHx8IG5vdyAtIGNhY2hlLmNoZWNrZWRBdCA+PSBDSEVDS19JTlRFUlZBTF9NUyB8fCBjYWNoZS5jaGVja2VkQXQgPiBub3c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ2FjaGUoZmlsZTogc3RyaW5nKTogVXBkYXRlQ2FjaGUgfCBudWxsIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhmaWxlLCAndXRmOCcpKSBhcyBVcGRhdGVDYWNoZTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZC5jaGVja2VkQXQgPT09ICdudW1iZXInID8gcGFyc2VkIDogbnVsbDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgZGV0YWNoZWQgcmVmcmVzaGVyOiBhc2tzIHRoZSByZWdpc3RyeSBmb3IgYGxhdGVzdGAgYW5kIHdyaXRlcyB0aGUgY2FjaGUuXG4gKiBJdCBzdGFtcHMgYGNoZWNrZWRBdGAgZXZlbiB3aGVuIHRoZSBsb29rdXAgZmFpbHMsIHNvIGFuIG9mZmxpbmUgbWFjaGluZVxuICogcmV0cmllcyB0b21vcnJvdyByYXRoZXIgdGhhbiBvbiBldmVyeSBjb21tYW5kLlxuICovXG5jb25zdCBSRUZSRVNIX1NDUklQVCA9IGBcbmNvbnN0IHsgZXhlY0ZpbGVTeW5jIH0gPSByZXF1aXJlKCdub2RlOmNoaWxkX3Byb2Nlc3MnKTtcbmNvbnN0IHsgd3JpdGVGaWxlU3luYywgcmVuYW1lU3luYyB9ID0gcmVxdWlyZSgnbm9kZTpmcycpO1xuY29uc3QgW2ZpbGUsIHBrZ10gPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMSk7XG5sZXQgbGF0ZXN0O1xudHJ5IHtcbiAgY29uc3Qgb3V0ID0gZXhlY0ZpbGVTeW5jKCducG0nLCBbJ3ZpZXcnLCBwa2cgKyAnQGxhdGVzdCcsICd2ZXJzaW9uJywgJy0tanNvbiddLCB7IGVuY29kaW5nOiAndXRmOCcsIHRpbWVvdXQ6IDIwMDAwLCBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdpZ25vcmUnXSwgc2hlbGw6IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgfSk7XG4gIGNvbnN0IHYgPSBKU09OLnBhcnNlKG91dCk7XG4gIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGxhdGVzdCA9IHY7XG59IGNhdGNoIHt9XG5jb25zdCB0bXAgPSBmaWxlICsgJy4nICsgcHJvY2Vzcy5waWQ7XG53cml0ZUZpbGVTeW5jKHRtcCwgSlNPTi5zdHJpbmdpZnkoeyBjaGVja2VkQXQ6IERhdGUubm93KCksIGxhdGVzdCB9KSk7XG5yZW5hbWVTeW5jKHRtcCwgZmlsZSk7XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdENhY2hlRmlsZSgpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lZGlyKCksICcucGlwZWxpbmUtbWFuYWdlcicsICd1cGRhdGUtY2hlY2suanNvbicpO1xufVxuXG4vKipcbiAqIFdpcmUgdGhlIG5vdGljZSBmb3IgdGhpcyBwcm9jZXNzOiByZWFkIHRoZSBjYWNoZSBub3csIHJlZnJlc2ggaXQgaW4gdGhlXG4gKiBiYWNrZ3JvdW5kIHdoZW4gc3RhbGUsIGFuZCBwcmludCBvbiBleGl0IHdoZW4gYSBuZXdlciByZWxlYXNlIGlzIGtub3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVVcGRhdGVOb3RpY2UoXG4gIGN0eDogTm90aWNlQ29udGV4dCA9IHsgYXJndjogcHJvY2Vzcy5hcmd2LnNsaWNlKDIpLCBlbnY6IHByb2Nlc3MuZW52LCBpc1RUWTogQm9vbGVhbihwcm9jZXNzLnN0ZGVyci5pc1RUWSkgfSxcbiAgZmlsZTogc3RyaW5nID0gZGVmYXVsdENhY2hlRmlsZSgpLFxuICBub3c6IG51bWJlciA9IERhdGUubm93KCksXG4pOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBpZiAoIXVwZGF0ZUNoZWNrRW5hYmxlZChjdHgpKSByZXR1cm47XG4gICAgY29uc3QgY2FjaGUgPSByZWFkQ2FjaGUoZmlsZSk7XG4gICAgaWYgKGlzU3RhbGUoY2FjaGUsIG5vdykpIHtcbiAgICAgIC8vIH4vLnBpcGVsaW5lLW1hbmFnZXIgaXMgYWxzbyB0aGUgQ1JFREVOVElBTCBzdG9yZSAoY3JlZGVudGlhbC1zdG9yZS50c1xuICAgICAgLy8gbWFrZXMgaXQgMDcwMCwgYnV0IG9ubHkgd2hlbiBjcmVhdGluZyBpdCkg4oCUIGlmIHRoaXMgcnVucyBmaXJzdCBpdCBtdXN0XG4gICAgICAvLyBub3QgbGVhdmUgdGhhdCBkaXJlY3Rvcnkgd29ybGQtcmVhZGFibGUuXG4gICAgICBta2RpclN5bmMoZGlybmFtZShmaWxlKSwgeyByZWN1cnNpdmU6IHRydWUsIG1vZGU6IDBvNzAwIH0pO1xuICAgICAgc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgWyctZScsIFJFRlJFU0hfU0NSSVBULCBmaWxlLCBQQUNLQUdFX05BTUVdLCB7IGRldGFjaGVkOiB0cnVlLCBzdGRpbzogJ2lnbm9yZScsIHdpbmRvd3NIaWRlOiB0cnVlIH0pLnVucmVmKCk7XG4gICAgfVxuICAgIGNvbnN0IGxpbmUgPSBub3RpY2VGb3IoQVBQX1ZFUlNJT04sIGNhY2hlKTtcbiAgICBpZiAobGluZSkgcHJvY2Vzcy5vbmNlKCdleGl0JywgKCkgPT4geyBwcm9jZXNzLnN0ZGVyci53cml0ZShgXFxuJHtsaW5lfVxcbmApOyB9KTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gTmV2ZXIgbGV0IHRoZSB1cGRhdGUgbm90aWNlIGJyZWFrIGEgY29tbWFuZC5cbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -33,9 +33,9 @@
33
33
  "@aws-sdk/client-secrets-manager": "3.1160.0",
34
34
  "@aws-sdk/client-sqs": "3.1160.0",
35
35
  "@aws-sdk/client-sts": "3.1160.0",
36
- "@pipeline-builder/ai-core": "4.3.7",
37
- "@pipeline-builder/api-core": "5.2.7",
38
- "@pipeline-builder/pipeline-core": "4.4.8",
36
+ "@pipeline-builder/ai-core": "4.3.8",
37
+ "@pipeline-builder/api-core": "5.2.8",
38
+ "@pipeline-builder/pipeline-core": "4.4.9",
39
39
  "aws-cdk-lib": "2.275.0",
40
40
  "axios": "1.21.1",
41
41
  "commander": "15.1.0",
@@ -106,7 +106,7 @@
106
106
  "registry": "https://registry.npmjs.org/",
107
107
  "provenance": true
108
108
  },
109
- "version": "4.4.20",
109
+ "version": "4.5.0",
110
110
  "bugs": {
111
111
  "url": "https://github.com/mwashburn160/pipeline-builder/issues"
112
112
  },