@volter/twin-standard 1.0.158 → 1.0.159
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/README.md +3 -2
- package/client-sdks/package.json +1 -0
- package/client-sdks/pnpm-lock.yaml +210 -0
- package/dist/client-sdks/package.json +1 -0
- package/dist/client-sdks/pnpm-lock.yaml +210 -0
- package/dist/src/assessment.d.ts +13 -3
- package/dist/src/assessment.js +10 -6
- package/dist/src/browser-assessment.js +16 -13
- package/dist/src/clients/harness.d.ts +25 -4
- package/dist/src/clients/harness.js +184 -22
- package/dist/src/clients/jira.js +11 -2
- package/dist/src/clients/run.js +19 -14
- package/dist/src/conformance.d.ts +2 -0
- package/dist/src/conformance.js +392 -184
- package/dist/src/consumer.d.ts +22 -1
- package/dist/src/consumer.js +91 -26
- package/dist/src/credential-issuer-import.d.ts +3 -0
- package/dist/src/credential-issuer-import.js +42 -0
- package/dist/src/derive.js +3 -0
- package/dist/src/gate.js +4 -0
- package/dist/src/lanes.d.ts +2 -0
- package/dist/src/lanes.js +7 -0
- package/dist/src/protocol-3.js +8 -3
- package/dist/src/spec-documents.d.ts +4 -0
- package/dist/src/spec-documents.js +110 -3
- package/dist/src/tools/life-coverage-walk.js +38 -26
- package/dist/src/tools/score-pack.js +6 -5
- package/dist/src/tools/vendor-examples.js +91 -80
- package/dist/src/walk/behavior-journey.d.ts +22 -14
- package/dist/src/walk/behavior-journey.js +182 -133
- package/dist/src/walk/journey-kit.d.ts +3 -2
- package/dist/src/walk/journey-kit.js +6 -2
- package/dist/src/walk/replay.d.ts +23 -0
- package/dist/src/walk/replay.js +118 -0
- package/dist/src/walk/serve-pack.d.ts +2 -2
- package/dist/src/walk/serve-pack.js +38 -2
- package/dist/src/walk/shape.d.ts +25 -4
- package/dist/src/walk/shape.js +166 -56
- package/dist/src/walk/vendor-fetch.d.ts +7 -2
- package/dist/src/walk/vendor-fetch.js +13 -2
- package/dist/src/walk/walk-database.d.ts +9 -1
- package/dist/src/walk/walk-database.js +35 -13
- package/dist/src/walk/xml-view.d.ts +3 -2
- package/dist/src/walk/xml-view.js +5 -4
- package/package.json +3 -3
- package/src/assessment.ts +12 -8
- package/src/browser-assessment.ts +12 -5
- package/src/clients/harness.ts +142 -19
- package/src/clients/jira.ts +4 -2
- package/src/clients/run.ts +17 -15
- package/src/conformance.ts +313 -128
- package/src/consumer.ts +83 -21
- package/src/credential-issuer-import.ts +38 -0
- package/src/derive.ts +3 -1
- package/src/gate.ts +3 -0
- package/src/lanes.ts +7 -0
- package/src/protocol-3.ts +7 -3
- package/src/spec-documents.ts +92 -3
- package/src/tools/life-coverage-walk.ts +32 -22
- package/src/tools/score-pack.ts +7 -6
- package/src/tools/vendor-examples.ts +88 -75
- package/src/walk/behavior-journey.ts +145 -109
- package/src/walk/journey-kit.ts +7 -5
- package/src/walk/replay.ts +103 -0
- package/src/walk/serve-pack.ts +25 -5
- package/src/walk/shape.ts +156 -54
- package/src/walk/vendor-fetch.ts +16 -4
- package/src/walk/walk-database.ts +41 -15
- package/src/walk/xml-view.ts +5 -4
|
@@ -187,6 +187,9 @@ importers:
|
|
|
187
187
|
'@vercel/sdk':
|
|
188
188
|
specifier: 1.28.38
|
|
189
189
|
version: 1.28.38
|
|
190
|
+
jira.js:
|
|
191
|
+
specifier: 5.4.0
|
|
192
|
+
version: 5.4.0(debug@4.4.3)
|
|
190
193
|
resend:
|
|
191
194
|
specifier: 6.6.0
|
|
192
195
|
version: 6.6.0
|
|
@@ -1187,12 +1190,26 @@ packages:
|
|
|
1187
1190
|
engines: {node: '>=0.4.0'}
|
|
1188
1191
|
hasBin: true
|
|
1189
1192
|
|
|
1193
|
+
agent-base@6.0.2:
|
|
1194
|
+
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
|
|
1195
|
+
engines: {node: '>= 6.0.0'}
|
|
1196
|
+
|
|
1197
|
+
asynckit@0.4.0:
|
|
1198
|
+
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
|
|
1199
|
+
|
|
1200
|
+
axios@1.21.0:
|
|
1201
|
+
resolution: {integrity: sha512-YCzXMB53Q9PZBsh7yN7wtapit4WepwcHS2fP8QhGsBxSz5YtgYobV7GGlWlAJi+RxfU77GQTQi2DSLUma42EYA==}
|
|
1202
|
+
|
|
1190
1203
|
balanced-match@1.0.2:
|
|
1191
1204
|
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
|
1192
1205
|
|
|
1193
1206
|
brace-expansion@2.1.7:
|
|
1194
1207
|
resolution: {integrity: sha512-uZbew1NqdmPDTMJ8ah1y+b+9QEJrfkXFk3RcTQw3X0jW/xRUvFKsg1CfQdSYGdTbXZWExtU3J3ccxtnfw1Fi0g==}
|
|
1195
1208
|
|
|
1209
|
+
call-bind-apply-helpers@1.0.2:
|
|
1210
|
+
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
|
|
1211
|
+
engines: {node: '>= 0.4'}
|
|
1212
|
+
|
|
1196
1213
|
chokidar@4.0.3:
|
|
1197
1214
|
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
|
|
1198
1215
|
engines: {node: '>= 14.16.0'}
|
|
@@ -1203,6 +1220,10 @@ packages:
|
|
|
1203
1220
|
cjs-module-lexer@2.2.1:
|
|
1204
1221
|
resolution: {integrity: sha512-Ca8swihM+/4yKecYHY52kgJd300hi2lADU/a1RxNTRe+RJ9jvqQlESpbz9DnG9mowez8qwXHB8qYdIUw9e+F5Q==}
|
|
1205
1222
|
|
|
1223
|
+
combined-stream@1.0.8:
|
|
1224
|
+
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
|
|
1225
|
+
engines: {node: '>= 0.8'}
|
|
1226
|
+
|
|
1206
1227
|
commander@12.1.0:
|
|
1207
1228
|
resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
|
|
1208
1229
|
engines: {node: '>=18'}
|
|
@@ -1216,10 +1237,22 @@ packages:
|
|
|
1216
1237
|
supports-color:
|
|
1217
1238
|
optional: true
|
|
1218
1239
|
|
|
1240
|
+
delayed-stream@1.0.0:
|
|
1241
|
+
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
|
1242
|
+
engines: {node: '>=0.4.0'}
|
|
1243
|
+
|
|
1219
1244
|
dotenv@16.6.1:
|
|
1220
1245
|
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
|
|
1221
1246
|
engines: {node: '>=12'}
|
|
1222
1247
|
|
|
1248
|
+
dunder-proto@1.0.1:
|
|
1249
|
+
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
|
|
1250
|
+
engines: {node: '>= 0.4'}
|
|
1251
|
+
|
|
1252
|
+
es-define-property@1.0.1:
|
|
1253
|
+
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
|
|
1254
|
+
engines: {node: '>= 0.4'}
|
|
1255
|
+
|
|
1223
1256
|
es-errors@1.3.0:
|
|
1224
1257
|
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
|
|
1225
1258
|
engines: {node: '>= 0.4'}
|
|
@@ -1227,6 +1260,14 @@ packages:
|
|
|
1227
1260
|
es-module-lexer@3.0.2:
|
|
1228
1261
|
resolution: {integrity: sha512-BuIB67FngDSyQ/dpQNOZybwdEBDUGJQvOqwWr4ha/ufYiqzuEwPkKO2zLhRAgay28tStRIHUeWmszZAJo3GCOg==}
|
|
1229
1262
|
|
|
1263
|
+
es-object-atoms@1.1.2:
|
|
1264
|
+
resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==}
|
|
1265
|
+
engines: {node: '>= 0.4'}
|
|
1266
|
+
|
|
1267
|
+
es-set-tostringtag@2.1.0:
|
|
1268
|
+
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
|
|
1269
|
+
engines: {node: '>= 0.4'}
|
|
1270
|
+
|
|
1230
1271
|
es6-promise@4.2.8:
|
|
1231
1272
|
resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==}
|
|
1232
1273
|
|
|
@@ -1247,20 +1288,57 @@ packages:
|
|
|
1247
1288
|
fast-wrap-ansi@0.2.2:
|
|
1248
1289
|
resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==}
|
|
1249
1290
|
|
|
1291
|
+
follow-redirects@1.16.2:
|
|
1292
|
+
resolution: {integrity: sha512-/kVP2U8z596Ia0gwFrwyIeo74ta5aVmSeU1FfAUMAmcEP5EP7zydmag3SLiN64NaRKef3lxsq7i/g7ltJQDGow==}
|
|
1293
|
+
engines: {node: '>=4.0'}
|
|
1294
|
+
peerDependencies:
|
|
1295
|
+
debug: '*'
|
|
1296
|
+
peerDependenciesMeta:
|
|
1297
|
+
debug:
|
|
1298
|
+
optional: true
|
|
1299
|
+
|
|
1300
|
+
form-data@4.0.6:
|
|
1301
|
+
resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==}
|
|
1302
|
+
engines: {node: '>= 6'}
|
|
1303
|
+
|
|
1250
1304
|
forwarded-parse@2.1.2:
|
|
1251
1305
|
resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==}
|
|
1252
1306
|
|
|
1253
1307
|
function-bind@1.1.2:
|
|
1254
1308
|
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
|
|
1255
1309
|
|
|
1310
|
+
get-intrinsic@1.3.0:
|
|
1311
|
+
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
|
|
1312
|
+
engines: {node: '>= 0.4'}
|
|
1313
|
+
|
|
1314
|
+
get-proto@1.0.1:
|
|
1315
|
+
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
|
|
1316
|
+
engines: {node: '>= 0.4'}
|
|
1317
|
+
|
|
1318
|
+
gopd@1.2.0:
|
|
1319
|
+
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
|
|
1320
|
+
engines: {node: '>= 0.4'}
|
|
1321
|
+
|
|
1256
1322
|
graphql@17.0.2:
|
|
1257
1323
|
resolution: {integrity: sha512-FRWbddMxfkjiB7z+aQDWIR+E34xo9I8c9mtK2RPv8PmMzKRvrdsreHL/Ui/TmwHJfhHChEtsFPyMHKI+xuarQQ==}
|
|
1258
1324
|
engines: {node: ^22.0.0 || ^24.0.0 || ^25.0.0 || >=26.0.0}
|
|
1259
1325
|
|
|
1326
|
+
has-symbols@1.1.0:
|
|
1327
|
+
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
|
|
1328
|
+
engines: {node: '>= 0.4'}
|
|
1329
|
+
|
|
1330
|
+
has-tostringtag@1.0.2:
|
|
1331
|
+
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
|
|
1332
|
+
engines: {node: '>= 0.4'}
|
|
1333
|
+
|
|
1260
1334
|
hasown@2.0.4:
|
|
1261
1335
|
resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
|
|
1262
1336
|
engines: {node: '>= 0.4'}
|
|
1263
1337
|
|
|
1338
|
+
https-proxy-agent@5.0.1:
|
|
1339
|
+
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
|
|
1340
|
+
engines: {node: '>= 6'}
|
|
1341
|
+
|
|
1264
1342
|
import-in-the-middle@1.15.0:
|
|
1265
1343
|
resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==}
|
|
1266
1344
|
|
|
@@ -1275,6 +1353,22 @@ packages:
|
|
|
1275
1353
|
resolution: {integrity: sha512-J/vG0zBCbIKOQFfufSwyXdMrsohyJIUNkrnmo6WZGzoM7tr/lsbfW5b2BvisL6zsyMzK9UxV9L6c7AoFbyXHOA==}
|
|
1276
1354
|
engines: {node: '>= 0.4'}
|
|
1277
1355
|
|
|
1356
|
+
jira.js@5.4.0:
|
|
1357
|
+
resolution: {integrity: sha512-W/ZumutCfEYPA8Zqf5CuokfHCvmm9OybLpv1Kt6W5usOrt8gfbtvczCARkIJOlWq1aOJ/tp1LuaZzUWlXto3Qw==}
|
|
1358
|
+
engines: {node: '>=20'}
|
|
1359
|
+
|
|
1360
|
+
math-intrinsics@1.1.0:
|
|
1361
|
+
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
|
|
1362
|
+
engines: {node: '>= 0.4'}
|
|
1363
|
+
|
|
1364
|
+
mime-db@1.52.0:
|
|
1365
|
+
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
|
|
1366
|
+
engines: {node: '>= 0.6'}
|
|
1367
|
+
|
|
1368
|
+
mime-types@2.1.35:
|
|
1369
|
+
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
|
|
1370
|
+
engines: {node: '>= 0.6'}
|
|
1371
|
+
|
|
1278
1372
|
minimatch@9.0.9:
|
|
1279
1373
|
resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
|
|
1280
1374
|
engines: {node: '>=16 || 14 >=14.17'}
|
|
@@ -1318,6 +1412,10 @@ packages:
|
|
|
1318
1412
|
resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==}
|
|
1319
1413
|
engines: {node: '>=0.10.0'}
|
|
1320
1414
|
|
|
1415
|
+
proxy-from-env@2.1.0:
|
|
1416
|
+
resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==}
|
|
1417
|
+
engines: {node: '>=10'}
|
|
1418
|
+
|
|
1321
1419
|
querystringify@2.2.0:
|
|
1322
1420
|
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
|
|
1323
1421
|
|
|
@@ -2615,12 +2713,35 @@ snapshots:
|
|
|
2615
2713
|
|
|
2616
2714
|
acorn@8.18.0: {}
|
|
2617
2715
|
|
|
2716
|
+
agent-base@6.0.2:
|
|
2717
|
+
dependencies:
|
|
2718
|
+
debug: 4.4.3
|
|
2719
|
+
transitivePeerDependencies:
|
|
2720
|
+
- supports-color
|
|
2721
|
+
|
|
2722
|
+
asynckit@0.4.0: {}
|
|
2723
|
+
|
|
2724
|
+
axios@1.21.0(debug@4.4.3):
|
|
2725
|
+
dependencies:
|
|
2726
|
+
follow-redirects: 1.16.2(debug@4.4.3)
|
|
2727
|
+
form-data: 4.0.6
|
|
2728
|
+
https-proxy-agent: 5.0.1
|
|
2729
|
+
proxy-from-env: 2.1.0
|
|
2730
|
+
transitivePeerDependencies:
|
|
2731
|
+
- debug
|
|
2732
|
+
- supports-color
|
|
2733
|
+
|
|
2618
2734
|
balanced-match@1.0.2: {}
|
|
2619
2735
|
|
|
2620
2736
|
brace-expansion@2.1.7:
|
|
2621
2737
|
dependencies:
|
|
2622
2738
|
balanced-match: 1.0.2
|
|
2623
2739
|
|
|
2740
|
+
call-bind-apply-helpers@1.0.2:
|
|
2741
|
+
dependencies:
|
|
2742
|
+
es-errors: 1.3.0
|
|
2743
|
+
function-bind: 1.1.2
|
|
2744
|
+
|
|
2624
2745
|
chokidar@4.0.3:
|
|
2625
2746
|
dependencies:
|
|
2626
2747
|
readdirp: 4.1.2
|
|
@@ -2629,18 +2750,43 @@ snapshots:
|
|
|
2629
2750
|
|
|
2630
2751
|
cjs-module-lexer@2.2.1: {}
|
|
2631
2752
|
|
|
2753
|
+
combined-stream@1.0.8:
|
|
2754
|
+
dependencies:
|
|
2755
|
+
delayed-stream: 1.0.0
|
|
2756
|
+
|
|
2632
2757
|
commander@12.1.0: {}
|
|
2633
2758
|
|
|
2634
2759
|
debug@4.4.3:
|
|
2635
2760
|
dependencies:
|
|
2636
2761
|
ms: 2.1.3
|
|
2637
2762
|
|
|
2763
|
+
delayed-stream@1.0.0: {}
|
|
2764
|
+
|
|
2638
2765
|
dotenv@16.6.1: {}
|
|
2639
2766
|
|
|
2767
|
+
dunder-proto@1.0.1:
|
|
2768
|
+
dependencies:
|
|
2769
|
+
call-bind-apply-helpers: 1.0.2
|
|
2770
|
+
es-errors: 1.3.0
|
|
2771
|
+
gopd: 1.2.0
|
|
2772
|
+
|
|
2773
|
+
es-define-property@1.0.1: {}
|
|
2774
|
+
|
|
2640
2775
|
es-errors@1.3.0: {}
|
|
2641
2776
|
|
|
2642
2777
|
es-module-lexer@3.0.2: {}
|
|
2643
2778
|
|
|
2779
|
+
es-object-atoms@1.1.2:
|
|
2780
|
+
dependencies:
|
|
2781
|
+
es-errors: 1.3.0
|
|
2782
|
+
|
|
2783
|
+
es-set-tostringtag@2.1.0:
|
|
2784
|
+
dependencies:
|
|
2785
|
+
es-errors: 1.3.0
|
|
2786
|
+
get-intrinsic: 1.3.0
|
|
2787
|
+
has-tostringtag: 1.0.2
|
|
2788
|
+
hasown: 2.0.4
|
|
2789
|
+
|
|
2644
2790
|
es6-promise@4.2.8: {}
|
|
2645
2791
|
|
|
2646
2792
|
esbuild@0.25.12:
|
|
@@ -2684,16 +2830,61 @@ snapshots:
|
|
|
2684
2830
|
dependencies:
|
|
2685
2831
|
fast-string-width: 3.0.2
|
|
2686
2832
|
|
|
2833
|
+
follow-redirects@1.16.2(debug@4.4.3):
|
|
2834
|
+
optionalDependencies:
|
|
2835
|
+
debug: 4.4.3
|
|
2836
|
+
|
|
2837
|
+
form-data@4.0.6:
|
|
2838
|
+
dependencies:
|
|
2839
|
+
asynckit: 0.4.0
|
|
2840
|
+
combined-stream: 1.0.8
|
|
2841
|
+
es-set-tostringtag: 2.1.0
|
|
2842
|
+
hasown: 2.0.4
|
|
2843
|
+
mime-types: 2.1.35
|
|
2844
|
+
|
|
2687
2845
|
forwarded-parse@2.1.2: {}
|
|
2688
2846
|
|
|
2689
2847
|
function-bind@1.1.2: {}
|
|
2690
2848
|
|
|
2849
|
+
get-intrinsic@1.3.0:
|
|
2850
|
+
dependencies:
|
|
2851
|
+
call-bind-apply-helpers: 1.0.2
|
|
2852
|
+
es-define-property: 1.0.1
|
|
2853
|
+
es-errors: 1.3.0
|
|
2854
|
+
es-object-atoms: 1.1.2
|
|
2855
|
+
function-bind: 1.1.2
|
|
2856
|
+
get-proto: 1.0.1
|
|
2857
|
+
gopd: 1.2.0
|
|
2858
|
+
has-symbols: 1.1.0
|
|
2859
|
+
hasown: 2.0.4
|
|
2860
|
+
math-intrinsics: 1.1.0
|
|
2861
|
+
|
|
2862
|
+
get-proto@1.0.1:
|
|
2863
|
+
dependencies:
|
|
2864
|
+
dunder-proto: 1.0.1
|
|
2865
|
+
es-object-atoms: 1.1.2
|
|
2866
|
+
|
|
2867
|
+
gopd@1.2.0: {}
|
|
2868
|
+
|
|
2691
2869
|
graphql@17.0.2: {}
|
|
2692
2870
|
|
|
2871
|
+
has-symbols@1.1.0: {}
|
|
2872
|
+
|
|
2873
|
+
has-tostringtag@1.0.2:
|
|
2874
|
+
dependencies:
|
|
2875
|
+
has-symbols: 1.1.0
|
|
2876
|
+
|
|
2693
2877
|
hasown@2.0.4:
|
|
2694
2878
|
dependencies:
|
|
2695
2879
|
function-bind: 1.1.2
|
|
2696
2880
|
|
|
2881
|
+
https-proxy-agent@5.0.1:
|
|
2882
|
+
dependencies:
|
|
2883
|
+
agent-base: 6.0.2
|
|
2884
|
+
debug: 4.4.3
|
|
2885
|
+
transitivePeerDependencies:
|
|
2886
|
+
- supports-color
|
|
2887
|
+
|
|
2697
2888
|
import-in-the-middle@1.15.0:
|
|
2698
2889
|
dependencies:
|
|
2699
2890
|
acorn: 8.18.0
|
|
@@ -2718,6 +2909,23 @@ snapshots:
|
|
|
2718
2909
|
dependencies:
|
|
2719
2910
|
hasown: 2.0.4
|
|
2720
2911
|
|
|
2912
|
+
jira.js@5.4.0(debug@4.4.3):
|
|
2913
|
+
dependencies:
|
|
2914
|
+
axios: 1.21.0(debug@4.4.3)
|
|
2915
|
+
mime-types: 2.1.35
|
|
2916
|
+
zod: 4.6.7
|
|
2917
|
+
transitivePeerDependencies:
|
|
2918
|
+
- debug
|
|
2919
|
+
- supports-color
|
|
2920
|
+
|
|
2921
|
+
math-intrinsics@1.1.0: {}
|
|
2922
|
+
|
|
2923
|
+
mime-db@1.52.0: {}
|
|
2924
|
+
|
|
2925
|
+
mime-types@2.1.35:
|
|
2926
|
+
dependencies:
|
|
2927
|
+
mime-db: 1.52.0
|
|
2928
|
+
|
|
2721
2929
|
minimatch@9.0.9:
|
|
2722
2930
|
dependencies:
|
|
2723
2931
|
brace-expansion: 2.1.7
|
|
@@ -2752,6 +2960,8 @@ snapshots:
|
|
|
2752
2960
|
dependencies:
|
|
2753
2961
|
xtend: 4.0.2
|
|
2754
2962
|
|
|
2963
|
+
proxy-from-env@2.1.0: {}
|
|
2964
|
+
|
|
2755
2965
|
querystringify@2.2.0: {}
|
|
2756
2966
|
|
|
2757
2967
|
readdirp@4.1.2: {}
|
package/dist/src/assessment.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare function assessPack(packDir: string, options?: AssessmentOptions)
|
|
|
23
23
|
}[];
|
|
24
24
|
replay: {
|
|
25
25
|
equal: boolean;
|
|
26
|
+
diagnostics: string[];
|
|
26
27
|
runs: number;
|
|
27
28
|
firstSha256: string;
|
|
28
29
|
secondSha256: string;
|
|
@@ -53,7 +54,7 @@ export declare function assessPack(packDir: string, options?: AssessmentOptions)
|
|
|
53
54
|
};
|
|
54
55
|
at: string;
|
|
55
56
|
retentionNotApplicable?: string | undefined;
|
|
56
|
-
measured:
|
|
57
|
+
measured: true;
|
|
57
58
|
passed: boolean;
|
|
58
59
|
scope: string;
|
|
59
60
|
package: any;
|
|
@@ -74,6 +75,15 @@ export declare function assessPack(packDir: string, options?: AssessmentOptions)
|
|
|
74
75
|
package: string;
|
|
75
76
|
version: string;
|
|
76
77
|
};
|
|
78
|
+
peers: {
|
|
79
|
+
package: string;
|
|
80
|
+
version: string;
|
|
81
|
+
}[];
|
|
82
|
+
sdks: {
|
|
83
|
+
package: string;
|
|
84
|
+
version: string;
|
|
85
|
+
entry: string;
|
|
86
|
+
}[];
|
|
77
87
|
dependencyLockSha256: string;
|
|
78
88
|
appLocal: boolean;
|
|
79
89
|
};
|
|
@@ -103,8 +113,8 @@ export declare function assessPack(packDir: string, options?: AssessmentOptions)
|
|
|
103
113
|
mode: string;
|
|
104
114
|
};
|
|
105
115
|
} | {
|
|
106
|
-
measured:
|
|
107
|
-
passed:
|
|
116
|
+
measured: false;
|
|
117
|
+
passed: false;
|
|
108
118
|
failures: string[];
|
|
109
119
|
};
|
|
110
120
|
integrity?: string | undefined;
|
package/dist/src/assessment.js
CHANGED
|
@@ -16,6 +16,7 @@ import { conformance } from "./conformance.js";
|
|
|
16
16
|
import { inMemoryWorld, walk, withPinnedWorldDraws, usePacks } from "./walk/behavior-journey.js";
|
|
17
17
|
import { compilePackFacts } from "./pack-facts.js";
|
|
18
18
|
import { expandFills } from "./walk/journey-kit.js";
|
|
19
|
+
import { compareReplays } from "./walk/replay.js";
|
|
19
20
|
import { runConsumerWorkflow } from "./consumer.js";
|
|
20
21
|
const canonical = (value) => value && typeof value === 'object' ? Array.isArray(value) ? value.map(canonical) : Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, item]) => [key, canonical(item)])) : value;
|
|
21
22
|
const json = (value) => JSON.stringify(canonical(value));
|
|
@@ -73,7 +74,8 @@ export async function assessPack(packDir, options = {}) {
|
|
|
73
74
|
const coverageOf = (result) => !instrumented || result.ambiguous ? null : { total: declared.length, exercised: result.exercised.length, percent: 100 * result.exercised.length / declared.length, operations: result.exercised, missing: declared.filter((id) => !result.exercised.includes(id)) };
|
|
74
75
|
async function replay(served) {
|
|
75
76
|
const world = inMemoryWorld('catalog-replay');
|
|
76
|
-
const failures = []
|
|
77
|
+
const failures = [];
|
|
78
|
+
const trace = [];
|
|
77
79
|
const exercised = new Set();
|
|
78
80
|
const signatures = new WeakMap();
|
|
79
81
|
let ambiguous = false;
|
|
@@ -94,7 +96,7 @@ export async function assessPack(packDir, options = {}) {
|
|
|
94
96
|
exercised.add(id);
|
|
95
97
|
});
|
|
96
98
|
try {
|
|
97
|
-
await withPinnedWorldDraws(() => walk(structuredClone(life), world.root(), failures, { beats: true, ...(served ? { served } : {}), hooks: { after: (step, path, answer) => trace.push({ name: step.name ?? '', path, status: answer.status, body: answer.body }) } }));
|
|
99
|
+
await withPinnedWorldDraws(() => walk(structuredClone(life), world.root(), failures, { beats: true, ...(served ? { served } : {}), hooks: { after: (step, path, answer) => trace.push({ name: step.name ?? '', path, status: answer.status, body: answer.body, ...(answer.sql ? { sql: answer.sql } : {}), ...(answer.connection ? { connection: answer.connection } : {}) }) } }));
|
|
98
100
|
return { failures, trace, exercised: [...exercised].sort(), ambiguous };
|
|
99
101
|
}
|
|
100
102
|
finally {
|
|
@@ -103,9 +105,10 @@ export async function assessPack(packDir, options = {}) {
|
|
|
103
105
|
}
|
|
104
106
|
}
|
|
105
107
|
const first = await replay(), second = await replay();
|
|
106
|
-
const
|
|
108
|
+
const comparison = compareReplays(first.trace, second.trace);
|
|
109
|
+
const replayEqual = comparison.equal;
|
|
107
110
|
const coverage = coverageOf(first);
|
|
108
|
-
const quick = { scope: 'packaged-customer-journey; in-process', steps: life.steps.length, answered: first.trace.length, failures: [...first.failures, ...second.failures], replay: { equal: replayEqual, runs: 2, firstSha256: hash(first.trace), secondSha256: hash(second.trace) }, operationCoverage: coverage, servedOperations, surface: owners ? { total: declared.length, served: servedOperations.length, gap: declared.length - servedOperations.length } : null, codeCoverage: null, stateTransitionCoverage: null };
|
|
111
|
+
const quick = { scope: 'packaged-customer-journey; in-process', steps: life.steps.length, answered: first.trace.length, failures: [...first.failures, ...second.failures], replay: { equal: replayEqual, diagnostics: comparison.diagnostics, runs: 2, firstSha256: hash(first.trace), secondSha256: hash(second.trace) }, operationCoverage: coverage, servedOperations, surface: owners ? { total: declared.length, served: servedOperations.length, gap: declared.length - servedOperations.length } : null, codeCoverage: null, stateTransitionCoverage: null };
|
|
109
112
|
let browser = { measured: false, reason: options.browser ? 'Journey has a wire Chromium fetch cannot exercise' : 'Browser target not requested' };
|
|
110
113
|
const httpOnly = life.steps.every((step) => 'method' in step || 'wait' in step);
|
|
111
114
|
if (options.browser && httpOnly) {
|
|
@@ -113,13 +116,13 @@ export async function assessPack(packDir, options = {}) {
|
|
|
113
116
|
const transport = await chromiumServed(packDir, life.host ?? 'twin.local', 'http-journey');
|
|
114
117
|
try {
|
|
115
118
|
const a = await replay(transport.served), b = await replay(transport.served);
|
|
116
|
-
|
|
119
|
+
const compared = compareReplays(a.trace, b.trace);
|
|
120
|
+
browser = { measured: true, target: 'HTTP customer journey replay through Chromium at each request origin; authored HTTP headers and observed wire responses', responseObservation: 'Transport observes status, headers and body, including redirects and Set-Cookie; these are not JavaScript-visible response claims', applicationOriginCorsCoverage: null, cookieJarCoverage: null, version: transport.version, answered: a.trace.length, failures: [...a.failures, ...b.failures], replay: { equal: compared.equal, diagnostics: compared.diagnostics, firstSha256: hash(a.trace), secondSha256: hash(b.trace), runs: 2 }, operationCoverage: coverageOf(a), domCoverage: null, clock: transport.clock };
|
|
117
121
|
}
|
|
118
122
|
finally {
|
|
119
123
|
await transport.stop();
|
|
120
124
|
}
|
|
121
125
|
}
|
|
122
|
-
const conform = options.conformance === false ? null : await conformance(packDir);
|
|
123
126
|
let consumer;
|
|
124
127
|
try {
|
|
125
128
|
consumer = options.consumer ? await runConsumerWorkflow(packDir, options.consumer) : { measured: false, passed: false, failures: ['Installed customer workflow was not prepared'] };
|
|
@@ -127,6 +130,7 @@ export async function assessPack(packDir, options = {}) {
|
|
|
127
130
|
catch (error) {
|
|
128
131
|
consumer = { measured: false, passed: false, failures: [error.message] };
|
|
129
132
|
}
|
|
133
|
+
const conform = options.conformance === false ? null : await conformance(packDir, consumer.measured ? { consumer } : {});
|
|
130
134
|
const ready = gates.length > 0 && gates.every((gate) => !gate.failures.length) && !quick.failures.length && replayEqual && conform !== null && conform.length > 0 && conform.every((result) => !result.failures.length) && consumer.measured && consumer.passed && (!options.browser || !httpOnly || browser.measured === true && browser.failures.length === 0 && browser.replay.equal);
|
|
131
135
|
// the artifact assessed, by the integrity its prepared consumer verified the installed candidate against (consumer.ts)
|
|
132
136
|
return { schemaVersion: 1, vendor, package: manifest.name, version: manifest.version, ...(consumer.integrity ? { integrity: consumer.integrity } : {}), ready, gates: gates.map((gate) => ({ ...gate, unit: gate.unit === packDir ? vendor : `${vendor}/${gate.unit.slice(packDir.length + 1)}` })), quick, browser, conformance: conform, consumer };
|
|
@@ -1,20 +1,12 @@
|
|
|
1
|
-
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
-
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
-
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
-
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
-
});
|
|
6
|
-
}
|
|
7
|
-
return path;
|
|
8
|
-
};
|
|
9
1
|
// Browser transport for the existing journey engine. A container supplies network isolation in catalog execution.
|
|
10
2
|
import { join } from 'node:path';
|
|
11
3
|
import { existsSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
12
4
|
import { tmpdir } from 'node:os';
|
|
13
5
|
import { worldNow } from '@volter/world-core/runtime';
|
|
6
|
+
import { packFetch } from "./walk/vendor-fetch.js";
|
|
14
7
|
export async function chromiumServed(packDir, host, mode = 'browser-fetch') {
|
|
15
8
|
const { chromium } = await import('playwright');
|
|
16
|
-
const
|
|
17
|
-
const factory = Object.entries(mod).find(([name, value]) => /^create\w+Fetch$/.test(name) && !/TwinFetch$/.test(name) && typeof value === 'function')?.[1];
|
|
9
|
+
const factory = await packFetch(packDir);
|
|
18
10
|
if (!factory)
|
|
19
11
|
throw new Error('Browser assessment needs the pack HTTP fetch factory');
|
|
20
12
|
const library = ['/usr/lib/x86_64-linux-gnu/faketime/libfaketimeMT.so.1', '/usr/lib/aarch64-linux-gnu/faketime/libfaketimeMT.so.1'].find(existsSync);
|
|
@@ -41,7 +33,7 @@ export async function chromiumServed(packDir, host, mode = 'browser-fetch') {
|
|
|
41
33
|
}
|
|
42
34
|
const served = async (root, options) => {
|
|
43
35
|
syncClock();
|
|
44
|
-
const fetchPack = factory(
|
|
36
|
+
const fetchPack = factory(root, options);
|
|
45
37
|
const context = await browser.newContext({ serviceWorkers: 'block', locale: 'en-US', timezoneId: 'UTC' });
|
|
46
38
|
const pages = [];
|
|
47
39
|
const pending = new Map();
|
|
@@ -96,7 +88,7 @@ export async function chromiumServed(packDir, host, mode = 'browser-fetch') {
|
|
|
96
88
|
};
|
|
97
89
|
return {
|
|
98
90
|
scheme: 'https',
|
|
99
|
-
fetch: async (request, options) => {
|
|
91
|
+
fetch: Object.assign(async (request, options) => {
|
|
100
92
|
const entry = await acquire(mode === 'http-journey' ? new URL(request.url).origin : `https://${host}`);
|
|
101
93
|
const { page } = entry;
|
|
102
94
|
const observation = { request };
|
|
@@ -128,8 +120,19 @@ export async function chromiumServed(packDir, host, mode = 'browser-fetch') {
|
|
|
128
120
|
pending.delete(page);
|
|
129
121
|
entry.busy = false;
|
|
130
122
|
}
|
|
123
|
+
}, {
|
|
124
|
+
managedDatabaseUrl: fetchPack.managedDatabaseUrl,
|
|
125
|
+
managedDatabaseClock: fetchPack.managedDatabaseClock,
|
|
126
|
+
managedDatabaseConnection: fetchPack.managedDatabaseConnection,
|
|
127
|
+
}),
|
|
128
|
+
stop: async () => {
|
|
129
|
+
try {
|
|
130
|
+
await context.close();
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
await fetchPack.stopDatabase?.();
|
|
134
|
+
}
|
|
131
135
|
},
|
|
132
|
-
stop: () => context.close(),
|
|
133
136
|
};
|
|
134
137
|
};
|
|
135
138
|
return { served, version: browser.version(), clock: { native: 'World time through libfaketime', nativePrecisionMs: 1000, javascriptPrecisionMs: 1, monotonic: 'elapsed machine time' }, stop: async () => { try {
|
|
@@ -30,10 +30,31 @@ export type ClientCase = {
|
|
|
30
30
|
/** The World's proxy in front of a pack served on `served`: it ends the caller's TLS (here, none was begun) and forwards
|
|
31
31
|
* each request and socket upgrade to the pack with `x-forwarded-proto: https`, the vendor's Host unchanged, as a World's
|
|
32
32
|
* proxy forwards a caller of the vendor's https host (twin-fetch.ts, twinPublicBase: the links and socket URLs the pack
|
|
33
|
-
* answers are then the vendor's secure ones).
|
|
34
|
-
export declare function worldProxy(served: number
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
* answers are then the vendor's secure ones). Its stop settles every connection it opened. */
|
|
34
|
+
export declare function worldProxy(served: number, observe?: (request: {
|
|
35
|
+
url: string;
|
|
36
|
+
headers: Headers;
|
|
37
|
+
}, answer: {
|
|
38
|
+
status: number;
|
|
39
|
+
}) => void): Promise<{
|
|
40
|
+
port: number;
|
|
41
|
+
stop: () => Promise<void>;
|
|
42
|
+
}>;
|
|
43
|
+
/** A served socket either opens within its five-second handshake or closes under the same owner. */
|
|
44
|
+
export declare function openWebSocket(socket: WebSocket): Promise<boolean>;
|
|
45
|
+
/** One request and its complete body share the check's ten-second lifetime, including caller cancellation. */
|
|
46
|
+
export declare function readHttpResponse(fetcher: (request: Request) => Promise<Response>, request: Request): Promise<{
|
|
47
|
+
status: number;
|
|
48
|
+
headers: Record<string, string>;
|
|
49
|
+
text: string;
|
|
50
|
+
bodyBytes: Uint8Array;
|
|
51
|
+
bodyError?: {
|
|
52
|
+
message: string;
|
|
53
|
+
cancelled: boolean;
|
|
54
|
+
};
|
|
55
|
+
}>;
|
|
56
|
+
/** HTTP to a served pack, with the vendor Host and manual redirects. Headers resolve before the streamed body;
|
|
57
|
+
* its caller's abort signal owns the fresh connection until the body ends or is cancelled. */
|
|
37
58
|
export declare function servedHttpFetch(port: number): typeof fetch;
|
|
38
59
|
/** The context for a pack reached at `port` of this machine (the World's proxy in front of it). */
|
|
39
60
|
/** `raw`: a raw protocol's served port (SMTP's listener), which a connection reaches directly, as a World passes a raw TCP
|