4runr-os 2.10.72 → 2.10.73
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/apps/gateway/package-lock.json +110 -110
- package/apps/gateway/scripts/verify-sentinel-persist.mjs +81 -81
- package/apps/gateway/src/__tests__/integration/sentinel.test.ts +79 -0
- package/apps/gateway/src/__tests__/sentinel-config-persist-http.test.ts +93 -93
- package/apps/gateway/src/__tests__/sentinel-config-store.test.ts +133 -133
- package/apps/gateway/src/security/sentinel-config-store.ts +208 -208
- package/dist/tui-handlers.js +57 -67
- package/dist/tui-handlers.js.map +1 -1
- package/dist/watchdog.d.ts +5 -0
- package/dist/watchdog.d.ts.map +1 -1
- package/dist/watchdog.js +82 -75
- package/dist/watchdog.js.map +1 -1
- package/mk3-tui/src/main.rs +7 -0
- package/package.json +2 -2
- package/scripts/os-tools-smoke.cjs +1 -1
|
@@ -199,16 +199,16 @@
|
|
|
199
199
|
}
|
|
200
200
|
},
|
|
201
201
|
"node_modules/@aws-sdk/client-kms": {
|
|
202
|
-
"version": "3.
|
|
203
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.
|
|
204
|
-
"integrity": "sha512-
|
|
202
|
+
"version": "3.1064.0",
|
|
203
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.1064.0.tgz",
|
|
204
|
+
"integrity": "sha512-43+lngEV/O07VSOomT0EXRKwu01IqhQ+kEtmWsf0WYQD+HfQ5xpc+Iz62h9FOeOFeNkRaXR57g+JWxgNyvc8qQ==",
|
|
205
205
|
"license": "Apache-2.0",
|
|
206
206
|
"dependencies": {
|
|
207
207
|
"@aws-crypto/sha256-browser": "5.2.0",
|
|
208
208
|
"@aws-crypto/sha256-js": "5.2.0",
|
|
209
|
-
"@aws-sdk/core": "^3.974.
|
|
210
|
-
"@aws-sdk/credential-provider-node": "^3.972.
|
|
211
|
-
"@aws-sdk/types": "^3.973.
|
|
209
|
+
"@aws-sdk/core": "^3.974.19",
|
|
210
|
+
"@aws-sdk/credential-provider-node": "^3.972.53",
|
|
211
|
+
"@aws-sdk/types": "^3.973.12",
|
|
212
212
|
"@smithy/core": "^3.24.6",
|
|
213
213
|
"@smithy/fetch-http-handler": "^5.4.6",
|
|
214
214
|
"@smithy/node-http-handler": "^4.7.6",
|
|
@@ -220,16 +220,16 @@
|
|
|
220
220
|
}
|
|
221
221
|
},
|
|
222
222
|
"node_modules/@aws-sdk/client-secrets-manager": {
|
|
223
|
-
"version": "3.
|
|
224
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.
|
|
225
|
-
"integrity": "sha512-
|
|
223
|
+
"version": "3.1064.0",
|
|
224
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.1064.0.tgz",
|
|
225
|
+
"integrity": "sha512-TB1hyywgIYXX9hRQNRAHsbdasudSiC0U4GLqMRdsBrfyd3nEjcdo5uzGKYVxYsMogx/clIcCamTjiin2e0U0EQ==",
|
|
226
226
|
"license": "Apache-2.0",
|
|
227
227
|
"dependencies": {
|
|
228
228
|
"@aws-crypto/sha256-browser": "5.2.0",
|
|
229
229
|
"@aws-crypto/sha256-js": "5.2.0",
|
|
230
|
-
"@aws-sdk/core": "^3.974.
|
|
231
|
-
"@aws-sdk/credential-provider-node": "^3.972.
|
|
232
|
-
"@aws-sdk/types": "^3.973.
|
|
230
|
+
"@aws-sdk/core": "^3.974.19",
|
|
231
|
+
"@aws-sdk/credential-provider-node": "^3.972.53",
|
|
232
|
+
"@aws-sdk/types": "^3.973.12",
|
|
233
233
|
"@smithy/core": "^3.24.6",
|
|
234
234
|
"@smithy/fetch-http-handler": "^5.4.6",
|
|
235
235
|
"@smithy/node-http-handler": "^4.7.6",
|
|
@@ -241,16 +241,16 @@
|
|
|
241
241
|
}
|
|
242
242
|
},
|
|
243
243
|
"node_modules/@aws-sdk/client-ssm": {
|
|
244
|
-
"version": "3.
|
|
245
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.
|
|
246
|
-
"integrity": "sha512-
|
|
244
|
+
"version": "3.1064.0",
|
|
245
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/client-ssm/-/client-ssm-3.1064.0.tgz",
|
|
246
|
+
"integrity": "sha512-yuo05kkO5TMciB8QDV771n84e9KN7TkrsGdTjZWguA0d4V9bXSGv9Zed+0tuOmjZ7yHOjTdu9aeS+MD7zrGA3Q==",
|
|
247
247
|
"license": "Apache-2.0",
|
|
248
248
|
"dependencies": {
|
|
249
249
|
"@aws-crypto/sha256-browser": "5.2.0",
|
|
250
250
|
"@aws-crypto/sha256-js": "5.2.0",
|
|
251
|
-
"@aws-sdk/core": "^3.974.
|
|
252
|
-
"@aws-sdk/credential-provider-node": "^3.972.
|
|
253
|
-
"@aws-sdk/types": "^3.973.
|
|
251
|
+
"@aws-sdk/core": "^3.974.19",
|
|
252
|
+
"@aws-sdk/credential-provider-node": "^3.972.53",
|
|
253
|
+
"@aws-sdk/types": "^3.973.12",
|
|
254
254
|
"@smithy/core": "^3.24.6",
|
|
255
255
|
"@smithy/fetch-http-handler": "^5.4.6",
|
|
256
256
|
"@smithy/node-http-handler": "^4.7.6",
|
|
@@ -262,13 +262,13 @@
|
|
|
262
262
|
}
|
|
263
263
|
},
|
|
264
264
|
"node_modules/@aws-sdk/core": {
|
|
265
|
-
"version": "3.974.
|
|
266
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.
|
|
267
|
-
"integrity": "sha512-
|
|
265
|
+
"version": "3.974.19",
|
|
266
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.19.tgz",
|
|
267
|
+
"integrity": "sha512-SMNfLCU/41xxfFaC5Slwy8V/f1FRhakvyeeMeDeIxqNF0DzhDlXsXnJDELJYke1EtnJbfzfilW7tvulGfxMY6A==",
|
|
268
268
|
"license": "Apache-2.0",
|
|
269
269
|
"dependencies": {
|
|
270
|
-
"@aws-sdk/types": "^3.973.
|
|
271
|
-
"@aws-sdk/xml-builder": "^3.972.
|
|
270
|
+
"@aws-sdk/types": "^3.973.12",
|
|
271
|
+
"@aws-sdk/xml-builder": "^3.972.29",
|
|
272
272
|
"@aws/lambda-invoke-store": "^0.2.2",
|
|
273
273
|
"@smithy/core": "^3.24.6",
|
|
274
274
|
"@smithy/signature-v4": "^5.4.6",
|
|
@@ -281,13 +281,13 @@
|
|
|
281
281
|
}
|
|
282
282
|
},
|
|
283
283
|
"node_modules/@aws-sdk/credential-provider-env": {
|
|
284
|
-
"version": "3.972.
|
|
285
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.
|
|
286
|
-
"integrity": "sha512-
|
|
284
|
+
"version": "3.972.45",
|
|
285
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.45.tgz",
|
|
286
|
+
"integrity": "sha512-ZPsnLyrpDRmojKrBbJykASyLLVFkjyD+fWATeSuYgaqablijGOzxPxEKyrwUvNg+bgSQ7PkW2FTu65Xco19Gag==",
|
|
287
287
|
"license": "Apache-2.0",
|
|
288
288
|
"dependencies": {
|
|
289
|
-
"@aws-sdk/core": "^3.974.
|
|
290
|
-
"@aws-sdk/types": "^3.973.
|
|
289
|
+
"@aws-sdk/core": "^3.974.19",
|
|
290
|
+
"@aws-sdk/types": "^3.973.12",
|
|
291
291
|
"@smithy/core": "^3.24.6",
|
|
292
292
|
"@smithy/types": "^4.14.3",
|
|
293
293
|
"tslib": "^2.6.2"
|
|
@@ -297,13 +297,13 @@
|
|
|
297
297
|
}
|
|
298
298
|
},
|
|
299
299
|
"node_modules/@aws-sdk/credential-provider-http": {
|
|
300
|
-
"version": "3.972.
|
|
301
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.
|
|
302
|
-
"integrity": "sha512-
|
|
300
|
+
"version": "3.972.47",
|
|
301
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.47.tgz",
|
|
302
|
+
"integrity": "sha512-1XdgHDIPbARHuzZXM7ouzIbSUZFU9dTi9k+ryMhiZU4QCam4dvwOyUEFjEHNxAZehCYUIOmsSUZ2un6BIgUkWg==",
|
|
303
303
|
"license": "Apache-2.0",
|
|
304
304
|
"dependencies": {
|
|
305
|
-
"@aws-sdk/core": "^3.974.
|
|
306
|
-
"@aws-sdk/types": "^3.973.
|
|
305
|
+
"@aws-sdk/core": "^3.974.19",
|
|
306
|
+
"@aws-sdk/types": "^3.973.12",
|
|
307
307
|
"@smithy/core": "^3.24.6",
|
|
308
308
|
"@smithy/fetch-http-handler": "^5.4.6",
|
|
309
309
|
"@smithy/node-http-handler": "^4.7.6",
|
|
@@ -315,20 +315,20 @@
|
|
|
315
315
|
}
|
|
316
316
|
},
|
|
317
317
|
"node_modules/@aws-sdk/credential-provider-ini": {
|
|
318
|
-
"version": "3.972.
|
|
319
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.
|
|
320
|
-
"integrity": "sha512-
|
|
318
|
+
"version": "3.972.51",
|
|
319
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.51.tgz",
|
|
320
|
+
"integrity": "sha512-f8sRTVyM+9BbzQKPlUP9dVVpgNEu65jFckNAAGzRfCrlaSi5AWUbCKEHIMcIYokv8pWblSKEqHkqKYZtwINnhw==",
|
|
321
321
|
"license": "Apache-2.0",
|
|
322
322
|
"dependencies": {
|
|
323
|
-
"@aws-sdk/core": "^3.974.
|
|
324
|
-
"@aws-sdk/credential-provider-env": "^3.972.
|
|
325
|
-
"@aws-sdk/credential-provider-http": "^3.972.
|
|
326
|
-
"@aws-sdk/credential-provider-login": "^3.972.
|
|
327
|
-
"@aws-sdk/credential-provider-process": "^3.972.
|
|
328
|
-
"@aws-sdk/credential-provider-sso": "^3.972.
|
|
329
|
-
"@aws-sdk/credential-provider-web-identity": "^3.972.
|
|
330
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
331
|
-
"@aws-sdk/types": "^3.973.
|
|
323
|
+
"@aws-sdk/core": "^3.974.19",
|
|
324
|
+
"@aws-sdk/credential-provider-env": "^3.972.45",
|
|
325
|
+
"@aws-sdk/credential-provider-http": "^3.972.47",
|
|
326
|
+
"@aws-sdk/credential-provider-login": "^3.972.50",
|
|
327
|
+
"@aws-sdk/credential-provider-process": "^3.972.45",
|
|
328
|
+
"@aws-sdk/credential-provider-sso": "^3.972.50",
|
|
329
|
+
"@aws-sdk/credential-provider-web-identity": "^3.972.50",
|
|
330
|
+
"@aws-sdk/nested-clients": "^3.997.18",
|
|
331
|
+
"@aws-sdk/types": "^3.973.12",
|
|
332
332
|
"@smithy/core": "^3.24.6",
|
|
333
333
|
"@smithy/credential-provider-imds": "^4.3.7",
|
|
334
334
|
"@smithy/types": "^4.14.3",
|
|
@@ -339,14 +339,14 @@
|
|
|
339
339
|
}
|
|
340
340
|
},
|
|
341
341
|
"node_modules/@aws-sdk/credential-provider-login": {
|
|
342
|
-
"version": "3.972.
|
|
343
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.
|
|
344
|
-
"integrity": "sha512-
|
|
342
|
+
"version": "3.972.50",
|
|
343
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.50.tgz",
|
|
344
|
+
"integrity": "sha512-NHHsKoMhw6UylSU0XDnDc87+IQW8tRBTIe6vnOX12GSIlBDtoce6bSzONleIglCyu8d3H9bmTSfk+sIN5yh3WA==",
|
|
345
345
|
"license": "Apache-2.0",
|
|
346
346
|
"dependencies": {
|
|
347
|
-
"@aws-sdk/core": "^3.974.
|
|
348
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
349
|
-
"@aws-sdk/types": "^3.973.
|
|
347
|
+
"@aws-sdk/core": "^3.974.19",
|
|
348
|
+
"@aws-sdk/nested-clients": "^3.997.18",
|
|
349
|
+
"@aws-sdk/types": "^3.973.12",
|
|
350
350
|
"@smithy/core": "^3.24.6",
|
|
351
351
|
"@smithy/types": "^4.14.3",
|
|
352
352
|
"tslib": "^2.6.2"
|
|
@@ -356,18 +356,18 @@
|
|
|
356
356
|
}
|
|
357
357
|
},
|
|
358
358
|
"node_modules/@aws-sdk/credential-provider-node": {
|
|
359
|
-
"version": "3.972.
|
|
360
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.
|
|
361
|
-
"integrity": "sha512-
|
|
359
|
+
"version": "3.972.53",
|
|
360
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.53.tgz",
|
|
361
|
+
"integrity": "sha512-z/JJ8Qvf2GiTn4bw+x8k7wQjxmPpNsiwZ7ls/h1cZHikrSpS0+65lB+lafnXZlxv1lqH4k6rQwh+2UsycC662g==",
|
|
362
362
|
"license": "Apache-2.0",
|
|
363
363
|
"dependencies": {
|
|
364
|
-
"@aws-sdk/credential-provider-env": "^3.972.
|
|
365
|
-
"@aws-sdk/credential-provider-http": "^3.972.
|
|
366
|
-
"@aws-sdk/credential-provider-ini": "^3.972.
|
|
367
|
-
"@aws-sdk/credential-provider-process": "^3.972.
|
|
368
|
-
"@aws-sdk/credential-provider-sso": "^3.972.
|
|
369
|
-
"@aws-sdk/credential-provider-web-identity": "^3.972.
|
|
370
|
-
"@aws-sdk/types": "^3.973.
|
|
364
|
+
"@aws-sdk/credential-provider-env": "^3.972.45",
|
|
365
|
+
"@aws-sdk/credential-provider-http": "^3.972.47",
|
|
366
|
+
"@aws-sdk/credential-provider-ini": "^3.972.51",
|
|
367
|
+
"@aws-sdk/credential-provider-process": "^3.972.45",
|
|
368
|
+
"@aws-sdk/credential-provider-sso": "^3.972.50",
|
|
369
|
+
"@aws-sdk/credential-provider-web-identity": "^3.972.50",
|
|
370
|
+
"@aws-sdk/types": "^3.973.12",
|
|
371
371
|
"@smithy/core": "^3.24.6",
|
|
372
372
|
"@smithy/credential-provider-imds": "^4.3.7",
|
|
373
373
|
"@smithy/types": "^4.14.3",
|
|
@@ -378,13 +378,13 @@
|
|
|
378
378
|
}
|
|
379
379
|
},
|
|
380
380
|
"node_modules/@aws-sdk/credential-provider-process": {
|
|
381
|
-
"version": "3.972.
|
|
382
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.
|
|
383
|
-
"integrity": "sha512-
|
|
381
|
+
"version": "3.972.45",
|
|
382
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.45.tgz",
|
|
383
|
+
"integrity": "sha512-QMJXjTGLmHE4Ie03T5H4hHOLfcvMc9DaODO6b5dgte3S8ECf5bBuHUJW4cQREcYZyRkOU8iymqtiBxqF4icxZg==",
|
|
384
384
|
"license": "Apache-2.0",
|
|
385
385
|
"dependencies": {
|
|
386
|
-
"@aws-sdk/core": "^3.974.
|
|
387
|
-
"@aws-sdk/types": "^3.973.
|
|
386
|
+
"@aws-sdk/core": "^3.974.19",
|
|
387
|
+
"@aws-sdk/types": "^3.973.12",
|
|
388
388
|
"@smithy/core": "^3.24.6",
|
|
389
389
|
"@smithy/types": "^4.14.3",
|
|
390
390
|
"tslib": "^2.6.2"
|
|
@@ -394,15 +394,15 @@
|
|
|
394
394
|
}
|
|
395
395
|
},
|
|
396
396
|
"node_modules/@aws-sdk/credential-provider-sso": {
|
|
397
|
-
"version": "3.972.
|
|
398
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.
|
|
399
|
-
"integrity": "sha512-
|
|
397
|
+
"version": "3.972.50",
|
|
398
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.50.tgz",
|
|
399
|
+
"integrity": "sha512-pQ9ww4G53gwHlon1NMz25JhaBo13E9Jv+VVgjh39C/yzvby+xhSnEOb+VDYShKNCh1TbttMF/5CFCHkZrIqOcA==",
|
|
400
400
|
"license": "Apache-2.0",
|
|
401
401
|
"dependencies": {
|
|
402
|
-
"@aws-sdk/core": "^3.974.
|
|
403
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
404
|
-
"@aws-sdk/token-providers": "3.
|
|
405
|
-
"@aws-sdk/types": "^3.973.
|
|
402
|
+
"@aws-sdk/core": "^3.974.19",
|
|
403
|
+
"@aws-sdk/nested-clients": "^3.997.18",
|
|
404
|
+
"@aws-sdk/token-providers": "3.1064.0",
|
|
405
|
+
"@aws-sdk/types": "^3.973.12",
|
|
406
406
|
"@smithy/core": "^3.24.6",
|
|
407
407
|
"@smithy/types": "^4.14.3",
|
|
408
408
|
"tslib": "^2.6.2"
|
|
@@ -412,14 +412,14 @@
|
|
|
412
412
|
}
|
|
413
413
|
},
|
|
414
414
|
"node_modules/@aws-sdk/credential-provider-web-identity": {
|
|
415
|
-
"version": "3.972.
|
|
416
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.
|
|
417
|
-
"integrity": "sha512-
|
|
415
|
+
"version": "3.972.50",
|
|
416
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.50.tgz",
|
|
417
|
+
"integrity": "sha512-9DbaPaT2aMbz18wtSpq9HVBErjBQwxykqTFgG6n8Bn05GN68mITz+G1869ekYx0mVT/BDjETj5czz/3cPgLwxA==",
|
|
418
418
|
"license": "Apache-2.0",
|
|
419
419
|
"dependencies": {
|
|
420
|
-
"@aws-sdk/core": "^3.974.
|
|
421
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
422
|
-
"@aws-sdk/types": "^3.973.
|
|
420
|
+
"@aws-sdk/core": "^3.974.19",
|
|
421
|
+
"@aws-sdk/nested-clients": "^3.997.18",
|
|
422
|
+
"@aws-sdk/types": "^3.973.12",
|
|
423
423
|
"@smithy/core": "^3.24.6",
|
|
424
424
|
"@smithy/types": "^4.14.3",
|
|
425
425
|
"tslib": "^2.6.2"
|
|
@@ -429,16 +429,16 @@
|
|
|
429
429
|
}
|
|
430
430
|
},
|
|
431
431
|
"node_modules/@aws-sdk/nested-clients": {
|
|
432
|
-
"version": "3.997.
|
|
433
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.
|
|
434
|
-
"integrity": "sha512-
|
|
432
|
+
"version": "3.997.18",
|
|
433
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.18.tgz",
|
|
434
|
+
"integrity": "sha512-xBWrodBvW5SHCZV11UZUJG0pSHkLCEREIBoNbff1C1sacOUCmxJnTCPE80sCGLCtqgXg98I2MQJe2z28tcZSsw==",
|
|
435
435
|
"license": "Apache-2.0",
|
|
436
436
|
"dependencies": {
|
|
437
437
|
"@aws-crypto/sha256-browser": "5.2.0",
|
|
438
438
|
"@aws-crypto/sha256-js": "5.2.0",
|
|
439
|
-
"@aws-sdk/core": "^3.974.
|
|
440
|
-
"@aws-sdk/signature-v4-multi-region": "^3.996.
|
|
441
|
-
"@aws-sdk/types": "^3.973.
|
|
439
|
+
"@aws-sdk/core": "^3.974.19",
|
|
440
|
+
"@aws-sdk/signature-v4-multi-region": "^3.996.33",
|
|
441
|
+
"@aws-sdk/types": "^3.973.12",
|
|
442
442
|
"@smithy/core": "^3.24.6",
|
|
443
443
|
"@smithy/fetch-http-handler": "^5.4.6",
|
|
444
444
|
"@smithy/node-http-handler": "^4.7.6",
|
|
@@ -450,12 +450,12 @@
|
|
|
450
450
|
}
|
|
451
451
|
},
|
|
452
452
|
"node_modules/@aws-sdk/signature-v4-multi-region": {
|
|
453
|
-
"version": "3.996.
|
|
454
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.
|
|
455
|
-
"integrity": "sha512-
|
|
453
|
+
"version": "3.996.33",
|
|
454
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.33.tgz",
|
|
455
|
+
"integrity": "sha512-Hn0RThJEbyOZWV2PV9Z4YD3nitGPxybmyU17dSe9b61WOBcKnqS0WTtM3c1zyZq9WnGiyrfi/i+UBPUk7cM8Ug==",
|
|
456
456
|
"license": "Apache-2.0",
|
|
457
457
|
"dependencies": {
|
|
458
|
-
"@aws-sdk/types": "^3.973.
|
|
458
|
+
"@aws-sdk/types": "^3.973.12",
|
|
459
459
|
"@smithy/signature-v4": "^5.4.6",
|
|
460
460
|
"@smithy/types": "^4.14.3",
|
|
461
461
|
"tslib": "^2.6.2"
|
|
@@ -465,14 +465,14 @@
|
|
|
465
465
|
}
|
|
466
466
|
},
|
|
467
467
|
"node_modules/@aws-sdk/token-providers": {
|
|
468
|
-
"version": "3.
|
|
469
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.
|
|
470
|
-
"integrity": "sha512-
|
|
468
|
+
"version": "3.1064.0",
|
|
469
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1064.0.tgz",
|
|
470
|
+
"integrity": "sha512-sjI+iA4JtgeckBgKwPQF7KzWillRoNDmtpiM0TRa0syiAKFHKUSf84kPXSO3+gA7aMMSxrcxzOM2oPSecaJvEA==",
|
|
471
471
|
"license": "Apache-2.0",
|
|
472
472
|
"dependencies": {
|
|
473
|
-
"@aws-sdk/core": "^3.974.
|
|
474
|
-
"@aws-sdk/nested-clients": "^3.997.
|
|
475
|
-
"@aws-sdk/types": "^3.973.
|
|
473
|
+
"@aws-sdk/core": "^3.974.19",
|
|
474
|
+
"@aws-sdk/nested-clients": "^3.997.18",
|
|
475
|
+
"@aws-sdk/types": "^3.973.12",
|
|
476
476
|
"@smithy/core": "^3.24.6",
|
|
477
477
|
"@smithy/types": "^4.14.3",
|
|
478
478
|
"tslib": "^2.6.2"
|
|
@@ -482,9 +482,9 @@
|
|
|
482
482
|
}
|
|
483
483
|
},
|
|
484
484
|
"node_modules/@aws-sdk/types": {
|
|
485
|
-
"version": "3.973.
|
|
486
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.
|
|
487
|
-
"integrity": "sha512-
|
|
485
|
+
"version": "3.973.12",
|
|
486
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.12.tgz",
|
|
487
|
+
"integrity": "sha512-43ajd1NF0RMgX5k0hxCNUyEdrtFUsb2aHT2QvpktSC/2Eyb2Jr/JPVqdp0XIoaHWikZJq5tNWSLO6kB5q2eMCA==",
|
|
488
488
|
"license": "Apache-2.0",
|
|
489
489
|
"dependencies": {
|
|
490
490
|
"@smithy/types": "^4.14.3",
|
|
@@ -495,9 +495,9 @@
|
|
|
495
495
|
}
|
|
496
496
|
},
|
|
497
497
|
"node_modules/@aws-sdk/util-locate-window": {
|
|
498
|
-
"version": "3.965.
|
|
499
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.
|
|
500
|
-
"integrity": "sha512-
|
|
498
|
+
"version": "3.965.7",
|
|
499
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.7.tgz",
|
|
500
|
+
"integrity": "sha512-M0D6oIpohdNHjc7udzTHEQyot0+0iuA36jc2I9Hps+f/GtKi2HO/pyijQnCnNcwZqLB5+rtn81z3eZK/GyjAmA==",
|
|
501
501
|
"license": "Apache-2.0",
|
|
502
502
|
"dependencies": {
|
|
503
503
|
"tslib": "^2.6.2"
|
|
@@ -507,9 +507,9 @@
|
|
|
507
507
|
}
|
|
508
508
|
},
|
|
509
509
|
"node_modules/@aws-sdk/xml-builder": {
|
|
510
|
-
"version": "3.972.
|
|
511
|
-
"resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.
|
|
512
|
-
"integrity": "sha512-
|
|
510
|
+
"version": "3.972.29",
|
|
511
|
+
"resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.29.tgz",
|
|
512
|
+
"integrity": "sha512-fk0niuGFxfi8yIJuMVM4mhwObkiQSuwZFj3tAPrLVx64Pk3BkrEIpqjzHKY4hKoEBUD6Jg/S74Zj9jy+5F3DnQ==",
|
|
513
513
|
"license": "Apache-2.0",
|
|
514
514
|
"dependencies": {
|
|
515
515
|
"@smithy/types": "^4.14.3",
|
|
@@ -6747,9 +6747,9 @@
|
|
|
6747
6747
|
"license": "MIT"
|
|
6748
6748
|
},
|
|
6749
6749
|
"node_modules/msgpackr": {
|
|
6750
|
-
"version": "1.
|
|
6751
|
-
"resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.
|
|
6752
|
-
"integrity": "sha512-
|
|
6750
|
+
"version": "1.12.0",
|
|
6751
|
+
"resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.12.0.tgz",
|
|
6752
|
+
"integrity": "sha512-ShViuAPS67t4m33mZtSokhAtfzTTZPxN7L6JwkhpTfCadm8NcMGBAZMakg1b7cZqFnJLqhh5b+lHJ2ejcM3qlw==",
|
|
6753
6753
|
"license": "MIT",
|
|
6754
6754
|
"optionalDependencies": {
|
|
6755
6755
|
"msgpackr-extract": "^3.0.2"
|
|
@@ -7907,9 +7907,9 @@
|
|
|
7907
7907
|
"license": "BSD-3-Clause"
|
|
7908
7908
|
},
|
|
7909
7909
|
"node_modules/semver": {
|
|
7910
|
-
"version": "7.8.
|
|
7911
|
-
"resolved": "https://registry.npmjs.org/semver/-/semver-7.8.
|
|
7912
|
-
"integrity": "sha512-
|
|
7910
|
+
"version": "7.8.3",
|
|
7911
|
+
"resolved": "https://registry.npmjs.org/semver/-/semver-7.8.3.tgz",
|
|
7912
|
+
"integrity": "sha512-wnilbGyMxzbY7dNOl7jpKbLSjcfeweJWU5j4+u5qW+6/wuGD9KzIGOyZnQVSBM9E7DtWaaH3CyHkppYrKYoxwg==",
|
|
7913
7913
|
"license": "ISC",
|
|
7914
7914
|
"bin": {
|
|
7915
7915
|
"semver": "bin/semver.js"
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* One-shot: prove sentinel-limits.json round-trip changes Sentinel.getConfig()
|
|
3
|
-
* and policy thresholds (simulates Gateway restart without HTTP).
|
|
4
|
-
*
|
|
5
|
-
* Usage: node scripts/verify-sentinel-persist.mjs
|
|
6
|
-
*/
|
|
7
|
-
import * as fs from 'fs';
|
|
8
|
-
import * as path from 'path';
|
|
9
|
-
import * as os from 'os';
|
|
10
|
-
|
|
11
|
-
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), '4runr-persist-verify-'));
|
|
12
|
-
process.env['APPDATA'] = tmp;
|
|
13
|
-
|
|
14
|
-
const { Sentinel, policyManager } = await import('@4runr/sentinel');
|
|
15
|
-
const {
|
|
16
|
-
saveSentinelLimitsToDisk,
|
|
17
|
-
loadSentinelLimitsFromDisk,
|
|
18
|
-
applyPersistedSentinelConfig,
|
|
19
|
-
getSentinelLimitsFilePath,
|
|
20
|
-
} = await import('../dist/security/sentinel-config-store.js');
|
|
21
|
-
|
|
22
|
-
const distinctive = {
|
|
23
|
-
enabled: true,
|
|
24
|
-
runMaxDurationMs: 111_000,
|
|
25
|
-
runMaxTokens: 22_000,
|
|
26
|
-
runIdleMs: 12_345,
|
|
27
|
-
loopWindow: 9,
|
|
28
|
-
loopMax: 4,
|
|
29
|
-
runMaxCost: 2.75,
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
saveSentinelLimitsToDisk(distinctive);
|
|
33
|
-
const filePath = getSentinelLimitsFilePath();
|
|
34
|
-
if (!fs.existsSync(filePath)) {
|
|
35
|
-
console.error('FAIL: file not written', filePath);
|
|
36
|
-
process.exit(1);
|
|
37
|
-
}
|
|
38
|
-
const onDisk = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
39
|
-
console.log('OK: wrote', filePath);
|
|
40
|
-
console.log(' config.runIdleMs on disk:', onDisk.config?.runIdleMs);
|
|
41
|
-
|
|
42
|
-
const loaded = loadSentinelLimitsFromDisk();
|
|
43
|
-
if (loaded?.runIdleMs !== distinctive.runIdleMs) {
|
|
44
|
-
console.error('FAIL: load from disk', loaded);
|
|
45
|
-
process.exit(1);
|
|
46
|
-
}
|
|
47
|
-
console.log('OK: loadSentinelLimitsFromDisk matches');
|
|
48
|
-
|
|
49
|
-
Sentinel.resetInstance();
|
|
50
|
-
const sentinel = Sentinel.getInstance();
|
|
51
|
-
const before = sentinel.getConfig().runIdleMs;
|
|
52
|
-
applyPersistedSentinelConfig(sentinel);
|
|
53
|
-
const after = sentinel.getConfig().runIdleMs;
|
|
54
|
-
if (after !== distinctive.runIdleMs) {
|
|
55
|
-
console.error('FAIL: after boot apply', { before, after, expected: distinctive.runIdleMs });
|
|
56
|
-
process.exit(1);
|
|
57
|
-
}
|
|
58
|
-
console.log('OK: fresh singleton after applyPersistedSentinelConfig', { before, after });
|
|
59
|
-
|
|
60
|
-
const violations = policyManager.evaluatePolicies(
|
|
61
|
-
'verify-run',
|
|
62
|
-
{
|
|
63
|
-
runId: 'verify-run',
|
|
64
|
-
createdAt: Date.now(),
|
|
65
|
-
startedAt: Date.now() - 30_000,
|
|
66
|
-
lastTokenAt: Date.now() - 30_000,
|
|
67
|
-
tokenCount: 0,
|
|
68
|
-
status: 'running',
|
|
69
|
-
events: [],
|
|
70
|
-
},
|
|
71
|
-
sentinel.getConfig()
|
|
72
|
-
);
|
|
73
|
-
const idle = violations.find((v) => v.policy === 'idle');
|
|
74
|
-
if (!idle || idle.threshold !== distinctive.runIdleMs) {
|
|
75
|
-
console.error('FAIL: policy threshold', idle);
|
|
76
|
-
process.exit(1);
|
|
77
|
-
}
|
|
78
|
-
console.log('OK: idle policy threshold = persisted runIdleMs', idle.threshold);
|
|
79
|
-
|
|
80
|
-
fs.rmSync(tmp, { recursive: true, force: true });
|
|
81
|
-
console.log('\nAll persistence checks passed (fundamental, not UI-only).');
|
|
1
|
+
/**
|
|
2
|
+
* One-shot: prove sentinel-limits.json round-trip changes Sentinel.getConfig()
|
|
3
|
+
* and policy thresholds (simulates Gateway restart without HTTP).
|
|
4
|
+
*
|
|
5
|
+
* Usage: node scripts/verify-sentinel-persist.mjs
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
|
|
11
|
+
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), '4runr-persist-verify-'));
|
|
12
|
+
process.env['APPDATA'] = tmp;
|
|
13
|
+
|
|
14
|
+
const { Sentinel, policyManager } = await import('@4runr/sentinel');
|
|
15
|
+
const {
|
|
16
|
+
saveSentinelLimitsToDisk,
|
|
17
|
+
loadSentinelLimitsFromDisk,
|
|
18
|
+
applyPersistedSentinelConfig,
|
|
19
|
+
getSentinelLimitsFilePath,
|
|
20
|
+
} = await import('../dist/security/sentinel-config-store.js');
|
|
21
|
+
|
|
22
|
+
const distinctive = {
|
|
23
|
+
enabled: true,
|
|
24
|
+
runMaxDurationMs: 111_000,
|
|
25
|
+
runMaxTokens: 22_000,
|
|
26
|
+
runIdleMs: 12_345,
|
|
27
|
+
loopWindow: 9,
|
|
28
|
+
loopMax: 4,
|
|
29
|
+
runMaxCost: 2.75,
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
saveSentinelLimitsToDisk(distinctive);
|
|
33
|
+
const filePath = getSentinelLimitsFilePath();
|
|
34
|
+
if (!fs.existsSync(filePath)) {
|
|
35
|
+
console.error('FAIL: file not written', filePath);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
const onDisk = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
39
|
+
console.log('OK: wrote', filePath);
|
|
40
|
+
console.log(' config.runIdleMs on disk:', onDisk.config?.runIdleMs);
|
|
41
|
+
|
|
42
|
+
const loaded = loadSentinelLimitsFromDisk();
|
|
43
|
+
if (loaded?.runIdleMs !== distinctive.runIdleMs) {
|
|
44
|
+
console.error('FAIL: load from disk', loaded);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
console.log('OK: loadSentinelLimitsFromDisk matches');
|
|
48
|
+
|
|
49
|
+
Sentinel.resetInstance();
|
|
50
|
+
const sentinel = Sentinel.getInstance();
|
|
51
|
+
const before = sentinel.getConfig().runIdleMs;
|
|
52
|
+
applyPersistedSentinelConfig(sentinel);
|
|
53
|
+
const after = sentinel.getConfig().runIdleMs;
|
|
54
|
+
if (after !== distinctive.runIdleMs) {
|
|
55
|
+
console.error('FAIL: after boot apply', { before, after, expected: distinctive.runIdleMs });
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
console.log('OK: fresh singleton after applyPersistedSentinelConfig', { before, after });
|
|
59
|
+
|
|
60
|
+
const violations = policyManager.evaluatePolicies(
|
|
61
|
+
'verify-run',
|
|
62
|
+
{
|
|
63
|
+
runId: 'verify-run',
|
|
64
|
+
createdAt: Date.now(),
|
|
65
|
+
startedAt: Date.now() - 30_000,
|
|
66
|
+
lastTokenAt: Date.now() - 30_000,
|
|
67
|
+
tokenCount: 0,
|
|
68
|
+
status: 'running',
|
|
69
|
+
events: [],
|
|
70
|
+
},
|
|
71
|
+
sentinel.getConfig()
|
|
72
|
+
);
|
|
73
|
+
const idle = violations.find((v) => v.policy === 'idle');
|
|
74
|
+
if (!idle || idle.threshold !== distinctive.runIdleMs) {
|
|
75
|
+
console.error('FAIL: policy threshold', idle);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
console.log('OK: idle policy threshold = persisted runIdleMs', idle.threshold);
|
|
79
|
+
|
|
80
|
+
fs.rmSync(tmp, { recursive: true, force: true });
|
|
81
|
+
console.log('\nAll persistence checks passed (fundamental, not UI-only).');
|
|
@@ -242,6 +242,85 @@ describe('Sentinel Integration', () => {
|
|
|
242
242
|
SENTINEL_SMOKE_TIMEOUT
|
|
243
243
|
);
|
|
244
244
|
|
|
245
|
+
it(
|
|
246
|
+
'custom runIdleMs from POST /policies/custom is enforced (same path as OS UI apply)',
|
|
247
|
+
async () => {
|
|
248
|
+
if (!sentinelHealthy) {
|
|
249
|
+
console.log('Skipping: Sentinel is not healthy');
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const currentResponse = await authenticatedRequest('/api/sentinel/policies/current');
|
|
254
|
+
expect(currentResponse.status).toBe(200);
|
|
255
|
+
const currentData = await currentResponse.json();
|
|
256
|
+
const previousConfig = currentData.config as Record<string, unknown>;
|
|
257
|
+
|
|
258
|
+
const customIdleMs = 10_000;
|
|
259
|
+
const sleepMs = 13_000;
|
|
260
|
+
|
|
261
|
+
const customResponse = await authenticatedRequest('/api/sentinel/policies/custom', {
|
|
262
|
+
method: 'POST',
|
|
263
|
+
body: JSON.stringify({
|
|
264
|
+
...previousConfig,
|
|
265
|
+
enabled: true,
|
|
266
|
+
runIdleMs: customIdleMs,
|
|
267
|
+
}),
|
|
268
|
+
});
|
|
269
|
+
expect(customResponse.status).toBe(200);
|
|
270
|
+
const customData = await customResponse.json();
|
|
271
|
+
expect(customData.config.runIdleMs).toBe(customIdleMs);
|
|
272
|
+
|
|
273
|
+
const createResponse = await authenticatedRequest('/api/runs', {
|
|
274
|
+
method: 'POST',
|
|
275
|
+
body: JSON.stringify({
|
|
276
|
+
name: 'Custom Idle Enforcement Smoke',
|
|
277
|
+
input: {
|
|
278
|
+
agent_id: 'test',
|
|
279
|
+
sleep_ms: sleepMs,
|
|
280
|
+
},
|
|
281
|
+
}),
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
expect([201, 429]).toContain(createResponse.status);
|
|
285
|
+
if (createResponse.status === 429) {
|
|
286
|
+
console.log('Rate limited, skipping custom idle enforcement smoke');
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const createData = await createResponse.json();
|
|
291
|
+
const runId = createData.run.id;
|
|
292
|
+
|
|
293
|
+
const startResponse = await authenticatedRequest(`/api/runs/${runId}/start`, {
|
|
294
|
+
method: 'POST',
|
|
295
|
+
body: JSON.stringify({ priority: 'high' }),
|
|
296
|
+
});
|
|
297
|
+
expect(startResponse.status).toBe(200);
|
|
298
|
+
|
|
299
|
+
const startedAt = Date.now();
|
|
300
|
+
const finalRun = await pollRunUntilStatus(runId, 'killed', {
|
|
301
|
+
maxWaitMs: 25_000,
|
|
302
|
+
intervalMs: 500,
|
|
303
|
+
});
|
|
304
|
+
const elapsedMs = Date.now() - startedAt;
|
|
305
|
+
|
|
306
|
+
expect(finalRun.status).toBe('killed');
|
|
307
|
+
expect(finalRun.output).toMatchObject({
|
|
308
|
+
source: 'sentinel',
|
|
309
|
+
reason: 'policy_violation:idle',
|
|
310
|
+
policy: 'idle',
|
|
311
|
+
});
|
|
312
|
+
// Killed near custom 10s threshold — not strict (15s) or typical UI 60s idle.
|
|
313
|
+
expect(elapsedMs).toBeGreaterThan(customIdleMs - 3_000);
|
|
314
|
+
expect(elapsedMs).toBeLessThan(14_000);
|
|
315
|
+
|
|
316
|
+
await authenticatedRequest('/api/sentinel/policies/custom', {
|
|
317
|
+
method: 'POST',
|
|
318
|
+
body: JSON.stringify(previousConfig),
|
|
319
|
+
});
|
|
320
|
+
},
|
|
321
|
+
SENTINEL_SMOKE_TIMEOUT
|
|
322
|
+
);
|
|
323
|
+
|
|
245
324
|
it('GET /sentinel/health and /api/sentinel/policies/current respond for staging checks', async () => {
|
|
246
325
|
const healthResponse = await authenticatedRequest('/sentinel/health');
|
|
247
326
|
expect(healthResponse.status).toBe(200);
|